2024-04-16

28 篇热帖

1. Descent 3 Source Code (github.com)

这是基于 GPL-3.0 许可协议开源的 Descent 3 引擎。该版本包含了由 Kevin Bentley 和 Jeff Slutter 编写的 '1.5' 补丁,并由 Descent 社区维护至稳定状态。

  • 使用前提:用户需自行准备游戏文件,具体安装细节请参阅 USAGE.md 文件。
  • 构建方式:游戏的构建指引位于 BUILD.md 文件中。
  • 问题报告:构建或运行时遇到的问题,请提交至项目的 GitHub 追踪器
  • 参与贡献:欢迎任何人参与贡献。项目拥有活跃的 Discord 社区 (Descent Developer Network)。代码补丁应通过 GitHub 提交。
2. Justice Department to file antitrust suit against Live Nation (www.wsj.com)
3. Embezzlers Are Nice People (2017) (www.stimmel-law.com)

《挪用公款者都是好人》文章摘要

核心观点

作者通过长期处理挪用公款案件的经验指出,大多数挪用公款者实际上非常聪明且能干。如果他们选择诚实工作,本可能获得更成功的职业生涯。他们挪用公款的主要原因是享受这个过程带来的刺激感、即时满足感以及智力优越感

典型案例:Eddie Chan

文章详细描述了作者与一位名叫Eddie Chan的挪用公款者共进午餐的经历。Eddie曾拥有加州著名的火烈鸟酒店,因挪用公款被起诉后资产尽失。在午餐中,Eddie表现出令人惊讶的毫不悔改态度

  • 他认为挪用的钱应该用于生活奢侈品而非必需品
  • 挪用公款是为了使生命旅程变得“优雅”
  • 他完全不认为自己有问题,甚至邀请作者参与新的商业项目
  • 他的逻辑是:“熟悉的骗子比陌生的骗子更好”——既然商业中本就需要制衡系统,那么与已知的骗子合作并无大碍

商业道德观对比

作者对比了两种商业观念:

  1. Eddie的观念:商业是一场战争,唯一规则是不被抓住;信任无人;金钱是唯一目标
  2. 作者的观念:商业不仅是赚钱,还包括创造价值的喜悦、成功的兴奋、团队合作的情谊等多重要素;商业虽有竞争但并非战争

同类行为模式

作者引用另一位客户的观察指出,Eddie这类人其实代表了商业世界中的一种常见心态:短期逐利、不择手段、认为“人人皆骗子”。不同的是,Eddie只是更“诚实”地表现出来,而更“聪明”的人则通过合法手段达到类似目的。

结论性观察

尽管Eddie因挪用公款失去一切,但他的葬礼仍有很多人参加——可能因为**“好人”形象正是他赖以生存的工具**。谁会把钱交给一个脾气坏的人呢?文章暗示,挪用公款者往往善于伪装,利用人们对“好人”的信任来实施犯罪。

4. A curious phenomenon called 'Etak' (maphappenings.com)

Etak导航系统:车载导航的革命性开端

产品定义与历史意义
Etak Navigator是1985年推出的全球首个实用车载导航系统,在GPS尚未民用的时代,彻底改变了人们的出行方式。其发布时间早于智能手机普及近20年,被媒体称为“来自未来”的技术。

核心技术突破

  1. 增强航位推测法(Augmented Dead Reckoning)
    在GPS不可用的背景下,Etak通过轮速传感器和电子罗盘计算位置,并创新性地引入地图匹配技术:当车辆转弯时,系统会将位置自动修正到电子地图的道路上,重置传感器累积误差。这一技术至今仍被导航应用沿用。

  2. 朝上移动地图显示(Heading-Up Moving Map)
    首创车辆固定于屏幕中心、地图随行驶旋转移动的界面设计,与驾驶员视野一致,提升操作直觉性。

  3. 地址搜索与地理编码(Geocoding)
    首次在消费级设备中实现目的地地址输入功能,支持街道、交叉路口搜索及常用地点存储。

系统组成与创新方案

  • 硬件架构:矢量CRT显示器、后窗电子罗盘、车轮磁性传感器、磁带存储装置(单盘容量仅3.5MB)及鞋盒大小的CPU主机。
  • 数据存储突破:为解决磁带随机访问效率低的问题,团队开发了二维地图数据的线性优化存储算法,大幅提升检索性能。
  • 热稳定性挑战:通过测试发现聚碳酸酯材质磁带可耐受车载高温环境。
  • 坡度补偿:工程师利用龙舌兰酒液体与电容传感器发明了坡度仪,校正上下坡带来的距离误差。
  • 磁干扰应对:针对桥梁等磁异常区域,系统切换至轮速差算法判断方向变化。

团队与创业背景

  • 由航海导航专家斯坦·霍尼(Stan Honey)与雅达利创始人诺兰·布什内尔(Nolan Bushnell)共同创立,灵感源于横跨太平洋的帆船导航实践。
  • 团队汇聚了来自SRI International等机构的顶尖工程师,地图数字化系统首创“抬头数字化”技术,生产效率达行业标准的三倍。

市场挑战与后续影响
因硬件成本高昂(当时售价1395美元,约合现在4000美元)且需专业安装,Etak转向技术授权模式,为博世、通用、歌乐等车载系统开发商提供核心导航方案,奠定了个人导航设备(PND)的技术基础。
公司先后被新闻集团、索尼收购,最终并入TomTom,其技术遗产延续至现代导航系统。

命名与设计遗产

  • “Etak”源自波利尼西亚航海术语,意为“移动的导航参考点”,体现了“车不动、地图移动”的界面哲学。
  • 通用车辆定位符号(如 🚗 的简化版)由Etak工程师为节省计算资源设计,受雅达利游戏《Asteroids》飞船图标启发,现已成为全球导航应用的标准标识。

历史地位总结
Etak在车载导航、地图匹配算法、人机交互界面、数字地图生产体系等领域树立了里程碑,其创新架构为现代位置服务奠定了基础,印证了“超前时代20年”的革命性价值。

5. T-Mobile employees across the country receive cash offers to illegally swap SIMs (tmo.report)

T-Mobile员工面临非法SIM卡更换贿赂

事件概述 美国各地的T-Mobile员工正收到短信,被承诺支付现金以换取执行非法的SIM卡更换操作。这类行为属于“SIM交换”欺诈,犯罪分子通过此手段窃取受害者手机号码的访问权,进而接收双重验证码,非法入侵其银行账户或加密货币钱包等在线账户。

贿赂详情与攻击方式

  • 短信内容直接向员工报价,每成功进行一次SIM卡更换可获得300美元报酬。
  • 短信要求员工通过Telegram联系发送者以完成交易。
  • 短信来源号码多样,涵盖不同区号,旨在规避屏蔽。

数据泄露来源疑云

  • 短信声称获取员工电话号码的渠道是“T-Mobile员工通讯录”,暗示员工目录数据可能已遭泄露。
  • 受影响者包括在职的公司员工和第三方零售商员工,甚至有已离职数月的前员工。这表明泄露的数据并非完全实时,但范围较广。
  • 此次事件可能与2023年9月T-Mobile第三方零售商Connectivity Source的数据泄露事件不同,因为本次涉及公司内部员工。但无法完全排除关联性。
  • T-Mobile官方否认其系统遭入侵,并表示正在调查,同时指出其他运营商也报告了类似情况。

对客户的潜在威胁与建议

  • 该事件表明,SIM交换诈骗对犯罪分子仍有吸引力,反映了电信公司在防护方面存在不足。
  • 如果有员工经不住诱惑接受贿赂,客户账户将直接面临被盗风险。
  • 客户自我保护措施
    1. 更改双重验证方式:为重要在线服务(尤其是银行、加密货币服务)启用基于身份验证器应用(如Google Authenticator、Authy)而非短信的双重验证。
    2. 启用SIM卡保护:在T-Mobile账户上开启额外的SIM卡更换安全锁(PIN码)。

结论 T-Mobile正面临内部员工被贿赂进行非法SIM卡更换的威胁。尽管公司否认系统被攻破,但员工联系信息的泄露源仍存疑。此事件再次凸显SIM交换诈骗的风险,客户应主动采取安全措施保护自身账户。

6. Loading a trillion rows of weather data into TimescaleDB (aliramadhan.me)

加载一万亿行天气数据到TimescaleDB

该文章页面已移动。如未自动重定向,请访问新链接 点击这里 以获取关于将大量天气数据加载到 TimescaleDB 的详细信息。

8. NPR suspends veteran editor as it grapples with his public criticism (www.npr.org)

NPR资深编辑因公开批评被停职事件概述

事件核心

NPR资深编辑乌里·柏林纳因撰写公开文章并接受播客采访,指控NPR因僵化的进步主义报道倾向而失去公众信任,被处以无薪停职五天的处分。

争议焦点

  1. 柏林纳的批评

    • 指控NPR在变性人权利、以色列-哈马斯战争、新冠疫情等议题报道中存在偏见。
    • 认为NPR过于追求员工多样性(种族、性别等),却忽视了观点多样性,导致受众流失。
    • 称曾向内部管理层反映问题,但未被采纳。
  2. 内部反应

    • 同事指责柏林纳“选择性引用”案例,违背信任原则,部分人拒绝继续与其合作。
    • 有员工认为其行为破坏新闻编辑室的信任基础。
    • 多名记者联名致信管理层,要求明确报道规范。
  3. 外部压力

    • 保守派人士(如克里斯托弗·鲁夫)翻出NPR新任CEO凯瑟琳·马希尔多年前的社交媒体言论(如批评特朗普为种族主义者),质疑其立场中立性。
    • 马希尔回应强调NPR独立性,并表示CEO不介入编辑决策。

NPR官方措施

  • 纪律处分:以“未经批准参与外部媒体活动”为由对柏林纳发出“最终警告”,威胁再犯将解雇。
  • 内部改革:宣布由执行编辑伊娃·罗德里格斯牵头,每月召开会议审查报道内容,评估是否涵盖种族、地域、政治观点等多维多样性。
  • 管理层表态:总编辑伊迪丝·查平称此举旨在促进“健康讨论”,回应内部对报道质量的关切。

事件影响

  • 暴露了NPR内部在新闻理念、信任机制及员工管理上的深层矛盾。
  • 引发公众对NPR中立性的质疑,尤其成为保守派批评的焦点。
  • 柏林纳表示支持员工多样性目标,但坚持认为NPR应同时保障观点多元性。

(注:总结基于原文事实,未添加个人评价或外部信息。)

9. BTFS: BitTorrent Filesystem (github.com)

BTFS:BitTorrent 文件系统

核心功能

BTFS 是一个用户空间文件系统,允许您将任何 .torrent 文件或磁力链接挂载到本地目录中。它使 BitTorrent 内容像普通只读文件夹一样可用。文件内容会根据应用程序的读取操作按需下载,无需预先下载整个种子。标准工具(如 lscatcp)和媒体播放器(如 VLC、mplayer)可以直接使用。

工作原理与用法

  1. 挂载:使用 btfs 命令将种子文件或磁力链接关联到一个本地目录(挂载点)。
  2. 访问:进入该挂载目录后,其中的内容(即种子中的文件)即可被系统访问。
  3. 使用示例
    $ mkdir mnt
    $ btfs video.torrent mnt
    $ cd mnt
    $ vlc video.mp4
    
  4. 卸载:使用 umount 命令卸载挂载点即可停止服务。

安装方法

BTFS 可通过多种方式在不同操作系统上安装。

通过包管理器安装(Linux)

  • Debian/Ubuntu:通常需要依赖 fuse3libtorrent(如 libtorrent-rasterbar8)和 libcurl
  • Arch Linux:可通过 pacman 安装。
  • Gentoo:通过 Portage 安装。
  • Fedora:使用 dnfrpm-ostree 安装(例如:rpm-ostree install fuse-btfs)。
  • OpenSUSE:通过 zypper 安装。

在 macOS 上安装

推荐使用 Homebrew:brew install btfs

从源码编译

适用于需要最新版本或包管理器不可用的情况。

  1. 安装依赖
    • Debian/Ubuntu 示例sudo apt-get install autoconf automake libfuse3-dev libtorrent-rasterbar-dev libcurl4-openssl-dev g++
    • macOS 示例:通过 Homebrew 安装 macfuselibtorrent-rasterbarautoconfautomakepkg-config
  2. 构建步骤
    $ git clone https://github.com/johang/btfs.git btfs
    $ cd btfs
    $ autoreconf -i
    $ ./configure
    $ make
    
  3. 可选安装:编译完成后,可选择使用 make install 进行系统安装。

关键依赖项(构建时)

  • FUSE3:用户空间文件系统支持。
  • libtorrent-rasterbar:BitTorrent 协议核心库。
  • libcurl:用于网络请求。
10. A Visual Guide to Vision Transformers (blog.mdturp.ch)

视觉Transformer(ViTs)的视觉指南总结

概述

Vision Transformers(ViTs)是应用于图像分类任务的深度学习模型,采用最初为自然语言处理(NLP)设计的transformer架构到图像数据。该指南以滚动故事形式,通过可视化和简单解释,展示了ViTs的工作原理和数据流动过程。

数据准备

  • 焦点单个数据点:以单张图像(批次大小为1)为例,忽略标签,专注于图像本身。
  • 创建图像patch:将图像分割为大小为p x p的等尺寸patch。
  • 展平patch:每个patch被展平为维度为p'= p² * c的向量(p为patch大小,c为通道数)。
  • Patch嵌入:通过线性变换将patch向量编码为固定大小d的嵌入向量,形成n x d的数组(n为patch数量)。
  • 添加分类token:在数组中追加一个可学习的分类token(cls token),用于训练。
  • 添加位置嵌入:为所有patch嵌入和分类token添加可学习的位置嵌入向量,以引入位置信息。
  • Transformer输入:最终输入数组大小为(n+1) x d。

Transformer内部过程

  • QKV创建:将输入嵌入向量线性变换为查询(Q)、键(K)和值(V)向量。
  • 注意力计算:计算注意力分数矩阵A,通过softmax函数归一化每行,使其和为1。
  • 聚合上下文信息:使用注意力分数加权V向量,得到每个patch的聚合上下文信息向量。
  • 多头注意力:重复上述过程(例如2个头),堆叠结果并映射回大小d。
  • 残差连接:将输入添加到注意力层输出,保持向量大小不变。
  • 前馈网络:通过带非线性激活函数的前馈神经网络处理输出。
  • 输出:transformer层输出大小与输入相同,整个过程可重复多次(如6次)。

分类与训练

  • 提取分类token输出:从transformer输出中识别分类token向量。
  • 预测概率:使用分类token通过全连接神经网络预测图像分类概率。
  • 训练方法:采用交叉熵损失函数比较预测概率与真实标签,通过反向传播和梯度下降更新模型参数。

总结

该指南逐步解释了ViTs从图像patch化、嵌入、transformer处理到最终分类的完整流程,突出了其关键组件如位置嵌入、多头注意力和残差连接。ViTs通过监督学习训练,已在图像分类任务中实现最先进性能。

11. HonoJS: Small, simple, and ultrafast web framework for the Edges (github.com)

HonoJS:面向边缘网络的轻量、简单且超快的Web框架

Hono(日语中意为“火焰🔥”)是一个基于 Web标准 构建的轻量、简单且超快的Web框架。它能在任何JavaScript运行时上运行,包括 Cloudflare Workers、Fastly Compute、Deno、Bun、Vercel、AWS Lambda、Lambda@Edge 和 Node.js。

核心特点

  • 超快 (🚀):其路由器 RegExpRouter 速度极快,不使用线性循环。
  • 轻量 (🪶):预设 hono/tiny 体积不到 12kB。框架零依赖,仅使用Web标准API。
  • 多运行时支持 (🌍):同一套代码可在上述所有平台上运行。
  • 功能齐全 (🔋):内置中间件、支持自定义中间件和第三方中间件。
  • 卓越的开发体验 (😃):拥有极其简洁的API和一流的TypeScript支持。

快速上手

示例代码展示了如何创建一个简单的应用:

import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hono!'))
export default app

文档与资源

  • 官方文档:hono.dev
  • 迁移指南:docs/MIGRATION.md
  • 社区交流:通过 X 和 Discord 频道。

贡献

项目欢迎各种形式的贡献,包括:创建Issue(提出新功能或报告错误)、提交PR(修复错误、拼写或重构代码)、创建第三方中间件、分享使用心得以及实际应用框架。

项目信息

  • 作者: Yusuke Wada。路由器(RegExpRouter, SmartRouter, LinearRouter, PatternRouter)由 Taku Amano 创建。
  • 许可证: MIT 许可证。
12. A framework to help B2B founders find product-market fit (pmf.firstround.com)

本文提出了一个系统化框架,帮助销售驱动的B2B创业公司提高找到产品市场契合度的概率,核心是将PMF分解为可操作的层级和维度。

核心框架:四层级与三维度

  • 四层级PMF:将产品市场契合度分为四个递进阶段,强调其非二元状态,而是一个逐步实现可重复性的过程。
    1. 初始期:目标是解决3-5个客户的紧迫问题,重点是产品满意度,但客户获取不可重复。
    2. 发展期:拥有约20个客户,达到首个100万美元ARR,开始看到可扩展需求渠道的迹象,但需努力维持增长。
    3. 强PMF:需求“水闸打开”,需求主要靠内部引流,公司能持续、高效地交付产品,毛利率和NRR等效率指标成为关键。
    4. 极端PMF:终极目标,具备高度可重复的客户获取和交付能力,品牌成为品类代名词,公司可开始探索多产品和TAM扩张。
  • 三维度PMF:从三个相互关联的维度评估状态,需在不同阶段进行权衡。
    1. 满意度:客户对产品的依赖程度和留存率。
    2. 需求:产品的市场吸引力和销售表现。
    3. 效率:可重复且经济地获取、服务客户的能力(如CAC、毛利率、NRR)。

调整杠杆与应用

  • 当公司卡在某个层级时,可通过调整四个杠杆来突破:
    • 用户画像:调整目标客户类型。
    • 问题:更换要解决的痛点。
    • 承诺:改变价值主张的表述方式。
    • 产品:调整解决方案本身。
  • 框架通过虚构公司案例(如Ledgerly、Hire Hero等)和真实公司数据(如Looker、Lattice、Plaid等)进行实证说明。

总结与目标 该框架旨在为B2B创始人提供一个共同的诊断语言和清晰的进阶路线图,通过明确定义PMF的层级、维度和调整工具,帮助创始人更精准地定位现状、识别短板并采取针对性行动,从而减少对运气的依赖,系统性地走向极端产品市场契合。

15. LCD displays still don't match the responsiveness of clunky CRT screens (2019) (www.vice.com)
17. Google Common Lisp Style Guide (google.github.io)

Google Common Lisp 编程风格指南摘要

核心原则与重要性

  • 目标:使代码对其他开发者易于理解,促进协作与维护。
  • 遵循约定:必须遵守约定。它们对于可读性至关重要;违反约定应表示值得注意的情况。
  • 逐步修复:在日常工作中遇到旧代码违规时,应进行修复,但避免未经协调的大规模更改。

基本原则与优先级

  • 基本理念:代码应易于他人理解(“被卡车撞”原则),所有人的代码风格应一致,力求精确、简洁,遵循 KISS 原则,使用最合适的工具,并保持相关代码在一起。
  • 代码质量优先级:1. 客户可用性;2. 可调试性/可测试性;3. 可读性/可理解性;4. 可扩展性/可修改性;5. 效率。
  • 优化原则:避免过早优化。仅在性能分析表明存在瓶颈且代码执行频繁时才进行优化。

命名规范

  • 通用:使用小写字母,用连字符 - 分隔单词,避免在符号中使用 /.
  • 全局常量:以 + 开始和结束(如 +constant-name+)。
  • 全局变量:以 * 开始和结束(如 *variable-name*)。
  • 谓词:布尔值函数和变量以 P 结尾(如 emptyp)或 -p(如 list-empty-p),取决于名称长度。
  • 包前缀:符号名称中不应包含包名作为前缀。
  • 变量意图:根据变量所代表的高级概念命名,而非其底层实现细节(避免嵌入 listarray 等类型名,除非编写通用算法)。

格式与排版

  • 行长度:每行不超过 100 个字符。
  • 缩进:按照配置正确的 GNU Emacs 进行缩进(通常使用 cl-indentSLIME),并保持项目内一致。使用空格缩进,禁止使用制表符
  • 空格与括号:括号周围不加额外空格,右括号不应单独成行。表单之间通常使用一个空格。
  • 对齐:如果嵌套表单跨越多行,应正确对齐。
  • 垂直留白:顶级表单之间通常使用一个空行。用于分离复杂函数内部的部分。

文档与注释

  • 文档字符串:所有公开的函数、类型、类、变量和宏都应提供文档字符串,解释其用途、参数、返回值和可能信号的条件。
  • 注释
    • 注释应解释代码的“为什么”和复杂部分。
    • 使用适当数量的分号:;;;; 用于文件头部和大段注释;;;; 用于顶级表单或小组注释;;; 用于行间注释;; 用于行尾附注。
    • TODO 注释:必须使用 TODO(责任人) 格式来标记需要关注的代码(如待办、问题、危险)。
  • 拼写:注释和标识符中必须使用正确的拼写。在多个正确拼写中,选择更短的。

编程实践

  • 函数式风格:优先使用函数式(无副作用)编程。避免不必要地修改局部变量,优先重新绑定。使类尽可能不可变。
  • 迭代优于递归:由于并非所有实现都保证正确的尾调用优化,应优先使用迭代或内置映射函数。
  • 特殊变量:谨慎使用动态绑定的特殊变量(如 *var*),它们会增加状态复杂性。适用于表示“当前”上下文的单例概念。
  • 断言与条件
    • ASSERT 仅用于检测内部错误(不变量被破坏)。
    • CHECK-TYPE 优于类型声明,用于检查函数输入。
    • 使用 ERROR(带明确条件类型)报告用户数据问题或异常结果。
    • 避免使用 SIGNALWARN(在服务器中)、THROW/CATCH
    • 通常避免处理所有条件(如 T),应让未处理条件传播。
  • CLOS 使用
    • 公开的泛型函数应有显式 DEFGENERIC 和文档字符串。
    • 避免使用 SLOT-VALUEWITH-SLOTS,优先使用访问器。
    • 除非存在概念上的“协议”,否则不要使用泛型函数进行“重载”。
    • 避免在运行时使用 MOP “介入”操作。
  • 宏的使用
    • 宏用于语法抽象,但应谨慎定义,优先使用现有宏。
    • 优先使用函数而非宏(除非确实需要语法变换)。
    • 建议采用 CALL-WITH 风格:宏仅处理语法,将语义委托给辅助函数。
    • 避免不必要的 EVAL 使用。

数据结构与操作

  • 列表滥用:避免不当地使用内置列表(单链表)。仅在顺序遍历或列表已知很短时使用。应根据需求使用数组、哈希表或其他库提供的合适数据结构。
  • 产品类型:使用 DEFSTRUCTDEFCLASS 来表示包含多个异构值的对象,而非列表。
  • 函数引用:优先使用 #'function 而非 'function 来引用函数对象。
  • 路径名:路径名处理复杂,应尽可能使用 UIOP 库以实现可移植性和正确性。
  • SATISFIES 子句:谨慎使用。指定的函数必须接受任何类型的参数,并应在 EVAL-WHEN 中定义。

开发流程

  • 代码审查:所有代码更改必须经过审查。
  • 测试:必须为新增代码和修复的缺陷编写并提交测试。
  • 编译:代码必须编译无错误和警告(必要时可静默不相关的警告)。
  • 版本控制:所有代码应存入合适的源代码控制系统,确保可重现性。
  • 开放源码:鼓励将通用代码作为独立库开源。

这份指南旨在通过严格的风格约定和实用建议,确保 Google 内部 Common Lisp 代码库的长期可维护性和协作效率。

18. Object that slammed into Florida home was space junk for ISS, NASA confirms (www.space.com)

NASA确认,上月砸穿佛罗里达州一栋房屋屋顶的神秘物体确实来自国际空间站。该物体是一个金属支架,源自2021年3月国际空间站抛弃的一个载有旧电池的货盘。

事件经过:3月8日,一个圆柱形物体坠入佛罗里达州那不勒斯市的一栋住宅。屋主亚历杭德罗·奥特罗最初推测其为国际空间站抛弃的电池货盘部件。NASA随后在肯尼迪航天中心进行分析后确认,该碎片是用于将电池固定在货盘上的飞行支撑设备支架。该支架由英科耐尔合金制成,高10厘米,宽4厘米,重0.7公斤。

来源与背景:2021年3月,国际空间站为升级电源系统,在用新的锂离子电池替换旧电池后,抛弃了重约2630公斤的旧镍氢电池及货盘。当时预计该货盘和电池会在地球大气层中完全烧毁。

调查与后续:NASA表示将对此事进行详细调查,分析抛弃和再入过程,以查明碎片幸存并到达地面的原因,并据此更新相关的工程模型和分析。这些模型用于预测物体在大气再入时的加热和解体情况,当发现有碎片幸存至地面时,模型会定期更新。

太空垃圾问题:此事件凸显了轨道上存在的庞大太空垃圾问题。据欧洲航天局数据,地球轨道上至少有36500个尺寸大于10厘米的碎片,以及约1.3亿个尺寸大于1毫米的微小物体。它们以极高速度(例如在国际空间站平均轨道高度上约每小时27400公里)运行,对卫星等资产构成威胁,并且不时有物体坠回地球。

影响:户主奥特罗表示期待与相关机构沟通,以解决此次损害问题,并呼吁未来改进载荷安排,确保其再入时能完全烧毁。NASA的分析结果可能对该机构和户主产生财务方面的影响。

20. Only <SPAN>s (onlyspans.net)
# 文章摘要:仅使用 SPAN 元素的页面实现

本文展示了一个完全由 `<span>` 元素构建的页面,无需动态添加其他元素,通过内联样式和事件处理实现多种功能。

## 核心特性

### 1. 基础样式
- 通过 `style` 属性直接应用样式,如 `font-weight: 700`(粗体)和 `font-style: italic`(斜体)。
- 删除线等效果通过 `text-decoration: line-through` 实现。

### 2. 换行处理
- 默认情况下,HTML 中的换行符被视为空格,不会自动换行。
- 使用 `white-space: pre-wrap` 样式后,换行符会生效并强制换行。

### 3. CSS 表格布局
- 利用 CSS 3 的 `display` 属性值(`table`、`table-row`、`table-cell`),可以用 SPAN 模拟表格结构。
- 注意:此方法不支持合并单元格(如 `colspan` 或 `rowspan`)。

### 4. 图片集成
- 通过 `background-image` 内联样式添加背景图。
- 需设置 `width`、`height` 和 `display: inline-block` 以确保正确显示。

### 5. 动态交互
- **点击事件**:使用 `onclick` 内联事件处理程序,例如实现点击计数器。
- **页面初始化**:SPAN 元素不支持 `load` 事件,因此通过 `contenteditable` 和 `autofocus` 属性,在元素获得焦点时触发初始化逻辑(如模拟双击事件)。
- **定时更新**:在 `ondblclick` 事件中设置 `setInterval`,例如实时更新当前时间。

### 6. 模拟 CSS 类
- 在初始化处理程序中,通过遍历所有 SPAN 元素并检查 `classList`,手动应用样式(如为特定类的元素设置等宽字体和隐藏)。

### 7. 数据获取
- 在事件处理程序中使用 `fetch` API 获取外部文本文件并更新元素内容,例如显示 SheetJS 版本号。

### 8. 可编辑内容
- 使用 `contenteditable` 属性使 SPAN 可编辑,并通过 `oninput` 事件响应内容变化,实现元素间的动态同步(例如输入格式代码后自动计算格式化文本)。

### 9. 外部脚本
- 通过 `fetch` 加载外部 JavaScript 库,并使用 `eval` 执行,从而在页面中利用库的功能(如 SheetJS SSF 库进行数字格式化)。

## 技术要点
- 所有功能均通过内联样式和内联事件处理程序实现,无需显式 `<script>` 标签。
- 利用 `contenteditable` 和 `autofocus` 模拟页面加载事件。
- 通过事件对象(如 `event.target`)动态引用和操作 DOM 元素。

## 应用场景
本文演示了在严格限制于单个 HTML 元素类型(SPAN)的情况下,如何通过 CSS 和 JavaScript 实现丰富的页面功能和交互,展示了前端开发的灵活性和创意空间。
21. Show HN: Render audio waveforms to HTML canvas using WebGPU
22. Distributed Authorization (www.osohq.com)

分布式授权:Oso的Local Authorization解决方案

核心问题:传统授权即服务的负担

传统授权即服务(Authorization as a Service)方案需要将大量应用数据同步到授权服务中,这实际上增加了开发者的负担,而非简化授权流程。Oso旨在通过Local Authorization解决这一问题,实现授权决策在授权服务与应用客户端之间的分布式执行,避免全量数据同步。

授权方案的演进历程

1. DIY授权(早期应用)

  • 初期可行:在简单应用中,授权逻辑(如角色检查)与应用代码、数据库紧密结合。
  • 复杂性增长:随着功能增加(如角色继承、自定义角色、跨资源授权),授权逻辑变得复杂且难以维护。

2. 策略即代码(Polar)

  • 分离逻辑与代码:引入Polar声明式领域特定语言(DSL),将授权逻辑从应用代码中解耦,使策略显式化、易于管理和理解。

3. Oso库(单体应用)

  • 优势:开源、直接操作应用数据、紧密集成。
  • 局限:依赖外部函数接口(FFI)、缺乏标准化数据模型、仅适用于单体应用。

4. Oso Cloud(微服务授权)

  • 设计目标:解决微服务环境中的授权问题,提供集中式服务。
  • 核心概念:使用“事实”(facts)作为标准化数据模型。
  • 新问题:仍需将所有授权数据同步到云服务,带来数据加载、同步和一致性管理的挑战。

Local Authorization:分布式授权的突破

核心思想

  • 分布式决策:授权服务评估已知部分并返回条件判断,客户端使用本地数据评估剩余条件。
  • 避免数据同步:仅同步必要的逻辑和共性数据(如角色),应用数据保留在本地。

关键优势

  1. 显式授权逻辑:结合策略即代码的优点,授权逻辑清晰可管理。
  2. 减少数据传输:无需全量同步应用数据,降低复杂性和开销。
  3. 高效列表过滤:生成授权资源列表时,服务端返回查询过滤器,客户端在本地数据库执行查询,支持排序和分页。

实际应用与展望

  • 列表过滤优化:避免返回大量资源ID,直接生成本地可执行的过滤器。
  • 行业认可:Jasper.ai等公司因Oso的分布式架构和可靠性选择该方案。
  • 持续改进:未来将增强Polar语言、优化云服务数据同步,并为单体应用引入Local Authorization能力。

通过Local Authorization,Oso实现了授权逻辑集中化与数据分布化的平衡,使授权服务真正融入应用架构,而非强制应用适应服务。

23. Web-based Turbo Pascal compiler (github.com)

基于Web的Turbo Pascal编译器摘要

这是一个在Web浏览器中运行的Turbo Pascal编译器,实现了Turbo Pascal 5.5的子集功能。项目允许用户在浏览器环境中编写和执行Pascal代码。

项目概述

  • 目的:提供一个可在浏览器中运行的Pascal编译器,支持Turbo Pascal 5.5的部分语法特性。
  • 在线演示:可通过项目提供的链接直接体验。
  • 本地运行:克隆仓库后运行"GO"脚本启动本地Web服务器,访问http://localhost:8000即可使用。
  • 单元测试:通过http://localhost:8000/unit.html运行测试。

技术实现

项目主要使用JavaScript编写(占82%),辅以Pascal示例代码(12.3%)、HTML(5.1%)和CSS(0.6%)。核心组件包括:

  • 编译器核心Compiler.jsLexer.jsParser.jsSymbolTable.js等模块构成完整的编译流程。
  • 运行时支持Machine.jsScreen.jsKeyboard.js等模块模拟运行时环境。
  • 集成开发环境IDE.js提供基本的编辑界面。
  • 示例程序:包含多个.PAS示例文件,如HELLO.PASTEST.PAS等。

项目结构

  • 源代码目录:包含编译器、运行时、UI等各类JavaScript模块。
  • 示例文件:多个Pascal示例演示了编译器支持的功能。
  • 资源文件:包括字体文件、许可证等。

许可证

项目采用BSD 2-Clause开源许可证。

数据统计

  • 获得489个星标,52个复刻,30个关注者。
  • 无正式发布版本。
  • 由三位贡献者参与开发。
24. Phone conversations with law enforcement can be recorded without their consent (www.orlandoweekly.com)

佛罗里达州上诉法院做出一项关键裁定,允许公民秘密记录与执法官员的公务电话通话,因为执法官员在执行公务时没有合理的隐私期待。这一判决源于公民Michael Leroy Waite与Citrus County Sheriff's Office之间长期的财产纠纷。

案件背景

  • Waite自2018年起与警长办公室因土地使用权发生争执,冲突包括警员持枪进入其私有财产、拆除“禁止擅入”标志等。
  • 2021年,Waite因怀疑警员擅闯其土地拨打911投诉,并随后接到警长办公室警官回电。Waite在未告知对方的情况下录下了这通时长约3分钟的公务电话,随后将录音发送给警长办公室要求内部调查。
  • 随后,Waite被指控五项非法窃听罪名。

法院裁决

  • 第五地区上诉法院推翻了初审法院对Waite的五项窃听罪定罪,认为警员在执勤期间、使用工作电话进行公务通话时,未表现出“社会愿意承认的合理隐私期待”。
  • 法院明确指出,该裁决仅限于“公务通话”的情形(涉及公务事务、执勤期间、使用工作电话),但未明确是否适用于其他政府雇员的公务通话。

案件中的其他指控

  • Waite还因涉嫌在被捕时用肘部击打警官被定罪(殴打执法人员、暴力拒捕),法院未推翻这些指控。Waite最终被判处两年缓刑,此前面临最高25年监禁。

社会与法律背景

  • 该判决被视为加强公民对执法官员问责机制的一部分。
  • 同日,州长签署了两项影响执法的新法律:一项禁止公民在警告后仍意图干扰、威胁或骚扰急救人员时进入其25英尺范围内;另一项要求公民监督委员会成员由警长或警察局长任命,且至少包含一名退休执法人员。

双方立场

  • Waite认为该裁决具有开创性,将帮助公众监督执法行为,防止官员不当行为。
  • 警长办公室拒绝对此事发表评论。
  • 法院在裁决中强调,其并未对警长办公室是否存在不当行为做出判断,仅指出Waite对情况的“感知”。

该裁决可能对佛罗里达州公民记录执法官员公务通话的权利产生重要影响,但其适用范围仍待进一步明确。

25. The legal rule that computers are presumed to be operating correctly (2022) [pdf] (www.benthamsgaze.org)

英国法律中计算机证据可靠性推定的简报:意外与不公的后果

核心问题

在英格兰和威尔士的法律中,存在一个可反驳的推定:法院默认计算机在相关时间运行正常,因此计算机产生的证据被视为可靠,除非有相反证据。这一规则对质疑计算机系统证据的一方构成了巨大挑战,尤其是当系统由大型机构运营时。

邮局Horizon丑闻:典型案例

  • 背景:从1999年起,英国邮局基于Horizon计算机系统的账目短缺证据,起诉了数百名邮政局长和员工盗窃和欺诈。
  • 后果:数百人因此被定罪、监禁、罚款或财产被没收。这证明了法律委员会声称“该制度会公平运作”的论断存在缺陷。
  • 转折:2019年,法官在集体诉讼(Bates v The Post Office Ltd)中裁定,Horizon系统的软件错误可能导致账目表面短缺,而非盗窃或欺诈。
  • 结果:刑事案件审查委员会前所未有地将大量基于Horizon账目短缺的定罪案件移交上诉法院。截至撰文时,超过70项定罪已被推翻,这很可能成为英国历史上最大的冤案之一。

法律推定的演变与问题

  1. 历史:1984年《警察与刑事证据法》第69条要求检方证明计算机在相关时间运行正常,方可采纳其产生的证据。随着电子证据增多,此要求被认为繁琐不便。
  2. 变更:1997年,法律委员会建议废除第69条,并引入推定:“在无相反证据的情况下,法院推定机械设备(包括计算机)在相关时间运行正常。” 该建议于1999年通过法律修正案生效。
  3. 设计初衷:推定旨在减轻证明负担,节省证明“显而易见之事”的时间和成本,并假定质疑方能够提供证据反驳。
  4. 实践缺陷
    • 不公平:实际操作中,该推定被证明是不公正的,导致了邮局等冤案。
    • 误解故障本质:该推定暴露了法律界对计算机故障(尤其是软件缺陷)本质的普遍误解。硬件可能正常,但软件缺陷(Bug)可能难以发现、表现为正常行为,并导致意想不到的严重后果。
    • 反驳困难:质疑方通常缺乏系统知识、无法获取内部记录,难以发现并证明潜在缺陷的存在,导致反驳在实践中几乎不可能。
    • 二元思维的误导:法律要求对“计算机是否正常运行”给出是或否的二元答案,而现实要复杂得多,所有计算机系统都存在失败的可能性。

改革提案

作者提议用两阶段审查流程取代现有的可靠性推定,当计算机证据的可靠性受到合理质疑且对案件裁决至关重要时适用:

  1. 第一阶段:要求依赖计算机证据的一方进行合理、相称的文件搜索和披露,内容包括:

    • 已知错误和缺陷的记录及其影响、应对措施。
    • 信息安全管理标准和流程的描述。
    • 系统及管理审计报告。
    • 错误报告管理和系统变更控制的证据。
    • 证明文件搜索充分、由具备适当权限和知识的人员执行的证据。
    • 确保所呈证据未被篡改的合理步骤证明。
  2. 第二阶段:若第一阶段披露的信息表明系统管理可能不当、缺陷数量过多足以质疑系统可靠性,或发现具体错误,则需进行更详细的证据审查。

提案特点

  • 可行:所要求的文档在专业开发和管理的系统中通常已存在或易于获取,披露负担不重。
  • 公平:它将证明证据可靠性的责任置于依赖该证据的一方,并通过程序性和证据性保障措施,旨在避免类似邮局事件的严重冤案。

结论

现有的法律推定不安全,已被证明会导致不公。将其替换为一个要求当事方在证据受质疑时必须证明其正确性的流程,对于维护司法公正至关重要。

26. Nathan Tolbert pushes the limitations of new games on old consoles (www.smilepolitely.com)

Nathan Tolbert:为老旧游戏机开发新游戏的技术与热情

Nathan Tolbert 是美国国家超级计算应用中心的研究软件工程师,同时也是独立游戏开发者。他专注于为 NES(任天堂红白机)、Atari 2600、Game Boy Advance 和 Dreamcast 等复古游戏机开发全新游戏。其最新作品《The Storied Sword》是一款受《忍者龙剑传》启发的快节奏动作平台游戏,包含 18 个关卡,目前正通过 Kickstarter 众筹发行实体卡带。

开发动机与社区体验 Tolbert 自幼喜爱游戏,编程后希望实现童年梦想,在心爱的游戏机上运行自己制作的游戏。他发现存在一个活跃的“自制游戏”开发者社区,这使得创作过程充满互助与反馈的乐趣。尽管复古游戏市场较小,但玩家群体非常支持,这与现代移动游戏“无人问津”的体验截然不同。

技术挑战与开发流程 为老旧系统开发游戏的核心在于平衡创意与硬件限制。例如:

  • 硬件限制:NES 的 CPU 性能、内存(如 Atari 2600 仅 128 字节 RAM)和图形能力有限,设计时必须反复权衡每个功能(如显示血条会影响敌人颜色种类)。
  • 开发工具:使用汇编语言编写代码,在模拟器中测试;图形和地图可用现代工具设计,但需通过脚本转换为游戏机可读的格式。
  • 优化重点:不同于现代编程注重可读性,复古开发需优先考虑执行速度(确保 60 帧/秒)和存储空间(如 Atari 游戏可能限制在 8-16KB 卡带空间内)。
  • 测试方式:初期依赖模拟器,最终使用可烧录 ROM 的卡带在真实硬件上测试。

入行门槛 学习汇编语言和硬件限制是主要挑战,但工具均为免费软件,仅当需要真机测试时才需购买卡带。门槛主要在于学习成本,而非工具或设备。

作品与个人喜好 Tolbert 最自豪的是跨平台塞尔达风格冒险游戏《Anguna》系列,而他个人最喜欢的游戏是《Super Homebrew War》——一款四人跳跃对战游戏,因能与家人共同游玩而充满乐趣。

本地生活 Tolbert 居住在美国伊利诺伊州尚佩恩市,喜爱与家人在社区公园聚会,并参与教会志愿活动。

总结 Nathan Tolbert 展示了在严苛技术限制下创造新游戏的可能,强调了社区支持的重要性,并鼓励对此感兴趣的人加入这个 welcoming 的开发者群体。他的作品体现了对复古游戏的热爱与对技术极限的探索。

27. The Making of Side 7: Gundam Evolution private server project (1379.tech)

《高达进化》私服项目Side 7的诞生

项目起源

2022年9月20日发布的在线FPS游戏《高达进化》于2023年11月29日停运。作为该游戏和英雄射击类游戏的爱好者,项目创始人受此触动,凭借后端Web开发经验,决心尝试创建私服。

初始原型开发

  • 技术方案:使用MITM代理脚本拦截并修改游戏URL至本地,通过配置HTTPS环境绕过游戏对非安全连接的抵制。
  • 开发挑战:游戏错误提示简陋,调试过程需反复测试和重启游戏,耗时漫长。
  • 初步成果:经过4个月数据收集,在游戏停运前约1个半月进行首次公开测试,成功搭建独立主服务器,玩家可进行自定义设置、访问训练模式等,但无法联机对战。

技术突破:发现游戏服务器潜力

  • 关键发现:利用UE4SS等模组工具获得游戏内存访问和控制台权限。
  • 意外事件:尝试使用UE4命令加载地图时出现401错误,发现游戏客户端尝试绑定UDP 7777端口,暗示其可能具备服务器功能。
  • 重大验证:通过命令使一个游戏客户端充当服务器,另一个客户端成功连接并加载地图。尽管存在团队分配、玩家模式等错误,但基础物理交互和玩家技能运行正常,证明客户端内包含完整的服务器代码。

团队组建与进展

  • 社区建设:建立Discord服务器,招募社区经理负责项目推广。
  • 技术协作:吸引逆向工程师Samuel Siviero加入,他帮助解决安全措施,加速调试进程。
  • 里程碑实现:停运后第9天,成功实现客户端作为玩家连接至另一修改后的客户端服务器,具备完整游戏体验的基础。

首次游戏测试与后续发展

  • 首次联机测试:停运后第37天,通过定制大厅在一台家用电脑上成功举办首次12人对战。
  • 公开测试准备:2024年第一季度,团队优化API稳定性,引入基础设施开发者并迁移至Linux服务器,成立内容团队制作宣传素材。
  • 封闭测试:为期三个月的测试中进行了超过500场比赛,修复众多崩溃和错误。2024年3月28日发布季度更新,支持社区托管的25个以上游戏服务器。

项目现状

  • 社区规模:Discord成员超过4700人,五天内增长超1200人。
  • 运营数据:基于Side 7基础设施已举办超过1600场比赛。
  • 开发进展:已修复大量大厅交互问题和游戏崩溃,致力于更多质量优化。
  • 联系方式:项目详情可通过Discord服务器(https://discord.gg/side7)获取。
28. Oolite: An open source open-world space opera (oolite.space)

Oolite:开源开放世界太空歌剧游戏

Oolite 是一款开源的开放世界太空歌剧游戏。其扩展包系统是游戏社区的重要组成部分。

扩展包系统概述

  • 创建与免责声明:所有扩展包均由社区成员创建并提供,不提供任何形式的保证,且不受 Oolite 开发团队的背书或审核。
  • 数量:游戏已发布超过一千个扩展包。
  • 格式:自 Oolite 1.80 版本起,主要使用两种扩展包格式:
    • OXZ:较新的格式,支持通过游戏开始屏幕的“管理扩展包”选项自动下载和安装。
    • OXP:较旧的格式,更易于修改,但需要手动安装。

关键注意事项

  • OXZ 格式的扩展包仅适用于 Oolite 1.80 或更高版本。1.77.1 及更早版本无法使用。
  • 几乎所有已发布的扩展包(无论格式)都列在游戏 Wiki 的各种 OXP 列表中。该 Wiki 同时也是开发者文档的所在地。
  • 如果遇到扩展包问题,最佳方式是在扩展包论坛的相关主题中报告。

可用扩展包

文章中提及了一个表格,用于列出可自动下载的 OXZ 扩展包。该表格支持按列排序,并包含扩展包的分类、标题、作者、更新日期等信息,但表格具体内容未在此段落中展示。