Works

Software / tools / experiments

中EN

Software and websites I’ve made. Recent tools come first; further down are old learning projects and a few open-source memories.

Other projects

04—08
NidoPrivate projectStarted on a small server with very little room; now I use it to publish and manage my frontend sites
AshitaPrivate projectThis blog. You're already in it
Dsh-blue-whale-maidA blue whale maid pet for DeepSeek Harness
X LedgerPrivate projectTrack personal spending, view trends, and work out the daily cost of the things you own
VidoA web video player with custom colors and a progress-bar avatar · demo · ten years later

Earlier

09—14
SatoriRead PDF textbooks and ask AI about any paragraph, figure, or code block
VivaEdit and organize Markdown documents on your computer
TickCreate, run, and debug scheduled tasks on macOS and Windows
PyflA small browser library that converts Chinese text to pinyin initials, published on npm
WeChatA WeChat client I spent a lot of time building while learning Vue (live demo)
2048My Vue take on 2048, with tests and CI experiments along the way (play online)

Open-source contributions

Old issues and PRs also remind me what I was learning at the time.

PI-DesktopIn September 2026, I fixed two PI-Desktop bugs: newer drafts being overwritten when a command finished, and earlier messages going missing when copying a long conversation. Draft fix · Full copy
Bamboo-old-houseI really like this little 3D house. It looks lovely, though it was pretty slow. I cut repeated rendering, simplified the distant scenery, and fixed trackpad controls and the iPhone view. View PR
VitePressIn 2020 I used a reproduction project to report that imported code snippets did not hot-reload. Evan You later forked it, and a few stars followed because of that. I had no idea what was happening. View issue · Evan’s fork
Gh-pollsIn 2020 I reported its expired HTTPS certificate. TJ said he’d find time to look, then came back to tell me it was fixed, all on the same day. My only exchange with a coding hero of mine. Finding it again still makes me happy. View issue
TypeScriptI first noticed that some ahooks functions would not auto-import in VS Code. I traced it to declarations generated from anonymous arrow functions, reported the bug to TypeScript, then went back to tell the ahooks team what I’d found. That explanation even got two heart reactions, which made me happy. TypeScript issue · ahooks discussion
Vue 3I was learning Vue 3 when I ran into a type inference problem with a generic array, so I filed an issue. Looking back now, I was surprised to see people still asking how to solve it. I never ended up using Vue 3 myself, though… View issue
Element UIIn 2018 I reported a misplaced Notification, only to have the issue closed as a duplicate. I was pretty annoyed. Nearly a year later, in 2019, I ran into it again and filed a second issue. This time I found that Notification was mutating the object passed in by the caller; someone later fixed it from that lead. I think I was reading Effective Java then, and it had a similar point about not changing someone else’s input. First report · Second report · Fix
ReduxA small cleanup merged in 2018: moved the random action used to probe reducers into shared action types. View PR
LodashI was enjoying Refactoring in 2017, and it changed how I felt about being fussy with code. I made two tiny cleanups in Lodash. jdalton thanked me on both PRs; I was so happy about that back then. PR #3467 · PR #3472
MakeGirlsMoeThis was probably the first AIGC project that blew my mind. I remember it being a big deal back then. It certainly was to me: I had so much fun with it that I shared it with friends. The domain literally says make.girls.moe, and it gave me a guy. I posted a joking issue asking, “What is this?” The creator explained that the training data included male characters too, haha. Back then I thought AIGC was still a long way from making anything useful. Then ChatGPT came out in 2022, and by 2024 I was already using GPT for work. Looking back, that was seven years after the issue. Not exactly a short time, haha. I still have no idea how to make a model like that. Maybe I can find time to try with an LLM and read the paper its creators wrote back then. The old issue · Visit site
Blade

I came across Blade, a Netty-based framework, while learning Java at school. I made a few commits in 2017, though honestly I barely understood the project. I could only fix typos and make a few tiny improvements. I even wrote to the maintainer because I wanted to join the Org. The letter is pretty embarrassing to read now, but he did not mind that I was a beginner and let me in. Later I joined a big company and got too busy, so I stopped going on GitHub. I didn’t keep up with Java either. My old commits

Back in the group, I met netodevel from Brazil and a friend of his. We chatted on Gmail Chat, and he actually knew Baidu. I think we were talking about Chinese companies he knew? It was so long ago that I cannot quite remember. The conversation ends with him going to eat, asking me to fill in a form, and a “bye bye, see you.” All these years later, I still haven’t filled in that form. Oh dear. Looking through an old project and finding those conversations again makes me happy.