All Articles

Field notes from software work to everyday decisions

Articles grounded in projects, measurements, and public records. Browse by topic, find the answer first, then follow the original sources to verify it.

Latest

New

Will WebMCP replace Playwright? Turning “guess the button” into tools the website provides

No. Playwright is a browser automation and testing tool. WebMCP lets a cooperating website declare capabilities hidden behind its interface as structured tools. They solve problems at different layers.

Read article

Life & Current Topics

Evidence and constraints behind choices in Taiwan transport, popular products, major events, and seasonal travel.

Crashes fell 21% after ending mandatory hook turns in Tainan. What does the study actually prove?

A 2026 transportation study examined Tainan roads where mandatory two-stage left turns for scooters were removed. Crashes did not rise: the estimated number fell 21%, while the number of people injured fell 19%. Those numbers make a strong headline and an easy overclaim.

Read article

Is the Owala FreeSip worth it? Check the lid, cleaning, and authenticity before buying

The Owala FreeSip did not go viral because vacuum insulation suddenly changed. Its appeal is a lid that is easy to demonstrate: sip through the straw or tilt the same opening for a faster drink, with a cover and carry loop built in.

Read article

2026 Aichi-Nagoya Asian Games: a Taiwan guide to dates, rosters, baseball, and broadcasts

The 2026 Aichi-Nagoya Asian Games run from September 19 to October 4. Japan is one hour ahead of Taiwan, so convert official schedule times. Events, entries, and broadcast channels may still change before competition.

Read article

Planning Japan’s 2026 autumn leaves: choose dates by region, then check the September forecast

As of August 13, 2026, the Japan Weather Association has not released its 2026 autumn-color forecast. Tenki.jp says the new season’s information is expected around September. Precise “2026 peak dates” circulating now are generally not an official seasonal forecast.

Read article

AI Development in Practice

Methods, frameworks, and hard-won lessons from putting AI into a real development workflow — from knowledge management to tooling.

Will WebMCP replace Playwright? Turning “guess the button” into tools the website provides

No. Playwright is a browser automation and testing tool. WebMCP lets a cooperating website declare capabilities hidden behind its interface as structured tools. They solve problems at different layers.

Read article

Keeping AI Code from Becoming a Debt Factory: My 5 Automated CI Rules

AI writes code ten times faster than humans, and it creates hidden technical debt ten times faster as well. It excels at delivering code that compiles and passes tests, but secretly slips in any, ignores edge cases, and reinvents existing helpers.

Read article

llms.txt vs AGENTS.md vs OKF: three kinds of "markdown for AI" that solve different problems

Lately there is a pile of "markdown for AI": llms.txt, AGENTS.md, CLAUDE.md, OKF. They keep getting lumped together, so people ask "if I have one, do I still need the others?"

Read article

I gave my repo a memory so my AI agents would stop forgetting. It almost made me miss a bug.

I built this site piece by piece with Claude Code and Codex. Every session starts cold, so they do not know what came before. I used Google’s Open Knowledge Format (OKF) to turn the repo’s "brain" into a structured Markdown knowledge base.

Read article

OKF vs RAG vs vector databases: what differs, and when to use each

The phrase "OKF replaces the vector database" is confusing because it pits three things from different layers against each other. OKF is a format for knowledge, RAG is a workflow for using it, and a vector database is one retrieval infrastructure.

Read article

Why RAG breaks: chunking destroys structure, retrieval is probabilistic, and syncing is a nightmare

RAG often looks great in a demo, but it starts to fail when the knowledge is structured, frequently updated, and full of relationships. The trouble is usually not in the model; it is in the retrieval layer.

Read article

How to write an OKF bundle: one directory, three rules, one minimal example

The OKF spec is deliberately tiny: a directory of markdown, YAML frontmatter, three rules — that is it. This piece walks through a minimal, runnable bundle.

Read article

OKF + RAG together: give the agent a map, then give it a search

Once the three layers are clear, the practical question is how OKF and RAG compose. The useful architecture has two layers: OKF as the source layer, vector/RAG as the retrieval layer.

Read article

I paid, and the app still calls me a free user: designing two-path subscription sync

The most damaging moment in a subscription product: the user pays, returns to the app, and the screen still says Free. The money moved; the entitlement did not. This is not a purchase-flow bug — it is a state synchronization problem.

Read article

Running AI agents on a schedule: three pitfalls, starting with "exit 0 does not mean success"

An AI agent script that passed a hundred manual runs died on its first night under launchd. And not the noisy kind of death — the kind that prints an error message and then returns exit 0.

Read article

Building an API for a product that has none: reliability engineering for browser automation

NotebookLM has no public API, so I built one with browser automation and published it to PyPI. Getting it to work took a weekend — the real work was the next two releases of reliability fixes.

Read article

The room code is the server address: a real-time multiplayer game with no matchmaking service and no database

A five-player game of Avalon traditionally needs a matchmaking service, a state store, a WebSocket server, and a cleanup job. Built on Cloudflare Durable Objects, those four things collapsed into one call to idFromName and one setAlarm.

Read article

A summary is not knowledge: How AI decides whether an idea should be saved, researched, or turned into a product

A summary makes material shorter without deciding what should happen next. A convincing idea may deserve only a saved source, further investigation, a public article, or a product experiment.

Read article

Will Google OKF replace RAG and vector databases? Understanding the new knowledge format for AI agents

After Google Cloud introduced the Open Knowledge Format (OKF), claims like “Beyond RAG” and “the vector database is being replaced” spread quickly. The three tools solve problems at different layers.

Read article

The evolution of AI development: From prompt and context to harness, loop, and graph

AI development began as an exercise in asking better questions: refine the prompt, add examples, and specify the output. Once models started reading repositories, using tools, and working for longer, the true unit of engineering was no longer a single instruction.

Read article

Why I stopped asking AI to build the whole app

When I first used AI to build apps, my most common instruction was: "Finish this feature for me." Sometimes it worked so quickly that I thought I had found a new way to build software.

Read article

I built a local-first AI brain Skill and realized I do not need Notion AI

Notes should be captured when an idea appears. The decisive issue is not how smart the AI is, but whether thinking and recording are forced into separate places.

Read article

From zero to PyPI: making NotebookLM programmable

Google NotebookLM is good at turning documents into an interactive knowledge base, but it has a practical limitation: it cannot be controlled directly from a program.

Read article

Three AI models answer the same question: neutrality, speed, and bias in an iteration-speed experiment

AI comparisons often focus on features and price. I wanted to ask a different question: how differently would three mainstream models answer the same technical prompt?

Read article

AI Tools & Models

First-hand testing of models and tools: which one fits where in your workflow.

Feeding YouTube links straight to Gemini: one API call, and four things the docs will not tell you

To turn a YouTube video into structured notes, the intuitive pipeline is: scrape the transcript, feed it to a model. You do not need any of that — Gemini's fileData accepts a YouTube URL directly, and the model watches the video itself, subtitles or not.

Read article

The AI model war, round two: Gemini 3.1 Pro, GPT-5.6, Claude Fable 5, Opus 4.8, and Grok 4.5

I had barely finished comparing Gemini 3 Pro, GPT-5.1, and Claude Opus 4.5 when the version numbers jumped again. Google released Gemini 3.1 Pro, OpenAI moved to GPT-5.6, Anthropic introduced Claude Fable 5, and xAI brought Grok 4.5 into the fight.

Read article

How far can I go with only Google AI Pro?

This was an experiment in designing an agentic workflow around Google tools. I deliberately limited the available services to find the practical ceiling of the Google toolchain.

Read article

AI is already changing daily life

AI is no longer a distant idea from science fiction. We do not have to wait for AGI or household robots to see changes in everyday behavior.

Read article

The AI model battle begins: Gemini 3 Pro, GPT-5.1, Claude 4.5 Opus, and a global tech digest

Gemini 3 Pro, GPT-5.1, and Claude 4.5 Opus arrived close enough together to invite comparison. The differences were no longer limited to model size or response speed; they also appeared in reasoning, context handling, and the work each product was built to support.

Read article

3D & Interactive Web

Getting started with Three.js, WebGL, and Blender, alongside playable experiments in the lab.

Skip the Rewrite: 5 Essential Pitfalls When Exporting Godot 4 to WebGL

Godot 4 games easily hit 60fps on Mac or PC, but clicking Export HTML5 and dropping the build onto a web server often leads to an instant blank screen: gray views, cross-origin security barriers, iOS crashes, and audio deadlocks.

Read article

Turning a floor plan into a 3D space you can walk into: the complete Three.js approach

Floor plans are the most universal language of space, and most people cannot actually read them — between that 2D drawing and "what it feels like to live there" sits a translation gap. I turned a real three-bedroom layout into a browser 3D space with orbiting views and draggable furniture.

Read article

I wrote the same BFS twice: once as a quality gate, once as a teacher

My Sokoban game has two solvers. The algorithm is identical — plain breadth-first search — one written in GDScript inside Godot, one in TypeScript running in the browser. This is not wheel reinvention, because they are two entirely different products.

Read article

To crawlers, every page on my site was 46 characters: three stages of SPA prerendering, no framework migration

I curled my own article page, stripped the scripts, and counted what was left: 46 characters. The title. Not one character of body text. All 34 article pages looked like this — to anything that does not execute JavaScript, the site was nearly blank.

Read article

I did not hand-build 100 levels: reverse generation, BFS, and CI for a Godot Sokoban game

BoxCat launched with 40 levels. For version 1.1.0 I wanted 100, with no unsolvable maps, no invented par scores, and no sudden drops in the difficulty curve.

Read article

My 3D page shipped 1.9 MB, and 90% of it was never compressed

Opening the network panel on Midnight Run: 1,894 KB transferred, of which 1,714 KB is two GLB models. On the same page three.js is 564 KB on disk and only 142 KB over the wire.

Read article

Turning a real city into a 3D scene: a pipeline from OpenStreetMap through Blender to Three.js

Midnight Run does not use a track I drew. It runs on a real block of Taipei's Xinyi District. The route comes from an OpenStreetMap snapshot, the city is generated in Blender, and what reaches the browser is a 1.3 MB GLB.

Read article

React meets a Chinese IME: why onChange marks Zhuyin as a typo

The day I finished my typing test I ran it once myself. Speed, accuracy, passage changes — all fine. The next morning I switched back to Zhuyin and the screen turned red. I pressed ㄐ and the app immediately decided ㄐ was not 今. I had missed it the day before because I had tested in English.

Read article

What is WebGL? How browsers draw real-time 2D and 3D without plug-ins

WebGL is a low-level graphics API built into the browser. Through a canvas, JavaScript can send vertices, colors, textures, and shaders to the GPU to draw real-time 2D and 3D without Flash or another plug-in.

Read article

What is Three.js? From WebGL to 3D worlds in the browser

Three.js lets a website become more than a flat page. It wraps low-level WebGL in approachable ideas such as scenes, cameras, materials, and lights, making it practical to build 3D product views, data visualizations, games, and interactive stories with JavaScript.

Read article

What is Blender? From an in-house tool to an open 3D creation platform

Blender is a free and open-source 3D creation suite. Modeling, sculpting, materials, animation, simulation, rendering, compositing, and video editing can all happen in one application. It can also become an automated asset factory for the web.

Read article
See interactive work in the lab →

Building Products

First-hand notes from idea to launch: what got built, why, and what it taught.

Paste a YouTube link, get a stack of study cards in 30 seconds

I have a row of "watch later" YouTube talks, each one easily half an hour, each one still unopened. Saving is quick; turning it into something in my head is the cost I keep deferring.

Read article

Apple has no global chart: what I found by sampling paid rankings across 51 markets

The "chart" you see in the App Store is your country's chart. The United States, Japan, and Taiwan each have their own — not translations of one ranking, but three independent lists. Apple has never offered a global chart at all.

Read article

My product has no PM, so every feature competes for the same person’s time

A solo product has no PM to set priorities, but the product-management work does not disappear. Who needs a feature, why it matters now, and when to stop all return to the same person.

Read article

An AI mistake is manageable. A mistake that looks ready to ship is not

When AI returns an empty response, times out, or breaks the expected format, a product knows to stop. The harder case is a fluent, valid response that drops a constraint or makes the wrong judgment.

Read article

Read later is the most polite way to delete something

When an article looks important but there is no time to read it, saving it for later feels reasonable. Nothing is discarded, and we do not have to admit that we may never return.

Read article

Features are not a product: Using an Outcome Contract to rethink KOFNote

KofAI Note 1.0.0 is now on the App Store. Its current promise can be compressed into one line: “Capture in one tap, and let AI read it for you.” That explains what the product does without defining what the user ultimately gains.

Read article

Why I built BabyDay

BabyDay did not begin with a product plan. Our second child was on the way, and the records from our first were scattered across LINE, phone notes, and paper. When we tried to look back, none of it lined up.

Read article

Why I built KeepOnFirst Focus

I honestly never planned to build a Pomodoro timer.

Read article

How I started writing on Medium: what I learned from publishing three articles in three days

Starting on Medium felt unfamiliar. I was used to expressing ideas through code, and an empty writing editor was harder than I expected.

Read article

Need a break? Play a round

The Chinese typing daily challenge — everyone types the same passages today. See where you rank.

Go to games