<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Wayne X.Y. Blog</title>
    <link>/en/</link>
    <description>Recent content on Wayne X.Y. Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/en/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>VocabularyTest: Building My Own English Vocabulary Practice Tool</title>
      <link>/en/2026/05/05/vocabulary-test/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/05/05/vocabulary-test/</guid>
      <description>&lt;h2 id=&#34;why-build-this&#34;&gt;Why Build This?&lt;/h2&gt;&#xA;&lt;p&gt;Vocabulary memorization is probably the most tedious part of learning English. There are plenty of apps out there, but they all seem to have the same problems — too many ads, overcomplicated interfaces, or no way to practice the specific words you care about.&lt;/p&gt;&#xA;&lt;p&gt;So I built my own.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://vocabulary-test.wayne-xy.com/&#34;&gt;VocabularyTest&lt;/a&gt;&lt;/strong&gt; is my latest side project: a lightweight English vocabulary quiz web app with one goal — open it, practice, and move on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NVIDIA NemoClaw: The Open-Source Platform Bringing Enterprise-Grade Guardrails to OpenClaw</title>
      <link>/en/2026/03/17/nemoclaw-enterprise-ai-agents/</link>
      <pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/03/17/nemoclaw-enterprise-ai-agents/</guid>
      <description>&lt;h1 id=&#34;nvidia-nemoclaw-the-open-source-platform-bringing-enterprise-grade-guardrails-to-openclaw&#34;&gt;NVIDIA NemoClaw: The Open-Source Platform Bringing Enterprise-Grade Guardrails to OpenClaw&lt;/h1&gt;&#xA;&lt;p&gt;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/26-03-17-post/nemoclaw-infographic_en.png&#34; alt=&#34;NemoClaw Infographic by NotebookLM&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;📚 &lt;strong&gt;Research methodology&lt;/strong&gt;: All content in this article was compiled using &lt;strong&gt;Google NotebookLM&lt;/strong&gt;, with the infographic also auto-generated by NotebookLM. Sources include NVIDIA official technical documentation and reporting from multiple tech media outlets.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generative AI is undergoing a paradigm shift—evolving from traditional command-and-response systems into &lt;strong&gt;Agentic AI&lt;/strong&gt; capable of autonomous reasoning, planning, and action. However, bringing AI agents from prototype to large-scale production introduces significant hurdles: model drift, security compliance, and compute costs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding an Interactive Travel Map to Hugo Blog (Leaflet &#43; JSON)</title>
      <link>/en/2026/03/10/travel-map-leaflet-hugo/</link>
      <pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/03/10/travel-map-leaflet-hugo/</guid>
      <description>&lt;h1 id=&#34;adding-an-interactive-travel-map-to-hugo-blog-leaflet--json&#34;&gt;Adding an Interactive Travel Map to Hugo Blog (Leaflet + JSON)&lt;/h1&gt;&#xA;&lt;p&gt;Recently, I wanted to add an interactive map to the top of my blog&amp;rsquo;s Travel page to mark the places I&amp;rsquo;ve visited. After some consideration, I decided to use the open-source and lightweight Leaflet.js, paired with a custom JSON file to manage the locations and marker colors.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-implementation-goals&#34;&gt;🗺️ Implementation Goals&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pin a map to the top of &lt;a href=&#34;/en/life/travel/&#34;&gt;&lt;code&gt;/life/travel&lt;/code&gt;&lt;/a&gt; to display the countries and places I&amp;rsquo;ve visited.&lt;/li&gt;&#xA;&lt;li&gt;Centrally manage location data (including English and Chinese names, latitude, longitude, and custom colors) via a JSON file.&lt;/li&gt;&#xA;&lt;li&gt;Use Leaflet.js to render the map, and automatically calculate the zoom boundaries (&lt;code&gt;fitBounds&lt;/code&gt;) based on the JSON data to perfectly fit all markers.&lt;/li&gt;&#xA;&lt;li&gt;Encapsulate the map into a Hugo Shortcode &lt;code&gt;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://unpkg.com/leaflet@1.9.4/dist/leaflet.css&#34;&#xA;    integrity=&#34;sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=&#34; crossorigin=&#34;&#34; /&gt;&#xA;&lt;script src=&#34;https://unpkg.com/leaflet@1.9.4/dist/leaflet.js&#34;&#xA;    integrity=&#34;sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=&#34; crossorigin=&#34;&#34;&gt;&lt;/script&gt;&#xA;&#xA;&lt;div id=&#34;travel-map&#34; style=&#34;height: 400px; width: 100%; border-radius: 8px; margin-bottom: 2rem; z-index: 1;&#34;&gt;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    document.addEventListener(&#34;DOMContentLoaded&#34;, function () {&#xA;        &#xA;        delete L.Icon.Default.prototype._getIconUrl;&#xA;        L.Icon.Default.mergeOptions({&#xA;            iconRetinaUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon-2x.png&#39;,&#xA;            iconUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png&#39;,&#xA;            shadowUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png&#39;,&#xA;        });&#xA;&#xA;        var travelData = [{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:25.033,&#34;lng&#34;:121.5654,&#34;name_en&#34;:&#34;Taipei (Taiwan)&#34;,&#34;name_zh&#34;:&#34;台北 (台灣)&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.5902,&#34;lng&#34;:130.4017,&#34;name_en&#34;:&#34;Fukuoka City&#34;,&#34;name_zh&#34;:&#34;福岡市&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.2662,&#34;lng&#34;:131.3537,&#34;name_en&#34;:&#34;Yufuin&#34;,&#34;name_zh&#34;:&#34;由布院&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.2794,&#34;lng&#34;:131.5015,&#34;name_en&#34;:&#34;Beppu&#34;,&#34;name_zh&#34;:&#34;別府&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.173,&#34;lng&#34;:131.226,&#34;name_en&#34;:&#34;Kokonoe&#34;,&#34;name_zh&#34;:&#34;九重&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.0805,&#34;lng&#34;:131.1441,&#34;name_en&#34;:&#34;Kurokawa Onsen&#34;,&#34;name_zh&#34;:&#34;黑川溫泉&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:32.8062,&#34;lng&#34;:130.7058,&#34;name_en&#34;:&#34;Kumamoto&#34;,&#34;name_zh&#34;:&#34;熊本&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.1654,&#34;lng&#34;:130.4137,&#34;name_en&#34;:&#34;Yanagawa&#34;,&#34;name_zh&#34;:&#34;柳川&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.5215,&#34;lng&#34;:130.5348,&#34;name_en&#34;:&#34;Dazaifu&#34;,&#34;name_zh&#34;:&#34;太宰府&#34;}];&#xA;    var lang = &#34;en&#34;;&#xA;&#xA;    var map = L.map(&#39;travel-map&#39;, {&#xA;        scrollWheelZoom: true&#xA;    });&#xA;&#xA;    L.tileLayer(&#39;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&#39;, {&#xA;        attribution: &#39;&amp;copy; &lt;a href=&#34;https://www.openstreetmap.org/copyright&#34;&gt;OpenStreetMap&lt;/a&gt; contributors&#39;&#xA;    }).addTo(map);&#xA;&#xA;    var bounds = [];&#xA;&#xA;    if (travelData &amp;&amp; travelData.length &gt; 0) {&#xA;        travelData.forEach(function (loc) {&#xA;            var name = lang === &#34;en&#34; ? loc.name_en : loc.name_zh;&#xA;            var markerOptions = {};&#xA;            if (loc.color) {&#xA;                markerOptions.icon = new L.Icon({&#xA;                    iconUrl: &#39;https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-&#39; + loc.color + &#39;.png&#39;,&#xA;                    shadowUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png&#39;,&#xA;                    iconSize: [25, 41],&#xA;                    iconAnchor: [12, 41],&#xA;                    popupAnchor: [1, -34],&#xA;                    shadowSize: [41, 41]&#xA;                });&#xA;            }&#xA;            var marker = L.marker([loc.lat, loc.lng], markerOptions).addTo(map)&#xA;                .bindPopup(&#34;&lt;b&gt;&#34; + name + &#34;&lt;/b&gt;&#34;);&#xA;            bounds.push([loc.lat, loc.lng]);&#xA;        });&#xA;        map.fitBounds(bounds, { padding: [50, 50] });&#xA;    } else {&#xA;        map.setView([23.6978, 120.9605], 5); &#xA;    }&#xA;});&#xA;&lt;/script&gt;&lt;/code&gt; to easily reuse it across different language pages.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;-creating-the-data-file-data-layer&#34;&gt;💾 Creating the Data File (Data Layer)&lt;/h2&gt;&#xA;&lt;p&gt;First, create a &lt;code&gt;travel.json&lt;/code&gt; file under the &lt;code&gt;data/&lt;/code&gt; directory of your Hugo project. If you have new trips in the future, you just need to update this file without touching any code:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solving Load Failed Error for Godot HTML5 Exports</title>
      <link>/en/2026/03/03/godot-html5-export-load-failed/</link>
      <pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/03/03/godot-html5-export-load-failed/</guid>
      <description>&lt;h1 id=&#34;solving-load-failed-error-for-godot-html5-exports&#34;&gt;Solving Load Failed Error for Godot HTML5 Exports&lt;/h1&gt;&#xA;&lt;p&gt;When making a game with Godot (using version Godot 4.6), I wanted to test exporting it to the web. However, simply opening the exported &lt;code&gt;.html&lt;/code&gt; file results in a &lt;code&gt;load failed&lt;/code&gt; error. This article documents how to solve this issue by setting up a simple Python server.&lt;/p&gt;&#xA;&lt;p&gt;After drawing a simple map, test exporting HTML5 package&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/03-03-post/export_package.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/03-03-post/package_content.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Directly open html file&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/03-03-post/error.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-the-solution&#34;&gt;🛠️ The Solution&lt;/h2&gt;&#xA;&lt;p&gt;This problem is primarily caused by modern browser security restrictions (especially mechanisms like cross-origin isolation targeting SharedArrayBuffer etc.) causing the file opening to fail to load Godot&amp;rsquo;s game engine environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Micro-World: Playground Pixel Art and Pathfinding Implementation</title>
      <link>/en/2026/02/26/playground-pixel-art-implementation/</link>
      <pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/02/26/playground-pixel-art-implementation/</guid>
      <description>&lt;h1 id=&#34;building-a-micro-world-playground-pixel-art-and-pathfinding-implementation&#34;&gt;Building a Micro-World: Playground Pixel Art and Pathfinding Implementation&lt;/h1&gt;&#xA;&lt;p&gt;&#xA;  &lt;img src=&#34;/img/playground/playground_overview.png&#34; alt=&#34;Playground Overview&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Recently, while coding, I came across an interesting project on GitHub called &lt;a href=&#34;https://github.com/pablodelucca/pixel-agents&#34;&gt;Pixel Agents&lt;/a&gt;. It simulates AI agents during coding as tiny pixel-style characters working in an office, which looks incredibly cute 😆. Because I really love pixel art, I wondered if I could bring a similar vibe to my own website. That&amp;rsquo;s how this &lt;a href=&#34;/en/playground/&#34;&gt;Playground&lt;/a&gt; came to be.&lt;/p&gt;&#xA;&lt;p&gt;This post will share the implementation details behind this little world, covering how to render crisp pixel art using HTML5 Canvas, designing the states for the characters, and how they navigate the room (BFS pathfinding algorithm).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Discord AI Chatbot with Golang &#43; Google Gemini API</title>
      <link>/en/2026/02/11/discord-chatbot-gemini/</link>
      <pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/02/11/discord-chatbot-gemini/</guid>
      <description>&lt;h1 id=&#34;building-a-discord-ai-chatbot-with-golang--google-gemini-api&#34;&gt;Building a Discord AI Chatbot with Golang + Google Gemini API&lt;/h1&gt;&#xA;&lt;p&gt;In this article, we will use &lt;strong&gt;Golang&lt;/strong&gt; combined with the &lt;strong&gt;Google Gemini API&lt;/strong&gt; to implement a Discord chatbot.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-prerequisites&#34;&gt;🛠️ Prerequisites&lt;/h2&gt;&#xA;&lt;p&gt;Before we start, please ensure you have the following development environment and API keys ready:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Golang Environment&lt;/strong&gt;: Install Go 1.25 or a later version.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Discord Bot Token&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go to the &lt;a href=&#34;https://discord.com/developers/applications&#34;&gt;Discord Developer Portal&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Create a new Application and add a Bot.&lt;/li&gt;&#xA;&lt;li&gt;Get the Bot Token (keep it safe, do not leak it).&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/02-11-post/discord-chatbot-token.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Enable &lt;code&gt;Message Content Intent&lt;/code&gt; permission so the bot can read user messages.&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/02-11-post/discord-chatbot-message.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Invite the bot to your Discord server via OAuth2.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Select scopes&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/02-11-post/discord-chatbot-OAuth2-scope.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Select permissions&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/02-11-post/discord-chatbot-OAuth2-permission.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Generate URL and invite the bot&#xA;&#xA;  &lt;img src=&#34;https://static.wayne-xy.com/02-11-post/discord-chatbot-OAuth2-url.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠️ Note: The bot will be offline at this stage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My First Life Post</title>
      <link>/en/life/games/</link>
      <pubDate>Thu, 05 Feb 2026 16:00:00 +0800</pubDate>
      <guid>/en/life/games/</guid>
      <description>&lt;h1 id=&#34;hello-life&#34;&gt;Hello Life&lt;/h1&gt;&#xA;&lt;p&gt;This is a test post in the Life section. It should appear in the Life menu but not on the main Tech homepage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Travel</title>
      <link>/en/life/travel/</link>
      <pubDate>Thu, 05 Feb 2026 16:00:00 +0800</pubDate>
      <guid>/en/life/travel/</guid>
      <description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://unpkg.com/leaflet@1.9.4/dist/leaflet.css&#34;&#xA;    integrity=&#34;sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=&#34; crossorigin=&#34;&#34; /&gt;&#xA;&lt;script src=&#34;https://unpkg.com/leaflet@1.9.4/dist/leaflet.js&#34;&#xA;    integrity=&#34;sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=&#34; crossorigin=&#34;&#34;&gt;&lt;/script&gt;&#xA;&#xA;&lt;div id=&#34;travel-map&#34; style=&#34;height: 400px; width: 100%; border-radius: 8px; margin-bottom: 2rem; z-index: 1;&#34;&gt;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    document.addEventListener(&#34;DOMContentLoaded&#34;, function () {&#xA;        &#xA;        delete L.Icon.Default.prototype._getIconUrl;&#xA;        L.Icon.Default.mergeOptions({&#xA;            iconRetinaUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon-2x.png&#39;,&#xA;            iconUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png&#39;,&#xA;            shadowUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png&#39;,&#xA;        });&#xA;&#xA;        var travelData = [{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:25.033,&#34;lng&#34;:121.5654,&#34;name_en&#34;:&#34;Taipei (Taiwan)&#34;,&#34;name_zh&#34;:&#34;台北 (台灣)&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.5902,&#34;lng&#34;:130.4017,&#34;name_en&#34;:&#34;Fukuoka City&#34;,&#34;name_zh&#34;:&#34;福岡市&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.2662,&#34;lng&#34;:131.3537,&#34;name_en&#34;:&#34;Yufuin&#34;,&#34;name_zh&#34;:&#34;由布院&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.2794,&#34;lng&#34;:131.5015,&#34;name_en&#34;:&#34;Beppu&#34;,&#34;name_zh&#34;:&#34;別府&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.173,&#34;lng&#34;:131.226,&#34;name_en&#34;:&#34;Kokonoe&#34;,&#34;name_zh&#34;:&#34;九重&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.0805,&#34;lng&#34;:131.1441,&#34;name_en&#34;:&#34;Kurokawa Onsen&#34;,&#34;name_zh&#34;:&#34;黑川溫泉&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:32.8062,&#34;lng&#34;:130.7058,&#34;name_en&#34;:&#34;Kumamoto&#34;,&#34;name_zh&#34;:&#34;熊本&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.1654,&#34;lng&#34;:130.4137,&#34;name_en&#34;:&#34;Yanagawa&#34;,&#34;name_zh&#34;:&#34;柳川&#34;},{&#34;color&#34;:&#34;red&#34;,&#34;lat&#34;:33.5215,&#34;lng&#34;:130.5348,&#34;name_en&#34;:&#34;Dazaifu&#34;,&#34;name_zh&#34;:&#34;太宰府&#34;}];&#xA;    var lang = &#34;en&#34;;&#xA;&#xA;    var map = L.map(&#39;travel-map&#39;, {&#xA;        scrollWheelZoom: true&#xA;    });&#xA;&#xA;    L.tileLayer(&#39;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&#39;, {&#xA;        attribution: &#39;&amp;copy; &lt;a href=&#34;https://www.openstreetmap.org/copyright&#34;&gt;OpenStreetMap&lt;/a&gt; contributors&#39;&#xA;    }).addTo(map);&#xA;&#xA;    var bounds = [];&#xA;&#xA;    if (travelData &amp;&amp; travelData.length &gt; 0) {&#xA;        travelData.forEach(function (loc) {&#xA;            var name = lang === &#34;en&#34; ? loc.name_en : loc.name_zh;&#xA;            var markerOptions = {};&#xA;            if (loc.color) {&#xA;                markerOptions.icon = new L.Icon({&#xA;                    iconUrl: &#39;https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-&#39; + loc.color + &#39;.png&#39;,&#xA;                    shadowUrl: &#39;https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png&#39;,&#xA;                    iconSize: [25, 41],&#xA;                    iconAnchor: [12, 41],&#xA;                    popupAnchor: [1, -34],&#xA;                    shadowSize: [41, 41]&#xA;                });&#xA;            }&#xA;            var marker = L.marker([loc.lat, loc.lng], markerOptions).addTo(map)&#xA;                .bindPopup(&#34;&lt;b&gt;&#34; + name + &#34;&lt;/b&gt;&#34;);&#xA;            bounds.push([loc.lat, loc.lng]);&#xA;        });&#xA;        map.fitBounds(bounds, { padding: [50, 50] });&#xA;    } else {&#xA;        map.setView([23.6978, 120.9605], 5); &#xA;    }&#xA;});&#xA;&lt;/script&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;2026-02-15--2026-02-19-kyushu-japan&#34;&gt;2026-02-15 ~ 2026-02-19 Kyushu, Japan&lt;/h1&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css&#34; /&gt;&#xA;    &lt;style&gt;&#xA;        .travel-swiper-container {&#xA;            width: 100%;&#xA;            max-width: 800px;&#xA;            margin: 2rem auto;&#xA;            border-radius: 12px;&#xA;            overflow: hidden;&#xA;            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);&#xA;            background-color: #f8f9fa;&#xA;             &#xA;        }&#xA;&#xA;        [data-theme=&#34;dark&#34;] .travel-swiper-container {&#xA;            background-color: #212529;&#xA;             &#xA;            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);&#xA;        }&#xA;&#xA;        .travel-swiper {&#xA;            width: 100%;&#xA;            height: 100%;&#xA;            aspect-ratio: 4 / 3;&#xA;             &#xA;        }&#xA;&#xA;        .travel-swiper .swiper-slide {&#xA;            text-align: center;&#xA;            font-size: 18px;&#xA;            background: transparent;&#xA;            display: flex;&#xA;            justify-content: center;&#xA;            align-items: center;&#xA;        }&#xA;&#xA;        .travel-swiper .swiper-slide img {&#xA;            display: block;&#xA;            width: 100%;&#xA;            height: 100%;&#xA;            object-fit: contain;&#xA;        }&#xA;&#xA;         &#xA;        .travel-swiper .swiper-pagination-bullet {&#xA;            background: rgba(255, 255, 255, 0.8);&#xA;            opacity: 0.5;&#xA;        }&#xA;&#xA;        .travel-swiper .swiper-pagination-bullet-active {&#xA;            background: #fff;&#xA;            opacity: 1;&#xA;        }&#xA;&#xA;         &#xA;        .travel-swiper .swiper-button-next,&#xA;        .travel-swiper .swiper-button-prev {&#xA;            color: white;&#xA;            text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);&#xA;            background-color: rgba(0, 0, 0, 0.2);&#xA;            width: 40px;&#xA;            height: 40px;&#xA;            border-radius: 50%;&#xA;            transition: background-color 0.2s;&#xA;        }&#xA;&#xA;        .travel-swiper .swiper-button-next:hover,&#xA;        .travel-swiper .swiper-button-prev:hover {&#xA;            background-color: rgba(0, 0, 0, 0.5);&#xA;        }&#xA;&#xA;        .travel-swiper .swiper-button-next::after,&#xA;        .travel-swiper .swiper-button-prev::after {&#xA;            font-size: 18px;&#xA;        }&#xA;&#xA;        .swiper-lazy-preloader {&#xA;            border: 4px solid var(--swiper-theme-color, var(--swiper-preloader-color, #fff));&#xA;            border-top-color: transparent;&#xA;        }&#xA;    &lt;/style&gt;&#xA;    &lt;script type=&#34;module&#34;&gt;&#xA;        import Swiper from &#39;https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.mjs&#39;&#xA;&#xA;        if (!window.travelSwiperInitialized) {&#xA;            window.travelSwiperInitialized = true;&#xA;            document.addEventListener(&#39;DOMContentLoaded&#39;, function () {&#xA;                const swipers = document.querySelectorAll(&#39;.travel-swiper&#39;);&#xA;                swipers.forEach(function (swiperElement) {&#xA;                    new Swiper(swiperElement, {&#xA;                        &#xA;                        direction: &#39;horizontal&#39;,&#xA;                        loop: true,&#xA;&#xA;                        &#xA;                        speed: 400,&#xA;&#xA;                        &#xA;                        pagination: {&#xA;                            el: &#39;.swiper-pagination&#39;,&#xA;                            clickable: true,&#xA;                            dynamicBullets: true,&#xA;                        },&#xA;&#xA;                        &#xA;                        navigation: {&#xA;                            nextEl: &#39;.swiper-button-next&#39;,&#xA;                            prevEl: &#39;.swiper-button-prev&#39;,&#xA;                        },&#xA;&#xA;                        &#xA;                        keyboard: {&#xA;                            enabled: true,&#xA;                            onlyInViewport: false,&#xA;                        },&#xA;&#xA;                        &#xA;                        lazyPreloaderClass: &#39;swiper-lazy-preloader&#39;,&#xA;                    });&#xA;                });&#xA;            });&#xA;        }&#xA;    &lt;/script&gt;&#xA;&#xA;    &lt;div class=&#34;travel-swiper-container&#34;&gt;&#xA;        &#xA;        &lt;div class=&#34;swiper travel-swiper&#34;&gt;&#xA;            &#xA;            &lt;div class=&#34;swiper-wrapper&#34;&gt;&#xA;                &lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0182.jpg&#34; alt=&#34;Travel photo IMG_0182.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0195.jpg&#34; alt=&#34;Travel photo IMG_0195.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0229.jpg&#34; alt=&#34;Travel photo IMG_0229.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0235.jpg&#34; alt=&#34;Travel photo IMG_0235.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0242.jpg&#34; alt=&#34;Travel photo IMG_0242.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0253.jpg&#34; alt=&#34;Travel photo IMG_0253.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0328.jpg&#34; alt=&#34;Travel photo IMG_0328.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0329.jpg&#34; alt=&#34;Travel photo IMG_0329.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0369.jpg&#34; alt=&#34;Travel photo IMG_0369.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0381.JPG&#34; alt=&#34;Travel photo IMG_0381.JPG&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0435.JPG&#34; alt=&#34;Travel photo IMG_0435.JPG&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0448.JPG&#34; alt=&#34;Travel photo IMG_0448.JPG&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0463.jpg&#34; alt=&#34;Travel photo IMG_0463.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0484.jpg&#34; alt=&#34;Travel photo IMG_0484.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0494.jpg&#34; alt=&#34;Travel photo IMG_0494.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0544.jpg&#34; alt=&#34;Travel photo IMG_0544.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0545.jpg&#34; alt=&#34;Travel photo IMG_0545.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0572.jpg&#34; alt=&#34;Travel photo IMG_0572.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0574.jpg&#34; alt=&#34;Travel photo IMG_0574.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0576.jpg&#34; alt=&#34;Travel photo IMG_0576.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0641.jpg&#34; alt=&#34;Travel photo IMG_0641.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0657.jpg&#34; alt=&#34;Travel photo IMG_0657.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0669.jpg&#34; alt=&#34;Travel photo IMG_0669.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0676.jpg&#34; alt=&#34;Travel photo IMG_0676.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0745.jpg&#34; alt=&#34;Travel photo IMG_0745.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0749.jpg&#34; alt=&#34;Travel photo IMG_0749.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0751.jpg&#34; alt=&#34;Travel photo IMG_0751.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0771.jpg&#34; alt=&#34;Travel photo IMG_0771.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0781.jpg&#34; alt=&#34;Travel photo IMG_0781.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;div class=&#34;swiper-slide&#34;&gt;&#xA;                    &#xA;                    &lt;img src=&#34;https://static.wayne-xy.com/travel/2026-02-15/IMG_0784.jpg&#34; alt=&#34;Travel photo IMG_0784.jpg&#34; loading=&#34;lazy&#34; /&gt;&#xA;                    &lt;div class=&#34;swiper-lazy-preloader&#34;&gt;&lt;/div&gt;&#xA;                &lt;/div&gt;&lt;/div&gt;&#xA;&#xA;            &#xA;            &lt;div class=&#34;swiper-pagination&#34;&gt;&lt;/div&gt;&#xA;&#xA;            &#xA;            &lt;div class=&#34;swiper-button-prev&#34;&gt;&lt;/div&gt;&#xA;            &lt;div class=&#34;swiper-button-next&#34;&gt;&lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;h3 id=&#34;day-1-0215-sun--departure--arrival-in-fukuoka&#34;&gt;Day 1: 02/15 (Sun) | Departure &amp;amp; Arrival in Fukuoka&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Afternoon:&lt;/strong&gt; Take China Airlines flight to Fukuoka.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Evening:&lt;/strong&gt; Arrive at the airport and head to the hotel for check-in.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Accommodation:&lt;/strong&gt; MITSUI GARDEN HOTEL FUKUOKA NAKASU (福岡三井花園飯店 中洲)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;day-2-0216-mon--wildlife-safari--beppu-ropeway&#34;&gt;Day 2: 02/16 (Mon) | Wildlife Safari &amp;amp; Beppu Ropeway&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Attractions:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Yufuin no Mori:&lt;/strong&gt; Experience the popular sightseeing train (Oita - Yufuin).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kinrin Lake Stroll:&lt;/strong&gt; Explore the Yufuin hot spring town.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Beppu Ropeway:&lt;/strong&gt; Ascend Mount Tsurumi for a panoramic view of Beppu city and Beppu Bay.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Accommodation:&lt;/strong&gt; GRANDVRIO HOTEL BEPPUWAN WAKURA (別府灣和藏)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;day-3-0217-tue--kuju-snow-play--yufuin-charm&#34;&gt;Day 3: 02/17 (Tue) | Kuju Snow Play &amp;amp; Yufuin Charm&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Attractions:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;African Safari (Kyushu Natural Animal Park):&lt;/strong&gt; Ride the Jungle Bus for up-close animal feeding.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kokonoe &amp;ldquo;Yume&amp;rdquo; Grand Suspension Bridge:&lt;/strong&gt; Stroll across Japan&amp;rsquo;s highest pedestrian suspension bridge.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kuju Forest Park Skiing Ground:&lt;/strong&gt; Winter-limited snow sledding fun.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Accommodation:&lt;/strong&gt; TSUETATE ONSEN HIZENYA (杖立觀光肥前屋)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;day-4-0218-wed--kurokawa-onsen-tour--kumamoto-castle&#34;&gt;Day 4: 02/18 (Wed) | Kurokawa Onsen Tour &amp;amp; Kumamoto Castle&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Attractions:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kurokawa Onsen Town:&lt;/strong&gt; Complimentary &amp;ldquo;Nyuto Tegata&amp;rdquo; (Hot Spring Pass).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kumamoto Castle:&lt;/strong&gt; One of Japan&amp;rsquo;s three premier castles.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Sakuranobaba Johsaien:&lt;/strong&gt; Experience castle town culture.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Accommodation:&lt;/strong&gt; HOTEL NIKKO KUMAMOTO (熊本日航飯店)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;day-5-0219-thu--yanagawa-kotatsu-boat-cruise--shopping&#34;&gt;Day 5: 02/19 (Thu) | Yanagawa Kotatsu Boat Cruise &amp;amp; Shopping&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Attractions:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Yanagawa Kotatsu Boat Cruise:&lt;/strong&gt; Enjoy the water city scenery from a small boat equipped with a kotatsu (heated table).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dazaifu Tenmangu Shrine:&lt;/strong&gt; The head shrine of all Tenmangu shrines nationwide.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;LaLaport Fukuoka:&lt;/strong&gt; Free shopping time at the mall (view the life-size Gundam statue).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Evening:&lt;/strong&gt; Head to Fukuoka Airport for the flight back to Taiwan.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;</description>
    </item>
    <item>
      <title>Hugo Image Management: GitHub vs Cloudflare R2</title>
      <link>/en/2026/02/03/storing-asset/</link>
      <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/02/03/storing-asset/</guid>
      <description>&lt;h1 id=&#34;hugo-image-management-github-vs-cloudflare-r2&#34;&gt;Hugo Image Management: GitHub vs Cloudflare R2&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/en/2026/02/01/setup-hugo-blog/&#34;&gt;After setting up my Hugo blog&lt;/a&gt; and registering my own domain, I happily started updating the website via &lt;code&gt;git push&lt;/code&gt;. But looking at the repository contents, I felt that pushing images together seemed a bit off XD. As I continue updating and maintaining the blog, images will inevitably increase, taking up too much space. Plus, if I switch development environments, I&amp;rsquo;d have to re-download a bunch of images locally when pulling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build an Automated Personal Blog with Hugo &#43; Cloudflare Pages</title>
      <link>/en/2026/02/01/setup-hugo-blog/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>/en/2026/02/01/setup-hugo-blog/</guid>
      <description>&lt;h1 id=&#34;build-an-automated-personal-blog-with-hugo--cloudflare-pages&#34;&gt;Build an Automated Personal Blog with Hugo + Cloudflare Pages&lt;/h1&gt;&#xA;&lt;p&gt;Want to create a lightning-fast website that automatically updates every time you &lt;code&gt;git push&lt;/code&gt;? This article will guide you through building a personal blog using the &lt;strong&gt;Hugo&lt;/strong&gt; static site generator combined with &lt;strong&gt;Cloudflare Pages&lt;/strong&gt; automated deployment service.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-why-this-combination&#34;&gt;🛠 Why This Combination?&lt;/h2&gt;&#xA;&lt;p&gt;Originally, I used GitHub Pages for hosting, but since the repository must be public, I decided to switch to Cloudflare Pages connected to my GitHub repo. The setup was simpler than expected, and after each &lt;code&gt;git push&lt;/code&gt;, GitHub Actions automatically runs and updates the website, ensuring everything works properly.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>/en/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/en/about/</guid>
      <description>&lt;h2 id=&#34;about-me&#34;&gt;About Me&lt;/h2&gt;&#xA;&lt;img src=&#34;/img/profile_512.png&#34; width=&#34;150&#34; height=&#34;150&#34; style=&#34;display:block; margin-left:0; margin-bottom:20px; border-radius:5%;&#34; alt=&#34;Profile&#34;&gt;&#xA;&lt;p&gt;Welcome to my blog! This is a platform to record my life.&lt;/p&gt;&#xA;&lt;p&gt;I created this blog because AI development is really fast these days:O, learning new knowledge and technology is too convenient and too fast, but relatively, I often forget what I have learned, so I decided to record it when I have the opportunity.&lt;/p&gt;&#xA;&lt;br style=&#34;clear:both&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;contact&#34;&gt;Contact&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Email&lt;/strong&gt;: &lt;a href=&#34;mailto:WayneLin0128@gmail.com&#34;&gt;WayneLin0128@gmail.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href=&#34;https://github.com/WayneLin0128&#34;&gt;WayneLin0128&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;: &lt;a href=&#34;https://www.linkedin.com/in/waynelin0128&#34;&gt;WayneLin0128&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title></title>
      <link>/en/notes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/en/notes/</guid>
      <description>&lt;h2 id=&#34;learning-notes&#34;&gt;Learning Notes&lt;/h2&gt;&#xA;&lt;p&gt;Coming soon&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Playground</title>
      <link>/en/playground/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/en/playground/</guid>
      <description>&lt;p&gt;Welcome to the Playground — a tiny pixel-art home experiment.&lt;/p&gt;&#xA;&lt;p&gt;In the scene below, you will see a house made of a living room, bedroom, kitchen, and bathroom, with one male and one female character wandering around randomly.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you do not see any movement, wait a few seconds or refresh the page.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;!-- canvas --&gt;&#xA;&lt;h3 id=&#34;credits&#34;&gt;Credits&lt;/h3&gt;&#xA;&lt;p&gt;Some pixel art assets in this playground are from &lt;a href=&#34;https://limezu.itch.io/moderninteriors&#34;&gt;Modern Interiors&lt;/a&gt; by LimeZu.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Posts Archive</title>
      <link>/en/archive/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/en/archive/</guid>
      <description></description>
    </item>
    <item>
      <title>Projects</title>
      <link>/en/project/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/en/project/</guid>
      <description>&lt;h2 id=&#34;projects&#34;&gt;Projects&lt;/h2&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;vocabularytest&#34;&gt;&lt;a href=&#34;https://vocabulary-test.wayne-xy.com/&#34;&gt;VocabularyTest&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;An English vocabulary practice tool that helps users memorize words effectively through quizzes and instant feedback.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;imageeditweb&#34;&gt;&lt;a href=&#34;https://image-edit.wayne-xy.com/&#34;&gt;ImageEditWeb&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;A simple image editing tool that supports cropping, rotating, scaling, filters, and other operations.&lt;/p&gt;&#xA;&lt;hr&gt;</description>
    </item>
  </channel>
</rss>
