肇鑫的日常博客

肇鑫 / Owen Zhao

独立开发者,主要开发 iOS、watchOS、macOS 应用。

目前在维护 SleepTapRooster Time,以及 Markdown Writer 相关工具。

最新文章

印度人不文明,可能真不是穷的问题

随笔

一桩桩新闻

最近一段时间,印度人在世界各地做出不文明行为的新闻,频传。

加拿大安大略省,世界最长的淡水沙滩上,一位居民多次曝光印度游客在沙滩上挖坑大便,空气中弥漫着恶臭,大肠杆菌超标严重到海滩被迫关闭;广东某酒店大堂,印度旅客刚下飞机不办入住,横七竖八躺在沙发上蹭空调,鼾声四起,临走留下一地咖喱味;云南香格里拉普达措外围,5 名印度游客在溪流里打沐浴露洗澡,下游 300 米就是 21 户人家的取水口;今年 2 月,泰国芭堤雅海滩,近百名印度游客铺个垫子就地通铺,垃圾遍地、啤酒瓶乱扔;庐山五老峰景区,3 名印度男性无视"禁止下水"警示牌在水源里搓澡、用肥皂。这一个个事件密集得让人记不清时间顺序。

我一开始以为是"穷"

中国有句古话,叫"仓禀实而知礼仪"。所以印度人之所以不文明,原因其实很简单——穷。穷则思变都不够格,哪还有心思讲什么体面?你让一个还在为下一顿饭发愁的人去排队、去守规矩,那是为难他。

但后来我看到一件事,把我之前的判断推翻了。

有个在国外做房东的中国人,租客是一对印度夫妻。老公是律师,老婆是医生,都是正经的高知高薪职业,在印度当地是中产,放在国外同样算富裕阶层。房子是长租,押金也交了,前三个月房租正常付着,看着挺正常。结果到了第四个月开始赖账,找各种理由拖着不付,沟通几次之后房东发现收账非常困难。

你就说,这跟穷有什么关系?

这让我重新想:印度人不文明,恐怕不是穷这一个变量能解释得通的。

14 亿人,凑合就是"理性"

那到底是什么?

我又琢磨了一下,发现可能是人太多。

印度 14 亿多人,这是什么概念?2023 年已经超过中国成了全球第一人口大国,整个欧洲加起来才 7 亿出头,连它一半都不到。人口密度摆在那里,资源就那么多,公共空间就那么大。一个社会里如果人人讲文明讲秩序,反而吃亏——你排队别人插队,你守规矩别人耍赖,文明的成本就全转嫁到守规矩的人身上。久而久之,"凑合就行"的逻辑就变成了全民共识。

我甚至觉得,这都不是个人选择,是被人口结构逼出来的"理性"。

凑合的代价:两个真实的例子

说到"凑合就行",这个事其实挺值得展开聊聊的。我在一些关于印度社会的讨论里看到过一个说法,叫 Jugaad,翻译过来就是"凑合、变通、将就"。资源不够?凑合。流程不通?变就。规则死了?将就。这套逻辑在印度国内是行得通的,因为它本来就是为资源极度紧张的环境设计的——你不凑合就过不去。但这套逻辑一旦被原样照搬到国外,就变成了不讲规则、不守契约的代名词。

我给你举两个真实的例子。

第一个是空调。今年 5 月 3 日凌晨,德里一处民居的空调发生爆燃引发大火,9 人死亡,其中有一名 1 岁幼儿;几天后,印度竞争委员会首任主席、80 岁的退休高官丹内德拉·库马尔在自己豪宅中被空调爆炸夺去生命,他儿子也受伤;6 月 5 日,古吉拉特邦一名女警员在家休息时被空调爆炸烧死。库马尔这个案例尤其值得多说一句——他装的可不是什么杂牌,而是进口品牌正规空调,原装制冷剂按说不该出问题。问题就出在维护上:他出事之前刚请过印度本地维修工上门保养,维护过程中大概率被悄悄换上了最便宜的 R152A 之类的可燃制冷剂,而非原装。印度舆论原本用"炸的都是劣质杂牌、穷人不该贪便宜"来安慰自己,这下连这层心理防线也守不住了——不是机器本身有问题,是从生产到保养的整个链条都不安全。在印度国内,维修工省钱,用户图便宜,"凑合"一下大家都方便,结果凑合出来的是人命。

更要命的是政策环境还在推一把。中国这边其实早就在用 R32 和 R290(丙烷)这类更安全、GWP 更低的制冷剂了,R290 被联合国机构认定为家用空调未来唯一合规的环保替代方案,印度本土厂商 Godrej 2012 年起也跟进卖 R290 空调——本来这事有解的。但中印关系 2020 年之后急转直下,印度对中国产品设了一堆反倾销税和进口配额:R134a 制冷剂 2016 年起每公斤 1.22 美元反倾销税,2021 年 HFC 混合制冷剂再追加每吨 1500-2200 美元,2026 年 5 月最新一轮规定,空调用压缩机进口量直接被压到 2025 年的 30%,超过这个限额就要征高额关税。一来二去,便宜合规的中国制冷剂进不来,印度本国供给又不够用,缺口就由 R152A 之类的可燃替代品来填。维修工图省钱用,用户图便宜接受,"凑合"一下,安全就让位了。

第二个是电。印度每年有 27% 的发电量被偷走,年损失 162 亿美元,全球偷电第一,是第二名巴西、第三名俄罗斯的总和还多。印度北部的工业重镇坎普尔,300 万人口里 220 万在偷电,偷电的人被当地人奉为"卡地亚巴兹"——意思是"偷电高手"。这群人徒手爬上高压线杆给穷人搭免费电线,时不时电死一个,于是有了那句黑色幽默:"一流电工之所以是一流,是因为二三流的都已经被电死了。"他们甚至被拍成了纪录片并获得国际奖项。当电力公司派工作组下乡催电费时,整个村的人都团结起来把工作组赶了出去。你守规矩就要多付钱来补贴那些偷电的人,偷电的人不仅不被鄙视,反倒是村里的"罗宾汉"——大家都偷导致整体都输,但每个人都觉得自己占了便宜。

你看,凑合的成本其实一点都不低,凑合凑出来的事故和死亡数字非常惊人。但这套逻辑一旦变成全民共识,谁要是正经做、谁要是守规矩,谁就成了冤大头。

在印度国内,凑合是被逼出来的活法;在海外,凑合就成了不文明。

也许这就是"奴性"

然后我又想到一个更深的问题。

有人说印度人之所以普遍"凑合就行",可能是因为骨子里有一种奴性。

这话听着不舒服,想必很多印度朋友看到了要跳脚。但你细想一下,其实有几分道理。我们知道,在奴隶制社会,奴隶的命是奴隶主的,奴隶没有自己的财产、没有自己的未来,所以他要么战斗到死,要么消极怠工——悄悄破坏农具、磨洋工、表面服从内心抗拒。这两种策略都是为了一个目的:在不丢掉命的前提下,最大化自己的生存空间。

而印度人最为自豪的"非暴力不合作",你说它是奴隶的消极怠工呢,还是独立运动的智慧?我倾向认为,至少在精神底色上,这两种东西是相通的——都是面对强者时"不合作、不投入、不负责"的态度。你不参与我的体系,我也不为你建设任何东西,咱俩互不亏欠。

现在印度人虽然没有奴隶主了,但思维没换过来。我不去建设、不去负责、不去维护秩序,反正别人也管不着我,那我顺手占点便宜怎么了?这种想法往小了说叫偷奸耍滑,往大了说就是把所有公共秩序的维护成本,转嫁给守规矩的那一小撮人。

你想想,一个社会里人人这么想,这个社会还会有未来吗?

别再用奴隶的思维思考了

最后说一句可能得罪人的话。

如果你身边有印度朋友,真心建议转告他一句:别再用奴隶的思维思考了。奴隶想的是怎么在压迫下偷生,怎么在不合作中占便宜,怎么在"我穷我有理"的逻辑里找到心安。但奴隶不会有未来。一个奴隶,永远不会主动去建设一个比当下更好的世界,因为他从来不相信那个世界是属于他的。

而你如果真的想有未来,你就得把自己当成主人——不是别人的主人,是自己人生的主人。你得对自己的行为负责,对签过的合同负责,对身边的秩序负责,对你生活的那片土地负责。

这个道理,不分国界。

从大家指责微信使用SQLite想到的

技术

最近大家因为微信的存储有问题,从而上升到微信是否应该使用SQLite还是应该制造轮子。但其实焦点一直就错了。微信使用了SQLite,不代表它就没有制造轮子。还好我的年纪大,记忆也还不错,搜索了一下,找了证据。wcdb,这个就是微信开源的SQLite工具,至今还在维护。所以,说它没造轮子是不正确的。

这件事,其实让我想到的是其他的事情。随着AI辅助编程的出现,编程技能越来越被普通人所忽视,甚至上升到了不是程序员,编程反而更有优势这种奇谈怪论,逻辑是说非程序员不会收到懂编程的束缚,可以天马行空,所以更容易成功。这叫好比说不懂物理的人,可以不受到物理定律的束缚,所以可以天马行空,轻松超越光速。这可能吗?

不过AI的确把编程的门槛降低了。但是如果你的应用不是为了自用,而是为了卖掉。那就不是只自己满意就可以了。而是要知道用户想的是什么。用户的想法,在我看来,则是信誉的问题,同样的应用,如果是来至更值得信赖的来源,比如知名的开发,知名的大公司,那肯定比不知名的开发者或者不知名的小公司的产品更加容易成功。而开发者,则需要用时间和产品来证明,自己是值得信赖的。

程序员的困境,谈谈我对mole事件的看法

随笔

不知不觉也关注mole很久了。看着它从诞生,到收费,本来以为到了收费就已经告一段落了,没想到刚刚收费不久,就遇到所谓“抄袭”的问题。这里我要说一下,mole的作者认为是抄袭,但是新项目的作者不认为,所以我说是所谓“抄袭”。在我看来,这其实就是程序员面临的困境。在获得宣传与获得利益之间,如何平衡。

我们假设如果mole一直就是一个免费开源的项目,没有出现收费的图形界面的闭源应用。那么如果有人利用mole的命令行版,做了一个同样免费开源的图形界面的应用,并且在ReadMe里致敬mole,那mole的原作者会是什么态度?肯定是开心得不得了,会把对方的链接放在自己项目的简介吧。这不是我瞎说,因为很多只做核心框架或者命令行应用的项目,都是这么做的。

但为什么mole的原作者不仅没有感谢,反而反对对方呢?因为利益,因为他已经闭源了它的图形应用,并且收费了。当初他收费做这个的时候,我其实是有疑惑的。因为作者自己宣传他这个图形项目的时候,就说是源自mole,而且mole最大的优势就是开源之后,获得了上百个来自不同开发者的优化,所以这个开源很成功。我当时想,你收费了,那不就等于白拿上百个其他开发者的优化自己赚钱吗?不过我看到mole原作者的帖文,发现很多人都很开心地付费,并且他还向不少人免费送收费版的注册码,我觉得这个开发者也还算大气,既然用户都没说什么,也没看到有贡献者表示反对,那应该就是皆大欢喜。项目获得了发展,创始人赚到了钱,客户愿意付费,贡献者没反对,那我只是个旁观者,我又有什么资格置喙呢。甚至,同样作为一名开发者,我还挺羡慕的,觉得学到了,以后有机会我也应该像他学习,利用开源的机会扩大影响,然后利用影响力再开发闭源软件收费,这应该是一条可行的道路。

可没想到,又有事件发生了。昨天早上,我在X的推荐时间线上,不是我关注的时间线,看到了一个Burrow的应用介绍,简介说是Mole的图形版。我心里一惊,心想终于来了。因为mole的作者当初出闭源版的时候,我心里就隐隐觉得有些不妥,现在终于知道不妥在哪里了。因为你出闭源版,是因为mole的协议不反对,可既然你是闭源版,那别人也可以同样做闭源版,反正mole的协议不反对。因为如果单从法律上看,并不是只有mole的作者有权利这么做,谁都可以。而唯一束缚的,只是想不想,也许某些程序员,出于善意不会做,但是林子大了,什么鸟都有,早晚肯定会有人这么做的。而这次,不仅做了,而且不是闭源,是开源的。

所以mole的作者,只能从界面抄袭,和使用了它图形应用的名字上去反对,说人家界面抄袭,说人家用了它的应用名宣传自己,说人家在X上刻意宣传,导致它的图形界面的用户变少。但仔细想想,这些说法都站不住脚的。因为界面本身不受法律保护,Word的界面,Google Docs不是一样的吗?Photoshop的界面,Gimp一样在用。根据法庭的判例,界面,开发者可以雷同,因为这对用户有好处,不必二次学习。至于说应用对比,你看哪家AI出来之后不用同行对比?这简直就是行业惯例。至于说有了开源的,闭源的收费版会受到影响,这更上不了台面说了。本来就是会受到影响。这里面mole的原作者唯一占理的,就是开源版的作者不应该在ReadMe里说自己是它图形应用的替代。这一点开源作者在收到issue之后,也立刻删除了。

说到这里,我的立场大家想必也清楚了。法律上讲,大家谁都没错。道德上讲,大家半斤八两。一个是利用开源项目获得了影响力,也就是流量,但是这个流量是开源项目的,也就是属于大家的。的确,你可以选择闭源,但是你闭源了之后,fork版的选择开源,之前支持你的那些免费劳力,都会去新的开源版,毕竟,大家支持的是开源,而不是你的图形版。你的流量都是开源带来的,一旦选择闭源,你的项目就等于死了。所以,我认为无论如何mole的开发者是不会选择闭源的。因为那简直就是给对手送弹药。

最后,说说标题。我认为程序员这个职业,本身就具有两面性,即公益性以及赚钱的需要。作为一名程序员,想必很多人都是热爱编程的,甚至很多人都想过,如果自己吃穿不愁了,都愿意把自己的程序免费提供给大家,毕竟程序员的应用,用的人越多,越有成就感。可现实是,一旦这样,程序员自己的生活就会陷入困境。所以程序员的应用收费,面临的第一关,其实就是自己。这也是为什么好多程序员的应用,定价都特别低,不是不敢要高价,而是觉得和高价格相比,更希望自己的应用有更多的人使用。

所以,我相信mole作者一开始的开源也是真心的。他并不是一开始就策划好了要用开源吸引用户,然后利用闭源来赚钱,他只是一步步走到了那里。而另外一个开源的作者,也可能真的像他自己说的那样,是因为有额外的需求,才选择开发图形版。两个善良的程序员,之所以会产生冲突,就是因为其中一个因为生活需要赚钱。如果不是这样,他们两个原本也可以成为很好的朋友,还可能为对方的应用提交补丁呢。

静for佳音

随笔

我发现我在记忆人名的时候遇到了问题。比如演员雷佳音的名字我就记得很清楚,但是雷佳音的好友,同样是演员的郭京飞的名字,我就经常想不起来。我自己分析,首先是雷佳音外号叫大头,这我记得,其次他的名字佳音,静for佳音,是个段子。想起段子,我就想到雷佳音如果找一个配他的静,可以是,蔡文静。然后我就想,这个静for佳音有些不对啊。那里不对呢?我卡了很久,然后意识到,我脑海里的是for,只是一个发音,不是中文,原文应该是敬候佳音。突然有些大模型的思维方式了,你一旦学习了多门语言,那么思考就可能不会是单语言的思维方式了,不同的语言之间会互相干扰。

AI是水电煤?

随笔

有人说AI就是新时代的水电煤。可什么是水电煤?我们真的了解吗?水电煤,就目前大多数人来说,指的是自来水,交流电和天然气(煤气)。而在我们国家,这些都属于基础设施,是由国有企业垄断经营的。

如果,说AI就是新时代的水电煤,那么至少,再国有企业垄断经营这一点上,AI不能成立。其次,就是假设如果我们现在离开了水电煤的任何一项,我们都会觉得非常不方便。但是如果是现在离开了AI,怎么说呢?至少我觉得无所谓,离开AI我还是会古法编程,古法调试,手动翻译,手动上架应用,好像也没啥不同。所以,AI在重要性上,其实也远远不如水电煤。

结论:AI不是水电煤。

大模型其实不具备思考功能,AGI是一场精心的骗局

随笔

全世界都被骗了,AGI只是一个传说,大模型天生就不具备思考的功能,目前我们经历的是一场席卷全球的营销事件,是少数精英,通过资本,通过宣传,裹挟大众的一场巨大的泡沫。最终的结果就是一次财富的重新分配,但是最终AGI也不会到来。

为什么我说大模型其实不具备思考功能?

因为连人类自己都没有搞清楚思考是如何进行的,又如何能发明出会思考的机器呢?与思考最接近的学科是脑学科,脑学科目前只能做到定义什么是思考,并且通过仪器检测到人类在思考时大脑哪些区域处于活动状态,以及活动的强弱,至于它们之间交互的原理,目前都还不得而知。而大模型本身的思考,只是对于人类思考的部分模拟,它的本质还是文本语言推理。

什么是思考?什么是自动化?

对于普通人来说,自己给大模型下达了任务,大模型完成了,就认为大模型思考了。但是事实真的如此吗?一开始的时候,我们除了下达任务,还需要说出具体的步骤,特别是,如果你具体的步骤说得越准确,大模型给出的结果就会越好。这显然和思考不沾边吧。如果我们只是简单的说完成某项任务,用最佳的方式去处理,然后大模型就能做到和我们细致描述步骤的指令达到相同的效果,那才是大模型会思考。实际上,你所说的最佳方式,大模型并不能像你说的详细步骤的描述一样去理解,因此,大模型并没有在思考,它只是自动化。

实际上,大模型的运行是这样,对于所有的问题,它内部有一套提示模板,然后它配合你所说的问题,整合在一起,作为模板,然后进行推理,并执行。也就是说,它就说按照模版推理,这其实就是自动化。

大模型不能思考,那大模型还重要吗?

重要。虽然大模型不能思考,但是自动化也是很有用处的。同样可以节省我们的时间。但是问题就是,同样的一个大模型,它所发挥出来的性能,受限于使用的人自身的水平。因为大模型的所掌握的知识,你不去问它,它是不会开启的,这也就是为什么大模型在数学家的手里,能够解决之前未解决的数学难题。但是在你我手里,解决一些普通的题目的时候,都很费劲。因为你我缺乏描述题目所需要具备的知识。而只是泛泛地描述,大模型并不能精准的了解题目本身。连题目本身都不了解,那么想要解决就更困难了。

战术手册的重要性

这让我想起了战术手册这种东西。所谓战术手册,就是将做某件事的步骤拆解,给出最佳的步骤以及可能遇到问题的解决方案。它的好处是使用的人只需要根据目前遇到的问题,在战术手册中寻找相应的问题,找到了之后,就不必自己思考,只需要按照战术手册上的1、2、3、4进行套用,然后根据结果选择分支,就能够获得最佳结果。这些结果虽然不一定是和思考之后获取的最佳结果完全相同,但是却接近。这样,一个普通人有了战术手册,就仿佛成为了一名智者。但实际上,普通人就是普通人,智者就是智者。重要的是战术手册,和编写战术手册的智者。

这和如今的大模型很像,普通人如果拿到大模型的战术手册,也可以接近智者。但是智者就是智者,有了大模型,普通人和智者的差距并没有缩小,反而更大了。普通人最多能从网上找到一些智者发布的零散的战术手册的一部分,但不知道是不是真的有用,甚至不知道是不是已经过期了。

发现了一个App Store Connect的一个bug

技术

Xcode Cloud如果归档设置了无,然后后续设置为TestFlight。这样打包的应用是不能发布到商店的。但是现在App Store Connect的分发页却允许选择这个的打包的应用,不过问题来了,选完之后,点保存,会直接出现感叹号,没有办法保存,也就没法审核。

正确的方式,是归档时设置为App Store Connect,然后后续选择TestFlight。然后保存,重新打包就可以了。

手动处理macOS睡眠后又迅速被唤醒的问题

技术

最近遇到了一个问题,我的Mac mini m4在睡眠之后,很快就会再次唤醒。有时刚刚睡眠就唤醒,有时睡眠不到1分钟就会唤醒。

现在已经是AI的时代了。我于是就询问AI怎么处理。AI给我了几个命令,让我看输出,我说没输出,它有给我另外一组命令,我将输出复制给它。AI说是我的蓝牙键盘造成的,睡眠之后它还在发出信号。我按照它的提示,将键盘从蓝牙改成有线,结果忽好忽坏,效果不如意。

AI还提了一个很可笑的建议,它让我把系统的蓝牙关了,然后再睡眠。这还真是一个头疼医头的建议,因为我的键盘鼠标都是蓝牙的,禁用了,就开不了了。

不过我也的确同意大概率是蓝牙的问题,可问题是我有三个蓝牙设备。苹果触控板、蓝牙键盘、蓝牙鼠标。我还是很相信苹果的,所以先把触控板排除了。然后我关了键盘,发现还是会唤醒。看来大概率就是蓝牙鼠标了。我关了鼠标,只留键盘和触控板。这下没问题了。试了几次,始终都没问题。

我在回想,是不是鼠标的固件升级造成的,因为鼠标的固件更新还挺频繁的。我打开了蓝牙鼠标的web驱动页,不过我还是犹豫了。

我又想了想,可能鼠标移动导致的。因为这两天我看在线视频的时候,选择全屏模式时,经常会遇到进度条忽隐忽现的问题。这个问题就是鼠标放在那里没人碰,也还在抖动。高灵敏的鼠标很容易遇到这个问题。而这个问题大概率是因为鼠标垫脏了的缘故。

我用湿纸巾清洁了鼠标垫。故障排除。

总结

AI提供的不一定对。只能作为参考。所以手动古法处理还是必要的。

如果是Windows,其实直接禁用鼠标移动唤醒就可以了,只保留案件唤醒。但是macOS没有类似的功能,所以只能采用其它的方式。