<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog</title><link>https://blog.ast.moe/en/blog/</link><description>Recent posts: Gorimuchu</description><generator>Hugo</generator><item><title>I tried Sarashina Translate API for my technical blog posts</title><link>https://blog.ast.moe/en/blog/2026-10-15/</link><pubDate>Thu, 15 Oct 2026 20:35:05 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-15/</guid><description>&lt;p&gt;I added an English version to my blog. After implementing the language switch on the site, I still had to turn 51 technical articles from 2026 into individual English posts. I could write short introductions by hand, but I needed another way to translate long articles full of code and links. So I tried &lt;a href="https://sarashina.ai/"&gt;Sarashina&lt;/a&gt; and its &lt;a href="https://docs.sarashina.ai/api-reference/translate"&gt;Translate API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The API helped me translate the prose. I could not paste its output straight into Hugo, though. Checking the Markdown links, shortcodes, and code examples against the Japanese originals took more work than I expected.&lt;/p&gt;</description></item><item><title>After implementing Omoikane’s DOM and exception notifications, we ended up investigating copying and garbage‑collection lifetimes as well.</title><link>https://blog.ast.moe/en/blog/2026-10-10/</link><pubDate>Sat, 10 Oct 2026 17:42:29 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-10/</guid><description>&lt;p&gt;We added DOM operations such as &lt;code&gt;before()&lt;/code&gt; and &lt;code&gt;replaceChildren()&lt;/code&gt; to Omoikane, along with &lt;code&gt;window.onerror&lt;/code&gt; and notifications for unhandled Promise rejections. [&lt;a href="https://github.com/ieee0824/omoikane/pull/1322"&gt;PR #1322&lt;/a&gt;](&lt;a href="https://github.com/ieee0824/omoikane/pull/1322"&gt;https://github.com/ieee0824/omoikane/pull/1322&lt;/a&gt;) This is about that pull request. The initial issue was straightforward: the page lacked the APIs it normally calls. However, as we progressed with implementation and testing, we ended up fixing issues such as copying sibling lists when inserting HTML text, rebuilding the entire document after UTF‑16 appends, creating unnecessary iframe realms, and even addressing insufficient GC roots for Promises.&lt;/p&gt;</description></item><item><title>Integrating Jev into Izanagi’s behavioral analysis</title><link>https://blog.ast.moe/en/blog/2026-10-09/</link><pubDate>Fri, 09 Oct 2026 10:03:32 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-09/</guid><description>&lt;p&gt;In the previous article (&lt;a href="https://blog.ast.moe/en/blog/2026-10-08-3/"&gt;source&lt;/a&gt;), we introduced Izanagi, which isolates and runs development commands while recording file accesses and network communications. This time, we discuss the addition of behavior analysis using Jev.&lt;/p&gt;
&lt;p&gt;Existing detection rules issue warnings based on a single action—such as an attempt to open a secret file, a connection to an address outside the allowed list, or the execution of an unexpected command. In addition, we have made it possible to link multiple actions together in chronological order.&lt;/p&gt;</description></item><item><title>What can be done with Izanagi</title><link>https://blog.ast.moe/en/blog/2026-10-08-3/</link><pubDate>Thu, 08 Oct 2026 22:24:12 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-08-3/</guid><description>&lt;p&gt;When you run &lt;code&gt;npm install&lt;/code&gt;, it not only downloads the package but may also execute scripts that the package provides. If you run that code in your regular development environment, you can access files readable by the executing user and the environment variables passed to the process.&lt;/p&gt;
&lt;p&gt;To isolate such development commands and track what they access, we have built Izanagi in Rust (&lt;a href="https://github.com/ieee0824/izanagi"&gt;source&lt;/a&gt;). It records file accesses, network communications, and child‑process launches so you can examine the behavior of the executed code.&lt;/p&gt;</description></item><item><title>WeakMap and Generational Garbage Collection</title><link>https://blog.ast.moe/en/blog/2026-10-08-2/</link><pubDate>Thu, 08 Oct 2026 21:52:45 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-08-2/</guid><description>&lt;p&gt;Opening &lt;code&gt;https://tokyo6.tokyo/&lt;/code&gt; with Omoikane caused a bug where the script terminated with a SIGSEGV during execution. Issue #1223 (&lt;a href="https://github.com/ieee0824/omoikane/issues/1223"&gt;issue #1223&lt;/a&gt;) reproduces the problem not only in the GUI but also in the screenshot feature that renders the screen to an image. The backtrace from the debug build reproduced on a Linux aarch64 Docker development environment with Xvfb showed that Boa’s garbage collector halted while traversing references to an object.&lt;/p&gt;
&lt;p&gt;The fix in &lt;a href="https://github.com/ieee0824/omoikane/pull/1260"&gt;PR #1260&lt;/a&gt; (&lt;a href="https://github.com/ieee0824/omoikane/pull/1260"&gt;PR #1260&lt;/a&gt;) addressed the combination of an ephemeron—a conditional reference—and the generational garbage collector. A young object that was referenced by an older object was being reclaimed during the minor GC that followed a major GC. Subsequently, the major GC followed a reference that had already been freed, causing a crash.&lt;/p&gt;</description></item><item><title>What is a WeakMap?</title><link>https://blog.ast.moe/en/blog/2026-10-08/</link><pubDate>Thu, 08 Oct 2026 21:50:47 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-08/</guid><description>&lt;p&gt;JavaScript has &lt;code&gt;Map&lt;/code&gt;, which stores key‑value pairs, and a similarly named &lt;code&gt;WeakMap&lt;/code&gt;. Both can be registered with &lt;code&gt;set()&lt;/code&gt; and retrieved with &lt;code&gt;get()&lt;/code&gt;. However, WeakMap does not have &lt;code&gt;size&lt;/code&gt; nor &lt;code&gt;keys()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A WeakMap is a mechanism that associates information with objects without keeping the objects in memory solely because of that association. The term “weak” refers not to the data’s reliability or the accuracy of lookups, but to how the references to the keys are treated.&lt;/p&gt;</description></item><item><title>I investigated how the YubiKey works.</title><link>https://blog.ast.moe/en/blog/2026-10-07/</link><pubDate>Thu, 08 Oct 2026 06:58:01 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-07/</guid><description>&lt;p&gt;I was just wondering how a YubiKey actually performs authentication.&lt;/p&gt;
&lt;p&gt;I started using the YubiKey 5C NFC in 2023, and later I also bought a USB‑A model. At the time I introduced it to protect my 1Password account, planning to register one key for everyday carry and another as a spare kept at home. (&lt;a href="https://blog.ast.moe/blog/2023-01-27/"&gt;source&lt;/a&gt;) (&lt;a href="https://blog.ast.moe/blog/2023-03-07/"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;You plug it into a USB port and touch it when needed. With a smartphone you use NFC. The user interaction is minimal, but I’ve never taken the time to understand exactly what’s happening behind the scenes.&lt;/p&gt;</description></item><item><title>I actually boarded the plane...</title><link>https://blog.ast.moe/en/blog/2026-10-06/</link><pubDate>Wed, 07 Oct 2026 22:19:41 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-06/</guid><description>&lt;p&gt;October 6 was the day I left Hokkaido.&lt;/p&gt;
&lt;p&gt;Perhaps because I ate around 600 g of jingisukan yesterday, my stomach felt a little heavy in the morning. Am I getting old?&lt;/p&gt;
&lt;p&gt;I left Otaru for New Chitose Airport. See you again someday!&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-10-06/IMG_6112_hu_bc3446c452e68fd2.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-10-06/IMG_6112_hu_90e3af48a14426e3.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-10-06/IMG_6112_hu_f7302dfc64c4cde.jpeg"
alt="Until next time, Karin"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Until next time, Karin&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="first-miku"&gt;First, Miku&lt;/h2&gt;
&lt;p&gt;At the airport I went to admire Miku.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-10-06/IMG_6230_hu_f552995091920ce1.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-10-06/IMG_6230_hu_337ef46fa0bfd407.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-10-06/IMG_6230_hu_4eb48f452def5207.jpeg"
alt="Saying hello to Miku"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Saying hello to Miku&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I spotted some Teto merchandise in the shop and looked back at it about thirty-one times.&lt;/p&gt;</description></item><item><title>Sapporo Marathon day</title><link>https://blog.ast.moe/en/blog/2026-10-04/</link><pubDate>Sun, 04 Oct 2026 23:34:42 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-04/</guid><description>&lt;p&gt;I&amp;rsquo;m running the Sapporo Marathon today. That&amp;rsquo;s why &lt;a href="https://blog.ast.moe/en/blog/2026-10-02/"&gt;I came to Hokkaido two days ago&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The morning was cold. Coming from Shikoku, I really felt the temperature difference.&lt;/p&gt;
&lt;p&gt;On the way to Makomanai, the station name sounded like “neko mamire” (“covered in cats”) to me. Perhaps I&amp;rsquo;m tired already.&lt;/p&gt;
&lt;p&gt;The weather was good and the leaves were changing color. It really is autumn.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-10-04/HTvSgenbQAAkW50_hu_39bf22552514aa44.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-10-04/HTvSgenbQAAkW50_hu_df49c77c0bd28e55.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-10-04/HTvSgenbQAAkW50_hu_250123cadf9b2d03.jpeg"
alt="Autumn leaves in the morning"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Autumn leaves in the morning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="at-the-venue-in-the-morning"&gt;At the venue in the morning&lt;/h2&gt;
&lt;p&gt;I made it to the venue without oversleeping. First hurdle cleared.&lt;/p&gt;</description></item><item><title>A day in Otaru before the marathon</title><link>https://blog.ast.moe/en/blog/2026-10-03/</link><pubDate>Sat, 03 Oct 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-03/</guid><description>&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2026-10-02/"&gt;I arrived in Otaru yesterday&lt;/a&gt;. Today I&amp;rsquo;m going to wander around town.&lt;/p&gt;
&lt;p&gt;I dropped off my luggage and went looking for breakfast. If it hadn&amp;rsquo;t been raining, I might have gone to the Rinyu Morning Market, but I headed to Ishi to Tetsu instead.&lt;/p&gt;
&lt;p&gt;Except they weren&amp;rsquo;t serving breakfast today and wouldn&amp;rsquo;t open until eleven. Oh. I&amp;rsquo;d come back for lunch.&lt;/p&gt;
&lt;h2 id="a-quick-trip-to-yoichi"&gt;A quick trip to Yoichi&lt;/h2&gt;
&lt;p&gt;In the meantime, I went to Yoichi to buy fuel. Whisky, that is.&lt;/p&gt;</description></item><item><title>Back to Otaru for the first time since June</title><link>https://blog.ast.moe/en/blog/2026-10-02/</link><pubDate>Fri, 02 Oct 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-02/</guid><description>&lt;p&gt;I felt like getting on a plane and going somewhere far away today.&lt;/p&gt;
&lt;p&gt;First, some fuel for the trip.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-10-02/IMG_6025_hu_95112c1b7e757873.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-10-02/IMG_6025_hu_a5fb0cfbe6028d83.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-10-02/IMG_6025_hu_d3aa736b92151ab1.jpeg"
alt="Fuel before boarding"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Fuel before boarding&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Boarding went smoothly. I brought my Karin acrylic stand with me.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-10-02/IMG_6032_hu_1c8ed7c3e50cc2a.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-10-02/IMG_6032_hu_9b9e968b85f887ef.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-10-02/IMG_6032_hu_d03ffee5cabe8710.jpeg"
alt="Karin by the airplane window"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Karin by the airplane window&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I flew from Takamatsu to Haneda, then from Haneda to New Chitose.&lt;/p&gt;
&lt;p&gt;The sun really does set earlier as you go north. It was only a little past five, but the sky looked as though night was catching up with us.&lt;/p&gt;</description></item><item><title>It's not about generating text. What kind of AI is Jev?</title><link>https://blog.ast.moe/en/blog/2026-10-01/</link><pubDate>Thu, 01 Oct 2026 11:33:14 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-10-01/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Even if you encounter the name “Jev,” it’s not immediately clear whether it’s an AI that answers questions in chat, a search model, or a scaled‑down version of an existing large language model. I myself built a MCP server that uses Jev, but knowing how to call its API and understanding its return values are separate issues.&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;
&lt;a target="_blank" href="https://docs.typesafe.ai/introduction"&gt;
Jev from TypeSafe AI
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
is a model that, given input information, returns a judgment on predefined questions. Rather than producing free‑form explanatory text, it returns values suitable for programmatic handling—such as the probability of a “yes” answer, probabilities for each candidate, tiered ratings, and so on. For example, you feed it a query text and have it evaluate whether it concerns an invoice inquiry, a shipping inquiry, or whether it needs to be routed to a specific person. Rather than reading the answer and continuing the conversation, the usage is that the code receiving the answer decides the next action to take.&lt;/p&gt;</description></item><item><title>Static analysis of explicit purity constraints in Go: Design and verification of mikoto</title><link>https://blog.ast.moe/en/blog/2026-09-30-2/</link><pubDate>Wed, 30 Sep 2026 22:38:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-30-2/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;I created mikoto (&lt;a href="https://github.com/ieee0824/mikoto"&gt;source&lt;/a&gt;), a tool that checks the length of Go functions and the purity constraints explicitly specified for functions. By annotating a function declaration with &lt;code&gt;//mikoto:pure&lt;/code&gt;, it inspects inputs and outputs that use only value types, access to package variables, modifications of referenced objects, pointer indirection, call targets, and so on. The implementation uses Go’s AST and type information, limiting the scope of inspection to function declarations within the same package.&lt;/p&gt;</description></item><item><title>The object returned by Boa’s getter was collected by the garbage collector while the inline cache was being updated.</title><link>https://blog.ast.moe/en/blog/2026-09-30/</link><pubDate>Wed, 30 Sep 2026 08:12:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-30/</guid><description>&lt;p&gt;When running the test for a custom element associated with a form in Omoikane’s Web Platform Tests (WPT), it caused a SIGSEGV. The first occurrence was in a configuration that included the JIT, so we initially suspected an interaction between Boa’s JIT or its garbage collector. However, even when the JIT was disabled, the same crash could be reproduced (&lt;a href="https://github.com/ieee0824/omoikane/issues/858#issuecomment-5890658215"&gt;issue #858&lt;/a&gt;), and ultimately the problem lay in a tiny interval between when the getter’s returned object was produced and when it was stored in the VM’s registers.&lt;/p&gt;</description></item><item><title>Since generating realms with Omoikane was slow, I looked into Boa’s scope lookup and lexical analysis.</title><link>https://blog.ast.moe/en/blog/2026-09-29-2/</link><pubDate>Tue, 29 Sep 2026 18:25:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-29-2/</guid><description>&lt;p&gt;In the blog post investigating Omoikane’s CI wait times, we wrote about avoiding heavy verification for changes that only affect documentation and about revisiting the build cache. Separate from that, the tests that actually needed to be run were also taking a considerable amount of time. (&lt;a href="https://blog.ast.moe/en/blog/2026-09-29/"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Omoikane uses Boa to execute JavaScript. Each time a JavaScript realm is created for a page or an iframe, a large script that sets up the DOM API is run. This processing accounted for a substantial portion of the test runtime. In &lt;a href="https://github.com/ieee0824/omoikane/issues/1154"&gt;Issue #1154&lt;/a&gt;, instead of reducing the number of tests or realms, we investigated this initialization itself.&lt;/p&gt;</description></item><item><title>As AI-driven development progressed, the 30‑minute CI wait became increasingly burdensome, so I revisited the validation of Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-29/</link><pubDate>Tue, 29 Sep 2026 10:20:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-29/</guid><description>&lt;p&gt;When developing with AI coding agents such as Claude Code and Codex, you can work on implementation and research in parallel. Tasks that used to take one at a time can now be tackled multiple on the same day. However, the CI that runs after a pull request is submitted does not speed up to match your pace.&lt;/p&gt;
&lt;p&gt;My custom browser, Omoikane (&lt;a href="https://github.com/ieee0824/omoikane"&gt;source&lt;/a&gt;), has a large Rust codebase, and the internal Boa component resides in a separate Cargo workspace. Testing spans Linux and macOS, various architectures, WPT, and more. Because Rust compiles based on dependencies, features, and targets, this setup especially highlights long build wait times. Even if the agent can generate the next change, the verification of previous changes keeps piling up without finishing.&lt;/p&gt;</description></item><item><title>How about writing end‑to‑end tests first in order to bring the AI agent development closer to “completion”?</title><link>https://blog.ast.moe/en/blog/2026-09-28-2/</link><pubDate>Mon, 28 Sep 2026 12:50:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-28-2/</guid><description>&lt;p&gt;When you have an AI agent write code, you may find that even though the problems are solved, it doesn’t feel like you are getting closer to what you want to build.&lt;/p&gt;
&lt;p&gt;Implementation progresses. During review, issues are uncovered. Fixing one issue reveals another. Design concerns are raised, abstractions are reconsidered, tests are added, and the implementation is adjusted to make those tests pass. Each step has a justification, and the problems being pointed out are reasonably plausible.&lt;/p&gt;</description></item><item><title>I finally updated the Japanese phone number validation library after a long while.</title><link>https://blog.ast.moe/en/blog/2026-09-28/</link><pubDate>Mon, 28 Sep 2026 12:42:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-28/</guid><description>&lt;p&gt;In 2018 I wrote an article titled “I Want to Validate Phone Numbers.” It was a brief post introducing the newly started &lt;a href="https://github.com/ieee0824/go-tel-num-parser-jp"&gt;go-tel-num-parser-jp&lt;/a&gt; project and showing how to use &lt;code&gt;IsTelNumber&lt;/code&gt;. (&lt;a href="https://blog.ast.moe/blog/2018-11-08/"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I made a few more tweaks afterward, but the repository’s updates stopped in 2020. When I revisited it after a long time, I found that the phone number categories were still the same as back then, and there were some issues with the validation method. So, by looking at the currently published number information, I updated the number categories and validation logic (see pull request #4). (&lt;a href="https://github.com/ieee0824/go-tel-num-parser-jp/pull/4"&gt;PR #4&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>Tracing with Omoikane how a URL fragment becomes the CSS :target</title><link>https://blog.ast.moe/en/blog/2026-09-27/</link><pubDate>Sun, 27 Sep 2026 22:31:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-27/</guid><description>&lt;p&gt;Links that jump to headings on the page look simple.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;a&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;#details&amp;#34;&lt;/span&gt;&amp;gt;Go to details&amp;lt;/&lt;span style="color:#f92672"&gt;a&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;section&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;details&amp;#34;&lt;/span&gt;&amp;gt;...&amp;lt;/&lt;span style="color:#f92672"&gt;section&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When you click this link, the URL’s end changes to &lt;code&gt;#details&lt;/code&gt;, and the corresponding element becomes the destination within the page. By using &lt;code&gt;:target&lt;/code&gt; in CSS, you can highlight only that element.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#a6e22e"&gt;target&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;outline&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Usually, understanding that “the part of the URL after &lt;code&gt;#&lt;/code&gt; matches &lt;code&gt;id&lt;/code&gt;” is sufficient. However, when trying to incorporate &lt;code&gt;:target&lt;/code&gt; into my own browser, &lt;a href="https://github.com/ieee0824/omoikane"&gt;Omoikane&lt;/a&gt;, that wasn’t enough. The URL‑parsing logic, the HTML rules for selecting the target, the document’s internal state, CSS selector matching, and the updates after changing &lt;code&gt;location.hash&lt;/code&gt; are all handled in separate places.&lt;/p&gt;</description></item><item><title>How to Choose Between LLM, Embedding Models, Jev, and Classical NLP</title><link>https://blog.ast.moe/en/blog/2026-09-26-3/</link><pubDate>Sat, 26 Sep 2026 20:30:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-26-3/</guid><description>&lt;p&gt;I often see people treating search, classification, comparison, and judgment as tasks that can simply be handed off to an LLM. If you ask it in natural language, you get a response, and you can keep asking follow‑up questions directly. That convenience is indeed useful, and I’m prone to entrusting everything to it. As a result, it’s easy to develop an impression that an LLM can solve any problem.&lt;/p&gt;
&lt;p&gt;On the other hand, even when using a judgment model like Jev, you can still give it tasks that aren’t suited for it. Asking it to hunt for information before the necessary data has been gathered, or to have it formulating an overall strategy before any candidates have been identified, is asking a limited‑purpose decision‑making tool to perform investigative work as well. If you only need to locate known terms, you can simply perform a string search without invoking a model at all.&lt;/p&gt;</description></item><item><title>The Codex CLI kept prompting for re‑authentication each time it started, so I restarted the background server.</title><link>https://blog.ast.moe/en/blog/2026-09-26-2/</link><pubDate>Sat, 26 Sep 2026 19:07:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-26-2/</guid><description>&lt;p&gt;When I launch the Codex CLI, it always displays “Welcome to Codex, OpenAI&amp;rsquo;s command-line coding agent” and prompts me to re‑authenticate from &lt;code&gt;Sign in with ChatGPT&lt;/code&gt;. Even after logging in, the same screen appears again on the next startup.&lt;/p&gt;
&lt;p&gt;Since there was an issue this morning, I initially thought the service might still be unstable and confused that with this behavior. However, when I changed the launch method locally and compared the results, the re‑authentication screen this time was tied to the state of the local background server. I’m not sure whether this morning’s outage caused that state.&lt;/p&gt;</description></item><item><title>Fixed the origin‑boundary bypass that was present in the internal host function of Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-26/</link><pubDate>Sat, 26 Sep 2026 07:06:58 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-26/</guid><description>&lt;p&gt;During the development of Omoikane, I happened to notice that the internal &lt;code&gt;__omoikane_*&lt;/code&gt; function was visible from the page’s JavaScript. By examining the code, I confirmed through static analysis that passing a different Document or Node ID could create a path that reaches the DOM, cookies, or storage of a cross‑origin document without going through the same‑origin policy. I did not create a proof‑of‑concept that actually reproduced the read/write behavior before the fix. After the fix, I verified in regression tests that cross‑origin access is properly blocked.&lt;/p&gt;</description></item><item><title>JavaScript Realms as Seen Through Omoikane’s iframe Implementation</title><link>https://blog.ast.moe/en/blog/2026-09-25-3/</link><pubDate>Fri, 25 Sep 2026 19:04:46 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-25-3/</guid><description>&lt;p&gt;When working with iframes in my custom browser
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/omoikane"&gt;
Omoikane
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
, I kept coming back to the concept of Realms. At first I thought of it as simply “creating a separate JavaScript execution environment for child frames.” However, merely creating a separate environment wasn’t enough. When a parent accesses the child’s &lt;code&gt;Array&lt;/code&gt;, when an iframe navigates to a different page, or when a timer that was scheduled in the child later fires, it becomes necessary to determine which Realm’s values are being used for which Document in each case.&lt;/p&gt;</description></item><item><title>Stance on AI Coding and Code Reviews</title><link>https://blog.ast.moe/en/blog/2026-09-25-2/</link><pubDate>Fri, 25 Sep 2026 09:23:11 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-25-2/</guid><description>&lt;p&gt;When it comes to AI coding, I think we should freely use any technology that works. Both the speed of implementation and the number of ideas we can try have changed dramatically compared to when humans wrote all the code themselves. Tasks that were once measured in hours can now be completed in a short amount of time.&lt;/p&gt;
&lt;p&gt;On the other hand, just because more code is being generated doesn’t mean humans can review it at the same pace. Trying to keep the cycle going with “if AI writes a lot, humans must read a lot” is unsustainable.&lt;/p&gt;</description></item><item><title>A SIGSEGV occurred after garbage collection because the iterator function passed to Boa’s Array.from was not properly retained.</title><link>https://blog.ast.moe/en/blog/2026-09-25/</link><pubDate>Fri, 25 Sep 2026 08:46:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-25/</guid><description>&lt;p&gt;While running Omoikane’s Acid3 test, the process hit a SIGSEGV under the baseline JIT configuration on macOS ARM64. I briefly mentioned this in the earlier blog post about Omoikane updates, but the cause wasn’t the test itself nor the JIT’s machine‑code generation; it lay in the Boa code we’re incorporating, specifically in the &lt;code&gt;Array.from()&lt;/code&gt; section. Omoikane incorporates Boa’s source code together with the browser‑side implementation, so the fix was also applied to the engine that pulls in that code. (&lt;a href="https://blog.ast.moe/en/blog/2026-09-20/"&gt;source&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>Evaluation of FP6 Quantization in Small-Scale Image Super‑Resolution DNNs: Condition Exploration and Comparison of Residual and Direct Generation Architectures</title><link>https://blog.ast.moe/en/blog/2026-09-24-2/</link><pubDate>Thu, 24 Sep 2026 22:07:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-24-2/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;We compared image quality and file size when using a small image‑upscaling DNN with FP16 weights converted to FP6. In the search for optimal quantization settings, the PSNR improved on four validation images but decreased on another set of four images. Afterwards, we evaluated using 174 images divided into five groups by acquisition series, as well as 12 images that had not been used until the FP16 baseline was fixed. Even with roughly the same number of parameters, the degradation caused by uniform conversion to FP6 differed markedly between residual‑type and direct‑generation‑type models. The comparison of the 12 final FP6 images was added after viewing the FP16 results, so it does not constitute a new blind evaluation.&lt;/p&gt;</description></item><item><title>LLM Quantization from the Perspective of FP6: Where to Allocate Limited Bits</title><link>https://blog.ast.moe/en/blog/2026-09-24/</link><pubDate>Thu, 24 Sep 2026 13:43:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-24/</guid><description>&lt;p&gt;While researching quantization for LLMs, I found myself wondering in what situations FP8 would actually be useful. Further investigation revealed that FP6 and FP4 also exist. I became curious about how to store values in a 6‑bit format—an oddly sized width—and how much precision a floating‑point number with so few bits could actually represent.&lt;/p&gt;
&lt;p&gt;When you list the values representable by FP6, the spacing between adjacent numbers becomes clearly visible—a detail that is usually overlooked with the floating‑point formats we use daily. Even with the same 6 bits, the spacing changes depending on how the bits are allocated between the exponent and the mantissa. That raises the question: could we choose the representation to match the distribution of the weights?&lt;/p&gt;</description></item><item><title>I created ctx-sync, a CLI tool that shares development context across multiple sandboxes.</title><link>https://blog.ast.moe/en/blog/2026-09-23-3/</link><pubDate>Wed, 23 Sep 2026 22:37:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-23-3/</guid><description>&lt;p&gt;When you develop by running multiple sandboxes simultaneously, it’s convenient that each environment is isolated, but it can become unclear what the other sandboxes are doing.&lt;/p&gt;
&lt;p&gt;For example, suppose you conduct research and decide on a design approach in one sandbox, then begin implementation in another. The new sandbox has no prior conversation, so you don’t know why that approach was chosen or what issues remain unresolved. As a result, you may end up repeating the same research or re‑examining decisions that have already been made. It can also happen that one worker unintentionally edits a file another worker is working on, causing their work to clash.&lt;/p&gt;</description></item><item><title>I advanced browser compatibility for cookies and scrolling in Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-23-2/</link><pubDate>Wed, 23 Sep 2026 21:39:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-23-2/</guid><description>&lt;p&gt;In my custom browser
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/omoikane"&gt;
Omoikane
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
, I made several changes related to Web API and CSS compatibility.&lt;/p&gt;
&lt;p&gt;Looking at these changes, many of them went beyond simply adding APIs visible to JavaScript. It was necessary to convey the page’s state to the host, reflect JavaScript actions in HTTP communication, and preserve the scroll position set by CSS until the input processing is finished.&lt;/p&gt;
&lt;h2 id="cookies-were-handled-separately-for-javascript-and-http"&gt;Cookies were handled separately for JavaScript and HTTP&lt;/h2&gt;
&lt;p&gt;The first thing we fixed was how cookies are managed.&lt;/p&gt;</description></item><item><title>Visual Store now supports libvpx 1.12 on Debian 12 ARM64.</title><link>https://blog.ast.moe/en/blog/2026-09-23/</link><pubDate>Wed, 23 Sep 2026 07:55:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-23/</guid><description>&lt;p&gt;I updated the
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/visual-store"&gt;
Visual Store
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
.&lt;/p&gt;
&lt;p&gt;In the previous article “Added the ability to retain judgment results in Visual Store” (linked to 2026-09-21-2.md), I wrote about the new Judgment Layer that saves the decisions and verification results before an image is opened. This time, rather than introducing a new feature, I’m addressing the issue where the default build with VP9 enabled fails to compile on Debian 12 ARM64, and I’ve revised the procedure for reporting bugs in the Visual Store Skill. (&lt;a href="https://blog.ast.moe/en/blog/2026-09-21-2/"&gt;related article&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>I'm fixing subtle web‑compatibility differences in Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-22/</link><pubDate>Tue, 22 Sep 2026 07:09:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-22/</guid><description>&lt;p&gt;When I’m tinkering with my own browser,
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/omoikane"&gt;
Omoikane
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
, I’ve found that the tiny differences that are taken for granted in existing browsers can be more troublesome than implementing a single large web API.&lt;/p&gt;
&lt;p&gt;The changes I added this time are the default margin for &lt;code&gt;body&lt;/code&gt;, declarative Shadow DOM, and the orientation of characters in vertical text. Each of these looks like a small visual tweak, but each relies on assumptions in the CSS cascade, HTML parsing, and text rendering, respectively.&lt;/p&gt;</description></item><item><title>Enabled the Visual Store to retain judgment results.</title><link>https://blog.ast.moe/en/blog/2026-09-21-2/</link><pubDate>Mon, 21 Sep 2026 19:55:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-21-2/</guid><description>&lt;p&gt;I updated the
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/visual-store"&gt;
Visual Store
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
.&lt;/p&gt;
&lt;p&gt;This time, I added a Judgment Layer that records, for each image, the decision made before actually opening the screenshot and the verification results after it is opened.&lt;/p&gt;
&lt;p&gt;In the previous article “I created a Visual Store to prevent coding agents from hoarding images” (see 2026‑09‑16.md), I described a mechanism for saving images and retrieving only the ones needed. (&lt;a href="https://blog.ast.moe/en/blog/2026-09-16/"&gt;related article&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;The Visual Store was created to store debugging screenshots locally instead of embedding them directly into conversations, so that only the necessary screenshot can be retrieved later.&lt;/p&gt;</description></item><item><title>Added evaluation JSONL and production‑ready features to Jev MCP.</title><link>https://blog.ast.moe/en/blog/2026-09-21/</link><pubDate>Mon, 21 Sep 2026 15:55:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-21/</guid><description>&lt;p&gt;I updated the
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/jev-mcp"&gt;
jev-mcp
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
.&lt;/p&gt;
&lt;p&gt;In the previous post, I wrote that we had created an MCP server that invokes Jev, TypeSafe AI’s decision model, from Codex. Simply connecting the four decision tools doesn’t tell us whether they can be reliably used in actual coding work.&lt;/p&gt;
&lt;p&gt;This time, we added a small JSONL file for evaluating the decision results, an evaluation CLI, telemetry for monitoring invocation status, and handling for failures. We have also expanded the Codex‑specific Skill with additional decision recipes tailored to different use cases.&lt;/p&gt;</description></item><item><title>I created an MCP server that extracts Codex’s decisions for Jev.</title><link>https://blog.ast.moe/en/blog/2026-09-20-2/</link><pubDate>Sun, 20 Sep 2026 18:29:44 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-20-2/</guid><description>&lt;p&gt;I created an MCP server called
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/jev-mcp"&gt;
jev-mcp
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
.&lt;/p&gt;
&lt;p&gt;It is intended to be invoked during Codex work to call the TypeSafe AI decision model Jev. Implemented in Rust, it communicates with Codex via standard input/output.&lt;/p&gt;
&lt;span&gt;
&lt;a target="_blank" href="https://docs.typesafe.ai/introduction"&gt;
Jev, TypeSafe AI’s decision model
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
&lt;p&gt;Instead of handing the entire coding task over to another agent, I want to extract the small decisions that arise during the investigation.&lt;/p&gt;
&lt;p&gt;For example, questions like “Is this file related to the current bug?” or “Which subsystem should be examined next?” While Codex continues the investigation, editing, and testing, we use Jev for the intermediate classification and evaluation.&lt;/p&gt;</description></item><item><title>Implemented Pointer Lock and form‑related custom elements in Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-20/</link><pubDate>Sun, 20 Sep 2026 11:25:48 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-20/</guid><description>&lt;p&gt;I added Pointer Lock support and custom form‑related elements to my self‑made browser (
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/omoikane"&gt;
Omoikane
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2026-09-19-3/"&gt;In the previous post I wrote about Fullscreen API and character‑encoding conversion streams&lt;/a&gt;. This time I’m covering the pathway for delivering mouse input to the page and the logic for integrating my custom input components into HTML forms.&lt;/p&gt;
&lt;p&gt;Neither of these is a huge undertaking if you only consider the entry‑point APIs. However, when we actually hooked everything up, we ran into issues such as mouse input being delivered twice on X11, iframe callbacks executing in a different runtime environment, and even pages that don’t use forms becoming sluggish. In the end, the macOS tests caused the entire process to crash.&lt;/p&gt;</description></item><item><title>Implemented the Fullscreen API and character‑encoding conversion streams in Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-19-3/</link><pubDate>Sat, 19 Sep 2026 20:46:07 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-19-3/</guid><description>&lt;p&gt;I added the Fullscreen API and &lt;code&gt;TextEncoderStream&lt;/code&gt;/&lt;code&gt;TextDecoderStream&lt;/code&gt; to my custom browser,
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/omoikane"&gt;
Omoikane
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
.&lt;/p&gt;
&lt;p&gt;Previously, I implemented the Popover API and a top layer (see /blog/2026-09-14/). This time, I connected that rendering pipeline to the Fullscreen API and, as a separate task, made character‑encoding conversion usable via the Streams API. (&lt;a href="https://blog.ast.moe/en/blog/2026-09-14/"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Fullscreen display and character‑encoding conversion are fairly unrelated features. However, neither could be completed simply by adding a JavaScript method.&lt;/p&gt;</description></item><item><title>Development notes for Cubase MCP. I'm having trouble with the preliminary research before retrieving the track list.</title><link>https://blog.ast.moe/en/blog/2026-09-19-2/</link><pubDate>Sat, 19 Sep 2026 20:28:17 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-19-2/</guid><description>&lt;p&gt;Previously, I wrote an article titled “Building a Server to Control Cubase via MCP” (&lt;a href="https://blog.ast.moe/en/blog/2026-08-16/"&gt;source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Since then, I’ve continued developing
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/cubase_mcp"&gt;
cubase_mcp
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
, but it hasn’t progressed as much as I had hoped.&lt;/p&gt;
&lt;p&gt;I’ve now managed to handle play/stop and retrieve transport status, so the next step is to obtain a list of the project’s tracks.&lt;/p&gt;
&lt;p&gt;If we can retrieve information such as the track name, selection state, mute, and solo status, we could expand what’s possible from MCP. That was the premise, but now I’m still investigating what exactly can be retrieved and how far.&lt;/p&gt;</description></item><item><title>We have released a compatible simulator “lqs” for testing SQS locally.</title><link>https://blog.ast.moe/en/blog/2026-09-19/</link><pubDate>Sat, 19 Sep 2026 20:05:53 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-19/</guid><description>&lt;p&gt;I have released a compatible simulator for testing SQS locally,
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/lqs"&gt;
lqs
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
. The name is an abbreviation of &lt;strong&gt;local queue service&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It provides an HTTP API that can be accessed from the AWS SDK, allowing you to test locally operations such as sending and receiving messages for both Standard and FIFO queues, visibility timeouts, and moving messages to a DLQ.&lt;/p&gt;
&lt;p&gt;Since all the issues I had prepared have been resolved, I decided to make it public.&lt;/p&gt;</description></item><item><title>I remembered Labelflash</title><link>https://blog.ast.moe/en/blog/2026-09-17-3/</link><pubDate>Thu, 17 Sep 2026 21:16:16 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-17-3/</guid><description>&lt;p&gt;I suddenly remembered that there was a technology called
&lt;span&gt;
&lt;a target="_blank" href="https://ja.wikipedia.org/wiki/Labelflash"&gt;
Labelflash
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
in the past.&lt;/p&gt;
&lt;p&gt;I think it was included in the Gateway PC I bought around the time Windows Vista was released.&lt;/p&gt;
&lt;p&gt;Labelflash was a technology that allowed a laser to write text or images on the side of the DVD opposite the recording surface. Instead of printing and attaching a dedicated label, you could directly apply the design to the disc surface using the DVD drive.&lt;/p&gt;</description></item><item><title>What does Codex’s “Error running remote compact task: {"detail":"Bad Request"}” mean?</title><link>https://blog.ast.moe/en/blog/2026-09-17/</link><pubDate>Thu, 17 Sep 2026 11:53:02 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-17/</guid><description>&lt;p&gt;When you have been working on Codex for a long time, &lt;code&gt;remote compact&lt;/code&gt; may be triggered. At that point, the following error can appear:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Error running remote compact task: {&amp;#34;detail&amp;#34;:&amp;#34;Bad Request&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This indicates that Codex’s context‑compression process did not complete successfully.&lt;/p&gt;
&lt;p&gt;However, &lt;code&gt;{&amp;quot;detail&amp;quot;:&amp;quot;Bad Request&amp;quot;}&lt;/code&gt; is not a specific cause name. From just this display alone, you cannot tell whether the context was too large, there were too many images, the history entries were invalid, or it was a temporary server‑side issue.&lt;/p&gt;</description></item><item><title>I created a Visual Store to prevent coding agents from accumulating images.</title><link>https://blog.ast.moe/en/blog/2026-09-16/</link><pubDate>Wed, 16 Sep 2026 18:55:53 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-16/</guid><description>&lt;p&gt;I created a local image storage called Visual Store (&lt;a href="https://github.com/ieee0824/visual-store"&gt;source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;When implementing UIs or checking browser rendering with a coding agent, I often end up taking many screenshots. Displaying all those images in the conversation not only adds the images themselves but also increases the amount of data in the conversation history.&lt;/p&gt;
&lt;p&gt;This time, I built a system that separates the act of saving images from showing the images to the AI.&lt;/p&gt;</description></item><item><title>Since the HTTP QUERY method has been added, I read RFC 10008.</title><link>https://blog.ast.moe/en/blog/2026-09-15-3/</link><pubDate>Tue, 15 Sep 2026 10:03:58 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-15-3/</guid><description>&lt;p&gt;A method called &lt;code&gt;QUERY&lt;/code&gt; was added to HTTP.&lt;/p&gt;
&lt;p&gt;It is the RFC 10008 “The HTTP QUERY Method” published in June 2026 (&lt;a href="https://www.rfc-editor.org/rfc/rfc10008.html"&gt;source&lt;/a&gt;). This is not RFC 1008, but the five‑digit RFC 10008.&lt;/p&gt;
&lt;p&gt;As its name suggests, it is a method for querying a server, allowing search criteria to be placed in the request body.&lt;/p&gt;
&lt;p&gt;If that were all, POST would seem to be sufficient. In fact, it is not uncommon to implement complex search APIs using POST.&lt;/p&gt;</description></item><item><title>Implemented the Popover API and top layer in the custom browser Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-14/</link><pubDate>Mon, 14 Sep 2026 16:34:41 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-14/</guid><description>&lt;p&gt;I have implemented the HTML Popover API in my custom browser, Omoikane (&lt;a href="https://github.com/ieee0824/omoikane"&gt;source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;With the Popover API, you can open and close popovers using only HTML, without needing to manage their visibility state with JavaScript.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;button&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;popovertarget&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;menu&amp;#34;&lt;/span&gt;&amp;gt;Open menu&amp;lt;/&lt;span style="color:#f92672"&gt;button&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;menu&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;popover&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;button&lt;/span&gt;&amp;gt;Item 1&amp;lt;/&lt;span style="color:#f92672"&gt;button&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;button&lt;/span&gt;&amp;gt;Item 2&amp;lt;/&lt;span style="color:#f92672"&gt;button&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At first glance, it seems all you’d need to do is add an API to toggle the element’s &lt;code&gt;display&lt;/code&gt; state.&lt;/p&gt;
&lt;p&gt;In reality, popovers are rendered on a top layer that lies outside the normal stacking order. There are considerations such as light dismissal when clicking outside, closing with the Escape key, focus movement and restoration, &lt;code&gt;::backdrop&lt;/code&gt;, and the ordering relationship with dialogs.&lt;/p&gt;</description></item><item><title>I investigated why Acid3 was crashing due to memory errors in Omoikane’s baseline JIT.</title><link>https://blog.ast.moe/en/blog/2026-09-13/</link><pubDate>Sun, 13 Sep 2026 20:20:51 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-13/</guid><description>&lt;p&gt;While working on implementing CSS in my own browser, Omoikane (&lt;a href="https://github.com/ieee0824/omoikane"&gt;source&lt;/a&gt;), Acid3 began crashing due to memory errors.&lt;/p&gt;
&lt;p&gt;The problem only occurs when the baseline JIT is enabled; it runs fine with the interpreter.&lt;/p&gt;
&lt;p&gt;Furthermore, Omoikane’s Acid3 runner has two execution modes, Faithful and DirectDrive. Faithful completes all 100 points, but then it crashes during DirectDrive.&lt;/p&gt;
&lt;p&gt;The failure manifests differently depending on the environment.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Environment&lt;/th&gt;
&lt;th&gt;Observed failure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;x86_64 Linux&lt;/td&gt;
&lt;td&gt;SIGSEGV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARM64 Linux&lt;/td&gt;
&lt;td&gt;SIGABRT, ~60 GB allocation, SIGSEGV on rerun&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARM64 macOS&lt;/td&gt;
&lt;td&gt;SIGSEGV, SIGBUS on rerun&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Even though it’s the same test, the signals differ.&lt;/p&gt;</description></item><item><title>I made significant progress on the HTML and CSS implementation of my custom browser, Omoikane.</title><link>https://blog.ast.moe/en/blog/2026-09-12/</link><pubDate>Sat, 12 Sep 2026 19:51:40 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-12/</guid><description>&lt;p&gt;These past few days, I’ve been working on advancing the implementation of HTML and CSS in my custom browser, Omoikane (&lt;a href="https://github.com/ieee0824/omoikane"&gt;source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;At first, I displayed the same HTML as Firefox and investigated where any rendering discrepancies remained.&lt;/p&gt;
&lt;p&gt;When I began the comparison, I discovered not only simple color differences but also fundamental shortcomings, such as inline elements not having their bounding boxes correctly calculated, web fonts not being manageable from JavaScript, and HTML fragments not being parsed according to the context.&lt;/p&gt;</description></item><item><title>We recovered from a remote compact failure in a long-running Codex session that contained a large number of uncompressed PNGs.</title><link>https://blog.ast.moe/en/blog/2026-09-11-2/</link><pubDate>Fri, 11 Sep 2026 21:25:17 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-11-2/</guid><description>&lt;p&gt;The thread that had been running for a long time on Codex suddenly stopped working.&lt;/p&gt;
&lt;p&gt;The error that was displayed is as follows.&lt;/p&gt;
&lt;p&gt;If you only want to understand the meaning of this error, it is explained in “What does Codex’s ‘Error running remote compact task: {&amp;ldquo;detail&amp;rdquo;:&amp;ldquo;Bad Request&amp;rdquo;}’ mean?” (&lt;a href="https://blog.ast.moe/en/blog/2026-09-17/"&gt;source&lt;/a&gt;). In this article, I will describe the steps we took to investigate the history and restore the thread.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Error running remote compact task: {&amp;#34;detail&amp;#34;:&amp;#34;Bad Request&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If it had failed only once, a simple retry would have worked, but in this thread every time we tried a compact we received the same HTTP 400 error, and eventually even the normal responses began to fail.&lt;/p&gt;</description></item><item><title>I forgot to keep a Promise alive in Boa, which broke the malloc.</title><link>https://blog.ast.moe/en/blog/2026-09-10-4/</link><pubDate>Thu, 10 Sep 2026 20:37:07 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-10-4/</guid><description>&lt;p&gt;While running Boa’s Test262, the test occasionally failed with exit code 134.&lt;/p&gt;
&lt;p&gt;The logs show the following errors:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;malloc(): unsorted double linked list corrupted
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The issue is the “normal Test262 release run is aborted due to an allocator consistency error” (&lt;a href="https://github.com/ieee0824/omoikane/issues/638"&gt;issue #638&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;At first, I assumed some recent change was corrupting memory somewhere. However, because Test262 runs a large number of tests in parallel, the logs alone don’t reveal which specific test is causing the problem.&lt;/p&gt;</description></item><item><title>Boa incorrectly judged stack usage due to ASAN's fake stack.</title><link>https://blog.ast.moe/en/blog/2026-09-10-3/</link><pubDate>Thu, 10 Sep 2026 20:14:12 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-10-3/</guid><description>&lt;p&gt;In the previous article, we fixed the issue where Boa’s parser exhausted a 2 MiB stack. (&lt;a href="https://blog.ast.moe/en/blog/2026-09-10-2/"&gt;related article&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;We reduced the frame size during recursion and made it return an error for inputs that are too deep. With a normal build, the original Test262 now also passes within the 2 MiB limit.&lt;/p&gt;
&lt;p&gt;When we continued diagnosing with AddressSanitizer (ASAN) in that state, it started rejecting even shallow inputs.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;parser recursion limit exceeded
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The protection we added to prevent stack exhaustion was stopping prematurely, even though the stack hadn’t been fully used. This concerns &lt;a href="https://github.com/ieee0824/omoikane/issues/640"&gt;Issue #640&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Boa's parser exhausted a 2 MiB stack</title><link>https://blog.ast.moe/en/blog/2026-09-10-2/</link><pubDate>Thu, 10 Sep 2026 19:58:13 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-10-2/</guid><description>&lt;p&gt;While running Test262 before importing Boa into Omoikane, we discovered a case where an unoptimized parser aborts due to a stack overflow (&lt;a href="https://github.com/ieee0824/omoikane/issues/633"&gt;issue #633&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The failure occurred in Test262’s &lt;a href="https://github.com/tc39/test262/blob/a073f479f80b336256b7fc4e04700c827293e2fe/test/staging/sm/regress/regress-672893.js"&gt;&lt;code&gt;regress-672893.js&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It wasn’t a matter of nesting tens of thousands of invalid JavaScript statements. It was valid JavaScript with about fifteen levels of nested function expressions.&lt;/p&gt;
&lt;p&gt;If we omit the structural details, the code looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;function f() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return function () {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return function () {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...continues in the same pattern up to 15 steps...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return function (a) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; var v = a;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return function () { return v; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;f()()() ... ()(42)();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When this code is passed to a Boa built with the dev profile and the thread stack is set to 2 MiB, the parser triggers a stack overflow and exits with status 134.&lt;/p&gt;</description></item><item><title>The Float16 conversion results differed between x86_64 and ARM64.</title><link>https://blog.ast.moe/en/blog/2026-09-10/</link><pubDate>Thu, 10 Sep 2026 19:11:38 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-09-10/</guid><description>&lt;p&gt;In the pre‑migration verification of Boa for Omoikane (&lt;a href="https://github.com/ieee0824/omoikane/issues/655"&gt;issue #655&lt;/a&gt;), we ran the same Boa and Test262 on Linux x86_64 and ARM64, and the results differed in only 10 cases.&lt;/p&gt;
&lt;p&gt;A total of 50,595 cases were executed.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Environment&lt;/th&gt;
&lt;th style="text-align: right"&gt;Passed&lt;/th&gt;
&lt;th style="text-align: right"&gt;Failed&lt;/th&gt;
&lt;th style="text-align: right"&gt;Ignored&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linux x86_64&lt;/td&gt;
&lt;td style="text-align: right"&gt;47,606&lt;/td&gt;
&lt;td style="text-align: right"&gt;933&lt;/td&gt;
&lt;td style="text-align: right"&gt;2,056&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux ARM64&lt;/td&gt;
&lt;td style="text-align: right"&gt;47,616&lt;/td&gt;
&lt;td style="text-align: right"&gt;923&lt;/td&gt;
&lt;td style="text-align: right"&gt;2,056&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The ten cases that differed were all tests related to the conversion to &lt;code&gt;Float16&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It’s problematic that JavaScript results change when the CPU changes even though the source code and inputs are identical. We investigated what was happening.&lt;/p&gt;</description></item><item><title>I released “Natsukusa no Rail feat. Natsuki Karin”</title><link>https://blog.ast.moe/en/blog/2026-08-26/</link><pubDate>Wed, 26 Aug 2026 19:01:31 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-08-26/</guid><description>&lt;p&gt;I released a new song: &lt;strong&gt;Natsukusa no Rail feat. Natsuki Karin&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="video-embed"&gt;
&lt;iframe
src="https://embed.nicovideo.jp/watch/sm46711638"
title="Natsukusa no Rail feat. Natsuki Karin"
loading="lazy"
allow="autoplay; encrypted-media; picture-in-picture; fullscreen"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;When I visited Otaru in June, I wanted to make something inspired by the town.&lt;/p&gt;
&lt;p&gt;Looking through my photos afterward, I came across the ones I took at the former Temiya Line.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-08-26/0Q1A6005_hu_9fb508a57d300502.JPG" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-08-26/0Q1A6005_hu_dfb87e2b6acad00b.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-08-26/0Q1A6005_hu_78383939e1915b5c.JPG"
alt="The former Temiya Line"
width="700"
height="467"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;The former Temiya Line&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-08-26/IMG_5191_hu_7e5b6f56e53baca1.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-08-26/IMG_5191_hu_72985cc165a075fe.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-08-26/IMG_5191_hu_7f65b5a54c27b216.jpeg"
alt="Former Ironai Station on the Temiya Line"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Former Ironai Station on the Temiya Line&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;The trains no longer run, and grass grows around the rails. I decided to make that the theme.&lt;/p&gt;</description></item><item><title>Notes on setting up a Sakura VPS as an SSH SOCKS proxy because I needed a fixed IP address.</title><link>https://blog.ast.moe/en/blog/2026-08-18-3/</link><pubDate>Tue, 18 Aug 2026 21:23:10 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-08-18-3/</guid><description>&lt;p&gt;When testing connectivity in an environment that has IP restrictions, you may want to allow only your own source IP as an exception.&lt;/p&gt;
&lt;p&gt;However, the global IP address of your home connection isn’t static; it changes whenever you restart the router or for other reasons.&lt;/p&gt;
&lt;p&gt;Updating the allowed IP each time is cumbersome, so I use a Sakura VPS as a jump host.&lt;/p&gt;
&lt;p&gt;I could have set up IPsec with something like SoftEther VPN, but since SSH is available, using a SOCKS proxy is easier if everything can be done on the local PC.&lt;/p&gt;</description></item><item><title>Steps to convert a video mistakenly recorded in Canon RAW (CRM) to MP4</title><link>https://blog.ast.moe/en/blog/2026-08-18/</link><pubDate>Tue, 18 Aug 2026 18:41:59 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-08-18/</guid><description>&lt;p&gt;I accidentally set the camera to record the video in &lt;strong&gt;CRM (Canon RAW Movie)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For everyday use, MP4 would have been sufficient, but by the time I realized it, I had already shot in 8K RAW.&lt;/p&gt;
&lt;p&gt;Since there was no other option, I ultimately processed it using the following steps:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CRM
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Convert to MOV using Canon software
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Convert to 4K MP4 with ffmpeg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I’m likely to repeat this, so I’m writing it down as a note.&lt;/p&gt;</description></item><item><title>I built a server that controls Cubase via MCP.</title><link>https://blog.ast.moe/en/blog/2026-08-16/</link><pubDate>Sun, 16 Aug 2026 08:05:11 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-08-16/</guid><description>&lt;p&gt;I thought it would be interesting to control Cubase via MCP, so I created the &lt;a href="https://github.com/ieee0824/cubase_mcp"&gt;Cubase MCP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By sending commands such as “play,” “stop,” or “report the current status” from an MCP client, you can operate Cubase’s transport controls and retrieve its state.&lt;/p&gt;
&lt;p&gt;It’s not yet possible to control every aspect of Cubase. This time, I first built a small implementation that simply connects MCP to Cubase.&lt;/p&gt;
&lt;h2 id="what-was-created"&gt;What was created&lt;/h2&gt;
&lt;p&gt;The implementation is an integration daemon written in Rust.&lt;/p&gt;</description></item><item><title>Designing a circuit to attempt machine learning with analog electronics</title><link>https://blog.ast.moe/en/blog/2026-08-13/</link><pubDate>Thu, 13 Aug 2026 20:59:43 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-08-13/</guid><description>&lt;p&gt;Last time we discussed how combining multiplication based on Ohm’s law with addition based on Kirchhoff’s current law could enable us to represent the neural network’s multiply‑accumulate operation in a physical circuit.&lt;/p&gt;
&lt;p&gt;This time, assuming we will eventually build an actual hardware circuit, we first consider the minimal circuit configuration.&lt;/p&gt;
&lt;p&gt;In this simulator we will keep the resistor values fixed and dynamically vary the voltage output from the microcontroller.&lt;/p&gt;
&lt;p&gt;With this setup, the weight updates and multiplications are performed on the microcontroller side, while the analog circuit handles voltage summation and inversion. We’re not trying to implement all of machine learning with an analog circuit, but this level of setup should be sufficient for first confirming the correspondence between the equations and the circuit.&lt;/p&gt;</description></item><item><title>Can machine learning be implemented with analog circuits?</title><link>https://blog.ast.moe/en/blog/2026-08-12-2/</link><pubDate>Wed, 12 Aug 2026 21:01:23 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-08-12-2/</guid><description>&lt;h2 id="wouldnt-it-be-interesting-to-do-machine-learning-with-analog-circuits"&gt;Wouldn&amp;rsquo;t it be interesting to do machine learning with analog circuits?&lt;/h2&gt;
&lt;p&gt;Lately, large language models have become popular, but they require a lot of GPUs, money, and electricity. I thought it would be fascinating to try doing this with analog circuits.&lt;/p&gt;
&lt;p&gt;The calculations performed by neural networks are essentially multiplication and addition.&lt;/p&gt;
&lt;p&gt;So, this time I’ll give a rough overview starting from the basic theory.&lt;/p&gt;
&lt;h2 id="what-is-analog-computation"&gt;What is analog computation?&lt;/h2&gt;
&lt;p&gt;In digital computers, numbers are represented as combinations of 0s and 1s. Even if the voltage changes slightly during a calculation, the original information can be recovered as long as the change stays within the range where 0 and 1 can still be distinguished.&lt;/p&gt;</description></item><item><title>I updated the blog theme.</title><link>https://blog.ast.moe/en/blog/2026-08-11/</link><pubDate>Tue, 11 Aug 2026 21:07:30 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-08-11/</guid><description>&lt;p&gt;Long time no see. I hadn&amp;rsquo;t updated the blog for a while, but I&amp;rsquo;ve refreshed its theme.&lt;/p&gt;
&lt;p&gt;The blog&amp;rsquo;s build had been broken for some time, and I kept putting off fixing it. This time I finally decided to address it, and since it was an opportunity, I not only repaired the broken parts but also completely rebuilt the theme from scratch. I reorganized the site to focus on the blog, making it easier to find recent posts on the homepage and to navigate to the gallery, my climbing log, and the projects I&amp;rsquo;ve created.&lt;/p&gt;</description></item><item><title>A day in Kasukabe</title><link>https://blog.ast.moe/en/blog/2026-06-27/</link><pubDate>Sat, 27 Jun 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-27/</guid><description>&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2026-06-26/"&gt;I came from Hokkaido to Tokyo yesterday&lt;/a&gt;. Today I&amp;rsquo;m going to Kasukabe.&lt;/p&gt;
&lt;p&gt;Although first thing this morning I was still looking at an Otaru sightseeing map and wondering where to go next.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-27/HLxeXuXaoAA-lKz_hu_b1f68bdd89f01d23.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-27/HLxeXuXaoAA-lKz_hu_60bc94a0e4963b74.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-27/HLxeXuXaoAA-lKz_hu_27ce32a460f102d8.jpeg"
alt="Still studying my Otaru map"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Still studying my Otaru map&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="more-stamps-in-kasukabe"&gt;More stamps in Kasukabe&lt;/h2&gt;
&lt;p&gt;After the Otaru town stamp rally, I collected stamps in Kasukabe too. That completed the intercity Otaru–Kasukabe rally.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-27/HLx-9g-aAAALnlh_hu_af70e01379a2de18.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-27/HLx-9g-aAAALnlh_hu_799bb1ec7831367e.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-27/HLx-9g-aAAALnlh_hu_94553241d0c7d353.jpeg"
alt="Stamps from both Otaru and Kasukabe"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Stamps from both Otaru and Kasukabe&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;At Tanaka Hat Shop I took photos with the Rikka and Tsumugi panels. Karin came along too.&lt;/p&gt;</description></item><item><title>Looking for breakfast at the airport</title><link>https://blog.ast.moe/en/blog/2026-06-26/</link><pubDate>Fri, 26 Jun 2026 23:30:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-26/</guid><description>&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2026-06-25/"&gt;I moved from Otaru to Chitose yesterday&lt;/a&gt;, and by morning I already wanted to go back.&lt;/p&gt;
&lt;h2 id="breakfast-at-the-airport"&gt;Breakfast at the airport&lt;/h2&gt;
&lt;p&gt;I planned to eat at New Chitose Airport, but it was too early and nothing appealed to me.&lt;/p&gt;
&lt;p&gt;While wandering around, I found Teto on the piapro wall.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-26/HLsiBr4agAAZWv6_hu_79c1b476bc20e614.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-26/HLsiBr4agAAZWv6_hu_da289f9aa423aa46.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-26/HLsiBr4agAAZWv6_hu_9e5861a57c6c4a7f.jpeg"
alt="Teto on the piapro wall"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Teto on the piapro wall&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;In the end, breakfast was ramen with butter and corn.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-26/HLsuurxbEAAZMBK_hu_380b64e212a061.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-26/HLsuurxbEAAZMBK_hu_3c82935b4f80ca4c.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-26/HLsuurxbEAAZMBK_hu_cdfe7cf3d6da10b0.jpeg"
alt="Morning ramen at the airport"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Morning ramen at the airport&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;As I ate, the time to leave Hokkaido crept closer.&lt;/p&gt;</description></item><item><title>One more walk around Otaru</title><link>https://blog.ast.moe/en/blog/2026-06-25/</link><pubDate>Thu, 25 Jun 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-25/</guid><description>&lt;p&gt;Just after midnight, following &lt;a href="https://blog.ast.moe/en/blog/2026-06-24/"&gt;my last evening in Otaru&lt;/a&gt;, I left HALF TONE. I&amp;rsquo;ll come back in four months for the Sapporo Marathon.&lt;/p&gt;
&lt;p&gt;I walked along the canal on the way back.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-25/HLl8v3zXMAAu6ST_hu_f5baf2e20134447f.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-25/HLl8v3zXMAAu6ST_hu_1e0d349e664bce4b.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-25/HLl8v3zXMAAu6ST_hu_ac9c09527930aca9.jpeg"
alt="Otaru Canal late at night"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Otaru Canal late at night&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I wish morning wouldn&amp;rsquo;t come.&lt;/p&gt;
&lt;h2 id="setting-off-with-my-backpack"&gt;Setting off with my backpack&lt;/h2&gt;
&lt;p&gt;But morning did come. I packed, with Karin and Teto riding on my 80-liter backpack.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-25/HLnXHanbwAEp-ik_hu_65d3cf2d9cfdfd9c.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-25/HLnXHanbwAEp-ik_hu_471e59eb36db39cf.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-25/HLnXHanbwAEp-ik_hu_afdc035bad6ccf7.jpeg"
alt="Ready to leave"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Ready to leave&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Thank you for the week, Hotel Nord.&lt;/p&gt;</description></item><item><title>Perfect weather for the stamp rally</title><link>https://blog.ast.moe/en/blog/2026-06-24/</link><pubDate>Wed, 24 Jun 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-24/</guid><description>&lt;p&gt;The weather is good today. Perfect for a stamp rally.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-24/HLh-aT5XcAA_0VY_hu_218f7fb8e7947c72.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-24/HLh-aT5XcAA_0VY_hu_edd72945435890f2.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-24/HLh-aT5XcAA_0VY_hu_68aedbbb83ec58c4.jpeg"
alt="A sunny morning in Otaru"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;A sunny morning in Otaru&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I edited a video while the laundry ran, then got ready to go out.&lt;/p&gt;
&lt;h2 id="the-final-stamp"&gt;The final stamp&lt;/h2&gt;
&lt;p&gt;Only POP&amp;rsquo;n STRAGE remained on the Otaru town stamp rally &lt;a href="https://blog.ast.moe/en/blog/2026-06-23/"&gt;I&amp;rsquo;d been doing yesterday&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I collected the last stamp and bought a Karin badge.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-24/HLi0N7MbkAAXszS_hu_f6c2ca9a2a7b0cea.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-24/HLi0N7MbkAAXszS_hu_b286c2b16c8331fa.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-24/HLi0N7MbkAAXszS_hu_ca7baa56b48816ab.jpeg"
alt="The final stop at POP&amp;#39;n STRAGE"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;The final stop at POP&amp;#39;n STRAGE&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;With every stamp in place, I received a completion gift.&lt;/p&gt;</description></item><item><title>A rainy Otaru stamp-rally day</title><link>https://blog.ast.moe/en/blog/2026-06-23/</link><pubDate>Tue, 23 Jun 2026 23:30:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-23/</guid><description>&lt;p&gt;The weather is bad today. My shoe soles have worn down like slick tires, so running in the rain is slippery.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m picking up the remaining Otaru stamp-rally locations &lt;a href="https://blog.ast.moe/en/blog/2026-06-22/"&gt;from yesterday&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="shops-around-town-first"&gt;Shops around town first&lt;/h2&gt;
&lt;p&gt;My first stop was Niikuraya, where I bought sweets and a Karin badge.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-23/HLdNKQ5aoAAAlBy_hu_c9312253d6232262.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-23/HLdNKQ5aoAAAlBy_hu_f52d71eadb116e9a.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-23/HLdNKQ5aoAAAlBy_hu_af18ac10b0ad5a6a.jpeg"
alt="Shopping at Niikuraya"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Shopping at Niikuraya&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I visited Grids, then Tsukushi Makita, where I ran into LaMonade.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-23/HLdT7T3a0AAURwc_hu_2ab47d39104a7e15.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-23/HLdT7T3a0AAURwc_hu_98a383dd9be95763.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-23/HLdT7T3a0AAURwc_hu_2837e0ee9ee7285.jpeg"
alt="Rikka at Tsukushi Makita"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Rikka at Tsukushi Makita&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I didn&amp;rsquo;t have a bag today, so I&amp;rsquo;ll come back for sweets tomorrow.&lt;/p&gt;</description></item><item><title>Halfway through my Otaru stay</title><link>https://blog.ast.moe/en/blog/2026-06-22/</link><pubDate>Mon, 22 Jun 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-22/</guid><description>&lt;p&gt;It&amp;rsquo;s my fourth day in Otaru. Somehow half of the trip has already gone by.&lt;/p&gt;
&lt;p&gt;After &lt;a href="https://blog.ast.moe/en/blog/2026-06-21/"&gt;yesterday&amp;rsquo;s Otaru Canal Road Race&lt;/a&gt; and some laundry, I thought about what to do today. Maybe I&amp;rsquo;ll enter next year&amp;rsquo;s race too.&lt;/p&gt;
&lt;p&gt;The wind had made me worry about the boat yesterday, but today it was going to Todo Rock. I booked a seat.&lt;/p&gt;
&lt;p&gt;First I bought rice crackers at Midoriya and continued the town stamp rally.&lt;/p&gt;</description></item><item><title>Race day in Otaru</title><link>https://blog.ast.moe/en/blog/2026-06-21/</link><pubDate>Sun, 21 Jun 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-21/</guid><description>&lt;p&gt;The wind was strong from the morning. I wondered whether boats to Todo Rock could sail today.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m running the Otaru Canal Road Race. &lt;a href="https://blog.ast.moe/en/blog/2026-06-20/"&gt;I walked about 30,000 steps yesterday&lt;/a&gt;, but off to the venue I went.&lt;/p&gt;
&lt;p&gt;I arrived around 7:40 with Karin.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-21/HLSpMVHbkAAzBIb_hu_529563bd00aeeb11.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-21/HLSpMVHbkAAzBIb_hu_c46615193ba76ce5.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-21/HLSpMVHbkAAzBIb_hu_795b4d41e2da52ba.jpeg"
alt="Karin at the road-race venue"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Karin at the road-race venue&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="otaru-shiokaze-high-school-track-team"&gt;Otaru Shiokaze High School track team&lt;/h2&gt;
&lt;p&gt;As planned, I ran in my Karin T-shirt. Next to a Chifuyu T-shirt, the Otaru Shiokaze High School track team was ready to go.&lt;/p&gt;</description></item><item><title>Walking across Otaru from the sea</title><link>https://blog.ast.moe/en/blog/2026-06-20/</link><pubDate>Sat, 20 Jun 2026 23:30:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-20/</guid><description>&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2026-06-19/"&gt;I arrived in Otaru yesterday&lt;/a&gt;. Today began with breakfast.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-20/HLNXjDjbUAApGd__hu_b431be83bfae1d53.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-20/HLNXjDjbUAApGd__hu_dc2418f862b3465e.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-20/HLNXjDjbUAApGd__hu_5a76c877c0d6b1e5.jpeg"
alt="Breakfast"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Breakfast&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;The weather was good, so I decided to walk up Mount Tengu from below. To make it a proper crossing, I went to the sea first and walked from there toward the mountain.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-20/HLNowMwa4AAkl74_hu_841bc65dd9bc130f.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-20/HLNowMwa4AAkl74_hu_bb5dab36560b0eb8.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-20/HLNowMwa4AAkl74_hu_b5bb4f1347da5682.jpeg"
alt="Starting at the sea for Mount Tengu"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Starting at the sea for Mount Tengu&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="from-the-sea-to-mount-tengu"&gt;From the sea to Mount Tengu&lt;/h2&gt;
&lt;p&gt;I continued the Otaru town stamp rally along the way. At a shrine I saw Rikka and prayed for a safe climb.&lt;/p&gt;</description></item><item><title>Back to Otaru</title><link>https://blog.ast.moe/en/blog/2026-06-19/</link><pubDate>Fri, 19 Jun 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-06-19/</guid><description>&lt;p&gt;I&amp;rsquo;m setting off with an 80-liter backpack today. Teto is coming too. A beer to start the trip.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-19/HLIemDda8AAIpqT_hu_2398448ff8df75ef.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-19/HLIemDda8AAIpqT_hu_c75fca4ab70bce1.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-19/HLIemDda8AAIpqT_hu_82af27dce67f8ee6.jpeg"
alt="A travel beer with Teto"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;A travel beer with Teto&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I took two flights to Hokkaido. The second plane was a 787.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-06-19/HLJRW-gbwAAv-Yt_hu_6290502602123951.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-06-19/HLJRW-gbwAAv-Yt_hu_a9e67301f80acb59.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-06-19/HLJRW-gbwAAv-Yt_hu_abe92c3e1119840.jpeg"
alt="Boarding the 787"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Boarding the 787&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;At New Chitose I boarded a train for Otaru. Now my arrival was assured. The sea came into view, wider than anything I see around the Seto Inland Sea.&lt;/p&gt;</description></item><item><title>Waiting to board at a snowy airport</title><link>https://blog.ast.moe/en/blog/2026-02-09/</link><pubDate>Mon, 09 Feb 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-02-09/</guid><description>&lt;p&gt;Snow was falling steadily again this morning. I&amp;rsquo;m heading to New Chitose Airport.&lt;/p&gt;
&lt;p&gt;I said goodbye to Snow Miku there. My next visit is planned for four months from now.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-09/HArMyaXa4AAsm-F_hu_ffe08982745154bd.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-09/HArMyaXa4AAsm-F_hu_88e10356cb227069.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-09/HArMyaXa4AAsm-F_hu_7eb7db6c3193fe.jpeg"
alt="Snow Miku and Teto at the airport"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Snow Miku and Teto at the airport&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I had a beer while waiting to board. Outside the window, everything was white.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-09/HArQLIGacAAPwZr_hu_fe9be40b2176fd0e.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-09/HArQLIGacAAPwZr_hu_c30a58da2829c890.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-09/HArQLIGacAAPwZr_hu_ef9b52e83d5d592e.jpeg"
alt="Waiting to board at a snowy airport"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Waiting to board at a snowy airport&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="snow-removal-outside-the-window"&gt;Snow removal outside the window&lt;/h2&gt;
&lt;p&gt;I watched the snow-covered planes and the work going on around them.&lt;/p&gt;</description></item><item><title>From Otaru to Sapporo</title><link>https://blog.ast.moe/en/blog/2026-02-08/</link><pubDate>Sun, 08 Feb 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-02-08/</guid><description>&lt;p&gt;I&amp;rsquo;m checking out and moving on today. I&amp;rsquo;ll drop my bags at the next hotel first.&lt;/p&gt;
&lt;p&gt;I almost forgot that I&amp;rsquo;d bought an AOZORA GEAR Snow Miku catalytic hand warmer.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-08/HAl3lwwaIAASUc7_hu_ad5f0f513b066e60.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-08/HAl3lwwaIAASUc7_hu_8ecb567936f4343b.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-08/HAl3lwwaIAASUc7_hu_2dc575c712c7a445.jpeg"
alt="The Snow Miku catalytic hand warmer"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;The Snow Miku catalytic hand warmer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Thank you, Hotel Nord. I liked being so close to the canal.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-08/HAmSLZRacAMCz-T_hu_844c6f40ebbd9a0c.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-08/HAmSLZRacAMCz-T_hu_40f849982133fade.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-08/HAmSLZRacAMCz-T_hu_13997cfe4dbb2f51.jpeg"
alt="Leaving Hotel Nord"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Leaving Hotel Nord&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Before leaving town, I said goodbye to Karin at Iwanaga Watch Shop. I&amp;rsquo;ll be back in June.&lt;/p&gt;</description></item><item><title>Walking through snowy Otaru</title><link>https://blog.ast.moe/en/blog/2026-02-07/</link><pubDate>Sat, 07 Feb 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-02-07/</guid><description>&lt;p&gt;Good morning. The canal outside my hotel window was colored by the morning sun.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-07/HAgdHJ_acAUDD-0_hu_1d5a6b66b3ee23e4.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-07/HAgdHJ_acAUDD-0_hu_76ba6d9b1e322301.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-07/HAgdHJ_acAUDD-0_hu_ebb4fc36674c216a.jpeg"
alt="Otaru Canal in the morning"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Otaru Canal in the morning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2026-02-06/"&gt;I arrived in Otaru yesterday&lt;/a&gt;. Today I&amp;rsquo;m walking around town.&lt;/p&gt;
&lt;p&gt;The former Temiya Line was covered in snow too. A photo with Teto and Karin.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-07/HAg_emlacAEEqU1_hu_d715006893562c48.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-07/HAg_emlacAEEqU1_hu_5845659f7524d61f.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-07/HAg_emlacAEEqU1_hu_a899c1445605c13a.jpeg"
alt="At the snowy former Temiya Line"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;At the snowy former Temiya Line&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I passed Ginza Button&amp;rsquo;s old shop. I still need to see Chifuyu&amp;rsquo;s new workplace.&lt;/p&gt;</description></item><item><title>Off on an easygoing trip</title><link>https://blog.ast.moe/en/blog/2026-02-06/</link><pubDate>Fri, 06 Feb 2026 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2026-02-06/</guid><description>&lt;p&gt;I&amp;rsquo;m setting off on an easygoing trip today, starting at Kotohira Station.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-06/HAb0NymacAExMqu_hu_c6b5424aa1381001.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-06/HAb0NymacAExMqu_hu_429d2d8b7073e97e.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-06/HAb0NymacAExMqu_hu_29b7e82e499d7d0d.jpeg"
alt="Departing from Kotohira Station"
width="700"
height="469"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Departing from Kotohira Station&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I reached Okayama. The big city.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-06/HAcElwlaYAAqtte_hu_664d4bedf0f82669.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-06/HAcElwlaYAAqtte_hu_ad34782dce73e5b1.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-06/HAcElwlaYAAqtte_hu_56ec32fb1b095a96.jpeg"
alt="Changing to the Shinkansen in Okayama"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Changing to the Shinkansen in Okayama&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Once aboard the Shinkansen, I refueled.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2026-02-06/HAcLlhuacAAZEgI_hu_82a673a6de8fd25f.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2026-02-06/HAcLlhuacAAZEgI_hu_4b42914f7be9c79a.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2026-02-06/HAcLlhuacAAZEgI_hu_e9d2c43d46b5b2eb.jpeg"
alt="Fuel for the train ride"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Fuel for the train ride&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;In Osaka I headed for the airport and had another drink in the lounge. Someone was eating shumai with their drink. Genius.&lt;/p&gt;</description></item><item><title>Breakfast at the airport</title><link>https://blog.ast.moe/en/blog/2025-10-06/</link><pubDate>Mon, 06 Oct 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-10-06/</guid><description>&lt;p&gt;It had been warm until yesterday, but this morning it was suddenly 13°C. Today I&amp;rsquo;m leaving Hokkaido.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2025-10-05/"&gt;I went back to Otaru after the marathon yesterday&lt;/a&gt;. This morning I headed to New Chitose Airport.&lt;/p&gt;
&lt;p&gt;Beer for breakfast.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-06/G2iYg5cagAAz4aT_hu_7ae1c84fd9374a83.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-06/G2iYg5cagAAz4aT_hu_2b08d3448f35a1d.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-06/G2iYg5cagAAz4aT_hu_92828cad3073401c.jpeg"
alt="Breakfast beer"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Breakfast beer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;And ramen.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-06/G2iatmbaoAAYbsd_hu_4898d86ae546fd43.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-06/G2iatmbaoAAYbsd_hu_f6bcc88bbfb4ef3d.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-06/G2iatmbaoAAYbsd_hu_de19f1760fd40b83.jpeg"
alt="Breakfast ramen"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Breakfast ramen&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I ordered another beer and some gyoza. A productive morning.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-06/G2icNFwbMAAuojX_hu_cff3841ff0090ecb.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-06/G2icNFwbMAAuojX_hu_4d1b253da8e98938.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-06/G2icNFwbMAAuojX_hu_3b94e22e2f5bdf4a.jpeg"
alt="Breakfast gyoza"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Breakfast gyoza&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="saying-hello-to-miku"&gt;Saying hello to Miku&lt;/h2&gt;
&lt;p&gt;Before leaving, I went to see Miku at the airport. Thank you again. I hope to be back soon.&lt;/p&gt;</description></item><item><title>Running in my Karin T-shirt</title><link>https://blog.ast.moe/en/blog/2025-10-05/</link><pubDate>Sun, 05 Oct 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-10-05/</guid><description>&lt;p&gt;Today is the Sapporo Marathon. I put on &lt;a href="https://blog.ast.moe/en/blog/2025-10-04/"&gt;the Karin T-shirt I prepared yesterday&lt;/a&gt; and headed for the venue.&lt;/p&gt;
&lt;p&gt;The underground passage was long.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-05/G2cwTOsbwAAlfkM_hu_eda86e6d17b21ea7.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-05/G2cwTOsbwAAlfkM_hu_d8adba620f1e5024.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-05/G2cwTOsbwAAlfkM_hu_76dbd47019709551.jpeg"
alt="A long passage on the way to the venue"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;A long passage on the way to the venue&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I arrived sometime after eight. Otaru Shiokaze High School track team, here I go.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-05/G2dE1b1asAApSPc_hu_d84c7a7cac1656ac.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-05/G2dE1b1asAApSPc_hu_6d13e67e3c0ea7fc.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-05/G2dE1b1asAApSPc_hu_ac692000b45d8132.jpeg"
alt="At the venue in my Karin T-shirt"
width="700"
height="633"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;At the venue in my Karin T-shirt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="across-the-finish-line"&gt;Across the finish line&lt;/h2&gt;
&lt;p&gt;I missed my target time, but I finished the half marathon safely.&lt;/p&gt;</description></item><item><title>Walking around Otaru in autumn</title><link>https://blog.ast.moe/en/blog/2025-10-04/</link><pubDate>Sat, 04 Oct 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-10-04/</guid><description>&lt;p&gt;Breakfast was a boxed meal from Seicomart. &lt;a href="https://blog.ast.moe/en/blog/2025-10-03/"&gt;I arrived in Otaru last night&lt;/a&gt;, and today I&amp;rsquo;m heading out early.&lt;/p&gt;
&lt;p&gt;If I walk to Mount Tengu now, I should get there around opening time. The estimated walk is about fifty minutes, so let&amp;rsquo;s go.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-04/G2X2ABSaYAAFhBA_hu_41a86f1a5ec5b1f1.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-04/G2X2ABSaYAAFhBA_hu_a915313846fb40b1.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-04/G2X2ABSaYAAFhBA_hu_89475d00c3785dab.jpeg"
alt="Walking up the hill"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Walking up the hill&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;The slope was 15 percent. A local spoke to me while I was walking with a large backpack and cheered me on when I said I was going to Mount Tengu.&lt;/p&gt;</description></item><item><title>Traveling again after four months</title><link>https://blog.ast.moe/en/blog/2025-10-03/</link><pubDate>Fri, 03 Oct 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-10-03/</guid><description>&lt;p&gt;I&amp;rsquo;m going away today. First, a beer in the middle of the day.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-03/G2Tnrzma8AAj5ju_hu_8e29466f4b787436.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-03/G2Tnrzma8AAj5ju_hu_5ecf3c67c0dbb68e.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-03/G2Tnrzma8AAj5ju_hu_d0aa076511c4f325.jpeg"
alt="A drink with Teto"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;A drink with Teto&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Another refueling stop on the way. Daytime beer is good.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-10-03/G2UJHDUbMAMpXQN_hu_35b1338475b3cf52.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-10-03/G2UJHDUbMAMpXQN_hu_c230b86aca2e98c6.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-10-03/G2UJHDUbMAMpXQN_hu_10948a509c74e541.jpeg"
alt="Fuel for the journey"
width="700"
height="851"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Fuel for the journey&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I was gripping a protrusion on the train wall as if it were a climbing hold when a guy from Belgium asked, &amp;ldquo;Are you a climber?&amp;rdquo; I didn&amp;rsquo;t expect to be found out there.&lt;/p&gt;</description></item><item><title>Let's go home to Shikoku together</title><link>https://blog.ast.moe/en/blog/2025-06-16/</link><pubDate>Mon, 16 Jun 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-06-16/</guid><description>&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2025-06-15/"&gt;Yesterday I visited the aquarium and Kihinkan&lt;/a&gt;. Today I&amp;rsquo;m heading home from Hokkaido.&lt;/p&gt;
&lt;p&gt;There was a Teto plush in a claw machine at New Chitose Airport. I brought home a new Teto.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-16/GtiSxoSbcAAQS_s_hu_9de0e759dc1dd641.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-16/GtiSxoSbcAAQS_s_hu_277079d05af6e312.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-16/GtiSxoSbcAAQS_s_hu_6fef4a647b0611a7.jpeg"
alt="I found a Teto plush"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;I found a Teto plush&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Let&amp;rsquo;s go home to Shikoku together.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-16/GtiUUYKbIAAWeST_hu_54a57f75cdeb0dc5.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-16/GtiUUYKbIAAWeST_hu_53393d848d1273.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-16/GtiUUYKbIAAWeST_hu_d80deb9fbe139b5c.jpeg"
alt="With my new Teto"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;With my new Teto&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="lunch-at-the-airport"&gt;Lunch at the airport&lt;/h2&gt;
&lt;p&gt;I had a Snow Miku boxed lunch.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-16/GtieNGlaUAAHrK1_hu_7808ccaaa9c0ce4e.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-16/GtieNGlaUAAHrK1_hu_6e4c45d807c4e5f8.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-16/GtieNGlaUAAHrK1_hu_ab60ded67ec09f4.jpeg"
alt="Snow Miku lunch with the Tetos"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Snow Miku lunch with the Tetos&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;The outer box was designed to be taken home. They know exactly what fans will want to keep.&lt;/p&gt;</description></item><item><title>Toward the sea in Otaru</title><link>https://blog.ast.moe/en/blog/2025-06-15/</link><pubDate>Sun, 15 Jun 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-06-15/</guid><description>&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2025-06-14/"&gt;Yesterday I visited the character panels around town&lt;/a&gt;. Today I&amp;rsquo;m heading toward the sea.&lt;/p&gt;
&lt;p&gt;First, Otaru Aquarium. Rikka welcomed us.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-15/GtcmUEPa0AAMdyr_hu_e1ef405ac6207062.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-15/GtcmUEPa0AAMdyr_hu_fbfe4916dfbe34ad.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-15/GtcmUEPa0AAMdyr_hu_7d45df9ab94c14a5.jpeg"
alt="Rikka at Otaru Aquarium"
width="700"
height="933"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Rikka at Otaru Aquarium&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="karin-explains-the-hokke"&gt;Karin explains the hokke&lt;/h2&gt;
&lt;p&gt;Karin was explaining the fish at the hokke tank. I let my Karin plush see it too.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-15/GtcryN6bEAAQSyF_hu_4dd9a9800247fdf.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-15/GtcryN6bEAAQSyF_hu_747369d57dc46aad.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-15/GtcryN6bEAAQSyF_hu_554e1604f9f86496.jpeg"
alt="Karin at the hokke tank"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Karin at the hokke tank&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;The sturgeon was several times bigger than I&amp;rsquo;d imagined. Here it is beside Teto.&lt;/p&gt;</description></item><item><title>My first day in Otaru</title><link>https://blog.ast.moe/en/blog/2025-06-14/</link><pubDate>Sat, 14 Jun 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-06-14/</guid><description>&lt;p&gt;&lt;a href="https://blog.ast.moe/en/blog/2025-06-13/"&gt;I traveled to Hokkaido yesterday&lt;/a&gt;. Today I&amp;rsquo;m exploring Otaru for the first time, with Teto and Karin along for the ride.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-14/GtXVTaEaIAAOtT5_hu_d0980be385f62849.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-14/GtXVTaEaIAAOtT5_hu_e69cbfab1367ea6f.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-14/GtXVTaEaIAAOtT5_hu_3ae4040ff70d459.jpeg"
alt="Beginning our Otaru trip"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Beginning our Otaru trip&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="starting-the-stamp-rally"&gt;Starting the stamp rally&lt;/h2&gt;
&lt;p&gt;I picked up the booklet for the Otaru town stamp rally. Karin and I set off around town.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-14/GtXYwD9bMAQA7WA_hu_64dea863fdff0020.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-14/GtXYwD9bMAQA7WA_hu_44f5467fb31551a8.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-14/GtXYwD9bMAQA7WA_hu_5a086709fa90c4d9.jpeg"
alt="Starting the stamp rally with Karin"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Starting the stamp rally with Karin&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;The shops have panels of Karin, Rikka, and Chifuyu.&lt;/p&gt;</description></item><item><title>A long trip with Teto</title><link>https://blog.ast.moe/en/blog/2025-06-13/</link><pubDate>Fri, 13 Jun 2025 23:00:00 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2025-06-13/</guid><description>&lt;p&gt;I&amp;rsquo;m going on a long trip with Teto today. First, the train.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-13/GtR8nf1aIAARfAI_hu_c4097f66f7af6eb5.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-13/GtR8nf1aIAARfAI_hu_1b600845f6fb39c8.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-13/GtR8nf1aIAARfAI_hu_8e4603b2dbb9a4c7.jpeg"
alt="Setting off with Teto"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Setting off with Teto&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;It had been a while since I took a train. I watched the scenery pass by.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-13/GtR-uzwbMAEzRMb_hu_c12c8707b5e31b48.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-13/GtR-uzwbMAEzRMb_hu_6a4914e35658b347.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-13/GtR-uzwbMAEzRMb_hu_6014195e7a1482a7.jpeg"
alt="The view from the train"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;The view from the train&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;We arrived in Okayama. This is the big city, Teto.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-13/GtSNv7abMAAFemQ_hu_c6af9e0e99a7769a.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-13/GtSNv7abMAAFemQ_hu_6c0ed7248776a24d.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-13/GtSNv7abMAAFemQ_hu_87584f75c558f1c0.jpeg"
alt="Changing trains in Okayama"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Changing trains in Okayama&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;The next leg is on the Shinkansen.&lt;/p&gt;
&lt;div&gt;
&lt;figure&gt;
&lt;a href="https://blog.ast.moe/images/2025-06-13/GtSQCKGbMAYubA__hu_78a528754ff66af1.jpeg" target="_blank"&gt;
&lt;picture&gt;
&lt;source srcset="https://blog.ast.moe/images/2025-06-13/GtSQCKGbMAYubA__hu_d27e69bdcd1c3c18.webp"
type="image/webp"&gt;
&lt;img loading="lazy"
src="https://blog.ast.moe/images/2025-06-13/GtSQCKGbMAYubA__hu_734743754adc468.jpeg"
alt="Continuing on the Shinkansen"
width="700"
height="525"/&gt;
&lt;/picture&gt;
&lt;/a&gt;
&lt;figcaption&gt;Continuing on the Shinkansen&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I was writing an image to a Raspberry Pi during the ride. Tethering was slow, around 100 kbps, perhaps because the train was moving so fast. At least on my phone, ahamo seemed more stable than povo.&lt;/p&gt;</description></item><item><title>Mt.Kita</title><link>https://blog.ast.moe/en/blog/2019-05-15-2/</link><pubDate>Wed, 15 May 2019 23:02:44 +0900</pubDate><guid>https://blog.ast.moe/en/blog/2019-05-15-2/</guid><description>&lt;p&gt;&lt;code&gt;Mt.Kita&lt;/code&gt; writes &lt;code&gt;北岳&lt;/code&gt; in Kanji.&lt;br&gt;
&lt;code&gt;北岳&lt;/code&gt; is pronounced as &lt;code&gt;kitadake&lt;/code&gt;.
This mountain means the north mountain.&lt;br&gt;
But the place is the Southern Alps.&lt;br&gt;
&lt;code&gt;Mt.Kita&lt;/code&gt; is located in the northern part of the Southern Alps.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Mt.Kita&lt;/code&gt; is the second highest mountain in Japan.&lt;br&gt;
However, many Japanese people don&amp;rsquo;t know this.&lt;br&gt;
It is because it exists deep in the mountain.&lt;br&gt;
&lt;code&gt;Mt.Kita&lt;/code&gt; has a height of 3193m, but it can not be seen very much from the city.&lt;br&gt;
Besides, many high mountains are the mark of prefectural border.&lt;br&gt;
But, it isn&amp;rsquo;t.&lt;br&gt;&lt;/p&gt;</description></item></channel></rss>