Day 4988 关于本博客『Win故知新』分类恢复更新的说明

对 Raymond Chen 的博客《The old new thing》(下文简称TONT)的随缘翻译停了几个月,起因是大约在今年(2019年)5月份时(相关博文原文链接),TONT 整体迁移到了 Microsoft Developer Blog平台,该平台较之旧版对移动端友好,但由于需要遵守欧盟缺德数据保护条例(GDPR),所有的评论都被丢弃了。由于某些文中未完整解明的问题,评论区有人提问后,Raymond 可能在回复中给予进一步解释,故对评论的丢弃实为一大损失。

虽然微软在推特账号 MSDN Services Status(@MSDNService)上声明,为便于用户通过搜索(引擎?)查找已经不再活跃更新的MSDN Blog、TechNet Blog上的数据,将对这些博客进行静态化处理,然而对于一直都在更新的 TONT 来说显然不在此列,而后面几个月以来的实际情况也证实了这一点。

发现该情况后,虽感觉希望渺茫,本人仍然尝试了许多方法去访问旧版的 TONT 内容。在经历了不下数十次碰壁后,发现可能是由于 CDN 缓存的原因,每20-30次访问之间偶尔可以进入旧版页面,同时,该现象还具有如果访问结果是跳转新版页面,则在 HTTP 状态码为 301 的同时内容为空的特点。由此,本人编写了一个简单的下载程序,通过导入 URL 列表的方式,对每个页面最多访问一万次(两次访问间有2-5秒的随机间隔),试图拉取到旧版内容。

程序自2019年5月31日上线,经过一个多月的7×24连续运行,至7月3日起,连续一个星期没有再拉取到新的内容,基本判定该 bug 已被修复,于是停止了下载程序的运行。期间,共成功下载到 TONT 的 1804 篇旧版博客内容,包含对应文章的完整评论。该部分内容不会放出下载,以避免不必要的麻烦。

即日起,『Win故知新』栏目恢复更新,更新频率仍为随缘。

Day 4849 自行组装RAID10磁盘阵列

以前的时候,由于家里的网速一直不是很快,加上由于环境受限,一直没有外网环境,从来没有做过资源党,也就对硬盘空间没有多高的需求。事实上,从第一台电脑开始,家中的台式机几乎一一直是单(机械)硬盘配置,依次经历了2G、20G、120G、600G、1T和2T的容量台阶,并且在600G以前一直是IDE接口。

然而对存储空间的追求是永无止境的,为了在一段时间内暂时不再受台式机硬盘的限制,又忌惮于群晖的价格,一狠心,实践了一次用阵列卡自行组装磁盘阵列的想法。

这中间也算学到了点东西。

继续阅读 “Day 4849 自行组装RAID10磁盘阵列”

Day 4768 关于Excel中录入15位以上数字时(例如身份证号),COUNTIF函数返回的结果数量不正确的问题

最近帮同事做一个表格,要求在录入数据时,自动查找同一列下是否有相同的值,有则进行提示,而需要这个提示功能的其中一列是『身份证号』。

众所周知,中国大陆地区的身份证号是18位。鉴于Excel采用了IEEE 754的浮点数存储规范,对于正整数最高支持到15位。这也是在Excel中录入身份证号时,如果身份证号中不含X,经常会在按下回车的时候变成一串科学记数法的原因,而实际上此时第16位起的数字已经丢失了。

对于只使用表格本身的场合,可以简单地将对应单元格的数字格式修改为『文本』,虽然这样一来相关数字就不能参与运算,但多半也没有需要对身份证号进行运算的情形。

然而,当涉及到使用COUNTIF函数时,即使对应单元格的数字格式是文本,COUNTIF对于传入的数据也会进行自动的类型判断。试观察如下VBA语句:

‘sShenfenzheng是之前传入的单元格内容(身份证号),变量类型为String
n = Application.WorksheetFunction.CountIf(Range(“B1:B65535”), sShenfenzheng)

此时如果在B列中录入如下数据:

110000199901012333
110000199901012334
110000199901012335

然后对sShenfenzheng传入『110000199901012336』的话,n的值将会是3,而不是预期的0。

解决方法:

在调用CountIf时,将传入的查找目标后面跟上一个『*』,强制CountIf按照字符串形式对数据进行查找,即可获得正确的结果。

以前述代码为例,应修改为:

n = Application.WorksheetFunction.CountIf(Range(“B1:B65535”), sShenfenzheng & “*”)