肇鑫的日常博客

肇鑫 / Owen Zhao

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

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

最新文章

brew应用无法卸载问题的解决

技术

问题

zhaoxin@Mac-mini ~ % brew remove inkscape --cask
==> Uninstalling Cask inkscape
==> Purging files for version 1.4.028868 of Cask inkscape
zhaoxin@Mac-mini ~ % brew info inkscape
==> inkscape: 1.4.230579
https://inkscape.org/
Installed
/opt/homebrew/Caskroom/inkscape/1.4.028868.upgrading (64B)
From: https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/i/inkscape.rb
==> Name
Inkscape
==> Description
Vector graphics editor
==> Artifacts
Inkscape.app (App)
/opt/homebrew/Caskroom/inkscape/1.4.230579/inkscape.wrapper.sh -> inkscape (Binary)
==> Analytics
install: 3,464 (30 days), 9,907 (90 days), 32,521 (365 days)

解决办法

Here’s how you can fully remove Inkscape:

  1. Uninstall the Remaining Version

Run the following command to uninstall the remaining version of Inkscape:

brew remove --cask inkscape
  1. Verify Uninstallation

After running the uninstall command, verify that Inkscape is no longer installed:

brew info inkscape

If Inkscape is still listed as installed, you may need to manually remove any leftover files.

  1. Manually Remove Leftover Files

If Homebrew didn’t fully remove the application, you can manually delete the remaining files:

• Application File:

rm -rf /Applications/Inkscape.app

• Caskroom Directory:

rm -rf /opt/homebrew/Caskroom/inkscape
  1. Clean Up Homebrew

Finally, clean up any unused files and caches in Homebrew:

brew cleanup
  1. Verify Again

Run brew info inkscape once more to confirm that Inkscape has been completely removed.

一次有趣的Mac夜晚间隔性唤醒故障的解决经历

技术

最近我的Mac mini在夜晚睡眠之后,经常被多次唤醒,间隔大概在1小时左右。因为每次唤醒,都会导致显示器亮屏,造成原本黑暗的屋内变亮,影响睡眠。

我用命令查看是什么原因导致了系统的唤醒。发现说是蓝牙或是USB设备导致的。我初步怀疑是最近我开始重新使用的蓝牙键盘IKBC DC-87的原因。我选择关闭键盘的开关。之后故障消失。

原本以为这样就可以了。但是我今天使用键盘打字的时候,突然键盘就没响应了。更换电池之后,一切正常。原来仅仅是电池没电了。

这样想来,原本的故障,其实就是电池电量低了。从而导致键盘一会儿有电,一会儿没电。而电池重新有电的时候,会尝试和配对设备连接。从而导致Mac被唤醒。

结论:以后遇到这种故障,提前换电池就可以了。

M4 Mac mini连接Apple TV HD声音断断续续问题的一种解决方案

技术

将Mac mini从M1换成M4之后,Apple TV HD的画面没啥问题,但是声音断断续续,根本没法看。之前M1的时候没问题,但M4的时候就这样了。我认为它应该和M4的网络从Wi-Fi 6升级到Wi-Fi 6E有关。

如图是我调整之后的设置。

wifi

这个和M1的相比主要有两点变化:

  1. 频道,M1只支持80MHz
  2. 安全性,之前为了兼容性,我统一使用了WPA2个人级的加密。

解决方案

因为Apple TV HD不支持WPA3的加密,当我开启5G的WPA3之后,就需要在Apple TV中手动选择2.4G的Wi-Fi。采用了这个设置之后,目前Apple TV HD只在刚开始的时候会断断续续几秒,之后就一切正常了。

我的路由是小米的BE6500 Pro。不清楚这个问题和路由是否也有关。

扩展丐版Mac的磁盘空间

技术

今年Mac mini M4丐版火了。主要是两点:

  1. 苹果将祖传的8GB内存升级到了16GB。
  2. 国家补贴20%,将价格降到35xx。

东西买来了。但是只有256G容量的SSD,却有些捉襟见肘。尤其是做开发的。Xcode自身日常就能占据80-100G。如果是512G的容量就好了。但是从256G升级到512G,苹果要价1500,算上国补,也需要加价1300。实在不够划算。

这篇文章探讨几种不同的方式来扩展Mac的内存。因为这件事实际操作起来,才能发现比原本预期的要更复杂。

硬核办法,更换内置SSD

既然SSD空间小,那么大家首先想到的就是更换一个更大的SSD。想法很好,但是苹果的SSD是焊接在主板上的。普通用户没有这个手艺。因此,要么你找有这个手艺的第三方去更换。要么你直接买别人已经更换好的。

注意:更换SSD的行为会使你的Mac mini失去质保。有些卖已经更换好的Mac mini的商家,提供一年的店铺保修。也就是说,如果坏了,你可以邮寄给商家进行保修。

这种方式的好处是,SSD仍旧是内置的,不会有额外的空间和接口占用。缺点是价格相对较贵,同时会失去苹果质保。另外还有就是第三方的技术水平参差不齐,更换可能存在隐患。

外置硬盘法

顾名思义,外置硬盘法就是使用移动硬盘的方式。而按照硬盘盒的区分,又分为10Gbps的USB 3.1/3.2硬盘盒,以及40Gbps的雷电3/4硬盘盒。二者各有各子的优缺点。

  • 10Gbps的USB 3.1/3.2硬盘盒
    • 优点:价格便宜,温度低
    • 缺点:速度相对较慢,读取写入在900MB/s以下。
  • 40Gbps的雷电3/4硬盘盒
    • 优点:速度快,读取写入可以达到2000到3000MB/s。
    • 缺点:价格要贵一些。温度较高。

虽然雷电的盒子温度要高,因此有的盒子有主动散热的风扇。但是购买时不要买有风扇的版本,因为那个实在太吵了。Mac mini睡眠时风扇也不会停。要买就买无风扇,但是硬盘盒特别重的,因为盒子重的,散热才好。比如我购买的ITGZ的那款。放在手里沉甸甸的,就是一块儿铝锭。

上面提到的是按照硬件进行划分。下面再按照使用方式进行划分。

系统外置法

系统外置法,就是将系统安装到移动硬盘上。安装的方法有两种:

  1. 通过macOS的安装文件进行安装,安装时选择外置硬盘作为安装的位置。
  2. 通过类似CCC这类的备份软件进行备份,备份时选择备份为可以启动的磁盘。
  3. 通过启动磁盘进行选择,选择从移动磁盘启动。

优点:
安装方法简单。
缺点:
完全使用外置磁盘,内置磁盘浪费掉了。
据说苹果智能要求必须使用内置磁盘。外置磁盘无法开启苹果智能。

软连接法

软连接法,就是通过命令行的ln命令创建软连接。将文件夹连接到移动硬盘上的对应文件夹。

优点:
简单,灵活。不需要新建系统,可以针对任何大的文件夹。
缺点:
有些应用会有兼容问题。比如Xcode的模拟器在使用软连接之后,就消失了,也无法新建新的模拟器。只能从软连接恢复到原来的文件夹方式。因此,这个需要不断的试错。

移动默认用户法(推荐)

苹果其实支持了用户文件的重定向功能。即在设置->用户和组->用户上点鼠标右键,然后选高级,就可以设置新的用户文件夹。

这个文件夹是磁盘占用的大头,这个转移走了,剩下的空间就超级大了。

优点:
这个方式是官方支持的。也无需安装新系统。
缺点:
操作复杂。用户文件下是包含资源库文件夹的。而这个文件夹具有系统属性,因此复制时可能存在问题。因此,你在复制粘贴到新位置时,一般不会成功,而只会提示复制失败。

解决办法:
不要直接从系统当前用户的文件夹复制。而是要利用备份软件,比如从时光机中提取这个文件夹,然后保存到新位置。又或者从CCC的备份中直接复制粘贴。

缺点:
这个方式还有一个缺点。就是对于一基于磁盘的备份工具,因为系统和用户文件夹已经不再一个磁盘,那么CCC备份的内容就不在完美。
不过系统自带的时光机还是会正常备份系统和用户文件夹到一个备份的。

谈谈目前阶段我认为的大模型使用策略

技术

先说一个公理:同一个大模型中,参数越高的版本越智能。

从表面上看,既然参数越高的版本越智能,那么在硬件允许的情况下,是否应该本地运行参数更高的版本呢?答案是:是,也不是。这是因为,虽然参数更高的模型更智能,但它们消耗的资源也更高。而且,参数越高的模型,输出所需的时间通常也越长。尤其是如果使用独立显卡进行推理,当模型所需的内存超过显卡的显存时,就会转而使用CPU进行推理,那速度可能会令人无法接受。

相较于本地运行大模型的高参数版本,我更推荐本地运行低参数版本的模型,比如2B、3B这种,同时订阅在线的大模型。尽管这些低参数版本的模型在能力上不及高参数版本强大,但用于一些简单的任务,比如翻译、总结等,效果还是很不错的。而且,它们占用的资源较少,运行速度也相当快。即便是在16GB内存的Mac mini M1上,它们运行时的内存占用也仅在2GB左右。

对于复杂的任务,我们可以将其交给在线的大模型处理。因为相比于在线模型的订阅费,本地运行这些大模型所需的硬件费用远远更高。而在线大模型的好处在于,我们可以根据当前任务选择最合适的模型进行使用。

有人可能会说,若想灵活切换,就需要订阅多个在线大模型,那么费用不就高了吗?其实并非如此。我们可以考虑订阅第三方服务,比如OpenCat。在其订阅期间,我们可以有限制地使用所有它支持的大模型。这样,我们就不必为每个大模型单独订阅。而且,通过这种方式,我们还可以避免一些大模型随意封号的风险。

非官方支持的Mac开启macOS 15.1 AI功能和Xcode AI代码补全功能的办法

技术

github上的文档已经写的很不错了。大家按照上面操作基本上就能成功。就是还有一些注意事项,我会在这里提一提。

https://github.com/Kyle-Ye/XcodeLLMEligible/blob/main/README_CN.md

推荐使用禁用SIP自动运行脚本的方法。

注意:Xcode和苹果AI是两个不同的脚本。需要分别运行。
运行Xcode脚本之前,要先安装完成Xcode 16 beta。不然可能会遇到问题。遇到问题,解决办法就是再次运行一遍Xcode的脚本。

禁用/打开SIP的方法

  1. 关闭Mac。
  2. 长按电源按钮,直到屏幕亮起。
  3. 选择设置。
  4. 选择终端。
  5. 输入命令,按照提示操作。
  6. 重启电脑。

关于墙的碎碎念

技术

7月13号的时候,突然翻不了墙了。但是同时http服务或者SSH服务却全都正常。我以为是我前一天升级了服务器导致的。于是选择了重装。结果还是不行。

经过了一天的调试,最终发现,原来是墙封了我的VPS的IP的433端口。没办法,之后重新又开了一台VPS。

又过了快一周的时间,我在推上看到有人说是因为开会的缘故。

记录一下,下一次就不用浪费这么多时间了。

Ollama运行本地大模型的一些技巧

技术

使用Ollama也有一些时间。从小白阶段,只懂按照命令行运行。到现在会自己从抱抱脸选择官方没有的模型自己进行导入。甚至创建局域网内部的服务器,使用应用调用Ollama的API。是时候总结一下Ollama本地运行大模型的一些技巧了。

运行方式

终端运行

新手一般会使用

ollama serve

启动Ollama,并使用ctrl+c结束运行。

以服务方式运行

我们还可以使用服务的方式运行Ollama。这样Ollama在系统启动之后就会在后台调用,可以随时调用。

brew services start ollama

需要注意的是,如果你是了此种方式。那么每次ollama升级之后,需要使用

brew services restart ollama

重新启动Ollama服务。

服务局域网

默认情况下,Ollama只会关注localhost的11434端口,因此只能从本机访问。局域网的其它电脑无法使用。我们可以修改设置,然后重启Ollama服务。这样局域网内的其它电脑就都可以使用Ollama了。

launchctl setenv OLLAMA_HOST "0.0.0.0"
brew services restart ollama

我们可以这个命令,查看Ollama运行的状态

lsof -i -P | grep ollama

如果你看到的是这个,就证明成功了

ollama      602 zhaoxin    3u  IPv6 0xb435894e8a5320f      0t0  TCP *:11434 (LISTEN)

如果你想固定上面的设置。那么就需要修改/opt/homebrew/opt/ollama/homebrew.mxcl.ollama.plist文件,为它添加:

<key>EnvironmentVariables</key>
<dict>
    <key>OLLAMA_HOST</key>
    <string>0.0.0.0</string>
</dict>

然后停止Ollama服务,并重新开启。注意,我发现用restart不行。必须先stop,然后重新start。不然重启之后,就还是只有localhost。

brew services stop ollama
brew services start ollama

https://github.com/ollama/ollama/blob/main/docs/faq.md
https://github.com/ollama/ollama/issues/3581

模型选择

模型的选择首选是基于功能。不同的模型擅长的领域不同。比如某些模型不支持特定的语言,某些模型具备识别图片的能力,有些模型更擅长编程等。

其次就是版本的选择。总的来说,就是越小的模型,运行时的反应越快,但是同一个模型,越大的模型的输出结果越好。因此,我们需要要在结果准确性和推理速度中作出权衡。一般来说,如果你的电脑只有8GB内存。那么你也就只能选择7B以下的模型,默认模型能跑就不错了。而如果你有16GB内存,那么你最高可以运行13B的模型。而7B模型,也可以选择参数更高的版本比如7B-4bit-K_M之类的。它会标准的标准的4bit性能要好一些。

导入模型

Ollama是llama.cpp的。它支持所有gguf格式模型文件。因此我们在抱抱脸上搜索模型名+gguf,就能下载Ollama官网没有的模型。然后可以通过创建Modefile文件的方式进行导入。格式就是:

FROM gguf文件地址

然后执行

ollama create 模型名 -f Modefile

等一会,这个模型就被导入Ollama了并能使用了。

API调用

下面这段只有程序员需要。

仿OpenAI调用

Ollama支持OpenAI的API的兼容调用方式。这样可以更好复用代码。不过这种方式调用目前只支持chat api的调用。并且不支持Vision。

https://github.com/ollama/ollama/blob/main/docs/openai.md

因此如果你使用下面这两个API的时候,还是需要Ollam的自有API。

ListModels调用

https://github.com/ollama/ollama/blob/main/docs/api.md#list-local-models

Vision调用

https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion