社会工程学之身份欺诈
社会工程学之身份欺诈

冬天来了,万物凋零。又到了坏人们泛滥的季节,城市的乌烟瘴气中蕴含着难以形容的善意与陷阱。对于游泳爱好者而言,冬天的去处是一个值得研究的课题。很多普通健身房的泳池因为维护成本与客流不成比例,纷纷选择关闭;剩下那些苦苦支撑的,往往基础设施糟糕——从更衣室出来到下水的那段路,足以让你冻得发抖。于是,目光自然转向了酒店泳池。设施完备、水温恒定、体验极佳。唯一的缺点是:贵。这里存在一个有趣的年卡悖论:高端酒店泳池年卡价格动辄近五位数,按 8,000 元计算。若每周去一次,一年约 52

2024-12-31•约 1.5 千字
换行符 CRLF 的历史与演变
换行符 CRLF 的历史与演变

我们每天都在使用文本文件。它的换行看似简单,背后却隐藏着一段跨越百年的通信和计算机历史。从早期的电报机到现代的网络协议,一个看似微不足道的字符组合 CRLF(回车和换行)是如何塑造我们数字世界的?本文将深入探讨换行符的起源、不同操作系统的选择,以及为什么一个简单的文本文件在不同系统间打开会变乱。字符基础:ASCII 与换行符的身份要理解换行,首先要从 ASCII(美国标准信息交换码)字符集说起。ASCII 是基于拉丁字母的编码标准,最初为电报码设计,共定义了 128 个字符。

2024-12-11•约 1.9 千字
译:简单性
译:简单性

在 2009 年 5 月,Google 举办了一场内部的「设计巫术(Design Wizardry)」小组讨论会,演讲者有我和 Jeff Dean、Mike Burrows、Paul Haahr、Alfred Spector、Bill Coughran。以下是略加编辑的我的演讲记录。尽管一些细节已经过时,但在今时今日,核心主旨可能比那时候更显重要。简单胜于复杂越简单的东西就越容易理解,也就更容易构建、调试和维护。容易理解是最重要的,无法理解就无法进行其他任何后续步骤。看看 g

2024-10-01•约 2.2 千字
HTTP/3 与 QUIC:换掉 TCP 之后,网络真的更快了吗?
HTTP/3 与 QUIC:换掉 TCP 之后,网络真的更快了吗?

HTTP/3 最容易被说成一句话:「HTTP 改用 UDP,所以更快。」这句话不能说完全错,毕竟 HTTP/3 的确运行在基于 UDP 的 QUIC 之上;可它省略的部分,恰好比留下来的更多。UDP 没有可靠传输、拥塞控制、连接状态和加密。倘若只把 TCP 删掉,再把 HTTP 报文扔进 UDP 数据报,得到的不会是下一代 Web,而是一台更快丢数据的机器。真正承担工作的,是 QUIC。它在用户空间重新提供可靠传输、流量控制、拥塞控制、丢包恢复和连接管理,把 TLS 1.3

2024-05-01•约 5.4 千字
博客重构
博客重构

一次从 Hexo 到 Next.js 的重构,用现代前端工程化的复杂性,换取了未来的低维护性、高性能和可扩展性。Next.js SSG + @content-collections + Cloudflare Pages 的组合,最终实现了在此前所期望的理想状态:将精力从折腾系统转移到内容输出上来。一、从 Hexo 到 Next.js:拥抱现代 SSG在 2017 年的博文中提到,博客的构建始终在「安装、配置、自定义、折腾、放弃」的循环中。在经历了 WordPress、Type

2024-04-01•约 1.8 千字
Go 的 Goroutine 与协程
Go 的 Goroutine 与协程

很多文章把协程解释成「比线程轻的东西」,把 async/await 解释成「暂停一下再继续」,再把 go func() 解释成「启动一个异步任务」。这些说法不能算错,但它们没有回答最关键的问题:到底保存了什么上下文,谁负责保存,谁决定什么时候恢复?如果不回答这个问题,进程、线程、协程、goroutine、异步函数就会变成一串互相替换的术语。更麻烦的是,go func() 和 await 看起来都像是在控制执行权,却其实做着完全不同的事情。本文的主线只有一句话:go func(

2024-02-04•约 5.5 千字