肇鑫的日常博客

肇鑫 / Owen Zhao

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

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

最新文章

程序员的困境,谈谈我对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,只是一个发音,不是中文,原文应该是敬候佳音。突然有些大模型的思维方式了,你一旦学习了多门语言,那么思考就可能不会是单语言的思维方式了,不同的语言之间会互相干扰。

升级博客

技术

为zhaoxin.pro增加了首页。只是增加之后用来测试用的一篇文章。

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

不要轻视了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上也会有限制,不能够支付,只能使用免费应用,甚至也不能作为测试账户,因为他无法获得收费的任何信息。

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