· 20 min read

2021 Year in Review

This article was auto-translated from Chinese. Some nuances may be lost in translation.

I originally planned to organize everything I did this year and write a post about it, but after gathering my thoughts, I realized there wasn’t really that much worth bragging about. So I decided to just record things casually like a running journal.

Moving

In early 2021, we moved into a brand-new apartment near Ohori Park (the kind where you move in right after construction finishes). While being next to a main road makes it a bit noisy, I’m very satisfied with the living environment. Having my own small room has improved the quality of both my work and video recording significantly compared to before. Sigh, moving always makes me reflect on how house hunting in Taiwan relies so much on luck, whereas in Japan, as long as you put in a little effort, tons of great options pop up. And after a few years, there are always newly built apartments nearby with reasonable rent waiting for you to move in. I also switched my keyboard to an HHKB to give myself a fresh working environment; now that I’ve used it, there’s no going back.

Early in the Year

At the beginning of 2021, I spent a lot of time catching up on technical regrets from my vocational high school days that I hadn’t studied thoroughly back then. Through AVR programming, I learned a lot about lower-level concepts—such as low-level I2C and SPI communication protocols, writing to EEPROM, ADCs, GPIO, and hardware interrupts. It felt like a solid review of the core firmware knowledge one ought to master. The reason I didn’t use Arduino is simple: as a software engineer, just pulling in libraries and tweaking pre-written code does almost nothing to help you actually learn. Later, I realized that AVR is gradually fading away, with almost nothing left propping it up besides Arduino. Compared to AVR, STM32 is much more practical. It has advantages in both price and performance, and its power consumption is quite low. Paired with a development board and IDE, you can even do on-board debugging and set breakpoints directly, which is indeed vastly superior to AVR.

After getting hands-on with STM32, I found that practically everyone uses STM32CubeIDE to write code. While it’s feature-rich, actually writing code in it feels very clunky. Especially after getting used to VS Code, working in that IDE was pure torture. Is this really what embedded engineers use to write code? In contrast, with an 8-bit AVR, all you need is avr-gcc and opening up main.c to enter your own little world. Compared to STM32, it still holds an advantage in terms of barrier to entry. AVR chips are also very cheap, and many come in DIP packages, so you can just plug them into a breadboard and get started right away.

At work, due to developing new features, and because it was just me and one other colleague at the time, our schedule was extremely tight. Almost every day was spent in an endless cycle of clarifying requirements, developing, and resolving QA issues. It was a very intense and productive period. On top of that, we needed to set up a brand-new SSR server (using Next.js). Setting up a server in a large corporation involves an overwhelming number of considerations and complex workflows. Everything had to be automated so that the Operations Team could manage it via AWX; otherwise, failing to meet release standards would mean delaying the launch.

Because this requirement came up midway through the project, server provisioning, Nginx configuration, playbook setup, Docker, cross-departmental communication, writing documentation, pitching proposals to the business unit, automated deployment, and implementing the actual features—all of these fell on me to handle alone. At the same time, I also had to close QA tickets. Honestly, the mental pressure was immense during that stretch. I worked overtime for nearly a month straight, and even had to come in on a weekend once to keep up with the schedule. Every department was busy at the time, and because the knowledge required for server infrastructure differs from frontend work, nobody on the team could really step in to help. However, the other team member proactively covered other QA tickets for me, which I was very grateful for. I’m also thankful to my manager for not giving me a hard time back then; although he was a bit concerned when he heard about the weekend shift, he quickly coordinated with the company on my behalf.

I should emphasize that the company strongly discourages working on weekends. If it happens, you have to explain the reason, and the company will require you to take a weekday off in exchange (not deducted from your paid annual leave). So it basically felt like borrowing a weekday in advance to rush progress over the weekend.

Looking back now, we achieved great results, and the project launched smoothly on schedule. Beyond that, new pages for other projects can now be built with next.js (previously done with EJS + pure static files), and paired with SSR, there’s so much more we can do. The introduction of SSR also made SEO implementation much more convenient than before, and writing ld-json became much easier.

During that time, I also reflected on how many things simply don’t happen unless you persist in pushing for them yourself. Setting up a server sounds simple, but inside an organization, integration matters far more than just having a sudden brilliant idea. And doing integration rarely comes down to introducing flashy, trendy frameworks or talking a big game about architecture; it comes down to grounding yourself and executing every single link in the chain properly.

This period coincided with the release of Monster Hunter Rise, so time flew by quickly: grinding hard at work during the day, and slaying monsters after hours to blow off steam. At first, I wanted to show off like others by using the Longsword, but later realized that if I just wanted to have fun, the Heavy Bowgun or Light Bowgun was a much better choice—just brainless shooting.

Another discovery was that my girlfriend surprisingly loves collection quests and farming the Flooded Forest for zenny. If there was a medal, badge, or side quest, she had to clear it. So while I was working, she helped me clear all kinds of small quests, and when I got off work, I could happily upgrade my gear and weapons. I had a blast with this Monster Hunter game. Aside from the music, scenery, and armor having distinct Japanese aesthetic touches, I also unexpectedly joined a circle of friends of a former colleague to run quests together occasionally, which genuinely rescued me from a low point.

MPEG-TS and aribb24 Subtitles

After seeing Qianqian’s tweet, I figured that since I had a Raspberry Pi on hand, there should be a way to hook up a TV signal and watch television on my computer. Only later did I learn that you have to buy a TV tuner capable of raw TS capture (“TS抜き”); otherwise, you’re locked into proprietary software to view it.

Japan’s broadcast television signal uses MPEG-TS, and Japan has its own broadcast standard called ISDB, developed by the Association of Radio Industries and Businesses (ARIB). Oh, and by the way, Japan has this bizarre Broadcast Act—a law stating that as long as you have a TV in your house, you must pay receiving fees to NHK, yet you can still watch without paying. It has already been upheld as constitutional by the Supreme Court. To this day, I still can’t fully fathom this mysterious country called Japan.

Digression aside, in Japanese TV broadcasts, you can turn on subtitles that support features like furigana annotations, colors, custom gaiji characters, and exact positioning—all defined under the ARIB STD-B24 standard.

Out of curiosity, I managed to capture an MPEG-TS signal on a Raspberry Pi via a TV tuner and wrote a simple subtitle parser in JavaScript. Although it’s pretty rudimentary, reading through the specifications made me appreciate how great the people who quietly implement these standards are—especially after looking at Qianqian’s code, which blew my mind.

Writing a Book

In addition to what I mentioned above, another major milestone was writing a book. The year before last, I produced a video series about Svelte for the iT Home Ironman Contest and won an Honorable Mention award. After asking for my colleagues’ thoughts, they all felt that publishing a book was a rare opportunity, so I figured I’d take on the challenge. Unlike contestants in the writing categories, because I competed in the video category, converting everything into text took a tremendous amount of time, and the looming deadlines toward the end gave me quite a headache.

Although Svelte remains relatively niche in Taiwan compared to other frontend frameworks, I genuinely enjoy writing it, so even for a niche market, I wanted to leave behind some solid resources. A significant portion of the book focuses on practical UI development applications, including thorough implementations and explanations of accessibility. Toward the end, I also covered testing and SvelteKit to round out the SSR picture. In terms of royalties, I already knew in advance not to expect much, but seeing the actual payment hit my bank account still elicited a sigh over how little it was.

Personally, I believe the book’s greatest value lies in the hands-on UI practice chapters, and I hope it helps developers deepen their understanding in that area. I’m also incredibly grateful to my former colleagues and managers, Eason and Kai, who enthusiastically reviewed my manuscript, caught many typos and technical errors, and offered better code implementations and suggestions that improved the book’s overall quality. My biggest takeaway after finishing was: I will never use Microsoft Word to write programming content ever again. The experience was utterly miserable, and converting to PDF frequently messed up the layout for no apparent reason. If I ever do this again, I’ll figure out a proper typesetting pipeline first.

If you’re interested, I encourage you to check out the implementations in the video series. Personally, I feel the hands-on code in the videos holds even more reference value, as you can see step-by-step how a UI component is built from scratch. The last 10 days also dive into the underlying principles of Svelte with a simplified implementation, which should teach something valuable to engineers who care about how things work under the hood.

Building a Custom Keyboard

After using the HHKB, I became curious about the principles behind electrostatic capacitive contactless keyboards, and whether it was possible to build one myself. To my surprise, quite a few people in Japan build this kind of keyboard, and you can even source the necessary parts and materials locally. That “I’m so glad to be in Japan” feeling washed over me once again. Having already suffered through soldering hell back in high school, simply buying a PCB, soldering components, and assembling parts doesn’t count as “making a keyboard from scratch” in my book (note: this is purely a personal standard for myself, not something I judge others by).

Little did I know this would spark an entirely new journey. I bought a 3D printer, learned PCB layout and routing, and started designing circuits. Aside from PCB layout, almost everything fell within what I had learned in high school, so it wasn’t overly difficult. Still, PCB design has plenty of nuances—especially with high-frequency circuits that rely on capacitive sensing, where noise suppression is an essential discipline that was rarely covered in high school. However, the cost of sending out fabrication orders was simply too high: shipping to China cost over 2,000 yen, and you had to wait over a week to receive the finished boards. The turnaround cycle was dauntingly long, so I decided to experiment on breadboards first and try again once I felt confident. During this period, I continued catching up on hardware topics, such as how USB works under the hood (the USB specification is insanely complicated), PID control theory, FIR filters, and more. I also tinkered with the Raspberry Pi Pico and PIO. After taking this massive detour, while I do have a PCB designed, the custom keyboard remains unfinished. Hopefully, I’ll have something to show for it this year (don’t hold your breath though).

Ōmura Bay and Huis Ten Bosch

In July, I revisited Ōmura Bay and Huis Ten Bosch. I truly love the atmosphere around Ōmura Bay. Enjoying the daily curry special at the Ōmura Bay Diner while looking out over the bay right in front of the platform is something that belongs on a bucket list.

Kokura and Mojiko

For a while, I was pretty hooked on BEASTARS. I really love the protagonist, Legoshi. His kindness, selfless dedication, and the way he quietly trains himself to grow stronger represent the kind of person I aspire to be. I hope that one day I can reach that state of mind. When I found out the author was holding an exhibition in Kokura, I took full advantage of living nearby and rushed over.

SwiftUI and Bluetooth

For our 2021 company hackathon, I set a personal challenge: tackle things I didn’t understand and build an application out of them. At the time, I wasn’t familiar with SwiftUI, nor did I know how to use Bluetooth. So I built an Arduino Pomodoro timer with Bluetooth, allowing the computer and Arduino to communicate wirelessly. To make the integration smoother, I added a status bar item, notifications, and a countdown timer UI on the Mac side, while using an LED matrix and buzzer on the hardware (Arduino) side. I feel that with a bit of polishing and refinement, it could be quite practical—at least, I’d want to use it myself. Software-based Pomodoro apps have been done to death, but integrating hardware and Bluetooth helps shift the user’s focus. The final outcome wasn’t entirely ideal, but I still considered the goal accomplished.

Since it was a hackathon project, the implementation was stitched together just enough to work. One detail worth mentioning is that I implemented the countdown logic on the Arduino side, which taught me how to use timer interrupts. In hindsight, though, handling the countdown logic directly in software and letting the Arduino only handle display and notifications would probably have been better.

My takeaway from writing it is that SwiftUI feels remarkably similar to React. If you’re comfortable with frontend development, it should be fairly easy to pick up. For more details, check out Learning SwiftUI from a Frontend Perspective.

Sony WF-1000XM4 Wireless Earbuds

Sony released the WF-1000XM4 around June. Thinking they looked great and had noise cancellation, I bought them right away. In practice, I was extremely pleased: stepping into noise-canceling mode completely shuts out ambient sounds, letting me immerse myself in my own world.

Unfortunately, earlier this year I accidentally threw them into the washing machine, leaving one earbud sounding distorted. I had no choice but to bite the bullet, sell them second-hand, and buy another pair. Luckily, there was a sale on Amazon, so at least it wasn’t a total loss.

Lex Fridman Podcast

I stumbled across this podcast on YouTube, and once I started watching, I couldn’t stop. Hosted by an MIT researcher who interviews tech luminaries, it’s packed with immense technical depth. Some of the guests include:

  • Chris Lattner, creator of Swift
  • Geohot, founder of comma.ai
  • Bjarne Stroustrup, creator of C++
  • Grant Sanderson, creator of the 3Blue1Brown channel
  • Donald Knuth, author of The Art of Computer Programming
  • Jim Keller, legendary chip architect

Being able to listen directly to in-depth conversations with the people who built the software industry and advanced technology is truly a privilege. It opened up my horizons.

It also helped me make peace with who I am: I’m someone who simply loves technology, and I don’t need to force myself to write about mainstream, easily digestible topics. There’s nothing wrong with liking Fourier transforms and inverse matrices; there’s no reason to feel self-conscious just because being a nerd doesn’t attract a massive audience.

Streaming and Turing Complete

In 2021, I still hadn’t figured out a clear direction for running my YouTube channel—I really wish someone could just tell me what to do, haha. Still, I continued uploading videos here and there. While the view counts suggest they haven’t caught on, being able to record a chapter of my life through video is still a positive thing.

I also streamed the game Turing Complete, where you build a small computer starting from logic gates—it feels like a gamified version of Nand to Tetris. For complete beginners without any background, it’s probably quite difficult. If the developer could simplify things and put more effort into the tutorials, it would be even more enjoyable.

JSDC 2021 and ModernWeb ‘21

I delivered two talks this year, both centered on Svelte. If you’re interested, feel free to check them out. Looking back, I used to attend conferences everywhere purely as a “taker.” After gradually building up experience, I no longer feel that kind of information anxiety, and I’m now able to share my experiences with others. Recognizing this mental shift felt quite meaningful to me.

Revisiting Linear Algebra

For some reason, I found myself diving back into linear algebra. It seems reading the book Numerical Common Sense reignited my passion for the subject. One chapter left a deep impression on me: “Goodbye, Inverse Matrix.” The core message was that most things you want to do can be solved using LU decomposition; while inverse matrices are intuitive, they are computationally very expensive. I love this kind of math with real-world applications—namely, the field of numerical analysis. Rather than conducting research myself, though, I prefer listening to others talk about it; doing numerical analysis is grueling, and people who dedicate themselves to this field are truly formidable. Then there’s the classic Singular Value Decomposition (SVD), which reveals fresh insights every time I look at it. Recently, sparked by an interest in signal analysis, I also revisited the Fourier transform.

WebGL

The reason I picked up WebGL again was that I wanted to build a simple visual matrix calculator to intuitively grasp the concept of matrix multiplication. In the end, nothing came of it; instead, I burned a ton of time just figuring out how to draw a single line. Looking back, it feels a bit silly.

Returning to Taiwan

Due to banking paperwork and loan procedures, combined with forgetting my online banking password (which got me locked out), and Cathay United Bank discontinuing IC card support, I was forced to spend a significant sum to fly back to Taiwan to sort things out. A round trip plus the quarantine hotel cost nearly 100,000 TWD. I hadn’t been back to Taiwan in almost two years. When the pandemic began, I naively thought it would blow over quickly and I’d be able to visit soon. Little did I know the wait would stretch to two years, and even now restrictions remain in place.

During the weeks I spent back in Taiwan, every person, place, and thing moved me deeply. I was surrounded by familiar language and signage, and listening to passersby chatting made me curiously lean in; walking into any random eatery yielded food so delicious it left me speechless, at unbelievably cheap prices.

After years of adjusting to Japanese prices, my sense of value completely collapsed—turns out amazing food can actually be that affordable. I still remember one morning when the quarantine hotel served a traditional Taiwanese sticky rice roll (fan tuan) for breakfast; taking a bite moved me almost to tears. Having experienced living abroad, I’ve gradually come to see just how many enviable things Taiwan, the land that raised me, has to offer. I truly hope the pandemic ends soon, that quarantine policies get lifted, and that I can return to a peaceful, reassuring Taiwan.

MPK mini

A few years ago, I bought a Roland FA-07. But because the keyboard itself is massive and our apartment had no spare room for it, I rarely played it after moving to Japan. I kept convincing myself I’d find a workaround, but two years dragged by, so early in the year I sold it second-hand. After parting with it, I bought an Akai MPK mini MIDI keyboard for just over 8,000 yen. Although it only has 25 keys and lacks the rich feature set of the FA-07, it’s far more compact. Sitting on my desk, it plugs straight into my computer for quick music arrangement, making the whole process immensely easier than before.

Conclusion

This year marks my third year living in Fukuoka, Japan. Time has flown faster than I imagined, and I’ve grown accustomed to life here. I actually quite like my current lifestyle and pace, but at the same time, I felt like a headless fly buzzing all over the place in 2021—dabbing into every domain without ever going deep. While that’s great for broadening horizons, I hope to achieve deeper, more substantial growth. Therefore, my goal for this year is to stay focused on what I truly want to accomplish and produce tangible results. To be honest, I feel somewhat tormented by this aspect of myself: I want to try so many things, yet I’m constantly plagued by fear of gain and loss, worried that pouring in effort won’t yield matching returns. Sigh, life is tough.

I hope these miscellaneous experiences prove helpful to you. If you’d like to get in touch, you can find me on Twitter or via email.

Related Posts

Explore Other Topics