2024-02-03

50 篇热帖

1. Pkl, a Programming Language for Configuration (pkl-lang.org)

Pkl(发音为Pickle)是一种专为生成配置而设计的编程语言。它旨在结合静态配置语言(如JSON、YAML)的简洁性与通用编程语言的强大表达能力,以解决传统配置格式在复杂度增加时出现的代码重复、缺乏验证等问题。

Pkl 的主要特点和优势包括:

  • 融合两方面优势:语法声明式且易于读写,同时支持类、函数、条件、循环等通用语言特性。
  • 内置验证:通过类型注解和约束在部署前捕获配置错误,确保数据有效性。
  • 可扩展性:支持抽象、复用,可通过创建和发布包来共享代码。
  • 多格式输出:可轻松将配置渲染为YAML、JSON、XML等常见格式。
  • 灵活的集成方式:既可作为独立工具生成静态配置文件,也可通过语言绑定作为库嵌入其他应用程序。

核心功能示例

  1. 定义与继承:使用module定义配置模板(如Application.pkl),通过amends关键字创建派生配置(如localhost.pkl),避免重复。
  2. 数据生成:支持使用for循环等生成器动态创建配置变体(如sidecars.pkl)。
  3. 数据验证:在类型注解中添加约束(如isBetweenmatches),违反约束将引发评估错误。
  4. 包管理:支持发布和导入包,可通过项目文件管理依赖,解决版本冲突。

工具与生态支持

  • 语言绑定:支持将Pkl模式生成为Swift、Go、Java和Kotlin等语言的代码(类/结构体),并保留文档注释。同时提供低层级的评估器API。
  • 编辑器集成:提供一流的IDE支持(如IntelliJ插件),包含自动补全、导航、即时验证和重构等功能,并计划支持语言服务器协议以扩展到其他编辑器。
  • 官方包:维护如pkl-pantry(综合包仓库)和pkl-k8s(Kubernetes模板)等共享包。

Pkl 旨在为配置提供一个安全、可扩展且编写体验愉悦的专用语言解决方案。

2. Stories removed from the Hacker News Front Page, updated in real time (github.com)

Hacker News 首页删除文章实时追踪项目

项目背景与动机

本项目旨在记录并公开从Hacker News首页被移除的帖子,以增进对HN内容审核类型与规模的了解。作者出于个人原因开始开发此工具:其朋友发布的两个帖子分别经历了标题修改(导致排名下降)和直接移除,这引发了作者的疑问。在与版主@dang沟通后,虽然获得了回复,但作者决定开发一个监控工具来观察此现象的频率,并最终决定将其公开,以促进透明度。作者强调热爱HN并理解其审核工作的难度。

项目数据示例与观察

项目提供了自2026年5月29日至6月4日被从首页移除的文章列表。列表包含文章ID、移除时的排名、积分和评论数、以及标题。请注意,项目无法自动判断帖子是否因“重复”而被移除,用户需自行核实,这是一个合理的删除原因。 列表中的帖子涵盖了广泛主题,例如:

  • 热门帖子:如“Creatine raises brain energy levels...”(506分)、“Proposed new US funding rules...”(299分)、“Blue Origin’s New Glenn rocket exploded...”(204分)等高积分高评论数的帖子也可能被移除。
  • 主题多样性:被移除帖子涉及科技、AI/LLM、创业、社会议题、开源项目等多个领域。
  • 实时更新:列表每分钟更新一次,数据具有实时性。

技术实现方式

该服务通过官方HN API运作:

  1. 每分钟获取前90条“热门故事”。
  2. 与前一分钟抓取的前30条“首页”进行比较。
  3. 记录在上一分钟的前30名中,但本次未进入前90名的帖子。
  4. 基本假设:一个帖子不可能在一分钟内从首页(前30名)掉到90名开外,除非被主动移除。
  5. 如果帖子重新出现在首页,则从日志中移除。
  6. 排除在“二次机会”池中的帖子。
  7. 记录的标题和URL是帖子首次进入前30名时的版本;积分、评论数和排名是移除时的状态。

项目意义

作者指出,目前没有其他工具提供此类信息。他认为一个积极的成果可能是HN官方提供类似的列表,或在帖子被“惩罚”时通知用户具体原因(如flag数量)。该项目为观察HN首页内容审核提供了一个外部视角。

3. The EPA is proposing that 'forever chemicals' be considered hazardous substances (www.npr.org)

美国环境保护署(EPA)提议,将九种被称为“永久化学物质”的全氟烷基和多氟烷基物质(PFAS)列为对人类健康有害的物质。

提议内容 EPA于周三签署了一项提案,拟根据《资源保护与回收法》将这九种化学物质认定为“有害成分”。要被认定为有害成分,该物质必须具有毒性或会导致癌症、基因突变或胚胎畸形。

PFAS的特性与风险

  • 定义与特性:PFAS是数千种人造化学品的总称,因其极难分解并在人、动物和环境中累积,故被称为“永久化学物质”。
  • 健康影响:EPA引用多项研究指出,PFAS会对人类和动物产生多种“毒性作用”,包括但不限于癌症、对疫苗接种反应降低、高胆固醇、女性生育力下降、先兆子痫、甲状腺疾病和哮喘。
  • 应用范围:PFAS广泛用于制造业,常见于不粘炊具、粘合剂、消防泡沫、人造草坪等产品。
  • 环境暴露:美国地质调查局去年夏天的一项研究发现,这种人造化学物质存在于该国近一半的自来水供应中。研究检测了32种PFAS,而此类物质超过12000种,且即使在极微量下也可能构成健康威胁。

相关行动与后续步骤

  • 行业诉讼:2023年6月,化学制造商3M公司同意支付约100亿美元的诉讼和解金,以帮助净化全国水源,此前原告声称该公司的消防泡沫等产品导致PFAS污染了自来水。
  • 公众评议:该拟议规则将在上传至《联邦公报》后开放公众评议,案卷编号为EPA-HQ-OLEM-2023-0278。
4. How is a binary executable organized? Let's explore it (2014) (jvns.ca)
5. Goodbye non-KISS appliances (willbush.dev)

核心观点:作者因维修复杂冰箱(如带触摸屏、RFID滤芯锁定的法式门冰箱)屡次失败,转而选择极简家电,认为简单设计更可靠省心。

主要经历与问题

  • 丢弃旧冰箱:一台6年历史的GE法式门冰箱因无尽维修被送出,作者拒绝再购复杂型号(如三星四门冰箱)。
  • 生存者偏差例子:一台2004年生产的Kenmore侧对开门冰箱仅换过压缩机继电器,运行数十年;而之后两台法式门冰箱均故障频发。
  • 法式门冰箱的典型故障
    • Kenmore法式门冰箱多次因同一问题(风扇电机结冰)维修,最终获全额退款。
    • GE Café冰箱(型号CFE28TSHESS)问题更复杂:
      • 触摸屏失灵、蒸发器风扇两次故障(2020年和2022年)、冷凝器风扇故障导致冰箱外壳发热、除霜排水管堵塞需年度清理。
      • RFID滤芯锁定迫使用户购买高价原装滤芯。
      • 通过服务模式发现多个错误代码(如冷凝器风扇转速不足、除霜异常等),但压缩机继电器更换后仍无法启动。
    • 维修成本高(如风扇单价74美元),且技术难度大(如冷凝器风扇更换困难)。

转向简单设计

  • 放弃法式门冰箱:转而选择顶部冷冻室的老式冰箱,认为简单设计减少故障点。
  • 其他家电简化经验
    • 无需垃圾处理器。
    • 使用传统顶装洗衣机(仅换过60美元的换挡执行器)和Whirlpool干衣机(仅换过加热元件)。

结论

  • 复杂功能价值不足:触摸屏、制冰/热水分配器等高级功能增加故障风险,而简单家电更可靠。
  • 工程努力有限:尽管复杂系统(如混合动力汽车)可做到可靠,但对冰箱而言,极简设计是更务实的选择。

(注:文章末尾的论坛链接及部分内容因标记为“s”或无实质信息,未纳入总结。)

7. Over the Edge: The Use of Design Tactics to Undermine Browser Choice (research.mozilla.org)

摘要
Mozilla委托独立研究专家Harry Brignull和Cennydd Bowles发布报告,详细揭示了微软如何在Windows操作系统中通过有害设计手段,将Edge浏览器置于中心位置,并利用界面设计削弱用户选择其他浏览器的能力。研究指出,这些做法违背了微软自身的设计准则,对消费者造成损害,并抑制了竞争对手(尤其是Firefox等独立浏览器)的发展。尽管欧盟《数字市场法》推动了监管改革,但微软等公司的改进措施有限(如仅针对欧盟经济区用户),且态度被动。报告强调,全球用户仍面临选择自由受系统干扰的问题,呼吁加强国际监管以恢复浏览器市场的公平竞争。

8. Pinball Map: Crowd-sourced worldwide map of public pinball machines (pinballmap.com)

Pinball Map:全球公共弹球机众包地图

核心定位 Pinball Map 是一个创立于2008年的开源、众包式全球公共弹球机地图。其核心使命是通过用户社区的力量,绘制并维护世界各地可公开使用的弹球机的位置信息。

主要数据与功能

  • 目前地图收录超过 12,472 个地点53,432 台弹球机
  • 提供免费的移动应用程序(Android 和 iOS),无广告、无追踪,方便用户随时查找附近的弹球机。
  • 平台完全由用户驱动。用户可通过创建账户,添加/删除机器、提交新地点、编辑地点信息、添加机器评论和高分记录
  • 数据由超过100名管理员和数千名活跃用户共同维护。
  • 项目本身不进行商业化盈利,代码完全开源。

技术支持与架构 网站和移动应用广泛使用免费和/或开源服务

  • 技术栈:网站基于 Ruby on Rails;移动应用基于 React Native。
  • 部署与托管:使用 Dokku 进行构建和部署;服务器和数据库托管于 DigitalOcean。
  • 地图服务:网站使用 OpenStreetMap 数据;应用使用 Mapbox 图块。
  • 其他服务:使用 Expo、Scout APM、Sentry、Google Maps/HERE Maps 等进行开发、监控、崩溃报告和地理编码。
  • 项目维护者也参与维护 Open Pinball Database (OPDB),OPDB 为 Pinball Map 提供弹球机后盖图像。

社区参与与支持方式

  • 用户可以通过 Ko-fi 或 Patreon 进行捐赠(一次性或定期),以支持项目运营成本。支持者可获得更新内容、商品折扣及 Discord 特殊身份。
  • 运营商工具:商家可注册其场所,管理地点,并接收关于机器评论的电子邮件通知。
  • 区域地图:除了全球大地图,还存在由本地管理员和用户创建和维护的区域性地图,聚焦于特定城市、州或国家。

合作伙伴与数据使用

  • 项目提供公开的 API,供第三方应用调用其数据。
  • 多个合作伙伴(如 Stern Pinball、Matchplay Events、Pindigo、Scorbit 等)使用其数据。
  • 使用数据时需要注明出处

周边与传播

  • 项目设有商店,销售定制的钱包、毛线帽、贴纸等周边商品。
  • 鼓励用户通过分享传单等方式向他人推荐此地图。
11. Microsoft seeks Rust developers to rewrite core C# code (www.theregister.com)

微软组建新团队,用Rust重写核心C#服务

微软正积极采用Rust编程语言。根据其招聘网站的一则职位信息,公司正在组建一个Rust开发者团队,旨在将部分核心C#服务迁移到Rust平台。

主要举措

  • 招聘目的:微软正在组建新团队,专注于采用Rust语言来现代化其全球规模的平台服务,并计划将这一努力扩展到更广泛的领域。
  • 具体职位:该职位为“微软365首席软件架构师”,隶属于Substrate App Platform(属于微软365核心平台组织)。
  • 核心职责:负责指导Rust组件库、SDK的技术方向、设计与实现,并将现有的基于C#的全球规模服务重新实现为Rust。
  • 战略意义:Substrate是微软云服务幕后负责繁重工作的平台,将其重写为Rust表明了微软的明确意图。

历史背景与行业关联

  • Rust应用历程:微软对Rust的兴趣由来已久。早在2023年,Windows操作系统安全总监就宣布在Windows内核中引入Rust,此后该语言逐渐被用于多个组件。
  • 行业合作:微软与Meta、AWS等公司同为Rust基金会的白金成员。
  • 技术趋势:这一举措符合行业对内存安全编程语言日益增长的热情。Rust能在比C++等语言更少的努力下提供内存安全特性,而微软对此的拥护并非意外。

潜在影响与反应

  • 社区反应:将现有C#服务迁移到Rust的意愿可能会在开发者社区中引起一些惊讶,因为C#长期以来在微软生态系统中占据重要地位。
  • 公司立场:尽管微软在公开场合表示仍将致力于C#,但其近年来的行动和此次招聘表明,公司正在保持技术选择的开放性。
  • 行业风向标:此举也反映出在日益激烈的竞争环境中,工程师在选择新技能时可能的发展方向。
12. I also hacked my car (goncalomb.com)

本文作者受其他汽车黑客项目启发,尝试破解其2023款Dacia Sandero(搭载MediaNav Evolution车机系统)以获取root权限。

最初,作者发现通过USB驱动器中的autorun.sh脚本(以root权限运行)是常见的已知漏洞。然而,经固件分析(版本6.0.9.9)发现,此功能在较新固件(6.0.10.2)中已被移除,因此尝试失败。

转而分析官方提供的安卓手机地图更新应用。通过反编译APK,发现其使用了一种名为NFTP的专有二进制协议,并通过Android Open Accessory(AOA)协议进行USB传输。车机端对应部分由名为aoa2sock的程序和一些.xs脚本处理。

为利用此通道,作者使用树莓派(Zero 2 W)模拟安卓设备。关键步骤包括:将树莓派配置为USB gadget模式以模拟AOA设备,并为此修改了Linux内核源码中的USB子类设置。随后,作者用Python自行实现了NFTP协议。

攻击原理是:车机系统误将树莓派视为进行地图更新的手机,而NFTP协议允许向/navi目录写入任意文件。作者通过该协议修改了特定文件,注入了一个以root权限执行的bash脚本作为后门。

最终,通过树莓派连接车机并触发后门,成功获得root shell访问权限。作者后续通过D-Bus方法弹出包含id命令结果的弹窗以证明成功,并通过socat建立了反向shell。

整个项目的代码(包括NFTP协议实现和gadget配置)已在GitHub上发布,不含专有代码。作者未来计划恢复autorun.sh功能以便加载软件,并探索通过D-Bus读取车辆参数(如速度、油耗等)。

13. A lesson in dockerizing shell scripts (bhupesh.me)

本文记录了作者将Shell脚本ugit打包为Docker镜像,并通过一系列优化将镜像体积从31.4 MB减小至17.6 MB(约40%)的过程。

初始Dockerfile:基于Alpine镜像,安装了bashgitfzf等依赖,镜像体积为31.4 MB。

优化过程

  1. 多阶段构建:第二阶段仍使用Alpine,仅从构建阶段复制必要二进制文件。发现xargsawk已默认包含于Alpine中,移除了相关包。镜像减至20 MB,但因缺少共享库无法运行。
  2. 使用scratch基础镜像:第二阶段改用空文件系统scratch,进一步减小体积至12.4 MB,但同样因依赖缺失而失败。
  3. 处理共享库依赖:使用ldd工具识别bashgitfzf等二进制文件所需的共享库(.so文件),并将其复制到最终镜像中。
  4. 移除无用部分
    • 移除脚本开头的shebang行(#!/usr/bin/env bash),直接通过CMD ["/bin/bash", "/bin/ugit"]调用。
    • 精简terminfo数据库,仅复制xterm-256color终端类型的文件。

最终结果:经过上述优化,镜像体积降至17.6 MB。作者选择了固定fzf最新版本(0.46.0)以避免旧版本的安全漏洞,并保留了对bash 4.0的兼容性以支持更广泛的用户环境。

其他尝试与说明

  • 未使用docker-slim,因其可能导致依赖缺失;docker-squash的优化效果甚微。
  • 文章最后提供了最终的Dockerfile结构,强调了仅包含运行ugit所必需的二进制文件、共享库和终端信息。
14. When should you give up on a project that doesn't work? (www.preethamrn.com)

项目假设与动机

作者假设维基百科现有随机浏览功能存在缺陷:缺乏地图显示且按距离排序文章。因此,他计划开发一个工具,让用户通过拖拽地图搜索附近文章,并按页面浏览量排序,以提升浏览趣味性和辅助旅行规划。

项目进展阶段

  • 初始热情:第一周快速完成基础功能,集成OpenStreetMaps和维基百科API,实现地图显示、文章列表、过滤和排序。
  • 借口:第二周因工作忙碌和旅行拖延项目,作者反思这可能源于对项目失败的潜意识恐惧。
  • 假生产力:第三周进行大量UI更改(如更换UI库、添加地理位置支持、优化CSS),但核心问题未解决,如页面延迟、不相关文章(如暴力事件)出现、移动端体验差。
  • 推迟任务:作者意识到需彻底改革算法和性能改进,却继续专注于表面修改(如移动端UI和弹窗优化),导致项目实用价值低。

放弃决定与教训

作者最终放弃项目,因害怕假设错误,并意识到应更早测试核心假设。项目被搁置,他希望通过分享经历警示他人:如果一个项目值得做,应能立即感知其价值(如他早期项目凭原型获得Reddit高关注)。未来计划中,作者将更早验证假设,避免重复错误。

反思与展望

作者总结,项目失败源于持续进行表面优化而非解决根本问题。他在Reddit分享后收到的建议多属无实质改进(如单位切换、多语言支持),进一步印证项目方向错误。现在,作者转向新项目,并承诺更注重早期假设测试。

15. Car insurance in America is too cheap (www.economist.com)

事件概述

2010年,Eric DuBarry和两岁儿子Seamus在俄勒冈州波特兰过马路时,被一名误将油门当刹车的老年司机撞倒。车祸导致Seamus死亡,医疗费用高昂。

保险覆盖问题

  • 医院收取了18万美元的护理费用,由夫妇的保险覆盖大部分,但他们仍需自付4,500美元。
  • 保险未覆盖他们因停工导致的收入损失。
  • 母亲Michelle DuBarry曾期望肇事司机的汽车保险能承担部分费用,但事实显示覆盖不足。

文章主题

故事揭示了美国汽车保险定价过低的问题,可能导致在严重事故中保险覆盖不足,无法充分保障受害者。

来源

文章出自《经济学人》2024年1月20日印刷版的美国部分,标题为“Crashing truths”。

16. AT&T applies to end obligation to service landlines in California (www.cbsnews.com)

AT&T已向加州公用事业委员会(CPUC)提交申请,希望终止在加州部分区域提供固定电话服务的义务。这一申请目前正由CPUC审批中,若获批且没有其他公司接替服务,可能导致这些地区的传统固定电话网络终止。

报道通过卡姆波塞科居民帕特里夏·佩雷拉的案例,展示了该申请可能带来的直接影响。佩雷拉使用固定电话长达58年,但一年多前电话被停用后,她虽首次尝试使用手机,却因居住在手机信号盲区而陷入通讯困境,无法有效拨打紧急求助电话。她表示,当地许多居民仍依赖固定电话,认为这是最可靠的通讯方式。

AT&T在声明中表示,申请旨在寻求CPUC批准,以移除过时的加州法规,并帮助剩余的少数固定电话用户过渡到现代替代服务。公司承诺,在AT&T或其他服务商提供替代服务之前,所有加州客户将继续享受传统固定电话服务。

CPUC已计划在3月期间举行四场公听会,就此申请听取公众意见。

17. Why Isn't the <html> Element 100% Supported on CanIUse.com? (anderegg.ca)

标题:为什么 <html> 元素在 CanIUse.com 上的支持率未达到 100%?

文章探讨了一个令人困惑的现象:基础 HTML 元素 <html> 在 CanIUse.com 上显示的支持率仅为 97.34%,甚至低于 <audio> 等其他元素。作者对此进行了调查。

  • 数据来源与初步发现:CanIUse.com 的许多数据来源于 MDN Web Docs。MDN 的 <html> 元素兼容性表格中,存在两个带有大量“不支持”标记的条目:一个是已弃用且从未标准化的 manifest 属性;另一个是同样已弃用的“安全上下文要求”规范。作者认为这些未标准化的特性可能是支持率未达 100% 的原因。
  • 数据计算的疑问:然而,将 MDN 标记为“支持未知”的浏览器使用份额相加,仅得 1.27%,与缺失的 2.66% 不符。此外,一些旧版浏览器(如 Android Browser 2.1-4.3)被列为不支持 <html>,其使用份额为 0%,但作者质疑其准确性,并认为可能存在四舍五入误差。
  • 潜在解释:文章更新部分提到,一位 Mastodon 用户指出,如果在 CanIUse.com 上将统计基准切换为“所有被跟踪的浏览器”,那么“支持未知”的浏览器份额总和仅为 0.02%,对应支持率为 99.98%。这表明差异可能源于统计范围和显示数字的四舍五入。
  • 结论:作者认为,尽管此问题对总体数据影响不大,但对于 <html> 这样的基础元素,其支持率的计算和显示方式仍令人困惑。作者将继续视 CanIUse.com 为宝贵资源,但会对数据持更审慎的态度。
18. Show HN: The classic Minesweeper on an irregular grid (polyreplay.com)

在不规则网格上运行经典扫雷游戏

这是一个技术演示项目,展示了如何将经典的扫雷游戏移植到不规则网格上运行。其核心创新点在于突破了传统扫雷仅限于规整方格或六边形网格的限制,将游戏逻辑拓展到了形状不规则的单元格构成的网格中。

主要技术要点

  1. 网格生成与定义:项目需要实现一套算法来生成或定义由不规则多边形(如任意四边形、三角形或其他多边形)拼接而成的网格。关键难点在于准确计算每个单元格的相邻单元格,这是扫雷游戏逻辑的基础。

  2. 游戏逻辑适配:经典扫雷的游戏规则(如点击揭示、标记地雷、计算周围地雷数)必须适配新的网格结构。程序需要能正确处理:

    • 邻接计算:基于新网格的几何关系,精确判定哪些单元格相邻。
    • 地雷数显示:每个单元格显示的数字代表其相邻单元格中的地雷数量,此计算依赖于正确的邻接关系。
  3. 交互与可视化:前端界面需要能够渲染不规则网格,并为每个单元格处理点击、右键标记等交互事件。界面设计需保证游戏在视觉上清晰可辨,即使在网格形状不规整的情况下。

项目意义

该项目演示了在复杂、非标准的几何结构上实现经典游戏逻辑的可行性,主要挑战来源于对“邻居”这一概念的重新定义和计算。它为图形学、游戏开发或算法设计中处理不规则空间划分提供了一个有趣的实践案例。

19. The decline of hardware knowledge in the era of cloud native compute (www.magesguild.io)

云原生时代硬件知识的衰退

在当今计算生态系统中,作者作为一名典型的云原生工程师,从职业生涯早期就专注于AWS和云部署,精通Chef、Ansible、Terraform等工具,并受过Kubernetes培训。然而,作者坦承自己对硬件、内核和驱动等底层知识长期缺乏了解,视其为“神秘不透明的黑盒”。这种现象在云原生技术人员中极为普遍——大多数云工程师既不理解也不愿深入硬件、内核和驱动层面的编码。

这导致了一系列问题:

  • 故障排除能力缺失:许多技术人员无法使用系统工具追踪内核调用等底层数据,难以定位内存泄漏或故障。
  • 效率损失:尤其高层应用开发者(如Web开发者)不理解操作系统底层管理,无法预判代码在大规模生产环境中的行为差异,性能验证通常依赖SRE等专业角色。

尽管存在少数从8位计算时代走来的底层专家(作者观察到Windows专家更易早期接触硬件概念),但云团队中这类人才仍然稀缺。

核心论点:计算机科学教育应引入8位计算标准。8位系统在物理上与32/64位系统原理一致,但更简单易学,是优秀的教学平台。随着计算技术深度融入人类生活,提升全民计算机素养至关重要,否则可能使组织或政府垄断计算资源,损害开发者和用户的公平访问权。

作者指出,云原生作为行业热点,其发展离不开底层硬件知识的支持。掌握底层计算知识的云工程师能设计出更高效的方案。文末提供了Ben Eater的教程、Small Computer Central和Discord等自学资源。

20. Folk Computer (folk.computer)

Folk Computer 项目概述

项目性质:一个基于 GitHub 的开源软件项目。

社区与支持

  • 提供 Discord 社区,用户可通过发送邮件申请访问,用于交流互助。
  • GitHub Sponsors 接受赞助。
  • 合作伙伴包括 One Fact Foundation 等历史支持者。

资源文档

  • 软件(Software):项目核心代码或相关程序。
  • 指南(Guides):使用或开发帮助文档。
  • 长篇笔记(Long-form notes):项目相关详细说明或背景资料。

媒体与联系

  • 拥有专属的 Folk 媒体 渠道。
  • 欢迎具体的合作或支持,可通过 contact@folk.computer 联系。
21. Full $71M breakdown for The Village by M. Night Shyamalan (2003) [pdf] (wlmager.com)
22. Designer News is dead (solomon.io)

Designer News 曾是产品设计师日常访问的热门社区,专注于文本讨论,涵盖产品设计的功能性、实现、可访问性及团队建设等深度话题,这在以视觉美学为主导的设计平台(如Dribbble、Behance)中独具特色。

该社区由LayerVault创建,该公司曾推出面向设计师的版本控制系统。早期Designer News采用邀请制,确保了内容质量和讨论水平。2013年至2016年间,社区氛围活跃,成员交流质量高,作者作为早期成员(编号484)曾是顶级贡献者,并主持社区播客DN FM。

2016年左右,Designer News开放注册,但缺乏相应的管理和审核机制,导致内容质量逐渐下滑,至2018年已被垃圾信息充斥。社区组织者虽曾投入资源维护,但效果有限。

LayerVault于2015年停止运营,Designer News被Metalab(或Tiny?)收购。近期,该社区被求职平台WeWorkRemotely收购,并宣布将不再提供支持。最终,Designer News在充满加密货币和体育博彩广告的状态下正式关闭。

作者指出,Designer News实际上早已名存实亡,贡献者和活跃用户逐渐流失,社区最终沦为“鬼城”。作者希望为产品设计师寻找新的在线讨论平台作为替代。

23. Paintings reveal how the Dutch adapted to extreme weather in the little Ice Age (www.smithsonianmag.com)

小冰河时期(约1250-1860年)导致全球平均气温下降,对包括荷兰在内的欧洲社会造成深刻影响。文章指出,这一时期的绘画艺术成为记录极端气候事件与人们适应方式的宝贵史料。

艺术作为气候史证据

  • 历史文献与艺术作品共同揭示小冰河时期的冲击,如严寒、洪水、干旱、冰川扩张等。
  • 绘画直接描绘了气候异常,例如1565年科尔内利斯·雅各布斯·范·库伦堡画作记录了代尔夫特港出现的巨大冰山,表明当时冬季的严酷程度。
  • 即使是不直接描绘气候异常的作品(如保罗·委罗内塞1571年的画作),通过比较建筑藻类痕迹,也能推断出当时的海平面比现在低约76厘米。

荷兰艺术的适应与转变

  • 小冰河时期恰好与宗教改革后的艺术转型重合,北欧艺术家转向描绘现实生活,荷兰绘画尤其以“描述性艺术”和现实主义著称。
  • 冬季场景绘画的兴起:在严冬成为常态后,冬季场景这一绘画类型逐渐发展起来。

两位关键画家及其主题

  1. 老彼得·勃鲁盖尔(活跃于16世纪中期)

    • 其作品如《雪中猎人》(1565年)直接展现了小冰河时期的严酷,描绘了猎人收获寥寥的艰辛。
    • 画中常将劳作人群与背景中无忧无虑的冰上嬉戏者并置,可能带有道德警示的意味(如“如履薄冰”)。
    • 另一幅《有滑冰者和捕鸟器的冬景》通过象征手法,将冬景与灵魂在危险世界中的旅程联系起来。
  2. 亨德里克·阿弗坎普(活跃于17世纪初)

    • 其作品风格更明快温馨,几乎只描绘人们享受滑冰、雪橇等冰雪活动的欢乐场景,弱化了严寒的苦难色彩。
    • 这反映了荷兰共和国在独立后(1588年)国力上升,社会更善于适应并利用小冰河时期。例如,船只会加固船体以破冰航行,破冰船用于维持水道畅通。
    • 冰面也成为暂时打破社会等级的空间,成为一种“颠倒的世界”。

绘画记录的社会适应与影响

  • 艺术作品不仅记录了极端天气下的生存挑战(如燃料短缺、交通中断),也记录了社会的创新与适应。
  • 小冰河时期对荷兰共和国整体而言利大于弊(如某些气候变化曾有助于军事),但对许多普通公民来说仍是充满苦难的。
  • 阿弗坎普的大量冬景画将冬季活动塑造为荷兰民族身份的一部分。

当代意义

  • 如今,由于全球变暖,传统户外滑冰活动在荷兰逐渐消失。
  • 这些数百年历史的绘画因此带上了怀旧与失落感,成为连接过去自然冰雪世界的文化记忆,如同“恐龙骨架”般提醒着人们正在消失的气候遗产。
26. Native Exchange Support is coming to Thunderbird (linuxiac.com)

2024年1月,Thunderbird项目启动了月度开发摘要,旨在提升社区透明度。首个版本透露了多项重要进展。

核心组件重构:全球消息数据库 Thunderbird在2024年的主要工作是彻底重构其全球消息数据库。该数据库基于过时的Mork框架,存在诸多限制。此次重构旨在消除这些限制,并为未来功能(如真正的线程化对话视图)奠定基础。目前团队正深入替换这一核心组件。

里程碑式更新:原生Exchange支持 历经多年等待,Thunderbird即将实现原生Microsoft Exchange支持。这被视为一个“改变游戏规则”的功能,有望吸引大量新用户。其技术实现的关键在于引入了Rust语言。团队正在构建和维护一个Rust crate以实现对Exchange协议的原生支持。该项目规模庞大,完成后相关的crate将公开在GitHub上。更多技术细节将陆续在邮件列表中公布。

功能完善:卡片视图进入最终阶段 针对使用每日构建或测试版的用户,卡片视图已发生显著变化。开发团队正专注于打磨该功能并集成额外特性,目前项目已进入最终冲刺阶段

相关资源

27. Carl Weathers, Apollo Creed from Rocky movies, dies aged 76 (www.bbc.co.uk)

美国演员卡尔·韦瑟斯去世,享年76岁

基本信息

美国演员卡尔·韦瑟斯于76岁去世。根据其家人发布的声明,他在睡眠中平静离世。

职业生涯

  • 代表作:因在《洛奇》系列前四部中饰演阿波罗·克里德而广为人知。其他知名电影包括与阿诺·施瓦辛格合作的《铁血战士》、亚当·桑德勒主演的《快乐的吉尔摩》等。
  • 生涯跨度:职业生涯超过50年,出演了超过75部电影和电视剧。
  • 近期作品:在迪士尼+热门剧集《曼达洛人》中出演全部三季,并因此于2021年获得艾美奖提名。此外,他还执导了《曼达洛人》等剧集的数集。

个人背景

  • 早期经历:1948年出生于新奥尔良,最初是一名美式橄榄球运动员,曾效力于奥克兰突袭者队。他在圣迭戈州立大学学习戏剧表演。
  • 形象评价:从运动员成功转型为演员,在动作片和喜剧片中均表现出色。家人称他为“杰出的人,度过了非凡的一生”,并表示他通过影视、艺术和体育领域的贡献,在全球范围内留下了不可磨灭的印记。

业界与同行悼念

多位演艺界人士公开表达哀思与敬意:

  • 阿诺·施瓦辛格:称赞他将永远是传奇,并感谢他在《铁血战士》拍摄中的贡献。
  • 亚当·桑德勒:称其为“真正的伟人”,既是好父亲,也是优秀的演员和运动员。
  • 西尔维斯特·史泰龙:在视频中动情表示,韦瑟斯是其生活与成功不可或缺的一部分,《洛奇》的成就离不开他的才华。
  • 詹卡洛·埃斯波西托:表示深切怀念这位“亲爱的朋友与兄弟”。

个人态度

韦瑟斯曾在采访中称自己为“幸运的人”,感谢前人开创的道路,并希望自己也能激励后人。

28. How to write a novel using the snowflake method (2013) (www.advancedfictionwriting.com)

雪花写作法:十步设计一部小说

本文介绍了作者兰迪·英格曼森(Randy Ingermanson)自创的“雪花写作法”。该方法受软件架构设计启发,借鉴雪花分形的生长过程(从简单三角形逐步扩展为复杂雪花图案),强调通过先设计再写作的方式,高效构建小说骨架。作者认为,优秀的虚构作品需要精心设计,而先进行设计比事后修改更省时、效果更好。

核心思想

  • 设计先行:在动笔写草稿前,通过十个步骤从核心创意逐步扩展出完整的故事设计文档。
  • 角色驱动:角色的设计是故事的核心,投入时间预先设计角色能极大提升写作效率。
  • 迭代修改:设计过程是动态的,随时可以返回之前的步骤进行调整,设计文档会随着创作而不断完善。

十步设计流程

  1. 一句话概括:用一句话提炼小说核心,作为“一句话卖点”。需简短(少于15个词)、避免角色名、突出核心冲突。
  2. 一段式概括:将一句话扩展为包含故事设定、三场“灾难”和结局的段落。作者偏好“三场灾难+结局”的结构,每场灾难占据故事约四分之一篇幅。
  3. 角色设计:为主要角色各写一页概要,包括:名字、故事线一句话概括、动机、目标、冲突、领悟、以及角色故事线的段落概述。此步骤可能触发对之前步骤的修订。
  4. 扩展段落:将第二步中的每个句子扩展为一个段落(最后一段为结局),形成一页纸的故事骨架。
  5. 角色概要:为主要角色撰写一页详细描述,次要角色半页。从每个角色的视角讲述故事,编辑偏爱此类角色驱动的概要。
  6. 扩展概要:用一周时间,将第四步的一页故事骨架扩展为四页概要,相当于将每个段落扩展为一页。
  7. 角色档案:用一周时间,将角色描述扩展为完整的角色档案,包括生日、外貌、历史、动机、目标、最终变化等所有细节。
  8. 场景列表:基于四页概要,用电子表格列出所有场景。每行一个场景,注明视角人物、情节、预计页数等。便于宏观审视故事线并调整顺序。
  9. (可选)叙事描述:将电子表格中的每个场景扩展为多段叙述,融入对话和冲突细节,形成类似“原型初稿”的详细文档。作者目前已省略此步。
  10. 撰写初稿:基于完善的设计文档开始写作。此时作者已清楚故事整体结构,只需解决具体的小型逻辑问题,写作速度会大幅提升。

方法应用与价值

  • 适用于不同阶段:无论是创作初期、面对杂乱初稿,还是根据编辑意见修改,均可使用此方法理清思路。
  • 节省时间:虽然设计需要投入约100小时,但能避免写出冗长散乱的初稿(原需500小时),总体节省大量时间。
  • 工具推荐:作者推荐使用Plottr软件辅助实践此方法,该软件内置了雪花写作法的模板,可简化设计流程。

总之,雪花写作法提供了一种系统化、可迭代的小说设计框架,通过从一句话到完整场景列表的逐步扩展,帮助作者在动笔前构建坚实的故事基础,从而更高效、更流畅地完成小说创作。

29. Mozilla slams Microsoft for using dark patterns to drive Windows users to Edge (www.theregister.com)

Mozilla 抨击微软使用暗黑模式推广 Edge 浏览器

核心指控

Mozilla 通过一份名为《Over the Edge》的研究报告,指控微软在 Windows 系统中使用“暗黑模式”(即具有误导性或操纵性的界面设计),迫使用户使用 Edge 浏览器,并阻碍其选择其他浏览器。

主要问题与发现

报告指出微软通过多种设计手段影响用户选择:

  1. 伪装的广告:在 Bing 搜索其他浏览器(如 Safari、Vivaldi)时,结果页会出现一个特殊格式的 Edge 广告,其样式类似 Windows 系统弹窗,可能被用户误认为是系统通知。
  2. 页面注入广告:在用户访问 Chrome 等竞品浏览器的官方下载页面时,Edge 浏览器会向该页面注入推广自身的横幅广告。
  3. 设置障碍:在 Windows 11 的“默认应用”设置中,用户即使点击按钮将其他浏览器设为默认,许多文件类型和链接协议的默认打开方式仍不会被更改,形成使用障碍。

背景与影响

  • Mozilla 认为这些设计“强制、操纵或欺骗”用户,损害了消费者权益、市场竞争和社会利益。
  • 该报告将希望寄托于欧盟《数字市场法案》(DMA)的执行,认为此类法规有助于恢复浏览器的自由选择和公平竞争。但同时指出,像苹果等平台商仅在被监管机构强制要求的地区(如欧盟)才做出有限调整。
  • 微软尚未对相关指控作出回应。

结论

Mozilla 的报告总结指出,微软必须立即停止使用这些有害的设计技术,以确保用户能够在不受胁迫、操纵或欺骗的情况下,自由地下载、安装并设置任何合法的浏览器作为默认选项。

30. Apple releases Pkl – configuration as code language (pkl-lang.org)

Apple 发布了 Pkl(发音为“pickle”),这是一种配置即代码的语言,旨在使配置可编程、可扩展且安全。

Pkl 的核心思想是将配置定义为代码。它使用一种专门的语法来定义数据结构,然后可以编译并输出为多种静态配置格式,例如 JSONYAMLProperty Lists

主要特点与功能:

  1. 生成静态配置格式:开发者只需在 Pkl 中定义一次配置数据,然后可以将其输出为适用于不同环境的多种标准格式。
  2. 集成到应用程序中:Pkl 可以作为库嵌入到应用程序中,用于运行时配置。它还能为 JavaKotlinSwiftGo 等语言生成代码,方便与应用程序集成。
  3. 丰富的类型系统和验证:Pkl 拥有强大的类型和约束系统。开发者可以在配置中直接定义规则(例如,端口号必须大于 1000),Pkl 会在生成或使用配置前进行验证,从而在部署前就捕获配置错误。
  4. 优秀的开发工具支持:Pkl 提供了出色的集成开发环境(IDE)支持,包括 IntelliJ、Visual Studio Code 和 Neovim 的插件与扩展,以及一个独立的语言服务器,使得编写配置就像编写静态类型语言的代码一样便捷高效。

总之,Pkl 通过将配置提升为一门真正的编程语言,解决了传统配置文件在可维护性、可验证性和跨平台一致性方面的挑战。

31. Compiling Pattern Matching (compiler.club)

编译模式匹配的算法概述

简介

本文概述了Luc Maranget在“编译模式匹配为良好决策树”中描述的算法。该算法形式化直截了当,实现简单,能为函数式编程中大多数模式匹配实例生成合理的决策树。决策树易于推理,可用于相关转换,如转换为简单模式匹配或带有连接点的中间表示。

核心数据结构

算法的核心数据结构包括:

  • 模式矩阵:存储模式匹配规则左侧的可检查模式。元组不直接存储,而是将其组件分解到矩阵中。
  • 出现向量:描述从模式矩阵列中提取值的序列,维护分解过程中的访问路径。
  • 动作向量:存储每行对应的动作(规则右侧表达式),在匹配成功时执行。

矩阵操作

构建

构建模式矩阵时需处理元组和模式变量。元组组件被分解到不同列,并标记出现向量。为处理形状不一致的模式(如变量模式),可能需要法律化(如将顶层变量移到右侧)以确保一致性。

特化

特化操作基于指定值或构造器过滤行,并分解子模式。例如,对Some构造器特化会保留相关行,并将内部模式(如元组)分解到新矩阵中。

默认化

默认化保留匹配未检查构造器的行,用于决策树的默认情况。若无可匹配行,则产生空矩阵表示匹配失败。

交换

交换列以确保第一列是可反驳的,便于算法从左到右处理模式。

算法描述

算法定义为递归函数,处理模式矩阵:

  1. 若矩阵为空,返回失败叶子节点。
  2. 若第一行不可反驳(如通配符或变量),返回成功叶子节点。
  3. 否则,找可反驳列,通过特化为每个构造器或值生成子矩阵,并递归编译。若签名不完整,则计算默认矩阵。

示例与实现

文章提供了SML代码示例,如merge函数、Some/None模式和红黑树平衡函数,展示了算法生成的决策树。作者还实现了一个简单版本,并讨论了通过哈希共享优化决策树为有向无环图(DAG)的方法。

进一步阅读

文章引用相关研究,如Augustsson的回溯自动机、Pettersson的DFA方法以及Reppy对守卫编译的探讨,为深入理解提供了资源。

结论

该算法通过矩阵操作系统地编译模式匹配,支持复杂模式并生成高效决策树,是函数式语言实现中的实用技术。

32. SeaweedFS fast distributed storage system for blobs, objects, files and datalake (github.com)

SeaweedFS 是一个简单、高度可扩展的分布式文件系统,主要目标为存储数十亿文件并实现高速访问,适合开发、测试、学习和单节点部署,也可通过增加卷服务器扩展至多节点大规模应用。

系统架构:

  • 核心设计采用中心化 master 管理数据 volume(每个 32GB),volume servers 负责具体文件与元数据,仅需 16 字节即可存储每个 blob 的元信息,读取操作为 O(1)(一次磁盘操作),大幅提升并发与小文件效率。
  • master server 管理 volume id 至 volume server 的映射,生成写请求的 file key。
  • volume server 支持多卷,直接通过 HTTP 与客户端交互,支持范围查询和直接上传。
  • tiered storage 支持冷热数据分层:新数据快速本地存储,较旧数据(warm data)可异步上传至云端,实现成本优化并无限容量扩展。
  • SeaweedFS Filer 基于 blob store,为系统引入目录结构并支持 POSIX 属性,可用多种数据库作为元数据存储(如 MySQL, Postgres, MongoDB, Redis, Cassandra, Etcd 等),灵活扩展与高可用。

功能特性:

  • 多种复制策略(机架/数据中心感知),自动主服务器故障切换(无单点故障)。
  • 自动压缩、自动合并回收空间、文件 TTL 过期机制、多存储层级配置。
  • 支持 ETag, Accept-Range, Last-Modified;内存/leveldb/只读模式性能调优。
  • 云端透明集成,冷热数据无缝迁移;支持高效纠删码存储(厂商级定制)。
  • Filer 支持目录结构、文件直接挂载(FUSE)、S3/Hadoop/WebDAV/AES256-GCM 加密、异步云备份、超大文件处理、云盘挂载与缓存、跨集群异步副本等,支持 S3 API 与原生数据湖功能(Iceberg REST Catalog),便于 Spark、Trino、Dremio、DuckDB、RisingWave 等直接查询。
  • Kubernetes 原生支持(CSI Driver、Operator)。

快速入门:

  • 本地二进制/Go安装一键启动,支持 S3 端点、Master UI、Volume Server、Filer UI、WebDAV、Admin UI。
  • Docker 启动亦支持上述功能。
  • 基本操作通过 RESTful API,上传/更新/删除/读取文件流程透明简单,可通过 fid(volume id, file key, file cookie)追踪和访问数据。
  • 支持文件副本策略精细化配置,数据中心分区分配。

性能与对比:

  • 针对单机 SSD 测试,写入 1KB 文件每秒可达 1.5 万,随机读每秒达 4.7 万。
  • 支持混合操作(DELETE, GET, PUT, STAT)大集群高吞吐,极低延迟。
  • 与 HDFS、GlusterFS、Ceph、MooseFS、MinIO 等分布式存储对比:SeaweedFS 优化小文件读写,元数据分散至卷服务器无扩展瓶颈,支持丰富元数据存储,高效通用、简单易扩展、冷热数据灵活分层。
  • 相比 MinIO 等方案,SeaweedFS 支持 O(1) 读操作、高效副本/纠删码管理、无需复杂布局和外部元数据服务。

其他说明与企业扩展:

  • 友好 SSD(追加式结构),高效自动合并与空间回收。
  • 提供企业版,支持高级特性如数据恢复、自愈、定制纠删码、EC修复等。
  • Apache 2.0 及 CC BY-SA/GNU FDL 授权开放。
  • 安装简便,支持源码编译或 Docker 部署。

SeaweedFS 适合大规模高并发小文件场景、对象存储、数据湖、云原生环境和企业级应用,核心设计注重极简、易扩展、易运维、性能优越。

33. David Kahn has died (www.schneier.com)

David Kahn 去世消息总结

  • 事件核心:密码学家 David Kahn 于近期去世。他的著作《The Codebreakers》(《破译者》)是密码破译领域的开创性书籍,被视为该领域的严肃入门读物。文章作者表示,这本书是他阅读的第一本关于密码破译的严肃著作,也是其进入该领域的主要动力之一,并对 Kahn 的去世表示怀念。
  • 后续信息
    • 2月4日更新:提供了葬礼网站链接。
    • 2月10日更新:补充了《纽约时报》的讣告链接。
  • 标签与元数据:文章标记为“books, cryptanalysis, history of cryptography”,发布于2024年2月2日下午3:06,共13条评论。
  • 评论摘录:其中一条评论提到,类似事件在数学等其他领域很常见,标准做法是大约用一年时间联系同事和前学生准备回忆录,并选择一位纪念编辑来组织相关活动。

总结涵盖了文章的主要信息,包括事件、个人影响、后续安排及评论中的相关背景。

34. US investigation of Tesla steering problems is now one step closer to a recall (apnews.com)

特斯拉转向问题调查升级及召回通知

转向问题调查更接近召回
美国国家公路交通安全管理局(NHTSA)已将2023年针对特斯拉电动汽车转向问题的调查升级为工程分析,这一步更接近强制召回。调查涉及超过334,000辆特斯拉车辆,主要针对2023款Model Y和Model 3。

调查背景与投诉细节
调查始于2023年7月,当时NHTSA收到12起关于车辆失去转向控制的投诉。目前,投诉数量已增至115起,并在从特斯拉公司获取信息后,又收到2,176起相关投诉。司机报告的问题包括转向控制丧失、动力辅助转向减少或禁用、方向盘无法转动或需要更大操作力度。有案例显示,司机因转向故障无法完成转弯并导致车辆碰撞,还存在车辆阻塞路口或道路的情况,超过50辆车辆需要被拖走。NHTSA正在调查可能的转向架故障原因。

特斯拉宣布大规模召回
同日,特斯拉宣布召回几乎所有在美国销售的车辆,原因是部分仪表盘警告灯尺寸过小。召回将通过在线软件更新完成,涉及车型包括:2012至2023年Model S、2016至2023年Model X、2017至2023年Model 3、2019至2024年Model Y以及2024年Cybertruck。特斯拉尚未对此事发表评论。

35. OpenBSD System-Call Pinning (lwn.net)

OpenBSD 正在试验一种新的系统调用固定机制,旨在通过严格限制进程发起系统调用的内存位置来增加返回导向编程攻击的难度。

背景与现有措施 ROP 攻击利用已有代码片段重组执行流,现有缓解措施(如地址空间布局随机化、栈保护等)作用有限。OpenBSD 自 2019 年起已限制系统调用仅能从四个特定位置发起:静态二进制的文本段、信号蹦床、动态链接器 ld.so 的文本段以及 C 库 libc.so 的文本段。这通过 msyscall() 系统调用告知内核 libc.so 的映射位置实现。2023 年,又引入了 pinsyscall(),专门指定 execve() 调用的发起位置。

新机制:pinsyscalls() 最新工作引入了 pinsyscalls() 系统调用,其接受一个“pintable”,详细指明进程地址空间中每个系统调用的预期发起位置。内核在入口处检查调用是否源自允许位置,从而阻止攻击者通过 ROP 直接跳转到任意系统调用指令(例如,攻击者必须跳转到 C 库中针对 execve() 的特定存根,而非其他位置)。

动态链接器在进程启动时调用 pinsyscalls() 设置该表。新机制在 ld.solibc.solibc.a 中添加了 openbsd.syscalls ELF 段,包含程序偏移与系统调用号的数组。因此,链接 C 库的程序无需修改构建过程即可受益。此工作历时五年完成,将取代旧的 msyscall()pinsyscall()

挑战与争议 实施过程中,最大障碍来自 Go 语言程序,因其直接在二进制中使用系统调用(这在 Unix 软件中极为罕见),经兼容性调整后已解决。

安全研究人员对该机制的实际效果存在疑虑:攻击者仍可能跳转到允许的 C 库存根位置;且该机制在功能上类似于 pledge(),但 pledge() 是由内核强制执行的。此外,尽管 OpenBSD 的 ASLR 包括了对 C 库节的随机重排,动态链接程序仍可能泄露偏移信息。

特点与局限 该机制的优势在于自动应用,无需开发者额外工作,尤其对使用少量系统调用且未采用 pledge() 的静态链接程序有益。但其属于静态防御,不像 pledge() 允许程序在运行时动态调整权限。由于需对系统调用机制进行额外检查,且实际阻止攻击的能力存疑,该机制被其他操作系统采纳的可能性较低。

结论 此工作为 OpenBSD 上的 ROP 攻击增加了新的障碍,特别是增强了静态链接程序的安全性,但其在更广泛环境中的实用价值仍待观察。

36. YDB – an open source distributed SQL database (ydb.tech)

YDB:开源分布式SQL数据库

YDB 是一款功能全面的开源分布式SQL数据库,适用于交易与分析混合负载,并集成了AI能力。

AI与向量搜索

  • 向量相似度搜索:内置原生向量索引,支持近似k近邻查询,用于构建语义搜索、推荐和RAG管道,可扩展至数十亿嵌入。
  • LLM就绪SQL查询:使用熟悉的SQL方言查询结构化或JSON数据,可通过模型上下文协议委托给大语言模型处理。
  • 内置AI助手:提供针对集群管理和查询的上下文感知建议。

事务与一致性

  • 全局ACID事务与强一致性:无需在应用层处理一致性异常问题。

可扩展性与数据处理

  • 在线扩缩容:支持在线添加或移除节点,数据自动分片和再平衡,计算与存储可独立扩展。
  • 变更数据捕获:可订阅行表的实时更新流。
  • 列式存储:支持列式表,可对新鲜数据进行快速分析,并提供与行表相同的事务和一致性级别。
  • MPP向量查询引擎:先进的分布式执行规划器和优化器,可将分析负载扩展至PB级。
  • 联邦查询:可在单个YDB查询中从多个外部数据源获取数据。

流处理

  • Kafka兼容流:YDB主题兼容Kafka API 3.4.0,提供持久化队列、精确一次交付和自动分区。
  • 主题-表事务:统一架构保证了主题与表之间数据移动的事务性。
  • 主题到表数据摄取:自动可靠地将数据从主题摄取到表中进行长期存储。

企业级特性

  • 安全合规:满足PCI-DSS、SOC 2、ISO 27001等多种标准和严格的安全要求。
  • 多种部署选项:支持Ansible(本地/虚拟机)和Kubernetes(云环境)部署。
  • 多租户:支持在单一集群中运行多个隔离数据库,并管理资源分配。
  • 可观测性与备份:集成Prometheus、OpenTelemetry等监控协议,支持备份至S3兼容对象存储或文件系统。
  • 高可用性配置:支持三可用区、双可用区、单可用区及单节点部署,其中三可用区模式可提供高达99.99%的可用性。

性能与版本

  • 基准测试:在TPC-C(OLTP)和ClickBench(OLAP)基准测试中表现优异,流处理吞吐量可超越Apache Kafka和Apache Pulsar。
  • 最新版本:v25.2增强了分析能力,包括基于成本的优化器和中间数据溢出。
  • 版本选择
    • 开源版:源代码在GitHub上,Apache 2.0许可,社区支持,可自托管。
    • 企业版:增强安全合规性与商业支持(24×7 SLA)。
    • 云版:在Yandex Cloud上提供托管服务,支持无服务器和专用部署。
37. JavaScript was Brainfuck all along (medium.com)

JavaScript类型强制转换与“Hello world”的晦涩实现

本文探讨了JavaScript类型强制转换(type coercion)的奇特现象,并展示了如何仅使用基本表达式和位运算来构建一个完整的“Hello world”程序,从而揭示了JavaScript类似Brainfuck语言的晦涩特性。

主要内容

  • 类型强制转换示例:文章从常见的JavaScript表达式{}+[]开始,该表达式返回0。接着演示+[]也返回0,以及+[1]返回1
  • 构建基础数字:作者避免直接使用数字字面量,而是通过数组和操作符组合来生成数字。例如:
    • 使用++[[]][0]得到1(通过将嵌套数组强制转换为数字并递增)。
    • 优化为++[[]][+[]],其中+[]表示0
    • 类似地,利用位左移操作<<生成其他数字,如++[[]][+[]]<<++[[]][+[]]返回2
  • 位运算表示大数字:通过位运算组合基础数字(0、1、2)来表示更大的数字。例如,数字72可以表示为(1 << 6) + (1 << 3),其中6和3进一步用基础表达式替换。
  • 构建“Hello world”字符串
    • 使用String.fromCharCode函数将数字转换为字符。
    • 将“Hello world”中每个字符的ASCII码(如72对应'H')用晦涩的JavaScript表达式表示。
    • 提供完整代码示例,通过数组和映射函数连接所有字符,最终用alert输出消息。
  • 替代实现:文章还提到使用波浪号操作符-~[]来简化部分表达式,并给出了一个更简洁的代码版本。

关键技术点

  • 强制转换机制:JavaScript中数组等对象通过操作符(如一元+++)隐式转换为数字,空数组[]转换为0
  • 位运算利用:通过左移(<<)和加减运算,仅用0、1和2就能构造任意数字。
  • 代码结构:最终代码完全由非数字字符组成(如[]+<<等),通过嵌套和操作符优先级计算出字符码,展示了JavaScript语法的灵活性和晦涩性。

总结

文章以娱乐方式演示了JavaScript类型强制转换的极限,构建了一个无数字字面量的“Hello world”程序,比喻JavaScript类似Brainfuck语言,凸显了其语法独特性和潜在的可读性挑战。

38. Goal: Embeddable array programming language with a bytecode interpreter in Go (anaseto.codeberg.page)

Goal:可嵌入式数组编程语言

核心定位
Goal 是一门用 Go 编写的可嵌入式数组编程语言,具备字节码解释器。它支持命令行脚本执行与交互模式,也可在浏览器中运行。

主要特性

  1. 数组编程范式:内置操作在不可变数组上实现向量化,鼓励函数式风格进行数据与控制变换。
  2. 动态类型系统:支持可变变量,但无不可变值。
  3. 字典与表格功能:类似大多数 K 方言。
  4. 字符串处理
    • 原子字符串(如 "ab" "bc"="bc" → 0 1)。
    • Unicode 感知的字符串原语(如 _"AB" "Π" → "ab" "π")。
    • 类 Perl 的引用构造与字符串插值(如 qq/$var\n)。
    • 格式字符串(如 "%.2g"$1 4%3 → "0.33" "1.3")。
  5. 专用正则表达式语法(如 rx/\s+/)。
  6. 错误值支持
  7. 可嵌入与可扩展:易于集成至 Go 项目中。

标准功能支持

  • I/O、CSV、JSON 处理。
  • 时间处理。

适用场景
擅长脚本任务(如处理列数据、文本处理),也适用于探索性编程。

附加信息

  • 提供 EPUB 版文档及本地部署指南。
  • 可通过项目仓库的 README.md 安装。
39. MAME Debugging (mattgreer.dev)

MAME Debugging 摘要

概述

MAME调试器和Lua脚本是用于ROM破解(如Neo Geo游戏Puzzle Bobble)的关键工具,帮助分析游戏内部机制,例如将摇杆控制替换为旋转表盘。这些工具使调试过程更高效,尽管初期可能令人生畏,但掌握后能轻松理解游戏运行逻辑。

调试器基础

  • 访问方式:通过命令行添加-debug参数(如mame samsho1 -debug)启动调试器,无法从UI访问。
  • 基本操作
    • go(F5):运行/取消暂停游戏。
    • step(F11):暂停游戏并执行单条指令。
    • over(F10):步过子例程,继续调试返回点。
    • out(Shift+F11):退出当前子例程,在返回点中断。
  • 界面布局
    • 左面板:显示处理器寄存器(如Motorola 68k的D0-D7、A0-A7、PC程序计数器)。
    • 右侧DASM窗口:显示当前程序计数器位置的反汇编代码,可通过Ctrl+D打开新窗口并跳转到任意地址查看。
    • 下方输出窗口:显示日志和计算结果。

关键功能

内存窗口

  • 通过Debug > New Memory Window或Ctrl+M打开,显示游戏RAM内容,用于观察实时变化(例如Puzzle Bobble中射击者角度存储在地址108262)。

作弊调试器

  • 用于查找内存中的特定值变化,是理解游戏机制的起点。
  • 命令示例
    • cheatinit ub:初始化跟踪无符号字节内存。
    • cheatnext +:查找增量变化。
    • cheatlist:列出匹配的内存地址。
  • 通过多次操作(如按方向键)逐步缩小内存变化范围,最终定位关键地址(如射击者角度)。

监视点(Watchpoints)

  • 在内存读取或写入时中断调试器,支持条件和动作。
  • 示例
    • wpset 108262,1,w:当写入地址108262时中断。
    • 添加条件:wpset 108262,1,w,b@10fd96 != 0(仅在接收到输入时中断)。
    • 添加动作:wpset 108262,1,w,,{ printf "值:%x",wpdata; g }(打印写入值并继续执行)。
  • 用于跟踪代码流,如确认何时更新射击者角度值。

断点(Breakpoints)

  • 在程序计数器到达特定地址时中断,同样支持条件和动作。
  • 示例
    • bpset 2f602:在地址2f602中断。
    • 条件示例:bpset 2f602, b@10fd06 != 0(仅在输入发生时中断)。
    • 动作示例:bpset 2f602,,{ printf "射击者delta:%d",b@108212; g }(打印内存值并继续)。

历史记录(History)

  • 显示CPU到达当前点的执行路径,帮助识别子例程起始点(例如通过bsr指令定位子例程)。

Lua脚本

  • MAME支持Lua脚本进行自动化测试和理论验证。
  • 使用方式:通过mame <游戏> -autoboot_script <脚本路径>加载脚本。
  • 功能示例
    • 修改内存值:如锁定射击者角度在10度,确认地址正确性。
    • 拦截内存操作:如install_write_tap在写入时修改数据(例如使射击者移动速度加快4倍)。
    • 用于复现错误、探索游戏逻辑或辅助ROM破解。
  • 脚本结构:获取CPU设备、访问内存空间、安装读/写拦截器并处理数据。

其他工具

  • trackmem:全局监视内存写入,但实用性不如监视点。
  • find:搜索内存值。
  • wpenable/wpdisable/bpenable/bpdisable:启用/禁用监视点和断点。

常用命令备忘单

  • 调试器基本命令gostepoverouthistorydasm(反汇编并保存到文件)。
  • 作弊调试器cheatinitcheatnextcheatlist
  • 监视点wpset(带大小、类型、条件、动作)。
  • 断点bpset(带地址、条件、动作)。

总结

MAME调试器和Lua脚本提供了强大而灵活的调试环境,通过反汇编、内存跟踪、监视点、断点和脚本自动化,使开发者能高效分析游戏机制,尤其适用于Neo Geo等平台的ROM破解。这些工具简化了复杂游戏逻辑的探索过程,是逆向工程和修改游戏的关键资源。

40. UPSes suck and need to be disrupted (esr.ibiblio.org)

文章核心观点总结:

本文作者对现有不间断电源(UPS)产品整体质量表达了强烈不满,认为整个产品类别亟需被创新设计颠覆。作者从个人使用体验和技术角度出发,系统性地批判了当前UPS的主要缺陷,并提出了一种理想的设计方案。

主要问题概括:

  1. 电池质量低劣:厂商为降低成本,使用质量差的电池,通常寿命不足三年,导致用户频繁更换。这既增加用户开支,也产生电子垃圾,不利于环保。作者指出,使用类似船用深循环胶体电池的方案本可延长寿命。
  2. 续航时间虚标:厂商宣传的续航时间存在夸大甚至欺骗。其测试条件(如仅连接少量外围设备)与实际使用场景不符,用户通常只能获得标称值的50%左右。
  3. 缺乏智能监测:现代汽车已配备可精确测算电池状态的电流传感器,但UPS厂商为节省几分成本,普遍未采用类似技术。这导致用户无法准确预估停电时可用时间,也无法提前获知电池劣化警告,常遭遇意外断电。
  4. 用户体验糟糕:设备故障时,仅通过闪烁灯光和报警音提示,缺乏文本显示明确的错误信息(如“电池故障”)。用户手册不易即时查阅,甚至厂商技术支持人员也无法准确解读报警信号。
  5. 监控协议设计低劣:多数UPS配备的USB监控端口在实际使用中极难配置。其通信协议通常是未公开文档、格式晦涩的二进制数据,缺乏自描述性(如字段名、单位、协议版本),与GPS设备使用的NMEA0183等问题协议类似,逆向工程困难,监控功能如同虚设。

理想设计提案:

作者提出,一个值得被颠覆的“不糟糕的”UPS设计应具备以下特征:

  1. 开放设计:硬件、固件、设备监控代码均开源。
  2. 耐用电池:采用深循环船用胶体电池,降低长期成本与环境负担。
  3. 智能监测:集成电动汽车级电流传感器,精确评估电池状态与剩余时间。
  4. 清晰提示:除警报外,配备可显示文本错误信息的屏幕。
  5. 友好协议:USB监控端口使用设计良好、文档齐全的通信协议(建议采用类似GPSD的JSON数据包格式)。

作者认为,这样的设计完全可行且成本不高,但现有厂商因缺乏创新动力而停滞不前,因此需要来自“创客”社区的开放硬件设计来推动行业变革。作者表示自己能编写固件,但希望有硬件设计者参与合作。

42. I Get This Call Every Day (en.wikipedia.org)

《I Get This Call Every Day》是一款于2012年12月21日发布的点击式冒险游戏,由多伦多开发者David S Gallant独立开发。游戏使用Flixel引擎,运行在Microsoft Windows和OS X平台。

游戏内容与玩法 玩家扮演一名客服中心员工“David”,接听一位名叫“Billy Swarth”的纳税人来电。对方要求更改地址,但态度急躁且回答安全问题含糊不清。玩家需从选项菜单中引导对话,既要避免激怒来电者,又不能违反保密规定。游戏流程仅数分钟,只有一条路径能让玩家保住工作;其他结局均会因泄露信息或惹恼客户而被解雇。

开发背景 Gallant曾在加拿大税务局兼职,并在参加2012年TOJam游戏创作活动时受“非游戏”概念启发而构思此作品。游戏美术使用开源软件GIMP绘制,大部分剧本在通勤途中完成,且所有角色对话均由Gallant本人配音。

发行与反响 游戏最初以“随心付”模式(最低2美元)在Gallant个人网站发行。媒体和评论家赞赏其创新概念,但指出游戏设计初衷并非“有趣”。Kotaku评论称它代表了游戏行业值得期待的转变。2014年3月,估计该游戏已为Gallant带来约1万美元收入。

争议事件与后续 游戏发布后,媒体(尤其是《多伦多星报》)将游戏内容与Gallant在税务局的兼职联系起来。国家税务部长Gail Shea称此行为“冒犯且完全不可接受”。Gallant随后被加拿大税务局解雇,此事件引发广泛讨论,许多人认为他因表达媒介(游戏)受到不公惩罚。此次争议反而推高了游戏销量,吸引了Yogscast等知名YouTube频道进行推广。

游戏曾尝试进入Steam平台,Gallant一度因抗议其他游戏被拒而撤回申请,但后来重新提交,并于2014年4月7日获批上架。

44. jj init – getting serious about replacing Git with Jujutsu (v5.chriskrycho.com)

Jujutsu 版本控制系统概述

核心定位:Jujutsu 是一个由 Google 工程师开发的新版本控制系统,旨在成为 Git 的替代方案。它既可以作为 Git 的前端使用,也代表了一种全新的分布式版本控制系统设计。其核心理念是吸收了 Mercurial、Pijul 等系统的优点,提供更优秀、更连贯的用户体验。

关键设计思想与优势

  1. 无迁移成本:可在现有 Git 仓库中通过 jj git init 直接使用,无需迁移。用户可同时使用 jjgit 命令,实现无缝互操作。
  2. 核心创新概念
    • 变更与版本分离:借鉴 Mercurial,将“变更”作为核心概念,与具体的“修订版本”区分开来。这使得重写历史(如修改提交信息、拆分/合并提交)变得异常简单直接。
    • 一等公民冲突:借鉴 Pijul 和 Darcs,将冲突视为可存储、可延迟解决的“一等公民”。允许用户在冲突状态下继续工作,并在后续提交中逐步解决冲突,提供了更灵活的工作流。
    • 优秀的用户界面:命令行设计连贯、直观,学习曲线更平缓。避免了 Git 命令行界面的混乱和不一致。

主要功能与体验

  • 修订集:采用类似 Mercurial 的强大函数式查询语言来选择修订版本集合,远比 Git 的查询灵活。
  • 变更管理
    • jj new 用于创建新变更,jj describe 用于描述变更。
    • jj squashjj move 命令可以轻松地在不同变更间移动修改内容,减少了对交互式变基的需求。
    • 工作目录本身被视为一个“变更”,简化了提交前的编辑流程。
  • 冲突处理:冲突信息被记录在历史中,允许在不影响工作流的情况下推迟解决,并将解决过程也纳入历史。
  • 分支管理:默认使用匿名分支,命名分支是可选的。提供了清晰的 jj branch 子命令集(如 create, set, delete)来管理分支。
  • 操作日志jj op log 记录了所有操作,比 Git 的 reflog 更强大,便于追踪和恢复。
  • 日志展示jj log 默认提供比 git log 丰富得多的视图,显示当前工作目录、活跃分支等关键信息。

当前状态与局限性

  • 仍处于开发中:尚未发布 1.0 版本,界面和功能仍可能发生变化。
  • 生态系统不成熟:缺乏专门为 Jujutsu 设计的图形界面工具和编辑器集成,使用现有 Git 工具(如 IDE、GitHub CLI)时可能会遇到兼容性问题(例如对“分离 HEAD”状态的困惑)。
  • 功能缺口:暂不支持 GPG/SSH 提交签名。其自身的“本地”后端尚未就绪,目前主要依赖 Git 后端。
  • 工作流摩擦:由于分支模型不同,在向 GitHub 等代码托管平台推送时,需要额外执行 jj branch set 命令来更新分支指向。

总结与前景

Jujutsu 通过其创新的概念(变更/版本分离、一等公民冲突)和出色的设计,为版本控制提供了更好的用户体验,尤其是在历史重写和冲突解决方面。它让用户可以立即在现有 Git 项目中获得益处。尽管目前存在工具生态不完善等短板,但其在 Google 内部的积极开发以及对 Git 的良好兼容性,使其成为版本控制领域一个值得期待和尝试的未来方向。作者在长期使用后,已将其作为首选的版本控制工具。

45. FOSDEM 2024 Live Streams (fosdem.org)

FOSDEM 2024 直播流相关声明

本文档为 FOSDEM 2024 直播流 的版权声明页面,其主要内容如下:

1. 许可协议

  • 本作品采用 知识共享署名 2.0 比利时许可协议 进行授权。

2. 许可证查看方式

您可以通过以下任一方式查看该许可证副本:

  • 访问链接: http://creativecommons.org/licenses/by/2.0/be/deed.en
  • 致信至:Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.

3. 内容责任声明

  • 所有内容(例如演讲和演讲者简介)的责任完全归属给演讲者本人
46. Google Search officially retires cache link (searchengineland.com)

谷歌搜索正式移除缓存链接

谷歌已于近期正式从搜索结果片段中移除了缓存链接,并确认将在不久的将来完全移除缓存功能。谷歌搜索联络员丹尼·沙利文表示,谷歌已“决定退役该功能”,并会很快彻底移除缓存。

  • 缓存链接已移除:缓存链接于1月25日左右从搜索结果中消失。
  • 缓存操作符暂时可用:目前通过 cache:domain.com 的方式仍可访问缓存,但此操作符也将在不久后停止工作。
  • noarchive标签继续有效:谷歌表示将继续尊重 noarchive 标签,用户无需对其进行修改。
  • 可能引入Wayback Machine链接:沙利文个人表示,希望在原先缓存链接的位置(例如“关于此结果”栏目中)添加指向互联网档案馆(Wayback Machine)的链接,以便用户查看网页的历史存档版本。此提议尚在讨论中,并非承诺。
  • 影响与替代方案:缓存虽非调试SEO问题的最佳工具,但已成为许多SEO从业者和用户的常用功能。随着谷歌决定移除此功能,用户需寻找替代方案。Wayback Machine 是一个免费查看特定URL旧版本页面的优质替代资源。
47. Researchers develop novel 'bone bandage' material for cracked bones (phys.org)
48. Multi-channel Audio Part 2 (computer.rip)

多声道音频(第二部分)概要

电影音频的格式与发行

现代电影通常包含多个音频版本,如立体声(立体声)和多声道(如5.1或7.1)版本。在影院中,电影以数字电影包(DCP)形式发行,采用加密的Motion JPEG 2000视频流和PCM音频。对于消费者,主要获取渠道包括蓝光光盘、流媒体服务和个人视频文件。

  • 蓝光光盘:规格允许使用线性PCM、杜比数字、杜比TrueHD、DTS、DTS-HD或DRA等编码。它最高支持8声道、27648 Kbps的音频,理论上可容纳未压缩的24位/96kHz 7.1声道音频。
  • 流媒体服务(如Netflix):主要使用AAC或杜比数字进行音频传输。
  • 个人视频文件:常见格式包括立体声AAC、A/52 (AC-3/杜比数字) 和DTS。VLC等播放器中,5.1声道可能被描述为3F2M/LFE,存在“侧面”与“后方”环绕声道的细微差异,但大多数应用并不严格区分。

多声道音频的传输与连接

传输多声道音频的连接方式经历了从模拟到数字的演变。

  • 模拟连接:传统上通过多对RCA线缆传输未压缩多声道音频,或使用矩阵编码(如杜比Pro Logic)将多声道编码到立体声信号中,但这些方式已不常见。
  • 数字连接 - S/PDIF:索尼/飞利浦数字接口,支持电信号(通过RCA同轴电缆)和光信号(Toslink)两种物理传输。其带宽仅足以承载两声道未压缩PCM音频,无法直接传输未压缩的多声道音频,因此必须使用压缩编码(如杜比数字、DTS)。
  • 数字连接 - HDMI:现代消费级音频的实际标准。HDMI 2.1提供了足够的带宽(约37 Mbps),可以传输8声道、24位/192kHz的未压缩PCM音频,技术上无需压缩。然而,由于兼容性和历史原因,压缩的杜比数字或DTS格式仍被广泛使用。

多声道音频的处理与挑战

操作系统和应用处理多声道音频(特别是压缩格式)时面临复杂挑战。

  • 格式检测与切换:接收设备(如家庭影院功放)需检测输入音频流的格式(如通过IEC 61937标准)。这可能导致切换延迟或音频中断。
  • 音频通路问题
    • 在PC上,HDMI音频通常由显卡驱动处理,可能不可靠。
    • 操作系统通常不直接处理杜比数字或DTS格式,需要使用“直通”功能将压缩流直接发送到接收设备。
    • 在Linux等系统上,配置直通功能可能因许可问题而复杂。
  • 混合音频栈:当存在通过OS处理的常规PCM音频和绕过OS的压缩直通音频两条路径时,容易出现音量、延迟不一致的问题,导致用户困惑(如“某个播放器声音太小”的投诉)。
  • 下混与音量问题:如果播放设备输出5.1环绕声,但用户只有立体声系统,则需要在接收端进行下混。许多用户不了解此设置,导致对话音量过小(因电影对话常混录在中置声道)。

高级音频格式

电影音频技术不断发展,出现了无损和基于对象的环绕声格式。

  • 无损环绕声:如杜比TrueHD和DTS-HD,提供7.1声道的无损压缩音频,比特率较高,需要HDMI等高带宽连接。
  • 基于对象的环绕声 - 杜比全景声
    • 核心思想:将声音对象定义在三维空间中的具体位置,播放时由解码器根据实际扬声器布局实时渲染。
    • 在消费级设备上,它作为杜比数字Plus或杜比TrueHD的7.1音轨加上额外元数据进行传输,实现了向后兼容。
    • 消费级解码器支持的对象数量有限,因此母版制作时需要对邻近对象进行分组。
    • 其效果类似于增强的矩阵编码,旨在将少扬声器系统模拟出多扬声器的环绕声场。
49. History of Vietnamese Typography (vietnamesetypography.com)

越南文字发展史摘要

越南文字的发展主要经历了三个阶段:汉字(字儒)、字喃和国语字(拉丁化文字)。

1. 汉字时期

  • 从公元前207年到公元939年,越南处于中国王朝统治之下,官方书面语为古典汉字(字儒/字汉)。
  • 越南于939年独立后,汉字仍在官方文件中沿用至20世纪初。如今,汉字主要用于节日、葬礼等传统场合的书法装饰。
  • 由于掌握汉字是权力和地位的象征,越南学者渴望发展自己的文字系统。

2. 字喃时期

  • 字喃是基于汉字创造的越南本土书写系统,至11世纪已基本确立。
  • 其构成复杂(利用汉字部件表示越南语语音),学习难度大,因此仅限于精英阶层使用,能识读者极少。
  • 现存字喃作品稀少,主要见于阮廌的《国音诗集》和胡春香的隐晦诗作中。

3. 国语字的诞生与发展

  • 起源与奠基: 17世纪,天主教传教士为了向无法识读字喃的底层民众传播教义,开始将越南语罗马化。葡萄牙耶稣会士若昂·罗德里格斯首创了罗马化书写体系,后经加斯帕·多·阿马拉尔、安东尼奥·巴尔博萨等人改进,最终由法国耶稣会士亚历山大·德·罗德斯在其1651年出版的《安南-葡萄牙-拉丁词典》中奠定基础。
  • 早期完善与采用: 18世纪,皮尼奥·德·贝海纳等传教士继续出版包含国语字的字典。越南牧师菲利普·秉在葡萄牙居住期间用国语字撰写了大量著作,促进了该文字系统的成形。
  • 优势与推广: 与字喃相比,基于拉丁字母的国语字简单易学,使普通民众能在数周内掌握读写,极大地推动了大众识字率和教育发展。
  • 成为官方文字: 在法国殖民时期(1864-1945),国语字最终被确立为官方文字。
  • 推动现代印刷与文学: 国语字的普及催生了现代报业。1865年,越南第一份报纸《嘉定报》使用国语字发行,其主编张永记和黄进秋等人贡献卓著。1907年,河内出现了首家印刷公司和独立报社。20世纪初,东经义塾等机构采用国语字出版教材。范琼等作家通过刊物推动国语字发展。1933年成立的“自力文团”用简洁的国语字创作诗歌、小说,出版《风化》等周刊,彻底改变了越南文坛面貌。

结论: 虽然由西方传教士开启,但越南的记者、诗人和学者们将国语字发展成为一种丰富、优雅且全面的书写系统。如今,国语字(亦称“普通字”)是越南的官方正字法。

50. Crypto Mining Consumes a Mind-Boggling 2% of U.S. Electricity (heatmap.news)
  • 耗电量估算:根据美国能源信息管理局(EIA)初步估计,加密货币挖矿用电量可能占美国总用电量的2.3%(约0.6%-2.3%)。具体而言,比特币挖矿年用电量约为25至91太瓦时,相当于300万至600万家庭的用电量,接近犹他州或西弗吉尼亚州的用电规模。

  • 全球影响:基于估算,全球加密货币挖矿用电量相当于希腊或澳大利亚全国的总用电量。

  • 挖矿耗能原因:比特币采用“工作量证明”机制,需大量计算维持网络运行,新币生成作为对计算工作的奖励。该过程能源消耗巨大,导致矿工倾向于寻找廉价能源来源。

  • 案例与监管:德克萨斯州部分比特币矿场参与当地电网需求管理项目,在用电高峰时段停止运营以获取补贴。批评者对加密货币的高能耗提出质疑,EIA已开始收集挖矿能耗数据,并计划进行强制性调查以更全面了解需求。