2024-09-14

Linux下修改ulimit不能完全生效的问题

前言:本文只打算作为「技术笔记」来写,对关键的要点进行一下点拨就完事,没想写成教程。或许能让熟手解决麻烦,如果是新手的话,最好是先有相关的基础知识和经验。当然,直接喂给AI,让它嚼过再给你慢慢解释,可能也是一个办法。

这些天还是在折腾信创的事情。安装了银河麒麟V10 SP2的一个默认设置的版本,带了可视化界面,准备用于安装「达梦」。
达梦的安装手册写得有一些问题,缺了一些要点,不过对于有一定经验的人而言,还算能解决。手册中有一个要求,就是要把ulimit里面的open files数量调大。原始的1024,看起来不太够用。

图片来自网络

对Linux特别是CentOS7熟悉的人,应该反应过来了。不要直接改ulimit,应该去改/etc/security/limits.conf:

* soft nofile 65535
* hard nofile 65535

改完之后,重新登录的账号就已经是新的open files上限了。简单重启一下就应该万事OK了。

可是,不,没有那么简单!(莫名其妙的英式中文)


在我看来,改完重启以后,对于非root用户似乎完全没有效果。
root账号好像真的是OK了。但达梦的安装手册提到需要创建专用的dmdba账号用于DBMS的安装。我在可视化界面登录dmdba账号后,打开「终端」窗口,ulimit还是1024。

测试下来,发现:

  • ssh上来的session有效果;
  • su切换过去的账号有效果。

这说明对/etc/security/limits.conf的修改还是有效果的,只是不知道为什么在某些场合下不能生效。
百思不得其解。最后找到这篇Blog,是博客园的。标题起得有点不好找:《systemd service 设置limit,不生效问题》。它引用的原文的URL已经失效了,所以我还是得把要点直接再说一下。简单来说就是:

  1. 要修改用systemctl启动的服务的ulimit,需要修改/etc/systemd/system.conf
  2. 要修改从可视化界面登录的用户的ulimit,需要修改/etc/systemd/user.conf

实际上的情况比这个要复杂一些。第二点不是原文中的描述,是我自己试出来的。我目前也无意去成为一个Linux或银河麒麟方面的专家,所以就暂时不作更多的探索了。

另外,修改了/etc/systemd/system.conf以后,需要先重启systemd:

systemctl daemon-reexec

然后用systemctl启动/重新启动的服务,才能用上新的ulimit设置。
毕竟咱们改的是systemd的配置文件,对吧。

2024-09-13

SSD散热铜片导致的故障

我的HTPC,一开始真的只是打算用来当作HTPC用,所以SSD只有256GB。后来儿子要玩游戏,因此很快就不够用了。于是大约两年前,我换了一条aigo的NVMe M.2 SSD,P2000,1TB的容量。不是什么好东西,不过因为我在公司里面用过同品牌同型号的产品,心中有点数(相比之下,aigo P3000 Pro简直就是巨坑),所以也就跟着买了。

用到现在倒也都没有出什么问题,但散热真的是个问题。之前的256GB SSD因为有马甲,还不觉得散热有问题。但这块P2000是个「裸条」,我一开始复制大文件,比如电影,温度就往上窜。温度高到了一定程度以后,速度就掉下来了,后来还开始掉盘。于是我又去买了一个散热铜片,粘上以后好了很多,不再有散热问题了。

图片来自网络,非同款,非广告

这个散热铜片有单面款和双面款。我的HTPC是一个很小的ITX机箱,而且主板的M.2插槽在背面。如果贴双面,会不会接触到主板背面的针脚或元件?我的确有这个担心。看别人的评测,说还有一定高度,不会碰到。我自己试下来,也的确如此,于是就这样用了下去。快两年以来,都没有什么问题。

以上是前言。


最近,我一直在与这台HTPC的「关机」方面的顽疾作斗争。
一开始是开机以后自动关机,偶尔有之。最近则变成关机关不掉,关机变重启。重启有的时候来得很快,有的时候时间都说不清。比如昨天,我关了机器去上班,下午三点多,家里都没有人的时候,它自己开机了。要真是能远程唤醒也就罢了,可当我正经来设置的时候,又没法用。
于是昨晚我把BIOS设置给LOAD DEFAULT了。以前一直没能狠下这个心,终于世界清净了。

然而,今天早上,我再想开机的时候,发现机器开不起来了。

我绞尽脑汁地回想我到底做了什么导致的这个后果?
不是BIOS设置的问题,因为现在甚至不给我进BIOS的机会。CPU风扇转一小会儿就断电停了。
拔掉内存,可以长期通电,可见不是电源问题。
CPU烧了?过热保护?但从加电到断电的时间非常短,CPU再热也不至于这么一小会儿都撑不住。何况风扇并没有停。不过保险起见,我还是把前不久换的散热器拆了,重新打了硅胶。还是没有效果。

把配件全拆了,就剩主板和电源,裸接,还是点不亮。那么,主板、CPU,还有就是背面的SSD了。
我很不报希望地把SSD卸了,再加电。这次亮了,进BIOS了。


带着难以置信的心情,我反复试了几次,能够确认就是SSD导致的问题。
难道是SSD坏了?就算不认盘,也不至于连BIOS也进不去吧?不过NVMe走的路线不同,或许会导致CPU故障类似的样子。
我把SSD拆下来,放在NVMe M.2移动硬盘盒上,用笔记本读。识别起来毫无困难,里面内容也没问题,看起来SSD没坏。我算是松了一口气。

好吧,唯一可以怀疑的,就是这个散热片了。我再次看了看主板背面的空间,感觉有可能接触到。身边没有趁手又够薄的绝缘片,于是我还是费了半天劲把散热片拆了下来。还好P2000没有缓存芯片,背面没有元件。而且上次换散热器的时候,送了一片用来刮硅胶的薄塑料片……

拆了这块粘在SSD背面的铜散热片以后,果然故障就消失了。虽然总算是解决了,但还得装回去,最后这一趟折腾总共花了我两个半小时,还一手的伤口。迷你,不是没有代价的。


复盘一下,多半是因为热胀冷缩的关系,铜散热片不知道怎么就跟主板背面的针脚或元件接触上了,于是主板直接短路保护了。我估计针脚的可能性大一些。之前我HTPC一直没关,基本上都是热机的状态,所以工况跟昨晚不太一样。

这块散热铜片,我是不打算装回去了。SSD上的芯片都在正面,正面的散热铜片还在,背面只有PCB板而已。而且背面的散热铜片以前跟主板的间隙就很近,即使没短路,我觉得也不会有什么散热效果。
只是,早知道如此,当初还不如直接买单面的铜片,还便宜一些。

2024-09-10

把Google Code Prettify应用至Blogger

图片来自网络

记得以前给自己的Blogger部署过Google Code Prettify,不过后来可能是因为主题被重置过,效果没了。今天把它重新找了回来,日后也会逐渐套用至需要的Blog上。本文就作为相关内容的技术笔记吧。

部署

在Blogger后台中,点「主题背景」,然后进行「自定义」,去「修改HTML」。
在head标签中放置:

<script src='https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js'/>

然后用下列标签把代码括起来,就可以实现本文中的代码块效果:

<pre class="prettyprint">……</pre>

pre标签中的代码按原始格式存放即可,不过小于号(<)和大于号(>)仍然要进行转义。


以下是一些常用到的option,更多的内容烦请移驾官方Github页面

主题

在引用run_prettify.js的时候,URL后面加一个参数skin即可。例如:

<script src='https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=desert'/>

目前有五种主题,预览图点这里

不标记为代码

用一组带nocode样式的span标签括起来即可,还可以加上自己的样式。例如

<span class="nocode" style="color: red;">注意</span>

语言指定

在pre标签中指定lang-*样式,例如:

<pre class="prettyprint lang-sh">
if [ ! -d '/myfile' ]
then
    mkdir /myfile
fi
</pre>
<pre class="prettyprint lang-cpp">
class A
{
public:
    int a;
}
</pre>

内置支持的语言有["bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html", "java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh", "xhtml", "xml", "xsl"],还有一些可以通过extensions进行支持,参见官网页面。

自动换行

有些代码有可能把屏幕宽度撑得很大。要想自动换行的话,在head标签中添加:

<style>
pre {
  white-space: pre-wrap;
  word-wrap: break-word;
  word-break: break-all;
}
</style>

这里的效果是按字母换行,可能会切断单词。如果要按单词换行,去掉word-break这一行。详细的解释参见我的另一篇Blog《关于表格内文字换行的再研究》。

2024-09-09

编译自己的CentOS7 OpenSSL 1.0.2u动态链接库

因为老板想从「信创」分一杯羹,于是我们现在需要把一个CentOS7上面跑着的系统,移植到「银河麒麟」上去运行。
对于「国产」操作系统了解不多,不敢妄自确定方案。先去下载了银河麒麟的数个版本,主要都是服务器操作系统V10,包括SP2的「CentOS兼容版」,海光版,以及SP3 2303以及2403的海光版本。考虑到海光CPU也是x86架构,理论上应该可以跑在普通的Intel/AMD CPU的机器上,实际测试下来也是如此。

不得不说,我一开始对于情况设想得比现状要严峻一些。实在是没有想到银河麒麟V10对于CentOS抄得如此彻底,怪我太高看了国人的本领。无论是「CentOS兼容版」还是海光版,我们在CentOS7上编译的东西,基本上拿上去就可以直接跑。
当然,从好处想,这样做的确提升了这些「国产」操作系统的兼容性,极大拓展了生态链。一定程度上也算是利国利民的好事情。除了钱以外的事情,我也就不吐槽了。

图片来自网络

之所以说是「基本上」可以直接跑,是因为银河麒麟V10大概是从CentOS8开始「魔改」的,所以上面搭载的OpenSSL是1.1.1版本。有一些是1.1.1c,有一些是1.1.1f,总之不是CentOS7的1.0.2。yum list看了一下,源里面也只有1.1.1的版本可供安装。

我们的程序是在CentOS7上编译出来的,用了so版本的OpenSSL 1.0.2,所以缺了这个东西还没法运行。尽管我们可以把自己的代码改成去链接OpenSSL 1.1.1,或者索性静态链接进去,但还有些第三方厂商提供的库也是基于OpenSSL 1.0.2的,而且不算少。总之这个问题是绕不开的,只能迎头而上去解决它。
另外,我们发现那个「CentOS兼容版」的默认安装会在/lib64下面形成OpenSSL 1.0.2o的库。yum list里面还是没有,说明应该是某个软件包自行装上的。既然那个软件包可以这样做,我们也可以。把自己编译的OpenSSL 1.0.2的库放进系统里面去,然后ldconfig就好。

以上交代了背景,接下来就说说看具体怎么做,以及介绍一下踩过的坑。


编译OpenSSL很简单,从OpenSSL官网上下载1.0.2u的tar.gz包(最后一个版本,1.0.2已经停止维护了),解压以后编译:

wget https://openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz
tar -xvzf openssl-1.0.2u.tar.gz
cd openssl-1.0.2u
./config --prefix=/usr/local/openssl-1.0.2u --openssldir=/usr/local/openssl-1.0.2u shared
make
make install

以上的操作,随处都可以搜到,AI也能提供。不过编译出来的openssl动态链接库,有两个问题:

  1. 拿这两个编译出来的so库去用,会报「no version information available」。事实上ldd的时候就会报这个错。
  2. 编译出来的文件名是libcrypto.so.1.0.0和libssl.so.1.0.0,而不是我想要的libcrypto.so.1.0.2u和libssl.so.1.0.2u。

前者问题大一些,后者往小了说只是自己看着顺不顺眼的问题。一个一个解决吧。

问题1

拿着「no version information available」去搜,得到的信息不太具有参考价值。问AI也一样。
大多数的回答是说错用了别的操作系统编译的OpenSSL库,可能很多人遇到的情况也的确是这个,但显然我们遇到的情况并不是。

唯一找到一篇相关文章,跟着评论找到了知乎上的一篇文章。作者是想自己编译1.0.2u的库,替换掉CentOS7上的1.0.2k的版本。
顺带说一句:以前CentOS7还在维护,即使是1.0.2k的库,CentOS也会补上安全漏洞。现在CentOS7不维护了,或许将有必要这样去做。但1.0.2u也已经是2019年发布的版本,换句话说,OpenSSL 1.0.2在更早的时间就停止维护了。所以原文作者这样去做可能也没有什么意义。

该文作者的思路和实际操作都没有什么问题,尊重他人的劳动成果,我就不原样贴一遍了。需要的朋友可以根据上面的链接自己去看。虽然原文不知道为什么贴了Markdown的内容,在知乎上看不出样式,至少PC Web版上看不出,但内容总归能看懂。
我遇到的坑是:按照该文操作的「1.4」步骤得到的函数名称中有「@库名」的内容,例如:

sk_find@libcrypto.so.10;
sk_set@libcrypto.so.10;
asn1_add_error@libcrypto.so.10;
……

对于Version Script,这是不可接受的写法。我的处理方法是把这里面的「@libcrypto.so.10」直接删掉了。
这里是我从CentOS7中的OpenSSL 1.0.2k提取出来的Version Script,既然CentOS7已经停止维护,这个文件应该算是Stable了,可以点此下载

把下载得到的version.map放在解压生成的openssl-1.0.2u目录下。随后,./config的时候换成下面这句:

./config --prefix=/usr/local/openssl-1.0.2 --openssldir=/usr/local/openssl-1.0.2 shared -Wl,--version-script=version.map -Wl,-Bsymbolic-functions zlib-dynamic

最重要的参数就是-Wl,--version-script=version.map这句。再编译生成的so库就不会被报「no version information available」了。

问题2

直接改文件名是不行的。因为文件里面有SONAME。做符号链接以及ldconfig的时候都会原形毕露。我们需要把文件内部的SONAME也一起改掉才行。

据说在编译前手动调整一些文件也可以解决这个问题。不过我是选择在编译之后用patchelf来解决这个问题的。为此当然首先要安装patchelf:

yum -y install patchelf

然后就开始改文件了:

patchelf --set-soname libssl.so.1.0.2u libssl.so.1.0.0
patchelf --set-soname libcrypto.so.1.0.2u libcrypto.so.1.0.0
mv libssl.so.1.0.0 libssl.so.1.0.2u
mv libcrypto.so.1.0.0 libcrypto.so.1.0.2u
patchelf --replace-needed libcrypto.so.1.0.0 libcrypto.so.1.0.2u libssl.so.1.0.2u

最后一句也是必须的,因为libssl.so会引用libcrypto.so。

2024-07-27

「微软蓝屏事件」与「信创」

图片来自网络,与本文内容无关

「微软蓝屏事件」也已经过去一个多星期了。各方信息差不多到位了,讨论得也相对充分,应该不需要我再来分析或者补充什么了。

不过,这个事件发生之后,我遇到一种有意思的想法,可以与大家分享一下。

蓝屏幕席卷全球的时候,我正在旅游。连日记都只能在手机上简单记录一下要点的我,完美错过了这个事件的波峰。等我有空来了解的时候,整个事件基本已经有了结论,甚至都快平息了。我不知道这算我的幸运还是不幸。

当然,余波还是在的。等我周一回到公司,有同事就向我表示,「信创」的事情,可能要因此而加速。理由是这次中国在此次全球性事件中基本幸存,有赖于「脱钩」,那么接下来这个过程应该会更加地紧锣密鼓。

这自然是他自己的理解,不过也很有可能会是一个「正确」的预测。我们都知道所谓的「上头」其实也只是一届「草台班子」而已(实际上谁不是呢?)。他们的见识不见得比普通人高出多少。所以,按照常识,他们很可能也会这样去想,去思考,也就会真的这样去做。

问题是:中国这次的「幸存」,真的是因为「脱钩」吗?

跟许多人的理解可能不太一样,这次微软所谓的蓝屏事件,实际上跟微软没有什么关系。在我看来,这事就是一个装机量巨大的杀毒软件出了一个Bug。由于在企业用户中装机量巨大,企业服务的客户也被影响到,于是闹出了这么大一个事端。微软还真是可怜,其实是它被别的软件给「搞」了。

可能现在活跃在网上的人都太年轻,也或者互联网真的是没记忆了。但我可是都还记得的。
我曾经写过一篇Blog《突发的c000021a蓝屏故障》。2007年,距今有一些年头,15年有,但还不到20年。在我看来,那次的事件比起这一次,其实还更为严重一些。这次只是内核驱动层面出了问题而已。驱动嘛,开个安全模式就进去了。然后把文件夹改个名,让它正常启动时加载不了,就恢复了。2007年那次可是把系统DLL文件直接给干掉了,相当于把操作系统删掉了一部分,安全模式都没用。单机只有哭。

我并不是太清楚现今的CrowdStrike与当年的Symantec哪个更牛逼。反正我现在不用什么杀毒软件或安全防护软件。「自己的安全自己负责」,很多年前我就学会了自己解决问题。普通人肯定没法照搬我的情况,这也是为什么360这种东西至今也还能大行其道的原因。
那么,说到这里,我的另一个大问题就要抛出来了:你为什么就能确定,360之流不会闹出同样的问题呢?

在我看来,作为一个拿到了ring0权限的软件,要把系统搞蓝屏,那简直是举手之劳。能把你Windows搞蓝屏的内核驱动,我要不了几分钟就能写上一个。像CrowdStrike那样的情况,我们一般称之为「逻辑炸弹」,也不是什么多难的事情。无怪有很多人对此事归结于阴谋论。
我觉得这种逻辑炸弹恐怕还有很多,最好不要被什么歹人给拿到。但对此你无法打包票,所以还得要有自己的能力,以及要有备援才行。我上面说的那句话的扩大版,此时应该强调一下:自己的事情,只有自己来操心才靠谱,靠别人都是靠不住的。

况且,国内的软件企业就很靠谱吗?
这次很多人觉得很不可思议的一点是:CrowdStrike既不好好测试,也不做灰度更新,直接全球推送,非常大胆,非常的不专业。有人发现,CrowdStrike的创始人之一,之前在McAfee也闹出过类似的问题。这一点还真是,我也不知道如何吐槽。
CrowdStrike是草台班子,这一点可能没错。但国内的软件企业,我可是更加不放心。

我曾经有个同事,脑子算是聪明。别人上大学的时候,他当兵去了。复员后也没受过什么系统性的专业训练,「怎么写代码」这件事情,都是自己琢磨的。其实从这一点就能看出来,人的确是挺聪明的。但他路子也挺野。若让他去研究技术问题,我认为或许会是一把好手,但不应该去做工程师。他写出来的代码,Bug不少。
他有一种自创的加密文件格式,其中的加密算法基本上就是异或,关键是密钥是他自己的硬编码。这个东西用在了他当时给公司开发的产品中。后来他离职了,代码就交接给了我。「Bug多」的印象,也就是这个时候留下的。
听别人说他去了某大城市发展。再后来,可能四五年后了,我在研究360的一款产品的时候,发现它们的漏洞库文件的HEX密文看上去很眼熟。于是我用那位同事留下的代码去试了一下,没想到真的一下子就解密成功了。
这……

所以,「脱钩」并不能保证不受影响。相反,闭门造车,低水平造轮子,还加上不用接受市场检验,由政府背书和「保送」,使得出现这种问题的机会,其实是增加了。
要问什么才是真正有效的手段,窃以为,增加多样性,增加市场竞争,算是一个。
所谓「信创」,不管背后的内容是什么,重点应该放在「创」字上。如果还是现在这种搞法,把重点放在「不被卡脖子」上,不可能解决这个问题,反而会恶化。

如果能创造出更多样的生态,有了更多的选择,就不会吊死在一棵树上。最理想的情况,每个软件都是不一样的,就不会因为一个弱点而全球瘫痪。
就像生物世界一样,每个人的DNA都是不一样的,没有什么病毒可以杀死100%的人类,总有人能幸存下来,然后把抗病毒的基因传播下去。

说到底,科学技术范畴的事情,就要遵循科学技术的发展规律,而不要想着去为自己的政权安全服务。出发点如果就「心术不正」,最后是结不出什么好果子的。

2024-07-22

我的手机史(十一)——iPhone SE

2016年,准确地说应该是3月26日,我在清明节回重庆之前,去AppleStore买了一个当年三月份新上市的iPhone SE,把我之前在用的Samsung Galaxy Note 3手机替换了下来。Note3带回去给了我爸去用,老人可能更需要大屏幕一些。而我,其实更喜欢小屏幕的手机。

我的手并不算大。或者说,我的手掌可能比较大,但手指不长。我的手指和手掌的长度比例,不像有些人是3:2或4:3,甚至都不是1:1,而是有点夸张的3:5。这使得我用手指去「够」屏幕远端的触控内容时,单手操作有些费劲。还因为这个原因摔过几次手机。

所以,体验过大屏幕手机之后,这次我又回归到了小手机上。
这部iPhone SE有着5S的尺寸大小,外观几乎一模一样,但内部的系统,甚至略微高过6S,或者说起码是同一个级别的。速度自不必说,除了电池略差,其它都是当时iPhone最高的档次。64GB,总之是够我用了。

这回是本尊无误了

当时的我,觉得买的很值。别人以为我这个是5S,特别是我套了手机壳以后。但我也不在乎,自己用着爽就行。

没过多久,下半年吧,苹果出了iPhone 7。有了防水功能,也因此把耳机插孔砍掉了。我的SE在耳机插头方面变成了绝唱。
再后来,苹果爆出了「电池门」事件。为了平息众怒,答应给所有符合条件的手机免费换原装电池,即使是不符合条件的,也可以打折换电池。
太太当时在用的iPhone 6 Plus,就在苹果商店免费换了电池。刚好岳父说没手机用,于是我去买了一台iPhone 8 Plus,把SE也拿去掏钱换了一次电池,然后就给岳父用了。当时电池峰值容量还有89%,Apple的店员一直劝我考虑考虑。

岳父也是狠人,后来这部小SE,他一直用到去年,才被替换下来,算算大概服役了6年多。电池肯定又不行了,峰值容量剩73%,Home键也不太好使,屏幕边缘也开始发黄,总之是一副行将就木的样子。
不过其它功能说来还算正常。iOS版本一直支持到15,目前还算是能用的机型。现在它被我放在公司当测试机,毕竟5寸屏幕的小手机如今不太好找了。

2024-07-05

Dbgview与小狼毫输入法冲突

今天在调试一段代码的时候,偷懒用了OutputDebugString,于是想打开Dbgview看输出。双击了没反应,试了试dbgview64,还是没反应。有点奇怪,心说是不是旧版本不能用了,看看SysInternals有没有新版本可以下载,点开Chrome,发现Chrome启动也没反应了。心里有点慌,想开任务管理器看看到底怎么回事,结果任务管理器也打不开,这才真的有点发慌了。

一番折腾没有效果,包括找了别的电脑RDP远程桌面过来,也进不了桌面,还把主机卡在登录界面进不去了。还好右下角的重启按钮还是有反应,而且没让我等多久。
重启完以后,第一时间去开任务管理器,然后重来了一遍。之前以为是偶然现象,确实很久没重启了,但发现这次Dbgview还是卡住,还是只能重启。反复折腾了几次,都是如此。上网一搜,还真有人遇到类似问题,一看「对方」——小狼毫。

图片来自网络

这和我的情况对上号了,我也在用这个小狼毫作为输入法。于是我把这个输入法的主进程WeaselServer.exe杀掉以后再去开Dbgview,工作得非常正常。于是案子算是破了。

接下来我好好调查了一番这个事情。除了原Github贴子反馈的事情,我还发现了一些情况:

如果先有WeaselServer.exe,再去启动Dbgview.exe,Dbgview就会卡住,界面出不来。如果事先开着任务管理器,就会看到Dbgview.exe进程出现,并未「无响应」,CPU占用率也不高。此时如果杀掉了WeaselServer.exe,系统会立刻恢复正常。杀掉Dbgview.exe也行,但系统恢复要慢上一点,似乎在等待着什么。

如果是先有Dbgview.exe,再去启动WeaselServer.exe,则会在Dbgview上看到大约100条左右的日志出现。多也没有很多,而且后续并没有更多的日志出现。
诡异而关键的一点来了:此时DbgView也能在界面上通过鼠标正常操作,只是不能碰键盘。如果一动键盘,哪怕仅仅单独碰了一下Ctrl或Shift键,都会导致DbgView无响应。

而只要Dbgview.exe开始卡住,接下来Windows里面就会无法新建进程。在别的已经启动的进程里面,也不能去碰键盘,一碰就卡。包括任务管理器,我前几次被迫重启,就是栽在这里——我实在是太喜欢用快捷键了。

在测试时,有碰到过一次Process Explorer能够「例外」,也就是说操作键盘不会被卡住。但接下来我想要再重现,发现它的「防护结界」失效了。所以目前还算是没找到规律。

这问题看上去是Dbgview.exe和WeaselServer.exe这两个进程在键盘消息的处理方面有所冲突。原Github贴主提到的「过滤掉“.cc:”相关日志」的临时解决方案,并不能解决我遇到的问题。我试过,即使让DebugView停止Capture也不行。不过,只要注意启动顺序,并能忍住不要去用键盘,就还暂时可以让它们俩一起工作,相安无事。

我不知道作者会不会去修正这个问题,以及什么时候修正。有点担心,恐怕他缺乏足够的动力和精力去做这种事情。现在真的没什么好输入法可以用了么?

2024-07-04

两个关于「日本人」的小故事

最近,苏州的日本校车刺杀事件作为一个新闻热点,随着胡友平女士的离世,慢慢进入平复期。
相关的讨论已经很多了,我也无意再去发表一些观点和看法。今天只是简单地分享一下两件跟「日本人」有关,对我感触比较深的事情。两个小故事,也不代表和说明什么,随便看看吧。

图片来自Stable Diffusion,纯属虚构,且与本文无关

没来由的恨意

许多年以前,当时我还在厦门工作。公司里有位女同事,我们都叫她小王。
小王是一个比较朴实的人,心直口快,没什么城府。她有一次跟我们聊天,说起她上一份工作时,特别提到同事里面有一位是日本人,跟她关系很要好。

『他后来回国了,临别的时候,还送了我一套茶具呢!』

小王说这话的时候,是颇有一些骄傲自豪的情绪在里面的。
然而,紧接着她又说:

『但是我一直告诉他,我很恨日本人。跟你个人无关,我就是恨日本人。』
『他临走的时候还哭了,问这是为什么。』
『我告诉他说,我也不知道,但是就是恨。我这一辈子都不会喜欢日本人。』

我们也有点纳闷,问她是不是祖上有什么前辈,在二战日军侵华的时候死在日本人手上?她说并没有,而且强调说她真的不知道为什么。
说到这里,她眼里应该有迷惘,但我并没有看到。我看到的,还是骄傲自豪。

再后来,小王肚子大了,辞职回家生孩子去了。我们后来再也没见到她,只是偶尔在看见路边的大肚婆时,不约而同地猛然互相问起「小王生了男孩还是女孩」这档子事来。

你们为什么叫我「日本人」?

大学时候,有一位同学,成都本地人,姓李,住我斜对面寝室。大家平时都叫他「日本人」。叫得顺了口,俨然已经成了他的绰号。最开始这样叫的,大概率是他同寝室的同学,估计从来没有人问过为什么。

有一天中午,我在寝室边吃饭边玩游戏。他寝室的同学估计都不在,自己大概也忘了带钥匙,开不了门,于是跑来我这边「串门」,很随意地逛逛。

我也用他的「日本人」绰号称呼他,跟他打招呼。
然而那一天不知道是不是他过得不太顺心。总之不知道怎么回事,他一下子就爆发了:

『我不知道你们为什么都要叫我「日本人」,我又没得罪你们,你们为什么要这样子对我?』

这话的语气,我可能不一定能准确形容。总之用「抱怨」可能是有点避重就轻了。他的火气很明显,看起来完全不是在调侃或开玩笑。这个情绪一定在他心里被压抑了很久。我心中一「咯噔」,完了,今天要在我这里「爆炸」了?

我心中闪过了无数个念头。
要说他像不像日本人?身高应该有超过一米八,也算仪表堂堂,家世应该也不错。有一次他女朋友跑来学校找他,闯到教室来打听。挺不错的女孩儿,配得上他,后来他还被我们集体起哄。
要说他哪里像日本人?如果鼻子下面留上一撮希特勒小胡子,戴上黑色圆形小眼镜,再配上他那标志性的「狞笑」,倒是真的有点像抗日神剧里面的日本军官。
不过……
表面上我是不动声色,捏鼠标的手也没动过,只是白了他一眼,然后缓缓说道:

『谁让你成天嘴上都是「说的是呢」、「说的是呢」?』

我觉得我肯定是抓住了我那无数个念头中,最好的那一个。这个短语也的确是他的口头禅。我甚至觉得我真的Get到了第一个称他「日本人」的那个人心中的Point。

估计我和他都是「恍然大悟」。他接下来的表情,我只能想到四个字:「回嗔作喜」。

『说的是呢,原来是这个原因啊。』他嬉皮笑脸地坐到我旁边来,『哎,你说这个日语也真是有意思哈。你看,「说的是呢」,这几个字换成中文也是这个意思。你说这日语是不是就是当年学的中国话……』

我附和着他后面的喋喋不休,心想着这次危机应该算是解除了吧。

2024-07-03

从KuaiCheDao搬迁至Nube.sh

之前为了让太太看Netflix,经人介绍在KuaiCheDao上买了一个SJC的VPS。价格不算非常便宜,但也还好,而且「质量」的确不错。带宽和速度都不错,当时说是家宽,用下来感觉跟其它VPS提供商的东西的确有些不一样。自己的VPS,IP地址比较爱惜,后续很多时候都派上了不小的用场,包括AI。

前些天,收到了邮件,说这个VPS即将关闭,在7月后就没法续费了。替代方案是迁移去Nube.sh。
说起Nube.sh,我知道是同一个老板折腾出来的东西,想从VPS变成Cloud,也就是向Vultr之类看齐,貌似费了不少劲。之前他一直没弄好Nube.sh的SJC地域,我也就没去关注。现在要强制迁移KuaiCheDao上的客户,想必是已经搞定了。于是周末我就去尝试把VPS迁移了。

图片来自网络,经过格式转换

先说说这个Nube.sh本身吧。

打开页面,就直接提示我用Google账号登录。我懒得注册,直接允许了,确实比较省事。
控制台比较简单,功能或许尚算够用。地域的选择位于页面上方中部,感觉属于框架的部分。我一开始没看到,疑惑了半天结果还是下错了单。而且一旦下单就立即开始部署,说起来也算是太过「流畅」,但这种既没有「确认」界面,而且页面下方还有用户没明确选择的项目也没给提示的UI设计,结果就是我稀里糊涂$0.02一键就出去了。这个必须吐槽一下。

老板给了$0.2的授信额度,可以用于摸索和测试,包括测试IP和网络的情况。基本上这个额度够用了。
最小的实例一小时才$0.0027,月租不到$2,额外的IP和存储费用还不到$0.3。流量每G只要$0.0009,按原来KuaiCheDao的额度2TB计算相当于$1.8。而且Nube.sh这边算Outgoing不算Incoming,反正比阿里云便宜多了。
当然,现阶段价格有折扣。恢复正常以后,按照KuaiCheDao我原来的VPS规格算下来大约是一个月$5不到。相比起来,费用方面还是会更便宜一些。不过可想而知,老板肯定能更方便地超售。

IPv6用起来貌似没遇到太多问题,目前能正常用。KuaiCheDao那边曾经遇到过问题,而且修好以后还有过反复,后来我索性把IPv6给禁用掉了。
拿到的IPv4地址也看了一下。type也是hosting,不是isp,有些遗憾。虽然VPS肯定是在SJC,但IP是香港的Cogant,不过用ipinfo去看确实是在SJC没错。
我KuaiCheDao的VPS地址印象以前中是isp,现在发现也变hosting了。用起来倒是还没什么感觉,反正太太现在更多的都是看我下载到本地的片子,而不是在线看Netflix了。试了一下ChatGPT可以用,那就还算OK。

测试完成后,用银联卡充了$10。VPS部署完先放了起来,等我KuaiCheDao到期后就把线路切换过去。
只希望这个Nube.sh不要像KuaiCheDao那样被人攻击。

2024-07-01

微软更新弄丢了我的VS2013窗口布局

早上来公司,打开电脑显示屏,发现似乎有些不一样。周五下班时挂着在运行抓Dump的一个程序,不见了。

心中一喜,还以为抓住Dump了。再一看,Visual Studio不对劲。心一沉,去Windows日志里面一看,果然今天早上1点多的时候,机器被重启了。再去看Windows更新日志,果然,今天凌晨安装了KB5039299,然后就被微软自动重启了。

微软还挺贼,重启完了以后,还把我的应用程序都给「恢复原状」。包括像Chrome和Visual Studio。可里面的工作状态终究是没法真的恢复,而且把虚拟机也给我关了,简直气死我了。我已经想尽了办法阻止它自动重启,而且也禁止了Windows在登录时重启应用,可这货在这一点上简直比中国AI还蠢,横竖不听,我行我素。

别的我就忍了,大不了当作周末断过电。可微软还干了一件出格的事情:它把我的VS2013的窗口布局给重置掉 了。我一共开了6个VS2013,其中5个都被重置过了。我小心翼翼地最后关闭那个看上去没被重置的VS2013窗口,然而没用,新打开的都是那种资源管理器在右边的布局形态。

记得以前也处理过类似的事情,后来发现有捷径。在网上搜了一阵子,总算捡回了记忆。

工具 -> 导入和导出设置
从「工具」菜单中选择「导入和导出设置」,然后选择「导入选定的环境设置」,再接下来选择「否,仅导入新设置,覆盖我的当前设置」。
最近没有备份过,但我对工作环境并没有什么特别的定制,所以重新选Visual C++就好。如果对于习惯的开发环境特别在意,平时还是注意导出并备份吧。保存路径在自己动手的过程中就可以看到。

还是更习惯VC++的传统窗口布局
我还是更习惯传统的资源管理器在左边的那种VC++的窗口布局方式,可能也有一些老筒子跟我是一样的习惯吧?

每个周一都很忙,真希望微软不要再添乱了。