Weekly#35

这周的内容有点多,泡杯咖啡慢慢看啦~

祝你这周过得开心~

。:.゚ヽ(*´∀`)ノ゚.:。

琐碎二三事

live

b10-live.jpg
图1  表情银行和缺省乐队的舞台照片

这周去听了 表情银行缺省 的双专场 live《11》,之所以叫 11,是因为两支乐队所有人加起来是 11 个人。

这场 live 挺惊喜的,两个乐队都是我喜欢的乐队,他们组合在一起相互合作,演出的效果相当不错。

两支乐队在一起,就像在开一个朋友之间的音乐派对,感觉他们玩得很开心。

开头有一段演奏,旋律像是凯尔特风格,缺省的主唱跳着舞,有种森林里点着篝火,大家一起尽兴玩乐的感觉。

表情银行演奏了他们的《嘿!岛(Black Island)》,这张专辑共 4 首歌,歌曲之间没有停顿,旋律是连贯起来的,共同组成了一个故事。

演奏时的背景,从日落渐渐变成日出,当太阳升起时,他们唱到:

浑浊渐渐沉淀

一切清晰可见

在超越绝望的远方

比希望更远的地方

我等着你

拥抱你

仿佛黎明前最黑的时刻已经过去,给人一种一切会好起来的感觉。

Encore 前最后一首歌是表情银行的《安全降落》:

在安全的地方降落欲望。

在温柔的地方将胆怯埋葬。

我的夜晚如晨光开始。

我愿对着陌生人歌唱。

我顺流而下遇见了你。

沉溺在你眼睛的清泉里。

他们说,这是一首表达人与人之连接的歌,他们也很庆幸能够和缺省一起合作巡演,也是一种顺流而下的相遇。

遇到意气相投的人一起合作确实是很开心的事情。

缺省的主唱在歌唱时有比较多的肢体语言,感觉唱得很投入。

缺省主唱的声音我也挺喜欢的,在唱一些高音时很嘹亮,在她唱到《平原》的副歌时,让人感到一股力量感。1

我所有的困惑降落在黎明复现之前

不辞而别的愤怒黑白

偏见与傲慢

时间落下的我

伫立在

平原中

荒原中

休息时,表情银行说要 “快乐地犯错”。

原因是他们的吉他手,裤子和腰带都落在了上一个演出的城市了,所以他就只能买条新裤子2,腰上系着主唱的围巾当腰带。

他们说,如果因为丢了裤子而影响心情,那么演出状态就会不好,而新买的裤子搭配围巾其实也挺酷的,所以哪怕是“犯错”了,也要“快乐地犯错”。

这就像是半杯水的故事,既可以认为只剩下半杯,也可以庆幸还有半杯,是看待一件事情的心态,与其闷闷不乐,不如换个角度让自己开心点。

说起来,这周有一次急着下班忘了打卡,吃完饭后又跑回去打卡,有点郁闷,但是也正因为往回走了一趟,我看到了很好看的晚霞。

sunset-glow.jpg
图2  下班时分拍的晚霞,蓝紫色的天空,有不少的云,云后面有两抹粉色的晚霞。天空之下是一些建筑。

我是近两年才开始听 live 的,我还挺喜欢去听 live,因为它有很多即兴的内容,在专辑里是听不到的。

还有乐队和现场听众的互动,听众们的合唱,都是 live 的独特之处。

live 是瞬间的,有很多即兴的片段我很想录制下来回看,但是如果顾着录制,我就没法好好欣赏了,所以我选择认真听,认真感受,那些感动的瞬间,过去了就不会再有了。

听 live 相比戴着耳机3 听歌会更加专注,对于一些歌词,旋律,演奏会听得更仔细,也因此,或许会喜欢上一些原来不太留意的歌。

如果你有喜欢的乐队,喜欢的专辑,我推荐你也去听听 live,会有很不一样的感受!4 , 5

关于找工作

最近面试比较少,也和自己投递的少有关系。

虽然很多人都建议是骑驴找马,但我觉得一边工作,一边找工作有点困难。

骑驴找马,如果需要面试就只能请假,假期也不是很多,请假面试了也未必有结果。

一边处理工作事务,也没有太多时间做一些面试准备。

或许后续会考虑裸辞再好好找找工作吧。

最近觉得好吃的东西

湘辣辣

他们家的凤爪我很喜欢吃,味道很足,够辣,它是那种虎皮凤爪,很容易脱骨,凤爪的胶质也不少,吃起来很过瘾。

如果你喜欢吃虎皮凤爪,或者像是广式茶点里的凤爪,而且你还喜欢吃辣,你可以试试这道菜。

他们家最主要的菜是现炒牛肉,确实很好吃,尤其是裹着一些油的时候,很下饭,不过偏油腻,不太健康。

还有就是青椒炒刀豆,好吃是好吃,不过我觉得溢价有点高。

之前在家里女朋友也复刻过,关键是要把刀豆切成足够细的丝,再和青椒炒炒,就很好吃,自己做价格比店里便宜得多,味道也差不到哪去。

木屋烧烤

木屋烧烤的烤鸡皮我挺喜欢吃的,软糯,而且很香。

他们家的鲜酿啤酒也不错,古斯海盐最有特点。

吃烧烤还是得去店里吃,外卖送到家就冷了,不好吃。

外卖上有很多写着“木屋”的烧烤,但大多数不是正宗的,如果点外卖最好看看店面是不是木屋烧烤的门店。

News | Article

Mentoring

作者对于自己指导别人的一些思考,读起来给人一种真诚的感觉。

作者 Sacha Chua 我挺喜欢的,周刊里的 Emacs 信息大部分都是从她整理的 emacs-news 中获取的。

摘录

我想,如果有些事情我希望更多人尝试,那就是:

  • 探索你的好奇心
  • 善待自己
  • 做笔记

Source

我喜欢好的问题,尤其是那些在我脑海中反复出现,促使我写作、绘画或编程的问题。

偶尔我会指引别人去一个大致方向,让他们自己找到答案。

当我能真正回答一个问题,或者在表达过程中理清某些事情时,我会感到惊喜。

从最初的刺激到写出一篇文章,这个过程对我来说可能需要一段时间。

Source

我也喜欢博客的运作方式,因为我们可以大声思考。

没有特定的人必须回复的压力。

想法在博客之间来回碰撞,花点时间也没关系。

有时其他人也会被吸引进来。

电子邮件在我的优先级列表中稍低一些。

电子邮件感觉封闭且私密,容易被遗忘和丢失。

至少博客有那么一点机会,有人可能会偶然再次看到并学到更多。

甚至可能是我自己。

我忘记过很多帖子,也重新找回过很多帖子。

Source

互联网充满了愿意提供建议的人。

我一直在学习如何不去给建议。

[…]

我希望最终能更擅长积极的、反思性的倾听,然后大声思考别人可能会问自己的好问题,或者以陈述而非说教的方式分享观察。

Source

Finding the Joy in Alt Text

Alt Text(Alternative Text) 是用于补充网页图片信息的,当图片没加载成功的时候,就会显示图片上的 Alt Text。

Alt Text 对于视障人士也比较友好,他们可能看不清图片,但他们可以利用屏幕阅读器,阅读 Alt Text 了解图片的内容。

作者主张不要只关注 Alt Text 的功能性,而应该更多关注它的趣味性,在写 Alt Text 的时候可以当作是一个 “我画你猜” 的游戏,想象你会如何在电话里向朋友描述图片。

我在博客里更多的是写 <figcaption>

作者的文风我也挺喜欢,顺手订阅了她的 RSS6

摘录

我的观点是,我们应该开始更加深入地关心替代文本,不是因为它是强制性的或有用的,而是因为它本身就是互联网中一个充满乐趣的小创作。

Source

我最喜欢的一次关于替代文字的奇特体验发生在一次环游世界的航班上。

正如你可能知道的,许多航空公司提供仅限消息的免费网络连接,而因为我很节省且经常旅行,我拒绝为更多服务付费。

在这次漫长的飞行中,我所在的一个群聊非常热闹 ⸺ 各种“炮火”四射,笑话不断,名字(充满爱意地)被叫出。

然后,救兵(表情包)也开始陆续出现。

然而,由于这有限的 WiFi,图片无法下载(或发送),我无法继续参与。

为了不被排除在这场闹剧之外,同时极度无聊并忽视着托盘桌上的倒置平装书,我要求所有朋友在后续的文字中准确描述他们发送的表情包或动图。

我们最终玩得如此投入,甚至停止发送图片,只通过描述性消息互相交流,玩起了“你能猜出我指的是哪个表情包吗”的小游戏。

猜猜看?

这就是替代文字 (Alt Text)!!

这是一种如此纯粹而愉快的形式,因为它帮助我在有限的情况下保持参与感,并成为我们之间一种有趣的默契展示。

Source

为什么不让替代文本不仅仅作为图片的“备用”,而是成为一种富有创意和诗意的表达方式呢?

Lola 提醒我们,可以用替代文本来描述意义,而不仅仅是字面描述。

Source

所以下次当你在为替代文本或视频描述苦恼时,不要仅仅满足于基本要求,问问自己 ⸺

我会如何在电话里向朋友描述这个?

我的朋友没看过我想引用的视频,而我又不能在开车时调出它,我该如何表达,才能让他们依然理解这个笑话?

如果这件作品挂在博物馆里,正对着我,我让对面的人闭上眼睛,我会如何描绘这件艺术品带给我的感受?

替代文字可以而且应该充满奇思妙想。

它可以是创作的乐趣,也可以是阅读的乐趣。

不仅那些因各种原因无法访问你图片的用户值得被考虑,他们也值得被包容。

而那些“不需要”替代文字的用户,也值得思考为什么它可能会扩展他们对你内容的享受或理解。

Source

Examples of Great URL Design

作者整理了一些很有趣了 URL,例如:

  • stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript/

    这个 URL 能通过 URL 知道问题的内容

  • slack.com/is/team-communication
  • slack.com/is/everything-in-one-place

    slack 利用 URL 去宣传自己,回答自己是什么

  • npmjs.com/package/react-router/v/5.3.4

    npm 的 URL 能很方便地看到包名和版本

这种在 URL 中添加语义的做法还挺不错的。

就像上面那篇关于 Alt Text 的文章一样,不少东西,除了实用性,也可以做得很有趣。

Machinist and Machine

作者用了一段时间 LLM 之后觉得失去了编码的乐趣,于是他决定减少 LLM 的依赖,重新找回编码的乐趣。

他的网站也挺有趣的,把每一个文字都拆成了 span 标签,hover 上去显示的块状光标,像是在 Emacs 里一样。

摘录

我非常喜欢编程。

我不是指软件开发,而是指写代码和与机器对话。

很多晚上我打开空白的 emacs,盯着不停闪烁的块状光标,直到有什么东西出现。

越傻越好。

即使只是几个符号,有时也只是 (;;);。

有时我会打开我认为很美的代码,一些 Tromp 图,或者 K&R 代码。

每天我都被提醒自己离真正理解复杂性和可编程机器还有多远。

现在我写的大多数代码只是一些令牌。

每天成千上万的令牌,空洞的。

我浏览它们以决定它们是否可行,接受或拒绝。

一次又一次 ⸺ 我对它们没有同情或情感,我什么也感觉不到,我已经变成了评估它们的计算机。

从机械师到机器。我能感觉到。我能感觉到它正在把我带离理解的道路。

每天,渐渐地。你一定也注意到了。

我想念它。我想念编程。

人们说这就是爱,当你非常想念某样东西时,会感到痛苦。

当痛苦消失时,将只剩下火焰。

我将为这火焰添柴加薪。

我要回去了,回到电线中,自己制造电脑,自己的操作系统,自己的语言。

无意义,无用,独自一人,为自己而做。

回去成为一个更好的机械师。

晚上听着《Man on the Silver Mountain》,看着块状光标。

白天,我只是假装成一台机器,评估这些标记,这样也没问题。

Claude and I write a utility program

作者用 Claude 写了一个 xar 工具替换 xargs ,解决自己的一些痛点,文章记录了作者和 Claude 交互的过程。

结论是 LLM 确实很有效,但不能过于放任它。

摘录

像往常一样,实际的实验产生了意想不到的结果,因为世界复杂且有趣。

有些结果并不令人惊讶,但有些是我事先根本想不到的。

Source

让 Claude 写大部分代码比我自己写要快得多,也容易得多。

这很好!

但我很容易就会冒险直接接受 Claude 的代码,而不仔细检查。

我很快习惯了高速前进,很难强迫自己放慢速度,像对待真正的初级程序员那样细致地检查每一处。

如果我疲劳或生病,很容易养成坏习惯。

我必须保持警惕。

Source

让 Claude 替我记东西,而不是翻找手册,真是太好了。

让 Claude 编写一个参数解析器,而不是从别处复制一个,简直是大胜利。

写测试脚本时,我想用那个告诉 Bash 如果任何子命令失败就提前退出的标志。

我总是记不住那个标志叫什么。

通常我会在自己的 shell 脚本里找,或者在那 378 个选项的 bash 手册里翻找。

这次我直接用英文问:“告诉脚本如果命令失败就中止的 bash 选项是什么?”

Claude 告诉了我,然后我们继续做自己的事。

Source

Claude 很容易完成简单的重构。

至少在这个规模上,它做得很正确。

Source

我的编程技能会退化吗?

我不认为会。

只有我放任它,技能才会退化。

而我有很好的记录,没有让它退化。

工程的本质是关注我在做什么和为什么,努力产出满足复杂约束的稳固产品,努力发现问题并纠正它们。

我不会停止这样做。

也许问题会和以前不同。那也没关系。

几十年前开始,我就反复告诉人们:

你不能只是粘贴代码而不理解其背后的原理,然后期望它能正常工作。

那时没有 Claude 也是如此,现在有了 Claude 依然如此。

我为什么要改变主意?Claude 怎么可能改变呢?

让我让 Claude 为我写那个复杂的 parser.add_argument 调用会失去什么吗?

也许如果我自己弄明白了,将来我会记住 const=5default=1 的规范以及它们是如何相互作用的。

也许吧。

但我怀疑我过去不止一次自己弄明白过这件事,只是没记住。

我对这次的结果很满意。

在我得到 Claude 的解释后,我用一个测试程序仔细检查了它声称的行为,就像在审查一个我不确定的同事的代码一样。

Claude 给我带来的最大收获是,我之前不知道这个 ProcessPoolExecutor 东西,现在知道了。

这会让我成为一个更好的程序员。

现在我知道了一些以前不知道的有用东西,并且有了一个我知道应该学习的文档指引。

我写临时进程池管理器的技能可能会退化,但如果真的退化了,那也是好事。

我已经写了太多临时进程池管理器了。

这是个坏习惯,我早该停止了,这次会帮我戒掉。

Source

这有效。

完美吗?不,技术永远不会完美。你用过电脑吗?

会引入新问题吗?可能会,这是新技术,而新技术总是会引入新问题。

但它比我们之前的更好吗?绝对是。

我仍然看到一些程序员对这项技术嗤之以鼻,仿佛他们确信这只是一个愚蠢的时尚,等人们恢复理智,看到这是一个多么糟糕的主意时,它就会自行消失。

我认为这不会发生,那些嗤之以鼻的人,就像那些指出汽车相比马车所有缺点和未知风险的人一样,将会显得越来越愚蠢。

因为它有效。

Source

3 Years of Extremely Remote Work

作者分享了他 3 年远程工作的感悟。

在过去的三年里,我参加了 77 次会议,这些会议都在凌晨 1 点到 6 点之间开始,大约每两周一次,之后是我通常的早上 7 点开始工作,周一到周六。

我不是在抱怨。

我工作时间很奇怪,但我不认为我工作时间太多。

我写这篇文章是因为关于远程工作者的生活存在一些误解和假设,我想分享我自己的经历作为一个例子,并为处于类似情况 (从亚洲为美国工作) 的人提供一些建议。

Source

摘录

永远不要抱怨工作时间。

可能有管理层的人不支持远程工作,他们可能会利用这样的抱怨来反对远程工作。

有时,当我在凌晨四点多寻找合适的话语时,我会承认自己有点累,但我真的尽量不提这件事。

Source

保持动力。

我发现每天记录自己完成的事情效果最好(我已经坚持了十多年)。

如果某天的记录看起来不够充实,我会努力在第二天做得更多。

我每周都会向经理总结一次。

Source

A Brief History of JavaScript

JavaScript 30 岁啦,文章整理了 JS 诞生到现在的发展历程。

他们之所以取名为 "JavaScript",是出于市场营销的考虑,因为 Java 在当时是炙手可热的新编程语言,所以这个名字正是利用了这种流行性。

你是在哪个阶段开始使用 JS 的呢?

Accountability Sinks

作者谈到责任会因为流程、规范或者制度等而沉没,相关人员都把责任推给流程。

人们会认为流程就是这样的,谁也不想负责(可能也不敢负责),于是有问题你无法找到相关人员帮你解决;而人们僵化地执行流程,也会导致一些很荒谬的事情。

文章举了个例子,440 只啮齿动物因为送达后没有进口文件,无法转运,也没人能够纠错将它们遣返,最终因为文件问题,它们全部被送进了工业粉碎机。

但流程也不是坏事,流程能够缩短新进人员面对不熟练且复杂的学习时间,只要按照步骤指示就能避免失误与疏忽。

只是,在执行流程的过程中,还应该保持个人的判断,特殊情况下或许是需要突破规则的。

我想肯定有人在某些情况下,会怀疑流程的合理性,犹豫是否要遵循,但因为害怕破坏流程而承担很重的责任,而选择了遵循流程,把自己的胆怯推托成遵循流程的无奈。

所以要想让一个流程在执行时能够变通,一方面是执行人不应该被过多的追责,另一方面是执行人需要有足够的勇气。

摘录

有人 ⸺ 比如航空公司的登机口服务员 ⸺ 告诉你一个坏消息;也许你被航班取消了,让给了某个拥有更多飞行常客积分的人。

你开始抱怨,并指出你为机票花了多少钱,但不可否认的事实是,登机口服务员对此无能为力。

您要求找可以处理此事的人,但被告知这不是公司政策。

这种对话的令人不安之处在于,你会逐渐意识到,与你对话的人只能遵循一套流程和规则,而这套流程和规则是根据公司高层的决定制定的。

这通常是一种令人沮丧的经历;你想发火,但又不能真的责怪与你交谈的人。

不知何故,航空公司构建了这样一种状态:它可以用无定形公司的匿名声音与你交谈,但你却必须像对待自己一样与它对话。

坏人的反应是对登机口服务员发火;好人则带着受挫的愤怒走开。

Source

大屠杀研究者一直在强调一点:只有将原本只在少数大屠杀中爆发的民众仇恨转化为正式的行政程序,大规模种族灭绝才有可能发生。

因此,集中犹太人是种族灭绝成功的关键。

然而,从事这项工作的官僚们并不觉得他们是在亲手杀人。

他们只是在做日常的、无聊的行政工作。

在阅读纽伦堡审判时,这一点变得更加突出。

显然,没有人对任何事情负责。

每个人都只是在执行程序命令。

公平地说,被告往往是自行其是,而不是服从命令。

事实证明,德国士兵因违抗非法命令而面临的后果出奇地轻微。

因此,如果高层只是一走了之,甚至试图减轻损失,也不会受到严重伤害。

Source

过去由人判断的事情被正式程序所取代。

突然之间,没有人再做任何深思熟虑的决定。

取而代之的是一个正式的流程。

事实上,这个过程可能是在计算机上执行的,根本不需要人的参与。

没有人可以指责任何事情。

当流程出错时,也没有人可以抱怨。

每个人都有安全保障。 在任何组织中,以程序取代人为判断的动机都很强烈。

决策可能会引起争议。

很多时候,有人的利益会受到影响,任何决定都至少会引起一些不满、怨恨和反弹。

引入非个人流程可以自动做出决定,无需任何人负责,也无需任何人为伤害他人而感到内疚。

Source

[…] 正式流程可能对提高效率大有裨益。

只需做出一次决定,然后反复应用,就能获得规模经济效益。

正式的程序可以提高安全性,例如飞行员在起飞前要检查清单。

飞行控制是否自由和正确?所有门窗是否锁好?等等,不一而足。

程序也是机构记忆的宝库。

它们承载着过去无数案例的经验教训,而流程的执行者往往对此一无所知。

曾经遇到的问题,曾经设计的解决方案,所有这些都被编码成一套步骤。

但归根结底,在任何官僚机构的内心深处,程序都是关于责任和避免责任的方法。

这不是一种效率措施,而是一种问责管理技术。

Source

无责备的事故报告是 SRE 文化的一个原则。

要使事故报告真正无责备,必须专注于识别导致事件的原因,而不指责任何个人或团队的不当或不适当行为。

无责备的事故报告假设所有参与事件的人都有良好的意图,并且根据他们所掌握的信息做出了正确的决定。

如果指责和羞辱个人或团队做出“错误”行为的文化盛行,人们将因害怕惩罚而不愿揭露问题。

Source

  1. 正式流程大多是有益的,而且它们不会消失。任何复杂的现代社会如果没有它们都会崩溃。
  2. 并非所有正式流程都是责任陷阱。你设计并强加于自己的流程,在出现问题时并不会免除你的责任。你依然需要承担责任。另一方面,上级强加给你的流程往往会激励盲目遵守,即使这会损害既定目标。
  3. 并非所有的责任陷阱都会导致僵化和掩盖。一个流程可以被设计成既保护相关人员免于承担责任,同时又不强加任何预设的解决方案给他们。(例如,无责追踪分析。)

Source

Building a personal archive of the web, the slow way

作者分享他是如何建立个人网络档案的。

我想很多人都会碰到过一个情况,收藏的书签,过一阵子点开,发现网站已经不在了。

一些喜欢的网站,或许你会想归档起来,任何时候都能访问,尽管有 Internet Archive 这样的服务,但他们往往不是专门为你的内容服务的,有的内容可能还是会找不到。

作者的做法是手动保存网站,他首先将网站的 HTML 另存为保存到本地,然后手动查看网站缺失的内容,再下载下来,之后他还会将不需要的内容裁剪,最后就会形成他的归档。

看起来很费劲,但这样得到的内容相比自动化而言,精度更高,质量更高,更能满足作者的需要。

自己动手保存下来的东西,往往比自动化保存的会更显得珍贵,也会更去注重它的保存和质量。

有什么不太花钱又能放松心情的事情吗?

作者看了一篇推文后写的文章,整理了很多他觉得可以放松心情的事情。

不知道你有什么类似的事情?

我的话,我会喜欢听歌散步,去山里或者海边;

或者找个海边坐下来喝喝啤酒,看看海,吹吹风;

以及静下来看本书。

Enlightenmentware

作者分享了一些对他影响比较大的软件,有 UNIX, Git, Emacs, Boost.Graph, Bazel。

While any text editor can save your files, only Emacs can save your soul.

虽然任何文本编辑器都能保存你的文件,只有 Emacs 能拯救你的灵魂。

Source

哈哈哈哈,大家来用 Emacs 呀!(≖ᴗ≖๑)

摘录

UNIX 很友好 ⸺ 它只是对朋友的选择很挑剔。

Source

使用 git 很容易犯错,但也很容易回退到之前的状态,并将其与当前的进度合并。

Source

深入研究 Emacs 的内部结构还揭示了其架构的内在美感。

Emacs 是一个 Lisp 机器,提供文本编辑和窗口管理功能。

它是一个强大、方便且友好的开发环境,用于在 Emacs Lisp 中构建动态的文本驱动应用程序。

Emacs 中几乎所有的东西都是 Lisp 对象,你可以检查它们、与之交互,并访问它们的文档。

一旦掌握了它,Emacs 的文档系统无与伦比。

Emacs 的动态特性使得扩展它比任何其他编辑器都容易。

反馈循环非常紧密:你可以立即在编写代码的编辑器环境中试用你的代码。

虽然我现在是在 Visual Studio Code 中写这些文字,但我总是开着 Emacs。

许多事情在 Emacs 中更容易;我认为没有任何软件能完全取代它。

若需要实现扩展,它也是我首选的编辑器。

编写 Emacs Lisp 是一种乐趣,尤其是相比写 Vimscript。

Source

在介绍完我的案例后,我很想寻找一个共同的主题。

什么才是好的启蒙软件?

对我来说,关键点有以下几点:

  • *所有这些工具都解决了一个深层次的问题*,这种问题我每天都会遇到,比如让电脑上的程序协同工作、管理并发的工作流程,或者对一段代码进行泛化。
  • 它们是圆形的:在最小的表面积内容纳了最大的体积。 Unix 的表面积很小,但它释放了巨大的力量。Emacs 和 Git 分布广泛,但它们的核心小巧、精妙且易于理解。
  • *它们邀请并鼓励你探索其内部结构。*这不仅仅是因为它们是自由和开源的;掌握它们同样非常值得投入时间。

Source

Don't Guess My Language

作者呼吁别用 IP 等方法去猜测用户使用的语言,而应该始终遵循浏览器的 Accept-Language ,这是唯一合理的方法。

摘录

没有一一对应的关系。

比利时有三种官方语言,瑞士有四种,印度有 22 种,加拿大官方是双语,非官方则是多语言。

用户可能居住在这些地方,经过这些地方旅行,或者仅仅是通过这些地方的路由传输流量。

那么,你凭什么仅仅因为某个地理 IP 数据库告诉你 IP 来自哪个国家,就强制将界面设置成某种语言呢?

你是在基于错误的数据做假设,这不是聪明的工程设计,而是懒惰地假装是在做用户体验 (UX, User Experience)。

不,“大网站都这么做”并不能证明这是对的。

你不是货物崇拜者。

要么做好,要么别做。

Source

每个浏览器都会发送一个 Accept-Language 头。

它告诉你用户偏好的语言,不是基于位置,也不是基于 IP,而是基于他们的操作系统或浏览器配置。

是的,如果用户足够在意,他们可以自行调整。

它看起来是这样的: Accept-Language: en-US,en;q=0.9,de;q=0.8

那就是你的信号,使用它。

它准确、免费、已经存在,无需授权、无需猜测、无需维护。

你不会用自己的猜测去覆盖屏幕分辨率或配色方案 ⸺ 那为什么要这样做语言呢?

Source

Two Weeks with AR Glasses and Linux on Android

Weekly#32 分享过 一篇文章,作者用迷你电脑和 AR 眼镜作为自己的工作设备。

而这篇文章的作者更进一步,用手机安装 Linux,搭配 AR 眼镜作为工作设备,挺酷的,想拥有!

image2-33a8991bfbc1b166d479f61b9d3a3b53.avif
图3  桌子上放着手机,手机上连着一副 AR 眼睛,手机前面放着一个展开的折叠键盘。 (图片来源:https://holdtherobot.com)

Sketchy calendar

纸质日历可以很灵活和个性化,但不方便数字化,但数字日历限制又比较多。

文章探讨一种以纸质日历为出发点的日历 ⸺ 使用一个简单的数字笔记本(iPad 和 Apple Pencil)并添加少量结构,探索能做到什么程度。

sketchy-calendar.png
图4  一张 ipad 上的日历,在不同的日期上有一些涂鸦和标记。 (图片来源:https://www.inkandswitch.com)

Google I/O 2025: Developer keynote

Google I/O 2025,有不少关于 AI、Web、Android 的分享。

视频都很长,我还没怎么看,可以找感兴趣的部分了解一下。

文字的速度终于赶上了短视频

作者用 LLM 写的文章,说实话我快速浏览了一遍,并没有察觉到是 LLM 写的。

Tutorial | Resource

things

一些好看的拟物图标。

Transition animations: a practical guide

一篇关于过渡动画的实践指南,文章分析怎样的过渡是比较好的。

不错的文章,包含很多示意动画,推荐一读。

Fonts Ninja

Discover awesome typefaces and build your font collection.

一些英文字体合集。

缝合像素字体 / Fusion Pixel Font

开源的泛中日韩像素字体,黑体无衬线风格,支持 8、10 和 12 像素。

labex

一个以动手实操为主的学习社区。

Git Your Freedom Back: A Beginner’s Guide to SourceHut

本文(或指南)面向当前通过 GitHub 托管其 git 仓库的用户和贡献者。

本文的目标是说服开发者彻底远离 GitHub。

我将分解 GitHub 最受欢迎的核心功能,并针对每个功能提供 SourceHut 的替代方案。

希望在本指南结束时,开发者们能够尝试使用 SourceHut,或者至少开始质疑自己为何还在使用 GitHub。

Source

Code Related

The Height Enigma

一篇关于 CSS 中 height 的计算逻辑的文章,不错的交互性的文章。

摘录

但当我们告诉一个元素设置 height: 50% 时,情况就不同了:

  • 子元素说:“我想要是父元素高度的 50% ”。
  • 父元素的意思是“我想成为包含子元素所需的最小高度”。

看出问题了吗?它们试图从彼此推导出自己的大小。

这是一个永远无法解决的循环计算。一个谜中之谜。一个悖论。

因此,浏览器会忽略子元素上的 height: 50% 声明。

Source

为了让类似 height: 50% 的东西起作用,父元素的高度不能依赖于子元素的高度。

我们可以通过给父元素设置一个明确的 height 来实现这一点。

Source

记住,我们需要的是父元素的高度不依赖于子元素的高度。

这样我们才能避免循环悖论的问题。

Source

JavaScript, when is this?

一篇解释 JS 中 this 关键字的文章。

Building An Offline-Friendly Image Upload System

网络连接不佳并不意味着用户体验差。

借助 IndexedDBService WorkerBackground Sync APIPWA (Progressive Web Apps) 技术,您可以构建一个离线友好的图片上传系统,该系统会排队上传并自动重试 ⸺ 让您的用户即使在离线时也能无忧上传。

不错的思路!

Converting values to strings in JavaScript has pitfalls

作者比较了一些 JS 中将值转换为字符串的方法,指出了其中一些陷阱。

其中,最靠谱的方法是 {}.toString().call(value)

Time Travel with JavaScript

实现一个翻牌器动画的教程,挺炫酷的。

Using CSS backdrop-filter for UI Effects

关于 backdrop-filter 的使用介绍,可以实现一些背景毛玻璃效果、遮罩效果。

Good vs Great Animations

一篇关于如何做好动画的文章:

  • 注意动画的起点,让它出来的位置符合直觉 (Origin-aware animations)
  • 使用正确的缓动函数
  • 使用自定义缓动曲线,CSS 内置的缓动曲线往往不够,需要基于动画自定义,使其符合直觉
  • 基于弹簧的交互 (Spring-based interactions),可以让动画不那么生硬
  • 提高对 CSS 的了解,这里举了一个 Tab 切换过渡动画的例子 7,学到了新技巧 >w<

Camera move on scroll

作者做了一个 demo,用 three.js 绘制了一个 3D 场景,然后滚动页面的时候移动场景的视角。

文章介绍了是如何实现的,清晰易懂。

Cool Bit

Can Windows 95 Browse the Modern Internet in 2025? (10:56)

用 Windows 95 在这个时代网上冲浪,能冲得动吗 (≖ᴗ≖๑)

很多网站基本都不能用,但也有一些可用的,蛮有趣的尝试。

不知道我的网站能不能正常浏览 (つд⊂)

在复古设备上看到现代信息令人着迷。

就像你是 90 年代的孩子,偶然发现你的电脑可以访问未来。

Nic Chan

作者的这个个人网站风格很独特,整个页面是一个复古的、像素化的桌面,有趣。

The Song Painted Nature

网站通过一些不错的交互,例如滚动动画,音视频等,展示了宋代的一些书画,附带一些鉴赏说明。

可以当作是一个互联网美术馆的宋代画展 (≖ᴗ≖๑)

Why we are still using 88x31 buttons

get_dilb.gif
图5  一个 88x31 尺寸的 gif 按钮示例 (图片来源:http://thombs.com)

作者回顾了早期互联网中 88x31 尺寸大小的按钮的历史。

蛮有趣的。

摘录

如果你在现代的“小型网络”上浏览过,你一定遇到过 88x31 按钮⸺ 这是 90 年代末和 2000 年代初网站 的标志性元素,正在经历一场复兴。

尤其是 Neocities 社区,似乎真正接受了它们。

88x31 按钮在网络上有着悠久的历史,跨越了广告和个人网站的领域。

就像现实生活中的夹克徽章和按钮一样⸺ 它们小巧、多彩、易于制作和交换,一眼就能传达足够的信息来描述展示它们的网站。

Source

Yequari 写道:“我明白了。

88x31 按钮是一种有趣的方式来表达自己,展示你的网站内容。

它们是网络 1.0 文化的重要组成部分,许多人正在试图复兴这种文化。

明确一点,制作有趣的图形非常棒!

出于对过去时光的怀旧而创作艺术真是太酷了。

但 88x31 的格式就是不合适。

它极其有限且不实用。

如今的电脑屏幕拥有的显示空间是设计 88x31 按钮时的两倍多。”

Source

但最终我必须得出结论,无论你喜欢还是讨厌,88x31 按钮都是好的。

它们占据了一个独特的位置,这个位置源于它们在早期网络上的普及,这并不是因为一场由金钱驱动的广告狂潮强加给互联网用户,而是因为它们起初是作为免费发布的按钮,可以轻松被借用、改编和有机传播。

互联网早早地接受了它们,我看不到它们会很快被放弃的迹象。

Source

The Museum Of All Things

作者做了一个程序,把 Wikipidia 变成了一个展览馆的形式,挺酷的。

如果加上一些互动就好了,例如可以在线多人一起参观,聊天讨论。

LegoGPT

LegoGPT 官方仓库,首个通过文本提示生成物理稳定乐高积木模型的方法。

Building my childhood dream PC

文章是作者修复一台 IBM 2168 并将 DOOM 游戏调到最高画质的故事。酷!

Tool | Library

GNU roff (groff)

groff(GNU roff)是一种排版系统,读取包含格式命令的纯文本输入,以生成 PostScript、PDF、HTML 或 DVI 格式的输出,或用于终端显示。

格式命令 (Formatting commands) 可以是低级排版原语、来自提供包的宏,或用户定义的宏。三种方法都可以结合使用。

fx

Terminal JSON viewer & processor.

Color Pocket

一个 Chrome 插件用于获取颜色。

prompt-kit

一些用于构建 AI 对话应用的组件。

AI 应用的核心构建模块。

高质量、易于访问且可定制的 AI 界面组件。

jules

Google 的一个编程代理。

Jules 是一个实验性的编码代理,帮助你修复错误、添加文档和构建新功能。

它与 GitHub 集成,理解你的代码库,并异步工作 ⸺ 这样你就可以在它处理任务时继续进行其他工作。

首页做得挺好看的,糖豆人的风格。

CSV to HTML Table

将任何 CSV(逗号分隔值)文件显示为可搜索、可筛选、美观的 HTML 表格。

Emacs

packages

  • casual 这个包提供了一组 UI 界面,它帮助你轻松发现和使用不常用的 Emacs 命令。
  • nyan-mode 一个 minor mode,在 mode-line 放一直会动的猫猫,替换当前的页面位置显示。
  • Predictive Mode 给出一个单词的开头,Predictive Mode 是一个 minor mode,尝试预测单词的其余部分,并为你提供合适的补全。

一些话 | 摘抄

Words Instead of Action

作为一名作家,我知道文字有时不仅感觉像是行动的对立面,更糟的是,像是掩盖无所作为的机制:政客口中的空洞姿态、静止的社交媒体口号、纪念牌上的陈词滥调 ⸺ “永不再有”“为了纪念”“我们永远不会忘记”

我希望改变能够在世界上显现出来,但我依然怀疑自己或任何人能否仅凭文字来实现这一点。

行胜于言。

On The Death of Daydreaming

一点无聊对我们有好处,所以下次当你有空闲一分钟时,不要拿起手机,要叛逆一点:做白日梦。

Source

Agents are models using tools in a loop

我开始有点抓狂,因为在这次 Anthropic 开发者大会上的每场演讲中都多次使用了“agents”这个词,但没人停下来给出一个有用的定义。

我现在正在参加“为 Agents 设计提示”工作坊,Anthropic 的 Hannah Moran 终于打破了这个趋势,说在 Anthropic:

Agents 是循环中使用工具的模型

(Agents are models using tools in a loop)

我能接受这个说法!

我很高兴终于有人说出了这句话。

另外 一篇文章 也证实了这个观点:

我和我的同事们在过去几个月一直在开发一个名为 Sketch 的 AI 编程助手。

我最感到惊讶的是,使用带工具的 LLM (Large Language Model) 的主循环竟然如此简单:

def loop(llm):
    msg = user_input()
    while True:
        output, tool_calls = llm(msg)
        print("Agent: ", output)
        if tool_calls:
            msg = [ handle_tool_call(tc) for tc in tool_calls ]
        else:
            msg = user_input()

That fractal that's been up on my wall for 12 years

有几个地方你可能会问:“你怎么知道做这件事会导致那个结果?”

答案很简单,我根本不知道这些事情会不会有什么结果,我只是心血来潮地尝试了不同的方法,这篇文章概述了坚持下来的部分。

Source

错了再错,错了再错,但越来越少,越来越少!

Source

开源与我:在一周年之际

选择是一件很重要的事情,成功是一件非常偶然的事情,成功需要好的选择,但有了好的选择不一定会成功。

Source

The real value isn’t in the code

所有的价值都储存在团队、逻辑和设计中,而代码本身几乎没有多少价值。

Source

多媒体

Music

薛凯琪 - 《Tenacious》

5832909185477185.jpg?param=177y177
图6  《Tenacious》专辑封面 (图片来源:网易云音乐)

每日推荐听到的薛凯琪的歌,顺便听了听歌曲对应的专辑。

最喜欢里面的《F.night》,她说的粤语很好听,正如评论区说的,她有一种轻熟迷人的声音,蛮适合夜里听。

复原》这首也不错,其中《告别我》是方大同作曲,又嗑到了。

袁娅维 TIA RAY - 《T.I.A》

109951167915906885.jpg?param=177y177
图7  《T.I.A》专辑封面 (图片来源:网易云音乐)

也是在每日推荐里面听到的,最开始听到的是《直接》,在一段相对缓慢的前奏后,接着旋律变得很有节奏感,也很好听。

喜欢她的歌声,专辑的风格似乎是 Neo-Soul,我喜欢。

正如专辑封面看到的,她的姿态,笑容,歌曲风格也是那种自由,恣意的感觉。

里面的《卑鄙》是方大同作词、作曲、编曲,编曲和他的《危险世界》给我的感觉很像。

虽然大同不在了,但有时还能从别人的专辑里看到他的身影。

惊蛰乐队 - 《219》

这张专辑是乐队在 219 公路沿途旅游后的创作。

流浪,我们从流浪开始,一切都是自由的。

我们的灵魂从闹市来到旷野,寻找属于我们的出口。

在这期间,我们感受、寻找、想象、放开、融合……

我们的身体融入自然,并且成为其中的一部分。

古老的山风吹过,穿过我们的身体,野生的力量让我们平静的脉搏在呐喊……

正如他们在专辑里描述的,专辑给人的感觉也是一种在路上的感觉。

洱海》中他们采集了很多在洱海的声音,浪、海鸥、车铃铛……

鲁朗小镇》这首则是一种后摇的风格。

最喜欢的是专辑的第一首《满天星》。

Rainbow - 《Ritchie Blackmore's Rainbow》

Rainbow 乐队最早的一张专辑 (1975-01-01),上面分享的 Machinist and Machine 中作者提到的,就找来听了听。

专辑属于金属摇滚(?),我也挺喜欢的。

其他专辑 & 单曲

整理了一下 HOPICO LINE 推荐的专辑,还没仔细听,这周听听:

另外最近还听到一些喜欢的单曲:

  • Bialystocks - 《差し色》

    明日は気の向くままに

    一直保持着对于明天的兴趣

    いつもの部屋を驚きでみたせば

    即使是寻常的房间 也用惊喜去填满的话

  • 张学友 - 《在你身边》

    副歌的旋律很喜欢。

    你的温柔让我逐渐深陷

    每天总是期待看你一遍 哦

    爱的感觉这么强烈

    我怎能否决

    不管天涯海角

    我要在你的身边

脚注:

1

live 听歌和录音版本不一样,录音版本很高的音可能会被调整,稍微压下去一些,但是 live 现场,没有那么多的修饰,音响也很大声,听起来就很嘹亮。

2

他们还戏称是 新裤子乐队

3

很多时候虽然是听歌,但都是当作背景乐。

4

如果你好奇如何找 live,可以试试秀动 APP,偶尔翻一翻,看到有自己喜欢的就可以去听听看;或者一些听歌软件的歌手页也会有相关资讯。

5

不过 live 的声音都很大,不要离音箱太近,如果你听了会产生耳鸣,或许应该少去 live,或者戴耳塞

6

如果你不知道什么是 RSS,可以看看我写的 About Feeds

7

这篇文章更多是关于 clip-path 的,学到了很多,推荐一读!

8

例如方大同的《15 live》。

Author: Spike Leung

Date: 2025-05-26 Mon 00:00

Last Modified: 2025-05-29 Thu 11:40

License: CC BY-NC 4.0