办理身份证

办理身份证

老大的身份证月初过期了,上月由于初二生地会考,不敢随便动证件,就一直拖着。流程其实比较简单,不过由于小儿未满16岁,必须到现场办理,办理苗的居住证时就顺便一起预约了办理老大的身份证。

主要注意以下几点:

(1)预约民政服务中心点以及时间;

(2)提供证件原件:(a)户口本;(b)家长和小童的身份证;以及(c)照片回执。

无需提供证件复印件,但小童必须到现场办理,现场需要录入指纹。

现场无需支付费用,证件邮寄到家后再支付即可。

办理居住证

办理居住证

苗是双非孩子,虽然居住在深圳,但却一直没有办理居住证。最近办理一些手续,需要用到居住证,因此正式着手办理。深圳对港澳籍居民办理居住证的流程非常简单(小童无需到现场),主要是以下几点:

(1)需要在“深圳公安”公众号或者网站(点击此处)预约服务中心和时间;

(2)提供以下证件的原件和复印件:(a)家长身份证;(b)小童回乡证(也就是港澳居民往来大陆通行证);以及(c)小童的香港出生纸。

(3)提供房产证(或者租房证)的复印件,无需原件;

(4)提供照片回执(现场附近一般都有照相馆,也可以到市内任意一家照相馆照相,声明是照居住证照片即可)。

事先可以致电咨询以免政策出现变化,联系电话:84466140。

预约时要选择办理的地点,南山这边有两个民政服务中心点:(1)南山公安局服务点;以及(2)深圳湾服务点。

由于我们家住南油附近,地铁9号线可以直接通到深圳湾服务点所在的“高新南”站,因此预约了这个服务点。路程也很简单:

南油(F1入口)坐9号线(文锦方向)、“高新南”站(B1出口)下、沿着出口上到9栋B座(一层)即是。

办完之后大约10个工作日证件邮寄到家,收件时再支付费用,服务点大厅不收取任何费用。

攀升电脑

攀升电脑

去年年中的时候,考虑到孩子上网课用 iPad 太伤眼睛,就将自己平时用的笔记本给孩子,自己上网搜了一圈,买了一台攀升小电脑,如下图中所示:

本来可以自己攒一台电脑,这也不是什么难事,不过看到攀升这台小电脑,觉得外观不错、金属外壳估计散热也可以,另外觉得有品牌的电脑大概品控会比自己攒的要好一些。

最初一段时间还是不错,然而后续有些问题让人极度不愉快。主要体现在以下几点:

(1)Windows 10 家庭版系统可能是盗版。使用一段时间后,系统竟然提示过期、需要重新激活。联系了客服,发了一个注册码过来重新激活。我不知道攀升和微软是达成什么类型的协议,我第一次遇到 windows 提示这种信息,感觉不太正常。也不知道若干时间后,是不是还要再次激活。

(2)SSD硬盘降速、提示文件损坏等。使用了大约半年时间,很明显就降速了,甚至提示某些文件损坏。不到一年时间,任务管理器里提示磁盘活动时间100%,几乎无法使用。再次联系客服,可以保修换硬盘,但数据无法保证。于是自己想努力一下,用各种设备、软件先备份数据、备份系统,期间拆开电脑检查,SSD 是从来没听说过的”Flash War”品牌,上网查了一下,果然被评价为“垃圾中的垃圾”。

我对客服提示的换硬盘没有信心,鬼知道会换个什么牌子的硬盘,难道过半年我又重新再折腾一遍?于是自己买了张金士顿的 M.2 SSD、复制硬盘。很遗憾,由于错误太多,尝试很多次后都失败了,所幸原盘自带一个 OEM 分区,里面有初始安装的备份,在新盘上重新还原出来系统。数据部分没有损坏,只是系统相当于重置了,花了两天时间重新安装、备份系统。

我相信攀升选择这种野鸡 SSD 的主要原因是图便宜,但这实在得不偿失,严重损害品牌的形象。这台电脑的工作负荷并不高,平时只是我自己的一些开发工作(对硬盘读写几乎没有要求),然后就是上网看新闻、QQ 听点音乐而已。就这点负荷,这块 SSD 只能支撑大半年时间,可见品质有多烂。这样能省几个钱呢? 哪怕换块国产长江存储的 SSD 肯定也比这好得多。

(3)无线信号极差,对,就是极差。由于是金属机身,信号差我是有预期的,但是差成这个鬼样子,绝对超出预期。上图中我不得不另外买了个外置的 EDUP 无线网卡才解决上网问题。这次拆机看了下无线模块,就牵了两条线粘在面板上,这样信号能好才见鬼了。千元电脑的杂牌机(比如占美)都知道外接天线(或者留下外接天线的接口),要不然就不应该采用金属机身。

(4)USB3供电不足。上面提到的无线网卡是USB3接口,经常因为供电不足而断开,后来不得不插到USB2口后才行。这个就很奇葩,以前只在笔记本上遇到过供电不足的问题,台式机居然搞成这样?!不知道是元器件的问题,还是主板设计的问题,对消费者而言就是个闹心的问题。

稍稍有点意外的是采用了英睿达的内存。既然如此,为什么不一套整下来,也采用英睿达的SSD呢? 或者用好点的SSD、用差一点的内存?不知道攀升在供应链或者工业设计方面是怎么考虑的,我觉得整体严重低于预期,甚至不如之前使用了几年、换给孩子上网课的笔记本。

奇怪的 SIP 呼叫流程

奇怪的 SIP 呼叫流程

最近几天帮助泰国的朋友检查一个呼叫业务流程,其中涉及很多细节和业务流程,不过让我觉得特别意外的是他使用的 VoIP 运营商的 SIP 呼叫流程。首次遇到这样的流程,请先参考下图的概要描述:

奇怪的 SIP 呼叫流程
奇怪的 SIP 呼叫流程

这个流程的奇怪之处在于:(1)VoIP 运营商发起呼叫时,INVITE 消息的媒体地址居然是“0.0.0.0”,这很明确告诉被叫:主叫只发送媒体流、甚至根本不处理媒体流;(2)被叫应答后,VoIP 运营商再次发起 reINVITE 流程,此时才真正指示出自己的真实媒体地址(当然也包括最终的媒体编码)。

通常的 SIP 呼叫流程在发起呼叫时就明确指示自己的真实媒体信息,因此在被叫应答后,没有必要再发起 reINVITE 流程。然而这家运营商为什么要放弃传统做法、采用这么奇怪的流程呢?

这家运营商是美国的一家运营商,而且规模很大,其设备供应商也是一家世界级的大软件公司(非常、非常大),因此这个流程肯定不是随意修改的结果,必定有其特殊的目的。仔细揣摩后,我认为它可能是为了节省媒体资源才这么做。

被叫方一般会振铃几秒、十几秒、甚至几十秒后,才可能应答。另外,呼叫量特别大时,统计上只有10%左右的呼叫最终才会应答。这家运营商采用这个流程,只需要在被叫真正应答之后才开始分配媒体资源,考虑到这是一家规模很大的运营商,这种流程确实可以节省很多的媒体资源。

VoIP 网络往往是主叫播放回铃音,因此这是个非常聪明、折中的呼叫流程,确实只有在被叫侧应答之后才处理真实媒体流。然而现实网络组网是非常复杂的,这个聪明到有些投机取巧的方法有固有的缺陷,请参考下图:

183 带媒体信息
被叫放音,183 消息携带 SDP。

被叫侧如果对接了传统的 PSTN 网络,例如 VoIP 网关,很有可能直接返回 183 消息并携带被叫的媒体信息。传统的 PSTN 网络往往是被叫侧播放回铃音,并且也有一些被叫侧放音的业务(例如“彩铃”),此时这家 VoIP 运营商就有问题了。

由于它告诉给被叫的地址是“0.0.0.0”,因此被叫振铃音(或者业务音)就无法传达到主叫侧。VoIP 运营商可以向被叫发送 UPDATE 消息来传递自己的真实媒体信息,但被叫未必会支持 UPDATE 消息,这个是扩展消息,不是所有的 SIP 设备都必须支持。而且 PSTN 网络往往会要求对 18x 消息用 PRACK 流程确认,因此即便支持 UPDATE 消息,这个特殊流程实际也急剧放大了被叫侧振铃阶段流程的复杂度。

这也就是我们的泰国朋友遇到的问题。

解决方式是在 VoIP 运营商与 PSTN 网络之间架设 miniSIPServer:

(1)miniSIPServer 与 VoIP 之间建立完全应答的呼叫通道;

(2)miniSIPServer 与 PSTN 之间维持正常的呼叫流程;

(3)miniSIPServer 判断被叫侧是否自己放回铃音(或者业务音),如果(a)被叫没有放音,则 miniSIPServer 主动给 VoIP 运营商放回铃音(或者呼叫等待音),而如果(b)被叫有放音,miniSIPServer 则直接建立两边的通道,让主叫直接听被叫的放音。

巴菲特致股东的信(2021,中英文版)

巴菲特致股东的信(2021,中英文版)

巴菲特最新的致股东的信,虽然是2022年写的信,但是内容是总结伯克希尔2021年的年度表现,在伯克希尔官网上也是标记为2021,因此本文的标题也跟随标记为2021年的信(以往是按发表时的年份来标记)。

同时,将巴菲特的信从1977-2021年归纳、汇编到一个文档中,有一些排版上的调整,方便阅读、检索、和学习。

单独翻译了2021年度的信,这两年的信越来越短了,大概很多重复的内容都移到年报中去了。另外一个原因可能是老人家年岁也大了,写信确实也耗时耗力。

最后说明:(1)欢迎转载;(2)转载时请标明来源;(3)未经许可,不得用于任何商业应用。

  • 2021年的信,英文原版;[下载]
  • 1977 – 2021年的信,英文汇编;[下载]
  • 2021年的信,中文版。[下载]
  • 如果您发现翻译问题,请 email 至:Z2lsc29ueWlAbXNuLmNvbQ== 非常感谢!
没人比微博更懂搏击俱乐部

没人比微博更懂搏击俱乐部

腾讯最近播放的版本最终结局是坏人被逮捕、主角送进精神病院治疗;据说央视六的版本还是原电影的结尾。我觉得腾讯和原电影的结尾都不错,都留下了很多的思考空间,但让人觉得不可思议的是,微博一群人疯狂攻击腾讯的版本,并以此延伸出各种对社会的冷嘲热讽。

自从微博太君们 diss 北野武不懂日本之后,我就很怀疑这群人的真实水平。但是谁知道呢,也许微博太君们更懂搏击俱乐部? 毕竟现在连J.K.罗琳都不配理解《哈利·波特》了。

然后在观网看到一篇报道(原文链接)里面给出了不同的意见,大概就是原著作者认为中国(实为腾讯)电影的改编比美国版电影更接近原著的表达。

由于观网的报道没有给出原文的链接,因此上网找了找,大概是《好莱坞报道》的一篇文章(原文链接)“‘Fight Club’ Author Chuck Palahniuk Says China’s Censored Ending Is Actually Truer to His Vision”。

这篇英文报道中,有几点是很明确的:

The author later gave an interview to TMZ in which he pointed out that the altered Chinese ending is actually somewhat closer to how his book concluded.

Palahniuk 确实认为腾讯的版本更接近(somewhat)他原著的表达,尽管原因和出发点不同。

“The irony is that the way the Chinese have changed it is they’ve aligned the ending almost exactly with the ending of the book, as opposed to Fincher’s ending, which was the more spectacular visual ending,” he said. “So in a way, the Chinese brought the movie back to the book a little bit.”

Palahniuk 认为美国电影的结尾“spectacular”,比较壮观、场面比较大,而中国(腾讯)的结尾稍稍接近一点(a little bit)他的原著。从作者这个描述看,似乎对两个版本的修改都不满意。

微博太君们最喜欢引用的是 Palahniuk 在推特上的一句话,该报道开篇也有提及:

Have You Seen This Sh*t? This is SUPER wonderful! Everyone gets a happy ending in China!

微博太君们认为原书作者把腾讯版本看作是 Sh*t,篡改了美国版本的内涵和精神。真是这样吗?我们再看看报道中 Palahniuk 自己是怎么说的:

What I find really interesting is that my books are heavily banned throughout the U.S.,

A lot of my overseas publishers have edited the novel so the novel ends the way the movie ends,” he said. “So I’ve been dealing with this kind of revision for like 25 years

可以很明显看出,在 Palahniuk 看来,所有这些改编(包括各地出版社的各种修改)其实都违背他的本意(无论是美国版本,还是腾讯版本),对他而言都是Sh*t,因此不存在美国狗屎就比腾讯狗屎更有内涵,或者腾讯狗屎就比美国狗屎更合理。这点完全可以理解,每位珍视自己作品的作家都不希望别人随意更改自己的作品,就像我这样的码农也不希望别人修改我的代码一样。

单就两坨狗屎而言,美国那坨狗屎的结尾真如微博太君们说的那么发人深省么?把楼炸掉能说明什么,解决问题了么? 腾讯这坨狗屎的结局是若干年后从精神病院治愈出院了,倒是可以想想真的“治愈”了么? 从这个角度看,腾讯这个结局似乎从另一个角度表达了人对社会的无奈和屈从。

当然,最后还是微博太君们说了算,夹有夹规嘛。

Debian (bookworm) + php8.1

Debian (bookworm) + php8.1

更新了一下软件库,发现 php 版本升级到 php8.1。不过糟糕的是,升级程序直接卸载了以前的 php7 版本,然后又没有安装 apache2 新的 php8.1 模块,导致 apache2 没有解析和运行 php 文件。

解决方式也简单,重使能模块即可。注意,该命令要用 sudo 权限运行。

sudo a2enmod php8.1

以前升级 Debian 似乎没有遇到这个问题,默认应该就安装新的模块版本,或者保留原有的版本。不知道是不是这个环境的 Debian 是 sid 版本的原因?

2021年读书列表

2021年读书列表

全年看书不多,尤其是最近业余时间都花在研究投资方面,其他杂书都是囫囵吞枣:

巴菲特之道
巴菲特的信(1977-2000)
段永平投资问答录
费雪论成长股获利

查理·芒格传
朱自清散文选
傅雷家书
冯唐:有本事
人类群星闪耀时
蔡澜旅行食记
银河帝国 – 基地七部曲
银河帝国 – 机器人五部曲

现代操作系统原理与实现

openEuler 的苦难体验

openEuler 的苦难体验

下午忙完工作、又临近周末,想着抽点时间体验一下 openEuler 系统,毕竟这是华为隆重推出、并且捐赠的系统,据说会成为国内各大系统的上游版本,有点类似 Debian 的意思。简单查了点资料,openEuler 大概是走 CentOS 或者 RHEL 的路子,着重在企业级系统的开发和部署上,听上去似乎很合我的胃口,我在 Debian 上也主要是开发企业用的软件(比如 miniSIPServer 软件 ^_^)。

从网上下载了 ISO 安装包,名字比较古怪,openEuler-20.03-LTS-SP2。从字面意思大概是 20.03 版本的第二个迭代版本,这个版本是长期支持版本。又顺手查了一下对应的生命周期,“长期”是指5年。这个5年是从20年03月开始算起,不是从SP2 发布开始算起。之所以觉得名字古怪,从网站的内容看,还以为需要下载三个版本,如下图。似乎应该先安装 20.03 LTS,然后安装 SP1,然后安装 SP2,但是看了一下安装包大小,没可能一个补丁那么大啊,这是学习 Windows 的命名方式? 事实证明,直接下载、安装 SP2 就可以了。

openEuler 下载页面
openEuler 下载页面

下载 iso 包中断了几次,显然是我的 300M 光纤宽带不够给力。转到阿里云的镜像站点下载,同样在中断几次之后,终于下载成功。

手头上没有实机,因此只能麻烦 openEuler 在 VirtualBox 中先凑合一下了。

第一次安装……失败。安装界面的按钮居然是在左上角!我一直按照以往的经验在右下角找“下一步”按钮,以为是 VirtualBox 的原因导致无法显示按钮。愤怒地升级 VirtualBox 后,重新安装,终于无意中找到了左上角的按钮……对不起,VirtualBox,错怪你了。

第二次安装……失败。安装倒是顺利完成,进入黑暗的命令行界面,然后……网络不通!难道要自己从命令行配置网卡、路由?我只是 Linux 用户,不是专家,书到用时方恨少。一定是哪出错了,以前安装别的发布版本(我的意思是 Debian 或者 Ubuntu),从来没出现这么奇怪的要求。上网查了安装指导文档(请点击此处),果然是自己没注意安装界面中开启网络。

第三次安装……失败。同样顺利地完成安装,进入无比黑暗的命令行界面,然后……网络还是不通!重新看文档,怪自己太粗心。原来安装时开启网络,只是在安装时有效,不等于安装后自动开启网络(真的,这个说起来有点挠头),需要在安装时,进入网络属性配置里,选定“自动以优先级连接”,然而这个项在界面里是英文 Connect automatically with priority(中英文混杂,很有港味、很 fashion!):

openEuler 网络配置
openEuler 网络配置项

第四次安装……失败。精心配置好网络,选中必要的选项,顺利进入依然黑暗的命令行界面,然后按照文档的指导(请点击此处)安装 XFCE,太棒了!重启后看到了久违的图形界面,然后登录……然后登录……然后登录……(很不幸,每次输入用户密码后,闪一下,又回到输密码的界面)

第五次安装……失败一半。淡定地配置好网络,进入暗黑无界的命令行界面,然后按照文档的指导(请点击此处)安装 DDE 界面。不愧是国产精品,非常顺利,这次可以登录,也可以使用各种软件了!只是有个小小的遗憾,系统没有自动调整界面大小,因此整个图形界面小小的。这个我懂,安装 VirtualBox 增强功能就可以了。将 VirtualBox 增强功能的虚拟光盘手工 mount 到目录后(Debian 以及后续尝试的 CentOS 都可以自动mount),运行编译,很快就……失败了!查了一下log,是调用 access_ok 函数时出错,从网络上检索的信息看,大概是 openEuler 合并了 5.x 内核的代码,但是自身内核版本号还是 4.x,企业级 Linux 玩得这么骚气吗? CentOS/RHEL 也这样? 要搞定这个问题,需要改源码……我只是想安装 openEuler 体验一下……

但是 DDE 确实值得一提!速度非常快,如果不是上述界面过小的原因,那就是 DDE 这两年进步确实很大。以前曾经体验过 Deepin 的版本,当时感觉界面还比较混乱、速度也不太让人满意,这次大有改观。唯一奇怪的是,我觉得“高效模式”比“时尚模式”更好看,这大概是我自己杀马特审美的错。

五次安装之后,窗外的天空已经黑得像个命令行界面,我沉痛地决定放弃了,下一个 LTS 版本出来后再体验吧。

2021-11-27 更新:

考虑到 openEuler 的令人迷惑的行为,是否是目前 RHEL/CentOS 系列的常态?下载了 CentOS stream 8(也是个令人迷惑的版本)安装,对比 openEuler 确实大部分都相同,当然也有小部分不一样:

(1)安装按钮都在左上角。看来这是新一代安装工具的标配了。

(2)网络配置默认都没有打开,都需要手工打开,而且要修改配置中的项才能在安装后自动启动网络。但 CentOS 的完成度明显更高,至少界面语言是统一的,没出现混杂的情况。

(3)CentOS 的软件设置更丰富,实际上丰富很多。安装完成后,可以直接进入图形界面。

CentOS 软件选择
CentOS 软件选择

(4)安装完成后都无法安装 VirtualBox 增强功能。CentOS 的 log 显示的是另一个与“map_vm_area”函数相关的错误。简单检索后得出相同的结论:也是 merge 了 5.x 内核的内容,但是内部版本号还是停留在 4.x。 企业级 Linux 玩得这么骚气,有点令人意外,这和掩耳盗铃有什么区别?

2021-11-27 再次更新:

由于 openEuler 和 CentOS Stream 都遇到了无法正常编译 VitualBox 增强工具的情况,都需要修改增强工具的源码才能编译成功,因此思考 VirtualBox 自己是不是会解决这个问题? 查了一下 changelog,在 VirtualBox 6.1.20 版本的发布日志中明确提到:

Linux Guest Additions: Fixed kernel module build for RHEL 8.4 beta and CentOS Stream

看起来的确是解决了问题,因此重新下载最新的 VirtualBox V6.1.30,果然成功了! 如下图示:

CentOS Stream 完全展开
CentOS Stream 完全展开

解决完CentOS Stream的问题后,猜测 openEuler 是否也可以一起解决了? 于是第六次安装 openEuler,然后……失败了。看来 VirtualBox 并没有解决 access_ok 函数的问题,估计 openEuler 相关人员也没有提交类似的问题给 VirtualBox ……

Apache 日志分析工具:goaccess

Apache 日志分析工具:goaccess

如果统计、分析网站日常的访问情况,无疑优选 Google Analytics。不过由于众所周知的原因,访问稍显麻烦,而且有时候希望了解更细节一些的东西,因此最好直接检查 Apache 的日志来获取相关信息。日常维护时,同步检查日志也有助于尽早发现问题。

推荐采用一个非常小巧的工具:goaccess,这个工具基本不依赖第三方库(似乎有一个地理位置信息的库),Debian 系统自带,使用也非常简单,呈现的信息足够丰富、有序。

使用以下命令安装:

sudo apt install goaccess

可以直接读取 Apache 的日志文件进行分析,例如:

goaccess /var/log/apache2/access.log

Apache 的历史日志都保存为 .gz 格式,可以直接重定位方式进行分析,例如:

zcat -f /var/log/apache2/access.log*.gz | goaccess --log-format=COMBINED

goaccess 还有其他一些很棒的功能,例如实时显示、html格式等,有兴趣的话可以进一步了解。日常维护则上述命令足以。