肇鑫的日常博客

肇鑫 / Owen Zhao

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

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

最新文章

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

技术

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

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

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

发现了一个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没有类似的功能,所以只能采用其它的方式。

不要轻视了Google Play的开发者账户过期,教训很深刻

技术

很少有人知道,我最初其实学习的是安卓开发。大概10几年前,我就已经有了第一个上架的安卓应用了。原因也很简单,当时编程还只是我的一个爱好,而我当时手里有一部安卓手机。不过我只上架了一个类似番茄钟的应用,而在那时,Google Play中国开发者只能上架免费应用,而那时好巧不巧,我居然在微博抽奖抽中了一台电信版的iPhone 5(京东的活动),于是我变成了现在的iOS/macOS开发者。

说回到Google Play。自打我成为了苹果的开发者,安卓那边我就彻底放下了。直到到了2024年,Goolge Play改了政策,给我发了邮件,说我如果一直不更新应用,也不开发新的应用,那账户就会被取消。当时,AI还没有流行,我也没有转回安卓的计划,于是我就没搭理。于是时间到了,这个开发者账户就被Google Play取消了。

当时我的想法很简单。因为我当初注册Google Play开发者的时候没花钱,我以为以后也就是重新激活一下就可以了。

今年,随着AI的流行,我发现重新回到安卓也没有那么困难。不过我应用开发得差不多,打算上架,才发现一切和我想的不一样。

首先,根据Google的政策,这个开发者账户的取消是永久的,不是暂时的。因此,并不能像邮件帐户那样重新激活。只能使用一个新的账户,重新注册。此外,当年注册账户不要钱,现在注册Google Play,需要交25美元的一次性费用。

钱交了,新注册的账户也能用了。我以为这就完了。其实还没完。

这两天我提交了应用到Google Play内测,然后添加了我的常用Google账户,也就是之前的那个被取消的Google Play的开发者账户作为测试账户。结果在运行应用的时候,这个应用无法获得应用内购买的信息。Google Play直接返回该“设备或者账户不允许进行支付”。

getOfferings error: code=PurchaseNotAllowedError, message=The device or user is not allowed to make the purchase.

我一开始以为是之前提交的信用卡过期了缘故。于是添加了新卡。还是不行。而且我注意到。我的账户在登录时,在Google Play上,连付费的排行榜都看不了。而另一个账户就可以。所以,不是账户所属的原因,而就是这个账户不行。

可奇怪的是,我在Google Play里选择切换账户,切换到可以的账户,结果也还是获取不了正确的IAP信息。

我问豆包,因为我觉得这个问题大概中国的用户遇到的更多一些。豆包和我说,需要在Google的应用里完全注销掉有问题的账户才可以。于是我尝试在设置里,将Google账户里的这个有问题的账户删掉,只保留后注册的那个。这次终于可以了。

可这样一来,我常用的Gmail就无法使用这个邮箱了。于是用小米系统自带的邮件应用登录这个Gmail。

总结

一旦你被Google Play取消了某个账户的开发者资格。你会得到以下损失:

  1. 此账户永久地被Google Play拉黑,不能再次注册成为开发者。
  2. 重新注册Google Play开发者需要一个新的账户,以及支持25美元的一次性费用。
  3. 被拉黑的账户,不只是不能作为Google Play的开发者,而且他在Google Play上也会有限制,不能够支付,只能使用免费应用,甚至也不能作为测试账户,因为他无法获得收费的任何信息。

以上就是我遇到的教训。大家遇到了最好还是随便开发个应用,上传一下。

CLI可能不会再过渡到GUI了

技术

Claude Code火了,但是有人批评它,认为它使用CLI是一种倒退,认为早晚会像计算机的发展那样,从命令行的DOS,过渡到图形的Windows。

不是所有的历史都会重复。是否会从命令行过渡到图形,取决于用户需求。图形相比于命令行,能够提供更多的信息,更好的排版,其实也就是提供更多的按钮。图形界面发明了菜单,包括右键菜单,上下文菜单,工具条,状态栏,弹窗等等。这一切,都是为了更方便用户使用。不过,从用户角度看,尤其是对于一个新手来说,他面对图形界面那么多的可选按钮和选项,是需要很高的学习成本的。

站在如今的角度来看,其实图形界面大部分的空间都浪费掉了。因为人们同一时间会使用的按钮,只是显示出来的一小部分,因此大部分显示的按钮在大部分时间都是浪费的。之所以必须显示,是因为开发者不知道用户想要用哪一个。图形界面的开发者也知道这一点,所以他们采取了办法,发明了类似智能工具条和上下文菜单这种工具。

如今又了AI,一切又有所不同了。用户不仅不再需要找到需要按钮,甚至用户也根本不用学习,用户只需要将自己需要的效果告诉AI,而AI则会主动选择方式执行。AI可以选择去点击按钮,也可以选择调用适当的程序,甚至如果没有适当的程序,AI甚至可能会自己临时写一个。而用户,完全不在意AI是如何做的,用户只在意最终自己拿到的结果是否符合自己的需求。站在这个角度,用户只需要能跟AI沟通就可以了。而CLI完全就符合,根本没有过渡到GUI的必要。因为如今,用户已经有亲子完成任务,变成了下达命令,验收结果。只有在对于AI不满意的情况下,才会亲自下场。反倒是AI输出的结果,会需要是精彩纷呈的。它可以输出ppt,输出视频,输出网页。而用户只需要能下达命令就可以了。

大模型未来发展方向

技术

总有人因为利益,要么鼓吹大模型公司是未来的方向,要么说硬件公司是未来的方向。并认为token需求会越来越大,甚至是无限大。因此,最终的限制其实是电力,所以电力股应该大涨,云云。但是如果我们通过计算机发展的历史来看这件事,比如从计算机的初代,到现在最快的计算机,算力增长了多少倍。来类比大模型的算力,能否得出一些结论。比如,未来仅从算力角度看,是否个人设备也能具备如今需要访问在线大模型才能获得的算力。这个趋势需要在哪一年能实现。给出你的计算依据。

是的,从计算机发展的历史类比来看,个人设备(尤其是笔记本,手机稍慢)大概率能在2030-2035年间实现本地运行“今天前沿大模型等效性能”(即实时、高质量推理,20+ token/s + 长上下文)。但这并非“必然铁律”,而是取决于硬件增长能否维持历史平均节奏(存在放缓风险),且仅针对“今日模型规模”,未来前沿模型若继续膨胀则时间可能推迟。电力不会是“无限token”的绝对硬瓶颈,但效率提升已放缓,数据中心总耗电仍会显著增长。 以下是基于最新查核(2026年2月数据)修正的详细依据。

1. 计算机算力历史增长:指数级下沉,但长期平均而非全程稳定

  • 起点:1946年 ENIAC ≈400–500 FLOPS。
  • 现在(2026年):El Capitan 最新TOP500验证1.809 exaFLOPS(理论峰值约2.88 exaFLOPS)。
  • 增长倍数:约3.6×10¹⁵倍(80年内),log₂后≈51-52次翻倍,长期平均每1.55年翻倍
  • 个人设备同样遵循:1981年早期PC≈10⁵ FLOPS;2026年高端手机NPU≈35-60 TOPS(AI专用),笔记本RTX 50系列旗舰(如5090)营销AI TOPS峰值达3352(中端1000-1800区间)。

历史结论:算力反复从“房间大小主机”下沉到“个人设备”,让昔日超级任务本地化。大模型不会例外,但需注意近十年通用CPU已放缓,AI专用硬件仍是主要驱动力。

2. 当前大模型算力需求基准(以GPT-4类/70B Llama为例)

  • 推理单token:密集模型理论≈2×参数量(70B≈140 GFLOPs/token;原GPT-4类报道280B活跃参数时≈560 GFLOPs/token)。实际MoE稀疏 + 量化(4-bit/更低)后有效值大幅降低。
  • 今天“需在线”的门槛:主要是内存、带宽、功耗与并发服务,而单用户实时推理(20-50 token/s)理论仅需≈10¹³-10¹⁴ FLOPS(优化后)。
  • 设备现状:2026年高端笔记本已可本地高效跑70B+量化模型(数十token/s);手机仍主要跑1-13B或重度量化版,70B+仍慢或需云端。

3. 外推计算:何时个人设备追上“今天的前沿门槛”

固定“今日模型需求”,仅看硬件增长:

  • 手机:当前35-60 TOPS → 目标≈800-1500有效AI TOPS(考虑利用率、带宽、长上下文)。需≈15-25倍 → 4-5次翻倍。
    • 按历史平均1.55年/次:≈6-8年 → 2032-2034年
    • 保守按2-2.3年/次(Koomey/Moore放缓实测):≈9-11年 → 2035年后
  • 笔记本:已更接近(RTX 50系列有效推理能力已覆盖今日70B需求),主流中高端2027-2030年即可轻松本地化。

内存现实修正(关键调整):70B 4-bit需≈35GB参数内存(+KV cache更多)。2026年手机主流RAM 8-16GB(高配/游戏机可达24GB),仍不足——需2-3bit量化、模型分割或混合云端。笔记本64GB+已无压力。

功耗与Koomey定律:每kWh算力仍指数提升,但最新研究显示2008-2023已放缓至每2.29-2.6年翻倍。个人设备固定功耗(手机5-10W)下算力仍会持续上升,边缘计算反而总电更省(无传输损耗)。电力不是“无限token”的硬天花板,但AI驱动的数据中心总耗电已显著增长。

4. 为什么“token无限→电力股大涨”逻辑不完全成立(历史+现实视角)

历史反复证明供给端(硬件+算法优化)指数增长更快,下沉到个人。过去“必须大型机”的任务早已本地化。但关键区分:个人设备会大概率接管今天的前沿等效,而2035年的前沿模型可能仍需云端(若参数/上下文继续膨胀)。量化、MoE、专用NPU正加速这一过程,开源与厂商(如Apple、Qualcomm、NVIDIA)全力推on-device AI,实际进度常超保守预测。

不确定性与风险(新增强调)

  • 模型规模若超指数增长,时间推迟2-5年。
  • 晶体管缩放、功耗墙、DRAM短缺可能让翻倍周期延长至2+年。
  • Koomey放缓已验证,电力效率提升仍在,但速度慢于历史。
  • 我的计算基于TOP500最新数据、NVIDIA官方规格、2026手机RAM实测与Koomey近期研究,未依赖厂商宣传。

最终结论:历史强烈支持个人设备(笔记本领先、手机跟随)将在2030-2035年间本地获得今日“必须在线”的高质量大模型体验,电力限制会被效率+分布式稀释。但这不是“历史铁律必然”,而是大概率趋势——前提是增长节奏不出现结构性中断,前沿模型不爆炸式膨胀。利益驱动的“电力无限论”低估了效率进步与算法优化的抵消作用,也忽略了“今天 vs 未来前沿”的关键区分。现实更可能是混合:本地处理日常,云端处理最前沿。

中国开发者使用真实地址申请Chrome开发者过程

技术

11天前,我突发奇想,开发了第一款Chrome的插件。在X上分享之后,有人感兴趣,于是我打算上传到Chrome的插件商店,分享给大家。可我没想到,这个过程还挺困难。

信用卡不被接受

Chrome的插件商店,开发者注册需要5美元。但是这5美元只能通过银行卡扣款。扣款支持借记卡和信用卡。支持Visa,Mastercard等主流卡片。不支持银联。我想这没问题啊。因为我有一张招商银行的人民币+美元的双币卡,支持银联和Visa双通道。这张卡我已经用了很多年,在海外交易,比如美国亚马逊,都是一直好用的。

结果没想到,卡号还没输完,就被Google提示不支持这张卡。

网上攻略

上网找攻略。发现大部分人都提到可以申请招商银行的全币种的单Visa通道的卡,也可以直接申请虚拟卡。

被限制的虚拟卡

我首先想到的是申请虚拟卡。因为我觉得单独申请一张信用卡周期比较长。可我找了一圈,原本推荐的几家虚拟卡,要么已经不支持交易,要么还需要收月费。一个月就要5美元。搜了搜新闻,原来虚拟卡这个东西,好多都不合规,甚至还吃了官司,好多都转换赛道了。

申请单Visa通道的信用卡

于是我给招商银行信用卡客服打电话。我先问他为啥不能用。他不清楚。然后我说听说Visa单通道的全币卡可以,我是否能申请?他说可以,会跟我原来的卡共信用。我问他能否申请虚拟卡,他说单Visa的不行。于是我挂了电话,按照他说的使用手机银行申请Visa卡。

申请的第二天,看进度,卡已经出了,正在制作。我选择了网上部分激活。但是没用,只有卡号,没有校验码。又等了几天,终于收到卡了。

验证身份和地址

终于可以再次申请Chrome开发者了。这次直接输入卡号,校验码,地址。提交成功。

咦,收到了一封邮件,说交易取消了。需要先验证身份和地址。

  • 身份支持身份证、护照或者驾照。
  • 地址验证,支持银行对账单或者水电费账单之类的。

我这里遇到一个问题,因为我的身份证上面的地址是我家老房子的,一直没改。而我现在居住在另一个地址。而我在Google填写的地址是我自己现在这个。问题是这个月的电费、水费的通知,我前几天付款之后就扔掉了。于是我在电脑里搜索,找到一个2022年买Mac mini时苹果开的一张电子发票。于是我提交了身份证和这张发票。

没想到,还是收到了验证失败的邮件。说有问题可以直接回复邮件。我回复,苹果公司的电子发票不能证明吗?

我没收到回复,不过第二天我收到了验证通过的邮件。

验证成为交易者

重新支付,支付成功,终于进入了开发者界面。直接弹窗。询问我是否交易者。交易者,Trader,这个我知道,是欧盟的要求,苹果商店也有。而且如果你是卖自己的软件,就需要申请交易者身份。我点是,又要验证。这次多了条件,验证地址的证明必须得是60天内的,这样2022年的苹果发票就不行了。

我一想,不是刚收到信用卡吗?信用卡是中国邮政的挂号信,上面有地址,有日期,有人名,有银行名,这不是信用杠杠的?于是我使用身份证和信封来验证。

居然验证失败了。中国邮政杠杠的信用人家不认。我没办法了,我将问题详细描述给AI,AI和我说,主要是地址问题,地址和身份证不一致没关系,Google不看重那个。但是证明文件必须得是水电费或者银行的对账单。然后告诉我招行网站可以申请电子版的。于是我打开掌上生活,设置了邮箱,然后选择补发,然后将补发的对账单pdf上传了。

终于,交易者验证成功。

小结

与Google Play不同。Google Play不支持设置地址为中国,所以只能选择其它地方作为地址。Chrome插件的开发者,是支持中国开发者注册的。需要的是使用Visa的单通道的信用卡。然后通过身份证+银行对账单就能完成。需要支付5美元。最后,地址可以和身份证上的不一致,但是需要跟银行对账单上的一致。

插件地址

最后,我的插件已经上架了,欢迎使用。

谈谈AI的理解能力和性格

技术

昨天AI和我执拗上了。事情的起因是这样的。

我在Xcode的项目中使用String Catalog,它是一个扩展名为xcstrings的文件,会在项目编译的时候,自动通过源代码生成本地化的文本,以便用户进行翻译。最初,我注意到AI经常会主动翻译这个文件,这本来是一件好事。不过AI的方式不是跟人一样,去填充翻译的内容。而是直接将翻译写入到文件。而它在写入的时候,有时候会将格式写错,比如少了个括号之类的。最后就导致项目无法编译通过。我权衡利弊,决定不让AI再主动更改这个文件。而是由我使用别的方式进行翻译。

我增加了提示词,我和AI说,添加新的规则,你可以编辑源码,但是不能直接编辑xcstrings类型的文件,因为这个文件是被动的,会在编辑源码时,自动改变。结果AI添加了两条规则到.claude文件,一条叫只能编辑源码,不能编辑xcstrings文件。另一条叫不能直接编辑xcstrings文件。这两条在我看来都没啥问题,于是就同意了。

结下,AI的表演让我十分无语。首先,每次它在发现xcstrings有变化时,总是尝试用git restore命令回退到旧版。因为它总认为是自己不小心修改了文件。但其实只要是Xcode编译,就会在需要时自动更新,而我手动翻译之后,它也会更新。

为了不让它恢复到旧版。我跟他说,提交时同时提交翻译。结果它不理我,非要恢复。我问它为什么?它说,因为.claude的规则高于我的指令,我说那个规则也是我添加的。而且我让它列出规则。结果我一看,根本没有不让git提交啊。AI和我说,git提交本身就属于修改,因此也不行。我说你看清楚,规则是不能直接修改。而且我又把xcstrings文件改变的原理和它说了一遍。AI死活不同意,我说那我现在命令你修改规则,但是我现在很疑惑,按照我现在理解的你的理解能力,我要如何说才能达到我想要的效果?结果AI跟我说,它将修改规则为“不能直接修改,可以提交。”我问号脸,这不就是我刚刚说的吗?然后,它改了规则,终于给我提交了。

我差点儿以为AI要造反了呢!居然不理会我的直接指令!