Weekly #1:一半科学,一半艺术

以后这个周记就统一每周一发布吧。因为周末的时间安排无法控制……

🌆 封面图:夏天的早晨

夏天的早晨

我太喜欢复临舍的玻璃幕墙了!也很喜欢夏天。也很喜欢早晨。

🎨 构建 REST API:part art,part science

在学习 REST API Tutorial 的时候,教程提到:构建 RESTful 网络服务是「part art,part science」,即「一半科学,一半艺术」。我认为这不仅适用于形容 RESTful API,也适合形容技术世界里的一切。

许多人对艺术的印象就是需要动用感性的人文领域,似乎和计算机这个需要极强理性的科学领域不太搭边。然而,很多时候,当我设计一个优雅的程序架构的时候,当我用更简洁的方式重构代码的时候,当我实践 stateless 的理念来管理容器的时候,或者当我设计诸如 RESTful API 的时候,我是真真切切能够感觉到这是一门艺术。很多时候,当我了解到一些新的理念、设计和实践,会在心里默默感叹:「太优雅了!」

我们学了很多「计算机科学」,但是似乎很少专门地去学「计算机艺术」。事实上,我认为在技术的庞大世界里,科学和艺术同样重要。

或许是由于我强烈的感性思维,我突然觉得,「计算机艺术」似乎就是一直以来令我深深着迷的那一部分。

🌐 Tailscale 的 NAT 穿透原理

本周更新了 Tailscale 的配置。将其接入了之前部署的 Keycloak SSO,并开启了 DERP 等功能,尽量发挥 Headscale 的全部功能。

本来还希望配置一个 all-in-one 的 VPN,集成网络代理和自己的 DNS。可惜没有我理想中的 fancy 的方案。改天也要写一篇博客文章讲一讲我的配置。(可恶,挖的坑越来越多了……)

以前一直以为 Tailscale 是通过服务器中转流量,所以一直对其性能不抱希望。今天看了官方的文档,才知道原来并不是。Tailscale(在大多数情况下)直接建立主机之间的点对点连接。其核心就是 NAT 穿透技术。

官方的这两篇科普文章,质量非常高。尤其是讲 NAT 穿透的第二篇,用非常风趣和通俗易懂的语言讲清楚了 NAT 穿透基本的原理、应对种种复杂的网络环境的解决方案。非常推荐阅读!

How Tailscale works How NAT traversal works

简单来说,为了穿透 stateful 防火墙,Tailscale 设立 coordinate 服务器,协调两个主机几乎同时向对方发包,并定时维持、重新建立连接;为了穿透 NAT,向外部的 STUN 服务器查询,获取本机 NAT 后的 source;为了解决所谓的 hard NAT,即某些 NAT 对不同目的地分配不同的 source 的问题,使用生日悖论的原理一次发起多个连接并查找我们要的连接,或者配置端口映射,或者使用 DERP 服务器;为了解决某些网络完全禁止 UDP 的问题,或者对于无法配置端口映射的多级 NAT 或运营商 NAT,使用 DERP 服务器用 HTTP 协议中转流量;同时还要解决 hairpinning 和 IPv6 带来的问题……最后使用 ICE 协议,尝试上述所有方法,使用表现最佳的方法。

在第一篇文章开头,文章提出「读完本文后,你也可以自己实现一个 Tailscale 的替代品!」然而真正读完之后,本文成功地使人打消了这个念头。😇

在这个方面,国内的大厂似乎很少发布像这样高质量的技术文章。Google、Cloudflare、Tailscale 都有多少高质量的技术文章,而纵使阿里云、腾讯云都在大张旗鼓地建立所谓的社区,但基本都成了内容农场,其中 99% 的文章质量还不如 CSDN。推荐阅读:《牙膏云?您可别吹捧云厂商了》。好骂!

🤖 GPT4o:AI 带来的情绪价值

这次 GPT4o 的更新,给我带来最大震撼的是 GPT 的语音合成。至于更新的图像识别功能,我认为随着计算机视觉的发展,早晚会有的;但是 GPT4o 语音加入的语气、情绪和笑声,给了我很大惊喜。这一切都太真实了。

特别是这个视频:Happy Birthday。GPT4o 唱生日歌庆祝用户的生日,它的这种情绪,就好像用户是在和一个很要好的朋友视频通话。这狠狠地戳中了我的情绪价值 🥲。

或许可以说,又一个科幻电影里的场景成真了。说实话,这种情绪效果,之前任何人机交互中,我从未体验到过。不管是 Siri、小爱同学还是各类其他语音助手,或者是 ChatGPT 等等各类以文字交互的 AI,从来只是更新了传递信息的方式,从来没有成功地传达过感情。可是 GPT4o 成功地做到了。

📚 有好的译者,是书籍的幸运

我必须强烈推荐一下 HNU 读书馆的「新书闪借」服务!在一个类似网店的地方下单新书,直接快递发货寄到填的地址(宿舍或者家里),图书馆出钱,连运费都不用我们出。只要 30 天内归还给图书馆或者续借即可。相比传统的「图书荐购」,新书闪借的方式反馈快,新书一两天就能到我们手上。非常适合借阅出版社新出的书。通过这种方式,我已经借了《JavaScript 高级程序设计(第 4 版)》《计算》《我看见的世界》三本书。

《我看见的世界》(The Worlds I See)是华裔科学家李飞飞的自传,最近新出的中文版。李飞飞女士在青少年时代随家人移民美国,经历了艰苦的求学道路,最终成长为计算机视觉领域顶尖的科学家。她的经历非常传奇。

在看这本书的豆瓣页面的时候,发现本书译者赵灿女士的评论《如何翻译一本女性传记》。点进她的个人主页一看,原来之前我看的《乔布斯传》和《纳瓦尔宝典》都是她翻译的!对这两本书,她分别发表了《如何翻译一本传世之作》《如何翻译一本思想盛宴》两篇评论,讲述她翻译过程中的一些经历和体会。从中可以体会到,高水平译者带来的好的翻译,对于书籍内容的传播有多么重要。

对于这一点,更深的体会其实发生在阅读大量的翻译非常烂的外文书籍过程中。赵灿女士提到:「(《乔布斯传》)当年为了中英文版本同时上市,中信通过『海选』的方式找了 5 名译者,用 1 个月的时间完成了中文版,由于各种限制条件,这一版在准确度、流畅性、一致性等各方面均有改进空间。」而相比之下更加不负责任的出版社比比皆是。之前在读《掌控谈话》这本书的时候就狠狠地吐槽过,有些句子我不得不去找来英文原版去看才能 get 到表达的意思。其实很多时候,我们读译书觉得读不下去、晦涩难懂,都是翻译的锅。

不禁想起《岳麓讲坛》每学期第一期,陈飞虎老师在介绍建筑艺术的时候,都会说这样一句话:

一个缺乏艺术修养的建筑设计师,其作品所造成的文化损失绝对不亚于一般的经济犯罪和刑事犯罪。

我很喜欢这句话。在此处,我也认为:一个缺乏翻译素养的译者,其作品所造成的文化损失绝对不亚于一般的经济犯罪和刑事犯罪。

希望能有更多像赵灿女士这样高水平且负责的译者。这些优秀的书籍能由他们翻译出版,真的非常幸运。

🛠️「君子不器」:不要成为「器」

本周去听了《大麓开讲》系列讲座第二期,主题是「君子不器:从『工具人』到『创造者』」。

第一次来岳麓书院内部的教室里听讲座。岳麓书院每天的游客络绎不绝,我们之前都很难想象这居然真的是咱们的一个学院。当游客在门口忙着扫码填信息购票、找身份证入园的时候,我们直接刷校园卡,潇洒地进入了景区 😎。

本次主讲嘉宾是岳麓书院的陈仁仁教授、物电院院长文双春教授。

我们高中学《论语》的时候就学过:「子曰:『君子不器。』」对「器」这个字,比较通行的解释是「拘泥于一物」,可以理解为不能拘泥于特定的专业领域。按照我的理解,具体来说:1)不能拘泥于自己所学专业的狭窄知识,要学习更多通识性的、可迁移的知识技能;2)不能只限于具体知识的学习,也应该注重品德修养。

确实,当前社会越来越「卷」的趋势下,竞争越来越激烈,社会越来越要求人成为「器」。要保研或者考研,只关心你这几门课考试成绩排名,读研只要你能干活、发论文,没有人关心你对科学的理解、敬仰和热爱;要找工作面试,只问你 React 的原理,没有人关心你渴望创造产品的满腔热情,以及从技术中体会到的那些精神。这正是马克思所说的:在工作中,人被异化成了物,也就是孔子所说的「器」,也就是所谓的「工具人」。

诚然,这是经济发展、社会分工的必然,也是社会资源不足、分配不合理的结果。然而,这都是我们无法改变的现状,我们只能改变自己应对这个世界的方式。我们不能单单顺应社会的要求,真的只把自己培养成工具人。这个世界有更多东西值得我们去探索。我认为这就是「君子不器」在当下的指导意义。

这让我想起宫崎骏的《千与千寻》。千寻被夺走了名字(进大厂要取花名),小白说:「不要忘记自己的名字。忘记了自己的名字,就会忘记自己的过去。」很难想象,多年之后的我,会成为所谓的「器」吗?我还会记得曾经青春的激情、热爱和梦想吗?

曾经发生过的事情是不可能忘记的,只是一时想不起来罢了……

🌸《繁花》中的极致 BE 美学

前段时间重温了之前看过的《繁花》。实在是太喜欢这部剧里极致的 BE 美学了!(名词解释:BE:Bad Ending;HE:Happy Ending)

我最喜欢的一幕之一,是 29 集里阿宝和玲子在医院见面并告别的那一幕。不同于一般剧里感情戏的扭扭捏捏,当玲子说出那句「不讲了」,她个性中的坚强充分展现。但最后玲子的欲言又止,加上配乐和葛老师的画外音,却又非常令人触动。王导你太会了!

她心里永远会记得……

我是过来人,其实感情这样东西,是这样。譬如讲两个人讲好一起去逛庙会,两个人讲好的,长夜漫漫,一直游玩到天亮。结果这个朋友有事情走掉了,他也找了另外一个同伴,继续游玩下去。但是,他心里厢永远会记得,和前头那个人一道,看过,讲过,笑过……

(上海话属于吴语方言,和我老家的方言很像,比如我们说「里面」经常会说「里厢」,看了《繁花》字幕才知道原来这个词是这么写的)

正如一些点评所说的那样,《繁花》这部剧讲的不是小情小爱。它展现的是那个时代的人物群像。如果关注感情线,可以发现剧中全部都是 BE,从最初主角们坐在一张桌子前吃饭唱歌,到最后人走茶凉,各奔东西,实在令人唏嘘。我实在太喜欢这种凄美的 BE 设定了,这种设定更加深刻地揭示了人物成长。(相比之下,如果是最终 X 和 Y 在一起了的 HE 大团圆结局,显然会降低整部剧的深度)

这种 BE 美学,让我想到新海诚的《秒速五厘米》:男主和女主长大了,都有了自己的人生,然而年少时的爱恋埋藏在他们的心底,终其一生都无法忘怀。是呀,人生的旅途里有多少擦肩而过的遗憾。然而曾经有某个人和我们一道看过,讲过,笑过,留在我们的记忆中,这就足够了。

⚙️ CloudBeaver:可自托管的在线数据库管理

每个月逛一次 Awesome Self-hosted,每次都有新感觉!

本周部署了基于 Web 的数据库管理软件 CloudBeaver,它是 DBeaver 同一个公司做的 Web 版本,官网上免费的 community 版本入口隐藏很深。它支持多种数据库,因此可以全面取代 phpMyAdmin、pgAdmin 等专门的数据库管理软件。部署在 dbms.skywt.cn。

以及我发现,如果要设计博客系统管理员用的后端 API,需要的只有文章和评论的 CURD,这和在数据库里直接编辑数据不是一样么……所以目前直接去数据库里发博客了。😁

下周见~

文章来源:

Author:me@skywt.cn
link:https://skywt.cn/blog/weekly-1/