The old house giving way
Right before the National Day holiday, Joan was still asking me what plans I had. Then my dad sent me a video out of nowhere: my fourth uncle had noticed that one corner of the old family house roof had collapsed.
It was not exactly surprising. No one has lived there for a long time, and in a whole year we probably spend less than a week back at that house. When I was little, I used to play hide-and-seek in every corner of it. Now when I walk inside, it feels faintly eerie. The everyday warmth that once filled the place has long since been carried off by the wind. Some of the beams are already rotting, both wooden doors have decayed badly, and the moment you open one, all that rushes out is the damp smell of earth. If I remember correctly, my dad said the place is already fifty or sixty years old. Looking at that broken corner, it felt like staring at an elderly person whose body could no longer bear the weight.



This trip back was supposed to make use of the holiday and finally repair the place. But the very first stop was not the house itself. We went to one of those places where people pick an auspicious date before starting something important. It is basically choosing a lucky day and time. To me it feels a bit superstitious, but the older generation really cannot do without it. Spend a little money, pick the right date, then decide whether to repair the house or tear it down and rebuild. I stood there for a while, got bored, and wandered off.
After that, someone came to measure the house. In the end, the plan was to remove all the roof tiles and relay them from scratch.



On the way around town, I noticed a lot of shopfronts had also been redone. Their outer walls were covered with new tiles, and a few buildings that were still unfinished had workers busy on the scaffolding. I heard this was part of a uniform renovation pushed from above. Whatever the reason, it really does look much better. Many old buildings had their exteriors refreshed all at once, and even the entire old bank building had been renovated.
Sons of the Neon Night
During the holiday I watched a Hong Kong film, mainly because Louis Koo was in it. If it is a Louis Koo movie, I usually end up seeing it in theaters. This time it was Sons of the Neon Night, directed by the controversial Junie Lau. He started as a singer, then turned to directing for the sake of his artistic ambitions, and he was also behind Rigor Mortis.
This film took a full eight years to finally make it from 2017 to release, and it gathered an impressive cast. At first I went in expecting a slick, satisfying crime film. Instead, after being cut down to two hours, it became genuinely hard to follow. My own feeling is that the story jumps too much. The action scenes are still worth watching, though, and visually it has a strong artistic style.
Afterward, I kept seeing people on short-video apps arguing over it. Reactions are all over the place. The people who love it really love it, and the people who do not like it seem to dislike it even more. Still, I think it is absolutely one of the films this year that is worth seeing on the big screen. What I really want now is for it to get the Justice League treatment and release a full director's cut. That would make it complete.


Spam comments in the middle of the night
Lately I have been getting hit with junk comments late at night on a regular basis, and I have seen plenty of other bloggers dealing with the same thing. I had already been using SpamLite to block some of them from going straight into moderation, but comments sent to the pending queue still triggered email alerts from CommentNotifier. So there were nights when I would be sleeping soundly and suddenly get dozens of comment notifications from different IPs. It was infuriating.


I spent some time searching GitHub and found that most Typecho users seem to rely on a few familiar plugins for comment review: a modified version of SmartSpam, Zeze's edited CommentFilter version, SpamLite, and BaiduTextCensor. More recently there is also FuckAdComment. There are all kinds of options, but their interception results vary a lot. I tried several of them and none could accurately stop this particular wave of spam comments. BaiduTextCensor is actually very effective, though it occasionally acts up.
In the end, Cursor came to the rescue.


Using the ideas behind SpamLite and BaiduTextCensor, I put together a Typecho comment plugin called TSpamReview. It includes sensitive-word detection—which, to be honest, I find a bit underwhelming—plus Chinese-language detection, which blocks a large number of foreign ad comments filled with garbled text, and Baidu review integration, which works extremely well, though after extended use it seems likely to require payment.
<table> <thead> <tr> <th>Scenario</th> <th>Response</th> </tr> </thead> <tbody> <tr> <td>Contains sensitive words</td> <td>Comment failed: contains sensitive words</td> </tr> <tr> <td>No Chinese in content</td> <td>Comment failed: content must contain Chinese</td> </tr> <tr> <td>No Chinese in nickname</td> <td>Comment failed: nickname must contain Chinese</td> </tr> <tr> <td>Baidu review flags violation</td> <td>Comment failed: system flagged this content as violating rules</td> </tr> <tr> <td>Baidu review requires manual check</td> <td>Comment has been sent for manual review</td> </tr> <tr> <td>Comment submitted successfully</td> <td>Comment submitted successfully</td> </tr> <tr> <td>Baidu review network error</td> <td>Sent to pending review</td> </tr> </tbody> </table>To connect Baidu's review feature, you just create an app under Baidu's content review service, get the API Key and Secret Key from the application list, and paste them into the plugin settings. The free tier includes 5,000 calls. As far as I can tell, plain text review is not expensive anyway, so paying as needed seems reasonable.
The plugin repository is on GitHub under the name TSpamReview.