<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Yuren&apos;s Blog - All Posts</title><description>Writing is a form of thinking. Publishing and sharing are just byproducts. The real meaning lies in finding belonging and connections within one&apos;s own knowledge framework.</description><link>https://yurenju.blog/</link><language>en</language><item><title>The Afterstory of Pressing the Shutter</title><link>https://yurenju.blog/en/posts/2026-03-21_shutter-afterstory/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2026-03-21_shutter-afterstory/</guid><pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;cloud-chair.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1600&quot; height=&quot;1111&quot; src=&quot;/_astro/cloud-chair.DwHDKzfg_ZFFfJ.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;I recently picked up a Kodak half-frame toy film camera on a whim, and when the developed photos came back, the memories they carried were startlingly vivid. Moments I’d completely forgotten returned to me. The two frames side by side like panels of a comic strip, each pair telling its own little story, pulling me back to the very instant I pressed the shutter.&lt;/p&gt;
&lt;p&gt;Digital cameras and phones always capture the “now.” What you see is what you get, and you can check the photo immediately. But in that moment, it isn’t yet a memory. Only when you revisit those photos after some time has passed does the “now” have a chance to settle into something you’d call a memory. And in the age of social media, not every photo gets that chance.&lt;/p&gt;
&lt;p&gt;Film photography, on the other hand, never has a “now.” The image imprinted on the film when you press the shutter stays hidden until the entire roll is shot and developed. In the meantime, those moments gradually fade. Yet some of them are quietly sorted through in dreams, brewing and fermenting. When the developed photos finally arrive, what you thought you’d forgotten comes rushing back from some deep corner of your mind, warmer and more vivid than you ever imagined at the time.&lt;/p&gt;
&lt;p&gt;Film photography never has a “now.” It is always something brewed and fermented by time. By the moment it first takes shape, it has already become a beautiful memory.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;sakura-and-door.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1600&quot; height=&quot;1111&quot; src=&quot;/_astro/sakura-and-door.CTvpRRq9_Z5Dshk.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;bicycle-and-bench.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1600&quot; height=&quot;1111&quot; src=&quot;/_astro/bicycle-and-bench.BruBytGf_Z1FfaM.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>The Door Opened by OpenClaw</title><link>https://yurenju.blog/en/posts/2026-02-06_the-door-opened-by-openclaw/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2026-02-06_the-door-opened-by-openclaw/</guid><pubDate>Fri, 06 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;openclaw-logo.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;774&quot; height=&quot;427&quot; src=&quot;/_astro/openclaw-logo.DVrFFRTQ_JmPhF.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;“How is OpenClaw different from other AI bots?”&lt;/p&gt;
&lt;p&gt;To answer this question, let me start with the first thing I asked it to help with: &lt;strong&gt;finding coffee shops I’d like&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I have very specific preferences when it comes to coffee, which means I’d have to click into every single coffee shop on Google Maps, checking whether their menu lists the coffee’s origin, processing method, and so on before I could filter out the ones I’d actually enjoy. This has always been a real pain, and no other bot supported browsing store photos on Google Maps either.&lt;/p&gt;
&lt;p&gt;So after setting up OpenClaw, my first question was about nearby coffee shops. My next question was whether it could look at the shop’s interior photos or Google reviews. That’s when its response got really interesting.&lt;/p&gt;
&lt;p&gt;“Currently only returning basic information, no photos or review content.”&lt;/p&gt;
&lt;p&gt;“If you want, I can add photo and review functionality to this skill, but it’ll take a bit of time to modify the code. Should I do it?”&lt;/p&gt;
&lt;p&gt;My jaw literally dropped when I saw this reply. When I used ChatGPT or Gemini before, the room for customization was limited, and I’d never encountered a bot that could modify its own code to solve my problem. It was like watching it pick up a soldering iron, crack open its own mechanical chest, and rewire itself.&lt;/p&gt;
&lt;p&gt;After discussing it with the bot, here’s what it produced.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;bernard-cafe-scout.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;839&quot; height=&quot;1390&quot; src=&quot;/_astro/bernard-cafe-scout.CW-WyqDy_MwO64.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Coming back to the question of “how OpenClaw differs from other AI bots,” I’d say OpenClaw is like “having a software engineer as a partner, and giving them a computer.” Beyond using the existing tools on the computer to solve problems, the most important thing is that it can &lt;strong&gt;create and modify tools&lt;/strong&gt;. If its current tools can’t view Google Maps images, it simply modifies the code to add that capability.&lt;/p&gt;
&lt;p&gt;Most current AI chatbots primarily provide tools, and those tools need to be built by someone else before users can access specific services. OpenClaw, on the other hand, builds its own tools even when nobody has provided them. Even a tool like Claude Code, which can also build tools, is somewhat different — Claude Code’s purpose is to collaboratively develop software with you.&lt;/p&gt;
&lt;p&gt;OpenClaw’s purpose in building tools is to solve your problems in a more general sense.&lt;/p&gt;
&lt;p&gt;From there, I started tackling some of my other frustrations. For instance, I have a habit of reading news from various countries, but for reading speed, I usually have to find foreign news sites with Chinese versions — like The New York Times, Deutsche Welle, RFI, and so on. But with OpenClaw, I simply asked it to research which media outlets from different countries offer RSS feeds for their original-language news sites, then asked it to pick out stories I’d likely find interesting based on its understanding of me, translate them into Chinese, and produce an audio news briefing every morning. Now I can just listen to the news when I wake up.&lt;/p&gt;
&lt;p&gt;I even added a rating system so it can use my feedback to improve its news selection next time 😁&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;bernard-daily-news.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1288&quot; height=&quot;1417&quot; src=&quot;/_astro/bernard-daily-news.CXWOmuSN_Z2llxwL.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Of course, this brings us back to the elephant in the room. Is OpenClaw really that unsafe?&lt;/p&gt;
&lt;p&gt;This is easy enough to imagine. Give a software engineer a computer (even without admin privileges) and consider what they could do and how dangerous that could be. Ask your engineer friends about the silly things that happen in engineering circles — accidentally deleting databases, messing up git, nuking the root directory, and so on. This bot is capable of doing all of those things (even though the model itself has many safety measures in place).&lt;/p&gt;
&lt;p&gt;OpenClaw is roughly at that level of risk, plus the additional possibility of being hijacked through Prompt Injection to do other things. In my case, if someone injects malicious content into an RSS feed or comments, I’m not confident it can adequately defend against that kind of attack.&lt;/p&gt;
&lt;p&gt;So I’d say the security concerns are quite serious, especially if you don’t provide it with an isolated environment and instead run it on your own computer — that makes the security issues even greater.&lt;/p&gt;
&lt;p&gt;But none of this can overshadow the fact that OpenClaw is an experiment brimming with creativity and fun. If you look at how Anthropic or OpenAI conduct experiments, they’re relatively cautious, hoping to accomplish more within a controllable scope. OpenClaw takes the opposite approach: what if I give an AI bot a computer — how fun could that be?&lt;/p&gt;
&lt;p&gt;It’s like the dance of Shiva — the beginning of destruction, and also the moment of rebirth.&lt;/p&gt;</content:encoded><category>Tech</category></item><item><title>Mount Fuji and the Sunset</title><link>https://yurenju.blog/en/posts/2026-01-23_layers-of-context-and-me/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2026-01-23_layers-of-context-and-me/</guid><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;em&gt;Arrivals Hall&lt;/em&gt;, the author mentions that the key to transforming from a foreigner to a local is to stop constantly comparing everything to your homeland—which food tastes better, how clean the streets are, the different smell of the air. Having never lived as an outsider before, I recently found myself revisiting earth science because of Mount Fuji.&lt;/p&gt;
&lt;p&gt;There aren’t many tall buildings near my residence, so visibility is excellent on clear days. One autumn day last year, I noticed for the first time that I could see Mount Fuji from the corridor outside my home. The reason I hadn’t noticed before was due to the climate—only during autumn and winter does the air become clear enough to see that far. Since that day, stepping out each morning feels like spinning a capsule toy machine, occasionally revealing Mount Fuji in the distance.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;fujisan.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/fujisan.lvM743dQ_Z7ajq.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Even more surprising than the capsule toy excitement was discovering that the position of each day’s sunset was gradually moving closer to Mount Fuji. This reminded me of earth science class—the Earth’s axial tilt causes the sunset position to shift daily. With Mount Fuji as a reference point, this change becomes even more apparent.&lt;/p&gt;
&lt;p&gt;Doesn’t that mean there’s a day when the setting sun aligns perfectly with the summit of Mount Fuji? A quick search revealed that this phenomenon has a special name: “Diamond Fuji.”&lt;/p&gt;
&lt;p&gt;The weather isn’t perfect every day, but observing the sunset’s gradual shift is genuinely exciting—something not easily experienced in Taiwan. Like the sense of seasons, higher latitude countries have more distinct seasonal divisions, making the trajectory of sunsets more pronounced. But it’s not all good. The recent weather forecast said clear skies, yet at noon under a cloudless sky, the temperature was just 4 degrees Celsius.&lt;/p&gt;
&lt;p&gt;In autumn, I could leisurely sit at an outdoor table sipping hot tea and reading. In winter, the wind blows so hard it gives me a headache. The direction of my apartment’s floor-to-ceiling windows happens to not catch any sunlight. One day, I discovered that the glass curtain wall of a distant building reflects sunlight into my room. I moved my hands and feet toward that patch of light, desperately absorbing what little reflected warmth I could.&lt;/p&gt;
&lt;p&gt;This, too, is what it means to be a foreigner—unable to shake the habit of constantly comparing things to home, at least for now.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;taipei-101-sunrise.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/taipei-101-sunrise.DgxD2sJJ_ZGwezq.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;But recently, while flipping through old photos, I found one of sunrise over Taipei 101.&lt;/p&gt;
&lt;p&gt;It was taken on a sleepless early morning in Taiwan, shortly after moving into a new home and still adjusting. That restlessness turned into an unexpected gift—a beautiful sunrise. Thinking back, I had also wondered then whether the sunrise would inch closer to Taipei 101 day by day. As I continued scrolling through photos, I realized that sunrises and sunsets have always captivated me. My album is filled with golden hours from different countries—from Greece to Turkey, from desert to ocean.&lt;/p&gt;
&lt;p&gt;Whether foreigner or local, identity doesn’t have to be so binary. Like all those golden hour photos, each image is a slice that constructs the self. A person’s sense of identity isn’t formed merely by comparing two moments in time, but by layering memories and emotions from each slice together, weaving them into a story that is complete yet still unfolding.&lt;/p&gt;
&lt;p&gt;Looking back, when I eagerly awaited the spectacle of Diamond Fuji, those two days turned out to be overcast. The photos I managed to capture before and after landed just to the left and right of the peak.&lt;/p&gt;
&lt;p&gt;Even having missed it, this experience, this amusing anecdote, and this connection to my past life—all of it is worth pressing the shutter to preserve. Along with other precious memories, they’re filed away in the album, breaking free from the stark divide between foreigner and local, weaving together a perspective uniquely my own—one unconfined by existing boundaries.&lt;/p&gt;
&lt;p&gt;Let these beautiful slices of context layer upon one another, building up to form the one-of-a-kind person I am today.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;fuji-diamond.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1024&quot; src=&quot;/_astro/fuji-diamond.M-WtcLXp_20m9DF.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Language as the Scissors of Concepts</title><link>https://yurenju.blog/en/posts/2026-01-17_language-as-scissors/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2026-01-17_language-as-scissors/</guid><pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;While learning Japanese recently, I noticed a fascinating difference between languages. The Japanese word “tsume” (爪) refers to both animal claws and human fingernails. In Chinese, however, these are separate concepts that cannot be conflated—a claw is a claw, and a fingernail is a fingernail.&lt;/p&gt;
&lt;p&gt;This resonates with Saussure’s idea that “language carves up concepts.” Before language existed, concepts were a chaotic mass. When pointing at a person, the gesture might indicate a human, a woman, a sister, or a mother. These blurry boundaries only became clear once language emerged. The role of “older sister” finally gained a distinct definition.&lt;/p&gt;
&lt;p&gt;But how roles and concepts get divided varies across languages. English uses “Sister” to describe a female relative sharing the same parents, while Chinese splits this into “jiějie” (older sister) and “mèimei” (younger sister). And the moment these words came into being, culture was born with them. Because seniority matters, distinctions exist.&lt;/p&gt;
&lt;p&gt;If language is a pair of scissors, then concepts are the fabric. The different shapes cut by different scissors—that is culture.&lt;/p&gt;
&lt;p&gt;By observing how language cuts through concepts, we can see what a particular culture values. Japanese has carved out the word “komorebi” (木漏れ日), the dappled sunlight filtering through leaves. In autumn and winter, the street in front of the station near my home is lined with ginkgo trees. After lunch, I often take walks along this street. Sitting beneath the amber-yellow ginkgos, I can feel the sunlight streaming through gaps in the leaves, hear the rustling whisper of leaves brushing against each other, and savor the lingering warmth of the winter sun in the crisp cold air.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;ginkgo.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/ginkgo.BQrjK5aJ_1DsVhx.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Across the street stands a row of cherry trees. At the tail end of spring, walking down this street reveals what the Japanese call “sakura fubuki” (桜吹雪): a storm of cherry blossoms swirling like snow. Walking along, petals occasionally brush gently against my face. When cars pass by, they stir up swirling pink vortexes. Both embody the imagery this word evokes.&lt;/p&gt;
&lt;p&gt;Yet the most fascinating thing about being human is the ability to encounter different cultures. After slowly chewing and digesting them over time, we can try to find our own place. Language is just a pair of scissors; culture is merely the cut fabric. But ultimately, a tailor is needed—someone to fashion the garments. Originally, we each possessed only one pair of scissors. But after exploring this world long enough, we accumulate more tools and materials. Yet when caught up in the busyness of daily life, we can only solve the problems right in front of us, making it hard to notice other options.&lt;/p&gt;
&lt;p&gt;Only after pausing to reflect do we gradually discover which parts of our native culture we love and which we dislike. Only then do we have the chance to step back and survey the various fabrics we actually possess, alongside a dazzling array of needles, threads, and scissors.&lt;/p&gt;
&lt;p&gt;It’s time to become our own tailor, stitching together a version of ourselves that we can truly love.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Wabi-Sabi in the Death of a Project</title><link>https://yurenju.blog/en/posts/2026-01-16_wabi-sabi-of-loss/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2026-01-16_wabi-sabi-of-loss/</guid><pubDate>Fri, 16 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;ginkgo-tree-chair.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1638&quot; height=&quot;2048&quot; src=&quot;/_astro/ginkgo-tree-chair.-VDLNl2i_1bIPdu.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;My account was removed from the previous project’s organization. An era has ended, but it also marks the beginning of another chapter.&lt;/p&gt;
&lt;p&gt;I’ve been reading a book about wabi-sabi lately (perhaps not the interior design style you might imagine). One passage discussed observing the creation and dissolution of things, attempting to appreciate the beauty in these transitions. The example given was of ancient travelers who would cut rushes and bind them together to shelter for a night in the wilderness. The next morning, they would untie the ropes holding their temporary refuge, and the camp would simply dissolve back into the wild.&lt;/p&gt;
&lt;p&gt;The rushes scattered in a circle on the wilderness floor would gradually be carried away by the wind, consumed and decomposed by bacteria in the soil. This kind of beauty is wabi-sabi—the essence of “death and rebirth.”&lt;/p&gt;
&lt;p&gt;When the rushes were cut by the traveler, their life as plants ended, yet they were reborn as a new form: a shelter. The next day, once the ropes were untied, the camp disintegrated again, and eventually all those remnants would become the foundation for something new.&lt;/p&gt;
&lt;p&gt;Life is the same way. When something ends, its traces slowly fade. But the nutrients left behind after decay always nourish the sprouting of something else. If you can appreciate this kind of transition, that too is a form of wabi-sabi.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Between Seasons</title><link>https://yurenju.blog/en/posts/2025-11-16_between-seasons/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-11-16_between-seasons/</guid><pubDate>Sun, 16 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;“What are your impressions of your time in Tokyo?”&lt;/p&gt;
&lt;p&gt;Several friends have asked me this question at different times—when I first arrived, after a few months, and even recently. The question surfaces now and then, and I often ask myself too. This question (and its answer) is like the sound of waves I once heard at a pebble beach on Taiwan’s east coast: waves rolling in one after another, and as they retreat, white foam sweeps up small smooth stones, their tumbling creating a flowing rhythm.&lt;/p&gt;
&lt;p&gt;“The sense of seasons, I’d say.”&lt;/p&gt;
&lt;p&gt;In my time in Japan, the passage of time leaves visible traces. The changing of the four seasons manifests in different ways, leaving marks of varying density, like tree rings.&lt;/p&gt;
&lt;p&gt;In spring, cherry trees line both sides of the road near my home. A small truck speeds by, stirring up a flurry of pink petals. During the sweltering summer when hydrangeas bloom everywhere, I joined a festival carrying a portable shrine, shoulders covered in sweat. My shoulders still ache with faint bruises when the cicadas gradually fall silent, and the faucets in department store restrooms begin dispensing warm water instead of cold.&lt;/p&gt;
&lt;p&gt;The distant view I never noticed when looking out from my apartment entrance—Mount Fuji occasionally emerges through the autumn clouds, revealing itself.&lt;/p&gt;
&lt;p&gt;These past few days at Nansho-so in Morioka, the crimson maple leaves against the Japanese architecture seem to pause time itself. My hands and feet begin to feel the cold of the season, and when sunlight slants through the windows, I unconsciously stretch my limbs toward its warmth.&lt;/p&gt;
&lt;p&gt;In my days in Japan, the sense of seasons washes over me like the rhythm of rolling waves. If I carefully fold, write down, and preserve these memories, they will eventually become my own tree rings, recording the traces of life lived on this land.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;sakura.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/sakura.DdC-4px9_Z1Fotfo.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;hydrangea.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/hydrangea.Ch8rPHU7_Z8Jbnb.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;mitaka-festival.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/mitaka-festival.xtIq3fMf_Z1vhReS.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;fujimt.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/fujimt.V8nX2A4J_Z2fuViw.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;autumn-leaves.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/autumn-leaves.0XGgW-IT_ZdLOGq.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Writing as a Belated Understanding</title><link>https://yurenju.blog/en/posts/2025-11-03_writing-belated-understanding/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-11-03_writing-belated-understanding/</guid><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;writing-belated-understanding.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/writing-belated-understanding.C5NIaUWL_Z13lzfK.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;A few months ago, I discussed with a friend the subtle differences between writing by hand and typing on a keyboard. Since then, I’ve gradually returned to using notebooks and pens for taking notes. I don’t even have the feeling of “reclaiming” handwriting because I never really started. Since getting my first laptop in high school, I’ve barely done any extensive handwriting.&lt;/p&gt;
&lt;p&gt;This reminded me of an evening several years ago when I was driving my mother and several aunties who raised me back to their hotel after dinner. They had been with me throughout my childhood, so our conversation naturally drifted back to those early years. Before I started school, I spoke Taiwanese fluently—the native language spoken by the majority of Taiwanese people. But once I entered elementary school, the educational environment heavily favored Mandarin Chinese, which had become Taiwan’s official language after 1949. Whether due to the school system or because my classmates primarily used Mandarin, my Taiwanese gradually deteriorated.&lt;/p&gt;
&lt;p&gt;“Are you a mainlander’s kid?” a relative who only spoke Taiwanese would often joke with me. This “joke” gradually spread among the family. In Taiwan, “mainlander” (外省人) refers to those who migrated from China around 1949 and their descendants—a group historically associated with Mandarin dominance and, in some contexts, a different cultural identity from native Taiwanese. To be mistaken for one while being ethnically Taiwanese carried subtle social implications. She meant no harm and was just joking, but over time I became increasingly reluctant to speak Taiwanese, and even avoided visiting that relative’s home because within a few exchanges, there it was again: “mainlander’s kid.”&lt;/p&gt;
&lt;p&gt;From that point on, my Taiwanese never improved.&lt;/p&gt;
&lt;p&gt;Of course, my English wasn’t much better either. Fortunately, as I grew older, I had a tutor who made learning interesting, and eventually my English reached a level where I could at least communicate. This made me realize that languages can actually be learned. Now I’ve started learning Japanese again—it’s difficult, but I feel like I’m slowly making progress.&lt;/p&gt;
&lt;p&gt;Besides my poor Taiwanese, another thing that was frequently mentioned was my “terrible handwriting.” So after getting my first personal laptop in high school, I subconsciously avoided handwriting altogether. From then on began a two-to-three-decade life of typing out all kinds of notes and articles on keyboards. Typing has become an internalized way of thinking—a method of dialogue with myself that unfolds gradually with consciousness.&lt;/p&gt;
&lt;p&gt;But after years of research into note-taking and writing, many people have mentioned the impact of handwriting with pen and paper on thinking. This is why I’ve reconsidered using pen and paper again.&lt;/p&gt;
&lt;p&gt;Eventually, I bought a new toy—an e-ink notebook, a product that bridges the digital and the handwritten.&lt;/p&gt;
&lt;p&gt;After trying to write daily journals with it for a few weeks, my journal entries have grown longer and longer, as if decades of unwritten weight has slowly seeped in. Of course, I’m someone whose enthusiasm burns bright and fast—whether I can sustain this practice requires long-term observation.&lt;/p&gt;
&lt;p&gt;But at least right now, I’m enjoying the feeling of “reclaiming” writing. The continuous flow of handwriting does allow thoughts to be chewed over, organized, and brewed between the lines—different from the rhythmic, punctuated sensation of typing on a keyboard, yet both are different ways of thinking.&lt;/p&gt;
&lt;p&gt;Looking back, when I was young, I couldn’t find a way to resist. It seemed that “refusal” was the only way out—refusing to write, refusing to speak Taiwanese.&lt;/p&gt;
&lt;p&gt;But now that I’m older, I understand it’s not a zero-sum game, not the kind of confrontational relationship where one must lose for another to win. Instead, I can find an angle that suits me, positioning myself uniquely among various strengths and weaknesses.&lt;/p&gt;
&lt;p&gt;Even though my handwriting is still messy, there are traces of thought between these strokes, which later transform into interesting ideas. In the end, this allows my older self to dissolve the confused emotions of childhood.&lt;/p&gt;
&lt;p&gt;And perhaps one day I can also reclaim Taiwanese. I hope when that day comes, it won’t be for anyone’s criticism or praise, but simply for myself.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>The Ōkuchi-no-Magami of Mount Mitake</title><link>https://yurenju.blog/en/posts/2025-10-18_mitake-ookami/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-10-18_mitake-ookami/</guid><pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;metake-jinja-with-mountains.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/metake-jinja-with-mountains.BlH0Azgf_ZhCB95.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The innkeeper at Mount Mitake was a talkative woman who, during every meal, enthusiastically shared all sorts of things about the mountain—the exceptional quality of the water, how you could see Tokyo Bay and Kawasaki from the room, how adorable her Shiba Inu was, and so on.&lt;/p&gt;
&lt;p&gt;I tried my best to understand her stories with my limited Japanese vocabulary, and realized that communication and language are two different skills. With just a handful of English words, plenty of Japanese, and a lot of gestures, she somehow managed to get about seventy or eighty percent of her message across to me.&lt;/p&gt;
&lt;p&gt;The reason I came to spend a night at Mount Mitake was a fortunate coincidence—I had recently learned about the Orionid meteor shower. Lately, I’d had many interesting encounters related to the night sky, so I started looking for a place to watch the meteor shower. The peak viewing date was October 21st, but the weather forecast predicted clouds. I remembered visiting Mitake Valley before to scout bouldering spots and thought that Mount Mitake, with its minimal light pollution, would be a perfect place for stargazing. So I came up on a date that was still some distance from the optimal viewing day.&lt;/p&gt;
&lt;p&gt;Of course, I didn’t see the meteor shower (laughs).&lt;/p&gt;
&lt;p&gt;The closest I got was when I was adjusting my tripod to photograph the crescent moon. Suddenly, out of the corner of my eye, I caught a bright streak cutting across the sky. Startled, I thought back on it but couldn’t even be sure whether it was really a meteor. Every time I’ve had a chance to see shooting stars in my life, it’s always been like this—just barely catching a glimpse. It seemed this time wasn’t my lucky day either.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;nightsky.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/nightsky.Dlk8VBMM_Z1iLedB.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;But I did have a sky full of stars. I moved the sofa next to the window and lay there gazing up at Orion until drowsiness crept in. I dozed off and woke several times before slowly crawling back to bed.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;ookami-by-akira-himekawa.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/ookami-by-akira-himekawa.D-cBkC6U_W5uwl.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The next morning at breakfast, the innkeeper brought out a framed picture—six wolves rendered in ink-wash style. She explained it in great detail in Japanese, and all I caught was the word “Nintendo” appearing in the conversation. As I listened to her explain to the guest in the next room, I looked it up.&lt;/p&gt;
&lt;p&gt;So wolves are called “Ōkami.”&lt;/p&gt;
&lt;p&gt;Isn’t that the Japanese title of Capcom’s &lt;em&gt;Ōkami&lt;/em&gt; game?&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Gradually, I picked up on a few more keywords. Deer and boar eat the crops that farmers grow, but wolves eat these pests that trouble farmers. That’s why wolves are worshipped as deities in this region, and the “Ōkuchi-no-Magami” enshrined at Mitake Shrine is the divine incarnation of the wolf.&lt;/p&gt;
&lt;p&gt;That’s why so many people bring their pet dogs (both are canines) to Mount Mitake to pray for their pets’ health.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;paw.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;1638&quot; src=&quot;/_astro/paw.Drb60L01_Z2pbOJA.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Later, I looked at several more wolf-related artworks in the inn. They really had the feel of &lt;em&gt;Ōkami&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;ookami-3.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/ookami-3.CM2zCeY-_Z1jHvIA.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;These kinds of coincidences are truly fascinating.&lt;/p&gt;
&lt;p&gt;These memories originally just sat scattered in my mind, but certain things that feel especially novel or significant are like particularly bright stars in the night sky, so I give those stars names. And as interesting memories accumulate more and more, sometimes they unexpectedly connect with each other, and the connected stars become a constellation.&lt;/p&gt;
&lt;p&gt;It’s just that everyone has their own personal Orion. Even without meteors, that’s pretty wonderful.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;I later researched and found that &lt;em&gt;Ōkami&lt;/em&gt; appears to draw from a broad range of wolf-related mythology rather than specifically referencing Mount Mitake’s legends, but it’s still delightful to connect memories that I find interesting. Those six paintings were the work of Akira Himekawa (姫川明輝), who is responsible for the official manga adaptations of Nintendo’s &lt;em&gt;The Legend of Zelda&lt;/em&gt;. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><category>Life</category></item><item><title>A Frame on the Wall, Marked Out with Masking Tape</title><link>https://yurenju.blog/en/posts/2025-09-27_wall-frame-of-memories/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-09-27_wall-frame-of-memories/</guid><pubDate>Sat, 27 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;frame.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/frame.DJ1COMjK_Z27tRON.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;It’s been a while since I outlined a frame on the wall with masking tape.&lt;/p&gt;
&lt;p&gt;Lately, I’ve been listening to “Fujiyama” from the &lt;em&gt;Jazz Impressions of Japan&lt;/em&gt; album most mornings. The quiet, flowing melody is perfect for those moments just after waking, when I’m still trying to make sense of dream fragments—brewing coffee, letting the aroma and music gradually ease me into a state where I can gather my thoughts.&lt;/p&gt;
&lt;p&gt;Sitting on the couch, I look up and there it is: the frame.&lt;/p&gt;
&lt;p&gt;I’ve been thinking about what to fill it with. Something that connects with me, I thought. Recently, I came across a postcard at a café advertising a small exhibition in Kichijoji and went to check it out, but didn’t find anything that felt right. Truth is, I don’t really know what would fit. Perhaps it’s impossible to decide until something is actually hanging there.&lt;/p&gt;
&lt;p&gt;Then September arrived, and I was reminded by a past note to myself in the calendar: go see the solo exhibition at Seizan Gallery in Ginza.&lt;/p&gt;
&lt;p&gt;Not long after arriving in Japan, I visited the SOMPO Museum to see Van Gogh’s &lt;em&gt;Sunflowers&lt;/em&gt;, only to stumble upon a work by artist Yusuke Ishigami called &lt;em&gt;The Day I Saw the Stars&lt;/em&gt;. It transported me back to a childhood memory—seeing thousands of fireflies flickering like a shimmering galaxy in the night. The impression was so vivid that I shared the experience on the &lt;a href=&quot;https://artsticker.app/posts/358740&quot;&gt;ArtSticker website&lt;/a&gt;, and that’s when I learned about Ishigami’s September solo show.&lt;/p&gt;
&lt;p&gt;At the gallery, I was lucky enough to meet Yusuke Ishigami himself. I was surprised and delighted that he still remembered my comment. Having the chance to speak directly with an artist is truly precious. What an artist wishes to convey through their work is received in different forms depending on the viewer’s own experiences. More often than not, a painting awakens the viewer’s own memories or thoughts. &lt;em&gt;The Day I Saw the Stars&lt;/em&gt; depicts a scene of lying in a car watching a meteor shower, yet it carried me across time to a childhood memory—of my brother and me seeing countless fireflies like a river of stars.&lt;/p&gt;
&lt;p&gt;The scene created by the artist and the memories evoked in the viewer overlap and blend like dream images, forming a unique viewing experience within the space of the exhibition. What’s fascinating is that when you exchange these thoughts with the artist, the different perspectives on a single thing might become seeds for future creations in each of our lives.&lt;/p&gt;
&lt;p&gt;As for that frame on the wall—it eventually found its proper form. The blurred points of light in the night resemble the scene I saw as a child, but the distant mountain ridge illuminated in the dark, the elongated trails of red taillights—these fragments absent from my memory merge together in a way that’s both surreal and strangely fitting, just like a dream.&lt;/p&gt;
&lt;p&gt;It’s like a window. But what you see through it is a dreamscape connected across time and space. The child I was, the adult I’ve become, and all the people and things I’ve encountered—woven together in this dream.&lt;/p&gt;
&lt;p&gt;This is the painting &lt;em&gt;Palace of Memories (Shimmering Atmosphere)&lt;/em&gt;, by artist Yusuke Ishigami.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;painting.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2048&quot; height=&quot;2048&quot; src=&quot;/_astro/painting.CfE8_IYO_CrMBi.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Making Claude Code Run Its Own Acceptance Tests</title><link>https://yurenju.blog/en/posts/2025-07-22_claude-acceptance-test/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-07-22_claude-acceptance-test/</guid><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Over the past few months, I’ve been developing with Cursor and Claude Code, continuously pushing the boundaries to see what LLM assistance can achieve. Throughout this process, I’ve encountered common issues that many developers face:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Development speed is fast, but quality varies. When it works well, it’s surprisingly good; when it fails, it’s equally surprising&lt;/li&gt;
&lt;li&gt;When requirements aren’t clear enough, the LLM fills in details on its own, and these details aren’t necessarily what I want&lt;/li&gt;
&lt;li&gt;The LLM writes too fast and generates too much code, causing cognitive overload for developers who can’t help but accept everything when reviewing the content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After various experiments, from a software developer’s perspective, I’ve found a working method that suits collaboration with LLMs: returning to acceptance testing. After this extended period of AI collaboration, I’ve discovered that working with LLMs shares many similarities with working with human engineers: the clearer the requirements and the more discussion, the more likely the output will meet expectations.&lt;/p&gt;
&lt;p&gt;This made me recall the Cucumber framework and its Gherkin syntax that I learned early in my career. Cucumber is a Behavior-Driven Development (BDD) tool that uses human-readable and machine-readable documents as acceptance criteria. For example, if we’re developing a Todo application, one specification would be the ability to submit a todo item by pressing Enter. Using Gherkin syntax, we can describe it like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light vitesse-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#121212;color:#24292e;--shiki-dark:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;gherkin&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;  Scenario&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt; Add todo item&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    When &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I enter &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;Buy milk&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt; in the input field&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    And &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I press the Enter key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    Then &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I should see &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;Buy milk&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt; in the list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;    And &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;the input field should be cleared&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But how does this translate into executable tests? Typically, you need to write glue code to bridge the specification with the test logic:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light vitesse-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#121212;color:#24292e;--shiki-dark:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; Given&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; When&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; Then&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt; require&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;@cucumber/cucumber&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; expect&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt; require&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;@playwright/test&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;// Assume we have a page object to manipulate the browser&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;When&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;I enter {string} in the input field&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209;--shiki-dark:#BD976A&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // Find the input field and enter text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;input[type=&quot;text&quot;]&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;  await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;When&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;I press the Enter key&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // Press Enter key in the input field&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;input[type=&quot;text&quot;]&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;  await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;press&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;Enter&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;Then&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;I should see {string} in the list&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209;--shiki-dark:#BD976A&quot;&gt;expectedText&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // Verify that the todo item appears in the list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; todoItems&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;.todo-item&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; itemTexts&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; todoItems&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;allTextContents&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;  expect&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;itemTexts&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;toContain&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;expectedText&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;Then&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;the input field should be cleared&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; ()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#758575DD&quot;&gt;  // Verify that the input field is cleared&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;locator&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;input[type=&quot;text&quot;]&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#BD976A&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt; inputField&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;inputValue&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;  expect&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#BD976A&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#80A665&quot;&gt;toBe&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D77&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#666666&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I’ve used Cucumber in several side projects before, but never in production projects. The main reason is that introducing such a mechanism isn’t easy. It’s already rare for teams to accept TDD, let alone bridging specifications to automated testing.&lt;/p&gt;
&lt;p&gt;It’s also related to my frequent work in startup teams. Startups typically don’t have the luxury of time to practice the cycle planning from specification to testing.&lt;/p&gt;
&lt;p&gt;However, the biggest obstacle was writing glue code. Because it breaks down each sentence into separate actions, a single test scenario gets fragmented into many small pieces. Additionally, when writing Gherkin, you need to be very careful to write the same sentences identically for the same functionality, so they can be merged in the glue code. For example:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light vitesse-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#121212;color:#24292e;--shiki-dark:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;gherkin&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;When &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I click the button &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;ok&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#4D9375&quot;&gt;When &lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#DBD7CAEE&quot;&gt;I go to click the button &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#C98A7D&quot;&gt;&quot;ok&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These would be split into two different test logic fragments. Remember, when doing the same thing, the descriptions must be exactly the same.&lt;/p&gt;
&lt;p&gt;In short, using Cucumber was a novel and interesting experience, but various obstacles prevented me from using it in production projects.&lt;/p&gt;
&lt;p&gt;However, things are different in the age of LLM-assisted software development, because LLMs can directly read specifications written in Gherkin and &lt;strong&gt;execute them directly without needing glue code&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Since LLMs can directly read and understand specifications, and through the Model Context Protocol (MCP), Cursor or Claude Code can directly operate browsers and mobile emulators to assist development. This means we can use Gherkin to describe the expected behavior, and the LLM can verify through MCP whether its development results pass acceptance testing.&lt;/p&gt;
&lt;p&gt;Gherkin syntax serves as an excellent bridge. It’s a standard syntax that both humans and LLMs can understand, so we can use this specification to confirm implementation details before development, and after development is complete, let the LLM read this specification and use MCP to operate browsers and mobile devices for acceptance testing. For a detailed demonstration, please watch the YouTube video below.&lt;/p&gt;
&lt;p&gt;!youtube[WvGY_Jcm_kY]&lt;/p&gt;
&lt;p&gt;This not only serves as a communication tool with LLMs, but when it discovers that acceptance conditions aren’t met, it can also observe and modify the implementation.&lt;/p&gt;
&lt;p&gt;If you’re interested, you can try it yourself on GitHub: &lt;a href=&quot;https://github.com/yurenju/llm-bdd-coding-demo&quot;&gt;yurenju/llm-bdd-coding-demo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;bdd--tdd&quot;&gt;BDD + TDD&lt;/h2&gt;
&lt;p&gt;BDD can reduce the problem of unexpected results through clearer specifications and acceptance criteria, but it cannot solve the &lt;strong&gt;cognitive overload&lt;/strong&gt; problem for developers. Combining it with incremental TDD can alleviate this issue.&lt;/p&gt;
&lt;p&gt;When using BDD, development specifications and acceptance criteria can be well defined, but another situation frequently encountered in LLM development is that the LLM writes too fast. When the amount of content generated at once exceeds my cognitive capacity, I can’t resist the temptation to directly press &lt;strong&gt;confirm&lt;/strong&gt;, but sometimes not looking carefully results in content that’s not what I wanted.&lt;/p&gt;
&lt;p&gt;To solve this cognitive load, I’ve recently been testing BDD + TDD. The BDD part uses Gherkin as acceptance criteria as described earlier. But I ask the LLM to break down components, and when developing each component, follow this sequence:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First write the interface, empty classes, or empty functions, and throw an unimplemented error like &lt;code&gt;throw new Error(&apos;not implemented yet&apos;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ask it to &lt;strong&gt;write only test descriptions&lt;/strong&gt;, meaning the automated test’s &lt;code&gt;describe(&apos;description&apos;)&lt;/code&gt; and &lt;code&gt;it(&apos;description&apos;)&lt;/code&gt;, and let me review them without implementing any test logic&lt;/li&gt;
&lt;li&gt;At this stage, I’ll know roughly what level of testing it intends to write, and I can communicate directly about the granularity of tests. Usually, I significantly reduce the test items because generally, it writes too detailed&lt;/li&gt;
&lt;li&gt;After confirming the test items, ask it to write the test logic&lt;/li&gt;
&lt;li&gt;Run the tests. At this point, all newly added tests should fail (red phase)&lt;/li&gt;
&lt;li&gt;Ask it to start implementing, and run tests after implementation. Theoretically, all the tests we wrote should pass (green phase)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Under this development flow, the output of each stage stays within my cognitive capacity, and I can properly review its output. Then, after having a clear understanding of “what is correct,” like the BDD flow, it can perform well with clear completion conditions.&lt;/p&gt;
&lt;p&gt;If you’re interested in this type of development flow, you can refer to my previous work &lt;a href=&quot;https://github.com/yurenju/cursor-tdd-rules&quot;&gt;yurenju/cursor-tdd-rules&lt;/a&gt;. If you need to use it with Claude Code, some modifications will be required.&lt;/p&gt;
&lt;p&gt;However, please remember that these are still evolving collaborative development methods. Tools and usage techniques are updating very quickly, and they may soon become outdated.&lt;/p&gt;
&lt;p&gt;The main purpose of using this development method is to reduce my own cognitive burden, allowing projects to remain under my control while using LLMs as much as possible to accomplish my goals. At the same time, by defining boundaries and goals, I can better communicate with the LLM about what my objectives actually are.&lt;/p&gt;
&lt;p&gt;Through this process, I also feel that I become clearer about what I want from the early stages of development. The key to working with LLMs is similar to working with humans: more frequent communication and requirement confirmation.&lt;/p&gt;
&lt;p&gt;So perhaps it’s not that different from working with humans after all - it’s about strengthening your communication skills.&lt;/p&gt;</content:encoded><category>Tech</category></item><item><title>Asked AI to Write Code, But It Can&apos;t Understand Me?</title><link>https://yurenju.blog/en/posts/2025-04-23_ai-coding-doesnt-understand-me/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-04-23_ai-coding-doesnt-understand-me/</guid><pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently, one of the sub-projects in our company’s new project experimented with a new development approach: attempting to write most of the code using AI (Cursor), minimizing human intervention as much as possible, hoping to understand the future software development model through small-scale experimentation.&lt;/p&gt;
&lt;p&gt;We also hoped that with AI’s assistance, we could significantly shorten the development cycle:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;reduce-development-cycle.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;952&quot; height=&quot;620&quot; src=&quot;/_astro/reduce-development-cycle.DfsiRO6k_4RYfV.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;If you’ve tried this on a slightly larger project, you can probably guess what our initial results were like:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;expected-and-actual.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;952&quot; height=&quot;620&quot; src=&quot;/_astro/expected-and-actual.DN7tC4id_G5Qat.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Whenever we wanted AI to do a bit more, it often couldn’t follow our expectations. Most work that can be completed in one go is usually simple, clear, and unambiguous tasks—these are usually done well.&lt;/p&gt;
&lt;p&gt;Of course, we won’t stop using AI for development because of this. For me personally, over 80-90% of the code is now developed using AI, with extensive use of conversational development. Since AI has deep software development capabilities, I can seriously act as a supervisor, ensuring that its work is completed as expected.&lt;/p&gt;
&lt;p&gt;But how do we reach this level? Before actually introducing AI to a project, we need to reflect on how we usually develop software projects within the team.&lt;/p&gt;
&lt;h2 id=&quot;traditional-software-development-discussions&quot;&gt;Traditional Software Development Discussions&lt;/h2&gt;
&lt;p&gt;In traditional software development processes, teams often conduct strategic discussions from a product perspective, and then the engineering team discusses technical solutions. After meetings and documentation, once consensus is reached, the product is gradually developed through iterative development.&lt;/p&gt;
&lt;p&gt;What’s important in the software development process is the team’s &lt;strong&gt;consensus&lt;/strong&gt; and &lt;strong&gt;context&lt;/strong&gt;. When we expect AI to create the ideal system in our minds based on just a few words, relying on the common sense of software engineers it has learned, what’s missing is conveying the most important consensus and context to it.&lt;/p&gt;
&lt;p&gt;Because it’s not a mind reader—it won’t know this context from just a few short conversations.&lt;/p&gt;
&lt;p&gt;Teams can build consensus and clarify context through meetings and documentation. So how do we provide such information to AI? There are several things we can try.&lt;/p&gt;
&lt;h2 id=&quot;use-rules-to-define-direction&quot;&gt;Use Rules to Define Direction&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;rule-for-right-track.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/rule-for-right-track.Ccz50Og7_Z11rC5v.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;In Cursor, you can define rules. Although writing quality rules still requires a lot of time to consider and refine, rules can set a general direction for AI and bring its working style closer to the team’s.&lt;/p&gt;
&lt;p&gt;For example, should we write tests? To what extent? What kind of git commit messages do we prefer? What are the component writing conventions, naming rules, and technology stack to adopt? Without communicating these, it will often do as it pleases, like a software engineer who just joined the team and hasn’t yet adapted to the development culture.&lt;/p&gt;
&lt;h2 id=&quot;break-down-specs-and-progress-step-by-step&quot;&gt;Break Down Specs and Progress Step by Step&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;rules-specs-impl.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/rules-specs-impl.DIlftk9A_6AljF.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Write a feature specification before implementation (of course, have it write it). Fully read and discuss the spec first, ensure what it wants to do is the same as what you want to do, then ask it to implement.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;rule-spec-workflow.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/rule-spec-workflow.D4vnUEhT_ZpHewc.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;You don’t have to write all the feature specs yourself. In our case, usually after creating a task in a project management service (like Asana), I tell it what I know this task should do, and ask it to write the spec. Then we discuss and update the spec it produced, and after completing the spec, open a new Chat Context and ask it to implement according to the spec.&lt;/p&gt;
&lt;p&gt;If you feel the spec isn’t written well, then revise the rule that generates the spec so that the team can generate better documentation quality when creating specs in the future.&lt;/p&gt;
&lt;p&gt;The length of specs will vary depending on team habits, but shorter ones are easier to read and make it easier to develop according to our intentions. This helps us better achieve our goals.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;feature-specs.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1904&quot; height=&quot;1241&quot; src=&quot;/_astro/feature-specs.C9NK3AYu_Z1e9vYV.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;As mentioned earlier, without context or consensus, it’s very difficult to make the product we want. Besides establishing context and consensus through Rules, another way to avoid this problem is to set the goal first, but don’t write all the specs at once—only write the spec for the feature you’re about to complete.&lt;/p&gt;
&lt;p&gt;Since we’ll correct the direction it wants to go based on the spec it writes, each time we write and implement a spec, we can correct deviations. This allows the project to move from idea to actual product in the expected direction.&lt;/p&gt;
&lt;h2 id=&quot;specs-should-have-acceptance-criteria&quot;&gt;Specs Should Have Acceptance Criteria&lt;/h2&gt;
&lt;p&gt;The content of specs will vary with each team, but I recommend having Acceptance Criteria. These acceptance criteria explicitly tell AI what counts as done. Such clear conditions can help AI more concretely know to what extent it needs to complete something.&lt;/p&gt;
&lt;p&gt;There are many ways to define acceptance criteria. From an engineer’s perspective, automated tests or checks can be substituted, such as unit tests or integration tests. Also, if you’re developing a web application, you can use &lt;a href=&quot;https://github.com/microsoft/playwright-mcp&quot;&gt;microsoft/playwright-mcp&lt;/a&gt; to have AI open a browser to see what the current result is, and verify by directly operating the webpage.&lt;/p&gt;
&lt;p&gt;When it can better judge the current results, it becomes easier to determine completion and take subsequent actions.&lt;/p&gt;
&lt;p&gt;If automated verification isn’t possible, you can also ask it to list manual testing methods, verify them yourself, and then tell it the results. Of course, it would be better if it can verify and fix itself.&lt;/p&gt;
&lt;h2 id=&quot;so-far&quot;&gt;So Far…&lt;/h2&gt;
&lt;p&gt;We’re also still trying out this development model, and there are many things that need adjustment in this process. Currently, we feel the rules -&gt; spec -&gt; implementation workflow works reasonably well. When writing specs, there’s an opportunity to discuss with AI and update the plan, so before starting work, we can adjust it to the form we want to complete.&lt;/p&gt;
&lt;p&gt;However, we’ve also encountered the problem that Cursor isn’t very good at following rules. Over time, these issues should gradually be fixed, or better practices will accumulate. But until that day comes, we’ll likely need to frequently modify rules. Currently, we feel that rules that are too long tend to be forgotten, and clear and short ones work better. Also, the description of rules is important because it affects when AI wants to apply specific rules.&lt;/p&gt;
&lt;p&gt;Also, recently many people have been talking about Vibe Coding, which is developing through conversation in an almost intuitive way, not caring much about implementation details.&lt;/p&gt;
&lt;p&gt;But actually, a large part of what’s called “intuition” is that you already have deep background knowledge and experience in a domain, which allows you to seemingly effortlessly complete things using “intuition.” In reality, not everyone can do this, and it also involves expressive ability.&lt;/p&gt;
&lt;p&gt;To reach this level, you still need to see whether the person operating has sufficiently deep insights into the product domain and possesses sufficiently refined and clear expressive ability.&lt;/p&gt;
&lt;p&gt;I think everyone should approach from their own perspective, seeing what method suits them for collaborating with AI to develop software projects. As a software engineer and a curious person, plus having accumulated certain expressive abilities from years of writing, I adopt methods suitable for me to collaborate with AI—more precisely describing my needs, dividing work, setting acceptance criteria and software development preferences, and even using automated testing methods to enable AI to do better.&lt;/p&gt;
&lt;p&gt;I just start from my own perspective, understanding what I like and what I’m good at, then customize the workflow with AI. In this interaction, I discovered that compared to writing code, I prefer building products. Interacting with AI gives me the opportunity to separate these two things more clearly and understand myself better.&lt;/p&gt;
&lt;p&gt;And everyone is different. My advice is to look back and examine what you like and what you’re good at, then find a suitable way to collaborate with AI. There’s no shortcut to understanding yourself—everyone just has to spend a lot of time exploring.&lt;/p&gt;
&lt;p&gt;Even if your interest is writing code yourself and this process brings you happiness, then perhaps not using AI is best for you. In &lt;a href=&quot;https://www.youtube.com/watch?v=pVr3sEeus6E&amp;#x26;t=1245s&quot;&gt;Naoki Urasawa’s interview&lt;/a&gt;, he mentions his view on AI art, saying: “Because I think drawing is very enjoyable, for someone like me who can find joy in work, wouldn’t it be a waste to leave it to AI?”&lt;/p&gt;
&lt;p&gt;What the masses are pursuing isn’t necessarily what’s right for you. You still need to look back and understand what kind of person you are, what you’re passionate about, and take the next step from your own perspective.&lt;/p&gt;
&lt;p&gt;It’s okay if AI can’t understand what you’re saying. Understanding yourself is more important.&lt;/p&gt;</content:encoded><category>Tech</category></item><item><title>Trading Tokens Directly Within Claude Desktop</title><link>https://yurenju.blog/en/posts/2025-03-13_uniswap-mcp/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-03-13_uniswap-mcp/</guid><pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Conversational AI tools initially had no access to external information, but gradually began to integrate external tools such as search functionality. However, “search” is a broad and expansive feature. For specific functions like checking the weather or querying stock prices, while web search can accomplish these tasks, it still falls short compared to directly integrating new weather or stock market features through APIs.&lt;/p&gt;
&lt;p&gt;Looking at the broader picture, there are countless services on the internet, making it impossible to connect them all through APIs. Moreover, some tools are not in HTTP API format but are only available on local computers. For example, when programming, it would be ideal for an editor to access precise browser screens, structures, and developer debugging information, which cannot be connected through HTTP APIs.&lt;/p&gt;
&lt;p&gt;MCP is an open standard designed to help AI understand how to utilize tools. For instance, if you want assistance with task management, you can use an Asana MCP to connect to a task management service via API, enabling it to help plan entire projects, create necessary data, and even manage task dependencies.&lt;/p&gt;
&lt;p&gt;The browser-assisted development mentioned earlier can also be achieved through &lt;a href=&quot;https://github.com/executeautomation/mcp-playwright&quot;&gt;mcp-playwright&lt;/a&gt;, which allows browser manipulation, direct console reading for error detection, and automatic correction.&lt;/p&gt;
&lt;p&gt;I happened to have a work-related task that required researching related matters, so I experimented with writing a Uniswap MCP using Protocolink and Moralis, allowing direct trading within Claude Desktop.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;uniswap-mcp.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1704&quot; height=&quot;1344&quot; src=&quot;/_astro/uniswap-mcp.CdheqHGK_18vyDW.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;You can watch the demonstration at &lt;a href=&quot;https://www.youtube.com/watch?v=7fRmwQYaBLg&quot;&gt;this YouTube link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After completing this, it made me reflect on the development of messaging apps over the past decade. Initially, LINE MINI App and Telegram Mini Apps became popular, but later most functionality was redirected to external web pages, with only small, simple UI elements embedded within messaging conversations. I would take the same approach, as implementing on external sites is simpler—only the most essential user authentication needs to be handled within LINE.&lt;/p&gt;
&lt;p&gt;A few months ago, when I saw Vercel’s AI SDK 3.0, it was a moment when I realized that future software user interfaces might be very different. Their announcement included a tool that could generate a weather display interface directly after querying the weather.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;vercel-ai-sdk.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1653&quot; height=&quot;757&quot; src=&quot;/_astro/vercel-ai-sdk.B-R26kZc_1WPIDt.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;I initially thought it was completely dynamic UI generation, but after carefully reading the documentation, I found that you still need to &lt;a href=&quot;https://sdk.vercel.ai/docs/ai-sdk-ui/generative-user-interfaces#create-ui-components&quot;&gt;predefine UI components&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Even if they haven’t achieved that yet, it opened up a space for imagination: What if UI components could dynamically assemble appropriate UI interfaces based on the context of received data? What if future user interactions are completely different from today? Will it be voice conversations followed by completely dynamic generation of suitable user interfaces?&lt;/p&gt;
&lt;p&gt;What kind of impact will this have on our industry?&lt;/p&gt;
&lt;p&gt;I think projecting or imagining the future is an interesting endeavor. The future appears chaotic yet interesting, but I hope the interesting aspects outweigh the chaos.&lt;/p&gt;
&lt;h2 id=&quot;postscript&quot;&gt;Postscript&lt;/h2&gt;
&lt;p&gt;This uniswap-mcp was written solely for research purposes, and 99% of the code was written by Cursor. We all know that we shouldn’t pass private keys into programs through environment variables, but for those who are still curious, here’s the source code. Please only use it for testing and research purposes, and don’t put too much money into it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yurenju/uniswap-mcp&quot;&gt;https://github.com/yurenju/uniswap-mcp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>Tech</category></item><item><title>Before the Perplexity Comet Browser Release</title><link>https://yurenju.blog/en/posts/2025-02-25_before-perplexity-comet/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-02-25_before-perplexity-comet/</guid><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;perplexity-comet-browser.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1966&quot; height=&quot;745&quot; src=&quot;/_astro/perplexity-comet-browser.BynsB0Tb_Z1LJI8J.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Perplexity is about to launch a new browser called Comet. While we don’t know what it will actually look like, it’s interesting to imagine. Suppose this browser enables human-AI collaboration for web browsing. For instance, when you need to find information, it could search across various search engines, read through results, and organize the data for you. If you need to update Google Docs or Notion, it could directly open the web page and modify the document. If that’s the case, the impact could be quite significant.&lt;/p&gt;
&lt;p&gt;I once heard a reason for building humanoid robots: the entire world is designed with humans as the reference point—stairs, door handles, washing machines, TV remotes, and so on. If a new creation takes a different form, it won’t be able to interact with the infrastructure that has been accumulated over hundreds or thousands of years.&lt;/p&gt;
&lt;p&gt;I think this browser feels somewhat similar. Traditionally, if web services wanted to allow machine access, they had to develop new APIs. They even implemented human verification systems like reCAPTCHA to counter various automated crawlers.&lt;/p&gt;
&lt;p&gt;But if the next generation of browsers enables human-AI collaboration for web browsing, suddenly much of the existing infrastructure becomes accessible. Automation barriers disappear—when human intervention is needed, the AI requests your assistance, then continues working once you’ve helped. Imagining this future reveals a very different world. Many cross-service integrations that previously seemed complex suddenly become simple—though we’ll also need to solve many new problems 🤣&lt;/p&gt;
&lt;p&gt;The future remains chaotic yet fascinating. I hope the fascinating parts outweigh the chaos.&lt;/p&gt;</content:encoded><category>Tech</category></item><item><title>Nectar Coffee</title><link>https://yurenju.blog/en/posts/2025-02-24_nectar-coffee/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-02-24_nectar-coffee/</guid><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;nectar-coffee.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/nectar-coffee.BGpzhQdv_Z209G3w.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;As we drive through the Hsuehshan Tunnel toward Toucheng, we always talk about the small things in life. Sometimes we discuss how the light slants through the window and illuminates the rattan chair, sometimes we talk about the podcast by the flower shop owner in Yilan, and sometimes we discuss trivial matters that seem to trouble only us in the entire world.&lt;/p&gt;
&lt;p&gt;Usually, before we reach any conclusions, we’ve already taken the elevator to the top floor, greeted the owner Natalie, and pulled out chairs to sit down at Nectar Coffee. The conversation isn’t over yet, but now we’re agonizing over what coffee to order today—whether those ten circles on that limited edition coffee we both wanted have already been filled with other customers’ names, or whether we can secretly delight in signing our name in the last remaining circle.&lt;/p&gt;
&lt;p&gt;The conversation continues. The owner joins the discussion, steering it in even more open-ended directions while serving coffee so delicious it makes our eyes widen and leaves us speechless. And so the topics branch out and continue right up until the moment before we head home.&lt;/p&gt;
&lt;p&gt;Since there are never any answers, Nectar Coffee, which initially seemed like our destination, always becomes part of the journey instead.&lt;/p&gt;
&lt;p&gt;Last month when I visited Nectar Coffee, I told Natalie that I’d be going to Tokyo for work. After her surprise, we exchanged many thoughts about life. Life is fluid, a series of choices with no right or wrong answers. Every decision we make at each crossroads offers no chance to start over. Rather than dwelling on regret and remorse, it’s better to accept that no one has the omniscient eye to see through every possible outcome at every fork in the road. Tell yourself that in that moment, you made the best decision you could.&lt;/p&gt;
&lt;p&gt;All that’s left is to learn to appreciate the scenery along the journey.&lt;/p&gt;
&lt;p&gt;Recently, Nectar Coffee posted an announcement. The last day of business would be in one week. I’m happy that Natalie has announced her own decision, and I’ve thoroughly enjoyed every moment spent in this rooftop café. We tried singing bowls together, discussed the musicality and colors in the taste of coffee, watched a friend grimace through a video conference while drinking on the balcony with its spectacular view of Turtle Mountain Island, I envied my friend pressing the shutter of their GR film camera here, and we talked about the emotions stirred by &lt;em&gt;Perfect Days&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;At first, as we drove through the Hsuehshan Tunnel, Nectar always felt like a destination, but it was never just that. When we waved goodbye at dusk, it had already transformed from a destination into a beautiful journey that my friends and I would treasure.&lt;/p&gt;
&lt;p&gt;When I walked into a café in Kichijoji and received a stamp card with circles drawn on it, I couldn’t help but smile. I understood then that in this moment, Nectar Coffee had embarked on a new journey together with me.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>The Pale Blue Night Sky at SOMPO Museum</title><link>https://yurenju.blog/en/posts/2025-02-11_sompo-in-pale-blue/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-02-11_sompo-in-pale-blue/</guid><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;sompo-outside.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/sompo-outside.BfiHgES__1ruhcG.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Today I visited the SOMPO Museum to see &lt;em&gt;Vase with Fourteen Sunflowers&lt;/em&gt;, the only painting from Van Gogh’s sunflower series in Asia. But unexpectedly, I discovered another work by artist Yusuke Ishigami related to the night sky, which brought back memories from my childhood.&lt;/p&gt;
&lt;p&gt;The first was from a summer camp I attended as a child. One day, our group stayed overnight at a school in the mountains. That night, there were only faint insect sounds, and it was strangely quiet. On the school’s side, there was no wind or clouds, yet in the distant night sky, lightning kept flashing. Like pressing the fast-forward button, the lightning instantly spread like a spider’s web, silver-white complex lines crisscrossing and filling the distant sky in a moment. I expected a thunderous roar to follow seconds later, but it never came from that faraway night sky.&lt;/p&gt;
&lt;p&gt;And so, the lightning repeatedly flashed, intertwined, and disappeared in the distant night sky like a silent film, until I drifted into deep sleep.&lt;/p&gt;
&lt;p&gt;The second memory is from when my brother and I were in Nantou as children. One night, we went flying squirrel hunting with our father’s hunter friends. As we ventured deeper into the mountains, it became pitch dark, and the hunters could no longer bring children along. The hunter uncle told us to wait there, and they would come back for us after the hunt was over.&lt;/p&gt;
&lt;p&gt;We two children were left like that in a forest deep in the mountains. Looking back, it was truly reckless - this place had absolutely no artificial light sources - yet for some reason, we never felt afraid. At first, we were laughing and chatting, but after a while, both my brother and I fell silent, watching the forest slowly transform in the night.&lt;/p&gt;
&lt;p&gt;Then, our surroundings gradually grew brighter. We were surrounded by thousands of fireflies. It was like being inside the Milky Way, with brilliant constellations descending around us. Even without atmospheric scattering, these stars flickered on and off like breathing, displaying vitality like celestial bodies. This scene was deeply etched into my heart, becoming a sight I could never forget for the rest of my life.&lt;/p&gt;
&lt;p&gt;At the Ryuichi Sakamoto exhibition at the Museum of Contemporary Art Tokyo, there was a passage:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How many times will you remember a particular afternoon from your childhood, an afternoon that has become so deeply a part of your life that you cannot even imagine yourself without it?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;These two experiences truly constitute who I am. In the decades since I’ve grown up, I occasionally recall these nights, and they have become the foundation of my being as a person. Perhaps this is why I’m drawn to various artworks related to the night sky. For instance, when I listen to Emilíana Torrini’s song “Nightfall,” I feel that humans are like shooting stars in the boundless starry sky, and meeting anyone while crossing that sky is a rare and precious connection.&lt;/p&gt;
&lt;p&gt;So when I saw this painting, &lt;em&gt;The Day We Saw the Stars&lt;/em&gt;, I was similarly drawn to the night sky, the shooting star, and the dreamlike transparency of the human figures.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;the-day-we-saw-the-stars.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/the-day-we-saw-the-stars.BqdNqV5H_2b1i4.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Looking at this painting, “Nightfall” echoes in my heart. Just as the lyrics describe, life is merely a fleeting moment of brilliance. Like a shooting star crossing the night sky, gently carried by the light and shadows of twilight, flying through this brief and beautiful pale blue night sky.&lt;/p&gt;
&lt;p&gt;If we should meet in the night sky by chance, then let us nod, smile, and greet each other.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Loyalty Cards and the Sense of Belonging</title><link>https://yurenju.blog/en/posts/2025-02-03_point-card-belonging/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2025-02-03_point-card-belonging/</guid><pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;point-card-belonging.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/point-card-belonging.CWcfMUTZ_Z17XkAv.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Unlike the blackout curtains in my bedroom back home, lately when I wake up, I see light streaming through the gap between the curtain and the window. In my drowsy state, it gently reminds me that I’m no longer home. But there’s another side to this. It gives me a clearer sense of the day’s framework, like the sound of temple sweeping every morning in &lt;em&gt;Perfect Days&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Recently, I’ve had several conversations with friends about the sense of belonging. We talked about how, when you love a place, you no longer need to compare it with your hometown or anywhere else—when you simply love it, that’s a kind of belonging. But this realization often only emerges after you’ve become a local. So what about those who’ve just arrived in a foreign land? How does an outsider begin to fit in?&lt;/p&gt;
&lt;p&gt;I think it still has to start with sorting trash. Understanding the boundary between burnable and non-burnable waste, distinguishing between PET bottles and “recyclable plastic packaging and containers.” After carefully studying the instructions, I suddenly got it, and that made me genuinely happy—perhaps that was the first step toward fitting in.&lt;/p&gt;
&lt;p&gt;A few nights ago, I returned to Kichijoji and remembered the café my friend had recommended. I’d had coffee there before dinner once, and I really liked the atmosphere. Last time I visited, there was an elderly couple with their pet dog, enjoying coffee together. At dusk, people outside the window were strolling leisurely down the street. The shop sold coffee beans and café-branded clothing with “Light Up” printed on them. I could see why everyone loves Kichijoji.&lt;/p&gt;
&lt;p&gt;Lost in these thoughts, the sky had darkened, and the streetlights were coming on. I checked my watch—half an hour until closing. I decided to get a coffee to go.&lt;/p&gt;
&lt;p&gt;When I ordered, the staff suddenly asked me something. I didn’t catch the key word, so I just said “hai.” Then he pulled out a small card and carefully wrote the coffee type and date in the first box. It was a loyalty card.&lt;/p&gt;
&lt;p&gt;Perhaps loyalty cards also represent a step toward fitting in. It suggests that I might come here ten times for coffee, collecting stamps until I earn a discount, and that discount would be like a badge celebrating my deeper connection with this community.&lt;/p&gt;
&lt;p&gt;How many loyalty cards does it take to create a sense of belonging? Maybe one morning, when I see the sunlight streaming through the curtain and hear the sweeping sounds, and I no longer think about how well the curtains at home block out the light—that’s when I’ll be able to extend the feeling of home to another city.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>The Questions Within Perfect Answers—Between The Garden of Words and Perfect Days</title><link>https://yurenju.blog/en/posts/2024-12-31_perfect-answers-with-questions/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2024-12-31_perfect-answers-with-questions/</guid><pubDate>Tue, 31 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;Shinjuku Gyo-en.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;724&quot; src=&quot;/_astro/Shinjuku%20Gyo-en.CNPe3EqT_CfwK6.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Today, while talking with Chialin, I realized why I’m drawn to Makoto Shinkai’s work before &lt;em&gt;The Garden of Words&lt;/em&gt;. Perhaps it’s because during that period, he tried to express something delicate, something most people barely notice—like the subtle emotions we felt as children. At the time, we couldn’t fully understand them, and even now as adults, when we occasionally recall those moments, we find ourselves still trapped in those childhood scenes.&lt;/p&gt;
&lt;p&gt;In &lt;em&gt;The Garden of Words&lt;/em&gt;, a young man falls for someone older than him. In &lt;em&gt;5 Centimeters per Second&lt;/em&gt;, an elementary school student is separated from someone he’s drawn to before understanding his own feelings, moved to a distant place beyond his imagination. In &lt;em&gt;The Place Promised in Our Early Days&lt;/em&gt;, after making a promise, all contact is lost until adulthood.&lt;/p&gt;
&lt;p&gt;Looking back as adults, we might smile at these memories of our awkward youth. But to our younger selves, these were completely incomprehensible, and the feelings and struggles in our hearts were the most profound memories of that time in our lives.&lt;/p&gt;
&lt;p&gt;While organizing my articles these past few days, I came across a comment about my former self:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This time I finally made up my mind to organize all my articles from Blogger and Medium. Just like a physical move, the process is always messy and painful. But when I pick up something I wrote carelessly over a decade ago, I hate that naive self, while simultaneously envying him for being so carefree.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Truth be told, some of the questions from my childhood still remain unanswered. When they occasionally come to mind, I don’t know what emotions to feel.&lt;/p&gt;
&lt;p&gt;Shinkai’s early films feel like he took the profound impact and confusion of childhood, let them settle over the years, and then conveyed them again through cinema. And those who remain confused are drawn to and moved by such delicate sentiments.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Perfect Days&lt;/em&gt;, on the other hand, represents a different kind of feeling. It’s more like after years of refined contemplation, through the repeated ritual of daily life, discovering that ordinary, monotonous yet unutterably beautiful path. Walking along that trail, rediscovering the beautiful things in life. Even when memories of the past bring tears, once you return to that cyclical daily routine, you can lift your spirits and continue noticing those beautiful parts of everyday life.&lt;/p&gt;
&lt;p&gt;Shinkai’s confusion and Wim Wenders’ conviction form an interesting contrast. The former is trapped in childhood emotions, and in situations beyond explanation, projects the audience into the imagined world he’s constructed through scene descriptions that transcend detail, sharing his confusion. Wenders, meanwhile, firmly presents his own answers while simultaneously revealing his own uncertainties.&lt;/p&gt;
&lt;p&gt;Whether questions or answers, both are forms of exploration. They’ve each walked far enough along their own path of answers. I, too, often answer my own questions. Every time I make a decision, I never know if that choice is good or bad.&lt;/p&gt;
&lt;p&gt;In the end, perhaps there’s no such thing as good or bad. It’s simply a path that keeps moving forward. Between questions and answers, we redefine ourselves again and again, carefully polishing and carving ourselves into the shape we want to become.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Dreams, Daydreams, and Unresolved Matters</title><link>https://yurenju.blog/en/posts/2024-12-23_dreams-and-daydreams/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2024-12-23_dreams-and-daydreams/</guid><pubDate>Sun, 22 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;ceiling-tree-shadows.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/ceiling-tree-shadows.o0hHMLl-_ZHbUpu.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;There’s a theory that dreams are byproducts of memory consolidation. When we fall into deep sleep, the various experiences of joy, anger, sorrow, and pleasure from the day are sorted and filed away in our brain. Some of these newly formed memories are stored into long-term memory, and the dust stirred up during this process forms our dreams.&lt;/p&gt;
&lt;p&gt;On the other hand, during those moments of spacing out while awake, my thoughts occasionally drift away. For instance, when I sit in the unlit living room after waking up in the morning, watching the slanting sunlight cast on the curtains, I recall the awkward emotions from yesterday’s conversation. Or during the thirty-second wait for coffee to bloom, I remember a convenience store clerk’s thoughtful gesture.&lt;/p&gt;
&lt;p&gt;In &lt;em&gt;The Poetics of Space&lt;/em&gt;, this drifting of thoughts while awake is called “daydream.” This process clarifies my thoughts and unconsciously determines how I should act next time. These seemingly random drifts, when examined closely, are all about things I can’t quite articulate but deeply care about.&lt;/p&gt;
&lt;p&gt;Dreams and daydreams form a cyclical process. Nighttime dreams arise from the brain organizing memories, while daytime daydreams lead to a reorganization of values. These reorganized values might then become new material for nighttime dreams.&lt;/p&gt;
&lt;p&gt;Through this repeated folding and storing of memories, a self-prophetic book of answers takes shape. It can’t be casually flipped through, but when various things happen in the future, the heart quickly turns to the page describing the appropriate emotional response to that event, allowing me to feel happy when it’s time to be happy, and sad when it’s time to be sad.&lt;/p&gt;
&lt;p&gt;Revising this book isn’t easy. But by frequently reflecting on ourselves and detaching to observe our emotional reactions and reflexive behaviors through writing or other means, we can gradually come to understand our impulsive actions and groundless sadness. We pat ourselves on the shoulder and find the right moment to reconcile with ourselves.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>2024 New Year Card</title><link>https://yurenju.blog/en/posts/2024-12-08_new-year-card/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2024-12-08_new-year-card/</guid><pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;New Year card.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;5651&quot; height=&quot;5651&quot; src=&quot;/_astro/New%20Year%20card.5MaLBs7F_Z2vGPIk.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Yesterday, I received a New Year card from a friend. Holding it at year’s end brings a sense that everything from this year has gently settled, worthy of revisiting—though I’d like to turn back a bit further, starting from the year before last.&lt;/p&gt;
&lt;p&gt;2022 marked a significant turning point for me. Exhausted in both body and spirit, I left the workplace, only to return this year. Over these two years, I’ve spent much time asking myself and friends what they truly “love.” That “something” takes many forms—it could be work, a living space, a hobby like painting, or devotion to children.&lt;/p&gt;
&lt;p&gt;This reflects my own inner confusion: What do I really love, and what do I want? From work to various hobbies and skills I’ve mastered, being good at something doesn’t mean I love it, and vice versa. And loving something doesn’t guarantee I can sustain it long-term. Love, aptitude, and sustainability—these combinations always confound us.&lt;/p&gt;
&lt;p&gt;Throughout these years, what I’ve done most is explore and set life goals to achieve. One of them was walking the Kumano Kodō. I had visited this ancient pilgrimage route five years ago, but on the second day, I got lost and ended up taking a ride from the guesthouse owner straight to the destination. It became a lingering regret.&lt;/p&gt;
&lt;p&gt;In 2023, I returned to the Kumano Kodō with friends. We chased cherry blossoms at season’s end, experiencing together what remained unfinished from before. We visited the cafe owner who sheltered me in the heavy rain, took photos with the guesthouse’s pet sheep, and enjoyed the packed lunch the owner prepared for us along the trail.&lt;/p&gt;
&lt;p&gt;When we finally reached Kumano Hongū Taisha, I thought I’d be moved to tears. But I wasn’t. The moment I checked off an item on my life’s bucket list, what I felt was a calm yet lingering complexity—joy tinged with bewilderment. But I’m grateful to have accomplished this with like-minded friends. Without reaching Kumano Hongū Taisha together, I would never have experienced this intricately woven emotion.&lt;/p&gt;
&lt;p&gt;Through these years of various attempts, I feel I’m gradually getting to know who I am, like turning the pages of a novel. Except the protagonist is still on the journey. Even as some mysteries unravel, the ending remains unknown—much like the experience of staying at Kamikura-Hideaway. Travel, bouldering, even the random conversations at Ganlu Coffee in Toucheng—to me, they’re all forms of self-exploration.&lt;/p&gt;
&lt;p&gt;As 2024 comes to a close, if I ask myself again: What kind of person am I, and what do I love? I still don’t have a simple answer. But I certainly understand myself better than I did two years ago.&lt;/p&gt;
&lt;p&gt;Receiving this New Year card truly warmed my heart, and I’m genuinely happy for my friend. I know he has another project—designing his own T-shirts. Seeing this designed card that merges his interests makes me realize: we’re all on the path of seeking ourselves. That self’s outline is always blurry, but through creation and practice, we gradually move toward that ideal contour—whether by changing our future outline through experience, or by transforming our present selves to match our ideal outline.&lt;/p&gt;
&lt;p&gt;And now, the new chapter of 2025 is about to begin. The next page remains blank. Perhaps there’s an outline in mind, perhaps not—but that won’t stop us from embarking on a new journey. Along the way, we might encounter earth-shattering waves, or simply appreciate the pale blue wildflowers by the roadside.&lt;/p&gt;
&lt;p&gt;Either way, when we meet again in some city or village in the world, let’s share our stories once more.&lt;/p&gt;</content:encoded><category>Life</category></item><item><title>Onomichi, a Café, and the Fireworks Festival</title><link>https://yurenju.blog/en/posts/2024-08-04_onomichi-fireworks-and-cafe/</link><guid isPermaLink="true">https://yurenju.blog/en/posts/2024-08-04_onomichi-fireworks-and-cafe/</guid><pubDate>Sun, 04 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img alt=&quot;Cover photo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;1200&quot; src=&quot;/_astro/cover_onomichi-cafe-fireworks.CtCXoKLQ_a33NP.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;“I saw you walk past the café thirty minutes ago,” the owner said with a smile, wiping down the counter.&lt;/p&gt;
&lt;p&gt;Before hearing these words, I had spent the previous week working at a co-working space in Okayama, and only caught a train to Onomichi on Friday for a small trip within my journey. On that sweltering summer afternoon, as I searched for a restaurant, I passed by this café and caught the scent of what promised to be a good coffee shop. Naturally, after lunch, I made my way there.&lt;/p&gt;
&lt;p&gt;Sliding open the large wooden-framed glass door, I entered the small, exquisite café with four seats arranged shoulder to shoulder. At the entrance, coffee beans in pure white packages—distinguished by different colors marking their origins—were neatly displayed, adorning the space in the most unobtrusive way. Sitting inside felt peculiar: the openness from the large windows offset the narrowness of having only four seats and a counter area. Yet this arrangement of sitting side by side and face to face, much like &lt;em&gt;Alone Together&lt;/em&gt;, made conversation an essential element of the café.&lt;/p&gt;
&lt;p&gt;The owner’s English was quite good, and the customer next to me seemed to be a regular. The owner introduced him as another owner who sold draft beer in Onomichi. Tomorrow evening, during the fireworks festival, they would set up together in front of the café to sell draft beer and food. Understanding only a few Japanese words, I couldn’t follow much of their conversation—most of it translated by the café owner. But from their warm, friendly tone, I could sense they were close friends. This atmosphere of visiting each other’s shops and supporting one another when needed felt fascinating. Sitting nearby, trying to catch the few Japanese words I understood floating in the air (like “hanabi” for fireworks), I too felt a sense of participation in the preparations for the local festival.&lt;/p&gt;
&lt;p&gt;Fireworks festivals are the brilliant sparks inevitably encountered when visiting Japan in summer. The shoulder-to-shoulder crowds aren’t exactly my preference, but the enthusiasm of the food stalls and everyone dressed in yukata create a summer atmosphere worth experiencing—one of the reasons I returned to Onomichi. However, since I planned to take the ropeway up to Senkoji Temple on the mountain tomorrow to watch the fireworks, quite a distance from this seaside café, I wasn’t sure I’d have a chance to come back for that draft beer. In any case, after a brief chat, I left.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Cable car&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/cable-car.gLSKoGZL_Z4A23K.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;“I’ll come again tomorrow,” I told the owner before leaving. Finding a café that suits you during travel is difficult. When such a café occasionally appears, it feels as precious as discovering an oasis in the desert.&lt;/p&gt;
&lt;p&gt;To me, Japan is a place both familiar and distant. The impeccable service makes me feel warm and at home, yet from various aspects of society, I can sense that people maintain a certain distance from one another. This is especially true for someone like me who has just started learning Japanese. Solo travel amplifies this feeling further. The barriers of language and interpersonal relationships make the loneliness of travel feel like searching for the boundaries of oneself.&lt;/p&gt;
&lt;p&gt;It sounds lonely, but I actually enjoy this feeling. Still, when a café like this appears during my journey—one that offers a chance to break through these barriers—it makes me happy. I love those moments in solo travel when just the right amount of connection unexpectedly emerges.&lt;/p&gt;
&lt;p&gt;The next day, while the morning temperature was still pleasant for walking, I returned to the same café for coffee.&lt;/p&gt;
&lt;p&gt;“Can I talk to you?” the customer next to me asked in simple English. He turned out to be an emergency room doctor. It was his day off, and he had just returned to Onomichi from watching fireworks in Osaka. He told me the Osaka fireworks festival was extremely crowded and warned that Onomichi’s would be just as packed. Like me, he had stopped by the café in the morning to fill his thermos with energy (coffee) before heading to help at his father-in-law’s clinic. We were alike—both wanting to start the day with a good cup of coffee.&lt;/p&gt;
&lt;p&gt;This café felt like a gathering place for locals. Besides travelers like myself, regulars continuously dropped by. I loved these moments during travel when you meet different people and can share life’s small moments together in the same time and space.&lt;/p&gt;
&lt;p&gt;After the doctor left, the owner told me he was studying English and actively looking for opportunities to practice conversation. I mentioned that as someone who had just started learning Japanese a few weeks ago, I truly understood the difficulty of learning a new language. The owner had a quality that made casual conversation flow easily, and before I knew it, we had gone from discussing language learning to the importance of “failure” in life. I shared my experiences working at various startups, and he mentioned his previous coffee roasting business. I was surprised we could discuss such deep topics in English. Through this exchange, I felt myself gradually building a deeper connection with Onomichi and its people, evolving from just another tourist.&lt;/p&gt;
&lt;p&gt;Before leaving the café, the owner said he had reserved a few spots along the embankment near the café where you could see the fireworks. If I couldn’t find a suitable place at Senkoji Temple on the mountain, I was welcome to watch from his reserved spot. I was touched. To him, I was just a customer he had met twice, yet he was willing to save a spot for me. I cherished this opportunity to build connections with locals.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Festival scene in the shopping street&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/festival.CTsmeXts_18rRcU.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;That evening, amid crowds comparable to those watching Taipei 101’s New Year’s fireworks, I spotted the café owner from afar preparing dumpling dishes, along with the draft beer owner I’d met the day before. I waved to them.&lt;/p&gt;
&lt;p&gt;A book that accompanied me on this trip, &lt;em&gt;Arrival Hall&lt;/em&gt;, offers a remarkably apt description of home. The author writes that home is a place with layers of safety nets, ready to catch you from any predicament, while people in foreign lands must expend enormous energy to solve even the smallest problems.&lt;/p&gt;
&lt;p&gt;Onomichi is not my home, and naturally lacks those familiar safety nets. But after participating in Onomichi’s fireworks festival this time, these connections with locals did gradually shift how I felt about this place.&lt;/p&gt;
&lt;p&gt;The café owner selling dumplings at the fireworks festival, the regular who sells draft beer whom I met yesterday, the emergency room doctor rushing from Osaka to the clinic—through conversations and connections with these people, I seemed to gradually blend into this place, feeling the depth created by Onomichi and the people living here.&lt;/p&gt;
&lt;p&gt;And as the fireworks bloomed in Onomichi’s midsummer night sky, everyone involuntarily opened their mouths wide, gasping in wonder. As we shared this same brilliance in the same time and space, through these connections made during my journey, I gained my own sense of familiarity with Onomichi.&lt;/p&gt;
&lt;p&gt;Like traveling alone through space and occasionally encountering another starship—at the moment when our orbits are closest, it seems through the round observation window, you can see someone on the other side, face pressed against the glass, happily waving at you.&lt;/p&gt;
&lt;p&gt;Hello, thank you, see you next time.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Blooming fireworks&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;960&quot; height=&quot;1200&quot; src=&quot;/_astro/fireworks.Kyza1ie4_Z2up4Bi.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>Life</category></item></channel></rss>