2024-01-06
50 篇热帖
2. Zeiss's "Holocam" turns glass windows into cameras (www.digitalcameraworld.com)
蔡司"Holocam"技术:将玻璃表面转化为隐形摄像头
技术概述
蔡司在CES 2024上展示了其突破性的"Holocam"技术,该技术能够将任何玻璃屏幕(如汽车车窗、笔记本电脑屏幕、前门玻璃)转变为隐形图像传感器。通过使用全息耦入、导光和耦出元件,技术能将进入透明介质的光线重新导向至隐藏的图像传感器,实现摄像头完全透明化,无需在屏幕上开孔或留出缺口。
核心优势
- 保持视觉连贯性:摄像头可隐藏在屏幕任意位置,确保使用者能与对话对象进行自然眼神接触。
- 广泛的应用场景:
- 汽车领域:集成于多功能智能玻璃系统,用于疲劳检测、隐藏式停车摄像头、通过人脸识别解锁车门等。
- 消费电子:使手机、平板电脑屏幕无需刘海或打孔;笔记本电脑可实现全域视线追踪的网络摄像头。
- 智能家居:智能门铃无需额外摄像头模块;门锁可通过屏幕进行人脸识别。
- 光学特性:支持大光圈隐形摄像头,并能独立调整视场角的大小与方向。
潜在问题
该技术也引发隐私担忧——在民宿等场景中,任何窗户或玻璃表面都可能被用作隐蔽监视设备,加剧了现有对隐藏摄像头的焦虑。
总结
Holocam技术通过全息光学实现了玻璃表面的透明成像能力,在汽车、电子产品和家居领域具有变革潜力,但其广泛应用需谨慎平衡创新与隐私保护。
3. Facebook incorrectly reports personal blog to DigitalOcean for phishing (social.lol)
Netcraft代表Facebook将Robb Knight的个人博客文章误报为钓鱼网站,并已向其主机商DigitalOcean举报。若不在24小时内删除该文章,其服务器将被暂停。Robb Knight对此表示强烈不满。
4. Alaska Airlines grounds Boeing 737 Max 9 planes after mid-air window blowout (www.theguardian.com)
阿拉斯加航空波音737 Max 9飞机因空中窗户脱落事件遭停飞
事件概述:
美国联邦航空管理局(FAA)下令暂时停飞171架波音737 Max 9飞机。这一决定源于阿拉斯加航空一架全新波音737 Max 9飞机在周五晚间起飞后不久发生客舱面板爆裂,导致紧急迫降。
监管与公司回应:
- FAA局长迈克·惠特克表示,在飞机恢复运营前需进行强制检查,安全决策将始终基于美国国家运输安全委员会(NTSB)对阿拉斯加航空1282航班的调查。
- 波音公司声明支持FAA决定,称安全为首要任务,并对事件影响深表遗憾。
- 欧盟航空安全监管机构采纳了FAA的指令,但指出欧盟成员国航空公司目前未运营受影响配置的飞机;英国监管机构也要求任何737 Max 9运营商遵守FAA指令才能进入其领空。
事故细节与紧急响应:
- 阿拉斯加航空1282航班从俄勒冈州波特兰飞往加利福尼亚州安大略,起飞后不久发生窗户和部分机身脱落。机上载有174名乘客和6名机组人员,飞机安全着陆。
- 乘客描述了舱内突然失压的恐怖场景,包括氧气面罩自动脱落、一名儿童衣物被吸出机外。
- NTSB负责人指出,脱落机身旁边的两个座位恰好无人,避免了更严重的悲剧。
- 涉事飞机于两个月前下线并获得认证。波音公司表示正收集信息并支持调查。
运营影响与背景:
- 阿拉斯加航空和联合航空是美国仅有的两家运营Max 9的航空公司。阿拉斯加航空停飞了全部65架Max 9飞机,导致周六取消160个航班(占其计划的20%);联合航空取消了104个航班(占其出发量的4%)。
- 波音737 Max系列自2017年投入运营,此前因2018年和2019年两起致命事故(共346人遇难)导致全球停飞近两年,后经改进飞行控制系统复飞。近期波音还因制造缺陷和部件松动问题多次中断交付并要求检查。
5. Systemd through the eyes of a musl distribution maintainer (catfox.life)
systemd 在 musl 发行版维护者眼中的优缺点分析
作为一名基于 musl libc 的 Linux 发行版维护者,本文作者从用户、管理员和开发者的多重角度,对 systemd 进行了批判性分析。作者澄清其观点仅代表个人,并非其所在项目立场。
系统服务管理的优点 作者高度评价了 systemd 作为服务管理器的核心能力:
- 单元文件设计优秀:格式表达性强,易于手动编写和自动化生成,支持从基础到复杂配置的灵活扩展。
- 高效启动机制:原生支持并行服务启动和 socket 激活,显著提升启动速度和可靠性。
- 声明式配置范式:通过配置文件精确定义系统目标状态,类似网络设备配置标准(如 NETCONF),相比传统的 OpenRC/SysV init 脚本实现了范式升级。
- cgroups 进程跟踪:每个管理单元独立的 cgroup 实现了精确的进程追踪,避免了 PID 文件和守护进程 fork 的难题,有助于系统控制、调试和安全审计。
缺乏竞争与垄断风险 作者指出 systemd 缺乏有力竞争带来了隐患:
- 单一包体承担过多功能导致进化困难,任何改动都可能影响所有用户。
- 缺乏外部压力会抑制创新,类似 GCC 与 Clang 的良性竞争关系在 systemd 生态中缺失。
对 musl 的兼容性问题 作者强烈批评 systemd 将 glibc 视为"Linux API"的立场,认为这忽视了 musl、Bionic 等其他 libc 的存在。这种态度也是作者避免在发行版中集成 systemd 的原因之一。
组件功能的具体批评
journald 日志系统:
- 作为强制日志后端增加攻击面和资源开销。
- 核心转储处理方式混乱(二进制日志与文件系统混合、元数据记录不完整)。
- 作者建议应允许使用纯转发式日志代理。
resolved DNS 解析器:
- DNSSEC 支持不完整且实验性。
- 家庭网络中过度设计,企业网络中适应性差。
- 不必要地集成 mDNS(已有 Avahi)和已废弃的 LLMNR 协议。
- 被视为"解决不存在的问题"。
其他组件:
nspawn:工具定位尴尬(介于 chroot 和完整容器之间),使用场景有限。networkd:不成熟且缺乏图形界面,NetworkManager 已能更好处理网络层。timedated:功能单一,更适由 Chrony/NTP 等专业工具实现。systemd-boot:仅支持 EFI,缺乏可移植性(如不支持 Power/Z 架构),发行版迁移会降低硬件兼容性。
总结与立场 作者明确表示:
- 并不盲目反对 systemd,作为服务管理器其实现优秀,单元文件设计、cgroups 集成等特性无可替代。
- 核心反对点是 systemd 试图扩张"系统层"却缺乏替代方案,组件过度膨胀与 musl 的不兼容共同导致其难以被采用。
- 若能将 systemd 精简为纯服务管理器,作者会积极推动在其发行版中提供支持。
作者最后强调批评基于具体技术问题,而非抽象哲学争论,并呼吁社区关注技术实质而非人身攻击。
6. A tiny hand crafted CPU emulator, C compiler, and Operating System (github.com)
swieros 项目概述
这是一个小型、快速的类Unix操作系统内核(基于xv6)、编译器和用户空间系统,主要用于娱乐、教育和研究目的。
核心组成部分与特性:
- 虚拟CPU模拟器:具备完整的用户模式/监督模式及虚拟内存支持,运行速度足够快,能够实现系统自身的自模拟运行。
- C语言子集编译器:是一个快速的编译器,支持所有应用程序的即时编译与执行。
- 丰富的用户空间功能:包括网络客户端与服务器、远程OpenGL支持、图形用户界面应用程序以及其他众多实用功能。
- 跨平台:可以在Windows或Linux操作系统上运行。
详情与指南:完整的介绍和分步教程可在项目中的 00README.txt 文件里找到。
7. Apple Rejects the Hey Calendar from Their App Store (world.hey.com)
苹果公司拒绝了HEY日历独立应用进入App Store。HEY公司指责苹果应用商店存在垄断行为,缺乏明确一致的规则,并任意解释和执行开发者指南。
事件起因是HEY开发了一个免费的配套应用“HEY Calendar”,但苹果在审查19天后,以该应用“没有功能”为由拒绝其上架。理由是用户必须使用现有账户登录才能使用功能。
HEY对此提出强烈反驳,指出App Store内存在大量需要登录现有账户才能使用的知名应用,例如Salesforce、摩根大通、Netflix和谷歌日历。这些应用都允许用户用既有账户登录,却未被拒绝。此外,苹果自己的应用商店指南中并未禁止需要预先存在账户的应用。
HEY进一步指出,其争议的核心在于苹果要求开发者使用应用内购买并抽成30%的政策。HEY在2020年曾就其邮件服务与苹果抗争,并成功争取到了一项豁免(根据规则3.1.3(f)),该豁免明确提到了“电子邮件服务”。HEY认为,其新的日历应用是同一服务的免费配套产品,理应享受同样的豁免待遇。
HEY批评苹果的商业模式存在利益冲突:应用商店的服务收入是苹果增长最快的业务,其中很大一部分来自应用经济的抽成。苹果在执行规则时对大型公司和小型开发者采取双重标准,为了不激怒大公司而为其设立例外,却对中小开发者发明新的、未明文规定的限制。
最后,HEY表示将继续抗争,不会妥协。作者期望欧盟即将生效的《数字市场法》以及美国司法部近期可能对苹果提起的反垄断诉讼,能够打破现有格局,促进市场公平竞争。
8. Dennis Ritchie on the priorities of && || vs. == etc. (1982) (www.lysator.liu.se)
本文是Dennis Ritchie在1982年对C语言运算符优先级历史的解释,主要说明了逻辑运算符(&&、||)与位运算符(&、|)优先级差异的起源。关键内容如下:
早期C语言的设计:早期C没有区分
&和&&、|和||。它继承自B和BCPL语言的“真值上下文”概念:在if、while等需要布尔值的语境中,&和|会被解释为现在的逻辑运算符(短路求值);而在普通表达式中,它们则作为位运算符使用。这种设计虽然可行,但难以解释。&&和||的引入:主要在Alan Snyder的推动下,C语言增加了&&和||运算符,以明确区分位运算和短路布尔求值。然而,Ritchie对优先级问题存在顾虑。当时已有大量代码使用如if (a==b & c==d)的写法,其本意是逻辑与。优先级调整的权衡:Ritchie认为,事后看来,更好的做法是将
&的优先级调整到高于==(即现在的&&的优先级)。但当时为了安全起见,他选择只拆分&与&&,而不改变&相对于已有运算符(如==)的优先级。这是因为需要兼容现有的几百千字节源代码和少数几个安装环境。
总结:C语言中&&、||的优先级高于==,但&、|的优先级低于==,这一差异源于历史兼容性考虑而非最初的最佳设计。
9. A rocket a day keeps the high costs away (1993) (www.fourmilab.ch)
本文探讨了降低太空发射成本的可能性与方案。作者指出,太空探索与开发的主要障碍是当前高昂的发射成本(每公斤数千至数万美元),各技术路线争论的共识在于:若成本降至十分之一至千分之一,太空开发将迎来飞跃。
当前主流火箭(从侦察兵到大力神IV)的单次发射成本均在数千万至数亿美元之间。作者分析,火箭主要由燃料箱、发动机、制导系统等构成,这些部件在工程上并非极端复杂或昂贵,例如汽车发动机的成本远低于火箭发动机,且能可靠运行多年。这引出了核心疑问:为何火箭如此昂贵?
作者以二战时期V-2火箭为例进行对比。V-2作为首款量产火箭,尽管在战时严苛条件下,仍实现了大规模生产(月产量达800枚),后期边际成本仅约1.3万美元(1945年币值)。其发射率可达每日数十枚。这证明了火箭作为消耗品实现大规模生产和高频发射在历史上是可行的。
基于此,作者提出“每天一枚火箭”的设想。假设采用液氢/液氧的两级火箭,参考V-2的数据进行十倍成本膨胀并转换币值后,估算每枚火箭成本可能约为130万美元。若每年发射365枚,总预算约4.75亿美元,相当于当时一次航天飞机飞行的成本。即便仅实现1吨的有效载荷,每公斤发射成本也可降至约1300美元,仍远低于当时主流火箭。
关于地面操作,作者认为不应因V-2过去在简陋条件下能达到的高频发射(每日10枚)而认定现代需要庞大的发射团队。通过自动化设计(如自动加注、检测)和移动发射装置,每日一次发射在技术上是可行的。苏联联盟火箭系列的经验(同一发射台24小时内多次发射)也提供了参考。
然而,高频发射面临“没有足够有效载荷”的经典问题。作者认为这是“先有鸡还是先有蛋”的困境:高成本限制了有效载荷需求,而低需求又无法支撑低成本发射系统的投资。为此,他提出一种采购方案:政府机构以不超过125万美元的价格批量采购每日一次发射服务(首100次为开发测试),并向商业用户开放购买(成本加成25%)。未售出的发射机会可用于科学研究。此举旨在通过政府承诺的稳定需求,刺激供应链实现大规模生产,从而验证低成本发射是否可行,并可能催生新的太空应用市场。
文章也讨论了潜在挑战:发射场容量与协调、环境影响(液氢液氧推进剂相对清洁)、太空碎片管理、燃料大规模采购成本、载荷的危险品处理以及测控网络容量。作者强调,该设想并非必须由美国NASA或国会实施,许多国家(通过调整部分国防预算)或大型科技公司均有能力承担。
结论认为,当前火箭本质上是“昂贵且低效的炮兵”,而历史上V-2在战时已展示了低成本大规模生产的潜力。作者主张,在投资开发不确定的新型可重复使用技术前,应首先通过市场采购方式测试现有一次性火箭技术能否通过大规模生产与高频发射实现成本革命。若可行,将直接启动市场并为下一代技术铺路;若不可行,则证明了发展全新技术的必要性。最终目标是降低发射成本,从而真正开启太空前沿。
10. M3 CPU cores have become more versatile (eclecticlight.co)
M3 CPU核心性能分析摘要
文章主旨:分析苹果M3系列芯片CPU核心的性能变化,指出其相比M1系列更具通用性,主要体现在性能核心(P核)和能效核心(E核)的协同提升上。
背景:M3系列中Pro与Max型号的CPU差异增大(M3 Max拥有两组P核集群,M3 Pro仅一组),导致两者在性能和能效上拉开了差距。
测试方法:
- 使用8种不同的核心内性能测试,涵盖整数运算、浮点运算、NEON向量点积、矩阵乘法(纯CPU、Accelerate库、稀疏/BNNS矩阵乘法)以及汇编语言空循环用于扣除开销。
- 针对不同芯片和核心类型(P核、低频E核、高频E核),设置了不同的线程数和QoS(服务质量)等级进行测试。
- 以M1 Max P核在每个测试中的循环速率为基准(100%),对所有结果进行标准化比较。
主要发现:
- P核性能:M3 P核在所有测试中均优于M1 P核。在标量运算(整数、浮点)上,性能提升与主频差异(M3约为M1的112%)相符。但在向量和矩阵运算上,M3的提升显著更大(例如,经典矩阵乘法达到150%)。
- E核性能(低频/后台任务):M3 E核在低频运行(用于低QoS后台任务)时,比M1 E核更慢,这与较低的运行频率(M3为744 MHz,M1为972 MHz)有关,体现了更高的能效。
- E核性能(高频/高QoS任务):M3 E核在最高频率(2748 MHz,为M1的133%)运行时,性能大幅提升,某些非标量运算的循环速率甚至略高于M1 P核。这使得从P核集群溢出的高QoS线程能获得接近P核的性能。
- 整体性能轮廓:M3的E核在性能谱系上表现出更大的跨度:低频时更省电,高频时性能更接近P核。结合M3 Pro更大的E核集群(10核),使其在处理溢出线程时既能提升性能,又能保持能耗效率。
结论:
- M3 P核全面优于M1 P核,向量/矩阵运算提升最大。
- M3 E核在后台任务中更慢、更省电。
- M3 E核在处理高QoS溢出线程时,性能接近M1 P核。
- 因此,M3系列CPU的整体设计使其比M1系列更具通用性和灵活性,能更好地平衡高性能与高能效的不同需求。
11. We don't need a DAC on the ESP32-S3 (atomic14.substack.com)
文章摘要
本文探讨了在没有内置数模转换器(DAC)的ESP32-S3上实现音频输出的一种替代方案:使用脉冲密度调制(PDM) 和Sigma Delta调制。
核心观点
尽管ESP32-S3缺少DAC,但通过PDM技术可以方便地输出音频信号。PDM信号通过变化脉冲密度来表示原始音频,然后可通过一个简单的低通滤波器(例如RC滤波器)恢复出模拟音频信号。文中附有频谱图,直观展示了PDM信号的特性和恢复过程。
实现方法
在ESP32上生成PDM音频主要有两种方式:
- 使用定时器:通过定时器中断和
sigmadelta_set_duty函数(或PWM)逐样本输出。此方法可行但效率较低,需要频繁中断,且从其他来源流式传输样本的代码较为复杂。 - 使用I2S外设:这是更优的方案。I2S外设可直接输出PDM数据,但有两个注意事项:
- 它总是输出左右两声道。解决方案是为左右声道输出相同的信号。
- 它总会输出一个时钟信号。可将时钟引脚分配到GPIO45或GPIO46等在启动后可用于输出的引脚上。
实际应用与兼容性
- PDM信号可直接驱动耳机或大多数模拟音频放大器(其带宽通常足够低)。
- 也可使用专门的PDM数字放大器IC,如MAX98358或SSM2537。
- 甚至可以通过简单的半桥或全桥电路直接驱动扬声器(尽管可能噪声较大)。
- Espressif官方文档建议使用有源滤波器以获得更好的音质。
总之,文章论证了即使在没有专用DAC的微控制器上,利用PDM和Sigma Delta调制也是一种简单有效的音频输出方案。
12. Tex-Oberon: Make Project Oberon Pretty Again (github.com)
Tex-Oberon 项目概要
项目背景与愿景 Project Oberon 是计算机科学领域的一项卓越成就与教学工具。其书籍与代码清晰地证明,构建一个足以装入普通程序员头脑的、可用的计算系统是可行的。该项目旨在对2013年版的书籍进行美化与现代化重排,使其摆脱不可编辑的PDF源格式束缚,变得更具美感。
核心目标 本项目致力于完成以下四项任务:
- 解放文本:将书籍内容从不可编辑的PDF源文件中提取出来。
- 专业排版:使用(Plain)TeX及高德纳(Knuth)自身的
taocpmac.tex宏包对书籍进行排版。 - 代码整合:将完整排版后的源代码纳入书中,方便喜欢在床上阅读代码的读者。
- 文学编程化:将其转化为一个文学编程项目,使代码更自由地穿插于叙述性文字之间,并通过“tangle”操作生成最终产品。
项目价值与最终成果 成为拥有TeX源码的文档后,未来的Oberon工程师将能够修改文本,使其与运行中的源代码保持同步。项目的最终愿景是由Oberon社区共同编辑并出版一本精美的精装书籍,使其能与《计算机程序设计艺术》等经典著作并肩而立。
项目进展与构建 目前项目已取得如下进展:
- 完成了文本复制与基础排版。
- 完成了第一轮校对。
- 完成了第二轮校对。
一个最新的、仍在进行中的PDF版本可在项目的“发布”页面中找到。文中所有PDF及代码资料均取自 projectoberon.com。
项目理念(引文)
许多操作系统需要数兆字节的存储空间,这种要求虽被普遍容忍,但实属荒谬,且是用户不友好(或或许是厂商友好)的又一标志。
13. Do we think of Git commits as diffs, snapshots, and/or histories? (jvns.ca)
Git提交的思考方式:差异、快照与历史记录
文章通过一项非正式调查揭示了人们对Git提交的核心认知差异:51%的人将其视为差异(diff),42%视为快照(snapshot),仅有4%认为它是历史记录链。这种认知分歧是理解Git概念的关键挑战之一。
核心定义
- 差异(diff):指运行
git show时显示的变更内容,例如一个补丁文件。 - 快照(snapshot):指运行
git checkout时获得的完整文件树(即目录结构)。
Git的内部实现
- 存储方式:Git在内部以快照形式存储提交,每个提交包含指向文件树(tree)对象的指针,而非差异。这使得检出任意提交(无论早晚)的速度一致,因为Git无需重放大量差异。
- 压缩机制:为节约磁盘空间,Git使用包文件(packfiles) 对数据进行压缩。包文件通过“增量(delta)”机制存储对象——即将对象表示为对某个“原始文件”加上一系列复制和插入指令的引用。这并非存储连续差异,而是一种空间优化技术。
- 计算差异的过程:运行
git show时,Git实际上先通过包文件重构当前提交和其父提交的快照,然后对比这两个文件树的差异,最后输出差异内容。
常见的“错误”心理模型
许多人将提交理解为“从上一提交的差异”或“通过重放所有差异获得当前状态”。虽然这并非Git的内部实现,但该模型在日常使用中实用且直观,因为它将最常用的概念(差异)置于核心。
两种认知模型的优缺点
- 视为差异的优势:
- 更关注具体变更内容,符合开发时的思维模式。
- 与GitHub等工具的界面(通常显示差异)一致。
- 便于理解
rebase等重放差异的操作。
- 视为快照的优势:
- 更容易理解
git checkout、合并提交等操作的本质。 - 有助于解释Git在处理文件移动时的识别机制(基于内容相似性推测)。
- 合并提交可视作一个全新的快照,简化冲突解决逻辑。
- 更容易理解
其他思考角度
- 提交可关联额外信息(如邮件、对话记录)。
- 差异可理解为“前状态+后状态”的对比。
- 术语如“修订版(revision)”更接近快照概念,“补丁(patch)”更接近差异概念。
文章指出,尽管内部实现是快照,但差异模型在许多场景下更实用。作者鼓励承认不同心理模型的价值,避免因追求“正确”而抑制有效认知。
14. Harlequin: SQL IDE for Your Terminal (github.com)
Harlequin 是一款专为终端设计的 SQL IDE,旨在提供便捷的数据库交互体验。
安装与配置
- 推荐方式:强烈建议使用
uv工具安装,可自动配置环境。- 安装
uv:执行curl -LsSf https://astral.sh/uv/install.sh | sh(POSIX) 或相应 PowerShell 命令。 - 安装 Harlequin:执行
uv tool install harlequin。
- 安装
- 其他方式:也可通过
pip、pipx、poetry或 Homebrew 安装。Homebrew 公式由社区维护,包含部分适配器但体积较大。 - 数据库适配器:通过插件连接多种数据库。适配器为独立 Python 包,需与 Harlequin 安装在同一环境。可通过 uv 安装扩展,例如
uv tool install 'harlequin[postgres,mysql,s3]'。
运行与使用
- 通过命令行运行,使用
harlequin [OPTIONS] [CONN_STR]格式。 - 内置适配器:
- DuckDB:默认适配器。无参数运行可打开内存数据库;传入文件路径可打开或创建 DuckDB 文件。
- SQLite:使用
--adapter sqlite或-a sqlite选项指定,同样支持内存模式和文件路径。
- 其他适配器:需单独安装,各适配器可定义专属选项,可通过
harlequin --help查看。 - 配置:支持通过命令行或配置文件进行详细设置(如主题、快捷键、文件浏览器等)。
- Django 集成:可通过
django-harlequin直接使用 Django 数据库配置启动。
帮助与社区
- 使用
harlequin --help查看所有选项。 - 应用内按
F1可查看帮助文档。 - 遇到问题可查阅“故障排除”指南。
- 通过 GitHub Discussions 提问交流,通过 GitHub Issues 报告缺陷。
- 欢迎通过赞助支持开发者。
- 贡献代码请参考
CONTRIBUTING.md。
完整功能文档与教程请访问官方网站 harlequin.sh。
15. Hard disk LEDs and noisy machines (blogsystem5.substack.com)
这篇文章探讨了现代计算机因缺乏物理指示灯和噪音而导致的性能问题难以察觉的现象。
过去的计算机通常配备闪烁的硬盘指示灯和产生噪音的风扇、磁盘,这些特性如同性能“金丝雀”,能让开发者立即注意到代码可能过度使用了CPU或磁盘资源。
然而,如今像Mac这样的设备为了用户体验变得安静无声,也移除了指示灯。这使得开发者必须在主动意识到可能存在问题后,才会去检查,否则性能问题可能长期被忽略。
作者通过三个真实案例说明了这一点:
- 一个项目意外地每秒向磁盘写入80MB日志,直到磁盘空间告急才被发现。
- 构建工具Bazel因网络问题反复下载同一文件,导致构建时间异常漫长。
- 作者自己的Mac上,
WallpaperVideoExtension进程失控,持续进行高磁盘读取和CPU占用,但因系统无明显迟滞或噪音而难以察觉。
为了解决这个问题,作者强烈建议开发者安装并常驻一个性能监视器(如macOS的iStat Menus或Linux下的类似工具),它可以在菜单栏实时显示CPU、内存、磁盘I/O等关键指标。这样,即使设备没有物理信号,开发者也能通过异常数据流迅速发现潜在的性能问题。
文章最后指出,这种方案适用于本地开发场景。对于通过SSH进行的远程开发,传统的物理指示灯和本地监视器都失去作用,需要像旧软件GKrellM那样的远程监控解决方案,但目前这类工具并不普遍。
16. TinyLlama: An Open-Source Small Language Model (arxiv.org)
TinyLlama: 一个开源的小型语言模型
TinyLlama是一个紧凑的1.1B参数语言模型,在约1万亿个令牌上预训练了大约3个epoch。它基于Llama 2的架构和分词器构建,并利用开源社区的贡献(如FlashAttention和Lit-GPT),实现了更高的计算效率。尽管尺寸相对较小,TinyLlama在多个下游任务中表现出色,显著优于现有同等大小的开源语言模型。模型检查点和代码已在GitHub上公开。
17. Chromium bug bounty money tree browser (lyra.horse)
18. Microsoft Phi-2 model changes licence to MIT (huggingface.co)
19. Choosing what to read (tratt.net)
阅读选择的思考
作者探讨了自己如何选择阅读内容,旨在说明思考阅读选择的重要性。其选择高度个人化,主要基于个人兴趣、职业需求和思维拓展的目标。
小说与历史的权衡
作者坦言自己现在很少读小说,转而大量阅读历史。他认为历史比虚构作品更能拓展思维,因为现实历史常包含超出常规认知的“不合情理”但真实的事件,如滑铁卢战役中的误解命令、巴伐利亚国王建造的童话城堡、万神殿未解的混凝土技术、哥斯达黎加前独裁者的奇特人生等。这些历史片段能突破我们对世界合理性的狭隘假设。
新闻与观点的筛选
作者从大量阅读报纸新闻转向有选择地浏览:
- 过滤短期、负面信息:避免被“坏消息”影响,转而关注长期趋势。
- 偏爱分析性报道:例如《经济学人》,因其写作质量稳定且作者能理解并修正其偏见。
- 谨慎选择观点文章:不仅避免只读确认自己观点的内容,更寻找能“以充分理由挑战自己思维”的作者,即使观点不同也可能带来思维调整。
职业相关阅读
编程与技术文章
- 跟踪现实趋势:每日阅读非学术编程文章,了解行业动向。
- 寻找研究问题:从中发现与自身知识可能匹配的现实问题,尽管匹配率很低,但被认为极有价值。
学术论文
- 不再跟踪固定会议/期刊:因同行评审趋于保守,且更希望拓宽知识广度。
- 定期浏览arXiv:主要看编程语言领域(cs.PL),每周浅读数篇,每月精读2-3篇。此部分容易被忽略,但长期有益。
同行评审
作者有意识地控制评审数量,避免过度投入,保持“审阅量略高于被审阅量”的平衡。
核心主张
作者的选择反映其个人偏好与需求,并非建议他人模仿。他强调:
- 理解自己的阅读偏好及原因很有价值。
- 反思阅读选择能帮助调整阅读结构,使之更符合个人目标。
20. Adélie Linux (www.adelielinux.org)
Adélie Linux 安全特性摘要
- 核心原则:安全与可靠性是首要考量,非可选功能。
- 快速更新:安全更新响应迅速,近乎即时部署。
- 精简服务:系统默认不运行任何非必要服务。
- 进程管理:采用专业级监控软件 s6 管理服务,该软件设计精良、功能专一。
- 故障隔离:若应用程序出现异常,s6 会立即终止其运行,防止造成进一步危害。
- 安全理念:不承诺提供超凡的安全防护,而是通过上述机制确保系统行为透明、可控,为用户提供无意外的可靠环境。
- 适用版本:当前信息针对 服务器版本。
21. Fortran vs Python: The counter-intuitive rise of Python in scientific computing (2020) (fortran-lang.discourse.group)
本文围绕“Fortran与Python在科学计算中的对比”这一主题,通过多个参与者的讨论,分析了Python相较于Fortran取得反直觉式崛起的深层原因,并探讨了Fortran的现状与未来潜力。
核心观点:Python的成功源于生态系统,而非语言本身
讨论的起点是一篇博客文章。一位参与者指出,Python在科学计算中流行并非因其语言本身的“敏捷性”,而是因为其完善的生态系统,包括丰富的库、详尽的文档、在线教程和学习资源。例如,用户可以轻松找到并使用Python的kdtree实现,而Fortran虽然存在性能相当的kdtree库,但因其缺乏良好的网页、文档、单元测试和用户示例而难以被发现和采用。因此,Fortran开发资源(尤其是经典计算机科学算法的库)和开发者社区的匮乏,阻碍了其在某些科学计算领域的应用。
Fortran的性能与现状
多位参与者通过实际代码和基准测试反驳了“Fortran性能落后”的观点:
- 性能实测:有用户将Python的四叉树和球树教程移植到Fortran,并分享了代码。另一用户对16年前的Fortran kdtree2库进行测试,发现在3、8、16维空间中的构建和查询性能与最新的SciPy(C++实现)库相当。使用不同编译器(gfortran, ifort, nvfortran)和优化选项的测试结果也进一步验证了Fortran的高性能潜力。
- 工具与维护问题:尽管存在可用的库,但它们往往维护不佳或已停止维护。有用户表达了帮助维护和将库打包为现代Fortran包管理器(fpm)格式的意愿,但缺乏协作者。
- 交互性与开发体验:Python的交互式环境(如Jupyter)是巨大优势。虽然LFortran等项目旨在为Fortran提供交互性,但目前仍不成熟。Fortran在快速原型设计、调试、数据可视化等现代工具链方面明显落后,这直接影响了用户体验和开发效率。
Python普及的更深层次原因
讨论超越了纯技术对比,指出了更广泛的社会与技术因素:
- 教育与社会因素:大学普遍教授Python,导致学生和新一代科学家熟悉Python而非Fortran。这影响了人才供给和库的开发方向。Fortran在计算机科学课程中几乎缺席。
- 易用性与“生产力”导向:对多数以解决问题为导向的科学家而言,Python更容易上手。他们不必纠结于编译、类型声明、构建脚本等底层细节,可以更专注于问题本身。Python的动态类型和简洁语法降低了入门门槛(尽管也可能引入特定问题)。
- 社区与工具链成熟度:Python拥有庞大的社区、成熟的包管理(pip/conda,尽管也有问题)、丰富的集成开发环境(IDE)支持。而Fortran的社区较小,工具链(如构建、依赖管理)虽在改善(如fpm),但仍处于发展初期。
对Fortran的批评与改进建议
参与者也指出了Fortran语言和生态系统的短板,并提出了改进方向:
- 语言特性:需要改进以提升易用性和安全性,例如:将
implicit none设为默认;提供内置的IEEE浮点数kind别名;增加内置字符串类型;简化类型系统。 - 生态系统建设:亟需建立:
- 一个强大、活跃的包仓库和标准库。
- 现代包管理器(fpm) 的普及和易用性。
- 交互式工具(如解释器/Jupyter内核)。
- 高质量、易访问的文档和教程。
- 社区发展:需要吸引更多开发者和用户,形成良性循环。改善新手入门体验和资源获取途径至关重要。
结论
讨论达成共识:Python在科学计算领域的主导地位主要归功于其繁荣的生态系统、教育普及和良好的开发体验,而非语言计算效率。 Fortran在原始计算性能上仍具竞争力,但其发展受制于落后的工具链、匮乏的开发资源以及语言本身的某些传统设计。然而,通过积极改进语言特性、大力发展现代工具(如fpm)、构建丰富的库和文档、并培育社区,Fortran仍有望在科学计算中释放其全部潜力,并重新成为更具吸引力的选择。这需要整个Fortran社区的共同努力和合作。
22. Blood, Guns, and Broken Scooters: Inside the Chaotic Rise and Fall of Bird (www.wired.com)
本文揭示了Bird公司从估值超过20亿美元到最终申请破产的兴衰过程,重点剖析了其依赖的“车队经理”承包商模式所面临的残酷现实。
1. 运营模式与车队经理的困境
- 商业模式:Bird将车辆的充电、维修、调度等繁重物流外包给名为“车队经理”的承包商。经理们自筹资金组建公司,以预付设备款的方式从Bird获得车队,并从每笔骑行费用中抽取分成。
- 工作性质:工作环境恶劣且危险。经理们需时刻响应APP指令,面临严格的绩效评分压力。他们不仅要处理车辆盗窃、人为损坏等问题,甚至需在街头与破坏者对峙,部分人为自卫携带枪支或泰瑟枪。
- 收入骤降:公司早期,承包商收入丰厚。但在2021年Bird准备上市前夕,公司强制推行新合同,将分成从净收入的81%大幅削减至50%(并新增多种费用),导致许多经理收入减半。此外,公司还将维修所需的专用零部件定价高昂。
2. 产品质量与安全隐患
- 刹车缺陷:Bird推出的新型号(Bird Two/Three)采用后轮液压刹车,存在严重设计缺陷。多名经理指出,该刹车在冬季会冻结,夏季易因密封件磨损导致液压液泄漏,在几个月内基本必然故障。
- 安全维护压力:尽管合同规定车队经理需对车辆安全负责,但公司同时施加巨大的绩效压力。这导致经理们为保住工作和收入,可能被迫投放维护不达标的车辆。文中提及一起事故,一辆刹车失灵的滑板车沾满血迹。
- 法律诉讼:公司曾告知投资者,自成立以来已涉及数百起人身伤害诉讼,指控包括软组织损伤、骨折、脑损伤及死亡。
3. 公司的财务困境与破产
- 业绩下滑:疫情导致骑行量骤降超过50%。2021年通过SPAC上市后股价持续下跌。
- 财务丑闻与退市:2022年底,公司承认过去两年虚报收入。2023年9月,因市值无法维持在1500万美元以上,被纽约证券交易所除名。
- 挤压承包商与收缩业务:为控制成本,公司终止了多个城市的车队经理项目,并撤出旧金山、坦帕、圣地亚哥等市场。2023年12月20日,Bird正式申请破产保护,但声称破产期间将照常运营。
4. 承包商成为最大受害者
- 许多经理为运营投入了大量个人资金购买货车、租赁仓库、雇佣员工,并积累了巨额债务。
- 随着公司衰落,他们的合同被任意终止,面临破产和失业。
- 与之形成对比的是,公司创始人Travis VanderZanden在离职后,其持有的迈阿密豪宅市值从2170万美元涨至约3000万美元。
- 一名承包商总结道,这感觉像一个“精神操控项目”,公司用高额收入诱人加入,最终却让他们感到自己“毫无价值”。
23. What the heck is a homomorphic mapped type? (andreasimonecosta.dev)
什么是同态映射类型?
同态映射类型是 TypeScript 中一类特殊映射类型的术语。其核心定义是:映射类型的约束必须是 keyof T 的形式,其中 T 是一个类型参数。这种形式确保了映射操作仅应用于输入类型 T 的已有属性,从而保持了原始类型的结构完整性。
核心定义与识别
根据编译器实现,一个映射类型 { [P in C]: ... } 是同态的,当且仅当其约束 C 是 keyof T 且 T 是一个类型变量。这通过检查 TypeFlags.Index 和 TypeFlags.TypeParameter 标志来判断。
同态映射类型的特殊行为
当同态映射类型(不包含 as 子句时)应用于不同类型时,它表现出独特的结构保持和转换规则:
- 应用于原始类型:结果保持为原始类型本身。
- 应用于联合类型:映射类型会分配到联合的每个成员上,形成新的联合类型。
- 应用于数组:结果仍为数组,但元素类型被映射逻辑所转换。
- 应用于元组:结果仍为元组,但元组中每个元素的类型被独立转换。
这些规则使得同态映射类型能够“保留”数组和元组的形状。然而,一旦使用了 as 子句进行键重映射或过滤,这些特殊保留规则通常不再适用。
同态映射类型的特性
同态映射类型通常具备以下有益特性:
- 保留修饰符:能够保留原始对象属性的
readonly、可选(?)等修饰符。 - 支持符号链接:在IDE中能维护从派生属性到原始属性的“转到定义”链接,这有利于代码导航。但当
as子句用于键重映射时,此链接会丢失。 - 可能支持反向映射:在类型推断中,没有
as子句的同态映射类型更容易被“逆向”推断,即从一个具体类型反推出映射前的类型。
编译器实现视角
在TypeScript编译器源码中,通过 getHomomorphicTypeVariable 函数识别同态映射类型。在实例化映射类型时,同态映射类型会进入特殊处理分支(instantiateMappedType),根据输入类型(原始类型、联合、数组、元组等)应用上述的转换逻辑。
as 子句的影响
as 子句允许重命名或过滤键。使用 as 子句不会改变映射类型的同态性质(它仍然可以是同态的),但会使其丧失上述的部分特殊行为(如保持元组/数组类型)和特性(如符号链接)。因此,不带 as 子句的同态映射类型功能最强大。
结论
同态映射类型是 TypeScript 类型系统中一种旨在保持输入类型结构的工具。其标准形式为 { [K in keyof T]: ... },其中 T 是类型变量。不带 as 子句的同态映射类型拥有最丰富的特性集。在设计通用的类型转换工具时,优先考虑使其成为同态映射类型,通常能获得更好的类型保持和推断能力。即使不是严格的同态映射类型,某些映射类型(如 Pick)也可能通过类似机制保留修饰符。
24. Two classic radiosity books now free (www.realtimerendering.com)
这是一个Cloudflare安全挑战页面,当用户尝试访问标题为“Two classic radiosity books now free”的博客文章时显示,旨在验证用户浏览器以继续访问。
页面结构基于HTML,包括:
- HTML头部:设置字符编码为UTF-8、视口适配、内容安全策略(限制脚本和样式来源),并使用元数据控制机器人索引。
- 主要身体部分:包含一个div元素,显示错误信息“Enable JavaScript and cookies to continue”,提示用户需要启用JavaScript和cookies才能继续操作;默认情况下,如果JavaScript未启用,则显示此提示。
- CSS样式:定义响应式布局,确保页面在不同设备上自适应,并美化错误信息和整体界面。
- JavaScript代码:处理Cloudflare挑战逻辑,包括初始化挑战参数(如cFPWv、cH、cN等)、加载挑战平台脚本、管理用户历史状态(通过replaceState重定向以避免循环),并最终引导用户完成验证。
关键功能:
- 安全验证:作为反机器人机制,确保只有启用JavaScript和cookies的真实用户才能访问后续内容。
- 动态挑战:JavaScript代码与Cloudflare挑战平台交互,执行验证并处理重定向,以无缝过渡到实际文章。
- 用户提示:通过清晰错误信息告知用户所需操作,提升用户体验。
整个页面作为访问博客内容的中间步骤,不包含实际文章文本,仅提供验证流程。
25. If Money Doesn't Make You Happy Then You Probably Aren't Spending It Right [pdf] (scholar.harvard.edu)
无法访问您提供的文章链接,因此无法获取文章内容进行总结。建议您检查链接的有效性或提供其他可访问的版本。
26. A Beginner's Companion to Theorem Proving in Lean 4 (emallson.net)
这篇文章是作者J. David Smith撰写的一份关于在Lean 4中进行定理证明的初学者指南,旨在补充《Theorem Proving in Lean 4》官方文档中的不足。作者基于自己在Lean中实现拟阵相关性质的业余项目经验,总结了实用的技巧和解决常见痛点的方法。
文章主要内容如下:
定理查找策略:介绍了
rw?、simp?、apply?和exact?等策略,它们可以在Lean环境中提供类似Hoogle的搜索功能,帮助找到满足当前证明目标的候选定理。rw、apply、exact策略的模式:rw用于将形如a = b或a ↔ b的定理或假设应用到目标a上,将其替换为b,也可以对非目标进行变换。exact直接使用一个与目标完全匹配的假设或定理来关闭目标。apply使用一个蕴含式a → b将目标b转换为新目标a。
引入子目标:
have可用于创建更易证明的子目标,或实例化定理以供重用。if/else结构适用于需要依赖排中律的情况,有助于组织证明思路,但使用if/else通常需要open Classical。
使用
refine和case:refine类似于exact,但会为占位符生成子目标。case用于处理由refine或其他策略生成的带标签的特定子目标。
通过点表示法转换假设:
- 例如,对假设使用
.mp、.mpr可获得模态肯定,使用.mt可获得否定后件。 - 许多运算符(如
>)还提供.le、.not_le、.asymm、.trans_le等实用工具,方便进行否定和传递性推理。
- 例如,对假设使用
处理否定逻辑:
absurd:当假设中存在明显矛盾时,用于替换目标。contradiction:当有两个直接矛盾的假设时,直接关闭目标。contrapose:对假设应用逆否命题,将目标替换为其否定。
And、Or 和存在量词的处理:
And(∧)是积类型,可通过解构或使用And.intro处理。Or(∨)是和类型,通常通过模式匹配或转化为蕴含式处理。- 存在量词(∃)也是积类型,可通过提供具体值和证明来构造,或从集合(如有限集)中提取元素(需要先证明集合非空)。
let与have的区别:have定义的项是不透明的,let定义的项是透明的,这意味着重写策略可以作用于let定义的项的构造。
实践建议:
- 编写小型定理。小型证明更容易由Lean自动完成(如使用
exact?),并且大型证明状态会影响交互体验。 - Lean的LSP工具对交互式证明非常有帮助,能帮助发现纸面证明中隐含的假设。
- 但Lean不能完全替代纸笔推理,它更侧重于小步变换,可能让人迷失于细节。
- 编写小型定理。小型证明更容易由Lean自动完成(如使用
文章最后指出,这些笔记对希望使用Lean 4作为证明助手的初学者可能很有用,特别是那些不严格遵循构造性理论、愿意使用实用技巧(如 if/else)的学习者。
27. Y Combinator Compensation Numbers
文章标题:YC 薪酬数字
这篇讨论主要围绕后期创业公司(如YC公司)向员工提供的股票类薪酬(如RSU和股票期权)的估值透明度、潜在风险和实际收益展开。核心观点是,公司在向候选人宣传股票补偿价值时,存在使用不一致估值标准的可能性,这被视为一种可能不诚实的行为。
主要观点和内容包括:
RSU 与 期权的风险对比:
- RSU(限制性股票单元):在后期创业公司更常见。因为RSU是直接授予股票而非购买期权,即使公司估值持平,RSU本身也具有价值。
- 股票期权:如果公司发展未达到高于行权价的估值,期权将变得毫无价值。
估值不透明与潜在欺诈风险:
- 一种被批评的做法是:公司在招聘时用优先股的价格(通常基于高融资估值)向候选人宣传股票补偿价值,但最终授予员工的却是价值更低的普通股,导致实际授予价值远低于宣传。
- 讨论指出,公司应使用 409A估值(由独立第三方对普通股进行的较低估值)来确定股票授予价格,以避免税务问题。然而,有些公司可能对外(对员工)使用基于融资轮次的高估值,对内(对IRS)使用低409A估值,这种双重标准被认为是不诚实且可能构成欺诈的行为。
- 409A估值本身也存在争议,因为它是针对非流动性私人股票的评估,允许较大的判断空间,并非完全反映市场价。
个人经历分享:
- 有参与者分享个人经历,指出从RSU中获得净收益(约3万美元),但从股票期权中遭受净损失(约2万美元)。其中一个案例是,公司被收购后,所有收益都分配给了优先股股东,导致员工已行权的期权一文不值。
- 另有观点认为,RSU收益普遍高于期权,部分原因在于公司状态:公司通常在相对成功、股票接近可变现时才授予RSU;而期权常由早期、失败风险高的公司授予。
税务考量:
- 期权和RSU在税务处理上不同。期权持有者可以选择在行权时(增值前)缴税(如进行83(b)选举),而RSU通常在变现时(流动性事件发生时)缴税。
- 讨论提到了 QSBS(合格小企业股票) 税收优惠,若期权符合QSBS条件,在满足持股时间等要求后,可能享受联邦税收减免。
市场现实与薪酬结构:
- 有评论指出,当前科技行业平均薪资水平已回落至2020年或更早水平。
- 讨论中,一家名为Retool的公司(工程负责人)进行了招聘宣传,并回应了关于其混合办公政策的问题,强调主要采用线下办公(SF、NYC、Seattle),每周到办公室3天,并视远程工作为例外。这引发了关于远程工作文化的一些讨论。
总结:该讨论的核心警示是,求职者在评估创业公司提供的股票薪酬时,应仔细辨别其声称的估值标准(优先股vs普通股,融资估值vs 409A估值)与实际授予的股票类型是否一致,以避免接受被夸大的薪酬包。同时,个人经历表明,相较于期权,RSU在过往案例中为员工带来了更稳健的回报,但税务处理是另一重要考量因素。
28. Scheme modules vs. whole-program compilation: fight (wingolog.org)
Scheme模块与全程序编译的对比分析
全程序编译策略概述
在Whiffle和Hoot项目中,采用全程序编译方式,将整个程序及其依赖的模块组合成一个编译单元。标准库绑定(如+)通过预定义(prelude)引入,以原始操作(如%+)形式存在,并包装成用户可用的函数。编译时,这些绑定被内联优化,可能直接生成常量代码(例如(+ 42 1)优化为43)。预定义内容在预扩展阶段词法嵌入编译单元,形成嵌套的let绑定轮廓。
模块处理方式
为处理模块,引入library-group形式,它显式定义一组拓扑排序的模块,与主程序一起编译。例如,将(inc)库和主程序组合为一个编译单元。然而,基库(如(rnrs))通常不在编译单元内,需在编译或运行时链接。Hoot项目倾向于包含整个预定义,以避免运行时依赖。这种组合本质上是将模块转换为嵌套的letrec绑定,但仅适用于无宏的“普通”语言。
宏引入的复杂性
Scheme的宏(程序化语法转换器)带来挑战。宏在编译时(扩展时)运行,可能引用其他模块的定义。例如,(ctinc)宏需要在扩展时调用(inc)模块的函数以计算结果。然而,简单的嵌套词法绑定(如let或letrec)无法使定义在扩展时可用,导致作用域错误(如inc在扩展时未定义)。
阶段(Phasing)问题
R6RS标准定义了阶段系统,明确声明绑定在运行时和扩展时的可用性。隐式阶段允许编译器自动推断,但宏定义中引用其他模块时,必须确保绑定在扩展阶段可见。在(ctinc)示例中,即使inc在运行时可用,扩展时仍无法访问,因为词法绑定不支持跨阶段共享。
潜在解决方案
其他语言通常不支持宏,或通过链接时优化处理。对于Scheme,建议采用模块逐个扩展的策略:先按模块扩展宏,将高级Scheme降低到无语法转换器的低级语言(如仅含letrec),然后进行全程序编译。这类似于模块扩展后通过AST转换连接结果。作者提到library-group论文支持此方法,即模块扩展后缝合成letrec形式。
作者反思与总结
作者承认了此前“粗暴插入预定义”方法的缺陷,并计划改进。核心结论是:模块与全程序编译并非不兼容,但宏引入了阶段问题,需通过分阶段扩展(先模块扩展,再整体编译)来解决。这突出了Scheme编译中模块系统、宏和词法作用域之间的张力。
29. Show HN: Building a 'liturgical lightbulb', bringing the Calendar to life (github.com)
“礼仪灯泡”项目摘要
该项目是一个名为 pharus 的软件,允许用户构建一个智能灯泡,使其颜色根据澳大利亚圣公会的礼仪日历自动变化。主要功能包括:
- 遵循教会日历:灯泡会为各个节日和纪念日显示对应的颜色,包括小节日。当同一天有多个小节日时,系统会逐年轮换,确保每个节日都能在几年内被观察到。
- 特殊礼仪处理:在耶稣受难日下午3点(当地时间),灯泡会自动关闭,并在复活节当天日出时重新开启。
- 技术实现:项目基于 Zigbee2MQTT 设备(如 Electrolama CC2652R1 控制器和兼容的智能灯泡),需要 Linux 环境和 Deno 运行时。用户需配置 MQTT 地址、灯泡 ID 以及地理坐标(用于计算当地日出时间)。
搭建步骤简要:
- 配置 Zigbee2MQTT 环境并注册灯泡。
- 创建 JSON 配置文件,包含 MQTT URL、灯泡主题和地理位置。
- 使用 Deno 运行不同模式(测试、日常自动运行或快速演示)。
项目背景:作者在神学院学习期间,受皇家珀斯医院旁圣玛丽大教堂每日根据日历更换灯光启发,将这一想法自动化并引入家庭。早期版本使用 IKEA 灯泡和 Python,但不稳定;当前版本更成熟。作者表示,灯泡已成为其日常礼拜的一部分,每天早上看到颜色会让他思考当日纪念的圣人或殉道者。
未来计划:支持更多教派日历(如其他圣公会省份或其他基督教派)。作者欢迎使用者通过 GitHub 反馈问题,并希望该项目能产生更广泛的教会使命意义。
30. Looo.lol – a binary math site (looo.lol)
Looo.lol – 一个二进制数学学习网站
目的
该网站旨在通过一种轻松幽默的方式(称为“shitposting”)教授二进制数学,帮助用户通过创建“有趣数字”来学习二进制数学概念。
结构
- 基础框架:网站基于HTML5构建,包含标准元数据,如字符集(utf-8)、视口设置(用于移动设备优化)和主题颜色(#000000)。
- 客户端渲染:使用延迟加载的JavaScript脚本(
/static/js/main.0f30a2e0.js)和CSS样式表(/static/css/main.119e5514.css),表明它是一个单页面应用(SPA),可能依赖React等前端框架,通过<div id="root">挂载动态内容。 - 外部资源:链接到favicon.ico、苹果触摸图标(logo192.png)和清单文件(manifest.json),支持渐进式Web应用(PWA)特性。
- 用户提示:包含
<noscript>标签,提醒用户启用JavaScript以运行应用。
关键功能
- 交互式学习:从描述推断,网站提供交互式内容,让用户通过实践操作(如制作数字)来掌握二进制数学,强调幽默和参与性。
- 技术实现:依赖客户端JavaScript处理用户交互和内容渲染,优化用户体验,确保跨设备兼容性。
- 应用支持:通过清单文件可能支持PWA功能,允许用户将网站作为应用添加到主屏幕。
总结
Looo.lol是一个以教育为目的的网站,结合幽默元素来简化二进制数学的学习过程,采用现代Web技术构建,注重移动友好和交互性。
31. Csvlens: Command line CSV file viewer. Like less but made for CSV (github.com)
Csvlens:命令行 CSV 文件查看器
Csvlens 是一个专门为 CSV 文件设计的命令行查看器,功能类似 less,但针对 CSV 格式进行了优化。
主要功能与使用方式
- 查看文件:通过
csvlens <文件名.csv>直接查看 CSV 文件。 - 管道输入:支持通过管道接收 CSV 数据,例如
<生成CSV的命令> | csvlens。
核心操作快捷键
- 导航:使用
hjkl或方向键滚动行列;Ctrl+F/B上下翻页;Ctrl+D/U半页滚动;Ctrl+H/L左右翻页;G/g跳转首尾;<n>G跳转至第 n 行。 - 搜索与过滤:
/<正则表达式>查找并高亮匹配内容;n/N跳转至下一/上一结果;&<正则>过滤行(仅显示匹配行);*<正则>过滤列(仅显示匹配列)。 - 视图调整:
TAB切换行/列/单元格选择模式;>/<增加/减少选中列宽度;Shift+↓/J按选中列排序;Ctrl+J按自然顺序排序。 - 标记与输出:
m标记/取消标记行;M清除所有标记;Ctrl+E将标记行(含表头)输出至标准输出并退出;y复制选中行或单元格到剪贴板;在单元格模式下按Enter可将选中单元格内容输出并退出。 - 其他:
-S切换行换行;f<n>冻结左侧 n 列;r重置视图;H/?显示帮助;q退出。
可选参数
-d <字符>:指定 CSV 分隔符(如-d '\t'),-d auto自动检测。-t, --tab-separated:使用制表符作为分隔符。-i, --ignore-case:搜索时忽略大小写(若搜索字符串含大写字母则无效)。--no-headers:不将首行视为标题行。--columns <正则>:默认显示匹配正则的列。--filter <正则>:默认过滤匹配正则的行(匹配任意列中的单元格)。--find <正则>:默认查找并高亮匹配正则的内容。--echo-column <列名>:在按Enter时输出选中行该列的值并退出。--prompt <提示信息>:在状态栏显示自定义提示(支持 ANSI 转义码)。--color-columns:以不同颜色显示各列。
安装方式
提供多种安装途径:
- 直接下载:从发布页面下载对应操作系统的压缩包,解压后执行二进制文件。
- 包管理器:
- macOS:通过 Homebrew 安装。
- Arch Linux:通过 pacman 安装。
- Windows:通过 winget 安装。
- FreeBSD:通过 pkg 安装。
- NetBSD:通过 pkgsrc 安装。
- OpenBSD:通过 ports 安装。
- Cargo(需 Rust 环境):使用
cargo install csvlens安装,或从源码构建(要求 Rust 1.88.0 或更新版本)。
库用法
Csvlens 也可作为 Rust 库使用:
- 在
Cargo.toml中添加依赖:csvlens = { version = "0.12.0", default-features = false, features = ["clipboard"] }。 - 通过
run_csvlens或run_csvlens_with_options函数调用,后者支持通过CsvlensOptions结构体自定义分隔符、忽略大小写等行为。
32. The Usefulness of Useless Knowledge (1939) [pdf] (www.ias.edu)
33. Comics I Loved in 2023 (riteshbabu.net)
本文回顾了2023年值得推荐的漫画作品,并探讨了漫画市场的现状。
作者首先指出,尽管2023年世界局势动荡,艺术创作环境艰难,但漫画作为艺术媒介依然涌现出许多优秀作品。作者强调,不应将漫画艺术媒介与以美国“直接市场”为主导的商业漫画混为一谈。直接市场长期以两大出版社的超级英雄IP漫画为核心,目前更显疲态,因其主要受众是不断老化的铁杆粉丝,难以吸引被电影、游戏等主流媒体培养出的新一代观众。然而,这并不意味着漫画艺术本身的衰落。
随后,作者详细推荐了多部2023年的杰出漫画,包括:
- 《Shubeik Lubeik》(Deena Mohamed):被作者誉为“年度最佳漫画”。这是一部设定在架空开罗的科幻故事,通过精湛的黑白绘画和形式创新,探讨阶级、资本主义和后殖民主义等深刻主题。
- 《20th Century Men》(Deniz Camp等):一部架空历史史诗,借用类型小说元素深刻批判帝国主义与西方中心思想,被视为直邮市场近十年的最佳作品之一。
- 《Rare Flavours》(Ram V等):围绕一位食人魔与一位导演的纪录片之旅展开,巧妙地将食物、文化与艺术创作的隐喻融为一体。
- 《Roaming》(Jillian Tamaki & Mariko Tamaki):讲述三位加拿大女性在纽约旅行的故事,细腻刻画了人际关系与文化身份之间的复杂差距。
- 《Monica》(Daniel Clowes):通过一系列风格化短篇故事,构建了一个充满cult气质、关于邪教与人生追寻的角色肖像。
- 《Mobilis: My Life With Captain Nemo》(Juni Ba):对尼摩船长这一经典角色的重新诠释,将其置于末日背景下,探讨失败、传承与人性。
- 《Disorder》(Erika Price):一部令非恐怖漫画爱好者也感到震撼的独立恐怖漫画,以其强烈的视觉冲击力和对肉体存在的恐怖刻画而脱颖而出。
- 《River’s Edge》(Kyoko Okazaki):描绘青少年残酷、迷茫与痛苦的戏剧,充满虚无主义却人性深邃。
- 《Blood Of The Virgin》(Sammy Harkham):一部关于1970年代好莱坞的漫画,展现了卓越的叙事和分镜技巧。
- 其他推荐作品还包括西部狼人题材的《Darlin’ and her Other Names》、描绘音乐的《Miles Davis and The Search For Sound》、关注亚裔家庭与超自然的《Night Eaters》、改编自韩国经典的《The Naked Tree》、回忆录《In Limbo》、漫画改编《The Monkey King》、冰球运动漫画《DOGSRED》等。
此外,作者还提及了《Bea Wolf》(儿童向改编)、《Hungry Ghost》(探讨饮食失调)、《The Second Safest Mountain》(视觉盛宴)等作品。对于直接市场,作者特别表扬了《Petrol Head》和《Somna》在单期艺术上的出色表现。
最后,作者列举了一些未能读到但期待的作品,并展望了2024年值得期待的新作,如《Lunar New Year Love Story》、《Dawnrunner》、《Man’s Best》、《The Gulf》和《Return To Eden》。
34. Ask HN: What are the "boring" businesses for hackers these days?
35. SSH-Snake: Automated SSH-Based Network Traversal (github.com)
SSH-Snake: 基于SSH的自动化网络遍历工具
核心功能 SSH-Snake 是一个强大的自动化网络遍历工具。它利用系统中发现的 SSH 私钥,自动进行网络遍历,旨在创建全面的网络及其依赖关系图,并评估从特定系统出发,仅通过 SSH 和 SSH 私钥能够将网络渗透到何种程度。
工作原理 该工具通过自动递归执行以下步骤:
- 在当前系统上搜索所有 SSH 私钥。
- 在当前系统上查找这些私钥可能被接受的所有主机或目标地址(格式为
user@host)。 - 尝试使用发现的所有私钥 SSH 连接到所有目标。
- 如果成功连接到某个目标,则在该新系统上重复步骤 1-3。
关键特性
- 完全无文件化与自传播:运行后,脚本通过标准输入和 SSH 参数传递到远程系统,不在目标系统上留下实质性文件证据(仅存在于进程树和大量 SSH 尝试日志中)。它本质上是一个能够自我复制和传播的“蠕虫”。
- 深度优先扫描:采用深度优先策略进行发现,连接到一个系统后,会先从该系统继续深入,然后才回溯。
- 智能防循环:能够检测系统是否已被扫描或正在扫描,避免因循环连接(如 A->B->C->A)导致无限递归。
- 轻量与兼容性:完全用 Bash 编写,依赖
bash,ssh,coreutils等常见工具,可在主流 Linux 和 macOS 系统上运行。 - 可扩展的发现策略:支持插件式模块,用于发现 SSH 私钥(例如从
.bash_history或常用目录中)和目标主机(从 IP 范围、最近登录记录、SSH 配置等)。大部分策略可按需开关。 - 权限提升:在可能的情况下,会自动使用
sudo提升至 root 权限。 - 输出与可视化:原始输出包含发现的私钥、目标和错误信息。提供工具可将输出生成为网络关系图进行可视化。还附带三个辅助 Python 脚本,用于分析输出日志,例如:正向/反向查找主机可达性、查找两个主机间的最短路径并生成连接命令。
使用方法
可以通过下载脚本或直接通过 curl 或 wget 管道到 bash 来运行:
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh
或者
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash
注意:Snake.nocomments.sh 是移除了注释和多余空格的版本,以确保脚本大小足够小,保持完全无文件化(避免 bash 创建临时文件)。
配置与文档
工具附带可配置的通用设置和发现策略,详细文档在 SETTINGS.md 中。输出格式的详细说明在 OUTPUT.md,示例输出见 example-output.log,图形可视化的创建和解释在 GRAPHICS.md 中。
限制
- 仅支持 IPv4。
- 默认假设 SSH 运行在端口 22。
- 依赖 GNU coreutils,未测试其他核心工具链。
- 当前不扫描 SSH agent socket。
适用场景 虽然主要设计用于渗透测试和网络侦察,但系统管理员也可用它来理解基础设施的依赖关系和 SSH 连接拓扑。
36. HortusFox – A self-hosted collaborative plant management system (github.com)
HortusFox – 自托管协作式植物管理系统
HortusFox 是一个自托管的协作式植物管理系统,允许用户在自己的环境中管理所有植物。系统支持添加植物详细信息与照片、分配位置、仪表盘概览、警告提醒、用户认证、任务管理、库存管理、日历、搜索、协作聊天及操作历史记录等功能,支持多用户协作管理。
主要功能
- 🪴 植物管理:添加和管理植物信息与照片。
- 🏠 自定义位置:设置并管理植物所处的不同环境位置。
- 📜 任务系统:创建和管理养护任务。
- 📖 库存系统:管理相关物资。
- 📆 日历系统:记录和跟踪相关日期。
- 🔍 搜索功能:查找植物和相关信息。
- 🕰️ 历史功能:记录用户操作历史。
- 🌦️ 天气功能:集成天气预报信息。
- 💬 群组聊天:支持多用户协作交流。
- 🔑 管理后台:用于系统设置与管理。
- 📢 提醒功能:发送任务提醒。
- 💾 备份功能:支持数据备份与恢复。
- 💻 REST API:提供接口访问。
- 🔬 植物识别:可集成外部服务识别植物。
安装方式
系统提供多种安装方法,包括 Docker、集成安装程序、手动安装和使用 AquaShell 脚本安装。
Docker 安装(推荐)
- 前提条件:安装 Docker 和 Docker Compose。
- 克隆仓库:
git clone https://github.com/danielbrendel/hortusfox-web.git。 - 编辑
docker-compose.yml文件,设置环境变量,包括:APP_ADMIN_EMAIL和APP_ADMIN_PASSWORD(管理员登录凭据)。APP_TIMEZONE(时区)。- 数据库连接设置(
DB_HOST,DB_DATABASE,DB_USERNAME,DB_PASSWORD等)。 - 可选的代理认证设置。
- 执行命令:
docker compose pull和docker compose up -d。 - 应用将在
http://localhost:8080运行。
手动安装
- 环境要求:PHP (>=8.3)、MariaDB (>=11.4)、Composer。
- 步骤:
- 克隆或下载项目,运行 Composer 安装依赖。
- 基于
.env.example创建.env文件并配置数据库连接、服务URL、邮件(SMTP)等参数。 - 执行数据库迁移命令创建表。
- 插入初始应用设置到数据库。
- 运行命令添加默认植物属性和日历类别:
php asatru plants:attributes和php asatru calendar:classes。 - 启动 Web 服务器。需要手动在数据库中创建第一个管理员用户(密码需哈希处理)。
系统要求
- PHP ^8.3
- MariaDB ^11.4
- 用于邮件发送的 SMTP 服务器
- 用于容器化部署的 Docker 和 Docker Compose(可选)
外部服务集成
某些功能依赖外部服务API:
- 天气预报:使用 OpenWeatherMap(需申请API密钥)。
- 植物识别:使用 Pl@ntNet API(需申请API密钥)。
- 植物信息查询:使用 Global Biodiversity Information Facility(无需额外密钥)。
- 图标:使用 FontAwesome Free。
技术栈
系统主要采用 PHP 和 MariaDB,前端使用 Vue.js 和 Bulma CSS 框架,依赖管理使用 Composer 和 npm,容器化使用 Docker,并提供了基于 AquaShell 的维护脚本。
37. The fall of Firefox: Mozilla's once-popular web browser slides into irrelevance (www.zdnet.com)
Firefox的衰落:曾经流行的浏览器逐渐边缘化
历史背景
- 1998年网景浏览器开源,催生Mozilla项目,2002年演变为Firefox浏览器。
- 2010年夏季Firefox达到市场巅峰,份额高达34.1%。
- 当时IE仍占据超过90%的市场份额,Firefox逐步获得用户青睐。
当前市场地位
- 根据美国联邦数字分析计划(DAP)数据,过去90天52.7亿次政府网站访问中:
- Chrome占据47.9%
- Safari占36.2%
- Edge占8.3%
- Firefox仅占2.2%
- Firefox份额持续下滑:2015年11%,2016年8.2%,2018年反弹至9%,2022年降至2.6%。
- IE已在2022年彻底退出统计。
衰落原因分析
Chrome的崛起
- 2008年谷歌重新定义浏览器,构建云端开放网络操作系统。
- 谷歌挖走Firefox核心开发者,导致Mozilla和微软措手不及。
- Chromium生态系统(包括Edge、Opera等)共占48.7%份额。
Mozilla反应迟缓
- 2017年Mozilla前CEO承认Firefox未能跟上市场需求。
- 许多忠实用户转向Chrome。
用户体验下降
- 用户抱怨包括:频繁删除功能、编码模式不佳、内存管理问题、隐藏的遥测数据。
- 开发者和普通用户均认为Firefox体验恶化。
Mozilla的财务与组织状况
- 谷歌依赖:2022年Mozilla总收入5.93亿美元中,5.1亿来自谷歌版税。
- 高管薪酬:CEO Mitchell Baker 2022年薪酬690万美元,较上年增加130万。
- 组织定位矛盾:Mozilla宣称“人民的网络”,但高度依赖谷歌资金,且高管薪酬与市场份额下滑形成对比。
未来展望
- Mozilla投资人工智能等次要领域,部分用户希望资金用于改善浏览器。
- 文章作者担忧Firefox可能最终消失,难以重现Phoenix时代的辉煌。
注:本文基于原文数据与观点整理,仅反映特定时间段的市场统计与用户反馈。
38. Revitalizing US Navy Shipbuilding (austinvernon.site)
美国海军造船业正面临效率低下、成本高昂的严峻挑战,但在东亚局势紧张的背景下,提升舰船建造能力至关重要。
现状与问题 美国拥有超过10万船厂工人,数量超过日本,但造船吨位远低于后者。其造船业长期受保护主义政策影响,专注于为政府建造少量昂贵舰船,生产效率低下。与日韩相比,美国建造同类驱逐舰(如阿利·伯克级)的成本高出近一倍,工期也更长。
高效率造船的关键特征 现代高效造船依赖:
- 模块化建造:在车间制作船体模块,再于干船坞组装。
- 严格公差与测试:确保部件精准配合,减少后期返工。
- 高度集群化:船厂与供应商高度集中,共享熟练劳动力与最佳实践。
- 精细化管理:从设计到生产全程注重细节,提升材料利用率。
美国造船业的核心缺陷
- 投资不足:政府合同不稳定且不重视成本,导致船厂缺乏投资现代化设备与工艺的动力。
- 缺乏集群效应:政治因素导致船厂分散,无法形成高效产业集群。
- 测试流程僵化:海军重文书认证、轻实际测试,抬高了成本并限制了供应商竞争。
- 规模经济缺失:产量过低,固定成本分摊至极少舰船,单价高昂。
改革方案 为提升战力与效率,文章提出以下方向:
一、重新设计舰船需求
- 专注单一任务:放弃“多用途舰船”思路,建造专注于防空、反潜或对陆攻击等单一任务的专用舰船。这将简化设计、降低成本、增加可建造舰船总数。
- 合理控制性能:
- 降低最高航速:航速要求对舰船设计影响巨大(功率与航速立方成正比),适当降低航速可大幅简化动力系统、节省空间与燃料。
- 采用混合电力推进:使用柴油发电机组与吊舱式推进器,取代复杂机械传动,提高可靠性与灵活性。
- 审慎使用雷达:雷达探测距离与功率呈四次方关系,装备中等性能雷达即可应对掠海导弹威胁,大幅节省成本、电力与空间。
- 加强基本防护:为舰船关键部位添加基本装甲(如保护传感器、动力舱),并设计防鱼雷/水雷的隔舱结构,提升战损生存能力。
- 大量采购廉价弹药:减少昂贵导弹(如高超音速导弹)的依赖,增加炮弹、炸弹和短程防空导弹的采购,以支持频繁训练并维持生产能力。
二、改革采购与建造流程
- 提升海军内部专业能力:培养内部舰船建造专家,以制定更合理的规格要求、监督建造过程并管理供应商。
- 限制设计变更:在建造前完成详细设计,避免昂贵的变更单。
- 强调功能测试:用严格的部件测试取代繁琐的文书认证,尽早发现缺陷,并鼓励更多供应商竞争。
- 缩短舰船服役年限:从计划使用30-40年缩短至10-15年,避免耗资巨大的中期升级,通过频繁换新保持技术先进性并刺激造船需求。
- 采用迭代式舰级发展:以小型舰级(如2-3艘)逐步引入新技术,降低项目风险。
- 推广部件模块化与复用:将推进系统、居住舱、电子武器系统等设计成标准模块,简化船厂组装工作,降低对单一供应商的依赖。
- 允许船厂破产重组:通过引入竞争与固定价格合同,让管理不善的船厂自然淘汰,同时为更高效的船厂创造市场空间。
核心理念 所有这些改变都旨在最大化竞争、简化舰船设计、提升建造效率。其根本在于让海军军官走出办公室,深入船厂与工厂,积累专业知识,从而做出更优权衡。最终目标是让美国能以接近现有预算,建造出数量更多、战力更强且更具生存能力的舰队。
39. Age Verification Is Incompatible with the Internet (www.jonaharagon.com)
年龄验证与互联网不兼容
文章指出,美国多州推动的网站数字年龄验证措施存在严重问题,其核心在于将个人身份与网络活动绑定,这与互联网的隐私本质相悖。
核心问题:隐私与安全风险
- 侵犯隐私:年龄验证常要求用户向第三方或网站上传身份证件等个人身份信息,这违背了“隐私设计”原则,使互联网变得更不安全。
- 安全威胁:要求在线传输个人身份信息会大幅增加身份盗窃的风险。作者质疑,即使政府都难以保障数据安全,却指望成人网站做到,这本身就不现实。
实施困境与全球趋势
- 行业抵制:如Aylo公司(拥有Pornhub等网站)为避免承担数据安全责任,直接屏蔽了蒙大拿等州的用户。他们并非欢迎未成年用户,而是认为在线强制执行验证不可能。
- 无效与转移:互联网具有全球性,过度监管本地公司只会将用户推向监管更宽松的境外网站,使法规形同虚设。
- 全球蔓延:欧盟等西方立法者也正将年龄验证视为“儿童网络安全”的共识方案,将其扩展至大型在线平台。
备受推崇的“设备端验证”方案及其隐患
- 方案描述:由手机操作系统(通过数字钱包等)独立验证年龄,再向网站分享验证状态,理想情况下可采用“零知识证明”(网站只知道验证通过,不获取具体信息)。
- 现实性质疑:政府极可能采用更中心化、更侵入性的验证系统,而非保护隐私的零知识方案。
- 更深层的危害:
- 强化垄断:此方案将使苹果、谷歌、微软等科技巨头成为互联网的终极“守门人”。
- 数字版权管理(DRM)化:竞争对手,特别是开源软件,必须整合这些巨头的专有验证方案才能提供基本功能,这会扼杀创新,减少用户选择,将互联网变成一个由大公司把控的“数字围墙花园”。
- 功能受限:当前,隐私优先的机构(如Mozilla)已不得不妥协运行专有DRM来访问流媒体内容;完全开源软件则无法访问。年龄验证若嵌入操作系统,将极大加剧这种分裂。
潜在滥用与未来风险
- 范围蔓延:一旦系统建立,政府和企业会将其用于远超最初目的的地方。保守团体可能推动其应用于性教育、心理健康等常规资源。
- 压迫工具:压迫性政权可借此轻松限制青年活动家、边缘群体获取关键网络资源。
- 功能扩张:系统可轻松扩展以验证地址(用于地理封锁)、身份等其他信息。
- 国际前车之鉴:韩国等国的互联网审查往往始于对色情内容的限制,后大幅扩张,这为美国等西方国家敲响了警钟。
结论
文章最终指出,年龄验证本身并非解决方案。与其将家长责任外包给政府并构建最终会对抗用户、控制内容访问的侵入性系统,不如让家长自身承担教育子女辨别网络内容的责任。避免构建此类系统,是防止互联网走向封闭和控制的唯一途径。
40. Carta doing unsolicited tender offer outreach to their customers' investors (twitter.com)
摘要
Twitter用户Karri Saarinen(Linear的创始人)发布推文,指控股权管理平台Carta正在对其客户的投资者进行未经请求的要约收购外联。他指出,Carta作为被初创公司信任来管理股权结构表(cap table)的平台,现在却私下联系客户的天使投资者,向他们推销将所持公司(如Linear)的股份出售给Carta买家的方案。
这种做法引发了信任危机。作为创始人,他感到不满,认为这破坏了与平台之间的信任关系。该推文暗示,Carta的这一行为可能标志着其作为初创企业可信平台的终结。
41. The Perils and Pleasures of Bartending in Antarctica (2017) (www.atlasobscura.com)
《南极调酒师的危险与乐趣》(2017) 文章内容摘要
根据所提供的网页标题,本文旨在探讨在南极洲从事调酒师工作的独特体验,内容预计将涵盖两个主要方面:
工作的挑战与危险:文章可能描述在南极洲极端环境下工作的诸多不便,例如物资供应困难、与世隔绝的孤独感、严酷的自然条件以及可能面临的心理压力。
工作的独特乐趣:文章可能同时介绍这份工作带来的非凡价值,比如为科考站人员提供关键社交和精神慰藉、见证极端环境下的特殊人际关系、以及在一个独一无二的地点工作的深刻人生经历。
然而,用户提供的实际内容并非文章正文,而是访问网页时遇到的 Cloudflare 安全验证页面。该页面包含技术性脚本和挑战验证流程,没有包含文章本身的任何实质性内容。因此,无法对文章的具体细节、案例、引述或结论进行有效总结。
结论:基于可见的标题,可以推断文章主题;但根据提供的具体网页内容,无法生成关于原文具体信息的总结。
42. Ask HN: If I buy a physical book why is the eBook not free?
43. Focus and Flow: trade-offs in programmer productivity (2021) (www.aaronbuxbaum.com)
程序员生产力的权衡:专注与心流状态
文章探讨了程序员追求生产力的两种主要方法——心流状态与番茄工作法,并分析了它们各自的利弊。
心流状态指完全沉浸于活动中的状态,时间感消失,效率极高且不易感到疲惫。然而,这种状态本质上是非协作的,不适用于需要即时沟通(如查看Slack或结对编程)的场景。此外,若初始设计或概念有缺陷,长时间沉浸其中可能导致效率浪费。
番茄工作法(25分钟专注+5分钟休息)是一种刻意打断心流的方法,主张分段工作以获得更好效果。其优点是能强制聚焦,减少分心,长期来看可能完成更多工作。缺点是休息时动力易重置,容易在开始下一个番茄钟前被其他事务(如邮件)干扰。
文章指出,番茄工作法有助于对抗浅层工作——即占用大量时间但价值有限的任务(如频繁处理邮件和消息)。这些行为会带来短暂的“多巴胺奖励”,让人误以为有生产力,实则分散深度工作的精力。
基于经验,作者提出了以下实用建议以提高程序员生产力:
- 关闭通知:在手机和电脑上关闭除关键警报(如PagerDuty)外的所有提示音。
- 关闭应用角标:避免邮件、消息应用上的红色未读标记分散注意力。
- 筛选注意力吸引点:谨慎保留必要通知(如Slack提及提醒),但倾向于关闭。
- 批量处理沟通:定时(如每30-60分钟)集中处理Slack和邮件,而非随时查看。
- 谨慎使用异步沟通:避免用简短邮件或消息踢皮球式转移责任,优先使用项目管理工具(如Asana)进行工作相关沟通,以减少对他人注意力的干扰。
- 沟通个人专注习惯:告知团队自己的“忙碌”状态标识(如Slack状态或物理标志),明确沟通预期。
- 使用番茄工作法:在25分钟内专注单一任务,偏离时拉回注意力;可尝试与结对编程结合,轮流担任驾驶角色以维持双方专注。
总体而言,文章建议程序员在追求生产力时,应权衡个人专注心流与协作打断的利弊,并通过管理沟通习惯、采用分段工作法来提升深度工作效率。
44. Pikchr: A PIC-like markup language for diagrams in technical documentation (pikchr.org)
Pikchr:用于技术文档图表的PIC类标记语言
Pikchr(发音同"picture")是一种类似于PIC的标记语言,专为技术文档中的图表而设计。它旨在被嵌入到Markdown的围栏代码块中,或其他类似文档标记语言的机制中。
Pikchr图表可以出现在文档、Wiki页面、工单与缺陷报告、论坛帖子、提交注释以及任何使用Markdown或类似标记语言的地方。该语言简单易用,对于熟悉Markdown的用户来说,上手所需的额外努力很小。Pikchr对于面向互联网的应用是安全的,恶意的Pikchr脚本不会造成危害(除了可能生成难看的图表)。
Pikchr图表易于生成。其语法简洁,并有丰富的在线文档和示例。例如,一个展示Pikchr自身处理流程的图表仅由7行Markdown代码生成。
文档与资源:
- 目的与范围、用户手册、语言规范以及与PIC的差异等。
- 提供从Markdown中调用Pikchr和从源码构建Pikchr的指南。
- 包含SQLite语法图的使用案例。
- 提供历史PIC文档的副本链接。
- 源码下载、构建及集成说明。
集成与扩展: Pikchr已被集成到多种工具和平台中,例如:
- Go语言移植版(由Zellyn Hunter开发)。
- mdBook预处理器
mdbook-pikchr。 - IntelliJ系列IDE的支持插件。
- Kroki.io图表渲染服务。
- 第8编程语言、Node.js模块、Pandoc的Lua过滤器、Obsidian知识库应用(Adamantine Pick)以及命令行预处理器工具
pikchr-cmd等。
源码许可:
Pikchr源代码是独立原创作品,除标准C库外无外部依赖,不使用来自互联网的外部代码。其源代码采用零条款BSD许可证发布。经过Lemon处理后,Pikchr源代码是一个名为 pikchr.c 的单个C89文件。这些特性旨在使Pikchr易于集成到其他系统中。
45. P2pcf: P2P WebRTC via Cloudflare Workers (github.com)
P2PCF: 基于Cloudflare Workers的P2P WebRTC信令方案
核心概述
P2PCF是一个免费或低成本的无服务器WebRTC信令库。它利用Cloudflare Workers处理信令逻辑,并使用Cloudflare R2存储桶保存状态,旨在让用户无需维护复杂的信令服务器即可部署WebRTC应用。API设计受P2PT启发,但避免了使用可能不稳定的WebTorrent跟踪器。
主要特性
- 低成本与免费额度:核心目标是让信令层免费。作者提供了一个公共Worker供开箱即用(有配额限制),用户也可在几分钟内轻松部署自己的私有Worker。
- 房间化连接管理:通过
client_id和room_id进行键控,方便管理对等连接。 - 高效信令:
- 初始信令仅需1-2条消息。
- 后续信令(如重协商)通过已建立的WebRTC DataChannel进行,不再依赖云资源。
- 可靠的数据传输:内置对超过16KB限制的DataChannel消息进行高效分块和传输的功能。
- 简化的API:返回的对等连接对象是
tiny-simple-peer实例,提供了添加/移除媒体轨道等简单接口。
基本用法
- 安装与引入:通过npm安装
p2pcf包。 - 初始化:创建
P2PCF实例,传入客户端ID、房间ID以及可选的配置。- 可选配置包括:自定义Worker地址、STUN/TURN服务器、各种轮询间隔(控制连接状态检测的频率和能耗)等。
- 开始与事件监听:
- 调用
start()开始轮询以发现对等方。 - 监听
peerconnect、peerclose、msg事件来处理对等方连接、断开和接收消息。 - 在
peerconnect回调中,可以操作peer对象,例如添加本地媒体流、监听对方的轨道或直接发送数据。
- 调用
- 通信:使用
broadcast()向房间内所有对等方广播消息,或使用send()向特定对等方发送消息(数据为ArrayBuffer)。 - 销毁:通常页面切换即可,也可显式调用
destroy()停止轮询并关闭连接。
云资源用量估算(免费层)
- Cloudflare Workers:提供约每月300万次免费请求。信令主要通过HTTP轮询实现,并在房间空闲时退避。
- Cloudflare R2:免费层包含每月100万次写入和1000万次读取。
- 每个新对等方加入至少进行1次R2写入(在最坏情况下,如对等方均在对称NAT后,可能达到N+1次写入以建立初始DataChannel)。
- 客户端每90秒发送一次心跳以保持活跃,这会产生额外的写入。
- 后续重协商通过DataChannel进行,不产生额外的R2写入。
- 结论:这些免费额度足以支持大多数中小型WebRTC应用的信令需求,无需依赖公共信令服务器。
46. The journey of the Roman gladius and other swords (acoup.blog)
罗马短剑的演变与欧洲剑传统
罗马短剑(gladius)的起源可追溯至欧洲La Tène剑传统,该传统本身发展自哈尔施塔特(Hallstatt)时期的青铜剑。La Tène剑以铁制为特征,采用方形横截面剑舌(tang)结构,剑身较短,适合刺击。早期La Tène剑(约公元前500-300年)剑刃长50-65厘米,带有尖锐的刺击尖端,护手、握柄和剑首由有机材料(如木材)制成,通过剑舌末端的“盘状按钮”固定。
La Tène剑在不同地理区域传播并演化:
- 在高卢和多瑙河地区(La Tène文化核心),剑逐渐变长,形成中期La Tène剑(约公元前3-2世纪),剑刃长60-75厘米,边缘更平行,尖端略圆,注重劈砍功能,反映了冶金技术的进步和无甲战斗环境。
- 在意大利,罗马人在公元前4世纪采用了早期La Tène剑,取代了希腊式剑。拉丁语“gladius”一词可能源自凯尔特语借词,标志着这种剑跨越文化边界。
- 在西班牙,凯尔特伊比利亚人改造了早期La Tène剑,形成独特变体:剑刃长55-65厘米,采用两点环悬挂系统,剑身略有“腰部”收窄,这成为罗马短剑的前身。
罗马人在公元前3世纪末至公元前2世纪采用了西班牙变体的La Tène剑,称为gladius Hispaniensis(西班牙短剑)。该剑典型剑刃长60-70厘米,总长约75-85厘米,具有轻微腰部收窄,兼具劈砍和刺击功能,适合罗马军团面对多样敌人(如高卢人、希腊人等)。考古证据显示罗马短剑广泛分布于地中海地区,甚至与La Tène剑共存。
帝国时期(约公元1世纪),gladius演变为Mainz类型(剑刃长40-55厘米,更宽,适合刺击)和Pompeii类型(剑刃长42-50厘米,平行边缘)。这种缩短和加宽的设计是对威胁环境变化的回应:罗马军团主要面对其他重甲罗马士兵(如身穿锁子甲),短剑更利于控制尖端刺击破甲或攻击暴露部位(如面部)。
与此同时,La Tène剑在罗马之外继续发展为spatha(长剑),剑刃长75-95厘米,平行边缘,多为劈砍设计,最初用于骑兵,后逐渐用于步兵。spatha源自中晚期La Tène剑,反映了凯尔特地区冶金技术的进步和无甲战斗环境。
三世纪后,罗马剑融合了gladius和spatha的特点,出现Straubing/Nydam类型(剑刃长65-80厘米)和Lauriacum/Hromowka类型(剑刃长55.7-65.5厘米)。这些剑采用方形剑舌和双凹槽设计,适应了新的威胁环境:罗马军队面对更轻装的外敌(如日耳曼人),因此重新转向较长、更注重劈砍的剑。至四世纪,罗马spatha与边境“野蛮人”剑趋同,奠定了欧洲“迁移时期”剑的基础。
文章强调了两个核心观点:
- 武器设计响应威胁环境进化:La Tène剑在不同地区因战斗需求(如凯尔特无甲战斗、罗马重甲对抗)而调整长度和功能。
- 文化交换在武器发展中的关键作用:La Tène剑跨越凯尔特、罗马、伊比利亚等文化边界,被模仿和改造,形成共同传统。
最终,La Tène剑的方形剑舌结构成为欧洲剑传统的核心特征,其演变体现了军事需求与跨文化互动的动态过程。
47. Genetic variants for male bisexuality, risk-taking linked to more children (news.umich.edu)
摘要
提供的HTML内容并非一篇完整的文章,而是一个用于访问验证的中间页面(由Cloudflare等安全服务生成)。其主要目的是在允许用户访问目标网页(标题暗示为《与更多后代相关的男性双性恋、风险承担遗传变异》)之前,执行安全检查。
页面结构与关键功能:
- 目的:该页面是一个“挑战页面”,用于验证用户浏览器是否启用了JavaScript和Cookie,以防止自动化爬虫访问。它不是目标研究文章本身。
- 主要内容:
- 页面显示一个简洁的提示信息:“Enable JavaScript and cookies to continue”(启用JavaScript和Cookie以继续)。
- 包含一个较长的JavaScript脚本块,该脚本负责加载并执行Cloudflare的挑战平台,以完成实际的人机验证。
- 设置了严格的内容安全策略(Content Security Policy),限制了脚本、样式、图片等资源的加载来源,主要允许来自
challenges.cloudflare.com的相关资源。
- 技术细节:
- 自动刷新:
<meta http-equiv="refresh" content="360">标签指示浏览器在360秒后自动刷新页面。 - 脚本执行:主脚本使用了一个随机的
nonce值来安全地加载挑战脚本。脚本中包含了复杂的、用于与Cloudflare挑战平台交互的配置参数。 - 历史记录管理:脚本会暂时替换浏览器的历史记录,将URL修改为包含挑战令牌的版本,在验证完成后恢复原始URL。
- 自动刷新:
- 总结:这是一个典型的、技术性的访问控制网关页面。其核心结构围绕安全策略、验证脚本和用户提示构建,最终目的是确认访问者是合法用户,而非自动程序,之后才会重定向至目标文章页面。
48. History of the Graphical User Interface (GUI): A Wonderful Curse [video] (www.youtube.com)
49. Teaching C (2016) (blog.regehr.org)
教授C语言课程(2016年)摘要
文章的核心观点是,教授C语言需要平衡两个方面:帮助学生理解C语言为何在关键软件基础设施(如操作系统和嵌入式系统)中占据主导地位,同时也要正视其在计算机安全漏洞中扮演的关键角色。
教学资源与语言版本
- 推荐书籍:基础阶段推荐《K&R》和《C Programming: A Modern Approach》;高级阶段推荐《Expert C Programming》和《The Practice of Programming》;《Modern C》对未定义行为的讲解尤为出色。《C FAQ》也有大量优质内容。
- 补充阅读:必须阅读Chris Lattner及作者关于未定义行为的文章。
- 语言版本:建议教授C99和C11的公共子集,无需在初级课程中深入C11的高级特性(如并发内存模型)。
教学目标与核心内容
理解C的定位:学生应能判断“C语言是否适合解决特定问题”。教学需包含C在现代世界中的地位,并通过阅读高质量代码来体会。
- 代码示例:推荐分析Redis、Musl或Xv6的源码。Musl尤其适合教学,因其函数小巧独立,便于讨论可移植性、效率、可维护性等工程权衡。
- 工具辅助:可使用编译器探索工具(如Matt Godbolt的Compiler Explorer)查看不同编译器生成的代码,理解C轻量运行时的优势。
接触现实中的C代码:也需要学习一些“糟糕的旧C”代码(如OpenSSL、PHP解释器或glibc中的示例),以理解现实工程约束(如兼容老旧编译器和系统)与理想情况的差距。
重点强调:规避C的缺陷
C语言缺陷众多,教学必须强调防御性编程和工具使用。
静态分析:
- 必须使用严格的编译警告标志(
-Wflags)。 - 使用更强的静态分析工具(如Clang静态分析器)。
- 必须使用严格的编译警告标志(
动态测试:
- 学生提交的代码必须通过AddressSanitizer (ASan)、UndefinedBehaviorSanitizer (UBSan) 和 MemorySanitizer (MSan) 的检查。
- 可尝试更严格的工具(如tis-interpreter)。
- 必须结合代码覆盖率工具(如gcov)来检验测试的完整性。
教授未定义行为:
- 使用sanitizer教学是高效的方式。
- 也应花时间讨论未定义行为的实际后果,但这需要更高的思维层次,学生可能难以全面掌握。
错误处理:C语言无法隐藏错误,因此是教授错误检测与处理(例如实现
goto错误处理链)的绝佳环境。
作业设计与评估
- 作业内容取决于课程目标、学生背景(年级、先修知识)和课程在整体培养方案中的位置。作者通常将C作为教授操作系统、嵌入式系统等课程的组成部分。
- 领域示例:图像处理、密码学算法、数据结构。
- 构建系统与版本控制是必备技能,应纳入教学。
- 评估策略:
- 可以选择向学生公开用于评分的测试基础设施,增加乐趣和透明度。
- 也可以只提供部分测试用例,将关键测试和模糊测试工具保留自用。这种做法虽增加学生压力,但更贴近现实。
对现有教学的批评与课程意义
- 批评:许多C语言课程教学内容过时(如滥用预处理器),最严重的缺陷是未向学生明确解释他们与编译器之间的“契约”——即未定义行为。以《计算机系统:程序员的视角》一书为例,其关于有符号整数溢出行为的描述是错误的。
- 课程意义:尽管C可能不适合作为第一门编程语言,且未来可能被逐步替代,但大量现有C代码仍需维护数十年。更重要的是,学习C所掌握的底层系统编程知识本身至关重要,即使在C被替代后依然有价值。
50. A week with a Ford F-150 Lightning (arstechnica.com)
文章标题:A week with a Ford F-150 Lightning
核心内容摘要:
本文记录了作者在华盛顿特区对福特F-150 Lightning电动皮卡进行为期一周的深度体验,并围绕其市场定位、实际使用感受及个人结论展开分析。
1. 市场与价格背景: F-150 Lightning面临着复杂的舆论环境:一方面被视为促使美国人转向电动车的聪明之举,另一方面也被质疑为昂贵且滞销的“白象”。尽管2023年经历了生产暂停,福特仍售出了约40,000辆。测试车辆为价格高昂的Platinum顶配版(标价97,374美元),但指出近期价格调整及7,500美元补贴可使2024款车型大幅降价。价格是许多人关注的主要问题之一。
2. 城市使用中的尺寸挑战: 作者指出,这款电动皮卡的庞大尺寸(长237英寸/约6米,宽80英寸/约2米,不含后视镜)在华盛顿特区的密集城区环境中显得格格不入。停车时占据整个车位,在车流中也过于醒目,容易遮挡后方视野。作者坦言,在测试周内从未使用过货箱或前行李箱(frunk),其庞大的体积对其城市生活需求而言是多余的。然而,在北弗吉尼亚的郊区多车道道路上驾驶时,体验则舒适得多。
3. 驾驶与技术体验:
- 易用性: 车辆的技术体验“并非噩梦”。信息娱乐系统依赖大尺寸触摸屏,但界面在行驶中易于操作。无线Apple CarPlay(及Android Auto)功能良好,且Apple Maps能整合车辆电量状态进行导航。
- 驾驶辅助: 在高速公路上,福特的BlueCruise免提驾驶辅助系统使长途驾驶更为轻松。
- 单踏板模式: 在城市低速行驶(限速20英里/小时)时,单踏板驾驶模式有助于保持平稳。
4. 充电体验: 充电过程出乎意料地顺畅。车辆支持“即插即充”功能(ISO 15118协议),在Electrify America充电站无需刷卡或使用App。作者的一次实测中,从46%充至86%耗时32分钟,消耗约59度电,费用为4.32美元。福特为每辆Lightning赠送的250千瓦时免费充电额度也提升了初期使用体验。
5. 效率与续航: 受其皮卡造型和巨大迎风面积影响,车辆效率不高。作者一周平均能耗为2.2英里/千瓦时(约28.2千瓦时/100公里)。据此计算,其131千瓦时(可用)电池组的满电续航略低于290英里。
6. 对比与结论: 作者将Lightning与同价位的Rivian R1T进行比较,认为Rivian尺寸更小、外观更不具威胁性、效率与续航更佳,且价格接近。因此,顶配Lightning的竞争力显得较弱。 最终,作者明确指出自己并非目标用户:他生活在城市,对皮卡没有实际需求和文化情感连接。他认为,对于真正需要一辆皮卡(且不重度依赖牵引拖曳功能)的用户而言,选择Lightning的性价比更高的中低配车型,可能会在其更擅长的郊区或工作场景中,发现它是一辆“相当不错”的电动皮卡。