Posts
16 posts, newest first.

Prompts, Skills, and MCP Will All Disappear. People Only Pay for Outcomes
Prompts, skills, hooks, plugins — they're all a transitional phase of AI apps. What survives is a marketplace of agents that sell nothing but results.
AI Won't Close the Gap Between People, and 7 Other Notes
AI won't narrow the gap between people. It does the opposite. It amplifies creativity and scales judgment, but it also amplifies stupidity and bias.
A New Less Release Broke Tailwind's @apply, and Tailwind Took the Blame
One of our large projects uses a micro-frontend architecture. The stack is SSR + Vue 3 + NestJS + Webpack4, the style preprocessor is Less, and the project also integrates Tailwind, which most of us use day to day to…
How Long Is an Emoji, Really? A Deep Dive into Emoji Strings in UTF-16
In day-to-day frontend work we deal with emoji all the time. If you're new to this, you've probably run into problems like these: You use split on a string that contains emoji, and it comes out broken You read .length…
How to Speed Up Frontend Project Builds
Don't put the build steps in the Dockerfile The Dockerfile should only be responsible for building the runtime image Cache nodemodules instead of installing every time; reuse it when package.json hasn't changed Use npm…
Objective-C Learning Notes
Standard C data types work too Local variables are allocated on the stack, while objects are allocated on the heap Objective-C requires manual boxing/unboxing intValue is a method of the NSValue class Mutable /…
Some Notes on Cookies
What attributes should a cookie have? When a cookie has the HttpOnly attribute, it can only be sent over HTTP (or HTTPS) and can't be accessed by client-side JavaScript. This is an effective defense against cross-site…
Nginx Notes
Below are common examples from Nginx HTTP configuration, covering core features like static file serving, reverse proxying, load balancing, and caching: Use this command to check whether the config is valid: If the…
Batch-Generating WeChat Read's World Book Day Medals with Puppeteer
As everyone knows, April 23 is World Book Day, and WeChat Read ran another campaign this year: generating a unique medal for every user. How unique? Each medal carries two numbers. The one in the top-left is how many…
Piping Mobile WebView Console Logs into Native App Logs
In hybrid mobile development, we often embed RN or a WebView, and their JS runs in its own engine. For example: RN runs its JS in Hermes In iOS's WKWebView, JS runs on the JavaScriptCore engine In Android's WebView, JS…
Fixing a Markdown Rendering Bug That Doubao Still Hasn't Fixed
In a recent project at work, we needed to parse Markdown generated by an LLM and render it in a WebView on mobile. Along the way we ran into a Markdown rendering problem: In the AI-generated Markdown, some bold text…
When a List Optimization Breaks Impression Tracking: The RN FlatList removeClippedSubviews Trap
In React Native, we often reach for the removeClippedSubviews prop on FlatList to squeeze more performance out of long lists. This innocent-looking optimization caused a data-tracking "disaster" on our team: list items…
import vs. import type: A Deep Dive Into How TypeScript Imports Get Compiled
At work, one page of a Nuxt 3 app that had been running reliably for a long time suddenly started returning a 500 Server Error in production, so a colleague and I started debugging it in local dev mode. While tracking…
Make VS Code Snippets Shareable in Teams
Code snippets are templates that make it easier to enter repeating code patterns, such as loops or conditional-statements. VS Code allows users to define their own snippets in these levels: Global Snippets applies to…
Git
A branch is just a pointer to a snapshot node Snapshot nodes form a directed acyclic graph The HEAD pointer points to the snapshot node that matches the current state of the working directory Working Directory Staging…
Kotlin Learning Notes
I've been wanting to dig into the React Native source code lately, and starting from the Android side felt easier since I already know Java. But the project I maintain mixes Java and Kotlin, so I picked up some Kotlin…