2024-09-01

34 篇热帖

1. We built the city of Colombo in Cities:Skylines (github.com)

《城市:天际线》中的科伦坡虚拟城市项目

项目简介

该代码仓库由Watchdog团队创建,是科伦坡市在《城市:天际线》游戏中的精确模拟。项目旨在为公众提供一个可视化工具,帮助理解城市设计问题并测试不同基础设施决策的影响。该虚拟城市作为"数字孪生体",可用于可视化城市问题、模拟交通与人口分布变化、以及进行城市规划教育。

构建方法

  1. 地形与道路:基于OpenStreetMap数据,利用卫星图像精细雕刻地形,重建科伦坡市政委员会辖区(从Wattala到Dehiwala,从科伦坡港口城市到Maharagama)。最终实现超过99%的道路、公园和水体匹配度。
  2. 土地使用与分区:依据科伦坡城市发展规划提取土地利用数据,并映射至游戏分区。结合Meta的高分辨率人口数据识别高密度区域,使用高密度住宅和商业分区。添加小巷以模拟真实世界的"Mawathas"。
  3. 人口模拟:CMC区域估计2020年人口为1,048,000人。当前版本包含1,044,500名虚拟市民,并利用Mod(如Realistic Population 2)模拟更接近现实的人口密度和人口统计学特征(市民会经历生老病死等生命周期)。
  4. 交通系统
    • 公共交通:复刻了三条主要铁路线(主线、沿海线、凯拉尼河谷线)和六条关键公交线路。
    • 私人交通:基于RDA国家总体规划设置车辆生成标准,并利用TM:PE Mod调整交通行为以反映斯里兰卡驾驶习惯(如公交车可忽略车道箭头、车辆可能U型转弯等)。
  5. 视觉优化:精选数千个3D资产替换默认建筑,为标志性建筑(如Nelum Kuluna)创建自定义模型,并选择匹配真实世界车辆的火车、公共汽车和三轮车资产。

数据来源

项目使用了来自以下机构的公开数据:

  • 科伦坡市政委员会、斯里兰卡道路发展局、城市发展局、人口普查与统计局
  • 莫拉图瓦大学交通与政策规划系
  • META的Data for Good项目(特别是与哥伦比亚气候学院CIESIN合作的人口地图工作)
  • 联合国人居署、OpenStreetMap、欧空局Sentinel-2卫星图像计划、谷歌地图和Routemaster.lk

主要应用

  • 模拟道路、交通线路的变化
  • 探索私人交通政策变化的影响
  • 可视化新基础设施(如单轨铁路、更宽人行道)的影响
  • 评估增加绿地或停车区域的效果

关键限制

《城市:天际线》引擎存在以下限制:

  • 最大区域面积:298.6平方公里
  • 最大市民数:1,048,576
  • 最大建筑数:49,152
  • 最大运动中车辆数:65,636
  • 最大公交线路数:256 因此导致:
  • 无法模拟科伦坡真实的50万以上浮动车辆,车辆与人口比率存在差异(真实为1:5,模型约为1:10)。
  • 公共交通时刻表过于准时,与真实世界有偏差。
  • 视觉资产虽经筛选,但仍无法完全体现斯里兰卡特色。
  • 科伦坡港口虽有外观,但功能上并未真实运作。

许可与致谢

该项目由斯里兰卡Watchdog(LIRNEasia的一个项目)创建,并获得欧盟和德国外交部联合资助的SCOPE计划支持。地图、保存文件及指南以MIT许可证发布。项目特别感谢Amal Kumarage教授等研究者的贡献,以及《城市:天际线》庞大的模组社区。

更详细的文档、技术说明和安装指南请参阅项目Wiki。

2. Building LLMs from the Ground Up: A 3-Hour Coding Workshop (magazine.sebastianraschka.com)

从零构建大型语言模型:3小时编程工作坊

本文介绍了一个为期3小时的编程工作坊,旨在帮助学习者深入理解大型语言模型(LLM)的工作原理,并通过实践掌握其构建、训练和使用过程。

工作坊核心内容

工作坊分为六个主要部分,涵盖LLM开发的完整流程:

  1. LLM简介:提供大型语言模型的基本概念和背景知识。
  2. 理解LLM输入数据:讲解LLM所处理的数据形式,并包含一个简单分词器类的编码演示。
  3. 编码LLM架构:指导如何编写LLM的代码结构,并介绍GPT-2Llama 2模型。
  4. 预训练:讲解模型预训练的过程和方法。
  5. 加载预训练权重:包括手动加载和通过LitGPT工具加载预训练权重的两种方式。
  6. 指令微调:分为通过代码实现和通过LitGPT实现两部分,并包括基准测试评估对话性能评估

学习资源

工作坊提供丰富的配套材料:

  • 视频教程:带有可点击的章节标记,便于快速跳转到特定主题。
  • 代码仓库:包含工作坊专用代码和相关的LitGPT GitHub仓库
  • 书籍:《Build a Large Language Model (From Scratch)》,提供更详尽的原理讲解。
  • 开发环境:提供了用于此工作坊的Lightning Studio环境。

作者与支持方式

该工作坊是作者个人项目的一部分。作者还著有《Build a Large Language Model (From Scratch)》一书,声称其提供了其他地方难以找到的深度细节。读者可以通过购买书籍、撰写书评或订阅作者在Substack上的付费内容来提供支持。

4. Nearly half of Nvidia's revenue comes from four mystery whales each buying $3B+ (fortune.com)

英伟达收入高度依赖四大匿名客户

根据英伟达提交的10-Q监管文件,其第二季度300亿美元营收中,约46%(约138亿美元)来自四家身份保密的客户。这四家客户的采购均与其数据中心AI芯片业务直接相关。

核心要点

  • 集中度极高:四大客户每家贡献超过总收入的10%,合计贡献收入已超过英伟达上年同期的全部营收。其中“客户B”单季采购额(占11%)甚至超过了其第二大业务部门“游戏”(29亿美元)的全部收入。
  • 业务驱动:采购内容主要为AI芯片(如H200),用于训练大型语言模型(如GPT-4)和运行推理服务(如ChatGPT)。需求方可能包括亚马逊、Meta、微软、Alphabet、OpenAI或特斯拉等正在扩建AI算力的企业。
  • 财务表现:收入集中带来极高利润率,上半年每10美元营收中有5.6美元转化为净利润。六个月净利润同比近四倍增长至315亿美元。
  • 市场担忧:投资者对这种依赖少数客户、爆发式增长的可持续性表示怀疑。半导体行业固有的周期性波动历史加剧了这种顾虑。
  • 公司回应:CEO黄仁勋声称客户“相对多元化”,但报告数据显示,上年同期并无单一客户收入占比达到10%。公司已在财报中专门提示“收入集中”风险,且预计该趋势可能持续。

英伟达股价预计在周四开盘时下跌,表现将弱于整体股市。

6. Founder Mode (paulgraham.com)

创始人模式

核心观点

文章指出,随着公司规模扩大,普遍的建议是转向"经理人模式"——即雇佣优秀人才并给予他们自主空间。但Airbnb创始人Brian Chesky在Y Combinator活动上分享,遵循这种传统建议的结果往往是灾难性的。许多成功创始人也有相同经历,这表明传统建议可能是错误的。

两种模式的区别

  • 经理人模式:类似模块化设计,CEO只与直接下属沟通,将组织架构中的子部门视为"黑箱",避免介入细节(被视为微观管理)
  • 创始人模式:创始人可以采取管理者无法做到的做法,包括"跨级会议"等直接干预公司运营的方式

创始人模式的特点

  1. 打破常规层级:创始人不再局限于通过直接下属管理公司
  2. 选择性深度参与:根据情况灵活决定介入程度,而非机械放权
  3. 经验性摸索:目前没有专门书籍或商学院教授此模式,全靠创始人自行探索
  4. 潜在混乱性:可能比经理人模式更复杂,但也更有效

具体案例

  • 史蒂夫·乔布斯:每年为Apple最重要的100人举办静修会(并非组织架构中最高层的100人)
  • Airbnb:Chesky通过研究乔布斯的管理方式,使公司现金流利润率成为硅谷最佳之一

问题根源

  • 非创始人背景的风险投资人不了解创始人应如何管理公司
  • 高级职业经理人往往擅长"向上管理"(可能包含不实信息)
  • 创始人常感到被两方"操控":建议他们采用经理人模式的人,以及按此模式工作却损害公司的下属

未来展望

作者预测,一旦创始人模式被充分理解:

  • 许多创始人早已在实践中接近这一模式,尽管曾被视为"古怪"
  • 将释放更大潜力——在逆境中已取得成就,获得正确指导后将能做得更好

潜在风险

作者提醒:概念普及后可能被滥用,无法适当放权的创始人可能以此为借口,非创始人管理者也可能强行模仿,导致混乱。


本文基于Brian Chesky的演讲及与多位成功创始人(包括Patrick Collison、Elon Musk、Ron Conway等)的交流讨论。

7. The web's clipboard, and how it stores data of different types (alexharri.com)

本文探讨了Web剪贴板如何存储和处理不同类型的数据,重点介绍了相关API的工作机制、历史限制以及开发者采用的解决方案。

剪贴板的基本工作原理

剪贴板能够存储多种类型的数据(如纯文本、富文本、图片、文件等),并通过MIME类型关联不同表示形式。W3C规范要求Web剪贴板API必须支持三种类型:text/plain(纯文本)、text/html(HTML)和image/png(PNG图像)。因此,粘贴到Google Docs等应用时可保留富文本格式,而粘贴到VS Code等编辑器时则只获取纯文本。

现代异步剪贴板API的限制

开发者可通过navigator.clipboard.read()navigator.clipboard.write()异步API读写剪贴板。然而,该API限制严格:只能写入上述三种MIME类型。例如,尝试写入application/json等自定义类型会抛出异常。此限制源于安全考虑,防止恶意脚本利用本地软件漏洞。

较老的剪贴板事件API的灵活性

更早的剪贴板事件API(ClipboardEventclipboardData)无类型限制,允许读写任意MIME类型,甚至自定义字符串。但它只能在用户代理触发的可信事件(如用户按Ctrl+C)中使用。合成事件(通过dispatchEvent创建)无法修改系统剪贴板。因此,该API适用于需要自定义数据类型的场景,但依赖用户主动触发操作。

开发者的变通方案

  • 使用document.execCommand("copy"):可编程地触发可信复制事件,允许在点击按钮时写入自定义类型(如Google Docs所示)。但Safari需要有效选区支持。
  • 在HTML中嵌入自定义数据:Figma将自定义二进制数据(.fig文件)编码为Base64后存入HTML的data-buffer属性。这样既利用了标准的text/html类型跨应用粘贴,又通过隐藏元素携带自定义数据。

浏览器与操作系统剪贴板的交互

各操作系统提供不同的原生剪贴板格式。当Web应用写入自定义MIME类型时,浏览器不会将其映射到通用OS格式,而是存储在浏览器专有格式中(如Chrome的org.chromium.web-custom-data)。这导致自定义数据只能在同一浏览器标签页间传递,无法跨应用使用。而标准类型(如HTML)可映射到OS通用格式,实现跨应用粘贴。

Web自定义格式(Pickling)提案

Chromium在2022年实现了“Web自定义格式”,允许在异步API中通过添加web 前缀写入自定义类型(如web application/json)。浏览器会将映射关系和原始数据写入OS剪贴板的专有条目(如org.w3.web-custom-format.type-0),供支持此规范的本地应用读取。这在安全性和功能性之间取得了平衡,但目前仅Chromium支持,且要求本地应用更新以兼容。

总结与展望

目前尚无跨浏览器完美支持自定义剪贴板数据类型的标准方案。开发者仍采用HTML嵌入等变通方法。Web自定义格式提案前景乐观,有望成为安全且实用的解决方案。浏览器对unsanitized选项的支持仍在发展中,允许获取未经消毒的原始数据(目前仅Chromium支持)。

8. Did your car witness a crime? (www.sfchronicle.com)

网站加载失败提示说明了页面无法正常显示的原因与解决方案。主要问题可能源于浏览器扩展程序、网络连接或浏览器设置。建议用户检查网络连接、禁用广告拦截器,或尝试使用其他浏览器访问。

9. Godot on iPad, Toolbars, Importers, Embedding, Debugger (blog.la-terminal.net)

Godot iPad 移植进展与 UI/UX 优化总结

项目背景与设计启发

本文记录了将 Godot 引擎移植到 iPad 的开发进展。开发者深受 Apple 专业应用(如 Final Cut Pro、Logic Pro 和 Xcode)的启发,致力于将 Godot 打造为优秀的“触控优先”应用,并对用户界面进行了全面重构。

属性编辑器与控件优化

  • 自定义输入控件:摒弃触发系统全键盘的传统文本框,采用类似 Final Cut Pro 的自定义滑块和数字输入弹窗,避免键盘遮挡屏幕。
  • 视觉与层级优化:精细调整字体大小、配色、元素分组与间距;支持嵌套属性编辑,允许“固定”子组,并在检查器中增加资源预览功能。

SwiftUI 嵌入与面板重构

  • 视图提取与控制:利用 Migeran 团队的补丁将 Godot 引擎嵌入 SwiftUI,提取并独立控制编辑器的顶部视图和底部标签页。
  • 输出面板与调试器:借鉴 Logic Pro,用显式拖拽手柄替代难以操作的原生分割线;借鉴 Xcode 重构调试器,折叠线程和堆栈帧选择器,实现变量与输出面板的并排切换显示。

工具栏与菜单的“iPad化”

  • 界面精简与重组:全面重构 3D 和 2D 编辑器的工具栏与菜单。将模态设置改为实时预览,合并视口选项以节省垂直空间,并弃用不易发现的“长按”交互。
  • 自定义与兼容性:支持加载脚本和扩展的自定义工具栏,对暂不支持的控件则回退到原生嵌入模式。
  • 流体界面交互:引入 Apple 的“流体界面”理念,允许用户将工具栏“滑动”至屏幕四角,防止遮挡工作区。

导入器重写

由于 Godot 原生导入器占用空间过大且不适配触屏,开发团队重写了场景导入器(Scene Importer)音频导入器(Audio Importer),使其完美适应 iPad 的屏幕尺寸与交互逻辑。

后续开发计划

  • 交互与功能完善:在底部栏引入小图标以控制面板的显示/隐藏,并开发专用的“场景切换器”以替代繁琐的直接文件选择。
  • 测试与发布:计划修复剩余 Bug,并于 9 月开启 TestFlight 公测。
  • 硬件支持:未来将深度集成 Apple Pencil 支持,进一步打磨触控交互体验。
10. Routed Gothic Font (webonastick.com)

字体概述
Routed Gothic 是一款复刻20世纪中期常见于技术图纸、雕刻办公室标牌、计算机/打字机键盘及部分漫画书和航空电子设备中的哥特式字体的实现。其设计体现了“丑陋即美”的实用主义美学。

创作背景
作者通过购买 Leroy Lettering 工具集,使用 Inkscape 扫描并描摹字形,再通过 FontForge 的 Python 脚本完成字体开发。相关搜索关键词包括“Wrico”。

技术特性

  • 斜体样式:斜体版本为严格的22.5度倾斜(如制图员所用),半斜体则为11.25度倾斜(见于少量历史图纸)。
  • 提示信息:因最初用于高分辨率打印项目,字体未包含提示信息,但未来可能补充。
  • 字符覆盖:支持全部 ASCII 字符、ISO Latin 1 字符、多数 Unicode 通用标点符号及更多符号。
  • 许可证:以 SIL 开源字体许可证 1.1 发布。

相关实现与变体

  • 基于该风格的其他字体:National Park、Planscribe NF、Sublime、Gorton 及 Gorton Digital(仅限非商业用途)。
  • 类似风格字体:Simpliciter Sans、Bryant、Gotham Rounded、Proxima Soft、DIN 17 SB、osifont、Engineering Plot、Engineer 等。
  • 航空仪表字体:美国军标 33558、Futura 及 ATF Spartan 等。

作者的其他字体

  • DSE Typewriter:复古打字机风格字体,可用于编程。
  • DSE Typewriter Bitmap:早期制作的 X Window 系统位图字体,与 DSE Typewriter 相似但略有差异。
11. Einstein's Other Theory of Everything (nautil.us)

爱因斯坦的另一套万物理论

爱因斯坦在1915年完成广义相对论后,继续追求一个更宏伟的目标:统一场理论。他希望证明所有物质、能量乃至我们自身,本质上都是时空的变形。然而,在尝试整合当时已知的引力和电磁力后,他最终未能成功。

核心理念

爱因斯坦认为,广义相对论将引力描述为时空的几何弯曲,这一思想可以推广。他设想一个仅由时空构成的宇宙,其中我们观测到的粒子(如电子)只是时空的特定几何结构或激发态。用他的话说,物质应被“解释”为时空的一部分。

研究历程与尝试

  1. 结合引力与电磁力(1919-1925)

    • 爱因斯坦从修改广义相对论场方程入手,试图将电磁场纳入其中,寻找能对应基本粒子的解。
    • 但结果不理想:理论上可形成的“质量”是任意的,而现实粒子具有特定质量。他在多篇论文中承认此路不通。
  2. 黑洞与虫洞的启示(1935)

    • 为消除广义相对论中黑洞的奇点(他认为奇点不合理),爱因斯坦与罗森提出“爱因斯坦-罗森桥”(即虫洞),并认为这种无奇点的结构可能代表基本粒子。
    • 计算表明,此类结构的理论尺寸远小于实际粒子(如中子)大小,且与量子不确定性不相容,因此该想法也被放弃。
  3. “远程平行”理论(1925年后)

    • 爱因斯坦转向另一种思路,认为物质性质由时空各点之间的关系决定,提出“远程平行”概念,这后来成为其统一场理论的主要框架。
    • 但该理论与后来发现的强、弱核力不相容,在爱因斯坦去世后逐渐被边缘化。

结局与思考

爱因斯坦的这一“另一套万物理论”——即物质即时空——在生前并未成功,也被后世大多数物理学家搁置。现代物理学的统一方向转向了弦理论、圈量子引力等,这些理论假设物质和时空都由更基本的实体构成。

然而,作者指出,爱因斯坦的原始思想并未完全消失,它在某些物理领域以“孤立子”等形式延续。尽管该理论存在不足(如与量子力学不协调、计算结果与现实不符),但其将物质完全几何化的构想仍具启发性。作者认为,不应完全遗忘爱因斯坦这一大胆而深刻的思考——即我们与宇宙或许真的只是弯曲时空的展现。

12. WatchYourLAN: Lightweight Network IP Scanner (github.com)

WatchYourLAN:轻量级网络IP扫描器

核心功能:

  • 网络IP扫描与主机发现,配备Web GUI界面。
  • 当发现新主机时发送通知。
  • 记录并监控主机的在线/离线历史状态。
  • 维护网络内所有主机的列表。
  • 支持将数据导出至 InfluxDB2 或 Prometheus,以便创建 Grafana 仪表盘。

快速部署 (Docker): 使用Docker命令启动,需设置网络接口、时区及数据存储路径,并必须使用--network="host"模式运行。

docker run --name wyl \
    -e "IFACES=$YOURIFACE" \
    -e "TZ=$YOURTIMEZONE" \
    --network="host" \
    -v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
    aceberg/watchyourlan

部署后可通过 http://localhost:8840 访问Web界面。

认证与安全:

  • 工具本身不提供内置认证,但可与 Authelia 等SSO工具或其配套应用 ForAuth 配合使用。
  • 重要提示: 由于使用host网络模式,服务端口将直接暴露,需通过防火墙等措施限制访问。

系统安装:

  • 提供适用于多种Linux发行版(如 .deb, .rpm, .apk)及多种CPU架构的二进制包。
  • 依赖项:arp-scan, tzdata

核心配置: 可通过环境变量、配置文件(config_v2.yaml)或GUI进行配置。关键配置项包括:

类别 变量 描述 默认值
基本设置 TZ 设置时区
HOST, PORT Web界面监听地址与端口 0.0.0.0:8840
SHOUTRRR_URL 用于发送通知的Shoutrrr服务URL(支持Discord、Telegram等多种渠道)
扫描设置 IFACES 要扫描的网络接口(支持多个,以空格分隔)
TIMEOUT 扫描间隔时间(秒) 120
ARP_ARGS arp-scan的额外参数
LOG_LEVEL 日志级别 (debug, info, warn, error) info
TRIM_HIST 自动删除历史记录的时间(小时) 48
数据存储 USE_DB 使用的数据库类型 (sqlitepostgres) sqlite
PG_CONNECT PostgreSQL连接地址(当USE_DB=postgres时需设置)
数据导出 INFLUX_ENABLE 启用InfluxDB2数据导出 false
INFLUX_ADDR InfluxDB2服务器的地址、桶、组织和令牌等配置
PROMETHEUS_ENABLE 启用Prometheus的/metrics端点 false

其他特性与选项:

  • 本地网络独立运行: 提供包含所有必要前端资源的独立Docker镜像(aceberg/node-bootstrap),可在无互联网环境下部署。
  • API与集成: 提供API文档,并支持与ArchLinux (AUR)、Umbrel、YunoHost等系统集成。
14. E Ink faces growing competition in the "paper-like" display space (liliputing.com)

E Ink 在“类纸”显示领域面临日益激烈的竞争

过去几十年,E Ink 主导了电子书阅读器等设备使用的类纸显示市场。其屏幕具有高对比度、室内外易读、无需背光、抗眩光且功耗极低的优势。但 E Ink 也存在明显短板:刷新率慢、色彩支持有限(且部分型号不支持彩色),且通常不适合视频或游戏等动态图像。因此,尽管有少数公司生产 E Ink 手机和平板,但它们多为小众产品。

目前,越来越多的公司开始推出采用反射式 LCD或类似技术的产品,旨在提供类似 E Ink 的类纸观感,同时更适合动画和视频显示。

反射式 LCD 屏幕同样没有背光,依靠反射环境光工作,在光线充足的环境下可直接使用。若要在昏暗环境中使用,则需要添加前光(这与大多数现代电子阅读器的做法类似)。然而,传统反射式 LCD 的屏幕在亮度和鲜艳度上通常不及如今主流的透射式 LCD(有背光)或 OLED 屏幕。

近年来,一些公司致力于研发更好的反射式屏幕,试图提供既能用于舒适阅读和书写、又能流畅支持动态图像和视频的 E Ink 替代方案。主要动态包括:

  1. Daylight Computer DC-1:备受关注的“Live Paper”显示屏,是一款黑白 IGZO LCD,具备 60 Hz 刷新率和琥珀色背光(可完全关闭)。该平板定位为功能超越普通电子阅读器的设备,拥有 10.5 英寸触控屏并支持 Wacom EMR 触控笔,运行定制版 Android。价格较高,达到 729 美元

  2. TCL NXTPAPER 显示技术:该技术已应用于多款智能手机和平板,提供全彩、无眩光的哑光显示屏。虽然技术细节不明确是否为反射式 LCD,但其在预算或中端设备上的应用获得了积极评价。例如,TCL NXTPAPER 10 5G 平板在 Verizon 的售价为 240 美元

  3. HannSpree ecoVISION Paper Display:这是较新的进入者,提供快速的全彩性能、高能效,并具备“真 8 位、无 FRC、无闪烁、低蓝光”特性以减轻眼疲劳。首款设备 HannsNote 2 本质上是一款 Android 平板,配备 10 英寸、1600x1200 像素(200 ppi)、60 Hz 的 ecoVISION 显示屏,支持 USI 2.0 手写笔。它搭载 Rockchip RK3566 处理器、4GB 内存、64GB 存储,预装 Android 13 及 Google Play 商店。值得注意的是,它不配备前光,仅适合在明亮环境光下使用。该设备在欧洲售价约为 315 欧元,目前在美国似乎未上市。

此外,HannSpree 已宣布计划推出搭载 ecoVISION 显示屏的下一代电子阅读器(运行 Android 14,提供 10 英寸或 7.8 英寸版本)以及其他产品,如 23.8 英寸显示器和最大 28 英寸的数字标牌显示屏。

15. Playstation 2 GS emulation – the final frontier of Vulkan compute emulation (themaister.net)

本文介绍了作者基于 Vulkan 计算着色器实现 PlayStation 2 图形合成器(GS)模拟的项目 paraLLEl-GS,这是继 N64 RDP 模拟(paraLLEl-RDP)后的又一力作。文章详细阐述了 PS2 GS 的技术挑战、实现思路及成果。

项目背景与动机

  • 作者在 2020 年成功用 Vulkan 计算着色器实现了 N64 RDP 的精确、高性能模拟(paraLLEl-RDP)。
  • PS2 GS 领域长期由 GSdx 的软件渲染器和图形 API 渲染器主导,但它们存在缺陷:软件渲染器不支持分辨率提升,图形 API 渲染器则在提升分辨率时存在大量错误和瑕疵。
  • 作者的主要动机是“因为能做”,并已有一个通用计算着色器光栅化项目可改造。项目由作者和同事 Runar Heyer 合作启动,后因调试难题一度搁置,近期得以完成。
  • 实现目标并非追求与硬件比特级精确,而是避免明显的准确性问题,并利用计算着色器的优势实现高性能和分辨率提升。

PS2 GS 的技术挑战

PS2 GS 设计独特,给模拟带来诸多困难:

  1. 极高的填充率与带宽:专为持续流式传输设计,显存仅 4MB。
  2. 古怪的像素管线
    • 混合和 Alpha 值可超过 1.0(0x80 视为 1.0,可达 0xFF)。
    • 支持目标 Alpha 测试、条件混合、Alpha 修正(位或操作)等非标准特性。
    • Alpha 测试可选择性丢弃(例如仅丢弃颜色,保留深度写入)。
    • 唯一的抗锯齿(AA1)与覆盖度到 Alpha 的转换相关,影响深度写入。
  3. D3D9 风格的光栅规则:像素中心位于整数坐标,三角形采用左上角光栅化。
  4. 纹理系统:支持复杂的纹理寻址模式(如 REGION_CLAMP, REGION_REPEAT),Mip 映射基于插值后的 Q 因子而非导数计算。
  5. 核心难题:缓存与反馈
    • 帧缓冲和纹理有专用缓存,游戏常滥用此特性实现反馈循环(渲染正在采样的像素)。
    • 这是性能的最大挑战,传统的基于图形 API 的方法难以高效处理。
    • TEXFLUSH 指令不可靠,不能完全依赖。

paraLLEl-GS 的实现方案

  1. 整体架构:基于计算着色器的瓦片式(Tile-Based)渲染器。
  2. 页面跟踪器:为解决缓存同步问题,将 4MB 显存划分为页面(Page),并细分为块(Block)。跟踪每个页面的读写状态、脏块位掩码,并利用 Vulkan 的 Timeline Semaphore 进行主机访问同步。此方法能处理大多数情况,但存在特殊案例(如未使用的纹理区域)需要妥协。
  3. 渲染管线:分为清晰的阶段:CPU 到 GPU 同步、显存上传、更新 CLUT 调色板缓存、显存到 VkImage 的解交错、渲染、GPU 到 CPU 回读。
  4. 三角形设置与分箱:使用重心坐标光栅器,支持三角形和宽线条/精灵的平行四边形光栅化。将图元分箱到瓦片中。
  5. Ubershader:与 N64 不同,PS2 的像素复杂度相对较低,适合使用单一的 Ubershader。着色器利用 精细分箱标量化 来优化,确保混合模式、Alpha 测试等状态切换在子组内是标量的,提升 GPU 效率。
  6. 超采样抗锯齿:这是相较于简单放大渲染的核心优势。项目实现了如 8x SSAA,为每个像素维护多个样本。通过 精灵图元强制单倍率渲染平面图元插值坐标捕捉 等技巧,有效避免了 UI 元素与 3D 物体分辨率不一致产生的伪影,且更利于 CRT 后处理。
  7. 反馈循环优化:通过分析纹理坐标与帧缓冲位置的关系,识别“像素级反馈”场景,此时纹理直接读取着色器内寄存器中的帧缓冲数据,避免了昂贵的缓存失效和屏障,极大提升了类似《合金装备2》等游戏的性能。

成果与对比

  • 画质提升:有效解决了 PCSX2 在分辨率提升时常见的伪影问题,如《最终幻想X》中的 UI 错误和《合金装备2》玻璃上的错位光晕。
  • 性能表现:在 RX 7600 等显卡上,即使在高强度场景(如《旺达与巨像》)中,使用 8x SSAA 也能保持可玩的帧率。在《合金装备2》等需要高混合精度的场景中,性能远超 PCSX2 的 Vulkan 后端。
  • 准确性:虽不追求比特级精确,但通过精心处理,避免了重大准确性问题,游戏体验良好。

现状与展望

  • 目前主要通过 GS dump 进行测试,需要进一步集成到模拟器中才能面向终端用户。
  • 承认仍有百万级潜在 bug,但已成为作者游玩 PS2 游戏的首选方式。
  • 项目作为独立库,也可能为怀旧 PS2 编程风格的开发者提供参考。
16. Postgres Webhooks with Pgstream (xata.io)

pgstream 实现 PostgreSQL Webhooks 功能

pgstream 是一个专注于 PostgreSQL 的 CDC(变更数据捕获)工具,能够在数据库发生数据或架构变更时调用 Webhooks。本文介绍了其 Webhooks 功能的设置和使用,包括高级特性如新旧值传输、TOAST 支持和架构变更支持。

准备工作

  • 需要一个启用逻辑复制并加载了 wal2json 输出插件的 PostgreSQL 实例。
  • 使用 pgstream 仓库中的 docker-compose 文件启动 Postgres 实例。
  • 创建一个测试表并安装 pgstream(可通过源码构建或使用预编译版本)。
  • 初始化 pgstream,创建 pgstream 架构及管理表。

配置与启动

  • 配置文件 pg2webhook.env 包含两个关键变量:
    • PGSTREAM_POSTGRES_LISTENER_URL:指定监听的数据库。
    • PGSTREAM_WEBHOOK_SUBSCRIPTION_STORE_URL:用于存储订阅配置的元数据库(可与监听数据库相同或不同)。
  • 启动 pgstream 监听器。

Webhooks 监听与订阅

  • 启动一个示例 Webhooks 监听服务器(如 webhook_server.go),在 localhost:9910/webhook 接收 JSON 负载。
  • 通过 API 创建订阅,指定目标表和事件类型(插入 I、更新 U、删除 D、截断 T),订阅信息存储在 pgstream.webhook_subscriptions 表中。
  • 可订阅特定表或整个架构的所有表。

数据变更事件演示

  • 插入(I):事件包含操作类型、日志序列号(LSN)、列名、类型、新值及列的唯一 ID。
  • 更新(U):事件包含旧主键值(在更新前),但默认不包含所有列的旧值。
  • 删除(D):事件包含行数据(基于副本标识设置)。

高级功能

  • 获取更新前后的值:将表的副本标识设置为 FULLALTER TABLE ... REPLICA IDENTITY FULL),更新事件将包含所有列的新旧值。
  • TOAST 支持:设置副本标识为 FULL 可包含大字段(TOAST 值),但需注意性能影响,值位于事件的 identity 部分。
  • 架构变更事件:pgstream 通过 DDL 事件触发器和 pgstream.schema_log 表捕获架构变更(如列添加、重命名),并生成 Webhook 事件,包含列名、类型、元数据(是否可空、唯一性、默认值)及不变的列 ID。

总结

pgstream 通过 Webhooks 实现了 PostgreSQL 数据变更和架构变更的实时通知,支持插入、更新、删除和架构修改事件。高级功能包括传输更新前后的值、处理 TOAST 大字段,以及捕获架构变更,适用于数据同步、审计和微服务通信等场景。详细文档和问题支持可参考 pgstream 仓库或 Discord 社区。

18. Taming the beast that is the Django ORM – An introduction (www.davidhang.com)

驯服Django ORM这头野兽 – 入门介绍

本文基于作者在coreplan.io的工作分享,旨在介绍Django ORM的核心概念、使用技巧与常见陷阱。

什么是ORM

ORM(对象关系映射器)是用于与数据库交互的SQL抽象层。它将代码映射为SQL查询,例如 Hole.objects.all() 会生成 SELECT * FROM drilling_hole;

使用ORM的利与弊

优点:

  • 提供SQL抽象,无需编写原始SQL。
  • 可移植性(理论上更容易更换数据库引擎)。
  • 实现数据库到模型的直接映射。
  • 自动生成模式和迁移。
  • 提供一定的安全性,降低SQL注入风险。

缺点:

  • 隐藏底层SQL,可能增加调试难度。
  • 延迟加载可能导致开发者未察觉的N+1查询问题。
  • 对新开发者的学习曲线。
  • 生成的SQL可能比精心编写的原始SQL性能更差。

核心概念

模型与迁移

模型对应数据库表。使用 python manage.py makemigrationspython manage.py migrate 命令生成并应用数据库迁移。

查询

  • QuerySet 是Django ORM的核心查询接口。它具有惰性(直到评估才执行查询)、可链式调用迭代缓存特性,但作者不建议依赖缓存,因为其行为难以预测。
  • WHERE子句 通过 filter() 方法实现,支持丰富的字段查找(如 __exact__contains__in__gt__isnull 等)。
  • 跨表查询 通过双下划线隐式实现。例如 Hole.objects.filter(pad__name="cheese board") 会生成包含 INNER JOIN 的SQL。
  • 注解 使用 annotate() 相当于SQL中的 AS 别名。
  • 子查询 可使用 SubqueryOuterRef 构建,包括关联子查询。

性能优化:减少N+1查询

N+1查询问题会产生不必要的通信开销。

  • select_related:用于一对一和多对一关系,在SQL查询层面进行JOIN,一次性获取关联数据。
  • prefetch_related:用于多对多和反向外键关系,在Python层面进行“预取”,为每个关系执行单独的查询,但结果被缓存以供主查询集使用。
    • 可嵌套使用 select_related 来优化预取的查询。
    • 使用 to_attr 参数可以将过滤后的关联集存储在模型实例的指定属性中。
  • 注意:跨多对多关系进行 filter() 查询可能会返回重复的实例,需要使用 .distinct() 去除重复。

其他重要特性与陷阱

  • 字段检索:默认情况下,获取模型实例会加载所有列。如果只需部分字段:
    • 使用 .values() 仅返回字典,无模型功能。
    • 使用 .only().defer() 返回模型实例但延迟加载未指定字段,但易引发N+1查询。
  • 查看生成的SQL:可通过 print(queryset.query)、Django Debug Toolbar 或 Kolo 工具查看。
  • 更新操作
    • instance.save():会触发模型的 save() 方法及Django信号。
    • Model.objects.filter().update()Model.objects.bulk_update():效率更高,但不会触发 save() 方法或相关的 pre_save/post_save 信号。
  • 分页与排序:使用 LIMITOFFSET 进行分页时,必须指定确定的排序(例如 order_by('name', 'id'),其中 id 作为唯一字段保证顺序确定性)。否则,返回的结果顺序可能不一致,可能导致测试不稳定等问题。
19. Client-side QR code generator with SVG output (fietkau.software)

项目概述

QRSVG 是一个小型 JavaScript 项目,旨在将二维位图(主要是 QR 码)渲染为由具有特定用途的 SVG 路径组成的 SVG 元素。

背景与目的

  • QR 码已成为通过实体媒介(如传单、海报或演示文稿)提供数字信息(最常见的是网址)的流行方式。
  • 尽管 QR 码生成并不复杂,且有许多免费网站可供使用,但作者发现这些工具通常缺乏其所需的全部自定义选项,且大多包含广告和数据追踪。
  • 因此,作者开发了 QRSVG 项目,结合 Project Nayuki 的 QR Code 生成库(一个开源库,可将文本转换为原始 QR 码数据)和自己的 QRSVG 库,实现高效、可定制的 SVG 输出。

核心功能与优势

  1. 高效 SVG 转换:将 QR 码数据转换为 SVG 标记,通过追踪连续形状的轮廓生成矢量描述。
  2. 高度可定制:支持对形状和颜色进行样式定制。
  3. 多种输出格式:生成的 QR 码可下载为 SVG 和 PNG 格式。
  4. 完全客户端运行:所有处理均在用户浏览器端完成,无需服务器;可托管为静态文件,降低了部署成本。

使用与演示

  • 文章顶部提供了一个演示页面,展示了 QRSVG 所支持的多种样式自定义选项。
  • 作者鼓励用户使用并传播这个方便的客户端 QR 码生成器演示。
20. A brief history of barbed wire fence telephone networks (loriemerson.net)

带刺铁丝网电话网络简史

一、带刺铁丝网的基础与历史

带刺铁丝网最初是作为廉价且具有威慑力的围栏材料出现,用于圈养牲畜或防范入侵者。其现代设计主要归功于1874年约瑟夫·格里登获得的美国专利,该设计随后成为主流。19世纪后期,带刺铁丝网价格大幅下降,极大地促进了美国西部的土地圈占和畜牧业规模化,但同时也引发了关于土地使用权、动物福利及原住民权益的争议。

二、电话网络的诞生背景

19世纪90年代,两个关键发展催生了带刺铁丝网电话网络:

  1. 带刺铁丝网的普及:价格低廉且在乡村地区广泛铺设。
  2. 电话专利垄断的瓦解:1893-1894年,亚历山大·格雷厄姆·贝尔的核心电话专利到期,导致大量独立电话公司涌现,它们生产可独立于贝尔电话系统使用的设备。

三、乡村通信的需求与解决方案

贝尔电话公司主要服务于城市,忽视了农村用户,且试图控制用户的通话行为(如限制闲聊)。独立电话公司则建议农民自行购买设备、建设线路并组建合作社。为克服社交隔离、获取紧急信息、天气预报和农作物价格,农民和牧场主开始利用无处不在的带刺铁丝网和电话机。

四、网络运作方式与特点

  • 基本构成:从住宅拉一根光滑导线(通常是铜线)连接到附近的带刺铁丝网围栏,再连接带电池的手摇电话机。
  • 无中心结构:没有中央交换局或接线员,无月租费。摇动电话手柄产生交流电流,使网络上所有电话机同时响铃
  • 个性化标识:每个家庭有自己的独特铃声组合(例如三长一短),但任何人都可以接听任何通话。
  • 社交与广播功能:通话免费,人们经常“挂在电话上”闲聊。网络也可用于向所有用户广播紧急信息。
  • 技术挑战与应对:导线传输音质很好,但天气常导致短路。居民使用皮革、玉米芯、牛角或玻璃瓶等日常物品作为绝缘体来修复。
  • 成本低廉:例如,科罗拉多州一条25英里的线路建造成本仅约10美元。

五、分布与影响

该网络在美国加州、德克萨斯、科罗拉多、蒙大拿等众多州以及加拿大部分地区均有报道。在农业合作社流行的地区(如蒙大拿州),这种合作社模式在20世纪20年代尤为繁荣。尽管缺乏正式记录,但根据轶事证据,这种网络一直被使用到1970年代甚至更晚。

六、现代重访:艺术项目

2015年,艺术家菲尔·彼得斯和大卫·鲁特在芝加哥画廊安装了“带刺铁丝网电话”艺术项目。随后,在科罗拉多大学波尔德分校,该项目在媒体考古实验室和媒体、传播与信息学院的支持下重新安装,于2024年8月完成,并进行了现场演示,将这一历史技术以当代艺术形式重现。

21. Seeing America by train (www.washingtonpost.com)

本文记录了作者乘火车横跨美国的夏季旅程。全程历时80小时,穿越11个州,总长3397英里,从加利福尼亚北部出发,途经沙漠、森林、山脉、河流、玉米田及大城市,最终抵达纽约市。

旅程分为两段:先乘坐美国国铁“加州和风号”从加州到芝加哥,再转乘“湖岸特快号”前往纽约。作者在“加州和风号”上预定了卧铺车厢,沿途在餐车与观察车厢中体验了丰富的社交互动,结识了包括退休夫妇、教师、传教士等多位乘客,并共享餐食。文章特别提到一位越南裔退休夫妇的故事,他们早年移民美国,经历艰辛后享受退休生活。

作者通过观察车窗风景和聆听车厢对话,感受到火车旅行的独特氛围。夜间行驶时,列车经过犹他州历史性的“金道钉”地点,作者也提及横贯大陆铁路的建设背景及其对原住民的影响。沿科罗拉多河行驶的景观令人印象深刻。

第二段旅程从芝加哥到纽约,作者乘坐普通座位,条件相对简朴,缺少观察车厢和专用餐车,与西段旅程形成对比。最终列车于傍晚抵达纽约宾夕法尼亚车站,作者结束了这次跨越东西海岸的火车之旅。

文章最后附有编辑团队信息及一条更正说明:原文误将经过州数记为12,实际应为11州。

22. Strange Attractors (2018) (www.dynamicmath.xyz)

Strange Attractors (2018) 文章摘要

奇怪吸引子概述

  • 定义:奇怪吸引子是动力系统中的一类吸引子,出现在非线性系统中,具有分形结构。与规则吸引子(如点、闭合环)不同,奇怪吸引子对初始条件微小变化高度敏感,导致系统行为混沌。
  • 起源:术语由 David Ruelle 和 Floris Takens 于1970年代初提出,用于描述流体湍流等现象。
  • 特点:具有自相似性、无限复杂的结构,且轨迹不会重复。

洛伦兹吸引子

  • 背景:由 Edward N. Lorenz 发现,源于大气数学模型(1963年)。
  • 模型描述:模拟从底部加热、顶部冷却的矩形空气层。状态由三个变量(x: 对流流动,y: 水平温度分布,z: 垂直温度分布)和三个参数(σ, ρ, β)描述。
  • 方程系统: [ \begin{cases} \frac{dx}{dt} = \sigma(-x + y) \ \frac{dy}{dt} = -xz + \rho x - y \ \frac{dz}{dt} = xy - \beta z \end{cases} ]
  • 经典参数:ρ=28, σ=10, β=8/3 时,轨迹形成标志性蝴蝶形状。
  • 实现工具:文章提供使用 GeoGebra 绘制洛伦兹吸引子的教程。

交互式模拟示例

文章提供了12种奇怪吸引子的交互式3D模拟,每个包含:

  • 吸引子名称(如Thomas、Langford/Aizawa、Dadras、Chen、Rössler等)。
  • 参数值(如Thomas的b=0.208186)。
  • 微分方程系统(三个耦合的一阶微分方程)。
  • 模拟链接:用户可调整参数观察粒子运动和解曲线行为。

技术实现细节

  • 3D环境:使用 p5.EasyCam 库(由Thomas Diewald开发)。
  • 界面控制:使用 dat.GUI 库。
  • 数值计算:粒子位置通过四阶 Runge-Kutta 方法计算。
  • 源代码:文章末尾提供代码链接。

应用与扩展

  • 奇怪吸引子可用于研究混沌、湍流等现象。
  • 模拟帮助直观理解动力系统对参数和初始条件的敏感性。

参考文献

文章列出了相关学术文献,涵盖洛伦兹、Rössler、Thomas等吸引子的研究背景,以及非线性动力学和混沌理论的著作。

23. Honey, I shrunk {fmt}: bringing binary size to 14k and ditching the C++ runtime (vitaut.net)

{fmt} 库二进制大小优化至 14KB 并脱离 C++ 运行时

核心优化策略

{fmt} 库通过多层次的类型擦除技术显著减少二进制膨胀:

  • 格式化参数通过类型擦除的 format_args 传递
  • 输出迭代器通过特制的 buffer API 实现类型擦除
  • 模板使用限制在最小顶层函数,减少实例化开销

示例代码 fmt::print("The answer is {}.", 42) 编译后仅约 0.3KB(与 printf 的 0.2KB 相近),同时保持完整的运行时类型安全。

优化历程与成果

1. 基线测试(2024年)

  • 最新版本 11.0.2 默认编译大小:75KB-Os -flto 优化后)
  • 相比 2020 年的约 57KB 有增长,主要因引入 Dragonbox 浮点算法

2. 逐步优化措施

禁用 locale 支持

  • 通过 FMT_STATIC_THOUSANDS_SEPARATOR 宏禁用
  • 大小降至:71KB

选择性编译内置类型支持

  • 设置 FMT_BUILTIN_TYPES=0,仅保留 int 特殊处理
  • 其他类型通过扩展 API 处理,实现“用不到的类型不付出代价”
  • 大小降至:31KB

彻底移除 locale 残余

  • 通过 FMT_USE_LOCALE=0 完全禁用
  • 大小降至:27KB

优化尺寸与速度权衡

  • 提供 FMT_OPTIMIZE_SIZE=1 宏,替换大型查找表为计算式实现
  • 示例:数字位数计算从 256 字节表改为循环计算
  • 大小降至:23KB

3. 完全脱离 C++ 运行时

  • 问题:依赖 std::bad_allocoperator new/delete 等 C++ 标准库组件
  • 解决方案:
    1. malloc/free 替代 new/delete 的自定义分配器
    2. 禁用异常(-fno-exceptions
    3. 使用 -nodefaultlibs -lc 链接选项
  • 最终大小:14KB
  • 依赖验证:仅依赖 libc.so.6,无 C++ 运行时依赖

关键技术细节

  1. 浮点格式化优化:使用 Dragonbox 算法,但占用较大空间(禁用后显著减小)
  2. 错误处理:格式化字符串错误可在编译时捕获,运行时错误通过异常处理(可配置为 abort()
  3. 扩展性:支持任意类型格式化,无需预先知道所有可格式化类型集合
  4. 兼容性:特别适合内存受限设备、嵌入式系统、复古计算平台(如 Amiga)

成果总结

通过一系列可配置的优化选项,{fmt} 库实现了:

  • 二进制大小从 75KB 减小到 14KB
  • 完全脱离 C++ 标准运行时依赖
  • 保持类型安全、格式化功能完整
  • 适用于资源受限环境,同时保持相对高效的性能
24. We've Got Depression All Wrong. It's Trying to Save Us (www.psychologytoday.com)

抑郁症的全新认知:一种旨在拯救我们的生物防御策略

核心观点:重新定义抑郁症

传统观念将抑郁症视为一种疾病或心理异常,但越来越多的跨学科研究(如生物人类学和神经科学)提出,抑郁症实际上是对逆境的适应性反应。它并非始于大脑的扭曲思维,而是身体检测到危险后启动的一种生物防御策略,旨在帮助人类在极端环境中生存。

生理机制:多迷走神经理论与“僵死”反应

根据多迷走神经理论(Polyvagal Theory),自主神经系统(ANS)会持续扫描环境中的危险。当ANS感到安全时,人会体验到幸福和社交联系;检测到威胁时,会触发“战斗或逃跑”反应(表现为焦虑)。然而,当威胁过于严重或持续过久,且个体无法战斗或逃离时,神经系统会启动最后的防御手段——“僵死”反应(Immobilization)

该反应由背侧迷走神经介导,会降低新陈代谢、钝化痛苦并使人产生解离感。在人类身上,这种长期的生理停滞状态表现为抑郁症的情感与认知症状,如绝望、无助以及身心无法运转。

生存价值与现代触发机制

抑郁症在极端逆境中具有明确的生存价值。例如,在遭受长期家庭暴力的案例中,抑郁症通过麻木反抗情绪、促使个体保持顺从,从而避免了更致命的伤害,帮助受害者“就地生存”。

在现代社会中,即使没有明显的生死威胁,长期的压力(如工作重压、持续的被评价感或环境噪音)也会在潜意识层面触发神经系统的威胁反应。当身体认为无法逃避这些现代压力时,同样会启动“僵死”反应。因此,抑郁症是身体试图保护我们的结果,而非性格软弱或认知扭曲。

认知转变与消除病耻感

将抑郁症视为非理性的痛苦会加深患者的病耻感,使他们觉得自己是“损坏的”。相反,认识到抑郁症是良好的生物系统为求生存而做出的勇敢努力,能够极大地减轻患者的羞耻感。抑郁症患者并非软弱的病人,而是勇敢的幸存者。这种认知转变有助于打破抑郁症带来的无助感。

康复途径:重建社交联系

如果抑郁症是“僵死”反应的情感表达,那么康复的关键在于走出这种防御状态。仅仅消除威胁是不够的,神经系统必须接收到强烈的安全信号才能恢复正常的社交状态。社交联系是实现这一目标的最佳途径。

将抑郁症污名化会加深患者的羞耻感,导致他们逃避社交,从而切断了康复的路径。因此,社会应当尊重抑郁症患者的勇气,认可人体生物系统的适应能力,停止将他们视为异类,并通过包容和连接帮助他们走出困境。

26. Ask HN: How to store and share passwords in a company?

文章讨论了在企业环境中如何高效且安全地存储、共享及管理密码,主要围绕以下实际问题:

  • 核心需求:IT工作中密码数量庞大,需要系统化的管理方法。
  • 具体场景
    • 新员工入职时如何快速获取所需密码。
    • 员工晋升后如何扩展密码访问权限。
    • 员工离职时如何安全地撤销权限,并仅更新敏感密码,同时通知相关访问者。
  • 寻求方案:询问最佳实践、80/20法则建议、易实施的方案(低垂果实),以及需要避免的陷阱。
27. Vizdom: Diagrams as Code (vizdom.dev)

Vizdom 是一款现代化的图表构建工具,它允许用户通过代码来创建、更新和可视化图表。该工具的核心理念是“图表即代码”,支持使用 TypeScript/Node.js 环境进行安装和使用(可通过 npm 安装 @vizdom/vizdom-ts-node)。此外,Vizdom 提供在线注册功能,用户可无缝同步其图表,从而实现便捷的访问与链接管理。

28. Massachusetts Bodged Transistor Authority (tris.fyi)

本文主要记录了作者意外获得一个从MBTA(马萨诸塞湾交通局)退役列车上拆下的“信号指示器”设备,并对其进行逆向工程与改造,最终将其成功用作汽车实时限速显示器的过程。

一、设备来源与背景 作者在波士顿一家商店购得一个沉重的金属箱,后得知其来自MBTA红线的列车。该设备外观包含一个速度表(带特定刻度LED)、一个“手动/自动列车操作”开关及制造商“通用铁路信号公司”的标签。基于其使用场景和MBTA在红、橙线运营自动列车操作系统的背景,作者推断这是一个驾驶室信号显示单元,用于向司机显示限速信息并操控ATO状态。

二、铁路信号系统与ATO原理简介

  1. 传统信号系统:通过将轨道划分为固定区段,并利用轨道电路检测列车是否占用,从而控制信号机显示(如“停止”或“行进”)来防止碰撞。
  2. 音频频率轨道电路:进阶系统,能通过轨道电路向列车发送包含信号信息的音频信号。
  3. 自动列车控制:在轨道电路信息基础上,结合列车当前速度,能自动施加制动以防超速。
  4. 自动列车操作:进一步允许列车自动控制速度(加速与减速),MBTA在红、橙线运营中采用了此技术。

三、设备拆解与逆向工程 作者拆解了设备,发现其主要由商用现货部件构成:

  • 圆形连接器:型号AMP 206151-1,用于连接列车系统。
  • 开关/按钮组件:伊顿公司581系列航空开关,含指示灯。
  • 速度表:实为横河电机制造、通用电气销售的50毫伏分流式直流电流表,其表盘和LED为定制改装。
  • 内部电路:基础印刷电路板,通过二极管和电阻网络路由信号,无处理器。

通过万用表通断测试,他们测绘了连接器引脚与电路板、各部件间的接线关系。修复过程中不慎损坏了速度表表盘,后将其粘合修复。

四、驱动与控制实现 为从微控制器(Arduino)驱动28V的指示灯与速度表,他们设计了晶体管开关电路,并使用SX1509 I/O扩展板增加输出端口。

  • 速度表驱动:通过Arduino的PWM引脚串联360欧电阻控制,需校准PWM值与车速的对应关系。
  • 控制协议:设计了一套简单的串口协议,支持开关特定指示灯、设置速度表指针位置、灯测试等功能。

五、集成应用:作为汽车限速显示器 受朋友启发,他们决定将该设备改造为实时显示道路限速的汽车速度表。

  1. 数据获取
    • 尝试通过ELM327蓝牙OBD2适配器从汽车获取实时车速,过程曲折,但最终成功。
    • 同时,作者编写程序从OpenStreetMap查询当前道路的限速信息(若已标注)。
  2. 系统整合:整个系统包括汽车、OBD2适配器、笔记本电脑(运行Python脚本查询限速并发送指令)、Arduino控制板以及MBTA信号指示器。笔记本电脑由车载逆变器供电。
  3. 测试与调试:经历了供电不稳、通信故障、GPS测速方案失败等问题后,他们最终解决了OBD2连接和软件控制问题,成功实现了在驾驶过程中,指示器根据实际道路限速显示相应指示的功能。

六、总结 该项目展示了对一件工业退役设备的探索、理解与创造性再利用。作者通过逆向工程理解了MBTA使用的铁路ATO信号技术,并成功将其核心显示单元集成到现代汽车环境中,实现了一个有趣的“科技混搭”应用。相关的系统图已发布在GitHub。

29. Show HN: Shehzadi in Peril – My first ever game (shehzadi.vercel.app)

《Shehzadi in Peril》游戏简介

本文展示了作者在 Hacker News (Show HN) 上发布的首款个人开发游戏《Shehzadi in Peril》。

核心信息

  • 游戏名称:Shehzadi in Peril
  • 开发背景:这是作者制作的第一款游戏(My first ever game)。
  • 游戏目标:玩家需要从蚂蚁的威胁中拯救角色“Shehzadi”。
  • 展示内容:文章提供了游戏的基本描述以及一张横幅宣传图(/banner.png),用于向公众展示和推介该游戏项目。
30. My fake job in Y2K preparedness (www.nplusonemag.com)

这篇文章以作者在1998年加入安达信会计师事务所参与Y2K(千年虫)项目的工作经历为主线,通过个人叙事揭示了这段经历中多层面的“虚假”本质。核心要点如下:

工作的虚假性

  • 作者名义上是安达信的分析师,实际雇用方是一家全球广告集团。安达信从哈佛等名校招聘,而作者毕业于不授予成绩的汉普郡学院,其职位源于知识工人短缺和宽松的招聘标准。
  • 安达信当时正因安然公司的欺诈性财务报表而陷入丑闻(最终倒闭),这为其工作增添了虚假色彩。
  • 他们试图解决的核心问题——Y2K千年虫危机——被证明是过度恐慌。尽管预言全球电脑会在2000年1月1日崩溃,但最终几乎未发生重大事故。

工作内容与氛围

  • 团队使用“管理咨询黑话”,如“最佳实践”,并将Y2K定义为“文档问题,而非技术问题”。
  • 工作主要是质量保证(QA):核对数据库中的错误(如将18台路由器误记为8台),并将所有记录复印、归档,以备未来法律问责。工作枯燥且脱离实际问题解决。
  • 办公室弥漫着末日氛围:有Y2K倒计时时钟、《2000年时间炸弹》等书籍,以及“经济学家预测基于Y2K的衰退”的文章。

人物与“流程”

  • 安达信顾问(如辛迪、迪克)与集团员工之间存在隔阂,顾问被视为“狼群”。
  • 一切工作遵循安达信专有的“流程”,但该流程模糊不清,从未明确界定。
  • 团队内部存在明显的等级制度和办公室政治。例如,作者从QA岗位被调至媒体团队,被视作“横向调动”而非真正晋升。
  • 一位维也纳分析师列尼因匿名质疑管理者而被列入“黑名单”。

讽刺与结局

  • 团队花费大量公司资金进行不必要的全球差旅,积累常飞里程和酒店积分。
  • 2000年到来时,仅出现了一些微不足道的故障(如新加坡的自动马桶无法冲水)。
  • 事后,Y2K的恐慌被迅速遗忘,反映出企业文化中对问题的回避和集体失忆。
  • 安达信最终因安然等丑闻倒闭,为这段“虚假工作”画上了讽刺的句号。

全文通过个人经历,以黑色幽默的笔调描绘了一场由恐慌、形式主义和公司政治驱动的“虚假危机”,以及其中个体荒诞而疏离的工作体验。

31. Athletes and musicians pursue virtuosity in fundamental skills (notes.andymatuschak.org)

文章总结

本文指出,与运动员和音乐家相比,知识工作者普遍缺乏对基本技能的系统性追求与训练。其核心观点如下:

1. 知识工作的现状与问题

  • 管理焦点错位:管理科学主要关注公司和经理层面,而非个体知识工作者的效率与技能提升。
  • 生产力难以衡量:我们尚不清楚如何有效测量知识工作者的生产力。
  • 学习方式临时:知识工作的核心实践常常是临时的、缺乏系统积累。
  • 记忆被忽视:人们通常忘记大部分读过的内容,且对此缺乏察觉。

2. 深入理解与记忆的障碍

  • 基本功至关重要:真正的深刻理解依赖于对基本知识的细致掌握。
  • 复杂性源于工作记忆限制:复杂概念难以学习,部分原因在于其构成要素超出了人的工作记忆容量。

3. 系统性学习的工具与方法

  • 间隔重复记忆系统:此系统效率极高,能将“记忆”变为一种主动选择,而非被动遗忘。通过引入Quantum Country等示例,文章展示了“助记媒介”如何以增加约35%-50%阅读时间为代价,换取对内容的长期详细记忆。
  • 改进笔记实践:普遍的笔记方法往往效果不佳。关键在于“更好的思考”,而非“更好的记笔记”。文章批判了脱离实际使用场景的笔记理论,并介绍了如Zettelkasten(卡片盒笔记法)等方法,其核心是撰写“永续笔记”以积累洞察力。
  • 工具协同:间隔重复系统不仅是记忆工具,更可用于编程注意力。它也能与“收件箱”式的信息管理结合,降低维护信息流时做出破坏性操作的风险(例如,使得“收件箱清零”策略不再那么脆弱和具有最终决定性)。

4. 文章的立场与目的

  • 本文呈现的是工作进行中的思考,旨在提出引人深思的问题,而非提供现成的解决方案。
  • 其目标是为读者揭示日常工作中背后的深层问题,并通过少数可能取得进展的示例,激发读者的兴趣与可能性感知。
32. Starliner crew reports hearing "sonar like noises" (twitter.com)

内容总结

提供的文本未包含与标题“星际客机(Starliner)机组人员报告听到‘类似声纳的噪音’”相关的实际文章内容。正文部分仅为一条网页加载错误提示,主要信息如下:

  • 错误原因:某些与隐私相关的浏览器扩展程序可能会导致 x.com 网站出现加载或显示问题。
  • 解决建议:提示用户禁用此类隐私扩展程序,然后重新尝试加载页面。
34. Percona Everest: open-source automated database provisioning and management (docs.percona.com)

Percona Everest:开源自动化数据库配置与管理平台

Percona Everest 是一个开源云原生数据库平台,旨在简化和自动化数据库的配置与管理。作为首个开源的此类平台,它支持多种数据库技术,并可部署在任何 Kubernetes 基础设施上,无论是云端还是本地环境。

核心特性与优势

  • 自动化私有数据库即服务 (DBaaS):帮助用户快速部署私有数据库服务,避免供应商锁定和复杂的内部平台开发。
  • 灵活性与兼容性:支持多数据库技术,提供跨云和本地环境的统一管理体验。
  • 安全与稳定性:平台设计中包含专门的安全功能,以确保托管数据库的安全性。
  • 全面的文档与支持:提供快速入门指南、故障排除部分和详细的 API 文档,帮助用户顺利上手和解决问题。

快速入门

用户可通过查阅官方文档快速部署和管理首个数据库集群,体验平台的自动化管理能力。

关键资源

  • 快速入门指南:引导用户完成初始设置和集群管理。
  • 安全指南:详细介绍平台的安全特性与配置。
  • 故障排除:提供常见问题的解决方案。
  • API 文档:支持通过 API 进行高级集成和管理操作。

Percona Everest 通过开源、自动化和云原生的方法,旨在降低数据库管理的复杂性,为企业提供灵活、可控的数据库解决方案。