跳到主要内容

2026 年的一点博客心得

· 阅读需 3 分钟

转眼这个赛博笔记本都上线一年多了。说是赛博笔记本,其实作用差不多就是一个博客吧。从今天开始,我把 Docusaurus 的 blog 打开了,真的变成半个博客了。

想想还真是特别。

为什么写博客

理由很简单,就像之前我写在博客园的那样:

  • 有的东西看完就忘了,得记笔记。
  • 觉得好像没找到关于某事物很好的介绍文字,遂自己写。

现在看来,还有一点,就是在信息海洋中提炼一点精华。虽然这点精华估计都要被喂给 AI 了吧,但是确实是自己的一点小天地,这里的文章都是可靠、精心编写的。

还有一点,就是当时 OI 要写题解,但是洛谷题解区一般都关了,洛谷博客也不是很好看,所以打算把题解之类的当博客写。

所以就开始有写博客的念头了。起初用的就是博客园。它老牌,可靠,有很多成熟的美化方案,而且免费使用,少量广告。不用自建站,国内访问快。

那为什么后来又不用了呢?

原因有两点。其一,虽然确实有非常成熟的美化方案(awescnb,现在改名 tona 了,我还 fork 过这个仓库来着),但是嘛,总感觉不是特别对我的审美。博客不好看怎么会有动力写呢。 当时有过一个念头,就是自己打造一个好看的皮肤。后来放弃了,不是我的菜。。

其二,网络上有很多神奇的爬虫,整天爬爬爬,我文章刚发出来几十秒就被爬了,比如:程序杂谈:概述-编程学习网C++ GUI 选型记-编程学习网,我真服了。

所以才自己建站,有了 mNotebook。

C# vs Java

· 阅读需 1 分钟

Java 和 C# 真是有非常微妙的差异。

C# 到 Java

前段时间因为要写 mod,又开始写 Java。从 C# 到 Java 的感受,就是那些语法糖全没了,比如 new() 这种,搞个异步就得用 Future<> 之类,代码风格也不太适应。还有就是Java 的一些历史包袱,导致一些地方不如 C# 那么简洁(比如 List.of() 这种东西)。

Java 到 C#

写了两周 Java,今天写回 C#,又感到不适应。首先是编辑器的不适应。VS 是远远没有IDEA精致好用的。就比如 IDEA 提示“可将字段设为readonly”,光标移过去就可以点“设为readonly”,VS 不知道为什么就没有。VS 的自动补全有时候会比较烦人,本来想缩进,按一下 tab 给我补全出来一坨。

其次就是语法不习惯。比如 C# 有属性,Java 没有,只能写 getter/setter。虽然写getter/setter有点烦人,但是它也强迫你尽量封装,不要暴露太多细节。而c#有了属性,感觉就少了点“限制”。还有 C# 允许运算符重载,有时候就会有点懵。这就是所谓设计哲学的差异吧。代码风格也是,当时入门 C# 就搞不懂为什么 C# 的方法要用大驼峰,非得跟 Java 和其他语言对着干似的。


总之感觉 Java 虽然历史包袱有点沉,但是设计似乎比较优雅;C# 固然简洁,但也有点接近 C++,有种奇怪的语法丰富但是容易写成史山的感觉。

谈谈「语言硅基化」

· 阅读需 2 分钟

「语言硅基化」?在我看来,背后的操盘手还是人类自己。

AI 味来自哪里

目前大多数LLM采用的是GPT架构,这是一种序列到序列的自回归模型。如很多人所知,序列的基本元素为「token」。一般来说,其训练有两个步骤。

第一步是预训练,其核心优化(或者说训练)的核心目标是「最大似然估计」,即模型的「输出分布」要尽可能吻合「真实分布」。所谓真实分布,就是研究者采集的数据的分布。数学上,大概是用KL散度或交叉熵来衡量二者的差异。

所以,在经过预训练后,模型的输出分布会接近真实分布,但受技术和训练方法所限,会有一定误差。然而,这个误差应该是随机的,不应该表现定向的差异。而现在说的「人机味」明显是有定向指向的,而非随机的产物。

定向的「偏移」应该来自于「基于人类反馈的强化学习」(RLHF)。这个过程目标是「对齐」,即让模型的输出「迎合」人类预期。比如,「人类」更喜欢严谨、客观的回答,而不是像海量训练数据那样参差不齐的回答。

而正是这个过程让模型输出的文本与人类语言有了可感知的「偏移」,即人机味。本质上,这也算是最大化满足人类期望的产物。这是人机味的第一推手。

C++ GUI 选型记

· 阅读需 4 分钟

若干年前,我入门了 C++,写了一个控制台贪吃蛇,觉得自己逐渐理解一切……

“我想创建 GUI!” 于是漫长的选型过程开始了。

概念

还是有必要阐释一下这几个概念:

  • GUI:图形用户界面,其实是很宽泛的概念,图形化的程序界面都算。
  • UI:用户界面,我觉得更强调 “和用户交互”,比如一个按钮、一个输入框等。
  • 绘图库:只提供绘制(或者图形渲染服务),你可以用它画一个三角形、矩形,可以显示图片,但是做 UI 有点难。
  • UI 库:提供 UI 功能,一方面是不需要自己画按钮,另一方面是提供事件处理等服务。

EasyX

我第一个用的是 EasyX,当时用它写了蛮多程序的。

写 C# 有感

· 阅读需 1 分钟

最近用 C# 写了10 几 KB 的代码,越来越觉得C#远远大于 C++。

语言特性

首先语言特性上就领先 C++ 很多。比如众所周知 C++ 的异常处理基本上是废的,但C#的异常机制可以很好地运作。还有反射机制、各种语法糖(C#应该是出了名的很多语法糖)。另外C#有更严格的静态流检查,可以帮助排除很多玄学问题。体验非常舒适。

编辑器

还有不得不提 VS 的 IntelliCode ,向 C# 严重倾斜。C++里 IntelliCode 的作用几乎为零,但是 C# 里 IntelliCode 约等于半个自动驾驶了。只需要按Tab接受自动补全就好了。虽然没有 Copilot 那么智能,但我觉得恰到好处。还有很赞的自动起名功能。 IntelliCode 真的大幅节省了编码时间,提高了生产力。

配套设施

还有配套的丰富的 .NET SDK ,比 C++ 的标准库强太多了。很多轮子即拆即用,非常方便。尤其在文件操作、网络操作、序列化这些,非常方便。而且.NET各组件涵盖前后端,所以用 C# 做全栈开发简直是丝滑无比。相比之下C++的标准库,还有什么WindowsAPI,就显得很笨拙。

上古笔记本电脑维修记

· 阅读需 3 分钟

又名:《废铁转生之再战三年》

日志图片

最近两天一直在致力于修一台 12 年前发售的上古笔记本电脑,它可以开机,但是无法引导进入 OS。(注:为了叙述简洁,没有按照时间顺序来写。)