2024-01-03

50 篇热帖

1. 1D Pac-Man (abagames.github.io)

1D Pac-Man 文章内容总结

概述

该文章内容实际上是一个HTML代码文件,标题为“1D Pac-Man”。代码定义了一个网页模板,用于加载和初始化基于“crisp-game-lib”库的游戏开发环境。内容以技术性为主,聚焦于游戏库的设置和功能集成。

结构与内容

  • HTML文档结构:标准HTML5格式,包括DOCTYPE声明、html、head和body标签。
  • Meta标签:设置字符编码为utf-8,并配置视口(viewport)以适配移动设备,禁用用户缩放功能。
  • 外部脚本加载
    • 条件加载:根据选项(如isSoundEnabledisCapturing)动态决定是否加载sounds-some-sounds(用于声音效果)和gif-capture-canvas(用于GIF屏幕捕获)。
    • 图形引擎:当使用pixi主题时,加载pixi.js(版本5.3.0)和pixi-filters(版本3.1.1)库,用于高级图形渲染。
    • 注释掉的脚本:包括terser(代码压缩工具)和lodash.clonedeep(用于rewind功能),这些是可选或备用模块,未直接启用。
    • 主游戏库:加载crisp-game-lib(版本1.1.1)的bundle.js文件,作为核心游戏框架。
  • 内联脚本
    • 调用addGameScript()函数,用于添加游戏相关脚本。
    • 添加load事件监听器,在页面加载完成后执行初始化操作。
  • 样式设置:body元素的背景颜色设置为#ddd(浅灰色)。

关键功能

  • 游戏环境初始化:提供一个基础HTML模板,快速搭建基于“crisp-game-lib”的游戏项目。
  • 可选功能集成:支持声音、屏幕捕获和图形渲染等扩展,通过条件加载优化性能。
  • 图形渲染支持:集成Pixi.js库,当启用pixi主题时,用于创建复杂的视觉效果。
  • 模块化设计:代码结构清晰,脚本加载分为主库和可选库,便于开发者自定义功能。
  • 跨设备适配:通过meta标签确保页面在移动设备上正确显示,并限制缩放以提升用户体验。

目的

该代码主要用于游戏开发模板,帮助开发者快速启动使用“crisp-game-lib”库的项目。标题“1D Pac-Man”可能指向一个特定游戏示例,但代码本身仅设置技术环境,不包含具体游戏逻辑。它强调库的配置和外部依赖管理,适用于需要声音、捕获或图形增强的游戏应用。

2. Possible Meissner effect near room temperature: copper-substituted lead apatite (arxiv.org)

室温附近可能的迈斯纳效应:铜替代铅磷灰石

该研究报道了在铜替代铅磷灰石材料中观察到的一系列超导相关迹象,主要发现如下:

实验观察

  • 磁化特性:在25 Oe磁场下,材料在室温以下表现出抗磁性直流磁化,且在零场冷却(ZFC)和场冷却(FC)测量之间出现显著分歧
  • 磁场依赖性:当磁场增强至200 Oe时,材料磁化行为转变为顺磁性
  • 玻璃态行为:在冷却过程中观察到玻璃态记忆效应
  • 超导特征:在250 K以下检测到典型的超导体磁滞回线,但存在正向和反向磁场扫描之间的不对称性

核心结论

综合上述实验结果,研究认为该材料在室温下可能存在迈斯纳效应,暗示其具有潜在的超导特性。

3. Do It Yourself Blind Repair (fixmyblinds.com)

该文章介绍了一个自助维修百叶窗的网站。其核心目的是帮助用户找到替换零件并学习如何自行修理百叶窗。

主要服务与功能:

  1. 提供详细的零件清单与图示:网站提供全面的零件图示和标签,帮助用户快速识别和定位需要更换的具体部件。
  2. 提供维修视频指导:网站包含在线视频,逐步指导用户如何进行维修。
  3. 零件配送服务:用户可以在线订购所需的替换零件,网站能快速发货(如文中用户提到的2个工作日内送达)。
  4. 分类指导:网站首页设有选项,让用户根据需要维修的百叶窗类型进行查询。

用户价值与反馈:

  • 网站已帮助超过100万人成功维修了自家的百叶窗。
  • 用户评价表明,通过该网站,可以快速找到正确零件、收到货并借助视频在极短时间内(如5分钟)完成维修,从而避免了昂贵的整体更换成本。

总结:该网站是一个集零件识别、采购、维修教程于一体的自助平台,旨在通过提供清晰的指导与方便的配件获取渠道,帮助用户高效、低成本地解决百叶窗的常见问题。

4. Show HN: FrameOS – operating system for single function smart frames (frameos.net)

FrameOS:单功能智能显示屏操作系统

核心定位 FrameOS 是一款专为单功能智能显示屏设计的操作系统,适用于需要频繁更新(60帧/秒)或低频更新(60秒/帧)的显示设备,如智能家居日历、会议室屏幕、温控器、互动留言板及公共广告屏等。

技术特点

  • 开发语言:使用 Nim 语言编写,部署时编译为单一二进制文件。
  • 运行模式:所有操作均在设备本地运行,无需依赖云服务订阅。

后端与部署

  • 后端功能:用于将 FrameOS 部署到显示设备。
  • 安装方式
    • 作为 Home Assistant 插件安装。
    • 通过单条命令以独立 Docker 应用形式安装:
      bash <(curl -fsSL https://frameos.net/install.sh)
      

硬件需求

  • 运行环境:需要一个运行 FrameOS 后端的设备(本地或服务器),通过 SSH 连接显示设备。
  • 显示屏:支持电子墨水屏或 LCD 显示器,兼容 Waveshare、Pimoroni 等品牌的电子墨水屏,或通过 HDMI 连接的电视。
  • 主控设备:树莓派,预装 Raspberry Pi OS Lite。
    • 高性能需求(如 60FPS HDMI 输出)需使用树莓派 5。
    • 小型化需求:树莓派 Zero W 2 适合电子墨水屏,也可在小尺寸 LCD 上实现 24 FPS。

应用场景示例 文章展示了作者实际使用的多个显示设备案例,包括:

  • 3D 打印外壳的 7.3 英寸和 13.3 英寸面板。
  • 13.3 英寸全彩电子墨水屏壁挂显示。
  • 12.48 英寸三色电子墨水屏。
  • 实时 LCD 显示屏。
  • 通过本地 HTTP 扫描二维码修改文字的交互功能。
  • 5.7 英寸七色走廊仪表盘、12.48 英寸三色厨房日历等。

功能工具

  • 场景编辑器:通过图表界面创建和管理显示场景。
  • 应用编辑器:深入编辑场景中每个应用的源代码。
  • 快速入门:可从仓库部署首个场景。

项目状态与参与

  • 当前状态:适合小规模使用,核心功能已基本完成,但尚未发布正式版本。Docker 镜像会随主分支更新自动生成。
  • 参与方式:欢迎用户尝试、贡献代码或提出问题。可参考任务列表或通过 PR 参与开发。

后续步骤

  1. 安装 FrameOS 后端。
  2. 加入 Discord 社区。
  3. 订阅通讯。
  4. 阅读关于 Nim 重写的更多说明。
5. The One Billion Row Challenge (www.morling.dev)

十亿行挑战(1BRC)

挑战概述
“十亿行挑战”(One Billion Row Challenge,1BRC)是一项面向Java程序员的性能优化竞赛,于2024年1月1日至1月31日举行。挑战的核心任务是:编写一个高效的Java程序,从一个包含十亿行数据的文本文件中读取温度测量值,并计算每个气象站的最低、平均和最高温度。

数据与输出要求

  • 输入文件每行格式为“气象站名称;温度值”(例如:Hamburg;12.0)。
  • 程序需输出所有气象站的统计结果,按站名字母顺序排列,格式为:{站名=最低/平均/最高, ...}

挑战目标
鼓励开发者探索现代Java技术的性能极限,包括:

  • 使用虚拟线程、Vector API、SIMD指令等。
  • 优化垃圾回收(GC)和提前编译(AOT)。

参赛规则

  1. 代码必须使用Java编写。
  2. 允许通过SDKMan或OpenJDK官网获取Java发行版(包括早期访问版本,如Valhalla项目)。
  3. 禁止使用任何外部依赖库。

提交与评估方式

  • 参赛者需克隆GitHub上的1brc仓库,基于提供的基础实现开发自己的解决方案,并通过Pull Request提交。
  • 所有提交将在Hetzner Cloud CCX33实例(8核CPU,32GB内存)上评估,使用time命令测量端到端执行时间。
  • 每个方案运行五次,去掉最快和最慢的成绩,取剩余三次的平均值作为最终成绩,计入排行榜。

奖励与社区

  • 参与挑战可学习新技术、启发他人,并在排行榜中获得认可。
  • 优胜者可能获得定制T恤(1️⃣🐝🏎️)。
  • 讨论可通过GitHub、Hacker News、Lobsters和Reddit等平台进行。
6. Making small games, which is fun in itself (abagames.github.io)

文章摘要:小游戏的乐趣与制作哲学

核心观点 文章阐述了制作小游戏本身就是一种充满乐趣的体验,并探讨了小游戏的定义、魅力、开发理念及创作建议。

小游戏定义与作者实践

  • 根据“小游戏宣言”,小游戏指可在10分钟内结束且能在浏览器上便捷游玩的游戏。
  • 作者已制作超过350个此类游戏,甚至有一年创作了139个,体现了对其的热爱。
  • 举例包括将红色棍子切分等份、点击屏幕切割绳子等简单直接的游戏。

小游戏的开发特点与吸引力

  • 开发周期短:通常几小时内即可完成原型,即使遇到挑战也大约在10小时内,适合“每周一个游戏”等挑战,便于快速实验各种创意。
  • 常见观点:普遍认为制作小游戏是开发大型游戏前的重要准备和练习,能避免初学者因目标过大而失去动力。
  • 作者的补充观点:小游戏拥有独立于大型游戏的独特魅力,其价值不仅在于是“准备步骤”。

制作优秀小游戏的原则(源自“How To Make Good Small Games”) 文章提到了12条(后补充为13条)创作思考:

  1. 质量与规模无关:小游戏容易做得好,大型游戏失败风险更高。
  2. 质量与情感范围无关:短篇故事与长篇小说有不同的成功标准,小游戏亦然。
  3. 游戏自定义其成功标准:应接受并评估游戏自身设定的条件。
  4. 兑现承诺即为成功:引入的新机制或角色是承诺,需使其演进并贡献于整体。
  5. 做出更小的承诺更容易成功:减少机制、内容等数量,集中发展几个创意更容易达到高潮。
  6. 以有趣且令人愉悦的方式兑现承诺:融入个人风格,创造真正属于自己的游戏。
  7. 不要过度交付:游戏应在合适时机结束,避免不必要的延长。
  8. 呈现形式是承诺的一部分:减少信息量,让玩家能立即开始游戏,管理好预期。
  9. 发布前确保游戏完成:避免以“试玩版”、“序章”等形式发布未完成品。
  10. 分集发布并非捷径:将游戏拆分为多集通常不是好主意。
  11. 不必追求病毒式传播:追求小而精的目标会吸引小而特定的受众。
  12. 足够好就够了:能持续创作出令自己满意的优质游戏,已是巨大进步。
  13. 享受乐趣:这是作者补充的核心——创造新机制、将其融入游戏并分享,整个过程本身就令人愉悦。

总结 文章强调,制作小游戏远不止是技能训练,其过程本身——包括构思、实验、情绪起伏及分享——就带来了无与伦比的享受和价值。

7. A Canadian payroll dependency chart (www.daemonology.net)

加拿大税务局定期发布《薪资扣除公式》文档,当前已更新至第119版,其中包含计算加拿大养老金计划、就业保险和所得税等薪资扣除所需的所有公式。作为加拿大一家小企业的经营者,作者希望自行在电子表格中实现这些公式,而非依赖外部薪资服务商。

然而,随着税务系统日益复杂,尤其是今年的加拿大养老金计划包含“基础”保费、“额外”保费和“第二额外”保费,作者不得不从头重写电子表格。更困难的是,文档作者未清晰区分计算值的先后顺序,导致使用时需频繁前后翻阅查找各项值的计算位置。

为理清思路,作者使用GraphViz绘制了一张依赖关系图表。图表共79个节点,从“年度最高可领取养老金收入”(2024税年为73,200美元)开始,直至“总薪资扣除”。图表仅记录各值之间的依赖关系,未列出具体公式,旨在帮助使用者明确计算顺序,避免循环引用。

为简化处理,作者假设不处理佣金制员工、未加入或退出加拿大养老金计划的员工,以及居住在魁北克、新斯科舍、育空或安大略省的员工(这些地区有特殊税务规定)。图表以可视化方式展示了从基础参数到最终扣除总额的完整计算链路。

8. Ask HN: Who is hiring? (January 2024)
9. Bitwarden Heist – How to break into password vaults without using passwords (blog.redteam-pentesting.de)

Bitwarden Windows Hello 漏洞分析:无需密码即可窃取所有凭证

漏洞概述

在2023年3月的一次渗透测试中,研究人员发现Bitwarden桌面版(v2023.3.0)的Windows Hello实现存在严重安全缺陷。攻击者无需知道主密码或进行生物特征认证,即可远程窃取整个密码库中的所有凭证。该漏洞编号为CVE-2023-27706,已在2023年4月发布的v2023.4.0版本中修复。

攻击原理

生物识别解锁机制

  • 当启用Windows Hello生物识别时,Bitwarden会将一个由主密码派生的派生密钥(derived key)加密存储在本地
  • 此派生密钥由DPAPI(数据保护API)通过Windows凭证管理器加密存储
  • 获取此派生密钥即可解密整个密码库,无需主密码或生物特征验证

DPAPI的域备份机制

  • 在域环境中,DPAPI使用用户密码派生的密钥加密数据
  • 域控制器上存储有备份密钥(Backup keys)
  • 任何拥有域备份密钥的人可以解密域内所有用户的DPAPI加密数据
  • 即使用户密码被重置,备份密钥仍能解密旧数据

攻击步骤

1. 获取必要文件

通过SMB访问目标工作站,下载以下文件:

  • %AppData%\Bitwarden\data.json:Bitwarden主要数据文件
  • %AppData%\Microsoft\Credentials\*:存储加密凭证
  • %AppData%\Microsoft\Protect\*:存储DPAPI主密钥

2. 获取域备份密钥

使用Impacket工具从域控制器导出备份密钥:

dpapi.py backupkeys -t '域/管理员:密码@域控制器' --export

3. 解密DPAPI主密钥

使用备份密钥解密工作站上的主密钥文件:

dpapi.py masterkey -pvk backupkey.pvk -file ./主密钥文件

4. 提取Bitwarden派生密钥

使用解密后的主密钥解密Bitwarden凭证:

dpapi.py credential -f ./Bitwarden凭证文件 -key 解密后的主密钥

结果中的credentialBlob即为Bitwarden的生物识别密钥(派生密钥的Base64编码)。

5. 解密整个密码库

使用获取的生物识别密钥解密data.json文件:

  1. 使用HKDF-expand扩展生物识别密钥
  2. 解密账户加密密钥
  3. 解密组织私钥(如需要)
  4. 解密所有存储的凭证

关键发现

非特权用户也可攻击

研究人员发现,即使没有域管理员权限,仅以低权限用户身份运行一个简单的Go程序调用CredEnumerateW API,即可直接获取Bitwarden的生物识别密钥,无需Windows Hello交互验证。

设计误解

  • Bitwarden误以为DPAPI的凭证存储需要生物特征验证才能访问
  • 实际上DPAPI设计允许当前用户会话直接访问其凭证存储
  • Microsoft确认DPAPI及其备份机制按预期工作,不视为漏洞

修复措施

Bitwarden在v2023.4.0及后续版本中进行了修复:

  1. 不再将派生密钥直接存储在DPAPI凭证中
  2. 改为存储两个额外加密的数据块
  3. 新实现需要通过KeyCredentialManager API与Windows Hello交互才能解密
  4. 默认设置要求启动Bitwarden时至少输入一次主密码

影响与启示

该漏洞展示了以下安全教训:

  • 生物识别认证不应绕过主密码保护的核心加密机制
  • Windows Hello的实现需要仔细考虑DPAPI的域备份机制
  • 安全关键软件(如密码管理器)的认证流程设计需要全面考虑各种攻击场景

此漏洞仅影响域环境下的Windows工作站,本地非域账户不受影响。研究人员强调,域管理员权限本身已具有强大能力,但该漏洞允许无需交互即可静默窃取凭证,风险极高。

10. AI generated security reports about curl (daniel.haxx.se)

AI生成的安全报告对curl项目的影响

curl项目目前面临AI生成的安全报告带来的挑战,这些报告主要源于其漏洞赏金计划。以下是关键内容总结:

漏洞赏金现状

  • 截至目前,curl项目已支付超过7万美元奖励,共收到415份漏洞报告
  • 其中仅64份被确认为安全漏洞,77份为信息性报告(通常是错误)
  • 约66%的报告既非安全漏洞也非普通错误

AI报告的影响

  • 传统垃圾报告:通常容易快速识别和丢弃,不构成重大问题
  • AI生成报告:通过大型语言模型(LLMs)生成,表面更专业但内容存在“幻觉”
  • 时间消耗:报告质量越高,调查和关闭所需时间越长,浪费开发资源
  • 优先级干扰:安全报告需优先处理,可能延误真正错误修复和功能开发

具体案例

  1. CVE-2023-38545相关报告:用户使用Bard生成报告称漏洞代码变更已在互联网泄露,但实际为AI幻觉
  2. WebSocket缓冲区溢出报告:格式规范但内容完全虚构,经过多次澄清后被关闭

项目方应对措施

  • 请求Hackerone提供报告者屏蔽功能(后发现该功能已存在)
  • 考虑未来开发检测AI生成报告的工具
  • 保留AI作为语言翻译和沟通辅助工具的空间

未来展望

  • AI生成报告可能继续增加,成为漏洞赏金计划的新挑战
  • 单纯依赖AI报告仍缺乏可靠性,加入人工审核环节可提高效果
  • 用户可能继续尝试通过AI快速生成报告以获取奖励

curl项目强调,尽管AI有潜力辅助安全研究,但当前缺乏有效监管的AI生成报告主要造成资源浪费而非安全改进。

11. Linux hits nearly 4% desktop user share on Statcounter (www.gamingonlinux.com)

Linux桌面用户份额接近4%创新高

根据Statcounter数据(需注意其抽样局限性),2023年12月Linux在桌面操作系统的用户份额首次接近4%,创下历史纪录。这一数据呈现明确的上升趋势:两年前Linux份额很少达到2%,如今已多次逼近4%。

2023年各月份额分布

  • 1月:2.91%
  • 2月:2.94%
  • 3月:2.85%
  • 4月:2.83%
  • 5月:2.70%
  • 6月:3.07%
  • 7月:3.12%
  • 8月:3.18%
  • 9月:3.02%
  • 10月:2.92%
  • 11月:3.22%
  • 12月:3.82%

市场格局变化

2023年12月数据显示:

  • Windows份额同步上升
  • macOS份额下降
  • 若将ChromeOS(本质属于Linux)纳入统计,Linux类系统总份额实际达6.24%

长期趋势分析

自2009年至今的统计数据表明,Linux桌面份额呈现持续增长趋势。这一变化与Steam硬件调查中Linux份额上升的现象一致,反映出该系统在消费者市场的普及度正在逐步提升。

数据来源:GamingOnLinux.com

12. Show HN: Resurrecting the Dillo browser (dillo-browser.github.io)

文章摘要:

本文介绍了Dillo浏览器的复兴项目,重点阐述了其作为一款轻量级图形化网页浏览器的核心特性与设计目标。

核心特性:

  • 跨平台支持:可在Linux、BSD、MacOS、Windows(通过Cygwin)甚至Atari上运行。
  • 技术架构:使用C/C++编写,依赖少,拥有自研的实时渲染引擎,内存占用低,渲染速度快。
  • 图形库:采用轻量高效的FLTK GUI库。
  • 协议支持:支持HTTP、HTTPS、FTP和本地文件访问。
  • 可扩展性:可通过任意语言编写的插件进行扩展(文中列举了Gemini、Gopher等协议插件)。
  • 许可与标准:采用GPLv3免费授权,并内置“Bug Meter”工具辅助作者遵循网页标准。

项目目标:

  • 降低网页访问门槛。
  • 兼容老旧或小型设备及慢速网络。
  • 注重用户个人安全与隐私。
  • 强调软件运行效率。

资源与贡献:

  • 文档:提供用户手册、主题指南和开发者文档。
  • 下载:最新版本为3.2.0,可从官网下载或通过Git仓库获取源码。
  • 贡献方式:用户可报告问题、宣传项目、提交代码补丁或通过Liberapay捐赠。

插件系统: 支持通过插件扩展协议(如Gemini、Gopher、IPFS等),插件可使用任何语言编写并通过标准输入输出交互。开发者可提交自己的插件仓库链接。

项目相关资源包括网站、Git仓库、问题追踪器、社交账号及邮件列表。

13. First do it, then do it right, then do it better (twitter.com)

这篇文章是Addy Osmani在X平台(原Twitter)上发布的一条帖子,标题为“First do it, then do it right, then do it better”(先完成,再完善,后卓越)。

帖子核心内容是鼓励人们克服对失败或追求完美的恐惧,立即开始行动。作者强调,成功的旅程往往始于第一步,而这第一步最难迈出。他希望这句格言(他初次接触时深受启发)能激励他人:与其在起点徘徊,不如先“开始做”;完成初步尝试后,再专注于“做得正确”;最后,通过持续迭代“做得更好”。该帖子附带了一张图片。

14. Ants recognise infected wounds and treat them with antibiotics (www.uni-wuerzburg.de)

非洲马塔贝勒蚁识别感染伤口并用抗生素治疗

核心发现

  • 物种:非洲马塔贝勒蚁(Megaponera analis),分布于撒哈拉以南非洲,以白蚁为唯一食物。
  • 行为:狩猎时易被白蚁士兵咬伤,伤口感染会显著增加死亡风险。
  • 医疗系统:蚁群能区分未感染与感染的伤口,并通过自身分泌的抗生素进行高效治疗。

识别与治疗机制

  • 感染识别:伤口感染后,蚁体表碳氢化合物谱发生变化,同伴通过识别这一变化诊断感染。
  • 治疗过程:工蚁从胸部侧面的胸侧腺分泌抗菌物质(含112种成分,约半数具有抗菌或伤口愈合作用),并涂抹于感染伤口。
  • 治疗效果:治疗使感染个体死亡率降低90%。

科学意义与医学潜力

  • 独特性:研究者称这是已知除人类外最复杂的伤口医疗行为。
  • 病原体关联:蚂蚁伤口的主要病原体为铜绿假单胞菌(Pseudomonas aeruginosa),该菌也是人类感染的主要病原之一,且部分菌株已对抗生素产生耐药性。
  • 后续研究:研究团队计划分析马塔贝勒蚁使用的抗生素成分,以探索可能应用于人类的新抗生素;同时将研究其他蚁类及社会性动物的伤口护理行为。

相关媒体与出版

  • 纪录片:Netflix纪录片《生命在我们星球》(Life on Our Planet)第五集《巨人的阴影》中展示了该蚂蚁的治疗行为,拍摄于科特迪瓦的科莫埃研究站。
  • 书籍:研究者埃里克·弗兰克的自传《蚂蚁的历史》(Une Histoire de Fourmis)已于2023年出版平装版,描述了其研究经历。
15. How to do OCR on a Mac using the CLI or just Python (blog.greg.technology)

本文介绍了如何在Mac上利用内置的“快捷指令”应用,免费创建一个可通过命令行(CLI)或Python调用的本地OCR服务。核心步骤分为一次性设置和日常使用两部分。

一次性设置步骤:

  1. 创建快捷指令:打开“快捷指令”应用,点击“+”新建一个快捷指令。
  2. 添加核心动作
    • 在右侧搜索并拖入 “从图像中提取文本” 动作。
    • 点击该动作中的“图像”占位符,选择 “快捷指令输入”
    • 在右侧搜索并拖入 “拷贝至剪贴板” 动作,并放置在“提取文本”动作下方。
  3. 完成配置
    • 确保“拷贝至剪贴板”动作拷贝的是“来自图像的文本”。
    • 为快捷指令命名,建议使用无空格、全小写的名称(例如 ocr-text)。命名后需按回车键保存。

日常使用方法:

  1. 命令行调用:设置完成后,在终端中使用以下命令对图像进行OCR,并自动将结果复制到剪贴板:
    shortcuts run ocr-text -i <图片文件路径>
    
  2. Python调用:在Python脚本中,可通过subprocess模块调用该快捷指令,并获取OCR结果:
    import subprocess
    file_path = '图片路径'
    ocr_out = subprocess.check_output(f'shortcuts run ocr-text -i "{file_path}"', shell=True)
    print(ocr_out)
    

该方案成本为零,依赖macOS自带功能,设置一次后即可便捷使用。

16. U.S. cities opt to ditch their off-street parking minimums (www.npr.org)

美国城市逐步取消路外停车配建要求

近年来,美国多个城市正掀起一股取消强制性“路外停车最低要求”的风潮。这类规定曾长期要求开发商为公寓和商业项目提供固定数量的停车位。如今,包括德克萨斯州奥斯汀市在内的50多个城镇已废除这些规定,旨在减少停车供给、提升住房可负担性、促进公共交通及步行友好型社区的发展。

核心举措与争议

  • 奥斯汀作为典型案例:奥斯汀市议会近期通过决议,成为美国最大的全市范围内取消停车最低要求的城市。支持者认为,过去的城市规划浪费土地,加剧住房成本与交通拥堵。反对者则担心,在缺乏完善公共交通系统的情况下,取消停车位要求可能导致居民和企业外流至郊区。
  • 规定的随意性与代价:研究指出,停车要求往往基于数十年前的随意标准(例如相邻城市对保龄球馆的停车位要求可能存在差异),却带来实质性影响:占用土地、增加建筑成本(一个停车位成本可超5万美元)、推高住房租金(研究表明带车库的住房租金约增加17%),并抑制更多住宅的建设。
  • 市场调节与公众支持:支持取消规定的观点强调,这并非消灭停车场,而是让市场与业主自主决定停车需求。例如,奥斯汀市中心十年前已取消停车要求,但市场仍提供了充足车位。一项调查显示,62%的美国人支持由业主和建造商决定停车位数量,而非地方政府。

对城市形态与交通的影响

  • 阻碍步行与公交发展:城市规划专家指出,过多的停车场会破坏步行环境、鼓励驾车出行,使公共交通难以有效覆盖。所谓“公交友好”区域需要连通的步行网络,而非被停车场割裂。
  • 促进可持续出行:多个城市(如旧金山、纽约)希望通过取消强制性停车要求,鼓励步行、骑行等低碳出行方式,重塑更宜居、更具活力的街区。
  • 趋势持续扩大:除已实施政策的城市外,纽约、密尔沃基、达拉斯等大城市也在探索类似改革。明尼苏达州德卢斯市于2022年12月取消了停车要求。

结论

取消路外停车最低要求被视为美国城市政策的重要转向,旨在应对住房危机、减少城市蔓延、提升环境可持续性,并将空间规划权更多交还给市场与社区。尽管存在担忧,但越来越多的城市正加入这一行列,尝试通过减少强制性停车供给来优化土地利用、改善居民生活品质。

17. OpenBSD Workstation Hardening (dataswamp.org)

OpenBSD 工作站安全加固指南

本文介绍了对 OpenBSD 工作站进行安全加固的系列措施,并解释了每项更改所针对的威胁模型。用户可根据自身需求选择适用方案。

用户配置加固

  • 最小权限原则:将用户从 wheel 组移除,并取消 doassudo 权限,以防止程序提权。如需 root 权限,应切换到 TTY 并以 root 用户登录。
  • 多因素认证:在登录时除密码外,还需 TOTP(基于时间的一次性密码)生成器(如手机应用或 KeePassXC),以抵御周围人员猜解密码的风险。
  • 主目录权限:设置主目录权限为 700,并添加 umask 077 到用户环境,确保新文件和目录仅限用户本人访问。

防火墙策略

  • 阻止入站流量:默认阻止所有入站连接,仅放行已建立会话的响应及 ICMP。在 /etc/pf.conf 中配置 block allpass out inetpass in proto icmp
  • 过滤出站流量:可手动允许特定主机和端口,阻止程序通过未授权端口/主机外传数据,有效防止数据泄露。

禁用桌面用户网络

通过创建专用代理用户(如 _proxy)和 SSH 隧道控制网络访问:

  • /etc/pf.conf 中添加规则阻止特定用户的所有出站 TCP/UDP 流量。
  • 需要联网时,通过 ssh -N -D 10000 _proxy@localhost 启动 SOCKS5 代理,并在程序中配置该代理。
  • 特定程序网络修复
    • SSH:通过 ~/.ssh/config 将所有远程连接通过本地代理跳转。
    • Chromium:添加命令行参数 --proxy-server=socks5://localhost:10000
    • Syncthing:设置环境变量 all_proxy=socks5://localhost:10000

临时文件系统

使用 home-impermanence 工具将主目录大部分内容置于内存临时文件系统,仅保留指定持久化目录。这能清除会话残留的临时文件和缓存,提升安全性。

禁用摄像头与麦克风

OpenBSD 默认禁用设备音视频录制功能(录制空流)。可通过修改系统参数 kern.audio.recordkern.video.record1 手动启用。物理开关、无设备机型或开源固件(如 Coreboot)的 BIOS 设置可提供更高可信度。

禁用 USB 端口

在 BIOS/固件中禁用 USB 为最佳方案。若不可行,可在 /etc/bsd.re-config 文件中添加 disable usbdisable xhci 以在启动时禁用 USB 控制器。

系统级服务

  • ClamAV 防病毒:启用 OpenBSD 自带的 ClamAV 服务及病毒库更新程序 freshclam,用于扫描恶意文件。
  • 自动更新:通过 anacron 设置每日自动更新系统基础包和软件,确保系统处于最新安全状态。

系统配置

  • 内存分配加固:在 /etc/sysctl.conf 中添加 vm.malloc_conf=S 以启用额外的内存检查(如释放后使用、堆溢出),可有效防御多数内存漏洞利用,但可能影响软件兼容性与性能。sshsshd 默认始终启用此标志。

进阶思路

  • 专用代理:为不同网络协议(HTTP/SSH/IMAP等)创建独立代理用户,进一步限制程序网络访问。
  • 专用用户运行进程:通过 SSH 在独立用户下运行命令行程序以实现隔离。图形程序隔离建议使用 VNC。
  • USB 解锁加密主目录:为多用户环境设计,使用专用 USB 存储作为“密钥”,在启动时自动解锁并挂载个人加密卷。

总结

安全加固需在安全性与可用性之间取得平衡。用户应根据自身环境和威胁模型,选择并配置适合的加固措施,以有效防御常见威胁。

18. Cross-platform Rust rewrite of the GNU coreutils (github.com)

uutils coreutils 是一个使用 Rust 语言跨平台重新实现的 GNU coreutils 工具集。其目标是成为 GNU 工具的直接替代品,任何与 GNU 的差异都被视为缺陷。该项目力求支持尽可能多的平台(包括 Linux、macOS、*BSD、Windows、WASI 等),以实现脚本在不同平台间的无缝迁移。自 Ubuntu 25.10 起,uutils coreutils 已作为默认工具集被纳入。

文档与翻译 项目提供用户手册和开发者文档,均可本地生成。用户可通过在线 WebAssembly 游乐场试用这些工具。

构建要求与版本 构建需要 Rust 工具链(cargo、rustc),GNU Make 为可选。项目遵循 Rust 的发布周期,并在 stable、beta 和 nightly 版本上进行测试。

构建方法 可通过 Cargo 或 GNU Make 进行构建:

  1. Cargo:与标准 Rust 项目构建流程一致。可构建一个包含常用核心工具的多调用二进制文件。通过 --features 参数可指定构建特定平台(如 windows、unix、wasm)的工具集。也可手动指定要构建的工具,或构建单个二进制文件。
  2. GNU Make:可构建所有或部分可用工具。

安装与卸载 安装和卸载方法取决于最初的构建方式:

  1. 通过 Cargo 安装:使用 cargo install 命令,默认安装到 Cargo 的 bin 目录。此方法不会自动安装 shell 补全和手册页。
  2. 通过 GNU Make 安装:支持安装所有或部分工具、为程序名添加前缀、安装多调用二进制文件,以及设置安装目录。该方法会自动为 bash、fish 和 zsh 安装 shell 补全。 卸载时,应使用与安装时对应的工具(Cargo 或 Make)。

手动安装补全与手册页 项目提供 uudoc 工具,可用于为多种 shell(bash、elvish、fish、powershell、zsh)生成补全脚本以及生成 man 手册页。

兼容性与许可 项目持续跟踪其通过 GNU 测试套件的用例数量。GNU Coreutils 采用 GPL 3.0 或更高版本许可证。

19. Sieve is simpler than LRU (cachemon.github.io)

SIEVE:比LRU更简单的缓存淘汰算法

缓存是临时存储数据以快速访问、维持在线服务流畅运行的方法。有限的空间带来了关键决策:保留什么,丢弃什么。这正是淘汰算法发挥作用的领域。我们的团队设计了一种名为SIEVE的新型缓存淘汰算法:它非常有效且简单,仅使用一个队列。

简单性的重要性 保持缓存淘汰算法的简单性很重要。复杂的算法会带来调试困难、分析复杂和消耗更多CPU周期等问题。相反,更简单的淘汰方法通常能提供良好的可预测性和吞吐量,尽管可能在缓存效率上有所妥协。

SIEVE 简介 SIEVE旨在同时实现简单性和高效性。

  • 设计
    • 数据结构:SIEVE只需要一个队列和一个称为“手”(hand)的指针。队列维护对象间的插入顺序。每个对象使用一个比特位来跟踪其“已访问/未访问”状态。“手”指针指向缓存中的下一个淘汰候选对象,并从队列尾部向头部移动。
    • 操作
      • 缓存命中:将被访问对象的已访问位设为1。
      • 缓存未命中:检查“手”指针指向的对象。如果其已访问位为1,则重置该位,并将“手”指针向前移动(被保留的对象保持在队列中的原始位置)。此过程持续,直到遇到已访问位为0的对象并将其淘汰。淘汰后,“手”指针指向下一个位置。新对象总是插入到队列头部。
    • 与CLOCK的区别:SIEVE与CLOCK/Second Chance/FIFO-Reinsertion算法(它们是同一淘汰算法的不同实现)有相似之处,但关键区别在于被保留对象的位置:SIEVE将其保留在旧位置,而FIFO-Reinsertion将其与新对象一起插入到队列头部。

性能评估

  • 效率:基于超过1559个数据集痕迹(包含超过2470亿次请求)的评估表明,SIEVE在超过45%的痕迹上优于所有现有的淘汰算法。例如,在一个大型CDN数据集上,SIEVE平均将FIFO的未命中率降低了21%。与ARC等高级算法相比,SIEVE在部分场景下可将ARC的未命中率降低高达63.2%。
  • 简单性:在对五个不同编程语言(C++, Go, JavaScript, Python, Rust)的流行缓存库进行集成后,发现用SIEVE替换LRU所需的代码改动极少(均不超过21行),工作量很小。
  • 吞吐量:SIEVE在每次缓存命中时不需要“提升”操作。因此,它比基于LRU的算法更快、可扩展性更强。在单线程下,SIEVE比优化的LRU和TwoQ快16%-17%。在16线程下,吞吐量高出两倍以上。

SIEVE 的潜力与局限

  • 作为缓存原语:SIEVE不仅是一个淘汰算法,还可以作为构建更高级淘汰策略的缓存原语。将其替换到LeCaR、TwoQ、ARC和S3-FIFO等算法的LRU或FIFO队列中,能显著提升这些算法的效率。
  • 局限性:SIEVE缺乏扫描防护能力。在频繁出现扫描(对象访问序列远大于缓存大小)的块缓存工作负载中,SIEVE的未命中率可能高于LRU,因为它不能识别在被驱逐后重新请求的热门对象(未使用幽灵缓存)。对此有研究通过为每个项目添加小型计数器来尝试改进。

总结 SIEVE是一种设计新颖、极其简单且高效的缓存淘汰算法。它通过一个队列和一个移动的“手”指针,利用对象的“已访问”位做出淘汰决策,在Web缓存场景中表现出色,不仅独立使用效果好,还能作为基础组件提升其他算法的性能。

20. Maestro: A Linux-compatible kernel in Rust (blog.lenot.re)

Maestro: 基于Rust的类Linux内核

项目概述

Maestro是一个完全用Rust语言从头编写的类Unix操作系统内核,目标是创建一个轻量级且能与Linux保持一定兼容性的系统,使其可用于日常生活。

发展历史

  • 项目始于2018年12月22日,最初是作为一个学校项目,使用C语言实现。
  • 约一年半后,由于代码库难以维护,决定切换到Rust语言。
  • 转换到Rust的主要优势包括:利用之前的经验教训重新开始、比用C编写Linux克隆更具创新性、借助Rust的类型系统和内存安全性降低内核编程难度。

选择Rust的原因

内核开发调试困难,原因包括:

  • BIOS文档难找且实现可能有缺陷。
  • 内核启动时可完全访问内存,可能意外写入自身代码。
  • 内存泄漏难以排查(无法使用valgrind等工具)。
  • 使用QEMU/VMWare配合gdb调试时,内核行为可能因模拟器不同而异,且gdb支持功能有限。

Rust的内存安全特性有助于避免这些问题,作者认为这是该项目迄今为止的最佳决策。

当前状态

  • 架构支持:单体内核,目前仅支持x86(32位)架构。
  • 系统调用:已实现437个Linux系统调用中的135个(约31%)。
  • 代码规模:总计约48,800行代码,分布在615个文件中。
  • 系统组件
    • Solfège:引导系统和守护进程管理器(类似systemd但更轻量)。
    • maestro-utils:系统实用工具命令。
    • blimp:包管理器。
  • 已测试软件:musl(C标准库)、bash、部分GNU核心工具(如ls、cat、mkdir等)、修改版的neofetch。

安装与测试

  • 注意事项:系统处于早期开发阶段,极不稳定,不建议在存储重要数据的机器上安装。
  • 测试环境:主要在QEMU、VMWare和VirtualBox上测试。
  • 安装方式
    1. 下载预构建的压缩.iso文件。
    2. 自行构建ISO文件。
  • ISO提供安装程序,建议在至少1GB内存的环境中运行,因为安装包存储在内存中。

博客定位

博客旨在探索更高级的计算机和操作系统主题,记录遇到的问题及解决方案,而非基础教程。

未来计划

  • 短期:清理代码库、优化性能、修复内存泄漏。
  • 中期目标
    • 完善包管理器。
    • 添加网络支持(正在开发中)。
    • 实现共享库支持(需改进mmap系统调用)。
  • 长期目标:安装并运行编译器(gcc、clang等)、make、Git、Vim等工具,实现在内核上开发内核。

开发流程

  1. 在内核上运行程序。
  2. 若不正常,则:
    • 打印系统调用日志,定位首个出问题的系统调用(未实现或存在缺陷)。
    • 实现或修复该系统调用。
    • 重新运行测试。
  3. 若正常,则继续。

如何参与

  • 在GitHub仓库点星。
  • 订阅Newsletter或RSS订阅。
  • 加入Discord提供反馈、建议或提问。
21. Software engineering salaries come from one of 3 budgets (swizec.com)

软件工程师的薪资来源于三种预算类别,这一框架影响日常工作及职业发展轨迹。三种预算类别分别为:

1. 销售/市场预算

  • 属于该预算的工程师包括增长工程师、销售工程师、开发关系工程师等,负责推动产品销售、功能推广及用户采纳。
  • 工作成果可直接量化,与收入紧密挂钩,但高度依赖短期指标,易导致内部竞争文化。
  • 环境动态性强,但职业稳定性较低,公司可能为优化成本而频繁调整人员。

2. 研发预算

  • 涵盖产品工程师、研究人员、架构师等,负责构建核心产品或探索未来产品方向。
  • 注重长期价值,平衡用户留存与新功能开发,部分团队专注于多年期研究项目。
  • 工作成果较难量化,但公司将其视为投资,职业发展更稳定,规划周期通常以季度或年度为单位。

3. 维护预算

  • 包括系统管理员、平台工程师等,负责维持现有系统运行,通常被视为成本中心。
  • 公司倾向于最小化该类预算,相关工作常被分散至开发团队,且易被忽视或优先级较低。
  • 非功能性需求(如技术债清理、内部工具开发)常被边缘化,工程师可能面临资源不足的压力。

核心影响

  • 所属预算类别直接塑造工作环境:销售/市场预算强调短期可测量成果,研发预算侧重长期建设,维护预算则面临持续的成本优化压力。
  • 这一框架有助于工程师理解不同岗位的职业特性,并为职业定位提供参考视角。
22. Almost half of British teens feel addicted to social media – study (www.theguardian.com)

研究发现近半数英国青少年认为自己沉迷社交媒体

根据千禧世代队列研究(Millennium Cohort Study)的数据,近半数(48%)16至18岁的英国青少年同意或强烈同意“我认为自己沉迷社交媒体”的说法。该研究追踪了2000-2002年间出生、居住在英格兰、苏格兰、威尔士和北爱尔兰的约1.9万人。在回应调查的7000人中,性别差异显著:57%的女生认同该说法,而男生的比例为37%。

研究人员强调,这种“自我感知的沉迷”并不等同于临床诊断的行为成瘾,但它反映了使用者感到对自己的行为缺乏控制力,这种体验本身值得关注。剑桥大学的Georgia Turner指出,这体现了有问题的互动关系,令人不安,但需要更细致地理解背后不同的行为模式。

目前,关于数字技术引发强迫行为的担忧日益增长,但相关科学证据并不一致。例如,世界卫生组织已将“游戏障碍”列为疾病,美国公共卫生总监也就社交媒体对青少年心理健康的风险发出了警告;但亦有研究质疑社交媒体必然造成心理伤害的观点。一些专家认为,将所谓的社交媒体沉迷简单类比为药物成瘾可能过于简化。

研究者提出,青少年与社交媒体的互动可能存在多种路径:对一部分人可能是行为成瘾,对另一些人可能是强迫性查看,或是应对负面生活经历的机制,也可能是对社会负面评价(如“浪费时间”)的反应。波士顿儿童医院数字健康实验室的Michael Rich博士指出,他的临床经验表明,许多年轻人正面临“有问题的互动媒体使用”(Pimu),这通常与ADHD、自闭症谱系障碍、焦虑、抑郁等潜在心理问题相关。通过识别并治疗这些潜在问题,Pimu往往会自行缓解或变得可治疗。

Rich博士不提倡使用“沉迷”一词,因其带有污名化色彩,且适度使用互联网是日常生活的一部分,完全戒断通常不是解决方案。

另一方面,剑桥大学精神病学家Andres Roman-Urrestarazu博士强调,除了针对个体的临床解决方案外,更需要政策干预。他指出,社交媒体和大型科技公司在与用户互动的方式上基本处于不受监管的状态,其设计的算法往往为了增加销售而特别容易产生对弱势群体有害的产品。因此,推动算法透明度至关重要。

该研究与当前全球对科技巨头责任的审视相呼应,包括美国多州起诉Instagram母公司Meta以及欧盟推进旨在加强消费者对智能手机应用控制的重大改革。研究团队认为,理解这些复杂的感知和行为模式,对于找到有效的帮助途径至关重要。

23. Show HN: Better Seater – Wedding seating chart optimizer (seater.steam-oven.net)

文章摘要

标题: Show HN: Better Seater – 婚礼座位安排优化器

核心内容: 该文章介绍了“Better Seater”这一工具,它是一个用于优化婚礼座位安排的网络应用。其核心目标是帮助用户更高效、合理地规划宾客的座位。

技术细节: 根据提供的HTML内容,可以确认:

  • 应用名称: Better Seater
  • 技术栈: 基于 create-react-app 创建的单页应用。
  • 页面结构: 这是一个标准的React应用入口页面,包含必要的元数据(如字符集、视口设置)、应用图标链接和指向主要JavaScript与CSS资源的引用。
  • 状态: 页面要求启用JavaScript才能运行应用。

总结: 这是一个用于优化婚礼座位安排的React单页网络应用。当前提供的代码片段仅为应用的基础HTML外壳,未展示具体的功能实现细节或优化算法。其主要信息指向这是一个新发布的、可能包含座位分配优化功能的实用型工具。

24. Ask HN: Who wants to be hired? (January 2024)
25. 90x Faster Than Pgvector – Lantern's HNSW Index Creation Time (lantern.dev)

文章摘要:Lantern HNSW 索引创建速度比 pgvector 快 90 倍

本文介绍了 Lantern,一个基于 Usearch 实现的 PostgreSQL 扩展,专注于高性能向量搜索。文章重点探讨了索引创建时间的重要性,并展示了 Lantern 如何通过外部索引创建实现比 pgvector90 倍、且比托管向量数据库 Pinecone 更快更便宜的索引构建性能。

为什么快速索引创建至关重要

  • 索引创建时间影响向量搜索功能上线的速度。在单核上处理 10 亿向量可能需要数天。
  • HNSW 算法依赖 M(控制邻居节点数)和 ef_construction(控制遍历节点数)两个关键参数。开发者需要在召回率和延迟之间权衡,进行大量参数实验。过慢的索引创建会使实验过程难以承受。

技术原理:外部索引创建实现并行化

  • 原生 PostgreSQL 中的 HNSW 索引创建是单线程的,无法利用多核,且资源密集,会影响数据库其他操作。
  • Lantern 的解决方案:允许开发者在数据库外部创建索引,然后作为文件导入。此方式具备以下优势:
    1. 避免拖累核心数据库:索引创建过程在外部进行,不影响数据库正常运行。
    2. 利用多核并行:外部创建可利用多核 CPU,极大提升创建速度。

性能基准测试结果

实验在拥有 32 核 CPU 和 64GB 内存的 Linode 实例上进行,使用 Sift(100 万 128 维向量)和 Wiki(100 万 1536 维向量)数据集。

单核内部索引创建性能

向量数据库 Sift 数据集时间 Wiki 数据集时间
Lantern 8分30秒 44分钟
Pinecone (1 pod) 9分钟 30分钟
pgvector 46分钟 2小时
  • 在单核下,Lantern 已比 pgvector 快数倍。

多核外部索引创建性能(关键突破)

使用外部索引创建并利用 32 核并行处理后,性能大幅提升:

  • Sift 数据集:索引创建仅需约 50 秒,实现 99% 的 recall@5
  • 与 pgvector 对比:比 pgvector 快 90 倍(Sift 数据集)和 48 倍(Wiki 数据集)。
  • 与 Pinecone 对比:比 Pinecone 的 32 pod 集群 快 3-6 倍
  • 成本效益:Lantern 在 32 核 Linode 服务器($576/月)上的性能,远超 Pinecone 32 pod 集群($3,889.44/月),实现 超过 6 倍的成本降低和速度提升。甚至 2 核的 Lantern 服务器性能已能媲美 Pinecone 32 pod 集群。

如何使用 Lantern 外部索引创建

  1. 安装 Lantern CLI
    cargo install --git https://github.com/lanterndata/lantern_extras --bin lantern-cli
    
  2. 使用 create-index 工具创建并导入索引:
    lantern-cli create-index \
        --uri postgresql://postgres@localhost:5432/testlive \
        --table sift \
        --column v \
        -m 8 \
        --efc 128 \
        --ef 64 \
        -d 128 \
        --metric-kind cos \
        --out index.usearch \
        --import
    
    • 参数包括 -m, --efc, --ef, -d(向量维度), --metric-kindl2sq, cos, hamming)。
    • --import 参数使索引创建后自动导入 PostgreSQL。

实现细节

  • 标签:使用 PostgreSQL 行的 ctid 作为索引节点的标签。
  • 数据传输:利用 PostgreSQL 的大对象功能,通过 lo_export 导出数据,外部创建索引后通过 lo_import 导入。

结论与修订

  • Lantern 通过外部索引创建,在向量搜索索引构建速度上实现了对 pgvector 和 Pinecone 的显著超越,同时大幅降低成本。
  • 2024年1月修订
    1. 更正了多核性能图表中的错误。
    2. 针对 pgvector 最新优化版本(0.5.1)重新测试,在调整 PostgreSQL 参数后,Lantern 在 Sift 数据集上仍保持 7分钟 vs 12分30秒 的优势。
26. Was Javascript really made in 10 days? (buttondown.email)

JavaScript确实在10天内诞生了一个初始原型,但其公开发布和后续演变经历了更长时间,且语言缺陷主要源于其他设计决策而非开发时长。具体要点如下:

  1. 10天原型的真实性:Brendan Eich在1995年5月6日至15日期间(约10天)开发了名为“Mocha”的内部演示原型。但JavaScript 1.0于1996年3月公开发布,首个“完整”版本发布于1996年8月,之后设计仍持续调整。

  2. 开发背景:Eich拥有十年语言设计和编译器开发经验,受雇于网景公司为浏览器添加编程语言。最初计划采用Scheme,但因与Sun公司合作,转为更“类似Java”的风格。

  3. 缺陷的主要来源

    • 隐式类型转换:Mocha原型未包含此功能,后应用户要求加入1.0版本,Eich对此表示后悔。
    • null的设计:为兼容Java而引入,导致typeof null返回"object"。
    • 数字类型:所有数字均为浮点数的设计源于Mocha原型,可能受HyperTalk语言影响。
    • API缺陷:均在Mocha之后引入,与10天开发无关。
  4. 受10天开发影响的缺陷:由于时间不足,Eich未能添加垃圾回收机制,后期尝试添加时引发安全问题。

总结:JavaScript的10天开发仅指内部原型阶段,其广泛存在的设计缺陷主要源于后期的兼容性需求和用户反馈,而非短期开发本身。

27. GCC Specs: An Introduction (wozniak.ca)

GCC 驱动程序(gcc 二进制文件)的核心作用是协调并运行编译器、汇编器和链接器等子程序,为用户隐藏了底层复杂性。驱动程序决定如何为这些子程序构建参数,这一过程依赖于名为“specs”的规范字符串。

Specs 是什么? Specs 是由指令组成的字符串,用于描述驱动程序在何种条件下、如何运行各个子程序。它采用类似 printf 的语法,包含条件逻辑,能根据用户提供的命令行参数动态生成子程序的参数。例如,驱动程序会根据输入文件的后缀(如 .c)选择对应的编译器规格。

Specs 如何工作?

  • 驱动程序将用户参数与specs中的指令匹配。
  • 指令(如 %{S:X;:D})表示:如果用户提供了 -S 参数,则展开为 X,否则展开为 D
  • 通过嵌套和组合这些条件,可以构建复杂的参数逻辑。例如,%{m16|m32:--32} 表示若用户指定了 -m16-m32,则向汇编器传递 --32

查看与调试 Specs

  1. gcc -dumpspecs:输出大部分内置specs,但完整规格可能需查看源代码。
  2. gcc -v:显示驱动程序实际运行的子程序命令及完整参数,有助于理解specs展开后的结果。
  3. gcc -###:进行“空运行”,仅打印将执行的命令而不实际执行,便于安全地测试specs效果。

自定义 Specs 可以通过 -specs=custom.specs 参数指定自定义规格文件,实验新的文件处理方式。例如,为 .xx 文件指定一个脚本作为“编译器”,观察specs指令的替换效果。

总结 Specs 是GCC驱动程序实现参数管理的核心机制,虽语法复杂且文档不全,但理解其原理有助于深入了解编译器的运行流程。通过 -dumpspecs-### 等工具,可以有效地探索和调试specs行为。

28. UK 2022 rail station flow images (github.com)

这份文件是英国铁路车站的标准CRS(客运预订系统)代码列表,对应2022年的车站信息。

核心内容与结构

  1. 数据性质:该列表并非包含具体流量数据或图像,而是提供了英国(主要为英格兰、苏格兰和威尔士)绝大多数铁路车站的标准三字母CRS代码及其对应的完整车站名称
  2. 组织形式:数据按车站名称的字母顺序(A-Z) 进行排列,格式统一为:
    • 第一列:车站全名
    • 第二列:CRS代码
  3. 覆盖范围:列表非常详尽,涵盖了从Abbey Wood(代码ABW)到Ystrad Rhondda(代码YSR)的数千个车站,包括主要城市枢纽站(如London Kings Cross)、地区性车站以及许多小型停靠站。

关键信息点

  • CRS代码:这是铁路行业中用于唯一标识车站的标准化代码,广泛应用于票务、时刻表、运营和数据分析中。
  • 数据用途:基于标题“rail station flow images”,此列表很可能是为了给后续的“车站客流流量图像”数据集提供准确的车站标识基础。每个车站的CRS代码可用于关联其对应的客流图像或统计数据。
  • 地理分布:列表反映了英国广泛的铁路网络,车站遍布英格兰、苏格兰和威尔士各地。

总结

该文件本质上是一个完整的、按字母顺序排列的英国铁路车站CRS代码参考手册。它为任何需要通过标准代码来标识和引用特定车站的系统或分析提供了关键的基础数据支持。

30. Ask HN: Has the tech recession affected you?
31. Organ pipe physics (www.modartt.com)

管风琴的物理原理

基本工作原理

管风琴属于自持式乐器,其核心功能是将连续的能量(气流)通过反馈环路转换为快速振荡的能量(声学振动),本质上是一个直流到交流的转换器

该反馈环路由两部分组成:

  1. 激励器:将连续能量转换为振荡能量。对于笛管,是气流撞击簧舌产生振动;对于簧管,是簧片因上游压力而拍打振动。
  2. 共振器:即管内的空气柱,其作用是过滤、积累振荡能量,并将其反馈给激励器及外界。

笛管的发声机制

笛管的声音产生于气流与管内空气柱声学振动的相互作用。

  • 过程:当阀门开启,上游压力驱动气流形成射流。射流撞击管的簧舌时,会在簧舌两侧注入气流,这相当于在管口附近产生了一个声压源,从而激励管内的声学振动。
  • 反馈闭环:建立起来的声学振动会反过来调制射流的传播。一个在通道出口处的小声学扰动会沿射流传播并增长,当它再次撞击簧舌时,会调制随后的气流注入。这个调制作用与射流起始处的声学振动相关,从而闭合了反馈环路。
  • 声音辐射:声波在管内传播时,一小部分能量会从管口和另一端辐射出去,形成我们听到的声音。
  • 类比:笛管的物理过程可以类比为音频反馈或啸叫效应,其中射流/簧舌的相互作用相当于扬声器(产生声音),而管体则相当于麦克风(储存声学振动)。

管体形状对音色的影响

管体像一个储能器,在其偏好的频率(即共振频率)上存储和释放能量最为高效。管体储存特定频率能量的能力称为导纳,导纳越强,能量储存和释放就越多。

管的尺度(直径与长度的比值)对共振频率和导纳有决定性影响:

  • 窄管(如Gambe音管):共振峰更尖锐且靠近,其共振频率更接近声音的谐波,导纳在几乎所有谐波上都较强,因此音色更丰富
  • 宽管(如Flute音管):导纳在谐波频率附近较弱,因此音色更清晰
  • 特殊形状(如Bourdon音管):其导纳曲线在第二谐波处甚至没有峰值,下一个峰值是第三谐波(一个五度),从而形成其典型的音色。

上游气压对声音的影响

笛管是一个相位锁定系统,其声音是气流(激励器)与管体(共振器)之间平衡的结果。当增加上游气压时,气流速度也随之增加。为维持系统平衡,管内的声波传播会进行调整。

具体影响表现为:

  • 音高:上游气压增加,声音频率也会升高。
  • 强度:上游气压增加,声音响度也会增大。
  • 音色:各谐波间的相对能量分布会改变,从而导致音色变化。

颤音装置的物理原理

颤音装置是一种通过周期性调制气流(即调制管道的上游气压)来工作的机械装置。

  • 由于上游气压的调制会直接影响音高、响度和音色,因此当气流被周期性调制时,这三者也会随之被调制。
  • 实现方式:在基于采样的管风琴插件中,颤音通常通过后期效果滤波器来模拟。而在物理建模软件Organteq中,则直接将上游气压的调制作为模型的输入,音高、响度和音色的调制变化完全由模型本身生成。
33. Emacs commands I got by with for years (macadie.info)

本文作者分享了其二十多年来使用Emacs的经验与心得,重点介绍了帮助其生存下来的基本命令和概念。文章内容可分为以下几个部分:

Emacs的初学与对比

作者最初因不喜vi的模态设计而选择Emacs,认为直接输入字符更直观。他批评了“因为常用就选择vi”的论点,并举例说明Emacs并非过时工具。作者从早期只进行单文件编辑的“古典时期”,经历职业变动后一度改用jEdit,后又通过加入Austin Emacs Meetup小组而回归Emacs,并进入了大量使用M-x调用函数的“文艺复兴时期”。

核心使用方式与工具

作者当前主要通过M-x命令配合smexIDO进行函数查找与调用。这种方式不仅提供自动补全和历史记录,也避免了记忆复杂快捷键。M-x本身表示同时按下Meta键(现代键盘通常对应Alt键)和X键。C-x则表示同时按下Control键和X键。

关键概念:缓冲区(Buffers)

理解缓冲区是扩展Emacs技能的关键。缓冲区不仅仅是存放被编辑文件内容的内存区域,Emacs中许多操作和功能都在缓冲区中进行:

  • Messages缓冲区:记录系统消息。
  • Buffer List缓冲区:用于管理(重命名、删除等)所有缓冲区。
  • Dired缓冲区:用于文件系统管理。
  • Occur函数的结果:显示正则表达式搜索结果。
  • Scratch缓冲区:可运行Emacs Lisp代码或进行简单计算。
  • Eshell缓冲区:运行Emacs的shell环境。通过为Eshell缓冲区重命名,可以在同一Emacs实例中运行多个shell。
  • 游戏缓冲区:如Tetris和Pong等游戏也使用独立缓冲区。

关键概念:桌面(Desktop)

作者将“桌面”功能理解为会话管理。它能保存Emacs退出时打开的文件列表及光标位置,并在下次启动时恢复。作者通过创建Bash别名(带和不带--no-desktop选项)来控制此功能,并将桌面文件保存在本地git仓库中进行月度备份。他认为学会切换桌面功能后便不再需要jEdit。

基本生存命令学习建议

作者鼓励初学者通过任何方式(纸笔、其他编辑器、在线速查表)记录命令,反对“比拼谁能在脑中记住更多命令”的做法。他回顾了早年将命令写在纸上直至背熟的经历。

文章结构说明

作者指出,如果读者只想要生存指南内容,可以跳过历史与评论,直接查看文中的“My List of Basic Commands”部分。

34. A Simulated Annealing FPGA Placer (stefanabikaram.com)

本文探讨了FPGA布局算法,并用Rust实现了一个简单的模拟退火(SA)布局器。作者是深度学习PhD学生,旨在分享知识并测试Rust在EDA领域的适用性。

FPGA布局问题

FPGA布局是将网表(电路图)中的节点(如CLB、BRAM、DSP、IO)映射到FPGA二维网格上的过程,需满足:每个网格点只能放置一个节点,且节点类型需匹配。目标是减少连接节点间的走线长度(通常用曼哈顿距离衡量),以优化时序和避免拥塞。

主要布局方法

  1. 混合整数线性优化:直接建模但不可扩展,变量数量随问题规模剧增。
  2. 分析式/静电布局:将离散问题松弛为连续优化,使用梯度下降求解,是当前先进方法。
  3. 模拟退火:一种启发式方法,通过随机“跳跃”探索解空间,并接受一定概率的劣化解以避免局部最优。作者指出,简化版可不需要“退火”部分。

作者实现的玩具布局器

简化与规格

  • 仅支持四种节点类型。
  • 网表建模为有向图(使用petgraph库),生成随机图进行测试。
  • FPGA布局建模为哈希表存储的网格(使用FxHashMap),支持灵活配置。
  • 布局解记录节点到坐标的映射。

模拟退火实现

  • 三种移动操作:随机移动节点、交换同类型节点、移动节点至所有节点质心附近的最近有效位置。
  • 目标函数:所有网表边的曼哈顿距离总和。
  • 决策:仅接受降低目标函数的移动(无温度退火)。
  • 并行探索:每步尝试多个随机操作(n_neighbors个),使用rayon并行评估,并选择最优移动。

结果与可视化

  • 使用300个节点的网表和64x64的FPGA布局测试,运行1000步。
  • 从随机初始布局优化后,节点明显聚集。
  • 质心移动操作在早期优化中效果显著。
  • 实验表明,探索4个以上并行邻居通常能改善结果,但最优并行数需权衡。

结论与思考

  • Rust在实现EDA算法时表现出色,类型安全和性能有助于构建可靠工具。
  • 高质量的EDA算法教程和代码较稀缺。
  • 作者希望未来能大幅缩短FPGA设计流程时间,并认为Rust是达成此目标的有力工具。

完整源码和数据已发布在GitHub。

35. Give Us Something to Look At: Why ornament matters in architecture (theamericanscholar.org)

建筑装饰的意义在于提升环境品质、传递文化内涵与历史记忆。费城教育局大楼的服务入口通过精心雕刻的檐口和浮雕,即使在小细节上也体现了设计者的用心,使寻常功能空间也能振奋精神。然而,阿道夫·洛斯在1910年提出的“装饰与罪恶”理论将装饰视为原始、浪费且不道德的行为,对现代主义建筑产生了深远影响,促使大量建筑摒弃装饰,转向简洁甚至冷漠的风格。

但历史证明,装饰一直是建筑的重要组成部分。约翰·萨默森将建筑装饰的功能分为两类:一是表面调制,即通过图案、线脚等手段使平淡的墙面更具视觉趣味,如威尼斯总督宫的大理石镶嵌、维也纳马约利卡之家的彩陶花卉外墙;二是虚拟建筑,即通过装饰创造视觉错觉或隐喻,如希腊女像柱、文艺复兴时期的假拱券等。

除此之外,装饰还具有其他关键作用。第一,传递意义:帕特农神庙的浮雕象征雅典的胜利,莎士比亚图书馆的浮雕板描绘剧作场景,赋予建筑叙事性。第二,引入艺术感性:历史上建筑常与艺术家合作,如内布拉斯加州议会大厦的壁画与雕塑,丰富了建筑的艺术维度。第三,提供视觉体验:装饰细节在不同距离下呈现不同层次,从宏观轮廓到近处雕琢,如美国最高法院青铜门上的浮雕,既传达法律精神,也供人细观。

然而,现代建筑对装饰的排斥导致了一系列问题:大面积墙面缺乏视觉调节易显单调;虚拟建筑手法的消失削弱了建筑的细腻表达;建筑意义难以通过装饰传达;建筑师与艺术家的协作传统中断,使作品趋于单薄。许多现代建筑为弥补装饰缺失,转而追求夸张的造型,却失去了装饰所带来的尺度感和亲和力。

装饰并非与现代建筑不可兼容。洛克菲勒中心就是成功范例,其建筑立面融合了抽象几何与精美浮雕,入口处色彩丰富的浮雕板兼具装饰性与象征性,体现了装饰在现代语境中的适应性。当代生活中,装饰仍以不同形式存在于服饰、产品设计中,说明人类对装饰的需求从未消失。

建筑装饰不仅是视觉的丰富,更是文化的延续、意义的承载与精神的慰藉。它使建筑超越功能,成为可读、可感、可共鸣的场所。

36. Browsers are the most likely disruptor of the mobile duopoly (infrequently.org)

浏览器最有可能打破移动操作系统双寡头垄断

文章核心论点指出,浏览器(尤其是通过渐进式Web应用)最有可能颠覆苹果和谷歌在移动生态系统中的双寡头垄断,但这一关键故事被主流科技媒体普遍忽视。

当前格局与监管压力

  • 科技新闻大量报道苹果和谷歌应用商店的反垄断问题,监管压力持续升级。
  • 然而,媒体报道普遍假设“糟糕、榨取性的原生应用商店的替代方案是其他原生应用商店”,忽略了浏览器和Web应用作为替代方案的可能性。
  • 监管机构(如日本JFTC)已开始认识到,应用商店通过偏向性发现和专用API来保护专有生态系统,并从中抽取高额分成;而应用的可移植性(Web的核心优势)可以打破这一模式。

双寡头的阻碍手段

  • 苹果和谷歌均通过不同方式限制竞争性浏览器及其能力,阻止Web与原生应用商店竞争。
    • 苹果:长期阻碍iOS浏览器实现关键功能(如推送通知延迟八年),强制使用其性能不足的WebKit引擎,并禁止竞争性浏览器在应用商店中分发或宣传Web应用。
    • 谷歌:独家控制Android上的“WebAPK”系统(实现深度系统集成的PWA安装方式),不向其他浏览器开放,阻碍了PWA应用商店的发展。
  • 两家公司都利用安全和发现作为借口,实际上维持了Web的弱势状态,以确保原生应用商店的抽成模式持续盈利。

技术媒体的失职

  • 技术媒体(如Wired、The Verge)在报道反垄断事件时,几乎完全未提及浏览器竞争和Web应用颠覆应用商店的潜力。
  • 原因可能包括:
    • 主要浏览器厂商(Mozilla、微软)未积极倡导此叙事。
    • 科技记者自身多使用iPhone,可能未充分认识到其他操作系统上Web能力的进步。
    • 涉及的技术细节复杂,记者和编辑可能难以深入理解。
    • Web作为平台的颠覆性影响在iPhone上尚未明显体现。

监管行动与转折点

  • 监管机构正采取措施强制开放浏览器竞争,特别是要求苹果允许iOS上的浏览器引擎选择。
    • 欧盟《数字市场法案》预计将从2024年起在iOS上引入浏览器引擎选择。
    • 英国、日本、澳大利亚等地区的立法也正针对浏览器竞争和应用商店行为进行规范。
  • 浏览器引擎的真正选择一旦实现,将使竞争性浏览器能够提供完整的Web应用能力,包括更好的安装体验和功能,从而削弱应用商店的必要性。

未来展望与挑战

  • 2024年将是关键一年,多项法规生效,浏览器反垄断执法加速。
  • 尽管存在乐观迹象,但苹果仍在通过法律手段和游说竭力拖延,以维持其控制权。
  • 文章最后呼吁科技媒体更深入地报道这一竞争,解释Web作为安全、可移植平台的优势,并帮助公众理解其中的利害关系,从而推动科技行业向更好的方向改变。
37. Researchers have identified the enzyme that gives urine its yellow hue (phys.org)

研究发现:尿液黄色成因的酶被揭示

核心发现
马里兰大学与美国国立卫生研究院(NIH)的研究人员在《自然·微生物学》期刊发表论文,首次鉴定出赋予尿液黄色的关键酶——胆红素还原酶。该酶由肠道微生物产生,可将橙色色素胆红素转化为无色的尿胆素原,后者自发降解为黄色尿胆素,从而形成尿液的典型颜色。

科学意义

  • 解开了长达一个多世纪的生理谜题:尿液为何呈黄色。
  • 明确了胆红素还原酶在肠道微生物组中的作用机制,为理解“肠-肝轴”奠定基础。

健康关联性

  • 酶缺失与疾病:该酶在几乎所有健康成人中存在,但常缺失于新生儿及炎症性肠病患者。研究者推测,这种缺失可能与新生儿黄疸、色素性胆结石的形成有关。
  • 未来研究方向:发现此酶有助于进一步探索肠道微生物如何影响胆红素代谢,并关联至黄疸、炎症性肠病等健康问题。

研究背景

  • 胆红素是红细胞分解的产物,通常经肠道排出,但可能被重新吸收。过量重吸收会导致血液中胆红素积累,引发皮肤和眼睛黄染(黄疸)。
  • 此前已知尿胆素与尿液黄色相关,但具体催化转化的酶一直未被明确。此次研究通过多学科合作解决了这一关键生理问题。

研究意义
该发现突显了肠道微生物组对人类健康的重要性,并为针对胆红素代谢相关疾病(如黄疸、肠炎)的干预提供了潜在靶点。

38. CGA in 1024 colors – a new mode (2015) (int10h.org)

本文详细介绍了8088 MPH演示团队如何在1981年的IBM CGA显卡上实现1024色显示的技术突破。核心是通过组合已知技巧并添加新方法,将CGA的默认16色扩展到惊人的1024色。

技术背景与基础

  • CGA标准:IBM CGA支持16色RGBI输出(4位TTL信号)和复合NTSC输出。标准图形模式为320x200(4色)和640x200(2色)。
  • 传统技巧1(RGBI):通过修改80列文本模式的CRTC寄存器,实现160x100分辨率下的16色显示(利用字符0xDE的左右像素分别对应前景/背景色)。
  • 传统技巧2(复合输出)
    • 直接颜色:16种基本色,由硬件相位生成。
    • 伪影颜色:利用NTSC编码缺陷,通过高分辨率像素排列生成新颜色。在640x200模式下,每4个像素对应一个色彩周期,通过不同排列可产生16种伪影色。
    • 纯色伪影:在640x200模式下,通过设置调色板寄存器改变前景色,可生成多组16色集合(每组基于一种直接色)。

突破性进展:从256色到1024色

  • 256色方案:通过扫描线级调色板切换可实现256色,但团队采用了更创新的方法。
  • 关键发现:在文本模式中,利用CGA ROM字符集的特定字符(如‘U’和‘‼’),其点阵在复合输出下可生成纯色。每个字符可分配16种前景色和16种背景色,从而产生256种颜色组合(基于‘U’)。
  • 512色方案:引入字符‘‼’(ASCII 0x13),其点阵与‘U’相位相差90°,扩展了颜色集合。通过前景/背景色翻转,可实现512种颜色。
  • 1024色方案(reenigne的贡献)
    • 通过操纵CRTC寄存器,每两个扫描线重新开始一帧,使特定字符(如ASCII 0xB0、0xB1)的第一扫描线重复,从而利用原本因第二扫描线不符而被排除的字符。
    • 这样额外增加了两个256色集合,总计达到1024色。

技术限制与挑战

  • 分辨率:有效分辨率仅为80x100像素(基于文本模式字符单元)。
  • 性能影响:1024色方案需要在每两扫描线修改CRTC寄存器,对4.77MHz的8088 CPU负担较重,仅适用于静态图像。
  • 硬件兼容性:CGA复合输出存在时序缺陷(如行同步和色彩突发问题),需针对具体显示器和捕获设备校准。

总结

团队通过巧妙利用CGA的文本模式、ROM字符集和CRTC寄存器操纵,实现了前所未有的1024色显示。该技术在2015年Revision演示比赛中创下纪录,展示了古老硬件的未开发潜力。尽管分辨率和性能有限,但突破了CGA的颜色限制,体现了对底层硬件的深刻理解与创新应用。

39. A lightweight Lisp interpreter in Malbolge Unshackled (github.com)

MalbolgeLISP:Malbolge Unshackled 中的轻量级 Lisp 解释器

MalbolgeLISP v1.2 由 Iczelia 于 2020-2021 年开发。其核心文件 (core.mb) 属于公共领域,整个程序受 GNU GPLv3 许可证约束。

项目概述

MalbolgeLISP 是一个用 Malbolge 语言编写的 Lisp 解释器。截至 2020-2021 年,它是 Malbolge 中创建的最先进、可实用的程序。它支持 Lisp 通常具备的特性,如 condletlambda 等。v1.2 版本在提升性能、缩减代码规模的同时,还增加了一些新功能。

该解释器支持隐式编程部分应用de Bruijn 索引单子提升等高级特性。

技术背景与挑战

Malbolge 是一种深奥的公共领域编程语言,专门设计为几乎无法使用,其特点包括反直觉的“疯狂操作”、三进制算术和自修改代码。程序的执行结果取决于指令在源代码中的位置,并且执行后指令会被加密。

Malbolge Unshackled 是 Malbolge 的一个更困难的变体,也是 MalbolgeLISP 的基础。其主要难点包括:

  • 旋转宽度由解释器随机选择,并随 D 寄存器的值增长。
  • 初始旋转宽度未知,需要探测,否则无法进行可靠运算。
  • 打印指令要求 Unicode 码点。
  • 存在获取特定字符(如换行符 0t21)的理论难题。 尽管困难,Malbolge Unshackled 被证明是图灵完备的,使得复杂程序(如本项目)的实现成为可能。

功能示例:斐波那契函数

文中展示了在 MalbolgeLISP 中实现的多种斐波那契函数,证明了其实际可用性。例如,一个朴素递归版本耗时约 1 分 19 秒,而一个迭代版本(使用 iterateN)将时间缩短至约 43 秒。这些示例说明了该解释器支持模式匹配、lambda 表达式、递归和迭代等编程范式。

如何使用

用户可以通过以下命令在本地构建并运行 MalbolgeLISP:

git clone https://github.com/kspalaiologos/malbolge-lisp
cd malbolge-lisp
unzip lisp.zip
clang -O3 -march=native fast20.c -o fast20
cat init_module.mb core.mb > lisp.mb
./fast20 lisp.mb

该过程涉及编译一个 C 程序(fast20.c),然后合并初始化模块和核心模块以生成最终的 Malbolge 程序并运行。

许可证与相关

  • 核心模块 (core.mb) 为公共领域。
  • 完整程序受 GNU GPLv3 许可证保护。
  • 开发者于 2021 年撰写了一本关于 MalbolgeLISP 设计与实现的书籍。
40. LinkedIn ad prices up as X plummets (www.marketing-beat.co.uk)

据《金融时报》报道,随着广告商在X平台(原Twitter)上的支出大幅下降,LinkedIn的广告价格正在上涨。
Outcast副总裁Leesha Anderson将当前趋势称为“LinkedIn季节”,指出过去一年中大多数客户已转向LinkedIn,目前所有客户均已停止在X平台投放广告。
这一转变源于X平台所有者埃隆·马斯克此前发表的争议性言论——他赞同了一条被认为包含反犹太内容的推文,导致包括迪士尼、可口可乐、IBM在内的多个知名品牌撤离,给平台造成数百万美元的收入损失。
英国政府也撤下了广告,但表示此举是商业决策而非对言论的直接回应。
此前,X平台已因马斯克对广告商“滚蛋”的激烈言论及平台改革引发的广告商信心下滑而面临收入困境。
与此同时,英国广告市场预计将在2024年持续增长。IPG旗下机构Magna预测,尽管传统媒体广告支出低迷,但英国非传统媒体广告支出预计将增长5.7%,高于2023年的3.7%。

41. Show HN: I've Implemented a RSS Reader (play.google.com)

StreamSphere:一款隐私友好的RSS阅读器

这是一款免费、无广告的RSS阅读器应用,专注于隐私保护和用户体验。

隐私与使用特性

  • 隐私优先:无需账户、不收集任何数据,所有数据处理均在本地设备完成。
  • 完全免费:无任何广告干扰。

功能亮点

  1. 内容管理与阅读

    • 内置来自美、英、澳、法、印、日、巴西等多国的700多个精选信息源,涵盖科技、体育、商业、旅行、全球新闻等领域。
    • 用户可自由添加和个性化订阅自己的信息源。
    • 提供无干扰阅读模式、文章收藏与搜索功能。
  2. 多媒体支持

    • 播客播放器:可直接在RSS订阅流中流畅收听音频内容。
    • 文本转语音:支持通过TTS技术收听文章。
  3. 个性化与工具

    • 支持多种主题(亮色、暗色、AMOLED、霓虹)。
    • 内置浏览器,也支持调用外部浏览器。
    • 自动更新订阅源。
    • 支持通过OPML格式导入/导出订阅源,便于备份或分享。

其他特点

  • 订阅源、主题和文章数量均无限制。
  • 开发者欢迎用户推荐新的信息源,并提供反馈或错误报告,以帮助改进产品。
42. Britain's got some of Europe's toughest surveillance laws. Now it wants more (www.politico.eu)

英国正通过多项举措强化其数字监控与法律框架。首相斯塔默警告网络激进化威胁,特别指出“孤独者、不合群者”和“卧室中的年轻男性”可能带来的风险。同时,政府要求成人网站必须严格限制儿童访问,否则监管机构将采取执法行动。

在虚假信息领域,有观点认为特朗普当选和英国脱欧时期引发的社交媒体侵蚀现实的恐慌已逐渐消退。此外,英国国家人工智能研究所出现内部危机,员工对领导层缺乏信心,涉及性别多样性等议题,反映了科技治理面临的挑战。

这些动态表明,英国在已有欧洲最严格监控法律的基础上,仍在寻求加强监管,覆盖反激进化、未成年人网络保护、虚假信息应对及人工智能机构管理等多个方面。

43. Show HN: The Sage Programming Language (github.com)

Sage编程语言概览

核心定位
Sage是一门追求最大可移植性、表达力与直观性的编程语言,融合了Rust、C和Python的部分特性。自2022年4月起开发,采用MIT许可证。

技术特点

  • 编译后端多样:目前支持x86编译器后端、C源代码后端以及可在Web上运行的虚拟机解释器后端。
  • 虚拟机设计:采用零地址码表示,但保留了重构为类似LLVM三地址码表示的信息,从而在实现简单的同时支持高级优化。核心指令集极度精简(见表),便于开发者自行实现新后端。
  • 核心指令集:包含基础的控制流(while/if/else)、寄存器操作、内存加载/存储、算术运算、位操作等指令,每个指令均对应简洁的C等价代码。

当前实用性
虽属年轻项目,未达生产就绪,但已能编写实用程序。示例包括:

  • SageOS:一个用户空间由Sage编写的操作系统,其图形shell和演示应用可通过FFI(外部函数接口)操作屏幕、鼠标键盘、文件系统及进程调度。
  • FFI能力:可直接调用C函数或后端内建函数,例如在Web演示中调用JavaScript代码进行绘图或弹窗。

使用方式
通过Cargo安装:

cargo install --git https://github.com/adam-mcdaniel/sage

运行Sage文件:

sage examples/frontend/interactive-calculator.sg

编译为C代码并使用GCC编译:

sage example.sg -tc
gcc out.c -o out

语言范例

  • 结构化类型与集合:支持自定义结构体(如Point)、HashMap等集合类型,代码风格融合了Rust与Python。
  • 模式匹配:提供强大的match表达式、if let绑定及解构能力,支持枚举与元组匹配。
  • 结构类型:允许通过组合现有结构体字段创建新类型(如将PositionSize组合为Rectangle)。

功能路线图
未来计划包括:

  • 后端扩展:新增LLVM后端(高优先级)、WebAssembly后端等。
  • 语言特性:SIMD向量指令、静态变量、条件编译、泛型函数、可变性检查、Rust风格枚举、迭代器/列表推导式、Hindley-Milner类型推断等。
  • 工具链:VSCode扩展、包管理器、AST宏、自举实现等。
  • 标准库模块:涵盖类型反射、集合、网络、文件系统、图形、音频、GUI、WebAssembly及FFI等。

社区与贡献

  • 提供Discord服务器用于讨论。
  • 欢迎通过提交Issue或Pull Request参与贡献,尤其希望为其他架构添加后端及开发VSCode语法高亮扩展。

作者信息
作者为美国田纳西大学诺克斯维尔分校计算机科学博士生,Rust语言爱好者,独立完成至v0.0.2-alpha版本的所有代码。

44. Thoughts on PostgreSQL in 2024 (jkatz05.com)

本文是作者对PostgreSQL在2024年及未来发展方向的个人思考与观察,旨在探讨核心功能、生态系统及社区的发展。文章并非官方路线图,而是基于社区讨论的反思。

PostgreSQL的发展主要聚焦于以下三个核心功能领域: 可用性:这是用户最迫切的需求。提升集群可用性的关键在于改进逻辑复制,以支持蓝绿部署、零停机版本升级(如从PG15到PG16)以及主主复制等高可用场景。尽管主主复制实现复杂,但PostgreSQL 16已奠定基础,2024年将努力填补功能缺口。另一个重要方向是支持非阻塞的在线DDL操作,减少对写入的锁影响。 性能:重点是确保数据库能充分利用现代硬件的垂直扩展能力。正在进行中的重要工作包括引入直接IO(DIO)和异步IO(AIO),以及探索并行恢复技术,以大幅缩短因检查点延迟导致的崩溃恢复时间。 开发者特性:这是一个涵盖SQL语法、函数和新兴工作负载支持的广泛类别。当前创新大量发生在扩展中,但核心代码也需跟进。目标包括:完善SQL/JSON标准支持(如JSON_TABLE)、引入系统版本化表等其他数据库已有的特性、优化PL/pgSQL以简化从其他数据库的迁移,以及为核心代码提供对向量搜索等AI/ML工作负载的更优支持。

扩展生态系统:PostgreSQL的可扩展性是其成功的关键,但也导致了“扩展泛滥”。2024年需要建立更集中的资源来帮助用户发现、评估和选择扩展,并支持扩展开发者的治理与维护。

社区建设:需要在三个方面改进:

  1. 指导机制:为新贡献者提供更好的入门路径和支持。2024年5月的PGConf.dev会议将专门探讨此问题。
  2. 多样性、公平与包容(DEI):积极工作,确保社区是欢迎所有人的。
  3. 透明度:像行为准则委员会那样,通过发布年度报告等方式,提高敏感决策过程的透明度。

安全特性:虽然未详述,但透明数据加密(TDE)、支持更多认证方法(如OIDC)以及可能的联合授权模型也是重要的发展领域。

总结而言,PostgreSQL在保持其可靠性、稳健性和性能声誉的同时,正通过社区努力,在高可用性、垂直扩展能力、开发者体验及生态系统治理等方面持续创新,以适应未来的数据工作负载需求。

45. Vim 9.1 Released (www.vim.org)

Vim 9.1 版本发布摘要

Vim 项目宣布 Vim 9.1 正式发布,该版本献给已故的核心开发者 Bram Moolenaar。此版本主要以 bug 修复 为主,包含数百个修复,并新增了一些特性和多项细微改进。

主要新特性

  1. Vim9 脚本支持类与对象:通过 vim9-class 文档了解详情。
  2. :defer 命令:用于在函数执行完毕后自动清理资源。
  3. 虚拟文本支持:可在缓冲区中添加虚拟文本,适用于语言服务器的特性(如内联提示)。
  4. 平滑滚动功能:通过 smoothscroll 选项启用。
  5. 内置 EditorConfig 插件:简化了编码风格的配置。
  6. OpenVMS 系统更新:提升了在该系统上的兼容性。
  7. xxd 工具更新:新增彩色输出支持并允许反向位转储。

其他改进与变更

  • 修复了自 Vim 9.0 发布以来的众多错误,包括不安全内存访问、内存泄漏、缓冲区溢出和潜在崩溃等问题。
  • 相关行为变更、新增函数、自动命令、Ex 命令及选项等细节,请参考对应帮助文档(如 :h changed-9.1:h added-9.1)。
  • 完整补丁列表见 :h patches-9.1
  • Vim FTP 服务器已退役,用户应转向使用 Git 仓库获取资源。

其他信息

  • 项目感谢所有通过补丁、翻译、错误报告等方式做出贡献的人员。
  • Vim 是慈善软件,鼓励用户为乌干达的贫困儿童捐款。
  • 新版本可在官方下载页面获取。

发布日期:2024年1月2日。

46. Choosing Go at American Express (2019) (americanexpress.io)

美国运通选择Go语言的摘要

美国运通在2019年选择在其支付和奖励系统中使用Go语言,主要基于对可靠性、性能以及现代基础设施适配性的需求。文章回顾了这一决策的背景、评估过程及选择Go的具体原因。

评估背景与方法

  • 起始时间:2016年底,因遗留平台需要更新启动评估。
  • 评估目标:寻找最适合高性能、高并发、高可用性需求的语言,并适配现代设计模式。
  • 评估方式:通过“语言对决”项目,用相同应用(将ISO8583消息转换为JSON的HTTP/S服务)在多种语言中编写并进行基准测试,确保逻辑一致性且代码针对各语言优化。

候选语言与评估标准

  • 候选语言:C++17、Java、Node.js、Go(前三者已在公司内使用,Go为新引入)。
  • 评估标准:语言需用于高性能平台、支持网络编程、适合构建后端REST/gRPC API,并拥有开源工具链、库和活跃社区。

对决结果与Go的性能优势

  • 性能表现:Go达到每秒14万请求,仅次于最高性能语言(16.7万请求/秒)。
  • 关键优势
    • 无需预热:作为编译型语言,启动即可处理请求,避免JIT编译延迟。
    • 垃圾回收高效:暂停时间极短(250微秒至1毫秒),且无需特殊调优。

选择Go的其他原因

  • 简单易学:语法接近C语言家族,工程师可在1-2个月内贡献代码,降低学习曲线。
  • 鼓励最佳实践
    • 禁止未使用的导入和变量,保持代码简洁。
    • 错误处理要求显式检查(err != nil),虽略显重复但利于及时处理错误,便于代码审查。
    • 通过GoDoc规范注释,自动生成文档,提升代码可维护性。
  • 原生并发支持
    • Goroutine:轻量级协程,内存占用低(2KB),易于创建和管理。
    • Channel:提供安全的Goroutine间通信,简化并发编程。
  • 工具链强大:内置测试、基准测试、格式化工具(gofmt)和性能分析工具(PProf),且构建速度快(比同类项目快一半以上)。

不足之处

  • 依赖管理:尽管工具在改进,但社区仍在适应新方案,需要进一步优化。

说服领导层的策略

  • 内部论文:深入分析Go语法、优势及适用场景。
  • 概念验证:通过“语言对决”展示性能数据。
  • 试点应用:在实际生产服务中应用Go,例如将内存开销降低90%,证明其企业级可行性。
  • 最终成果:结合文档、试点案例和持续沟通,成功论证Go的可靠性,推动其在公司内的采纳。

美国运通通过系统评估和试点,认为Go在高性能后端服务场景下兼具性能、易用性和最佳实践支持,适合其支付系统现代化需求。

47. Chrultrabook Docs (docs.chrultrabook.com)

Chrultrabook 文档面向希望将 ChromeOS 替换为其他操作系统的用户。该网站提供替换操作系统的方法指南,以及充分发挥设备性能所需的额外信息。由于过程具有技术性,用户需具备一定的技术背景和故障排除技能,这并非简单的一键操作。

48. Why I didn't play this harpsichord sooner (taylor.town)

本文作者通过自问“为何多数人没有个人网站”这一问题,类比引出“为何多数人没有大键琴”的思考,并以此为核心展开叙述。文章起源于作者与乔·巴顿(Joe Button)的一次未竟的网络交流。

作者成长于基督复临安息日会(SDA)的社区环境,音乐在其中扮演重要角色。教会聚会为信徒们提供了定期展示音乐技艺、相互欣赏和实践的场合,形成了一个充满音乐的社群氛围。然而,当作者于2014年搬到洛杉矶并因失去宗教信仰而逐渐疏离该社区后,不仅失去了亲友联系,连曾经熟悉的音乐生活也一同失落了。繁忙的工作、嘈杂的环境、人际关系的浮躁以及城市生活的种种压力,使音乐退居次要地位。尽管尝试在爵士俱乐部、派对等地寻找归属感,但作者认为这些场合无法替代教堂提供的那种每周固定的、由熟悉面孔组成的社群连接。疫情(2020年)的到来进一步加剧了孤独感与沉溺于外部娱乐(如刷视频、饮酒)的习惯。

转折点发生在作者婚后与伴侣搬到郊外。在伴侣的长期支持、专业心理帮助、戒瘾努力以及直面“无聊”的过程中,作者于2012年自制却长期闲置的大键琴在2022年重新被弹奏,失落的旋律得以回归。作者反思,这种转变的契机难以一概而论,很多人也未能完成这样的改变。

文章的核心思想在于,音乐本身创造了一种类似“教堂”的社群。定期聚会演奏音乐,能自然吸引同伴,进而形成稳定的团体。作者认为大键琴虽是奢侈品(获取、维护、学习成本高),但希望每个人都有条件投入时间与金钱于音乐等创造性活动。作者表示愿意为感兴趣者提供鼓励和支持。

最后,作者引用了乔·巴顿在后续邮件中的观点:巴顿认为,相比大键琴,CB无线电(一种业余无线电通信方式)可能是更好的类比,因为它们都具有一定的实用性和媒介属性,但除非有特定需求或成为爱好者,多数人不会涉足。巴顿强调,这更多是源于对“实用性”的认知不足,而非单纯的困难。作者对此表示认可并鼓励对方继续自己的爱好。

(注:摘要严格基于原文内容,未添加个人评论。)

49. Apple II Emulation Evaluation (2022) (juiced.gs)

Apple II 模拟器评估 (2022) 摘要

本文是对多个平台下 Apple II 模拟器的综合评估,旨在帮助用户在现代计算机上运行 Apple II 软件。评估基于模拟的准确性、功能丰富度、易用性、平台支持及活跃状态。

主要分类与顶级模拟器

文章将模拟器分为几类,其中最佳模拟器在功能和质量上表现突出。

  • 最佳 Apple II 模拟器

    • AppleWin (Windows):8位 Apple II 的标杆模拟器,始于1994年。功能全面准确,支持众多虚拟硬件,但部分高级功能需通过命令行配置。有 macOS (Mariani) 和 Linux 独立移植版本。
    • AppleWin on Linux (Linux):将 AppleWin 移植到 Linux,功能与 Windows 版本基本一致,提供多个不同界面,是 Linux 平台上最强大的8位模拟器之一。
    • CrossRunner (Windows):专为 Apple IIGS 设计的优秀新模拟器,注重底层硬件准确性,对开发者友好,拥有强大的调试器和开发工具集成。
    • KEGS (macOS, Windows, Linux):功能丰富的 Apple IIGS 模拟器,近期经过大幅更新和增强。界面较为原始,但功能强大,支持多平台。
    • Mariani (macOS):基于 AppleWin 的 macOS 移植版,提供了苹果风格、简洁易用的界面,免费且功能齐全。
    • Virtual II (macOS):全面且高度打磨的付费模拟器 ($36)。界面优雅,模拟了几乎所有8位 Apple II 型号,提供极其灵活的虚拟硬件配置和与 macOS 的深度集成,是 macOS 用户的首选。
  • 优秀 Apple II 模拟器 此类模拟器功能齐全,但可能稍欠打磨或使用略复杂。

    • 代表包括:ActiveGS (Windows,休眠),Agat (Windows),Ample (macOS,用于简化 MAME 操作的工具),Apple in PC (AIPC) (Windows),Clemens (Windows/macOS/Linux,较新的 IIGS 模拟器),microM8 (跨平台,注重创新和实验功能),MII (Linux,界面美观),OpenEmulator (macOS,强调保真度)。
  • 适合技术用户的模拟器 此类模拟器需要一定技术知识来配置和使用。

    • 代表包括:emu6502 (Linux/Windows,命令行操作),izApple2 (跨平台,命令行操作),LinApple (Linux,基于旧版 AppleWin 代码),MAME (跨平台,超级模拟器,支持海量硬件,但界面通用且复杂)。
  • 基于 Web 的模拟器 在浏览器中运行,可在 iOS、Chromebook 等封闭平台使用,无需安装。

    • Apple ][js:基础但可靠的 Web 模拟器。
    • Apple2TS:功能非常丰富的 Web 模拟器,接近桌面模拟器水平,支持现代原生键盘输入。
    • cyanIIde:专注于网站嵌入的模拟器。
  • 其他模拟器 包括 AccurAppleApplePiClock SignalJACE 等,它们各有特点或不足。

核心要点

  1. 平台选择:Windows 用户首选 AppleWin;macOS 用户首选 Virtual II(付费)或 Mariani(免费);Linux 用户推荐 AppleWin on Linux 或 KEGS。
  2. IIGS 需求:Windows 用户首选 CrossRunner;跨平台用户可选 KEGS。
  3. 易用性:Virtual II、Mariani、CrossRunner 等在用户界面和易用性上做得最好。
  4. 功能与准确性:顶级模拟器均提供高保真度模拟和丰富的虚拟硬件(如 Mockingboard 声卡、硬盘、内存扩展等)。
  5. 活跃度:多数推荐的模拟器仍在积极开发中。
  6. 特殊情况:Web 模拟器提供了便捷的访问途径;MAME 功能极其强大但使用门槛最高;Ample 是简化 macOS 上 MAME 使用的优秀辅助工具。

未评论与排除说明

文章指出,部分模拟器因未模拟增强型 Apple IIe/IIGS、未正式发布、无法在现代系统运行、存在重大缺陷或需从源码编译(非 Linux 平台)等原因未被纳入详细评估。一个更新的模拟器 apple2emu 将在后续文章中评论。

结论:Apple II 社区拥有数量众多的模拟器选择。用户应根据自身操作系统、对易用性和功能的需求,以及是否需要模拟特定型号(如 IIGS)来选择最适合自己的模拟器。

50. NYT vs. GPT: Microsoft finds itself on the other side of an industry (www.geekwire.com)

文章标题“NYT vs. GPT: Microsoft finds itself on the other side of an industry”指向了《纽约时报》与微软及OpenAI之间围绕GPT模型的版权法律纠纷。

核心争议在于,以《纽约时报》为代表的新闻出版机构指控OpenAI(由微软大力投资)在训练其GPT系列大语言模型时,未经许可使用了大量受版权保护的新闻文章,从而引发了关于生成式AI训练数据合法性的行业定义性诉讼。

此案将微软置于一个独特的对立位置。一方面,微软是积极倡导并投资生成式AI技术的科技巨头;另一方面,作为OpenAI的核心合作伙伴与主要支持者,它如今因AI训练数据的版权问题而与内容创作行业的代表性机构《纽约时报》对簿公堂。这凸显了AI发展浪潮中,技术创新方与内容版权方之间日益激化的根本性矛盾。

此诉讼被视为一个里程碑式的案例,其判决结果很可能为整个生成式AI行业如何处理训练数据中的版权材料设定先例,对AI公司的数据获取、模型训练方式以及未来与内容创作者的关系产生深远影响。