on the last day of 2025
7 min read
tl;dr:a look back at 2025.
The year went by in a rush. Work and code were its main theme. 2025 was busy, especially toward the end. I was not quite in the mood to write, but I did not want to break the habit of keeping a record, so I used the New Year holiday to sort through the odds and ends of the year. Much of the first three quarters is already covered in another entry, so I will not repeat it here.
Open source
In the second half of the year, I started putting things on GitHub: first a few utility functions, then this blog, and eventually some small projects. In September, as I encountered more and more recommender-system models at work—and ran into their practical pain points—I began my first open-source project: NextRec, a unified recommendation-algorithm framework. Before that, I had rarely had the motivation to build a project from scratch. Most of the time I would run git init locally, make a few commits, and abandon it (haha).
This time, though, I kept an unexpectedly high level of enthusiasm. I worked on NextRec from October through December, spending more than 30 hours coding in most weeks.

Building a framework gave me a fair amount of technical anxiety. On one hand, I want to keep up with new work, elegant code styles, and new framework features. On the other, I hope to turn the project into real value at work, so I have poured a great deal of time into it.
How should I trade off support for new models, improving the existing codebase, and discovering valuable internal business features? This is still a difficult choice for me. Adapting new models quickly makes it more likely that the open-source community will notice the project. Improving existing code means spending substantial time refactoring and simplifying for usability and code style. I did not think through many early parameter and architecture decisions deeply enough: representation and sequence models, as well as their tasks and loss functions, differ from ranking models and cannot share a base class. That creates many problems, including logit output shapes, loss-function normalization, and a unified model input. Business optimization, meanwhile, was the original reason for the project: I need to demonstrate clear business value.
Unfortunately, I have not done well on any of the three. On January 2, 2026, I released NextRec 0.4.27 with several multi-task models, but I still had not followed through on compatibility with generative models. I still have not found an ideal way to incorporate representation and sequence models into one unified framework. Models produced for the business through the framework have not yet translated into results, which has been the most discouraging part. Is the model wrong? Was the sample selected incorrectly? There are several uncertain variables, all pointing to the same conclusion: the framework has not yet demonstrated its business value.
A second trip to Madrid
During the National Day holiday, I flew to Madrid again. Compared with the May Day holiday, this trip was much less rushed. Besides eating far too much around Madrid, we also went to the seaside in Málaga. One especially memorable day, we took a boat out to look for dolphins. The wind and waves were enormous; we were the only two people on the boat who got terribly seasick, and in the end we saw nothing at all. 0.o
Still, the most relaxing part was sitting by the roadside in the sun with a coffee. It felt a little like early retirement.



The mindset of a new investor
Around August and September, I started investing in stocks. Colleagues talked about it often, and sentiment across the market was very optimistic, so I began buying ETFs—mainly Nasdaq, semiconductors, batteries, and new-energy sectors. I made a few hundred yuan in the first month and felt rather good about it, but several steep drops afterward put me in a bad frame of mind. I kept trying to make a little on short-term trades and get out. With that poor strategy, I am still down a few hundred yuan as of today.
A note to myself: be steadier next year, haha.
A trip to Hong Kong
Toward the end of the year, Pingping came to Suzhou again. Looking back, we saw each other four or five times throughout the year, which is quite frequent for us.
This time we went to Hong Kong together, trying cha chaan tengs, bars, and all kinds of popular sights. We even spent most of one of our limited three days at HKU, pretending to be students again.
After only a few days, I found it hard to see Hong Kong as the polished elite city I had imagined. It felt more like a city from a cyberpunk setting. Next to upscale office buildings stand aging residential blocks with peeling façades and plain interiors; this was particularly striking on High Street. Beneath glossy buildings, many Filipino domestic workers gathered and sat on the ground together. Housing prices and rent are astonishing too: a partitioned room in a shared flat can cost several thousand yuan a month. Above all, Hong Kong’s crisscrossing terrain is genuinely exhausting to walk through. Many times I just wanted to find somewhere to sit and have coffee—these old arms and legs cannot keep up anymore.
As a tourist destination, though, Hong Kong is still lovely. Arriving at Victoria Harbour, the neon lights on both shores reflected one another at night, giving the place a sense of new money and old money meeting. K11 was also the largest high-end commercial complex I had ever seen, although I did not have time to finish exploring it.





The last gift of 2025: getting married
The main reason Pingping came to Suzhou at the end of the year was for us to register our marriage. On December 16, just after returning from Hong Kong, we chose her birthday as our wedding anniversary.
May the rest of our lives be happy.


December 31, 2025, Suzhou