Weekly#17

News | Article

logo.css

New CSS logo in rebeccapurple color

CSS 的 logo 确定了,颜色是 rebeccapurple (#663399),这个颜色是以一个人的女儿的名字命名的。

如果君士坦丁堡可以是一座城市,七月可以是一个月份,星期四可以是一天,那么 “丽贝卡紫” 肯定也可以是一种颜色。

Source

在我看来,这就相当于用亲人的名字命名一颗星星。尽管不是每个人都能用自己的名字来命名一种颜色,但在这种情况下,你的伙伴们用这种令人感动和贴心的方式来认可你以及你对 CSS 的重要性。最重要的是,让大家记住丽贝卡。

Source

Hacker News Comments: CSS gets a new logo and it uses the color `rebeccapurple`

Writes and Write-Nots

写作是思考,如今很多写作可以借助 AI 完成,如果都用 AI 完成写作,相当于把思考的过程交给了 AI,长此以往,去思考的人或许会越来越少。

写作就是思考。实际上,有一种思考只能通过写作来完成。你无法比莱斯利·兰普特更好地阐述这一点:

如果你在不写的情况下思考,你只是在认为自己在思考。

所以一个分为写者和不写者的世界比听起来更危险。这将是一个思考者和不思考者的世界。我知道我想要在哪一半,我敢打赌你也是。

这种情况并非前所未有。在工业化之前,大多数人的工作使他们变得强壮。现在,如果你想变强,你就要锻炼。因此,仍然有强壮的人,但只有那些选择这样做的人。

写作也是如此。仍然会有聪明的人,但只有那些选择成为聪明的人。

Source

Bluetooth 1.0 to 6.0 explained: How do Bluetooth versions differ from each other?

蓝牙是一种用于无线连接设备的多功能、低功耗解决方案,最初的设计理念是无线语音通话。

比较让我惊讶的是,原来蓝牙可连接的距离是很远的,蓝牙 5 甚至可以达到 240 米的传输距离

但是我的手机和音箱经常隔了墙,信号就差很多了,可能是版本比较低?

蓝牙 5.2 还引入了音频广播(audio broadcast / Auracast),可以将同一个蓝牙源广播到多个设备,这样就可以一个手机放歌,几个人一起听了。

像是这些版本对比, 问 ChatGPT 不同蓝牙版本的区别是什么,也能得到一个简洁的答案。

5 Non-LLM Software Trends To Be Excited About

LLM 发展迅猛,很多人都在关注,但除了 LLM,其他一些技术也在进步,文章例举了一部分,并且提供了很多相关链接:

  • Local-first software

    本地优先是用户体验的自然下一步。在本地持久化可以实现近乎零延迟的交互、更好的用户体验以及在低互联网连接或无互联网连接情况下更灵活的客户端。

    我预测,随着未来用户对软件的期望不断提高,这一点将变得尤为重要。

  • WebAssembly

    WASM 允许开发人员绕过服务器端处理,在浏览器中运行复杂的应用程序。

  • SQLite’s Renaissance

    Kent Dodds 认为,您或许可以在生产中直接使用 SQLiteRuby Conf 的 Stephen Margheim 也这么认为

    无论您是否同意,他们提出的支持 SQLite 的观点都很有价值:

    • 零延迟
    • 简化设置
    • 轻松实现多实例复制
    • 可处理海量数据库(超乎你的想象)
    • 更易于开发和测试。
  • Cross-Platform is getting better (React Native, Flutter)
  • Automated reasoning

    自动推理侧重于使用逻辑和数学证明来确保系统按照预期运行。

    与验证特定场景下系统行为的传统测试不同,自动推理允许工程师验证所有可能场景下的正确性。

    从根本上说,这是从被动测试向主动验证的转变,从而(理想情况下)提高可靠性和安全性。

Tutorial

Exploring Typst, a new typesetting system similar to LaTeX

Typst 可以实现 LaTeX 一样复杂的排版,但是语法没有 LaTeX 复杂。

作者对比了 Typst,LaTeX,Markdown,以及介绍了一些 Typst 的用法。

Exploring the browser rendering process

从输入 URL 到浏览器渲染的过程,交互式的文章,还不错。

Code

Monorepo - Our experience

Ente 将它们的 repo 迁移成了 monorepo 的架构。

如果让我总结一下两者之间的区别的话改用 monorepo 并没有带来太大的变化,但所带来的微小变化却是积极的。

Source

迁移到 monorepo 带来的一些好处:

  • 以前一个改动涉及到多个 repo,现在变成了 monorepo 的一次整体的改动,review,merge,revert 都方便了一些
  • 减少了子模块 (Submodules) 的使用
  • 分散的 star 现在汇聚到了一起,看起来 star 更多了
  • 让不同 repo 的维护人员了解其他 repo 的改动和进度,原来只关注产品中自己维护的部分,而现在可以从整体去看待产品,增加了彼此之间的连接性

但随着时间的推移,我发现这些“环境线索”会在潜意识中自动地让我对“周围发生的一切”有一个很好的感知。

有哪些功能正在开发,处于哪个完成阶段,有哪些错误修复,最近发布了哪些版本。

当我打开拉取请求页面,无意间看到其他人正在做的事情时,也会发生类似的偶然信息交流。

最棒的是,所有这些都是自然而然地,毫不费力。每个人都在做自己的事情,只是因为在同一个共享数字空间里做这些事情,就会产生一种意识和连通感。

不过文章中有一点和我对 monorepo 的认识不一样的:

There still are no "repository wide" guidelines, except two:

  1. There should not be any repository wide guidelines
  2. Don't touch the root folder

我之前理解可以将一些公用的配置和依赖放到最上层,其他 repo 可以继承和引用,但是当不同 repo 依赖不同的时候,确实是会有点问题。

我想还是取决于 monorepo 的类型,如果是业务相同,但技术栈不同的 monorepo,确实不适合统一的配置。

如果像是组件库这样的 monorepo,技术栈基本一致,只是部分依赖不同,倒是可以考虑统一的配置。

Put business logic in the application, not the database

避免把 SQL 写得太复杂,使得数据库查询压力太大。

相反,应该将复杂的业务逻辑放到业务服务中实现,当查询压力大的时候,业务服务器相比数据库更容易扩展。

…但是,通过尽可能多地删除这些复杂查询,可以减少对稀缺数据库资源的依赖,增加对高可用应用程序级资源的依赖。

因此,下一次当你看到那个使用多重连接和复杂过滤逻辑的又大又长的查询时,不要为它感到骄傲!取而代之的是研究如何用更简单的查询(也许是多个查询)和在应用层中执行的业务逻辑来替代它。

随着应用规模的扩大,灵活性的提高将使您受益匪浅。

Source

JavaScript Import Attributes (ES2025)

核心问题是安全。在网络上,文件扩展名并不能可靠地表示内容。以 .json 结尾的 URL 实际上可能提供的是 JavaScript。

这里虽然 import 的是 json 文件,但里面可能是 JS 代码。

// This looks safe, but could be dangerous
import config from './config.json';

// The server could respond with executable code:
export default (function(){
  // Unexpected code execution
})();

通过 import attributes 确保一定是 json 内容。

// Explicitly require JSON
import config from './config.json' with { type: "json" };

// Or specify JavaScript
import module from './module.js' with { type: "javascript" };

// Works with dynamic imports too
const data = await import('./config.json', {
  with: { type: "json" }
});

What's a Single-Page App?

文章讨论了什么是单页面应用,从四个维度:

  • SPA(Single Page App)
  • MPA(Multi-Page App)
  • SSR(Server-side rendering)
  • CSR(Client-size rendring)

分析当前的一些 web 框架。

这些都不是什么开创性的观点。

但我同意托马斯的观点,不精确的术语无助于在热热闹闹的互联网争论论坛上进行任何讨论。

希望在我们讨论何时何地适合使用这些架构时,这能作为一个参考点。

Imperative vs Declarative Programming

Imperative programming is how you do something, and declarative programming is more like what you do.

Source

一篇解释命令式编程和声明式编程的文章,还不错。

Cool Bit

MomBoard: E-ink display for a parent with amnesia

E-ink display on a bathroom counter showing birthday messages

作者的母亲有健忘症,没法形成长期的记忆,于是作者用墨水屏做了一个 MomBoard,用来显示家人的留言,缓解母亲记不起事情的焦虑。

实现的技术栈不复杂,虽然简单但是可靠。

ping-clock

a clock show ping command delay time

把 ping 的时间用实体表盘显示出来。

No GPS required: our app can now locate underground trains

地铁里信号不好,GPS 信号也差,这样就不方便知道现在到了什么站。

作者找到了一种离线的,不需要 GPS 也能定位位置的方法。

原理是用手机记录所有地铁的一些加速度数据,用这些数据训练模型,然后让模型预测当前的位置。

Audio Decomposition

将音乐分离成组成乐器的开源软件。从零开始制作,无需外部乐器分离库。

蛮有趣的,有的音乐不知道有什么乐器组成,可以分解一下看看。

Emoji 的隐藏玩法

一些 Emoji 里的彩蛋。

Tool | Library

pagefind

Pagefind 是一个完全静态的搜索库,其目标是在大型网站上运行良好,同时尽可能少地占用用户带宽,并且无需托管任何基础设施。

我的博客用 pagefind 实现了一个搜索页面,你可以试试看。

我把搭建碰到的一些问题也写了篇文章:使用 pagefind 添加博客搜索功能

Component party

通过示例展示不同前端框架的语法。

如果你熟悉 Vue,想了解对应的语法在 React,Svelte,Angular 中怎么写,这个网站提供了相关的示例。

许多 JS 开发人员并不了解现有的每个 JS 框架,它们都有自己的语法和功能。

我们该如何解决这个问题呢?开发人员喜欢通过示例了解框架概述。这是在深入了解之前的快速入门。

STAR

A easy to use web app to align your antenna with any satellite using your phone's motion sensors and location.

一个网页应用,可以用来追踪卫星的位置。

lexical

An extensible text editor framework that does things differently

需要集成文本编辑器的时候可以考虑一下。

Animated Art Avatar

又一个头像制作网站,不同的是它还有动画,下载后是带动画的 SVG。

兔子随机头像

另一个头像生成网站。

Napkin

一个 AI 工具,将文字转换成视觉元素,效果看起来不错。

Watermark Anything

可以给任意内容添加水印。

pqoqubbw/icons

beautifully crafted animated icons

iCraft Editor

从二维到三维,iCraft 3D Editor 可帮助您轻松创建直观的三维架构图,让复杂的系统一目了然!

一些话

Proxmox VE Helper-Scripts Project Update (EDIT)

这段经历让我意识到生命是多么短暂而珍贵——所以要珍惜每一刻,珍惜你拥有的时间。

Source

Lessons from my First Exit

一家高效的公司应该拥有一套定义明确的流程和一支知道如何执行这些流程的团队。

Source

The Case for Failure-Tolerant Leaders: Why we need them now

把成功和失败视为一枚硬币的两面,就能把关注点从仅仅庆祝胜利或哀叹失败,转移到培养一种不断学习和改进的文化上来。

Source

但问题是:失败从未真正消失。无论你经验多么丰富,你还是会犯错。你还是会冒不成功的风险。

Source

Will we care about frameworks in the future?

我相信,软件开发正在进入一个根本性的转变,而这个转变目前是由 Replit 这样的代理驱动的,在这个世界上,人们实际上再也不需要直接操作代码了。

当我在这里或那里向代理发出一些提示,对应用程序的功能进行广泛而彻底的修改时,软件似乎并不在意多个视图中的代码是否重复,也不在意共享逻辑、可扩展性或组件的可继承性……它只是实现它需要做的事情,而且做得越虚无越好。

Source

Get Me Out Of Data Hell

代码归根结底只是屏幕上的字符,软件工程师所做的不过是将代码敲打成能激发快乐和金钱的形状。

Source

Music

世知のバラード

一首我觉得很精彩的爵士乐,一开始是安静的钢琴,慢慢加入了萨克斯,以及后面即兴的萨克斯,交织的声音挺迷人的。

Schoolgirl byebye

这周去听了他们的 live,两人在一起 15 年了,他们的音乐听起来比较浪漫,推荐几首我喜欢的:

  • 蓝夜

    蓝色的夜拥抱着我们

    美好的事总在夜晚发生

    就像彗星掠过了清晨

    美好的事无法久存

    若我们相爱

    这拥抱永远不会放开

    我想成为你身上的海

    若你是蓝色 我也是蓝色

  • 法国电影

    Will you beside me

    to see a French Movie

    Until you realize my letters

    on your screen

  • 软弱

    你不会再看到我

    人是软弱啊软弱

    别难过 别难过

    这就是生活

  • 爱是

    “你了解每个人啊”

    “我不了解…而且你有没有那种…了解越多…喜欢就越少的感觉”

  • 海边旅馆的一夜

    就在这里躺下了

    我可以 把自己拜托给耳机

    爱情 只是一个人的事情

    存在于 房间里

  • 无缘却不舍
  • 傍晚去太子湾吗
  • 难过的小蛇

Author: Spike Leung

Date: 2024-11-18 Mon 00:00

License: CC BY-NC 4.0