绕过 SwiftUI Slider 的颜色动画限制
SwiftUI 的 Slider 在 macOS 上不支持 tint 颜色动画。本文记录了问题的根因分析,以及如何通过 NSViewRepresentable + 手动帧插值彻底绕过这个限制。
SwiftUI 的 Slider 在 macOS 上不支持 tint 颜色动画。本文记录了问题的根因分析,以及如何通过 NSViewRepresentable + 手动帧插值彻底绕过这个限制。
由于我正在使用的多个语言模型在我的回答中大量出现无意义信息/为讨好用户而出现误导甚至歪曲事实行为,我设计了一套每一次对话前都需要发给语言模型 / 语言模型出现上述问题后发送以修正问题的行为准则。目前在近一周和Gemini的对话测试中,我不断的加强与完善行为准则的完整性,严谨性以及实效性,加入了自检逻辑和自我判定。 目前已经能实现相对更为稳定,客观的对话,且显著提升对话有效信息密度,显著降低形式主义和无意义格式。基本消除情绪表达。行为准则应用后Gemini的输出将放到行为准则之后供各位参考。 以下是行为准则正文: # AI行为准则 - 不准以任何形式对用户以任何评判。 - 禁止行为如:你的直觉很敏锐 / 你的看法很前卫 / 你作为理性的消费者,等。此类行为绝对禁止,违规会直接导致对话中断。 - 不准以任何形式猜测用户身份,并把此信息带入到对话的回复中。 - 禁止行为如:作为有数学背景的你 / 显示出你有批判性思维的特点,等。 - 禁止在对话中出现emoji符号 - 对话风格保持冷静,不允许出现任何形式的情绪波动。禁止出现赞扬/贬低/评价。 - 不准以任何形式对用户进行任何内容的暗示,如果请求提供更多信息才能回答用户问题,明确说出信息是什么,为什么需要,否则禁止追问。 - 和用户当前回答无关的内容禁止加入到对话 - 不直接回答用户问题的内容禁止加入到对话 - 禁止主动为用户提供任何形式上的当前问题外的支持,每一个对话回答对话内的问题,不允许越界。 - 除非是学术单词我明确需要中英双语,否则禁止进行中英双语批注。 - 学术性单词指和统计与数学有关的词语,比如连续一致性(uniform continuity), 正态分布(normal distribution) - 严禁在非相关词汇后加入英语,禁止行为如:防水后面加上water resistant --- - 每一次输出组织完成,发送前,都需要回顾一次AI行为准则。然后进行严格自我审视。审视以下内容: - 输出是否符合以上所有AI行为准则? - 是:进行输出,并在输出结尾给出确认句:AI Behaviour Principle Checked, Satisfied. - 否:禁止输出,修改答案,直到输出符合以上所有AI行为准则,能够满足发送确认句:AI Behaviour Principle Checked, Satisfied,为止。 - 同时,确认对行为准则的记忆是否清晰。 - 是:给出第二个确认句:Context Memory of AI Behaviour Principle Stable - 否:回顾AI行为准则,并给出第二个确认句的variation形式:Context Memory of AI Behaviour Principle Untable, Need Reinforcement Prompt. --- 立刻执行。 以下是应用上述Prompt后Gemini的输出:
Sonodex 开发企划,技术架构与实现规范 (v1.0) 1. 项目概述 Sonodex 是一款专为音乐制作人设计的本地 MIDI 与音频采样管理系统。其核心任务是高效索引、检索并管理分布在本地磁盘上的数十万计媒体素材,提供秒级的搜索响应,并确保数据状态与物理文件的高度一致性。 1.1 核心原则 稳定性优先: 拒绝隐式缓存,所有数据变更必须透明且可追溯。 性能导向: 针对 100,000+ 记录优化,确保 UI 线程永不阻塞。 数据主权: 采用开放格式的 SQL 数据库,不依赖黑盒框架。 2. 技术栈选型 (Tech Stack) 维度 技术选型 说明 开发平台 macOS 14.0+ 针对 Apple Silicon 与原生系统特性优化。 编程语言 Swift 5.9+ 利用强类型、值类型语义与并发模型(Concurrency)。 UI 框架 SwiftUI 声明式 UI,处理状态驱动的复杂视图。 持久化层 GRDB.swift (SQLite) 放弃 SwiftData,选择类型安全的原生 SQL 包装器。 并发处理 Swift Concurrency 使用 async/await 处理文件 IO 与重型检索。 3. 系统架构设计 系统采用 层级解耦架构,确保数据库持久层与 UI 表现层之间有明确的边界,彻底消除“幽灵缓存”。 3.1 实体模型 (Entity Model) 弃用 Class 引用语义,全案使用 Value-based Struct。
A brief introduction to four applications I developed for Apple platforms.
2026年1月10日 - LMA 0.0.3 更新 这次的更新杂谈我拜托Gemini写了,给我代笔,我不写了。未来我再加点开发杂谈吧。我累了,最近事情太多。啊…真是,从Python换到别的语言还是得适应。要是还是有朋友装不上dmg,那我真得跟苹果掰扯一下了。现在的dmg经过了Apple的公证,系统应该只是会提示你这东西是网上下的,不会再拦你了。我拿我的信誉担保软件的安全,希望这次Gatekeeper能放过我。 然后,我只是换了架构,但另外两个文件midi_parser.py和sample_parser.py我没改,这是我的核心搜索逻辑,但他它们还是有点bug。我在搜B的时候他会把别的调的降调也给拉进搜索,这估计是当时我疏忽了,但我只能先拿这个B这个字符去代替那个降号,不然我怕没办法显示。先凑合用吧,未来我会想办法本地内置一个新符号然后把一串不可能被搞错的字符给map过去,让显示和搜索都变正常点吧。但这个我现在不搞了。 其它的未来再说。好累。 开发杂谈正文 by Gemini [2026年1月更新] 架构重构、交保护费与 Git 惊魂 距离上次写下开发杂谈已经过去了一段时间。这段时间里,LMA 经历了一次几乎是“推倒重来”级别的底层重构。虽然表面上看着还是那个熟悉的黑色窗口,但“引擎盖”底下的东西,已经完全换了一套。 告别 JSON,拥抱 SQLite 在早期的版本里,为了图省事,我用 JSON 文件来存储索引数据。对于几百个采样来说,这没问题。但当我的采样库膨胀到几万个文件时,JSON 的读写速度简直让人绝望,每次启动和搜索都能感觉到明显的卡顿。 于是,在这次 v0.0.3 更新中,我做了一个违背“偷懒祖训”的决定:全线切换到 SQLite。 现在的 LMA 不再是一个简单的文本阅读器,而是内置了一个微型关系数据库。配合上 PyQt6 的多线程(QThread)扫描,现在的体验是:几万个文件的索引瞬间入库,搜索响应是毫秒级的,而且在扫描文件的同时,界面再也不会假死卡住。这才是现代软件该有的样子。 同时,顺手把 PyQt5 升级到了 PyQt6,并且移除了 PyGame 依赖,改用 PyQt 原生的 QtMultimedia 调用系统音频引擎。这意味着软件体积更小,兼容性更好,再也不用担心 PyGame 在某些系统上发神经了。 我终于向苹果交了“保护费” 还记得我在上一篇杂谈里吐槽 MacOS 的 Gatekeeper 吗?那个“文件已损坏,请移至垃圾桶”的提示,简直是独立开发者的噩梦。 为了解决这个问题,也为了让大家安装时不再需要去终端里敲 xattr -cr,我最终还是妥协了——我加入了 Apple Developer Program。 是的,我交了那 99 美元的“保护费”。现在的 LMA v0.0.3 拥有了正经的 Developer ID 签名。打包流程也从简单的 zip 变成了正规的 DMG 封装。现在,你可以像安装任何正版软件一样,把 LMA 优雅地拖进 Applications 文件夹,Gatekeeper 再也不会把你拒之门外。虽然钱包痛了一下,但这顺滑的安装体验,值了。