Skip to main content

Zine#48

🎵 Sometimes It Snows in April - Prince

News | Article

The 'Paperwork Flood': How I Drowned a Bureaucrat before dinner. by Robert Kingett

作者是位盲人作家,政府每年都要问他一次「你还残疾吗?」(真让人讨厌啊) 从而决定是否继续给他发放福利金。

他需要给相关部门寄送证明资料,证明自己依然失明,他打电话找到了工作人员,提议通过电子邮件将相关证明发送给他,完成验证。但工作人员明知他是个盲人,却还是要刁难他,要他通过信件寄送,或者发传真。于是他整理了 520 多页的文档通过传真发送过去,让对方传真机罢工了,大快人心。

如果我是那个工作人员,我能否做到变通,而不是死守规则呢?

Writing First, Tooling Second by Susam Pal

渴望建立个人网站的作者们总是长久地纠结于该使用哪种博客引擎、选择哪种静态网站生成器、挑选哪种模板语言等等。我认为,在你的网站上发表至少五篇文章之前,这些都不重要。先写纯 HTML,以后再操心工具的事。

确实,很多作者花很多时间捣鼓博客的样式、构建等,但博客文章却寥寥无几。除非本身就是为了学习技术捣鼓博客构建,否则更重要的还是多写些内容,当写得足够多,能够保持一定频率输出的时候,再慢慢考虑构建、优化样式。很多时候,直接写 HTML 就够了。如果不想写 HTML,也可以用 Markdown 或任何喜欢的纯文本格式编写,用类似 Pandoc 的工具转换成 HTML。

如果你不熟悉 HTML,推荐看 HTML is for people

总之,如果创建博客的的初衷是写文章,那就先写上几篇,再考虑其他事情吧。 (发现作者也用 Emacs,他的 Emacs for You (Emfy) 可以作为一份 Emacs 入门参考配置,解释也很详细。)

You should probably tell your audience what your blog posts are about as early as possible by Viktor

在网上发表文章时,无论主题多么冷门,总会有一些人对你的话感兴趣。阻碍他们发现你作品的主要原因是他们需要知道它的存在。含糊的标题和冗长散漫的开头,对提升可发现性毫无帮助。

Source

作者建议写文章应该尽早地明确文章的主题,告诉别人你要讲什么,而不是写了很大一段都还没交待清楚,让读者云里雾里。很多读者可能没那么多的耐心看完全文,如果开头的内容就给人感觉很绕、冗长,可能读者不会继续看下去了。

不过,这不是写文章的唯一方式,但在某些文章类型上可以应用一下,例如教程、技术类文章,开头可以先给读者一个清晰的脉络,再一点点扩展。

另见:Rules for Writing Software Tutorials by Michael Lynch

Use plain text email

文章建议用纯文本发送邮件(为什么纯文本比 HTML 更好),列出了一些推荐的邮件客户端,以及指导设置这些客户端使用纯文本发送。

此外,文章还分享了一些邮件礼仪:

  • 在适当的行宽换行,例如 72 个字左右,不要让一行的内容太长(一些邮件客户端会自动换行)
  • 引用回复的时候,引用应该在上面,而不是下面。

    答:因为它颠倒了对话的逻辑顺序。
    问:为什么不建议在邮件顶部回复?

Thank you for reading by Ginoz

如今很多人都不愿意看长文,而读者愿意花时间把自己写的文章看完,确实可以和读者说一声「谢谢」。谢谢你来看我的博客,谢谢你阅读我的内容 :) 常来呀!

摘录

对我而言,当文字被他人阅读时,写作才算完成。读者和作者同样重要。两者缺一不可,文字才能真正实现其在这个世界上的使命。

当然,我并不是说为自己而写没有意义。我也绝非在贬低那些尚未被阅读、或可能永远不会被阅读的文字。两者并非孰轻孰重。有些文字写出来就是为了不被阅读的。因为写作的本质始于我们,也为了我们。它是我们内心的一种需求,是灵魂的催化剂,是一种自我表达的方式。被阅读仅仅是这个过程的另一部分,一个可能永远无法完成的部分。而这也没关系。

被阅读是一种特权;大多数时候,这关乎运气。

Source

It would be nice to know If you’re changing your domain (Sam, are you there?) by Ginoz

作者变了域名,想起一些订阅了 RSS 的读者可能不知道,很可能他们 RSS 阅读器里只剩下一个失效的链接,于是有感而发的一篇文章。

域名是你在互联网上的一个地址,如果可以的话,最好不要变,不然别人通过域名就再也找不到你了,那些基于原来域名的链接也都失效了。如果非要变更,那就提前通知一下你的网上邻居吧。如果原来的域名还是属于自己,也可以考虑做一下重定向。

文章里作者还想起了一个失去联系的博主 Sam,而 Sam 看到作者的文章后,告诉了作者他博客的新地址,双方又联系上了,可喜可贺。 Sam 的文章 i want to eat the music 我也蛮喜欢的,是一篇关于黑胶唱片的文章,Sam 分享了他为什么喜欢黑胶,以及推荐了几张他喜欢的专辑,Long Season - FishmansLove in Us All - Pharoah Sanders 这两张我也喜欢。

Interviews with the Computer Underground - Episode I: Santiago Roland, Administrator of Undernet.uy by Soldan

undernet.uy 是一个自托管、自管理的社区服务器,文章采访了其管理者 Santiago Roland,关于 undernet.uy 的创建缘由、运行情况。

文章是发布在 421 上的,这是一个刊物,涉及文化、技术、哲学、现实生活等方面,他们有三个主张:

  1. 独立思考
  2. 低科技,高生活(在采用每项技术前对其进行评估;当复杂性毫无益处时,宁可选择简单;并理解更好的生活并不需要任何事物的最新型号)
  3. 数字自主

蛮有趣的刊物,里面也有大量有趣的信息。例如我从 You Already Pay for Internet, Don't Pay for the Rest 知道了 Soulseek,一个点对点 (peer-to-peer) 模式的音乐下载客户端。

摘录

[..] 但甚至在那之前,大约 2010 年,Gmail 被曝出通过阅读邮件来投放定向广告。这真的让我很困扰;这是对通信秘密的侵犯,哈! Google 阅读你所有的信息,然后承诺会忘掉一切。但他们仍然向你投放定向广告! 2011 年,我决定停用 Gmail,并在一个没人知道的服务器上注册了邮箱:lavabit.com。那是一个承诺服务器端加密并保证不转卖数据的邮件服务。有一天,我试着登录邮箱,结果网站挂了。发生了什么? Snowden在那台服务器上有个账号! FBI 找上 Lavabit 的老板,要求提供斯诺登账号的数据。但老板是个德州人,Ladar Levinson,那种疯狂的自由派美国佬,满口 「这是一个自由的国家」,据他所说,他什么都没交。那是我第一次看到系统管理员为用户挺身而出,哈!就在那时,我意识到我必须放弃在任何总部位于美国的服务上开户的念头,因为同样的事情随时可能发生。

但正因如此,解决方案随之而来,几乎是不言而喻的:我们需要拥有自己的服务。如果他们想来没收服务器,就必须破门而入。这就是 Undernet.uy 的起源。

Source

关于「开辟自己的有机花园」与「去超市买食物」在政治和哲学层面的差异,我真的不需要赘述太多。当然,超市更方便;一切都是为了你的舒适而设计的:有空调,一切都闪闪发亮且包装精美,简直就像散步一样,毫不费力,这种反进化的方式让人异化。获取食物本是艰苦的工作;在花园里,你必须流汗,你得耕作土地,面对蚂蚁、害虫、干旱、冰雹等各种问题,而当你去超市时,你会忘记这些。区别在于,在一种情况下,你和食物之间隔着一个资本主义体系;而在另一种情况下,只有你和食物。重新建立与土地的联系(这是选择这种更自然生活方式的人所珍视的),类似于重新建立与最初那个去中心化且真实的互联网的联系。我认为,如果你想找回曾经那种互联网的感觉,唯一的办法就是在家里、图书馆、社区或任何地方,自行托管你自己的「服务器 ⸺ 有机花园」,让资本主义尽可能少地触及它。

Source

扫清障碍,当个自私的利他者 by SouthFox

文章记录了作者一些博客可访问性的优化。

世界上有也有很多视力障碍的人在使用计算机、手机,博客设计、应用设计时不妨多考虑一下可访问性,照顾这部分用户。

另见: How the same content always has multiple different versions by Diana Khalipina

Diana 用同一个页面元素,展示了当用户存在不同障碍时,这些内容是如何被感知的。

理解无障碍设计意味着要明白内容并非静态的:它会经过视觉、认知、注意力、环境、疲劳度、语言和情感的过滤。除非我们有意识地针对这些差异进行设计,否则我们就在无意中决定了谁能快速理解,而谁必须费力挣扎。

Source

How Do We Get Developers to Read the Docs by Ibrahim Diallo

这篇文章主要是关于 API 文档的,API 文档主要面向两类读者,一类是 API 的使用者,一类是 API 的维护者。对于使用者来说,他只需要知道怎么用,他不太关心背后的细节;对于维护者,他会关心更多为什么,希望尽可能多地了解 API 的设计细节,从而避免出错。两者对于文档的需求是不同的,使用者期望的是清晰简洁的文档,快速知道 API 的作用、需要什么参数、用例;维护者则期望更多技术细节,API 是怎么设计的、如何变迁的、为什么需要某个参数。一个糟糕的文档是企图平等地服务于这两类读者,结果就是,对于使用者来说不够简洁,不能快速浏览;对于维护者来说又不够深入和严谨。

作者认为,对于使用者,最好的文档首先是 API 本身,保持 API 的一致性,遵循清晰且可重复的模式,让用户可以推断 API 的使用。例如如果存在一个这样的 API /users/orders/1234/cancel ,如果设计的好的话,用户可以推断,可能也存在一个 /users/orders/1234/update API。其次,在写文档的时候要保持克制,不要阐述过多的细节,用户不需要知道你为了兼容旧版本的 API 做了什么,你只要告诉他「兼容旧版本」就足够了。作者的这句话我觉得讲得很精辟:「就像你不会为了解释每一行代码而写注释一样,文档也不会从过多的信息中获益。(Source)」

作者的建议是将额外信息折叠起来 (例如利用 <details>),这样文档可以保持简洁,让使用者得以快速浏览获取信息;对于维护者,他们可以展开折叠部分,了解更多细节。而在文章组织上,也采取由浅入深的结构,先解释是什么,接着是怎么用,最后才是为什么,而「为什么」这个部分还可以折叠起来。作者又来了一个精辟的比喻:

把这想象成一个设计良好的错误信息。一条好的错误信息会用通俗易懂的语言告诉你出了什么问题。一条极佳的错误信息还会包含可展开的堆栈跟踪,但它不会先向你展示堆栈跟踪。

你的文档也承担着同样的工作。先给人们他们正在寻找的答案,然后为那些愿意深挖的人提供深度内容。

Source

另外考虑将给维护者看的内容拆分到别的文档里,通过拆分,可以保持使用者文档的简洁,而在编写维护者文档时也可以写得很深入,不用去考虑初学者。

文档的目标不是完整性。完整性是你写给自己的,为了让自己觉得完成了工作。文档的目标是在正确的时刻,将正确的信息传递到正确的人的脑海中。

Source

以我自己为例,我之前写过一篇关于 Emoji 正则匹配的文章,你可以对比一下前后两个版本:

在归档版本,关于「Unicode character class escpae」、一些 String 的相关方法是直接呈现在正文的,看起来内容很多,但会显得比较杂乱。这些属于补充信息,在当前版本里我放到了 <details> 里,读者感兴趣的话可以自己点开看,减少一些干扰。另外如果有人点进这篇文章,大概率是希望直接得到一个答案,而不是看我一顿分析,所以我在文章开头就给出了答案,如果读者只需要一个答案就可以关闭页面走人了,如果愿意了解背后的细节就可以继续往下看。

On screwing up by Sean Goedecke

工作中可能会出现你「搞砸」了某些事情的时候,此时可能会有很大的情绪波动,比较常见的是给自己找借口掩盖事实,或者坦白错误、自贬身价并乞求原谅。不管是那种情绪,都不要在情绪冲动的时候做什么,先花一些时间让情绪平复下来,再理性地行动。

至于行动,则是客观地、实事求是地描述问题,及早告知相关人员,及早处理问题,总之不要掩藏问题。

根据我的经验,科技公司的经理会原谅错误,但他们不会原谅被当成傻瓜。特别是,他们不会原谅被剥夺了关键信息。

Source

Humanities in the Machine by Blain Smith

文章分享了很多奠定了现代计算基础的人的故事,包括 Tony HoareAda LovelaceEdsger W. DijkstraAlan TuringGrace HopperDennis RitchieBrian KernighanRichard Stallman。这些都人都极具人文素养和人文精神,而不局限在计算机领域。

文章建议技术人员多涉猎人文方面的内容,除了关心「是否有效」,还应该关心「是否美好」。

摘录

那些奠定计算基础的人们拥有一种超越技术才华的共同特质。他们对清晰度的追求不仅限于代码,还延伸到与他人的沟通中。他们意识到自己的工作存在于更广阔的背景下,他们构建的系统将被那些生活受其影响的人们所使用。他们不仅问「它是否有效」,还问「它是否美好」,并且他们明白「美好」的含义远不止于功能上的正确。

这种性情不需要学位,但确实需要超越偶然的兴趣。周末读一本哲学书只是爱好。而投入严肃且持久的时间去钻研文学、历史、伦理,去参与人类数千年来关于如何生活得更好、如何公正对待彼此的漫长对话,则完全是另一回事。它会改变你审视问题的方式,改变你思考问题的方式,改变你愿意发布的产品,以及你拒绝妥协的底线。

Source

你所处领域的奠基人们阅读哲学、撰写散文、学习古典语言,并对意识、美以及人类思维的本质提出疑问。他们做这些事并不是因为有闲暇时间,也不是因为有人强迫。他们这样做是因为他们隐约或明确地意识到,要建造值得人类信任的机器,必须理解「人」意味着什么。

这种理解不会来自另一个教程、另一个业余项目或另一个 Hacker News 帖子。它将来自长期、缓慢、有时甚至艰难的人文探索。去读哲学吧。读文学。读历史。研究人类如何思考伦理、权力、沟通,以及如何构建经得起时间考验的事物。沉浸在这些思想中,直到它们重塑你对待自己工作的方式。

孕育了洛夫莱斯的「诗意科学」、霍尔的「古典思维」、迪杰斯特拉的手写散文以及霍珀对「计算机必须与人交流」的坚持的这一传统并未消亡。但随着这一领域与其根源渐行渐远,它正一代代地衰落。你有机会扭转这一局面。这不一定意味着重返校园,而是要足够认真地对待人文科学,让它们进入你的职业生活、你的设计决策、你的代码审查,以及你与那些将使用你所构建之物的人们的对话中。

我们制造的机器反映了制造者的思想。如果这些思想仅由技术知识滋养,那么机器在技术上将是称职的,但在人文精神上却是空洞的。如果这些思想开阔、充满好奇心,并植根于人类思想的悠久传统,那么机器将会变得更好。它们将不负那些依赖它们的人们。

选择权一如既往,掌握在你的手中。

Source

Others

Cool Bit

Land Of Lisp by Conrad Barski

Land Of Lisp 是 Conrad Barski 写的一本 Lisp 教程,这个网站是用来推销这本书的,蛮有趣的。

网站一开始是个视频,里面的歌词蛮有趣的:

Now I eat parentheses for breakfast.
And if my program isn't done,
I eat parentheses for lunch.

如果视频不足以打动你,作者还制作了漫画,讲述人类被 Bugs 征服,无论用 Java、C# 还是 ruby 等语言都无法击败 bugs,但在「Land Of Lisp」有强大武器可以击败任何 bugs,于是主角去「Land Of Lisp」寻求帮助。漫画里穿插了很多 lisp 的语法介绍,蛮有趣的。

除了 Land Of Lisp,还看到一本关于 Lisp 的书: The Genius Of Lisp

The art of interacting incorrectly by Isabel Fish

马年快乐,来欣赏一下各种神奇的马。

错误交互的艺术 (The Art of Interacting Incorrectly) 是一个通过颠覆技术使用方式,挑战我们与技术之间无缝交互的项目。该项目借鉴了 Eadweard Muybridge 的 运动中的马 (A Horse In Motion),通过非常规方法创作出各种赛马奔跑的动画,探讨了干扰技术如何能促进更具思考性和参与性的互动。通过将使用笔记本电脑的熟悉场景以陌生感呈现,其旨在为我们与日常数字化工具的体验重新注入一种新奇感。每一段动画都融合了所使用介质的局限性、独特性和质感。

你也可以来 画马 :P

甩出一杆,然后把世界关在门外 by Another Dayu

赛博钓鱼,hh。游戏画面蛮好看的。

LOADING CARTRIDGE: THE_PURR_PARADOX.EXE by Robert Kingett

以文字游戏的形式描述某段时间的经历,这种写作形式蛮有趣的,以后可以试试。

鹅玉

鹅玉的博客,喜欢她博客的设计,里面有很多她画的插画,看起来像是手账本,又像是儿童故事书,可爱。

lok.computer

Leon Vide Coding 的一个项目,一个有点复古又有点自己风格的网页操作系统。里面的文件夹就是他在 are.na channel 中收集的各种碎片信息,有很多东西可以探索,可以作为一个网上冲浪的入口。鹅玉的博客就是从这里看到的。BTW,这是作者的博客:l3on.site

伏枥之间

也是个设计不错的博客,作者写的「漫想与杂谈」内容也很丰富。

一拉一扯,磁带行者 by SouthFox

文章记录了作者折腾磁带录制的过程,蛮酷的。作者的设备也很酷,小巧的 GPD Pocket 笔记本、透明版本的 WM-GX77 磁带机,看起来都很复古,博客样式设计也很复古。FoxThinking 系列文章也不错。

noclip.website

一个关于电子游戏关卡的数字博物馆,可以浏览一些游戏里的场景。利用它,似乎可以更容易找到 超级马力欧 奥德赛 里的隐藏关卡?

OBSOLETE SOUNDS

OBSOLETE SOUNDS 是正在消失的声音和已经灭绝的声音的集合。例如可以听到操作 Sony Walkman 的声音、冰川融化的声音。除了 OBSOLETE SOUNDS,导航上还有很多可以探索的内容。

Installing every* Firefox extension by JACK.CAB

作者安装了(几乎)所有 Firefox 插件,并对插件进行了一系列的分析。 BTW,博客首页 设计得也蛮有趣的。

MadCSS

MadCSS 是一场比赛,这次参加的有 16 位开发者,举办方会给出基础的 HTML 和目标 UI,选手只能使用 CSS 和 HTML,2 分钟构思、15 分钟实现,最后谁的实现和目标 UI 最接近谁就获胜。

决赛视频: One Last Battle (16:59) by Syntax

100 jumps

想起了微信小游戏刚流行时的「跳一跳」游戏,玩法一模一样。不过 100 jumps 难度低一点,连续 3 次获得 perfect 评级的话,还会额外加一条命。

JavaScript Hacks and Creative Coding by Martin Kleppe

Martin Kleppe 创作的一些有趣的东西,例如: WorldFire

Git Shitstorm: How to Make Any Developer Lose Their Mind by Einenlum

在你隔壁同事起身去洗手间的空隙,在他电脑上装上一个可执行文件 Git Shitstorm,然后修改 git 指令,变成 alias git='git-shitstorm && git' 。 Git Shitstorm 在 90% 的时间里都是正常的 git 操作,但有 10% 的概率会从仓库里提取内容然后提交少量改动,这会让你的同事摸不着头脑,他肯定很难发现你改了 git 命令,每次他尝试修复,也有概率触发 git-shitstorm,可以让你的同事非常抓狂,哈哈哈。

以上只是玩笑,真这么干了,被同事爆揍一顿,或者被辞退了可不怪我。为了避免被同事这么搞,离开工位的时候记得锁屏 :)

Windows 3.11 Emulator - retro computer with dial-up internet by Pieter

Windows 3.11 模拟器,厉害。

Cybercultural

网站上有一些关于过去互联网的博客文章,可以去考古。

Save Error Code 418

HTTP Code 418 是 I'm a teapot,Cool。

Tutorial | Resource

Webmention 简明指南 by Eltrac

Webmention 是一种跨站点通讯标准,常用于博客里。当你的博客链接了其他人的文章,而且对方实现了 Webmention,你就可以给对方发送 Webmention,你的内容一般来说就会显示在对方博客的对应位置上。

Eltrac 详细地介绍了 Webmention 的方方面面,如果你对 Webmention 感兴趣,推荐一看。我也写过一篇类似的: 给博客添加 Webmention

The Socratic Journal Method: A Simple Journaling Method That Actually Works by Ed Nite

Ed Nite 分享了一个写日记的方法:「苏格拉底日记法」⸺ 即用对话的形式去写日记,给自己设定一些问题,然后去回答它们。问题可以温和地引导你畅所欲言,而不必面对一片空白的凝视。

文章还分享了写日记的好处、对比了不同的介质(手写、打字、语音)的优劣。

写日记可以释放压力,因为日记只有自己能看,可以诚实地表达、尽情地释放自己的情绪。既然要释放压力,在写日记的时候就要避免去批判自己,要用积极和友好地心态善待自己,例如不要问「为什么我效率这么低?」,而是尝试问「今天是什么分散了我的注意力?明天一早完成哪件小事会让我感觉良好?」。

开创性的心理学家 James Pennebaker 为表达性写作奠定了基础,他发现最大的益处 ⸺ 如减轻压力、改善情绪,甚至增强免疫系统 ⸺ 来自诚实的表达和情感释放,而非刻板的自我分析。

当日记变成自我评判的工具时,它就失去了力量。它应该像与支持你的朋友交谈,而不是与最严厉的批评者进行绩效评估。

不管是否写日记,当心情不好的时候,安全地、诚实地把内心的各种想法和情绪都写出来、倾泻出来,都会让自己好受一些。

how to make your own blinkies and 88x31 buttons for your html site by numbpill

如果你想制作 88x31 按钮,可以看看 ☝ 这篇教程,我用 Piskel 简单制作了一个:

taxodium.ink.gif

我还收藏了 一些按钮,感兴趣可以看看。

Developing Taste by Emil Kowalski

归根结底,就是努力让自己接触到人类所做过最美好的事物,然后尝试将这些事物融入到你正在做的事情中去。

It comes down to trying to expose yourself to the best things that humans have done and then try to bring those things into what you’re doing.

Source

培养好的品味:

  1. 向领域中最好的人学习
  2. 保持好奇和思考,探究事物卓越的本质
  3. 实践,实践,再实践

Others

Code Related

Teach Yourself Programming in Ten Years by Peter Norvig

编程不是读一本《30 天掌握 xxx》就会的,需要大量的练习和试错。文章分享了一些作者自学编程的秘诀 (recipe) 和资料。

A Career in Computing by Bruce Eckel

作者经常被问到,应该学习 C++ 还是 Java?

答案是应该都去学,都去尝试和接触一下,编程是需要终身持续学习的,不是选择了一门语言就一劳永逸。

摘录

我想说的是,除非你准备好致力于终身学习,否则不要进入这个行业。有时编程看起来像是一份高薪且可靠的工作 ⸺ 但确保这一点的唯一方法就是不断让自己变得更有价值。

Source

我还认为,除了编程之外博学多才,能极大地提高解决问题的能力(就像掌握多种编程语言能显著提升编程水平一样)。我多次遇到过只接受过计算机科学训练的人,他们的思维局限性似乎比那些拥有数学或物理背景的人更大,后者往往思维更严谨,且不容易满足于「在我这儿能运行」的解决方案。

在我组织的一次会议上,其中一个议题是列出理想求职者应具备的特质清单:

  • 将学习视为一种生活方式。例如,你应该掌握不止一种语言;没有什么比学习另一门语言更能让你看清一门语言的优势和局限性了。
  • 了解获取新知识的途径和方法。
  • 研究现有技术。
  • 我们是工具的使用者。
  • 学会做最简单的事情。
  • 了解业务(阅读杂志。从《Fast Company》开始,它的文章简短有趣。然后你可以看看是否想读其他的)。
  • 你个人对错误负责。「在我这儿运行正常」不是一个可以接受的策略。自己去找 Bug。
  • 成为领导者:一个善于沟通并能激励他人的人。
  • 你在为谁服务?
  • 没有标准答案 ⸺ 而且总有更好的方法。展示并讨论你的代码,不要带入个人情感。你不是你的代码。
  • 这是一个趋向完美的渐进旅程。

尽你所能去冒险 ⸺ 最好的冒险是那些让你感到恐惧的,但在尝试的过程中,你会感受到前所未有的生命力。最好不要预设特定的结果,因为如果你太执着于某个结果,往往会错过真正的可能性。我最精彩的冒险都始于「让我们做一个小实验,看看它会带我们去向何方」。

有些人会对这个回答感到失望,并反问道:「是的,这些都很有趣且有用。但说真的,我到底该学什么?C++ 还是 Java?」我会重复这句话来挡掉这些问题:我知道在你们看来,所有的 0 和 1 应该让一切都变得确定,所以这类问题应该有一个简单的答案,但事实并非如此。这不在于做了一次选择就一劳永逸,而在于持续的学习,以及有时大胆的选择。相信我,这样你的生活会更精彩。

Source

Vanilla CSS is all you need by Rob Zolkos

作者观察了几个成熟的项目,发现它们慢慢放弃了 Tailwind,转而拥抱原生 CSS 的实现。原生 CSS 已经足够强大,它不需要额外构建,也可以让类名可读性更好(不过命名是个难题)。

文章里的 <mark> 样式很不错,抄了,你可以在 搜索页 玩玩看。如果你也用 pagefind,并且也打算使用这个样式,可以参考 我的步骤

We should all be using dependency cooldowns by William Woodruff

作者提出了「依赖冷静期」(Dependency Cooldowns),即在依赖发布之后,留一段时间,例如 7 天,先观察是存在「供应链攻击」(Supply chain security),当没有问题的时候,再去安装依赖,从而减少被攻击的风险。

另见:

Why Senior Engineers Let Bad Projects Fail by Lalit Maganti

当在公司里看到一个「烂项目」要不要去给这个项目的人提出建议?

文章中的「烂项目」是那些 UX(用户体验)复杂、解决不存在的问题、设计过度复杂、性能底下、只是为了晋升的项目。

是否提建议,要评估「烂项目」对自己和公司的影响程度;也取决于自己是否能够介入(无法介入也可以做一些防御措施);以及自己是否真的具备做出判断的专业知识。

文章中关于影响力的说法蛮有趣的,作者说把影响力当作一张储蓄卡,当你帮助别人的时候就会获得一定的影响力额度,而有些事情会消耗影响力,不同的事情需要的额度不同,只有当你的储蓄额度足以支持你的花费时,你才能影响别人。相反,如果储蓄额度为零,甚至负债,你可能还会受到很多阻碍。

How To Use Standard HTML Video & Audio Lazy-Loading on the Web Today by Scott Jehl

文章介绍了 loading="lazy" 的作用。

<video><audio> 上添加 loading="lazy" ,可以让资源延迟加载,当资源满足一些条件,例如出现在视口 (viewport) 时才加载,一方面可以让页面加载更快(因为减少了需要加载的资源),一方面也可以节省流量(例如读者没有滚动到需要加载资源的地方)。

loading="lazy" 也使用于 <img><iframe> ,合理利用可以让页面性能更好。

You can't cancel a JavaScript promise (except sometimes you can) by Aaron Harper

返回一个 永远不会 resolve 的 Promise ,await 它,然后让垃圾回收器清理掉这个挂起的函数。没有异常,没有 try/catch ,没有特殊的返回值。函数就这样停止了。

这就是 Inngest TypeScript SDK 中断异步工作流函数 的方式。

The Git Commands I Run Before Reading Any Code by Ally Piechowski

作者分享了 5 个他在阅读代码前会执行的 Git 命令,挺实用的。

摘录
  1. git log --format=format: --name-only --since="1 year ago" | sort | uniq -c | sort -nr | head -20

    找到过去一年,改动最频繁的 20 个文件。

    如果发现一个没人愿意负责的文件出现了高频变动,那你就知道这里大概是有个坑了,可能积累了大量的负债。

  2. git log -i -E --grep="fix|bug|broken" --name-only --format='' | sort | uniq -c | sort -nr | head -20

    和第 1 条命令类似,但过滤了包含 bug 相关关键字的提交。

    如果第 1 条命令和第 2 条命令得到的文件有重合,那说明那个文件风险很高,一直在修补,但从未消停。

  3. git shortlog -sn --no-merges

    按提交次数排名的每一位贡献者。

    每一位贡献者按提交次数排名。如果某个人占了 60% 或更多,那就是你的 ⸺ 「公交因素」(bus factor)。如果他们在六个月前离职了,那就是一场危机。如果总提交记录中的头号贡献者没有出现在最近 6 个月的时间窗口内( git shortlog -sn --no-merges --since="6 months ago" ),我会立即向客户指出这一点。

    我还会观察尾部数据。如果有 30 位贡献者,但去年只有 3 位活跃,说明构建这个系统的人并不是现在维护它的人。

    Source

  4. git log --format='%ad' --date=format:'%Y-%m' | sort | uniq -c

    按月统计的代码提交次数,看看项目是否正在消亡。

    稳定的节奏是健康的。但如果单月提交次数下降了一半,那意味着什么?通常是有人离职了。如果曲线在 6 到 12 个月内持续下滑,说明团队正在失去动力。周期性的峰值后紧跟着沉寂的月份,意味着团队是在分批发布,而不是持续交付。

    Source

  5. git log --oneline --since="1 year ago" | grep -iE 'revert|hotfix|emergency|rollback'

    回滚和热修复的频率。

    一年几次是正常的。每隔几周就出现一次回滚,意味着团队不信任其部署流程。这是更深层次问题的证据:不可靠的测试、缺失的分段环境(staging),或者部署流水线导致回滚操作异常困难。零次也是一种信号:要么是团队非常稳定,要么是根本没人写描述性的提交信息。

    Source

    除了这些命令外,如果是从 zip 包获取的 Git 仓库,最好检查一下 .git/config ,看看有没有奇怪的配置,例如 core.fsmonitor 可以让你在执行 git 命令的时候,执行任意指定的程序;也可以检查一下依赖项,看看有没有奇怪的依赖。

How I remember link and image Markdown syntax by Lynn Fisher

作者分享了她是如何记忆 Markdown 的链接和图片链接语法的:

利用谐音:「Put the path in parentheses.」既然链接在括号里,那描述文字自然就只能在方括号里了。而拍照的时候,往往会大喊一声「茄子! (Cheese!)」,所以图片就在前面补一个 ! 就好了。

我也想了一个:

Markdown 链接是先写方括号还是括号呢?我想到「方括号」里「括号」两个字是在「方」的后面,所以应该先写方括号,再写括号。链接中必不可少的是 URL,URL 放哪里呢? 放「括号」里呀,所以是放到后面的括号里。

An in-depth guide to customising lists with CSS by Richard Rutter

一篇关于 list 样式的教程。顺手改了一下博客中 list 的 marker 的样式,颜色变淡了一些。

Nice Select by Adam Argyle

作者整合了很多现代的 CSS 特性去自定义 <select> ,做出来挺好看的,也可以了解到很多相关的 CSS 特性。

Building Typographic Scales in CSS with :heading(), sibling-index(), and pow() by Always Twisted

原来标题的字号大小有排版比例,学习了。

摘录

排版比例使用的比例(大多)借鉴自音乐音程。这些比例创造了「和谐」的比例感,因为它们基于同样的数学关系,而正是这些关系让优秀的音乐听起来悦耳。

常用比例:

  • 小三度 (1.200) - 细微
  • 大三度 (1.250) - 均衡
  • 纯四度 (1.333) - 略显张力
  • 纯五度 (1.500) - 醒目
  • 黄金比例 (1.618) - 非音程,但常用

这些比例是指数级的,而非线性的。每个标题级别都是在前一个级别的基础上乘以比例,而不是相加。

以下是使用大三度比例 (1.25) 时,各标题级别的指数级增长情况:

h6: 1rem × 1.25⁰ = 1rem
h5: 1rem × 1.25¹ = 1.25rem
h4: 1rem × 1.25² = 1.563rem
h3: 1rem × 1.25³ = 1.953rem
h2: 1rem × 1.25⁴ = 2.441rem
h1: 1rem × 1.25⁵ = 3.052rem

其模式为:基础大小 × 比例 ^ 指数。

这就是 pow() 发挥作用的地方。

Source

Folded corner with CSS by Kitty

文章分享了如何实现图片折角效果,通俗易懂。(猫猫可爱捏)

Trying to Make the Perfect Pie Chart in CSS by Juan Diego Rodríguez

利用现代 CSS 特性,以及少量 JS 实现饼图,厉害。

You can use newline characters in URLs by Daniel Lemire

原来 URL 里可以插入换行符,浏览器在解析的时候会将这些非法字符移除。

另见 Based base64 (now with more steganography!) , Jordan Matelsky 利用这个特性,在 URL 上塞了一张 ASCII 图片,酷~

text-indent CSS property by MDN

我偶尔会用 text-indent 让段落首行缩进两个字,原来除了设置缩进长度,还有两个关键字 each-linehanging ,不过我还没想到它们的应用场景。

scrollbar-color CSS property MDN

使用 scrollbar-color 可以设置滚动条的颜色,顺便改了一下 博客的滚动条颜色

<search>: The generic search element by MDN

我在 搜索页 用了这个元素。

Modern CSS snippets. Stop writing CSS like it's 2015. by Naeem

大人,时代变了,用点现代 CSS 吧 :P

文章罗列了许多 CSS 的新旧写法,整体来说新写法会更简洁。

分享几个我觉得不错的

另见 Modern CSS Solutions by Stephanie Eckles。

Using CSS animations as state machines to remember focus and hover states with CSS only by Patrick Brosset

作者通过 CSS 动画,不依赖任何 JS,使得元素能够记住 focus 和 hover 的状态。

大致原理

利用了两个动画属性:

  • animation-play-state 控制动画的运行状态
  • animation-fill-mode: forwards 让动画结束之后,保持在结束时候的状态
.remember-focus {
  animation-name: remember-focus;
  animation-duration: .00001s;
  animation-timing-function: linear;
  animation-fill-mode: forwards;
  animation-play-state: paused;
}

/* 等效简写 */
.remember-focus {
  animation: remember-focus .00001s linear forwards paused;
}

动画设置了极短的 持续时间,这样状态的变化看起来就是马上发生的;初始的时候,动画是 暂停 的。当 focus 或者 hover 的时候,让动画运行,因为动画时间很短,动画会马上结束,并保持在结束状态。

.remember-focus:focus {
  animation-play-state: running; (running)
}

动画可以使用很多 CSS 属性,例如:

@keyframes remember-focus {
  from {
    background: red;
  }
  to {
    background: blue;
  }
}

很佩服作者能够想到这样的思路!

What Is CSS Containment and How Can I Use It? by Harry Roberts

contain CSS property 可以将布局、重绘、尺寸计算等动作限制在某个元素范围內,合理的利用可以提高性能。

JPEG compression by Sophie Wang

一篇解释 JPEG 压缩原理的交互式文章。

JPEG 是一种巧妙的图像压缩算法,它利用了人类的感知偏差和自然图像的结构。它在编码前进行基变换,使得重写后的图像表示集中了人类最敏感的信号 (亮度),从而可以丢弃剩余的细节,而不会严重降低视觉保真度。

Source

互联网上最常见的用户界面是什么?重新设计 Turnstile 与质询页面

没想到最常见的用户界面竟然是 Cloudflare 的人机验证,确实经常见到,文章分享了这个界面的设计过程。

摘录

用户体验设计中最具影响力的书籍之一是 Steve Krug 撰写的《Don't Make Me Think》。核心原则非常简单:用户试图解读、理解或解码界面的每一刻,都会产生一次摩擦。而摩擦,尤其是在令人沮丧的时刻,会导致用户放弃。

Source

Shades of Halftone by Maxime

交互式文章讲解如何实现半色调图像。

The Value of z-index by Amit Sheen

文章分享了几个很不错的组织 z-index 的方法。

  1. 使用 CSS 变量命名 z-index。这样当需要给 toast 设置 z-index,就直接用 var(--z-toast) ,而不用纠结具体数值。
  2. 对于同一个 z-index 层级內的元素,考虑用 --z-top--z-bottom 去进一步做区分。
  3. 使用相对值: calc(var(--z-overlay) - 1)

另见: Unstacking CSS Stacking Contexts by Gabriel

Evan You - State of Vue 2026 (37:25) by Vuejs Amsterdam

了解一下 Vue 相关动态。

Understanding the fundamentals of CSS Layout

非常棒的 CSS 布局入门文章,收获颇多,推荐一看。

Virtual Scrolling for Billions of Rows — Techniques from HighTable by Sylvain Lesage

文章分享了 hyparam/hightable 的实现细节,如果需要实现表格/列表的虚拟滚动可以参考一下。

The Too Early Breakpoint by Ahmad Shadeed

多设置几个媒体查询的断点 (Breakpoint),让变化更平滑一些。

AI Related

My fireside chat about agentic engineering at the Pragmatic Summit by Simon William

Simon William 在 Pragmatic 峰会上关于代理工程(Agentic Engineering)的对话,涉及 AI 采用的阶段、测试、代码质量、精神疲劳等话题。

Comprehension Debt - the hidden cost of AI generated code. by Addy Osmani

理解债(Comprehension debt)是指由于过度依赖 AI 和自动化,而对人类智力和记忆造成的隐性成本。

[…]

理解债是指系统中的代码总量与人类对其真正理解程度之间日益扩大的差距。

Source

AI 带来的改变是成本(大幅降低)、速度(大幅提高)以及人际管理开销(基本归零)。而始终不变的,是需要具备深厚系统背景的人,来对代码库的实际运行逻辑及其背后的原因保持连贯的理解。

Source

降低代码生成的成本,并不意味着可以廉价地跳过理解过程。理解代码本身就是工作的核心。

Source

Thoughts on slowing the fuck down by Mario Zechner

LLM 可以快速地产出代码,如果一味追求速度,可能也在快速地积累代码负债。作者建议慢下来,参与架构、API 的代码实现,而不是全部委托给 LLM,从而保持对代码库的理解和掌控感。

摘录

机器 (Clanker) 与人之间有一个更重要的区别。人是瓶颈。人无法在几小时内吐出 2 万行代码。即使人频繁犯错,每天能引入代码库的错误 (booboos) 数量也是有限的。这些错误累积的速度非常缓慢。通常,如果错误带来的痛苦太大,厌恶痛苦的人类就会花时间去修复它们。或者那个人被解雇,由别人来修复。这样痛苦就消失了。

Source

显然,将任务委托给智能体并没有错。好的智能体任务具有几个共同属性:它们可以被限定范围,这样智能体就不需要理解整个系统;闭环可以完成,也就是说,智能体有办法评估自己的工作;输出不是任务关键型的,只是一些临时工具或内部软件,不涉及任何人的生命安全或收入。或者你只是需要一个「小黄鸭」来碰撞想法,这基本上意味着将你的想法与互联网的压缩智慧和合成训练数据进行碰撞。如果满足以上任何一点,你就为智能体找到了完美的任务,前提是你作为人类是最后的质量把关人。

[…]

核心在于:让智能体去处理那些枯燥乏味、无法让你学到新知识的琐事,或者去尝试那些你平时没时间顾及的各种方案。然后,你再评估它的产出,采纳其中合理且正确的想法,并完成最终的实现。当然,最后一步你同样也可以交给智能体来做。

Source

我想建议的是,慢下来才是正道 (slowing the fuck down is the way to go)。给自己留出思考的时间,去想想你到底在构建什么,以及为什么要构建它。给自己一个说「不」的机会 ⸺ 也许我们根本不需要这个功能。根据你实际的代码审查能力,为自己设定一个每日允许智能体生成的代码量上限。

任何定义系统灵魂 (gestalt) 的东西,比如架构、API 等等,请亲手编写。或许可以开启自动补全来找回一点怀旧感,或者与你的智能体进行结对编程。让自己沉浸在代码中。因为亲手编写或亲眼见证代码一步步构建的过程所产生的「摩擦感」能让你更好地理解自己想要构建什么,以及系统的「手感」如何。这正是你的经验和品味发挥作用的地方,也是目前的尖端模型尚无法取代的。慢下来,去感受这种摩擦带来的阵痛,正是你学习和成长的契机。

Source

用好你的 jj - 重新思考 Agent 时代的版本控制 by onevcat

作者认为 jj(Jujutsu) 更适合 Agent 在本地开发使用,因为 jj 可以减少很多 git 的心智负担,将更多注意力放在产品构建上,而不是版本管理上。文章对比了几个场景下 git 和 jj 的差异,凸显了 jj 本地开发的优势,也分享了作者的一个 jj 相关的 skill。

Stop Over-thinking AI Subscriptions by Peter Steinberger

时间是唯一不可再生、无法回收的资源。每月 200 美元的 Claude Pro 订阅,是我目前所知「购买」额外时间最廉价、最高效的方式 ⸺ 这些节省下来的时间所产生的复利增长,正以远超任何传统 SaaS 项目的效率持续回馈。

Source

Neurotica, @schwarzgerat.bsky.social

所谓「垃圾内容」(slop),是指那些消耗他人阅读精力远超其创作精力的产物。当我的同事直接把 Gemini 的原始输出发给我时,他并不是在行使创作自由,而是在无视我时间的价值。

What is agentic engineering? by Simon William

既然我们已经有了能够编写可用代码的软件,那么我们人类还剩下什么可做的呢?

答案是:还有太多事情要做。

编写代码从来不是软件工程师的唯一活动。这门手艺的核心一直是弄清楚该写什么代码。任何给定的软件问题都有数十种潜在的解决方案,每种方案都有其权衡。我们的工作是权衡这些选项,并找到最适合我们特定环境和要求的方案。

Source

编程的本质是思维,不是语言 by Andy Stewart

编程其实是一种思维方式,也是一种沟通方式。你是用汇编,还是用 C 语言,还是用自然语言去指挥计算机,关系都没有那么大。关键在于,你有没有真正的编程思维。你能不能把问题拆开,能不能描述边界,能不能发现错误,能不能一步一步把系统构建出来。如果这些能力没有,那就算你手写汇编,也未必是一个真正会编程的人。如果这些能力有了,那你不管是写 C,写 Python,还是和 AI 对话,本质上都是在编程。所以我越来越觉得,未来真正重要的,不是你会不会某一种语言,而是你有没有计算机的编程思维。

Source

AI makes you boring by Viktor

向 AI 模型输入提示词并不等同于阐述观点。你虽然能得到生成的结果,但就构思而言,这些结果是可有可无的。真正重要的是思考的过程。

Source

如果是和 LLM 对话,探讨某个问题,从而加深或拓宽自己对问题认识,我想 LLM 还是有帮助的。

The machine didn't take your craft. You gave it up. by David Abram

我从事这一行已经很多年了,工作中最困难的部分从来都不是敲击键盘写代码。我最头疼的始终是理解系统、调试那些莫名其妙的错误、设计在高负载下不会崩溃的架构,以及做出能避免日后数月痛苦的决策。

这些问题都不是大语言模型所能解决的。它们可以提供代码建议、帮助编写样板代码,有时还能充当探讨想法的参谋。但它们并不理解系统,它们的「脑子」里没有上下文,更不知道为什么某个决策是对还是错。

最重要的是,它们不会做选择。这部分工作仍然属于你。软件开发的真正核心,也是体现个人价值的地方,在于从一开始就知道应该构建什么,以及为什么要构建它。

Source

真正的危险在于人们停止思考。真正的陷阱是工程师让工具去承担本该由他们自己构建的认知负荷 ⸺ 这是理性的自我放弃。

Source

Don't Make Me Talk to Your Chatbot by Ray Myers

下次当你按下 ^V 粘贴时,请停下来问问自己:「我是在让别人被迫与我的聊天机器人对话吗?」一点点体谅就能产生很大的影响。

谢谢。

Source

I Tried Vibing an RSS Reader and My Dreams Did Not Come True by Jim Nielsen

从无到有的创造不再那么困难,但之后的一切依然很难。理解它、完善它、发布它、支持它、维护它。所有这些事情。当你对这些一窍不通时 ⸺ 就像我对 macOS 开发一样 ⸺ 事情依然举步维艰。

Source

也想试试做一个 RSS 阅读器。

AGENTS.md outperforms skills in our agent evals by Jude Gao

AGENTS.md 是项目根目录的一个文件,提供持久的上下文信息。 Skills 是一系列的 markdown 文件,封装了相关领域知识,提供给模型在需要时查阅。

但是 Skill 没法保证可靠的触发,有时模型并不会查阅 Skills,相比而言 AGENTS.md 是模型始终会去加载的,会更稳定。有的事情 Skills 做不好的话,可以试试放到 AGENTS.md 中,比较一下效果。

Less human AI agents, please. by Andreas Påhlsson-Notini

人工智能代理已经太像人类了。这并不是在浪漫的意义上,不是因为它们会爱、会恐惧或会做梦,而是在更平庸、更令人沮丧的层面上。目前的实现方式一次又一次地展示了它们的人类起源:缺乏严谨性、缺乏耐心、缺乏专注力。面对棘手的任务,它们会向熟悉的领域漂移。面对硬性约束,它们开始与现实讨价还价。

Source

Tools

Others

Tool | Library

Lucida

一个下载体验很好的音乐下载服务,大部分我想听的歌都能找到,而且可以按照专辑打包下载;专辑里通过编号也确保了歌曲的顺序,很贴心;下载时候的加载动画也很有趣,或是打鼓,或是旋转的 CD。我现在有空就会去下载一张专辑,放到我的播放器里听,慢慢收集那些 喜欢的专辑

Lucida 提供了好几个下载渠道,不过目前只有 Tidal 和 Amazon Music 是没问题的,其他渠道都会报错。 Lucida 默认是以最高音质下载的,但我发现有时下载下来的是 Opus 格式,文件体积很小,所以我一般都会选择转换成 FLAC。

下载下来的数据,除了丢给播放器用,也可以考虑备份一下,存到网盘或者移动硬盘,以后需要的时候就可以方便获取,而不需要重新下载,毕竟 Lucida 说不定哪天服务就下线了。

下载的专辑里是没有歌词的,除了在网上搜索歌词,你也可以考虑在博客里写写专辑分享,分享自己听歌的感受,将歌词记录在其中,什么时候想看歌词就可以翻出来看,这么做也可以让你更了解一张专辑。

一些 Lucida 上找歌的技巧
  • 通过专辑、歌手名、歌曲名尝试搜索,例如歌名搜索不到,那就试试搜索歌手。
  • 尝试更换渠道,不过目前似乎只有 Amazon Music 可以用。
  • 简体中文找不到,可以试试繁体中文,尤其是一些台湾的音乐人;日文,找不到的时候也可以试试英文、罗马音搜索。
  • 当你找到一个音乐人的时候,也可以点击他的名字,看看有没有关联相关的专辑或歌曲。
  • 可以先到对应的平台搜索,例如先去 Amazon Music 搜索,找到后再复制链接到 Lucida 下载。

Others

  • mengxi-ream/read-frog

    开源沉浸式翻译

  • dandavison/delta

    支持 git、diff、grep、blame 的命令行分页器,支持语法高亮。可以让 diff 看起来更清晰。

  • Internet Download Manager

    加速你的网络下载。

  • Marked 2

    用于预览 markdown 和其他文本标记的应用,用自己喜欢的编辑器编辑,Marked 2 负责预览。

  • docmd

    将 Markdown 渲染成可预览文档的工具,优点是零配置,相对轻量。

  • Miniflux 2

    一个可以自托管的 RSS 阅读工具,简单、快捷、轻量。 Emacs 里可以用 miniflux.el 连接它的服务器阅读。

  • Marginalia Search

    针对以文本为主的网站的互联网搜索引擎。索引那些小众、古老且离奇的网络内容。

  • tstack/lnav

    LNAV (The Logfile Navigator) 是一个适用于终端的日志文件查看器。它能理解日志信息,进行高亮;可以同时监听多个日志文件并按照时间顺序排序;还能处理压缩的日志文件。

  • aerc

    一个运行在终端的邮件客户端。

  • Pencil

    一款「Vibe Designing」工具,可以和 Cursor、Claude Code 等集成,可以生成设计图、输出对应代码,也提供 MCP 集成。

  • Pretext

    用于多行文本测量与布局的纯 JavaScript/TypeScript 库。

    Demo: https://chenglou.me/pretext/

    酷~

  • JSON Alexander

    又一个查看 JSON 的浏览器插件。

  • darula-hpp/shimmer-from-structure

    一个可以感知结构的骨架屏生成库,可在运行时镜像渲染出的 UI。无需重复编写布局。

    另见: Build your own shimmer skeleton that never goes out of sync by Neciu Dan

  • PV Tool

    日式 PV Visual 生成工具。

  • Kaomoji Cool Club! by Design Brouhaha

    Kaomoji (颜文字) 制作工具。(„• ᴗ •„)

  • npmx

    搜索 NPM 包的工具,速度还挺快的。另见:Features everyone should steal from npmx by Andrew Nesbitt

  • infinitered/nsfwjs

    一个简单的 JavaScript 库,可帮助你快速识别 NSFW (Not Safe For Work) 图像;全部在客户端浏览器中完成 (利用 TensorFlow.js)。

  • TheOrcDev/8bitcn-ui

    像素化、复古风的 UI 组件库。

  • ASCII Drawing Board

    一个可以绘制 ASCII 图像的网站。如果你用 Emacs 的话,开启 artist-mode 就可以在 Emacs 里绘制ASCII 图像了。

  • Photo Palettes

    基于图片生成调色板。

  • Sweetfont

    通过拖拽不同比例,凭感觉搜索 Google Fonts

  • OpenSeaDragon

    一个开源的、基于 Web 的高分辨率可缩放图像查看器,由纯 JavaScript 实现,适用于桌面端和移动端。

Emacs

一些话 | 摘抄

风格感觉 by 史蒂芬·平克

Just below the surface of these inchoate intuitions, I believe, is a tacit awareness that the writer’s goal is to encode a web of ideas into a string of words using a tree of phrases. Aspiring wordsmiths would do well to cultivate this awareness.

我认为,在这些模糊直觉的表象之下,隐藏着一种心照不宣的领悟:作者的目标,在于借助层级分明的短语结构,将纷繁交织的思绪编织成线性的文字。有抱负的文字工作者应当刻意培养这种意识。

另一个更常见的表达:

写作之难,在于把网状的思维,通过树状的结构,用线性的文字展开。

Rosy retrospection

玫瑰色回忆是一种心理现象,指人在回忆过去时,回忆往往比事实更美好。

明月高悬夜空 by 费尔南多·佩索阿

明月高悬夜空,眼下是春天。
我想起了你,内心是完整的。

一股轻风穿过空旷的田野向我吹拂。
我想起了你,轻唤你的名字。
我不是我了:我很幸福。

明天你会来和我一起去田野里采花
我会和你一起穿过田野,看你采花。

我已经看到你明天和我一起在田野里采花,
但是,当你明天来到并真的和我一起采花时,
对我来说,那将是真实的快乐,
也是全新的事情。

来自豆瓣 2026 周历第十三周

Boy I was wrong about the Fediverse

人们总在讨论驱动 Bluesky 和 ActivityPub 的协议,因为我们都是技术宅,内心深处坚信更优越的协议终将胜出。这想法挺天真的。它完全违背了人类历史 ⸺ 无论技术水平如何,更方便的东西总是会赢。

Source

我从未想过会从一个半数网民都没听说过的联邦式社交网络上(federated social network)的陌生人那里获取新闻。我从未预料到很多事情。但在这样一个地方,人们只是……分享他们所知道的东西,这其中有一种宁静的美感。没有品牌合作,没有互动指标,没有算法诱导你走向愤怒。只有一位研究了二十年北极政策的人,在凌晨两点发帖,仅仅是因为他们觉得你应该了解正在发生的事情。这就是我在 1996 年得到承诺的那个互联网。为了到达这里,竟然花了三十年的时间,并经历了美国新闻业的彻底崩塌。

Source

Maintaining the long-term view by Protesilaos

在雨中做事并不舒服,至少在需要鼓起意志力开始工作时是这样。不过,过去的经验很有帮助,因为你知道最初的不适感很快就会消失。难点在于,不要在最初的几秒钟内丧失决心。有一个充分的行动理由也很有帮助,甚至是必不可少的:它迫使你走出舒适区,让你更投入地追求积极的结果。如果你不相信这项事业,你就很难应对挑战。信念赋予了一个人战胜一切困难的力量。

支撑我努力的是对自身处境的长期理解。我不认为安逸是理所当然的。生活从来都不容易,除非是在婴儿时期受父母照顾的时候。我接受所有中间过程中的问题,将它们视为我生命这一宏大进程的一部分。我有自己的土地,并随之不断改进。它最终会成为一个体面且安全的地方。就像一颗橡子发育成脆弱的幼苗,然后长成纤细的小树,直到最终成为一棵雄伟的橡树。

[…]

当你处于「行动」模式时,耐心是自然而然的。[…]

相反,当你仅停留在抱负和痴心妄想的层面时,你没有参考标准,对有限资源的经济性缺乏感知,因此也就没有耐心的空间。 […]

Source

Maintaining projects long-term by Protesilaos

长期维持项目需要一定程度的热情。你必须享受你正在做的事情。

Source

A lunch without alcohol by Protesilaos

我不谈论我的生活选择。我没兴趣让任何人改变观点或接受我的生活方式。我为什么戒酒是我自己的事:简而言之,比起在餐桌上赢得那些毫无意义的关注,我更看重长期健康。

Source

我的生活方式可以概括为「多做少说」,或者更确切地说是「先精通,后传授」。如果我认同某种理念,我会将其融入到我的行动中。如果它是行之有效的,那么我本身就是其功效的化身。我不需要宣扬显而易见的事。他人自然会注意到效果并尝试效仿。如果他们看不出其中的门道,那说明他们还没准备好。我觉得脱离行动的空谈会削弱人的力量,它不可避免地会演变成过度思考和随之而来的焦虑不安,陷入恶性循环。

Source

What, then, are we paying for? by Quinn Keast

为软件付费并不是在为解决方案付费,而是在付费让别人来承担一个问题。

Source

We use Chatbots to hide our UI problems by Ibrahim Diallo

当客户找上你的聊天机器人时,并不是因为他们觉得聊天机器人很酷,而是因为你让他们失望了。

在整个过程中,由于某些原因,他们找不到物流信息。他们在迷宫般的常见问题解答(FAQ)中迷失了方向。他们在尝试解决一个简单问题时遇到了阻碍。当他们打开聊天窗口时,已经感到沮丧或困惑。他们不想要另一层复杂性,他们想要一个快速、简单的解决方案。

你的聊天机器人只是覆盖在你造成的伤口上的一块止血贴。去修复你的用户界面吧。让信息易于查找。停止将基础功能隐藏在菜单和迷宫之后,到头来你可能根本不需要那个昂贵的聊天机器人。

Source

Why Am I Doing the Thinking for You? by Matheus Lima

当你问别人「你怎么看?」却不分享你的想法时,你不是在协作,而更像是在外包。你把你本该完成的所有工作(阅读并理解文档、权衡利弊、形成观点)全部甩给了别人。

Source

另见 How To Ask Questions The Smart Way

I'm OK being left behind, thanks! by Terence Eden

每小时有 16,000 个新生命诞生。他们都是从一张白纸开始的。你真的在说,因为他们没有在子宫内学习你的技术,他们就都会被抛在后面吗?

不。这显然是胡说八道。

等待并观察某样东西是否真的有用是 100% 没问题的。

Source

另见 Zine#24::The Patient Programmer

Pablo Picasso

Good artists borrow, great artists steal.

He Learned the Gestures by Robert Kingett

这是我见过的最浪漫的事。

他不是在试图拯救我。他不是在试图扮演那个修复残缺事物的英雄。他是想在残缺中与我同在。他想要那种感同身受的挫败感。他想理解我为什么疲惫,而不仅仅是知道我累了。

Source

Why I Write by George Orwell

摘录

我之所以提供这些背景信息,是因为我认为如果不了解一个作家的早期成长经历,就无法评估其写作动机。他的题材将由他所处的时代决定 ⸺ 至少在像我们这样动荡、变革的时代是如此 ⸺ 但在他动笔之前,他就已经形成了一种永远无法完全摆脱的情感态度。毫无疑问,他的职责是磨练自己的性情,避免停留在某个不成熟的阶段或某种乖戾的情绪中;但如果他完全摆脱了早期的影响,他也就扼杀了写作的冲动。撇开谋生的需要不谈,我认为写作(至少是散文写作)有四大动机。这些动机在每个作家身上都不同程度地存在,而且在同一个作家身上,其比例也会随着生活环境的变化而时常波动。它们分别是:

(一) 纯粹的利己主义。渴望显得聪明,渴望成为谈资,渴望死后留名,渴望向儿时冷落过你的长辈报复,等等。如果假装这不是动机,而且是一个强烈的动机,那是虚伪的。作家与科学家、艺术家、政治家、律师、军人、成功的商人共有这一特征 ⸺ 简而言之,就是人类社会的整个上层精英。绝大多数人并不是极度自私的。大约三十岁以后,他们就放弃了个人抱负 ⸺ 在许多情况下,他们甚至几乎放弃了作为个体的意识 ⸺ 主要为他人而活,或者干脆被沉重的劳役所淹没。但也有少数天赋异禀、意志坚定的人,他们决心将自己的生活贯彻到底,作家就属于这一类。我想说,严肃作家总体上比新闻记者更虚荣、更以自我为中心,尽管他们对金钱的兴趣较小。

(二) 审美热情。对外部世界,或者对文字及其妥帖安排之美的感知。享受声音交织带来的冲击,沉醉于精炼散文的力度或精彩故事的节奏。渴望分享某种自认为有价值且不容错过的体验。在许多作家身上,审美动机可能很微弱,但即便是小册子作者或教科书编纂者,也会有出于非功利原因而偏爱的词句;或者他可能对排版、页边距宽度等有着强烈的坚持。只要水平在铁路指南之上,没有任何一本书能完全脱离审美考量。

(三) 历史冲动。渴望看清事物的真相,发掘真实的事实并将其储存起来供后世使用。

(四) 政治目的 ⸺ 这里是在最广泛的意义上使用「政治」一词。渴望将世界推向某个特定方向,改变他人对所应追求的社会形态的想法。再次强调,没有任何一本书能真正摆脱政治偏见。认为艺术不应与政治挂钩的观点本身就是一种政治态度。

Source

The 49MB Web Page by Website Carbon

我访问《纽约时报》想扫一眼四条新闻标题,结果迎面而来的是 422 个网络请求和 49 MB 的数据。页面足足花了三分钟才稳定下来。这也难怪每个神智正常的科技从业者都会在亲友的系统上安装广告拦截器。

为了真正理解 49 MB 网页是什么概念,让我们快速回到几十年前。加载这个页面所消耗的数据量已经超过了 Windows 95(28 张软盘)的大小。那个曾经运行全球的操作系统,竟然能完美塞进如今的一个网页加载量中。 2006 年,iPod 占据统治地位,数字音乐弥足珍贵。一首 192 kbps 比特率的标准高质量 MP3 歌曲大约占用 4 到 5 MB。这一个页面大约相当于 10 到 12 首完整长度的歌曲。我为了读几段文字,实际上下载了相当于一整张专辑的数据。根据 国际电信联盟 的数据,当时的全球平均宽带网速约为 1.5 Mbps。你的浏览器会持续加载这个「庞然大物」好几分钟,这段时间足够你走开去冲杯咖啡了。

Source

前阵子我把字体移除了,使用系统默认字体,目前一个页面一般也就几百 KB (有的页面有图片就会大一些),相比之前应该是会快一些。

多媒体

幽灵塔

最初买这本书是被开头几页宫崎骏的漫画吸引了。

读起来挺轻松的一本悬疑类小说,作者是 江戶川亂步,被成为日本推理小说鼻祖,名字是不是听着很熟?如果你看过 名偵探柯南 的话,你应该有印象,江戶川柯南的名字就取自江户川乱步。整本书读起来也像是一部柯南剧集,也是一个不错的故事。

书里还涉及了换脸,让我想到了伊坂幸太郎写的 《金色梦乡》,两本书的人物都是通过「改头换面」获得一个新身份得以「重生」。

影视

挽救计划 Project Hail Mary (2026)

满怀期待去看,但不如原著好看,科幻感不强,更像是一部爆米花电影,推荐阅读原著。不过里头的 Rocky 还是蛮还原的,用机器声重复「Good Good Good」、「Bad Bad Bad」也很可爱。里面的歌也还不错:

  • Sunday Morning Coming Down by Kris Kristofferson
  • Two Of Us by The Beatles

超时空辉夜姬! 超かぐや姫! (2026)

作画精美的一部动画,喜欢里面的人物形象和声优的声音。音乐也不错,看了一下演唱是 ryo,难怪觉得好听,因为 supercell 的声音和歌我就很喜欢。剧情一般,没啥触动。什么时候也能像动画一样进入虚拟世界玩耍就好了。

接近终点 Sirât (2025)

有点像是公路片,喜欢影片里的画面和色调。影片经常播放着电子舞曲,听着有些低沉,总给人一直不安的感觉。影片的前半段是欢快明亮的,而后半段儿子意外去世后就变得消沉压抑,最后主角们进入了雷区,一个不小心就被炸死,也让人觉得很紧张。

主角们是一群逃离社会群体的人,四处寻找地方跳舞、狂欢,想建立属于他们的自由的乌托邦。但影片里无处不在暗示战争就在周围(例如开头军队驱散人群、收音机播报的新闻,最后进入的雷区),现实是无法逃避的。

春天情书 (ハル) (1996)

找电影看,翻了翻待看列表,看到「春天情书」,最近也正好是春天,就选择了这部电影。

除了男主的网络昵称是「春天(ハル)」,其他和春天似乎都没啥关系。

影片讲述了两个人在一个电影 BBS (Bulletin Board System, 電子佈告欄系統) 中认识,然后一直通过电子邮件交流,电影一方面展示了两个人的生活,一方面则展示着两个人的通讯。两个人在生活中多少都有一些悲伤和失意,但在网络世界中,通过电子邮件相互倾诉,找到了一些喘息的空间。

电子邮件相比即时通讯是有些「慢」的,但正因为这一点「慢」,让人可以有空间、时间去斟酌内容,而不像即时通讯一般,想到什么就直接发送。

影片的节奏是缓慢的,缓缓地叙述着两个人的生活,在网络上相互分享着生活的点滴,开心的、难过的、真实的、带着谎言的……

早期网络上,个人信息很少,交流时不知道对方是谁,对方的性别、年龄、样貌…都是通过对话去猜测、认识和想象,往往对对方都会带有一些美好的想象吧。

后来两人相约见面一次,竟然是一个在新干线上,一个在新干线下,相互挥手帕和录像,憧憬、兴奋、想见面却又害怕靠近,之后反反复复地翻看录像,珍惜地收藏着。

里面网友见面会相互确定一个物件,例如报纸、软盘,也很有趣,但也会很担心自己拿出了信物,对方看到自己后不想相认吧。

概括来说,这是一个早期网络恋爱故事,豆瓣有个热评也很精准「那些 豆邮(1) 的日子。」

推荐一看。(^ー^)

制片人 The Producers (1967)

在写 Album#36 - Quicksand 的时候,了解到 Bialystocks 乐队的名字出自这部电影,就找来看了看。

这是一部喜剧电影,比较荒诞,里面的演员演的我都挺喜欢的,尤其是 Max Bialystock 和 Leo Bloom。 Bialystock 是一个自私自利的人,是戏剧的制作人;Leo 是一个会计师,是一个实诚又有些神经质的人。两人的演技都很棒,我会更喜欢 Leo 一些。

Leo 过来帮 Bialystock 算账,发现 Bialystock 募资了 60000,实际只花了 58000,剩下 2000 自己拿去玩了,但是这部剧失败了,投资人投资失败了,也不需要分红。 Leo 就发现了一个漏洞,如果你募资超过需要的资金,例如对外募资 100 万,说是需要的成本,但实际拍戏只用 5 万,并且让这部剧注定失败,这样剩下的 95 万就可以私吞。这本来只是 Leo 的假想,实诚的他根本没想过去实践,但被 Bialystock 听到了,穷困潦倒的 Bialystock 看到了搞钱的大机会,就忽悠 Leo 加入他去实施这个计划,电影就是叙述了整个计划的实施过程,蛮搞笑的。

Bialystock 忽悠 Leo 的那一段我蛮喜欢的。 Bialystock 带着 Leo 在公园散步、在湖上泛舟,最后 Leo 终于被忽悠进去了,在喷泉上大喊「I'll Do it!」,喷泉汹涌喷发,很有激情。

迈克尔·杰克逊:巨星之路 Michael (2026)

值得去影院一看的电影,去享受 2 小时的音乐和舞蹈。

看完电影才知道 Michael 原来这么喜欢动物,养了羊驼、猩猩、长颈鹿……;他喜欢看 彼得潘,以致于他后来还建造了彼得潘里面的梦幻岛 (Neverland)。 Michael 的童年并不开心,被父亲硬拉着排练,没法和其他孩子一起玩, Neverland 大概是用来弥补他自己童年的缺憾的。

Michael 也是一个友善和充满爱心的人,小的时候演出,跑到那个坐着轮椅的女孩前唱歌;救了实验室里的猩猩出来,当作朋友陪伴在身边;超市里有粉丝认出他来了,他也很开心地给其他人签名;他很关心医院里那些生病的儿童,很有耐心的和孩子聊天;他自己头皮烧伤了,但却在医院里安慰着其他烧伤的病人;

Michael 也是一个有些调皮的人,也许是受到了卓别林的影响,从他的一些 MV 可以看出来,例如: ThrillerGhosts,都给人有种恶作剧的感觉。

电影主要剧情还是他和父亲的冲突,Michael 想单干,做他自己想做的音乐,走自己的路,但父亲用家庭去束缚着他,逼迫他留在 Jackson Five,利用着他为自己牟利。最后 Michael 摆脱了父亲,影片的最后他在舞台上唱着 Bad,这首歌的歌词也像是一种对父亲的质问,推荐看看 Bad 的 MV

不过电影作为一部人物传记,剧情还是有点单薄,主要还是聚焦在 Michael 和父亲的关系上,关于他的音乐、专辑、舞蹈,他遇到的挫折和困难,讲得还不够多。

异国日记 違国日記 (2026)

一部治愈系动画,节奏比较慢,讲述了双亲意外身亡的「朝」寄居在她的阿姨「槙生」家中,慢慢从悲伤和困惑中走出来的故事。里面的角色都挺喜欢的,尤其是「槙生」这个角色。

JOJO 的奇妙冒险 飙马野郎 スティール・ボール・ラン ジョジョの奇妙な冒険 (2026)

JoJo 的新故事线,没有了之前那些熟悉的人物了,不过新人物也依然很有特色,就是不知道啥时候能更新下一集。

视频

音乐

最近分享的专辑:

最近听 Prince、Bialystocks、Mando Diao 比较多,如果你对我最近听啥感兴趣可以看 听歌排行,我想起来了就会更新。

游戏

Balatro

Balatro,又称小丑牌,前阵子看到打折就买来玩了玩,很上头。

Balatro 是一个 Roguelike 游戏,随机生成关卡、小丑牌、卡牌,每个关卡会有一个目标分数和限制条件,需要找到一个套路可以尽可能得到高分,达到目标分数。爽点就是找到了一个套路后,看卡牌分数不断叠加,比较有成就感吧。

类似的还有 幸运房东浣熊推币机苦痛之环杀戮尖塔……

这类游戏前期可能比较困难,因为很多道具没有解锁,没法形成套路,多玩几局解锁足够道具后,一旦形成套路就会很爽。但道具和套路就那些,久了之后也会有些枯燥。

所有小丑牌里,我最喜欢的是「流浪者」,钱少于等于 4 块的时候,每次出牌都会生成塔罗牌,很爽。

宇宙機器人

PS5 春季打折,宇宙机器人优惠了不少,就买了来玩。清明节期间就和女朋友一起轮流玩,设计有趣,轻松快乐。小机器人很可爱,那些遗落在各个星球的机器人,在被找回的时候还撅着屁股等着被踢一脚,有点欠。

主流程相对来说比较简单,而每个星球还有一些挑战关卡,就比较难,因为中间没有存档,需要很多次试错,操作熟练后才能通过。又让我想起了 《贤者之书》 里的那段话:

简单说,你的每一个行动收获的不是成功,也不是失败,只不过是完成人生拼图时不可或缺的一片。没有别的更深或更浅的意思。

Source

行动了就会有收获,「成功」也好、「失败」也好,都是一种反馈和经验。就像游戏里那些小挑战,很多坑都是通过一次次的「失败」了解的,当摸清了所有的坑,一次次地减少「错误」,最终就能通过挑战。挑战里的坑,虽然旁观女朋友玩我也知道,但实际操作起来就不是那么回事, p还是得自己亲自经历,才知道怎么操作更好。总而言之,多行动。

游戏还致敬了很多游戏 IP,例如地平线:西之绝境、古墓丽影、战神。扭蛋可以收集很多角色手办,每一个都设计了一些互动,也很有趣。

Webmentions (加载中...)

如果你想回应这篇文章,可以在你的文章或社交媒体帖子中链接这篇文章,然后提交你的 URL,你的回应随后会显示在此页面上。 (关于 Webmention)