2024-09-09

47 篇热帖

1. Synthetic diamonds are now purer, more beautiful, and cheaper than mined (worksinprogress.co)

实验室培育钻石:技术、市场与前沿应用

核心优势

钻石是碳的三维晶体同素异形体,具备极高硬度、导热性与化学惰性。天然钻石形成需数十亿年,开采成本高且多杂质。实验室培育钻石不仅更纯净、美观、廉价,还能定制物理与光学特性,已在工业和珠宝领域占据主导地位。

核心制造技术

高温高压法 (HPHT)

1954年通用电气首次利用压机成功合成钻石。该技术模拟地幔环境,在5-7 GPa压力和1300-1800°C高温下,利用金属溶剂催化石墨溶解,使碳原子在晶种上沉淀生长。通过控制氮、硼等杂质或引入晶格缺陷,可精准制造黄、蓝或粉色钻石。

化学气相沉积法 (CVD)

CVD法无需极端高压。在真空室中加热甲烷与氢气,利用微波将氢气分解为原子氢。原子氢可抑制石墨形成,促使甲基自由基中的碳原子在晶种表面逐层沉积。1980年代日本科学家公开了原子氢加速生长技术,使CVD法因设备成本低、易控制,成为生产大颗粒宝石级钻石的主流。

鉴定与珠宝市场变革

纯净的实验室与天然钻石物理化学性质相同。鉴定主要依靠检测氮杂质、金属催化剂或石墨包裹体,以及分析生长纹理(HPHT呈多向生长,CVD呈层状)。 实验室钻石打破了天然钻石“稀缺与财富”的营销神话。随着价格骤降和切割工艺提升,其在订婚戒指市场的份额正快速超越天然钻石,使钻石逐渐回归装饰本质。

工业与前沿应用

工业用钻石多依赖实验室培育,其可控的纯度与规格使其性能远超天然钻石:

  • 切削与钻探:制造锯片、磨料及石油钻探用聚晶金刚石钻头。
  • 光学材料:凭借高透光与极佳导热性,用作高功率激光器窗口和散热片。
  • 半导体:具备超高热导率、宽禁带和高载流子迁移率,适用于极端环境与高压高频芯片。当前技术挑战在于晶圆尺寸受限、成本高昂及室温下n型掺杂困难。

结论

实验室钻石的成功证明,人类通过科学方法能够制造出比自然界更优越的材料,彻底打破了“天然即完美”的传统迷思。

3. ESPN AI recap of Alex Morgan’s final professional match fails to mention her (awfulannouncing.com)

ESPN在其AI生成的比赛摘要中,遗漏了美国足球传奇人物亚历克斯·摩根职业生涯最后一场专业比赛的相关信息。摩根在周日圣迭戈浪潮队1-4负于北卡罗来纳勇气队的比赛中上场15分钟并主罚点球,赛后她在中场脱下球鞋,泪洒现场向球迷致意告别,场面感人。

然而,ESPN生成式AI服务于当晚8:52发布的215字摘要中,只概述了比赛结果、进球过程及球员肯尼迪·韦斯利的表现,却只字未提摩根及其退役这一重要事件。尽管ESPN此前声明每篇AI生成的摘要都会经过人工编辑审核以确保质量与准确性,但此次审核显然未能发现关键信息的缺失。

ESPN后来在其他平台发布了由记者撰写的、专门聚焦摩根及其告别之夜的文章,但该文仅位于AI摘要的侧边栏,容易被忽视。ESPN表示,AI生成摘要旨在“增强对服务不足的体育项目的报道,提供此前无法获得的内容”。但文章质疑,若AI报道因忽略重大事件而无法完整讲述故事,其提供的价值将大打折扣。

6. Breaking Down OnlyFans' Economics (www.matthewball.co)

OnlyFans 经济学分析总结

公司地位与财务表现

OnlyFans(Fenix International)是目前最成功的英国公司之一及极具影响力的创作者经济平台。2024年其总营收达63亿美元,较五年前的3亿美元大幅增长,2023财年营收同比增长19%。尽管以订阅制为基础,但目前超60%的消费者支出来自高客单价的附加交易,交易支出贡献了88%的总增长。其三分之二的营收来自美国用户。

增长驱动力

平台的快速增长得益于品牌知名度的提升、名人的加入、监管导致传统色情平台内容缩减,以及Reddit和Tumblr等社交平台对色情内容的禁令。这些社交平台实际上成为了OnlyFans低成本获客的“前门”,且未对其引流行为进行严格限制。

创作者经济与收入分配

OnlyFans 避开应用商店抽成,为创作者提供高达80%的营收分成,2023年共向创作者支付53亿美元。然而,平台收入呈现极度集中的分布:前10%的创作者获取了约73%的收入,而普通创作者年均毛收入仅约1800美元。顶级创作者通过分层订阅、付费私信等策略最大化收益,粉丝实质上更多是在为“准社会关系”和情感连接付费,且部分顶级账号的私信回复实际由团队代劳。

盈利能力与运营效率

2023年,OnlyFans实现13亿美元净营收和6.49亿美元营业利润(营业利润率高达50%)。公司运营极其精简,2023年平均仅有42名员工,人均创收和人均利润远超主流科技巨头。自2019年以来,公司已向所有者累计派发11亿美元股息。

竞争格局与未来挑战

尽管面临众多提供更高分成的竞争对手,OnlyFans凭借其庞大的双边市场网络效应依然保持稳固。但未来主要面临两大潜在挑战:

  1. X平台(原Twitter)的竞争:X于2024年解除了色情内容禁令,并推出了付费订阅和付费消息功能,直接切入该领域。
  2. 生成式AI的冲击:AI技术(图像、视频及个性化代理)可生成高度逼真的虚拟创作者。相比由团队代聊的真人,AI创作者能提供全天候、多语言且完全定制化的服务,甚至可能在互动中显得更具“真实性”,从而改变用户对真实与虚拟内容的需求偏好。
7. Swimmable Cities (www.swimmablecities.org)

“可游泳城市”倡议摘要

“可游泳城市”是一项旨在提升全球社区宜居性与韧性的全球倡议。该倡议于2024年巴黎奥运会前发布宪章,目前联盟已扩展至37个国家的116个城镇,涵盖237个多元化组织。

核心发展与活动:

  • 实践社区: 基于2025年鹿特丹首次峰会的成功,倡议成立了实践社区,目前支持五大洲的54个市政当局。
  • 咨询服务: 为城市游泳基础设施提供创新的战略、政策和融资咨询服务。
  • 合作伙伴关系: 寻求价值一致的组织成为机构、金融、企业、知识或技术伙伴。同时设有孵化、企业及媒体等合作模式。
  • 参与途径: 组织可签署宪章加入联盟、加入实践社区或参加定制工作坊。
  • 重要会议:
    • 2025年鹿特丹峰会: 首届全球峰会,汇集20多个国家的代表,推动清洁城市水道投资。
    • 2026年巴塞尔欧洲论坛: 主题为“使城市可游泳:城市战略、水安全与滨水伙伴关系”。
    • 2027年渥太华-加蒂诺峰会: 全球领袖将齐聚加拿大首都地区,加速行动并催化投资。

核心价值观与使能条件: 倡议以十大价值观为基础,涵盖游泳权、自然权(一体化健康)、城市游泳文化、水的神圣性。使能条件包括改写规则(政策)、民主参与、重建与韧性等。共享益处强调新经济机遇以及共享福祉、文化与知识。下一代价值观则聚焦于对当下、明天及未来世代的管护

长期目标(“30 by ‘30”愿景):

  • 3 by ‘30: 举办可游泳城市峰会(2025年鹿特丹,2027年北美,2029年欧洲)。
  • 30 by ‘30: 建立灯塔可游泳城市,树立基准并分享解决方案。
  • 300 by ‘30: 培育下一代(有抱负的)城市,开启“可游泳性”之旅。
  • 3000 by ‘30: 扩大宪章签署者网络,凝聚全球力量。

全球网络: 联盟由城市游泳环境设计、政策、公共卫生、水质恢复等领域的专家共同推动。已吸引包括巴黎、伦敦、鹿特丹、墨尔本、渥太华等18个市政当局,以及众多社区团体、大学、企业和个人(如联合国海洋事务特使刘易斯·皮尤等)签署宪章。倡议灵感源自联合国生态系统恢复十年,并借鉴土著声音与自然权利理念。

8. Charging lithium-ion batteries at high currents first increases lifespan by 50% (www.eurekalert.org)

研究发现:锂离子电池首次高电流充电可延长寿命50%并大幅缩短充电时间

一项发表于《Joule》期刊的研究表明,锂离子电池在出厂前进行首次充电时,采用异常高的电流,能够平均延长其使用寿命50%,同时将初始充电时间从10小时大幅缩短至仅20分钟。该研究由SLAC-斯坦福电池中心、丰田研究院、麻省理工学院和华盛顿大学的团队合作完成。

关键发现与机理:

  • 核心效果:高电流首次充电显著提升了电池性能。实验中,电池的首次充电使约30%的锂被“失活”,远高于传统方法的9%。
  • “SEI”保护层的关键作用:首次充电过程中,会在负极表面形成一层称为“固态电解质界面”的柔性保护层。虽然这会导致部分初始锂被消耗,但形成的SEI层能保护负极免受后续副反应的影响,从而整体上减少锂的长期损失,延长电池循环寿命
  • 高电流的优化原理:研究使用科学机器学习分析发现,充电电流和温度是决定SEI层质量和电池寿命的两个最关键因素。高电流充电虽然前期失活更多锂,但这为电极提供了更多“空间”,使其后续充放电循环更高效,类似于“先舀出一些水,防止在搬运途中溅出”。

研究方法与意义:

  • 研究团队利用科学机器学习从众多影响因素中精准定位了电流和温度的关键作用,超越了传统的试错优化方法。
  • 这一发现对电池制造业具有重要的实践价值。当前的形成充电过程耗时且成本高昂,新方法能同时提升生产效率(加快30倍)与产品性能
  • 该研究为理解电池制造的关键步骤提供了通用方法,其发现可能被应用于未来新的制造工艺、设备和电池化学体系中。

此项研究是SLAC可持续性研究的一部分,旨在利用实验室的独特工具和产业合作,使能源转型的关键技术更加经济可行。

11. The muscular imagination of Iain M. Banks: a future you might want (www.robinsloan.com)

Iain M. Banks与“文明”系列科幻小说

核心主题与“文明”设定

文章高度评价了Iain M. Banks的“文明”(Culture)系列科幻小说,认为其描绘了一个令人向往的乌托邦未来,超越了常见的警示性反乌托邦作品。“文明”是一个融合无政府主义与社会主义的太空文明,赋予公民极大的自由,同时依赖超人类的“心智”(Minds)系统进行规划与制造。该系列具有连贯的政治愿景,公民积极表达并捍卫自身的价值观。

阅读指南

“文明”系列没有贯穿始终的情节或固定的阅读顺序,作者提出了三阶段阅读建议:

  1. 入门:强烈建议从《游戏玩家》(Player of Games)开始,其对“文明”的引入自然且平滑。
  2. 进阶:可随机选择后续书目,作者推荐《物质》(Matter)和《表面细节》(Surface Detail),不推荐《考虑菲巴斯》(Consider Phlebas)。
  3. 补充设定:在阅读几部小说后,再阅读Banks的设定文档《关于文明的几点说明》(A Few Notes on the Culture)。有了小说叙事背景后,这份原始的世界构建资料会更具吸引力。

文学价值与想象力的展现

  • 温暖与幽默:与Olaf Stapledon和刘慈欣等基调冷酷的宏大叙事作家不同,Banks的作品充满温暖、幽默与反讽,其巨型结构中生活着追求有趣项目的迷人角色。
  • 想象力的极限:作者将想象力比作肌肉,称Banks为想象力领域的“宇宙先生”。他不仅构思了宏大的技术规模,还注入了深刻的人文关怀,激励了其他作家去挑战更大的想象尺度。
  • 描绘乌托邦的勇气:在科幻文学中,描写失败比描写成功更容易。“文明”系列中,公民享有无尽能源、数百年的寿命,且“文明”几乎总是胜利者。这种看似“无聊”的丰饶设定并未破坏情节,Banks以极大的想象力证明了在物质与自由的极限处,故事依然充满张力。

美学细节

“文明”系列中飞船的独特命名是其重要的美学特色,但读者需要在阅读一两部作品、理解其内在规则后,才能真正领略其中的趣味。

12. ATProto for distributed system engineers (atproto.com)

本文面向分布式系统工程师,阐述了AT Protocol(ATProto)的设计思路与核心架构。它从一个常见的社交网络系统演化难题出发,逐步引导至ATProto的解决方案。

系统架构的演进:从单体到流处理

文章首先回顾了系统为应对规模化挑战的典型演进路径:

  1. 初始状态:经典的“单一大型SQL数据库”架构。
  2. 性能瓶颈:随着用户增长,引入缓存和数据库分片(Sharding)与副本(Replicas)。
  3. 关键转折:为支持数亿用户,系统从追求强一致性转向最终一致性,将核心存储从SQL数据库切换为NoSQL集群(如键值存储)。
  4. 解决查询难题:由于NoSQL缺乏SQL的复杂查询能力,系统引入视图服务器。这些服务器预先计算并存储数据的“视图”,本质上是缓存的查询结果,并复制了规范数据以保证速度。
  5. 保障数据同步:为确保视图服务器与主数据可靠同步,系统引入事件日志(如Kafka)。视图服务器监听并回放日志,即使在重启后也不会丢失更新。 至此,系统演变为一个流处理架构,它以最终一致性和可能的读取延迟为代价,换取了良好的可扩展性,并实现了一个“由内而外构建的数据库”——简化的规范存储(NoSQL集群)加上自定义的查询引擎(视图服务器)。

ATProto的目标:开放与去中心化

AT Protocol的目标是互联应用程序,使其后端共享状态(包括用户账户和内容)。为此,它将上述封闭架构中的各个内部组件(NoSQL集群、事件日志、视图服务器)全部外部化

  • 每个服务都提供公共API,任何人都可以消费。
  • 任何人都可以创建这些服务的自己的实例。 最终目标是构建一个去中心化的后端,由众多协同工作的服务器组成。

实现开放协作的关键设计

为了让来自不同提供者的分布式服务能够协同工作,ATProto建立了统一的数据模型

  1. 用户数据仓库:每个用户拥有一个数据仓库。
  2. 结构:数据仓库包含记录,记录被组织到集合中。每个集合是一个有序的键值存储,存放JSON文档。
  3. 寻址与身份:由于仓库可由任何人托管,ATProto为数据仓库和记录定义了URL方案。同时,为了在网络中同步时验证数据真实性,记录会被密码学签名

应用程序在ATProto上的工作流程

在ATProto网络上构建一个新应用(通常捆绑为“Appview”)的流程如下:

  1. 用户登录:用户通过OAuth登录应用,并告知其数据仓库所在的服务器,同时授权应用进行读写。
  2. 数据操作:应用可以直接读写用户数据仓库中的JSON文档。
  3. 写操作的生命周期:当应用写入一个文档时:
    • 文档被提交到用户的数据仓库
    • 该操作触发一条写入事件日志的记录。
    • 事件日志广播给所有监听的视图服务器(包括应用自身的视图服务器)。
  4. 循环数据流:即使应用自己发起了写操作,它仍需监听事件流,因为网络中有来自众多用户和众多应用的写入。这形成了一个循环的数据流:写入 -> 数据仓库 -> 事件日志 -> 视图服务器 -> 应用读取。

技术渊源与设计原则

AT Protocol融合了点对点技术高规模系统实践。其创始工程师来自IPFS和Dat等P2P项目,并得到了《数据密集型应用系统设计》作者Martin Kleppmann的指导。 其核心设计原则是“不能倒退”:网络必须提供与传统社交应用相当的便利性和全球可用性,同时保持为一个开放网络。在评估了联邦制和区块链的扩展性局限后,ATProto选择将高规模后端的标准实践与点对点系统的技术相结合,从而创造出当前的开放应用网络。

13. The Fennel Programming Language (fennel-lang.org)

Fennel 编程语言概要

Fennel 是一种编程语言,它结合了 Lua 的简洁性、速度和广泛适用性,以及 Lisp 语法和宏系统的灵活性。

核心特性与优势

  • 与 Lua 完全兼容:能够轻松地在 Fennel 和 Lua 之间相互调用函数与库。
  • 零开销:编译后的代码效率与手写的 Lua 代码相同。
  • 编译时宏:可以发布编译后的代码,而无需在运行时依赖 Fennel。独立二进制文件可小至 300KB
  • 可嵌入性:Fennel 既是可执行文件,也是一个单文件库。可以将其嵌入到其他程序中,以支持运行时可扩展性和交互式开发。
  • 广泛的适用范围:任何能运行 Lua 代码的地方,都可以运行 Fennel 代码。文章提到了其应用场景,包括:
    • 电子游戏开发
    • 窗口管理器
    • Web 服务器
    • 数据库
    • Web 浏览器
    • 低成本微控制器

示例代码

文章提供了一个简短的 Fennel 代码示例,用于读取键盘状态并相应地移动玩家角色。

学习资源与文档

项目提供了丰富的文档资源,包括:

  • 设置指南教程语言原理说明。
  • 针对 Lua 初学者 和有 Clojure 背景 开发者的特定指南。
  • 详尽的 参考手册宏指南API 列表风格指南
  • 更新日志社区维基
  • 文档涵盖从 v0.1.0 到 v1.6.1 的多个历史版本。

开发与社区

  • 开发:错误报告和增强想法在 dev.fennel-lang.org 跟踪,代码仓库位于 Sourcehut
  • 社区
    • 主要讨论在 Libera.chat#fennel 频道进行,并桥接到 Matrix
    • 设有 邮件列表 供节奏较慢的讨论。
    • 每月第三个周六举行 线上用户组会议
    • FennelConf 网站存档有历年会议演讲。
    • 定期进行 社区调查
    • 维基包含社区贡献内容,如代码库列表和菜谱。
    • 所有社区互动均需遵守 行为准则
15. DuckDB 1.1.0 Released (duckdb.org)

版本概述

DuckDB 团队正式发布了 1.1.0 版本(代号“Eatoni”)。此次更新涵盖了 SQL 语法调整、新功能引入、底层性能优化以及空间数据支持的增强。

SQL 变更与新功能

  • 破坏性变更:浮点数除以零现遵循 IEEE-754 标准返回 inf(原返回 NULL);标量子查询返回多行时现抛出错误(原返回任意行,现与 Postgres 对齐)。这两项均可通过配置参数恢复旧行为。
  • 友好 SQL:新增 histogram 函数用于计算数据集列的直方图;引入 SQL 变量,支持存储任意类型值,并在查询规划时作为字面量处理。
  • 动态 SQL 增强COLUMNS 表达式现可解包至函数(如 struct_pack)中;新增 queryquery_table 函数,允许将字符串字面量转换为子查询或表引用,支持参数化表名和编写通用 SQL 宏。

扩展与生态

  • 社区扩展优化:引入通过 C API 注册扩展的新方法,支持标量函数、聚合函数及自定义类型。这使得扩展体积更小、跨版本兼容,并为未来使用其他编程语言开发扩展奠定基础。

性能优化

  • Join 动态过滤器下推:在 Hash Join 执行期间,自动为探测端大表生成 min-max 范围过滤器,大幅减少数据扫描量。
  • 自动 CTE 物化:引入启发式规则,自动决定是否对包含聚合且被多次引用的 CTE(公用表表达式)进行物化缓存。
  • 并行流式查询:支持多线程并行流式获取结果,显著降低大结果集的内存占用并提升读取速度。
  • 并行 union_by_name:提升了合并多个列顺序不同但列名相同的文件时的读取性能。
  • 外键加载加速:重构嵌套 ART 索引结构,使包含大量重复项的外键索引插入和删除性能提升约 50 倍。
  • 窗口函数改进:支持 DISTINCTFILTER 及正向 lead 偏移的流式执行;支持分区列的过滤器下推;阻塞型窗口操作现支持并行处理。

空间数据特性

  • GeoParquet 支持:读取 GeoParquet 文件时,自动将几何列转换为 GEOMETRY 类型。
  • R-Tree 空间索引:空间扩展初步支持创建 R-Tree 索引,通过存储几何图形的边界框层级结构,大幅加速基于空间谓词(如相交、包含)的过滤查询。
17. Htmx, Raku and Pico CSS (rakujourney.wordpress.com)

Htmx、Raku与Pico CSS:简化Web开发的探索

本文旨在探讨如何结合HTMX、Raku和Pico CSS来简化Web项目,减少认知负荷,回归到早期Web的清晰分工:HTML负责布局,CSS负责样式。

核心概念

  • HTMX的作用:HTMX消除了对JavaScript的需求,用于创建动态Web内容。与Raku和Cro后端结合时,它们能高效处理HTML组装、路由和RESTful API服务,适合大多数动态网站项目(如90%的用例)。
  • Pico CSS的选择:作者在CSS框架中偏好Pico CSS,因为它遵循语义HTML原则,避免在HTML标签中添加过多类属性。相比Bootstrap或Tailwind等框架,Pico CSS能让HTML更简洁,例如导航栏只需基本标签,无需额外类名。
  • 语义HTML的优势:Pico CSS强调语义HTML,通过有语义的标签(如<nav><ul>)来定义页面结构的角色和重要性,提升可读性和可维护性,与非语义HTML形成对比。

框架对比

  • Bootstrap和Tailwind:这些框架需要在HTML标签中嵌入大量类属性(如class="navbar navbar-expand-lg"class="bg-gray-100"),增加了代码复杂性和认知负荷。
  • Pico CSS:提供更干净的HTML结构,专注于语义标签,简化了样式管理,并内置暗黑模式支持。作者认为这更符合其“减少认知负荷”的目标。

实际代码示例

文章展示了HTMX、Raku/Cro和Pico CSS集成的示例,用于实现一个标签页组件:

  • HTML模板(如tabs/index.crotmp):使用HTMX属性(如hx-gethx-target)动态加载标签内容,无需JavaScript。
  • 后端路由(如Tabs.rakumod):使用Raku和Cro定义路由来提供标签页面的HTML片段,实现RESTful API。
  • 组件实现:Pico CSS的语义标签用于结构,HTMX处理动态交互,展示了技术栈的协同工作。

总结与展望

作者认为,对于非高度复杂的应用(如Facebook或Google Maps),HTMX结合Raku和Pico CSS能提供简单、高效的开发体验。未来计划探索Web Components,并可能将Bootstrap、Tailwind等工具作为补充,但本系列从Pico CSS开始以最小化样式复杂度。所有代码可在GitHub上查看,鼓励社区协作。

18. Hacking misconfigured AWS S3 buckets: A complete guide (blog.intigriti.com)

AWS S3 存储桶安全配置错误攻防指南

概述

AWS S3(简单存储服务)是广泛使用的云存储服务,但配置不当可能导致严重的安全风险、数据泄露等问题。本文总结了常见的S3存储桶安全配置错误及其识别与测试方法。

发现与枚举S3存储桶的方法

  1. 检查HTTP响应:在代理工具中搜索AWS S3的引用(如.s3.amazonaws.com)或特定HTTP头(如x-amz-bucket-region)。
  2. 搜索引擎Dorking:利用Google、Bing等搜索引擎语法(如site:.s3.amazonaws.com "company")查找公开的存储桶。
  3. 暴力破解:使用S3enumcloud_enum等工具,通过常见关键词枚举潜在的存储桶名称。

安全配置测试方法

测试需准备AWS账户并配置AWS CLI。以下命令均使用--no-sign-request进行匿名测试。

  1. 列表权限测试

    • 命令:aws s3 ls s3://{BUCKET_NAME} --no-sign-request
    • 若返回文件列表,表明列表权限公开。
  2. 对象读取权限测试

    • 下载单个对象:aws s3api get-object --bucket {BUCKET_NAME} --key {FILE_NAME} ./OUTPUT --no-sign-request
    • 使用cp命令快速检查:aws s3 cp s3://{BUCKET_NAME}/{FILE_NAME} ./ --no-sign-request
  3. 对象写入权限测试

    • 命令:aws s3 cp localfile.txt s3://{BUCKET_NAME}/unique-name.txt --no-sign-request
    • 注意:使用非重要文件名以防干扰。写入成功意味着可能覆盖或删除现有文件。
  4. 访问控制列表(ACL)权限测试

    • 读取存储桶ACLaws s3api get-bucket-acl --bucket {BUCKET_NAME} --no-sign-request
    • 读取对象ACLaws s3api get-object-acl --bucket {BUCKET_NAME} --key {FILE_NAME} --no-sign-request
    • 测试ACL写入权限aws s3api put-bucket-acl --bucket {BUCKET_NAME} --grant-full-control emailaddress={EMAIL} --no-sign-request
    • 若读取权限已开启,可先检查“Grants”属性确认是否已有未授权的写入权限。
  5. 版本控制状态检查

    • 命令:aws s3api get-bucket-versioning --bucket {BUCKET_NAME} --no-sign-request
    • 未启用版本控制时,任何覆盖或删除操作均为永久性。

其他常见配置错误

  • 直接上传风险:若S3存储桶允许客户端直接上传(通过s3:PutObject)且未配置严格的策略(如文件类型限制),攻击者可能上传恶意文件(如SVG以实现存储型XSS)。
  • 版本控制缺失:如上所述,这会导致数据被永久破坏且无法恢复。

自动化测试工具推荐

  • S3enum:快速、隐蔽的S3存储桶枚举工具。
  • cloud_enum:支持AWS S3、GCP存储桶和Azure存储容器的全面OSINT枚举工具。
  • LazyS3:用于枚举和识别S3存储桶的Ruby脚本。
  • AWS Extender:Burpsuite插件(专业版),用于测试AWS S3、GCP和Azure存储桶的权限。
  • Nuclei:基于模板的扫描器,可使用自定义模板检测S3存储桶的权限和ACL问题。

重要提示

在报告任何潜在的安全配置错误前,必须验证漏洞的实际影响。部分S3存储桶(如公共数据存储桶)的公开配置是预期内的设计。

19. B-Trees and Database Indexes (planetscale.com)

B树与数据库索引核心机制总结

B树与B+树的基础结构

B树是数据库管理系统(DBMS)中用于高效数据查找的核心数据结构。它由根节点、内部节点和叶节点组成,节点内元素保持有序,通过减少树的层级来实现高效搜索。B树的节点大小可自定义以匹配磁盘块(如4k、16k),极大地优化了持久化存储的磁盘I/O操作。

B+树是B树的优化变体,广泛应用于数据库索引。其关键特性包括:

  • 数据(键值对)仅存储在叶节点,非叶节点仅存储键和子指针,使得内部节点能容纳更多键,从而保持树结构更浅。
  • 所有叶节点通过双向链表连接,支持高效的顺序遍历和范围查询。

MySQL与InnoDB中的B+树应用

在MySQL的InnoDB存储引擎中,所有表数据均存储在以主键为键的B+树中,默认节点(页)大小为16k。

  • 主索引:叶节点存储完整的行数据。
  • 二级索引:叶节点仅存储主键值。查询时需先查二级索引获取主键,再“回表”查询主索引以获取完整行数据。

主键选择对性能的关键影响

主键的选择直接决定数据在磁盘上的物理布局,对性能影响深远:

  1. 插入模式
    • 随机主键(如UUIDv4):插入位置不可预测,导致频繁的随机磁盘I/O和页分裂,写入性能较差。
    • 顺序主键(如自增整数、时间戳):新数据始终追加到树的最右侧,大幅减少I/O请求,写入性能更优。
  2. 数据顺序与范围查询:顺序主键使数据按插入顺序物理相邻,极大提升了时间序列等范围查询的效率;随机主键会导致数据分散,增加读取的页数。
  3. 主键大小:主键需在防耗尽和节省存储间平衡。较小的主键(如8字节的BIGINT相比16字节的UUID)允许每个节点存储更多键,使树更浅,查询速度更快。

存储机制:页与缓冲池

InnoDB以“页”(通常16k)为单位从磁盘读取数据,而非单行读取。为缓解磁盘I/O瓶颈,InnoDB引入了缓冲池(Buffer Pool) 作为内存缓存。查询时优先从缓冲池读取页,未命中时才访问磁盘。尽管缓冲池显著提升了性能,但通过合理设计索引和主键来减少查询所需访问的总页数,依然是降低缓存驱逐率和提升整体数据库性能的核心原则。

20. Reclaim the Stack (reclaim-the-stack.com)

文章摘要

本文记录了 mynewsdesk.com 团队用时7个月,基于 Kubernetes 构建内部平台以替代 Heroku 的经历与成果。主要收获包括:

  • 成本与性能:实现了 90% 的成本降低30% 的性能提升
  • 开发者体验:显著改善,体现在 部署时间缩短 以及 更快速、易用的工具链
  • 开源与推广:该团队已将整个技术栈开源,旨在帮助其他团队在 数天内(而非数月)完成类似迁移,鼓励社区“Reclaim the Stack”。
21. Linux's Bedtime Routine (tookmund.com)

本文详细介绍了 Linux 系统从休眠(hibernation)指令发出到完成文件系统同步的初始准备阶段。内容基于 Linux 内核 v6.9.9 源码分析。

核心触发机制

休眠过程的起点是向 /sys/power/state 虚拟文件写入字符串 disk。该操作由内核中的 state_store 函数处理,经过状态解码后,最终调用核心函数 hibernate()

休眠前的关键检查与准备

在正式进入休眠流程前,内核会执行一系列严格的检查和准备工作:

  1. 休眠可用性检查

    • 确认内核配置启用了 CONFIG_HIBERNATION
    • 检查多个条件:内核命令行参数 nohibernate 是否设置;Linux 安全模块(LSM)是否因 LOCKDOWN_HIBERNATION 而锁定休眠(防止内存内容被提取);是否使用了 memfd_secret(秘密内存,其内容在内核地址空间不可见,休眠会暴露它);是否激活了 CXL 内存设备(其状态保持特性未定义)。
  2. 压缩支持检查

    • 如果启用了压缩(默认通常启用),会验证配置的压缩算法(如 lzolz4)是否在内核加密子系统中可用。算法可通过内核参数 hibernate.compressor 设置。
  3. 获取系统锁

    • 系统睡眠锁 (lock_system_sleep):标记当前线程为不可冻结,并获取 system_transition_mutex 全局互斥锁,防止并行的挂起/休眠/快照操作。
    • 休眠专用锁 (hibernate_acquire):获取一个原子计数器信号量,确保在休眠期间不会打开快照设备或尝试从其恢复。
    • 内存分配标志调整:为防止在设备挂起期间进行内存分配时需要进行物理IO或文件系统操作,临时移除 __GFP_IO__GFP_FS 标志。
  4. 控制台准备

    • 在满足特定条件(例如,没有驱动程序明确声明不需要切换,且 no_console_suspend 未启用)时,系统会将当前活动的虚拟终端(VT)和内核消息输出重定向到一个专用的 SUSPEND_CONSOLE。此操作通过调度一个工作队列(console_callback)来异步执行,以避免与VT子系统的其他操作冲突。
  5. 通知电源管理子系统

    • 调用 PM_HIBERNATION_PREPARE 事件通知链。所有注册了此通知的驱动程序或子系统将执行各自的休眠准备回调。如果任何回调返回失败(NOTIFY_BAD),则会触发 PM_POST_HIBERNATION 事件以执行回滚操作。
  6. 文件系统同步

    • 执行 ksys_sync_helper,该函数内部调用 ksys_sync
    • ksys_sync 的过程包括:唤醒刷新线程(flusher threads)进行并行写回;遍历所有超级块(superblocks)同步索引节点(inodes);两次同步文件系统元数据(先异步后同步);最后同步所有块设备。此操作确保所有待写数据都已持久化到磁盘。
    • 特别处理了 laptop_mode(笔记本模式),该模式会调度延迟的回写操作,ksys_sync 完成后会取消这些延迟定时器,防止休眠期间状态变化。

总结

本文剖析了 Linux 休眠流程的“睡前准备”阶段:从用户空间触发指令开始,经过一系列严密的安全和可用性检查,获取关键锁并调整内核行为,最后确保所有文件系统数据安全落盘。这些步骤共同为下一阶段——完全冻结用户进程、将内存内容保存到镜像并最终执行硬件休眠——奠定了基础。

22. Jd – JSON Diff and Patch (github.com)

Jd – JSON Diff and Patch 工具摘要

目的与概述

jd 是一款用于对 JSON 和 YAML 数据进行差异比较(diff)和补丁应用(patch)的命令行工具及 Go 语言库。它支持原生 jd 格式(类似 unified diff)、JSON Merge Patch (RFC 7386) 和 JSON Patch (RFC 6902) 子集,并提供基于 WebAssembly 的无网络请求 Web UI。

核心特性

  • 智能对比:使用 LCS 算法生成最小化数组 diff,并在修改数组时添加上下文以防止补丁应用错误。
  • 格式转换:支持在 jdpatchmerge 格式间创建、应用和转换结构补丁。
  • 路径级选项 (PathOptions):允许对特定数据路径应用自定义比较语义,包括:将数组视为集合(SET)或多重集合(MULTISET)、设置数值比较精度(precision)、指定对象匹配键(setkeys),以及控制特定路径的差异对比开关(DIFF_ON/DIFF_OFF)。

安装与命令行

  • 安装方式:支持 Homebrew、mise、go install、Docker、GitHub Action 及下载预编译二进制文件。
  • 命令参数:支持文件对比、补丁应用(-p)、YAML 读写(-yaml)、颜色输出、多格式转换(-t)及启动本地 Web UI(-port)。

Go 库与 v2 Diff 语言

  • Go 库 (v2):提供 DiffPatch 等核心 API,新增 diff 上下文、最小数组 diff 和 hunk 级元数据支持。官方建议仅引入稳定的 release 版本。
  • v2 格式结构
    • 选项头与元数据:以 ^ 开头,记录生成 diff 时使用的全局/路径级选项及 hunk 元数据。
    • Diff Hunks:以 @ 开头指明 JSON 路径,后跟上下文(空格)、删除(-)和添加(+)行。路径元素支持对象键、数组索引、集合/多重集合标记等复杂结构。

实际应用场景 (Cookbook)

  • Git 集成:可作为外部工具(git difftool)或配置为 Git diff driver(通过 .gitattributes),实现 JSON 文件的自动化结构差异对比。
  • Kubernetes 运维:结合 kubectl 对比 Deployment 等资源的 YAML 变更。利用 PathOptions 可过滤掉 metadatastatus 等无关字段,精准提取 spec 核心变更,并能将结果转换为 JSON Patch 格式以应用于其他资源。

安全性

项目保持最小化依赖,使用固定版本的 GitHub Actions,并通过 Dependabot 进行自动化依赖更新以保障安全。

23. Show HN: Ki Editor – Multicursor syntactical editor (ki-editor.github.io)

Ki编辑器:多光标结构编辑器

Ki编辑器是一个多光标结构编辑器,旨在通过直接操作语法结构来桥接编码意图与行动,提升编码效率和灵活性。

核心特性

  • 一流的语法节点交互
    直接操纵语法结构,避免鼠标或键盘的繁琐操作,使编码更直观和高效。

  • 多光标功能
    支持多个光标进行并行语法节点操作,革命性地简化批量编辑和重构任务,显著提高编码效率。

  • 重新定义模态编辑
    通过选择模式标准化跨单词、行、语法节点等的移动操作,提供前所未有的灵活性和一致性,优化编辑体验。

主要目的

Ki编辑器聚焦于语法感知的多光标编辑,旨在通过结构化的交互方式,让开发者更直接地表达编码意图,减少操作复杂度,从而全面提升开发流程。

24. Graphics Tricks from Boomers (arnaud-carre.github.io)

本文介绍了一项在4096字节Atari演示中实现全屏精灵绘制的图形技术。Atari STE搭载8MHz Motorola 68000处理器,支持320x200分辨率、16色显示,其帧缓冲区为32000字节(采用位平面布局)。该机器没有硬件精灵,因此移动位图需通过“blit”操作将其复制到帧缓冲区,这类可位块传输的图形对象被称为“bobs”。

常规的16色64x64像素bobs绘制速度极慢,但演示中却实现了全屏显示16个此类bobs。其核心技巧在于结合了“频闪效应”与“有限bobs”算法。该算法通过4个或更多屏幕循环动画,每帧仅绘制一个bobs,并利用离屏缓冲区生成单色掩码来清除最早的bobs。关键优化在于位平面编码:在离屏缓冲区绘制单色bobs仅需一次位块传输操作,比绘制完整的16色bobs(需四次操作)快四倍。

Atari的“全屏模式”通过操纵视频芯片状态机实现。在每个扫描线的精确时刻(如第0周期和第376周期)改变分辨率和刷新率,可欺骗硬件以消除安全边界,将可见分辨率从320x200扩展至约416x274。这要求CPU与视频解码严格同步,且大部分时间用于硬件欺骗。

在全屏模式下使用blitter面临挑战:CPU与blitter无法并行运行,且时间片被分割为364周期和112周期的片段。传统水平行绘制效率低,因此作者开发了“垂直blitter”技术,以垂直条带(如16xN像素)为单位进行绘制,降低了操作粒度,提高了时间片利用率。

最终,作者通过C程序生成约4000行汇编代码,精确安排blitter命令与全屏时序,实现了在有限带宽下高效绘制16个全屏bobs,并辅以动态背景色变换等效果。该技术展示了如何通过巧妙的算法和硬件操纵突破系统限制。

26. Bitten by Unicode (pyatl.dev)

问题描述

作者在开发一个处理PDF导出报表的工具时,需要解析其中的美元金额。逻辑是识别以美元符号$开头的字符串,将其转换为浮点数;如果数字前还有连字符,则表示负数。

遇到的错误

作者最初使用正则表达式[^-.0-9]来提取数字、连字符和小数点,但负值却错误地输出为正值。随后他尝试将连字符的判断单独处理,使用if value.startswith('-$')的条件语句来识别负数,但该条件从未被触发。

问题根源:Unicode字符混淆

通过unicodedata.name()检查,作者发现字符串中的第一个字符与键盘输入的连字符是不同的Unicode字符

  • 键盘输入的连字符名称是 HYPHEN-MINUS (U+002D),是一个通用连字符/减号。
  • 问题字符串中的连字符名称是 HYPHEN (U+2010),是一个专用的排版连字符。

两者在视觉上几乎无法区分,但Unicode编码不同,导致基于字面字符'-'的判断失败。

解决方案

作者利用Unicode字符类别进行判断。连字符类字符的类别属于 'Pd' (标点,破折号)。他编写了一个辅助函数:

def is_hyphen(char: str) -> bool:
    return unicodedata.category(char) == 'Pd'

然后修改判断条件为:

if is_hyphen(value[0]) and value[1] == "$":
    converted_value = float(re.sub(r"[^.0-9]", "", value)) * -1

这确保了能够正确识别包括 HYPHEN (U+2010) 在内的各种连字符变体,从而正确处理负数金额。

28. The Modern CLI Renaissance (gabevenberg.com)

现代CLI复兴趋势

趋势概述与背景

近年来,命令行界面(CLI)工具开发呈现复兴态势,尤其在1995年至2015年相对沉寂后显著加速。许多开发者正在重新构思和重写Unix早期的核心工具(如rmcatgrep等),这些工具大多诞生于1970年代,虽仍可用,但其设计环境(终端能力、用户群体)已发生巨变。现代终端支持更丰富的色彩、Unicode符号和内联图像,CLI工具需与图形界面共存,且用户基础更广泛。

复兴的主要原因

这一趋势源于过去数十年积累的经验教训,包括:

  • 不佳的开箱即用体验:传统工具常需复杂配置才能发挥优势。例如,Zsh相比Fish需要手动启用补全和提示符;Vim/Neovim的功能多被禁用或依赖插件,而Helix编辑器则默认启用多数高级功能。
  • 晦涩的错误信息:如Git的“pathspec did not match”可能令人困惑;Bash脚本中的错误可能源自下游工具,误导调试。相比之下,Nushell等工具能提供更具体、有用的错误提示。
  • 文档繁琐与不易发现:工具应通过上下文提示(如Zellij的快捷键栏、Helix的输入提示)帮助用户记忆功能,减少查阅文档的需求。
  • 常见用例应更简便:如fd简化了find的典型用法,ripgreprg)优化了grep的常见操作,使核心任务无需查看手册。
  • 摆脱历史包袱:旧工具(如Make)因兼顾构建系统和任务运行器而积累冗余特性。新工具(如just)专为特定场景设计,更简洁易用。

新编程语言与生态系统的作用

现代CLI工具多采用Rust和Go编写,取代传统的C语言。这不仅因语言本身优势,更得益于其成熟的库生态:

  • Rust:有Clap(参数解析)、crossterm(终端交互)、Ratatui(TUI)等库。
  • Go:提供Cobra(CLI)、Viper(配置管理)、Bubbletea(UI组件)等工具。 这些库降低了开发门槛,促进了工具设计创新。

结论

CLI工具的复兴并非否定经典工具,而是在其基础上演进,吸取教训以适应当代需求。新工具通过改善用户体验、错误处理和文档设计,提升了易用性与效率。尽管未来这些工具也可能被取代,但这种持续改进体现了开源社区的传承与创新精神。

29. MNT Reform Next (mntre.com)

MNT Reform Next是一款未来感十足的模块化开源笔记本电脑,旨在提供高性能、高便携性与可升级性。它基于经典MNT Reform重新设计,采用复古未来主义美学。

主要改进与特点:

  • 更轻薄便携:将主板拆分为多个专用互联板,节省空间;采用定制18650电池包,紧密集成电子与机械结构;用触控板替代轨迹球,并配备三个超薄Cherry MX按键;保留机械键盘(含RGB背光与Kailh Choc开关)。
  • 高性能硬件:搭载RK3588处理器模块,具备4个高性能Cortex-A76核心(最高2.4GHz)、4个效能核心(1.8GHz)和Mali G610 MP4 GPU(支持开源panthor驱动),支持16/32GB内存、双屏显示、PCIe 3.0/2.0和USB 3.0。处理器模块可单独升级。
  • 全面模块化:用户可更换处理器模块、打印自定义外壳、定制键盘,所有硬件设计开源。

详细硬件规格:

  • 主板:版本D-1(代号“Reflex”),集成RP2040系统控制器、4通道PCIe M.2 NVMe插槽、RGB状态LED和8位DIP开关。
  • 端口板
    • 端口板一(左侧):USB-C(USB 3.0/2.0+供电)、千兆以太网、MicroSD插槽、音频芯片与耳机接口。
    • 端口板二(右侧):全尺寸HDMI、2个USB-C、1个USB-A(均支持USB 3.0/2.0)。
    • 端口板三(背面):集成Wi-Fi/BT模块(默认Sterling-LWB5+,支持Linux主线驱动),通过RF透射材料外壳接收信号,可自定义添加外部接口。
  • 键盘下方空间:可利用最多4毫米垂直空间扩展低剖面组件,支持USB集线器、以太网交换等自定义设计。
  • 电池系统:每个电池包含4节可更换18650电池,采用并联冗余设计,带I2C数字监控电路。默认为磷酸铁锂(LiFePO4)化学体系,可通过DIP开关切换至锂离子电池。充电通过USB-C供电实现。
  • 外壳:最终版将采用CNC铣削、喷砂和阳极氧化6061铝合金外壳。
  • 键盘与触控板:机械键盘为MNT Reform 4.0进化版,集成RGB背光;触控板为多点触控玻璃触控板。

使用场景: 适用于日常使用(浏览、编程、设计、音视频编辑)、移动办公、远程管理、休闲娱乐、通勤及音乐制作等。适合Linux新手和Debian爱好者,提供详细手册和社区支持。

公司理念: MNT Research致力于可持续开放硬件,反对计划报废和封闭设计。作为小型独立公司,依赖众筹和预售模式开发产品,坚持提供开源、可定制、模块化、可升级、可维修的无风扇设备。通过MNT社区论坛与用户保持互动。

后续步骤: 当前设备处于原型阶段,软件和硬件即将完成。将在Crowd Supply发起众筹,预发布页面即将上线。

30. Companies need junior devs (softwaredoug.com)

公司为何需要初级开发者

尽管当前大型科技公司倾向于招聘能迅速产出的资深开发者,并认为AI将取代初级开发者,但本文论证了招聘初级开发者对企业的创新和长远发展至关重要。其核心价值不在于简单的劳动力补充,而在于构建重视教学与学习的心理安全文化。

核心论点

1. 促进知识共享与团队协作

  • 知识创造:创新型企业注重知识的传播与共享,而非仅关注KPI等产出指标。
  • 教学相长:指导初级员工能触发“门生效应”,迫使资深员工重新思考和深化自身知识。
  • 知识冗余与转移:初级员工作为知识“冗余”,通过频繁沟通促进隐性知识的转移,打破资深员工的思维盲区,同时分担基础工作以防止资深员工倦怠。

2. 打破思维定势,激发创新

  • 挑战专家盲区:初级员工敢于提出基础问题,能够打破资深专家因经验产生的盲点和固有假设,尝试被专家认为“不可能”的解决方案。
  • 通才优势与多元视角:跨领域的“通才”往往更具创新力。初级员工通常具备更多元的背景,能为团队带来资深员工缺乏的新视角。历史上如Twitter、便利贴等重大创新均源自初级员工。

3. 提升心理安全感与学习能力

  • 构建心理安全:以指导和学习为核心的文化能显著提升团队的心理安全感,鼓励成员承认错误和报告问题。
  • 驱动实验与创新:心理安全感催生学习行为,使团队敢于进行实验、A/B测试和“快速试错”。
  • 避免群体思维:长期由资深员工组成的稳定团队容易陷入“群体思维”,排斥外部新想法,丧失学习和实验的能力。引入初级员工能有效打破这种知识孤岛。

对组织的影响

不招聘初级员工会使组织丧失内在的创新引擎。高绩效团队应类似于大学研究实验室:资深员工思想开放、乐于分享并接受挑战;初级员工积极吸收知识,用基础问题激发新思考。许多高管往往只关注对外的商业叙事,却忽视了内部“教学与学习”这一驱动团队持续交付和创新的真正核心动力。企业应招聘渴望学习的初级员工和乐于教学的资深员工,以维持组织的健康与活力。

31. Show HN: Io_uring for Ruby (github.com)

IOU 是一个封装了 Linux io_uring 异步 I/O API 的 Ruby gem,旨在为 Ruby 应用提供简洁、符合 Ruby 风格的高性能 I/O 操作接口。它不假设特定的并发模型,可用于多线程、多纤程或基于回调的应用程序。

核心功能

  • 支持准备和提交一系列操作,如 acceptreadwritetimeoutnop
  • 支持取消已提交的操作。
  • 提供“多重射击”模式的超时、接受和读取操作。
  • 通过设置缓冲区环提升多重射击读取操作的性能。
  • 允许在操作中关联任意数据,并通过回调处理操作完成事件,或发出任意值用于应用内信号。

基本用法: 操作流程包括准备(使用 #prep_xxx 方法)、提交和等待/轮询完成。示例展示了创建环、准备超时操作、提交、等待完成以及使用回调处理完成事件的基本流程。它还演示了如何使用 #prep_cancel 取消操作。

I/O 操作: I/O 操作(如读/写)通过原始文件描述符进行。示例代码展示了如何通过 IOU 向标准输出写入数据。

示例应用: 项目在 examples 目录中提供了多个示例,包括回声服务器、HTTP 服务器、风格类似 EventMachine 的事件循环以及基于纤程的并发模型。

32. Please stop inventing new software licences (2020) (shkspr.mobi)

请停止发明新的软件许可证(2020)

作者在尝试为一个声称“开源”的加密应用 Cyph 贡献代码时,发现其实际使用的并非标准开源许可证,而是自行创建的专有许可证,导致贡献流程受阻。

发现问题

作者注意到 Cyph 主页声称其为“开源”并拥有公开的 GitHub 仓库。在试图通过提交 PR 修复注册页面的可用性问题前,作者首先检查了许可证,发现它并非开源许可,而是最初使用了与微软相关的 Microsoft Reference Source Licence (MS-RSL)。该许可证仅允许“参考使用”,但条款模糊且存在诸多矛盾:

  • 要求“只读形式”使用代码,但提交 PR 必须写入代码。
  • 将用途限制为调试、维护或互操作性,而改进无障碍性不符合这些目的。
  • 禁止向组织外部分发代码,但创建 GitHub fork 即构成分发。
  • 假设用户为公司实体,但作者是个人用户。

许可证的“改进”与新问题

在作者提出质疑后,Cyph 未采用标准开源许可,而是创建了新的 Cyph Reference Source Licence (CYPH-RSL)。新许可证虽承认用户可能为个人,并允许以可写形式使用代码以开发变更,但附加条件依然复杂:

  • “参考使用”仅限于开发旨在转让给许可方的变更,禁止无关分发。
  • 术语如“旨在”含义模糊,缺乏明确的时间框架和条件。
  • 仍然禁止在 GitHub 上公开 fork 代码。
  • 不能通过博客文章等方式分发修改后的代码,因为这不属于“转让所必需”的分发。

结论

作者最终放弃贡献,指出随意创造新许可证会为社区协作制造不必要的障碍。使用非标准许可证会导致贡献者需要额外时间理解条款,甚至需经过法律审核,增加了参与门槛,不利于构建贡献者社区。文章强调,在挑战现状和创新的同时,应警惕可能引发的混淆与摩擦。

33. Why I Wrote Data Science for Crime Analysis with Python (2023) (crimede-coder.com)

《用Python进行犯罪数据分析》创作缘由与内容概述

写作背景与动机

作者在过去一年中常被问及“推荐什么资源入门Python”,发现现有资源不适合犯罪分析初学者或刑事司法专业研究生,因此决定专门为犯罪分析师撰写本书。

现有资源的不足

  1. 在线教程的“Hello World”问题:许多免费在线资源(如W3School)在运行简单程序前需要复杂步骤,初学者不知从何入手。
  2. 内容广度与深度失衡:例如《Beginning Python》等书籍内容过于百科全书式,近50%篇幅涉及犯罪分析师不需要的专题,且缺乏完整的现实项目示例。
  3. 缺乏实际环境部署指导:现有资源很少涵盖如何运行代码、组织代码、设置Python环境等基础但关键的操作技能,导致许多数据科学专业学生只会使用Jupyter Notebook或Google Colab,无法适应专业编码环境。

书籍内容概览

本书旨在解决初学者聚焦学习与项目管理的双重需求,主要内容包括:

  • 基础入门:Python下载与脚本运行、基本对象(字符串、数字、列表、字典)、条件与循环、自定义函数。
  • 数据分析入门:使用NumPy和Pandas处理表格数据、SQL数据库查询基础、Matplotlib绘图、Jupyter Notebook报告制作、项目组织与工作流自动化。

出版计划与获取方式

  • 本书已完成定稿,但采用自助出版形式,可持续更新。
  • 目前在CRIME De-Coder商店提供电子版或平装本购买,并可早期以20美元获取开发中的版本。
  • 预计最终章节将于2024年初完成,早期购买者将获得更新内容。
  • 作者欢迎反馈建议,并针对教育机构提供批量采购折扣。
34. With more legal action on the horizon, how long before Archive.org closes? (lunduke.locals.com)

互联网档案馆法律诉讼败诉及未来风险

美国第二巡回法院驳回了互联网档案馆(Archive.org)的上诉,维持了在Hachette诉互联网档案馆案中的原判。法院明确指出,未经作者或出版商许可,扫描并免费分发受版权保护的书籍不属于“合理使用”,因此互联网档案馆的行为违法。

诉讼背景:互联网档案馆多年来自行扫描实体书籍并数字化,允许用户在线“借阅”数字版本,理论上以“一本实体书对应一本数字书”的比例限制借阅。但在2020年COVID-19封锁期间,他们启动了“国家紧急图书馆”,移除了这一限制,允许无限数字副本分发,且从未获得版权所有者许可。这引发了包括Hachette、Wiley、Penguin Random House和HarperCollins在内的出版商的诉讼,互联网档案馆一审败诉。

上诉过程:互联网档案馆在上诉中辩称,复制书籍花费了大量资金,因此应被允许。法院认为此理由不合逻辑,属于“牵强附会”,予以驳回。2024年9月4日的裁决重申,未经许可的数字化分发不构成合理使用。

后果与未来风险

  • 败诉使互联网档案馆面临更多法律诉讼。例如,环球音乐集团和索尼正在起诉他们分发2749份音频录音(作为“Great 78 Project”的一部分),潜在赔偿高达4.12亿美元。互联网档案馆年收入约2000万美元,无力支付此类赔偿。
  • Archive.org拥有海量内容:约8320亿网页、3800万印刷材料、260万软件、1160万视频文件、1500万音频文件和470万图像。其中许多内容可能未经版权所有者许可。
  • 随着版权意识的增强,更多作者和出版商可能提起类似诉讼,涉及书籍、音乐、软件等领域,互联网档案馆几乎必败。

互联网档案馆的责任:文章指出,互联网档案馆的领导层明知行为违法却继续推进,将整个服务(包括Wayback Machine等合法存档功能)置于风险中。他们未采取措施规避版权侵权,导致自身陷入法律困境。

结论:鉴于连续败诉和潜在巨额赔偿,Archive.org面临被迫关闭的风险。未来几个月可能涌现更多法律行动,进一步加剧其财务和运营压力。互联网档案馆的存续取决于其能否应对这些挑战,但目前前景黯淡。

37. "Unstripping" binaries: Restoring debugging information in GDB with Pwndbg (blog.trailofbits.com)

这篇文章介绍了作者为GDB插件Pwndbg添加的两项新功能,旨在改善对无调试符号的二进制文件(即“剥离”二进制文件)的调试体验。

1. Binary Ninja集成

为了弥补GDB在调试剥离二进制时丢失符号信息的缺陷,作者将Pwndbg与反编译工具Binary Ninja集成。此集成通过XML-RPC服务器实现,允许Pwndbg访问Binary Ninja的分析数据库,从而同步符号、函数签名、栈变量偏移等信息。具体功能包括:

  • 符号与变量名恢复:在调试时显示从Binary Ninja同步而来的函数名、变量名等。
  • 高亮反编译代码:直接从Binary Ninja获取语法高亮的反编译代码(支持三种中间语言层级),并显示在Pwndbg上下文中,同时高亮当前执行行。
  • 程序计数器与断点同步:在Binary Ninja中显示当前PC寄存器位置的图标,并支持从Binary Ninja设置GDB断点。
  • 栈变量名同步:这是最复杂的部分。由于Binary Ninja只提供栈变量相对于栈帧基址的偏移,而编译器可能不使用帧指针寄存器,作者实现了通过常量传播分析来推导帧基址的方法。通过检查帧指针、栈指针偏移或其他寄存器的一致性,计算栈变量的绝对地址并正确标注。

2. Go语言调试增强

针对Go等非C语言二进制文件的复杂内存布局,作者开发了go-dump命令,用于结构化地转储Go内置类型的数据。

  • 类型支持:支持转储所有Go内置类型(整数、字符串、切片、映射、数组等),语法与Go语言一致。
  • 嵌套类型:能够递归处理任意嵌套的复杂类型,只需一条命令即可完成转储。
  • 运行时类型解析:Go编译器为每个类型生成运行时类型对象(用于反射)。作者编写了解析器来提取这些信息,并通过go-type命令展示类型详情(如结构体字段名、偏移等)。结合此信息,可以在不手动指定完整类型的情况下转储接口值,或通过类型地址转储任意值。

总结与未来工作

这些新功能已在Pwndbg的开发分支和最新版本(2024.08.29)中可用。作者指出,Binary Ninja集成采用模块化设计,未来易于添加对其他反编译器(如Ghidra)的支持。对于Go调试,未来可进一步改进对goroutine的支持,例如列出goroutine和切换上下文,以缩小与专用Go调试器Delve的差距。

核心价值:这两项功能显著改善了对剥离二进制和Go程序的调试体验,通过工具集成和语言特定优化,帮助调试者恢复上下文信息,减少手动分析的工作量。

38. 20% more powerful perovskite solar panels enter commercial use (www.oxfordpv.com)

标题:功率提升20%的钙钛矿太阳能板投入商用

核心事件:
2024年9月5日,英国光伏技术公司Oxford PV宣布,其研发的下一代钙钛矿-硅叠层太阳能板已首次向美国客户发货,实现全球首次该技术的商业化应用。

技术优势与性能:

  • 该产品采用公司专有的钙钛矿-硅叠层电池技术,72块电池板组成。
  • 相较于标准硅基太阳能板,发电效率最高可提升20%。
  • 首批上市面板的模组效率达24.5%,此前公司曾创下26.9%的实验室纪录。
  • 更高效率意味着在相同安装面积下可产生更多电力,有助于降低平准化度电成本(LCOE)并提高土地利用率。

商业化意义:

  • 此次发货标志着钙钛矿叠层太阳能板技术首次进入商业应用阶段,公司自2014年起持续研发该技术。
  • 该技术被认为能加速能源转型,通过更低成本、更高效率的清洁电力,推动交通、家居和工业领域的电气化与脱碳。

生产与未来计划:

  • 首批产品由位于德国勃兰登堡的兆瓦级中试生产线制造。
  • 公司计划未来将该设施的产能优先用于更多公用事业客户、特种产品及住宅应用试点。
  • 长期目标是将产能扩大至吉瓦级,并建设新的高产能制造工厂。

行业评价:

  • Oxford PV首席执行官David Ward称,该技术商业化是能源行业的突破,高效技术代表太阳能产业的未来。
  • 长期合作伙伴Legal & General的清洁投资负责人John Bromley表示,钙钛矿技术在高效率太阳能发电方面潜力巨大,Oxford PV从实验室记录到商业化的发展路径印证了这一点,此类高增长企业在气候转型中扮演关键角色。
39. Nobody Cares About Security (www.adatosystems.com)

没有人真正关心安全

本文的核心观点是:没有人真正关心安全,企业领导层关心的是避免因安全事件导致的损失收入(如应用停机、勒索和诉讼),而非安全本身。作者通过类比备份与恢复来阐述这一观点,并探讨了安全投资被忽视的原因和挑战。

备份与安全的类比

  • 备份的核心是恢复:人们不关心备份本身,而是关心数据在灾难发生后能否恢复。类似地,安全的目标是避免业务损失,而非安全措施。
  • 投资驱动因素:备份的改进源于频繁的数据丢失事件,这些事件作为教训推动投资。但安全投资缺乏类似明确的驱动力,因为损失后果(如停机)可能通过其他方式(如冗余设计或保险)缓解。

企业忽视安全的原因

  • 财务考量:企业认为投资安全的收益不明确,而其他缓解措施(如网络责任保险)看似更便宜或直接。罚款和声誉损害常被视为可量化风险较低或可接受。
  • 安全复杂性:安全问题复杂且不断变化,难以确定“正确”的投资水平。与备份的简单习惯相比,安全习惯更像健康管理,涉及多个变量且结果不确定。
  • ROI测量困难:安全投资回报率难以衡量,IT从业者无法向企业清晰展示安全措施的具体收益。这导致企业领导更倾向于购买保险等明确保护方式,而非安全解决方案。

关键引用与观点

  • Cisco CEO John Chambers指出:“只有两种公司:已经被黑客入侵的和不知道自己已经被入侵的。”这强调了安全威胁的普遍性和不可避免性。
  • CyberCure.com CEO Abe Silber总结:安全问题无法量化ROI,保险比安全解决方案更容易销售,因为企业难以理解安全投资的价值。

未来展望

作者将在后续文章中提出行动方案,帮助企业让人们不仅关心安全,还能支持和参与健康的安全行为。

本文通过对比备份与安全,揭示了安全投资被商业世界忽视的深层原因,强调需要改变人们对安全的认知和沟通方式。

40. America's best-paid CEOs have the worst-paid employees (pluralistic.net)

这篇文章探讨了美国高管薪酬与员工薪酬之间的巨大差距,并指出了股票回购机制在其中起到的关键作用。

核心问题: 美国收入最高的CEO往往拥有薪酬最低的员工。过去五年,薪酬最低的100家标准普尔500指数公司在股票回购上花费了超过5000亿美元,而这些资金本可用于提高员工工资或投资于公司长期发展。

股票回购的影响:

  • 机制: 股票回购通过减少流通股数量来人为抬高股价,直接增加了持有大量公司股票的CEO的财富。
  • 代价: 用于回购的资金本可用于研发、降价或提高员工福利。例如,Lowe's公司在五年内花费430亿美元进行回购,CEO因此获得1800万美元,但若将这430亿美元分给28.5万名员工,每人每年可获得约3万美元的奖金。
  • 后果: 这种做法激励CEO追求短期股价表现而非公司长期健康,可能导致产品质量下降(如波音案例)和对员工投资的忽视(如92%的Chipotle员工无法负担401(k)退休计划)。

反驳传统经济学观点: 文章驳斥了“高管薪酬与员工收入无关”以及“股票激励促进长期主义”的传统经济学观点。数据表明,CEO的巨额薪酬(尤其是通过回购推高的股价)确实以牺牲员工生活工资为代价,且并未带来可持续的商业模式。

政策建议:

  1. 证券交易委员会应加强执法,重新禁止股票回购,废除《10b-18规则》的安全港条款。
  2. 终结资本利得(来自拥有的资产)相对于工资收入(来自劳动)的税收优惠待遇,并堵上“附带权益漏洞”。
  3. 对股票回购征税(如民主党平台提议将现行税率提高四倍)。
  4. 对高管薪酬过高的公司征税(旧金山和波特兰已实施)。
  5. 禁止薪酬差距过大的公司获得政府合同(总统可单方面执行)。

结论: 当前的经济激励机制助长了企业高管通过牺牲员工福祉和公司长期价值来追求个人财富积累的现象。这种状况并非不可避免,而是政策选择的结果。文章呼吁改变经济学范式,并支持异端经济学的发展。

41. What is the best pointer tagging method? (coredumped.dev)

指针标记方法总结

指针标记是将元数据编码到机器字大小的指针中的技术,能生成紧凑的表示形式,便于在寄存器间传递。这在动态编程语言实现中很常见,也可用于任何需要指针额外运行时信息的场景。文章通过基准测试比较了四种标记方案,并分析了编译器优化和硬件架构的影响。

一、指针标记方案概述

测试的五种方案如下:

  1. 低位标记:利用指针对齐特性,在64位平台的低位3位(总是0)存储标记。支持8个标记值。
  2. 低位字节标记:将指针左移一字节,用最低字节存储标记。支持256个标记值。
  3. 高位标记:在指针高位存储标记,需右移指针。支持8个标记值。
  4. 高位字节标记:类似低位字节标记,但标记在最高字节。支持256个标记值。可利用硬件TBI特性,但测试未启用。
  5. NaN Boxing:利用IEEE浮点数中未使用的NaN位模式存储指针和标记,主要适用于JavaScript等语言。

基准对照方案是“胖指针”,使用两个机器字分别存储标记和指针(如Rust枚举)。

二、关键测试发现

1. 标记值0的优化

  • 低位标记在标记为0时性能最佳,编译器能使用单条test指令完成标记检查与比较,且解标记无需额外操作,甚至优于胖指针方案。
  • 这是由于零值的特殊优化;其他标记值(如1-7)性能趋于一致。

2. 架构差异影响显著

  • ARM与x86对比:在x86上,低位字节标记因可直接通过dl等寄存器访问低位字节而更快;ARM上则需掩码操作。
  • 编译器优化差异:GCC能将标记去除操作(如减法)与指针加载指令融合,提升约20%性能;LLVM未进行此优化。

3. 标记提取操作

  • 检查标记时,高位标记方案可通过SIMD指令并行比较多个标记,性能更优。
  • 胖指针因数据宽度较大,无法自动向量化,反而可能更慢。

4. 函数调用场景

  • 标记指针因尺寸更小,在函数参数过多时更少触发栈溢出,性能优势明显。
  • 批量处理数据时,标记方案的紧凑布局也带来缓存优势。

5. 标记消除

  • 编译器通常无法完全消除标记-解标记操作(除胖指针),除非提供明确提示(如内存屏障)。
  • 通过提示后,大部分方案可消除标记操作,但高位字节标记仍有残留。

6. 浮点与NaN Boxing

  • NaN Boxing在缓存命中时优势不明显,但在缓存未命中(如浮点数据大)时可避免指针解引用,显著提升性能。
  • 微基准测试难以体现此优势,因测试通常保持缓存热。

三、核心结论与建议

  1. 性能瓶颈在于内存,而非CPU指令:缓存未命中的代价(数百周期)远大于标记操作节省的1-2条指令。优化应优先减少指针跳转和缓存缺失。
  2. 方案选择需权衡多因素
    • 标记容量:字节方案支持256个标记,位方案仅支持8个。
    • 数据内联:标记位少则可用于内联存储大整数、浮点数或小字符串。
    • 可移植性:低位标记适用于绝大多数架构;高位标记需假设指针高位未被系统使用。
  3. 通用场景差异不大:各方案通常均需两条指令完成标记和解标记,特定优化属于例外。
  4. 实测优先:性能收益因工作负载而异,应结合实际基准测试选择方案。

文章通过详细测试揭示了指针标记在编译器优化、硬件架构下的复杂行为,最终强调系统优化应聚焦内存访问模式,而非过度微观优化标记方案。

42. The short history of global living conditions and why it matters that we know it (ourworldindata.org)

全球生活条件简史及其重要性

本文通过数据揭示,全球生活条件在过去200年间取得了显著改善,但公众普遍对此认知不足,这会影响我们对未来的信心和努力。

核心进展

1. 贫困大幅减少

  • 极端贫困:1820年全球近80%人口处于极端贫困,2019年已降至10%以下。
  • 更高贫困线:无论采用何种贫困标准,全球贫困人口比例均持续下降。
  • 背景:在全球人口增长7倍的同时实现减贫,是经济生产力提升和正和博弈(经济增长使所有人受益)的结果。

2. 教育普及与识字率提升

  • 1820年全球识字率仅10%,1930年升至约33%,目前达到87%。
  • 识字人口从1800年不到1亿增至如今约51亿。

3. 健康水平飞跃

  • 儿童死亡率:1800年约43%的新生儿在5岁前死亡,2021年降至4%。
  • 进步因素:除了医学突破(如病菌理论、疫苗、抗生素),营养改善、公共卫生和住房条件提升也至关重要。

4. 政治自由扩展

  • 19世纪全球几乎没有民主政体。
  • 20世纪下半叶民主化加速,目前全球超过一半人口生活在民主国家,但近年进展停滞。

5. 人口结构转型

  • 1800年全球人口约10亿,现已超80亿。
  • 人口增长是死亡率下降的结果,随着生育率在全球范围内下降(从1960年代每位妇女生育5个以上孩子降至目前约2.5个),人口增长预计将停止。

为何公众认知与事实脱节?

  • 媒体倾向于报道负面事件和突发灾难,忽略渐进式进步。
  • 教育系统缺乏对长期发展趋势的定量数据呈现。
  • 这种认知差距导致多数人(如英美调查显示超过90%)认为世界没有变好,甚至认为极端贫困在加剧。

为何了解这些历史很重要?

  • 尽管取得巨大进步,贫困、自由受限、环境危机等问题依然严峻。
  • 了解历史成就能为解决现有问题提供信心和动力。
  • 进步依赖于协作,而对共同历史的认知是集体努力的基础。
  • 忽视历史真相可能导致对人类能力和相互信任的丧失。

:本文使用的世界银行贫困数据基于旧版方法(2011年国际美元),目前该行已更新数据标准(如极端贫困线调整为2021年每天3美元)。最新数据可查阅世界银行平台。

44. Which open-source projects are widely used but maintained by just a few people?
46. Design Patterns Are Temporary, Language Features Are Forever (ptrtojoel.dev)

文章摘要

本文探讨了设计模式与编程语言特性之间的关系,核心观点是设计模式往往是针对特定语言限制或时代需求的临时解决方案,而语言自身的进化特性则更为持久和根本

作者以 “访问者模式”(Visitor Pattern) 为例,阐述了自己的认知转变过程:

  1. 最初的困惑:作者过去未能理解访问者模式的价值,认为其解释往往脱离实际,仅为展示模式而展示。
  2. 通过新特性获得理解:学习 Rust 语言模式匹配后,作者领悟到访问者模式本质上是在面向对象范式下模拟模式匹配的一种方式。
  3. 现代语言特性的冲击:随着 Java 21 引入 switch 表达式、模式匹配和密封类型等新特性,作者发现过去需要通过访问者模式解决的问题,现在可以用更简洁、更直接的方式实现。

文章通过一个文件系统操作的示例进行了对比:

  • 传统 Java(使用访问者模式):代码冗长,涉及多个类(NodeBlobNodeTreeNodeNodeVisitor及其实现类),存在双重分派,扩展新功能需增加新的 visit 方法,代码可读性和维护性较差。
  • 现代 Java(使用新语言特性):利用 sealed interfacerecordswitch 模式匹配,代码更简洁,焦点从复杂的类继承和方法重载转移到数据本身的操作上,逻辑更清晰直观。

作者总结认为,像访问者模式这类设计模式,在语言特性不足时是有效的“补丁”。当语言通过引入更强大的特性(如模式匹配)来弥补这些缺陷时,相应的模式就可能变得过时。文章赞赏了现代 Java 的特性更新,并表达了更倾向于使用语言原生特性而非过度依赖设计模式的编程哲学。

47. F3 – Fight Flash Fraud (fight-flash-fraud.readthedocs.io)

F3 – 对抗闪存欺诈

  • 主要目标:该工具或项目旨在对抗闪存存储设备(如U盘、SD卡)领域的欺诈行为。
  • 当前内容限制:提供的文档页面内容仅包含版权声明(©2017, Michel Machado)以及用于生成该文档的技术栈信息(Sphinx 1.8.6 & Alabaster 0.7.12),未包含F3工具的具体技术原理、功能特性、使用方法或详细说明。
  • 信息总结:基于现有文本,F3是一个针对闪存设备欺诈问题的项目,但具体的工作机制、应用场景和功能细节需要在其他文档页面中查阅。