- 文章
台湾最早从 1970 年代开始引进(盗印)《哆啦A梦》漫画。彼时正值 1972 年台日断交后关系恶化,加上那个时代的漫画审查制度,盗印漫画的出版社为了方便过审,会去除漫画作品中的日本元素,进行本土化改造。当时青文出版社参照香港《儿童乐园》杂志里使用的「叮当(噹)」译名,将漫画起名为「机器猫小叮当」,并为书中角色起了中文名字。叶大雄、宜静、技安、阿福、王聪明、小叮铃等耳熟能详的译名,就在青文版里第一次出现。大雄家也从日本东京练马区月见台搬到了台湾台北县,漫画中出现的日本地名也改成了台北、台南、高雄、花莲等,而漫画中经常出现的「高井山」则变成了「阳明山」。
……
向忠发是中共成立以来仅有的一位真正出身于「工人阶级」(一说是流氓无产者)的党总书记,也是中共官方最不愿提及的一位党「傀」。1928 年,向忠发在共产国际的支持下,当上了中共党总书记(中共中央常委会主席),直到 1931 年 6 月 22 日被捕后迅速处决,在任不到三年。虽然他名义上是中共领导人,但很长时间里,中共中央的工作实际由当时任中央常委的周恩来负责。
……
前阵子是鲁迅逝世 89 周年纪念。他逝世于 1936 年 10 月 19 日,正好是中日爆发全面战争的前一年。很多人觉得,鲁迅在这个节骨眼上去世,简直是恰到好处——不但避免了很多人(包括他自己在内)的尴尬,也落得了最大的实惠。
1930年代在上海期间,鲁迅曾加入过中共领导的左翼作家联盟,不过在他过世前,左联就因为路线之争已经解散了。其被中共所钦定的文坛地位也是在他死后确立的。这也可以理解,毕竟人死后才能盖棺定论,才不会出现陈独秀、张国焘那样和组织决裂的事故。而中共在鲁迅死后将其捧上神坛,自然也就继承了其包括名望在内的所有政治遗产,这显然是合家欢喜的双赢……不对,应该是三赢的局面——天天被他喷的国民政府也松了口气吧。
……
上周五(10月17日)进行了 Windows 系统更新和软件升级,升级的软件并不包含 Windows Terminal。本周一(10月20日)发现 Windows Terminal 无法启动——运行后在任务栏闪现窗口,但立即退出进程。尝试多个旧版本的 Windows Terminal,依然无法运行。
起初怀疑是 Windows 更新导致的问题。另外发现 GitHub 上已经有人提交了 Issue,描述也是如此。这更加深了是 Windows 更新的嫌疑。不过项目维护者表示,引起崩溃的屎山代码已经有 3 年没人动过了,应该不至于有问题。
……
理论上 Lazarus 是支持交叉编译的,但官方发行的默认版本并没有打包不同平台所依赖的各组件。比如在 Windows 平台上将编译目标设为 Linux 时,编译器会报错:Can’t find unit system used by fcllaz ——缺少 Linux 平台上的预编译文件。
虽然可以使用 fpcupdeluxe (GitHub) 项目安装支持交叉编译的 Lazarus 工具链,不过这个工具似乎不支持命令行环境下的配置和安装。
……
那年的十月一日,城门楼子上庄严宣告的是:“中央人民政府今天成立了”,而不是“中国今天成立了”。真要搞什么“拟人化”修辞,那么这一天也顶多算是那个政权的生日。
我们自幼接受的教育就是“中华文明源远流长,历史上下五千年”。若把中国的生命起点定在 1949 年,那这就是一种自我矮化、自我阉割。
再说那首名为《今天是你的生日》的歌曲,其歌词表面上含情脉脉,实则将中国五千年历史统统抹煞。已然是对中华文明的不敬,甚至可以认为是一种暗藏杀机的辱华。当然,我们可以认为歌词作者是政治觉悟低下,或者受人蛊惑犯下了错误,应该给予一个改过自新的机会。建议将歌词改为“今天是你的生日,我的中央人民政府”。这样才算得上尊重历史又政治正确。
……
在前文《增强版 Traymond 让任意窗口最小化到系统托盘》中介绍了一款可以将任意窗口最小化到系统托盘的 Windows 桌面小工具。该工具代码 fork 自另一个同名项目,新增了一些功能并做了界面中文化。不过原项目是基于 Windows API 开发的,没有使用任何 GUI 框架,想要在此之上做进一步扩展非常麻烦,索性推倒重来。
新版本除了保留原来的 icon 外,已全部使用 Lazarus 重写,并在原有功能的基础上,新增了图标分组和扩展窗口菜单的功能。
……
上世纪 80 年代末、90 年代初,黑龙江技术出版社曾出版过一套名为《小学生十万个为什么》的科普丛书。
该丛书以漫画形式进行儿童科普,在当年国内属于首创。丛书一经推出便大受欢迎,发行量很大,至今在二手书市仍可见其踪迹。书中人物画风明显属于日本漫画风格,或者更准确地说,是手冢治虫的漫画风格。
……
在社交媒体上刷到一条非常扯淡的帖子,算是典型的蛆头为了吃「爱国」流量饭,利用民粹主义,专门针对低认知的蠢货们打造的无耻谣言。冠之以「技术流分析」,实则狗屁不懂。

言归正传,这个 UCPD.sys 究竟是什么来头呢?故事还要从当年流氓软件大战说起……
早期 Windows 对文件关联(即文件默认打开程序)的管理非常简单——任何程序都可以通过修改注册表键值来修改文件关联。这导致各种流氓软件滥用该特性来霸占用户电脑,特别是国产浏览器,通过修改 http/https 协议关联程序,来劫持用户上网行为。
……
在之前的一篇文章中简单介绍了如何在 Lazarus 项目中启用多语言国际化。不过使用 DefaultTranslator 或 SetDefaultLang() 无法实现运行时动态切换 GUI 的语言。更准确地说,在程序中首次调用 LCLTranslator.SetDefaultLang(),并将参数 ForceUpdate 设为 True,是能够在运行时修改 GUI 语言的,但若再次调用便无效了。
查看 SetDefaultLang() 源代码:
pascalfunction SetDefaultLang(Lang: string; Dir: string = ''; LocaleFileName: string = ''; ForceUpdate: boolean = true): string;
{ Arguments:
Lang - language (e.g. 'ru', 'de', 'zh_CN'); empty argument is default language.
Dir - custom translation files subdirectory (e.g. 'mylng'); empty argument means searching only in predefined subdirectories.
LocaleFileName - custom translation file name; empty argument means that the name is the same as the one of executable.
ForceUpdate - true means forcing immediate interface update. Only should be set to false when the procedure is
called from unit Initialization section. User code normally should not specify it.
}
var
lcfn: string;
LocalTranslator: TUpdateTranslator;
i: integer;
begin
Result := '';
LocalTranslator := nil;
// search first po translation resources
try
lcfn := FindLocaleFileName('.po', Lang, Dir, LocaleFileName, Result);
if lcfn <> '' then
begin
Translations.TranslateResourceStrings(lcfn);
LocalTranslator := TPOTranslator.Create(lcfn);
end
else
begin
// try now with MO translation resources
lcfn := FindLocaleFileName('.mo', Lang, Dir, LocaleFileName, Result);
if lcfn <> '' then
begin
GetText.TranslateResourceStrings(UTF8ToSys(lcfn));
LocalTranslator := TDefaultTranslator.Create(lcfn);
end;
end;
except
Result := '';
lcfn := '';
end;
if lcfn<>'' then
TranslateLCLResourceStrings(Lang, lcfn);
if LocalTranslator<>nil then
begin
if Assigned(LRSTranslator) then
LRSTranslator.Free;
LRSTranslator := LocalTranslator;
// Do not update the translations when this function is called from within
// the unit initialization.
if ForceUpdate=true then
begin
for i := 0 to Screen.CustomFormCount-1 do
LocalTranslator.UpdateTranslation(Screen.CustomForms[i]);
for i := 0 to Screen.DataModuleCount-1 do
LocalTranslator.UpdateTranslation(Screen.DataModules[i]);
end;
end;
end;该函数首先查找本地的 .po 或 .mo 翻译文件;然后,将程序的资源字符串翻译成本地语言;接下来,创建一个新的 TUpdateTranslator 对象替代全局对象。
……