2024-03-01
23 篇热帖
2. Fugitive Wirecard COO Jan Marsalek exposed as decade-long GRU spy (theins.ru)
Wirecard前首席运营官马尔萨莱克被揭露为GRU长期间谍
核心事件
潜逃的Wirecard前首席运营官扬·马尔萨莱克不仅是德国历史上最大金融欺诈案的核心人物,更是俄罗斯军事情报机构(GRU)服务了十年的间谍。一项由《内幕报》、《明镜周刊》、德国电视二台和《标准报》联合进行的调查显示,自2020年6月Wirecard丑闻曝光后,马尔萨莱克逃往俄罗斯,并在GRU的保护下,冒充一位名叫康斯坦丁·拜亚佐夫的东正教神父生活。
背景与欺诈
- Wirecard公司:曾是德国DAX-30指数成分股,市值高达280亿欧元,被视作德国金融科技的骄傲。
- 欺诈核心:2020年审计发现,该公司声称的19亿欧元资产根本不存在。其商业模式建立在伪造收入和复杂的“循环转账”骗局上。
- 马尔萨莱克的角色:作为首席运营官,他负责伪造公司记录、洗钱,并组织了对揭露其欺诈的记者和做空者的间谍与骚扰活动。
间谍生涯的起源
- 招募:马尔萨莱克通过其女友、前情色演员娜塔利娅·兹洛比娜结识了GRU中校斯坦尼斯拉夫·彼得林斯基。2014年7月,兹洛比娜在法国尼斯附近的一艘游艇上将马尔萨莱克介绍给了彼得林斯基,并称他为“来自GRU的将军”。
- 深化关系:此后,马尔萨莱克与GRU的关系日益紧密。他频繁前往俄罗斯,与彼得林斯基等人一起旅行,甚至前往叙利亚战场体验实战。彼得林斯基利用马尔萨莱克的野心和资源,将他发展为一个有价值的情报资产。
为俄罗斯情报机构工作
- 情报收集:马尔萨莱克利用Wirecard的资源和网络,为俄罗斯情报机构收集敏感信息。例如,他曾获得一份关于斯克里帕尔中毒事件的化学武器禁止组织(OPCW)机密报告,其中包含了军用级神经毒剂“诺维乔克”的配方。
- 组建间谍网络:他雇佣了奥地利前国内情报机构(BVT)的退休官员马丁·魏斯和埃吉斯托·奥特等人,对记者和竞争对手进行监视和背景调查。
- 私人武装:马尔萨莱克试图在利比亚建立一支私人军队,并与俄罗斯私人军事公司(如瓦格纳集团)的前成员建立了联系。他通过一家名为RSB Group的俄罗斯私人安保公司进行投资,该公司最终由彼得林斯基的儿子控制。
逃避追捕与新身份
- 逃亡之路:2020年6月,在Wirecard崩溃前夕,马尔萨莱克从德国经奥地利和白俄罗斯逃往莫斯科。其GRU处理人彼得林斯基协调了此次逃亡。
- 伪造身份:抵达俄罗斯后,他于2020年9月5日在莫斯科以“康斯坦丁·拜亚佐夫”的真实神父身份获得了俄罗斯护照。此后,他还使用了“亚历山大·施密特”和“维塔利·马尔金”等多个伪造身份。
- 持续活动:即使在俄罗斯,马尔萨莱克也未停止活动。他继续通过加密通讯应用Telegram遥控指挥其在欧洲的间谍网络,并使用加密货币支付报酬。
在英国的间谍活动
- 间谍网:马尔萨莱克指挥了一个由保加利亚国民组成的间谍网络,该网络在英国从事间谍活动。2023年,五名成员在伦敦被捕。
- 活动范围:该网络在黑山、奥地利和英国等地为俄罗斯政府收集情报。马尔萨莱克向他们分配任务,并提供了伪造的记者证件作为掩护。
- 针对调查记者:马尔萨莱克还下令对调查其案件的《内幕报》记者克里斯托·格罗泽夫进行监视和地址追踪,导致后者无法安全返回维也纳的家中。
调查依据
本次联合调查主要基于机密文件、电子邮件、聊天记录、手机和旅行数据,以及对马尔萨莱克身边人士(包括其母亲和招募他的GRU处理人)的采访。俄罗斯安全部门系统性地删除了关键人员的旅行记录和身份信息,以保护马尔萨莱克。
3. The 'Atlanta Magnet Man' is saving our car tires, one bike ride at a time (www.wabe.org)
文章摘要
亚特兰大居民亚历克斯·贝尼尼奥(Alex Benigno)因其独特的街道清洁行动而被人们称为“亚特兰大磁铁人”。他每天骑着自行车,拖着一个装有强力磁铁的拖车,穿行于亚特兰大的街道,专门吸拾散落在路面上的钉子、螺丝及其他金属碎片。这些金属杂物极易刺穿汽车轮胎,给车主带来安全隐患和经济损失。
贝尼尼奥的这项行动完全出于自发,且不收取任何费用。他的核心动机是清除这些危险的金属垃圾,保护市民的轮胎和行车安全。他幽默地表示,除了轮胎店老板,几乎没有人会反对他所做的事情。
这项由个人发起的环保与安全维护行动,通过简单而有效的方式,日积月累地为城市的整洁与安全做出了贡献。
4. Study: 61 UK firms tried a 4-day workweek and after a year, they still love it (www.npr.org)
2022年,英国61家公司参与了一项四天工作制试点项目,员工每周工作四天且不减薪。一年后的后续调查显示,该制度产生了持久的积极效果。
持续的效果与数据:
- 最初作为六个月的实验,目前已有54家公司继续实施该政策,其中超过一半已宣布将其永久化。
- 波士顿学院社会学家Juliet Schor的研究团队通过跟踪调查发现,员工在身心健康、工作与生活平衡以及整体生活满意度方面的改善均得以保持,职业倦怠感下降,工作满意度较试点前有所提高。
- Schor指出,这些稳定的效果并非“新鲜感效应”,员工普遍感觉在新模式下能更好地掌控工作。美国及其他地区的类似试验也呈现出同样积极的结果。
企业的实践与经验:
- 成功实施并非自动发生。例如,伦敦水资源保护非营利组织Waterwise通过优化流程确保了运营:将所有会议限制在30分钟并准时开始,安排专注工作时段(有时甚至设立“周一静默模式”),并规范电子邮件处理时间。
- 具体模式没有统一标准。南威尔士的住房合作社Merthyr Valleys Homes因需维持从客户服务到房屋维修的连续运营,未采用全员统一休假,而是为不同岗位员工设计了多样化的排班方案,包括固定休息日、轮休制、半天工作制或缩短每日工时等。
- 不同团队从各自环节寻找效率提升点,例如维修人员通过更优化的物料规划减少差旅时间,客服团队通过电话快速处理小问题。结果表明员工积极性提高,绩效保持稳定,病假率下降。
- 该公司目前延长了试点以收集更多数据,计划在春季重新评估后再决定是否永久实施。
失败案例的原因:
- 在61家参与试点的公司中,只有少数停止了四天工作制。例如,一家小型咨询公司尽管员工士气和效率有所提升,但未能妥善管理客户与利益相关者的期望。
- 研究人员认为,更好的外部沟通、更强的政策灵活性以及管理层更坚定的支持或许能改变结果,暗示该组织可能没有给予政策足够的机会。
5. Show HN: Struct – A Feed-Centric Chat Platform (struct.ai)
6. Company forgets why they exist after 11-week migration to Kubernetes (www.theolognion.com)
Xenobroom公司是一家硅谷初创企业,于2020年5月开始将其服务器基础设施迁移至Kubernetes。该公司因疫情期间用户量激增而做出此决策,迁移过程中不仅重构了原有的bash脚本和VPS机器,还同步升级了软件依赖和库,甚至将PostgreSQL单机数据库转为利用AWS构建的分布式键值存储,并用支持CI/CD、动态路由及A/B测试的生产环境工作流取代了原有的简易暂存服务器。
然而,历时11周的迁移完成后,公司内部却无人记得其产品的核心用途与存在意义。由于迁移期间服务多次中断,用户与投资者早已对产品缺乏理解,导致产品意义难以追溯。目前,公司CEO正寻求一位曾协助谷歌提升即时通讯市场份额并参与Material Design框架开发的灵媒专家进行“回溯”,以期找回公司最初的目标。
7. Ask HN: Did you encounter any leap year bugs today?
8. Old vs. new growth trees and the wood products they make (hullworks.com)
旧生材与新生材:树木及其木制品的差异
历史窗户历经百年仍能正常使用,而现代窗户通常难以达到同样的寿命。根本原因在于木材来源不同:历史窗户使用的是“旧生材”(old growth wood),而现代窗户多采用“新生材”(new growth wood),两者在性能上存在本质区别。
生长特性与木材质量
- 旧生材:来自生长缓慢的古老树木,年轮紧密(每英寸可达20-25圈),主要由心材构成。心材耐久性强,稳定性高。
- 新生材:多来自人工种植林(如辐射松),生长快速(每英寸仅约7圈年轮),边材比例高。边材易腐、易变形。
生长速度的差异直接影响木材性能:旧生材类似花岗岩,坚硬耐用;新生材则相对脆弱,类似纸张,易腐烂变形。
历史采伐背景
北美原始森林的采伐大致始于19世纪70年代,持续至20世纪40年代。采伐顺序从东海岸(纽约、宾夕法尼亚)逐步向西推进至五大湖地区,随后转向南部,最终在20世纪初延伸至西部。这一时期砍伐的“原始木材”即为旧生材,因其生长缓慢、材质优异,成为当时的高品质建材。
新生材的局限性及应对措施
由于现代人工林木材质量下降,易出现翘曲、开裂、结疤等问题,木材加工业自20世纪70年代起普遍采用“手指拼接”技术:切除木材缺陷部分,再以指形接头拼接。这种方法广泛应用于门窗、线材和结构木材中,实为弥补新生材先天不足的工艺适应。
核心启示:珍惜旧生材制品
旧生材在结构强度、耐久性与稳定性方面具有明显优势。历史窗户等旧生材制品通常具备更长的使用寿命,通过精心维护可再使用百年,无需轻易更换。因此,旧生材制品具有很高的保留与修复价值。
总而言之,木材的生长周期直接决定其质量,现代快速种植的木材在多个方面难以复现旧生材的优异性能。理解这一差异有助于在建筑维护与木材利用中做出更合理的选择。
9. JSR: The JavaScript Registry (jsr.io)
JSR(JavaScript Registry)是一个专为TypeScript和ECMAScript模块(ESM)设计的注册表。它允许开发者直接发布TypeScript源代码,由JSR自动生成API文档、.d.ts类型定义文件,并转译代码以实现跨运行时兼容性。JSR包以web标准的ECMAScript模块形式分发。
JSR建立在npm之上,不是替代npm,而是其超集;这意味着JSR模块可以与任何JavaScript包管理器(如npm、yarn、pnpm)一起使用,并能在任何具有node_modules文件夹的项目中集成。此外,JSR模块支持多种运行时环境,包括Node.js、Deno、Bun和Cloudflare Workers等。
对于模块作者而言,JSR提供了强类型模块的支持,能够获得出色的编辑器集成体验,同时无需手动转译和分发类型定义文件,简化了开发流程。
10. I accidentally deleted a bad game revision from MAME (www.mistys-internet.website)
作者最初为MAME贡献过游戏转储,后在购买PGM主板游戏《Martial Masters》时发现其为台湾地区版本。该版本在MAME中被标记为martmasttw(修订版1.02),但源码注释指出其可能是损坏的转储(bad dump),实际运行时会出现非法指令错误而崩溃。
作者决定重新转储ROM以修正数据库。拆开卡带后发现,芯片并非常见的27C322和27C160型号,而是使用了OKI 27C3202芯片并通过定制适配器模拟为27C322。这种设计罕见,原因不明。
由于适配器形状特殊,在EPROM读取器的ZIF插座中难以正确插入,导致初次转储的数据与MAME已知哈希值不同,但游戏仍无法启动。作者怀疑原转储失败正是由此物理接触问题导致。经过多次尝试固定适配器并重新读取,最终获得一致且正确的转储数据。
将新转储的ROM加载到MAME后,游戏运行完美。然而,作者在准备提交更新时发现,新转储的ROM哈希值已存在于MAME中,属于中文版《Martial Masters》。调查表明,正确的台湾版ROM与中文版ROM字节完全相同,此前之所以被视为独立版本,完全是因为错误的损坏转储数据造成的误判。
因此,作者最终向MAME提交的拉取请求直接删除了martmasttw这一条目,证明该修订版本实际上并不存在。这一经历突出了数据库准确性的重要性:损坏的数据可能长期未被察觉,数据库的更新既可能是增加内容,也可能是纠正和删除错误记录。
11. JPEG XL and the Pareto Front (cloudinary.com)
JPEG XL与帕累托前沿
libjxl 0.10版本发布,主要改进是完全实现了“流式编码”API。该API允许将大图像分“块”处理,显著降低内存消耗,并间接提升了编码速度,尤其在进行大图像的无损压缩时。
无损压缩性能提升
- 问题:在0.9版本中,无损编码大图像内存占用高、耗时长。例如,压缩一张13500×6750的NASA图像需要约8GB内存,耗时超过2分钟。
- 改进:0.10版本将同一操作的内存占用降至0.7GB,单线程耗时30秒(多线程仅需5秒),压缩文件体积也略有减小。
- 不同努力级别下的对比:文章提供了一个详细表格,展示了在不同
effort设置(e1-e9)下,0.9与0.10版本在内存、速度、压缩率上的对比。0.10版本在内存占用上普遍降低了数倍至十余倍,在多线程模式下速度提升最高可达20余倍。
压缩权衡与帕累托前沿
- 权衡:压缩是边际收益递减的过程。提高CPU投入(
effort级别)可以改善压缩率,但收益非线性递减。选择取决于用例:编辑流程适用低努力快速保存,而归档或分发场景则可能值得投入更多时间以获得更小文件。 - 帕累托前沿定义:在比较压缩技术时,需同时考虑压缩密度(比特率)和编码速度。一种方法若在给定时间内能达到最小的文件体积,或在相同文件体积下编码最快,则称为“帕累托最优”。所有帕累托最优方法的集合构成“帕累托前沿”。
- libjxl 0.10的改进:在图表上,0.10版本在各个速度点上的表现均显著优于0.9版本,巩固并扩大了其帕累托前沿优势。
不同图像类型与编解码器对比
- 照片类图像(无损):难以压缩,比特率约8-12 bpp。JPEG XL(0.10)在所有速度点上均优于PNG、无损AVIF和无损WebP。
- 非照片类图像(如漫画):压缩效果更好,比特率可至4 bpp左右。无损WebP在此类图像上压缩效率高,但低努力级别的JPEG XL编码速度更快且体积更小。
- 旧格式的竞争力:对于追求极快编码速度的场景,传统的JPEG格式配合新编码器(如jpegli)仍具吸引力。jpegli在速度和压缩率上均优于mozjpeg和libjpeg-turbo。
有损压缩的帕累托分析
- 三维度:有损压缩需考虑压缩密度、编码速度、图像质量三个维度。文章采用客观质量指标(如SSIMULACRA2)来近似评估质量。
- 质量点分析:文章在多个平均质量点(SSIMULACRA2 60, 70, 85, 视觉无损90)上测试了多种编码器。
- 中等质量(60):JPEG XL和各类JPEG编码器覆盖了合理速度区间的帕累托前沿;AVIF在慢速下能提供更小文件,但收益有限。
- 高质量至视觉无损质量(85-90):JPEG XL主导帕累托前沿。在视觉无损质量下,JPEG XL比libavif小20%,且编码速度快2.5倍;WebP因强制4:2:0色度抽样无法达到此质量。
- 大图像场景:在处理更大尺寸的图像时,JPEG XL的优势更为明显,压缩率显著领先于AVIF、libjpeg-turbo和WebP。
结论
- libjxl 0.10 通过流式编码API大幅降低了内存消耗(数量级改进),并提升了速度,巩固了JPEG XL作为当前最佳图像编解码器的地位,尤其在高质量至视觉无损质量范围。
- JPEG XL 在无损和有损压缩的帕累托前沿上表现优异,覆盖了广泛的速度与质量范围。
- 传统JPEG 在配合jpegli等新编码器后,在追求极快编码速度时仍然是帕累托前沿的一部分。
- 不同编解码器和设置适用于不同用例,云存储服务等会持续跟踪技术发展以优化体验。
12. Where is Noether's principle in machine learning? (cgad.ski)
文章摘要
本文探讨了物理学中的诺特(Noether)原则在机器学习中的适用性,旨在寻找机器学习过程中的守恒量。诺特原则在物理学中建立了作用量连续对称性与守恒定律之间的对应关系,而机器学习中的优化过程(如深度网络)也涉及类似的关键点性质,但“时间”是离散的且约束不同。作者认为诺特原则仍可应用,并通过玩具示例演示了守恒量的存在。
物理学中的诺特原则
物理学中,系统的时间演化通常是某个“作用量”的关键点(平稳点)。诺特原则指出,作用量的连续对称性(如平移或旋转不变性)对应于系统的守恒定律。例如:
- 两体问题:作用量对平移和旋转不变,导致线性动量和角动量守恒。
- 光线透镜问题:旋转对称透镜中,路径的旋转不变性对应于一个守恒量 ( p \wedge (q - c) ),其中 ( p ) 是方向向量。
机器学习中的离散过程
在监督学习中,模型(如深度残差网络)可视为离散过程:输入数据通过一系列参数化变换,优化参数以最小化损失。中间状态序列 ( x_0, x_1, \dots, x_N ) 类似于物理轨迹,但时间离散且约束不同。诺特原则仍可应用,对应于“诺特等变性”(Noether equivariance)。
玩具示例
作者设计了一个可视化示例:
- 变形族:定义一组平面变形映射,该族在平移和旋转下不变(即共轭不变性)。
- 优化任务:通过梯度下降优化参数,将输入聚类映射到目标位置。
- 守恒量发现:应用离散诺特原则,平移不变性导致梯度期望 ( \mathbb{E}[g_i] ) 在层间近似守恒;旋转不变性导致类似角动量的量 ( \mathbb{E}[g_i \wedge x_i] ) 守恒。
- 物理解读:当聚类独立时(无交互),每个聚类的梯度守恒(类似牛顿第一定律);存在交互时,梯度可能在聚类间转移,但某些子集上仍可能近似守恒。
离散诺特原则的证明
作者给出了一般证明,针对优化过程的单步:
- 定义作用量 ( S = \langle g_x, x \rangle - \langle g_y, \varphi_\theta(x) - y \rangle ),其中 ( g_x, g_y ) 是梯度,( \varphi_\theta ) 是参数化变换。
- 前向和后向传递由 ( S ) 对 ( g_y ) 和 ( x ) 的平稳性编码,参数最优性由 ( \partial S / \partial \theta = 0 ) 表示。
- 若变换族具有诺特等变性(即作用量在对称变换下不变),则计算 ( \partial S / \partial \epsilon ) 可得守恒律 ( \langle g_x, \partial x / \partial \epsilon \rangle = \langle g_y, \partial y / \partial \epsilon \rangle )。
- 特例:对于线性层,( GL(n) ) 作用导致梯度张量积的期望为零。
结论与展望
文章指出,若深度模型具有有意义的“诺特等变性”,则可构建守恒量并研究类似物理的“交互”概念。然而,这在实践中是否有效尚不确定,作者鼓励探索真实模型中的等变性(可能仅在模型参数附近近似成立)。本文通过类比和证明,为机器学习与物理学优化原理之间的联系提供了新视角。
13. How we applied fuzzing techniques to cURL (blog.trailofbits.com)
文章总结:cURL模糊测试技术的应用与改进
背景与评估范围 2022年末,Trail of Bits受OSTIF委托,对cURL命令行工具及其库libcurl进行安全评估。评估包括代码审查、威胁建模,以及本文重点介绍的对cURL模糊测试代码的分析与改进工程。
cURL现有的模糊测试架构
cURL使用Google的OSS-Fuzz服务进行持续模糊测试,其代码和语料库位于GitHub的curl-fuzzer仓库。该仓库为libcurl支持的每种协议(如HTTP、FTP、WebSocket)构建独立的模糊测试目标。每个目标接收特定格式的输入文件,该文件采用自定义的类型-长度-值(TLV) 格式,不仅编码协议数据,还包含协议选项和元数据。
发现与改进:以HSTS和Alt-Svc为例 评估初期,通过分析OSS-Fuzz的覆盖率报告,发现hsts.c(处理HTTP严格传输安全)和altsvc.c(处理Alt-Svc头)的代码覆盖率极低。原因有三:
- 语料库中缺少包含相关协议头的初始测试用例(种子文件)。
- 模糊测试未设置
CURLOPT_HSTS等选项,导致相关功能未被启用。 - 规范要求忽略非加密连接上的
Strict-Transport-Security头,而模糊测试连接均被视为非加密,导致相关代码路径无法被覆盖。
采取的改进措施与效果
- 为相关协议添加了新的种子文件。
- 在模糊测试初始化时启用了
CURLOPT_HSTS等选项。 - 修改libcurl,允许在调试构建中通过环境变量绕过HSTS的HTTPS限制,并在模糊测试中设置相应的环境变量。
这些修改合并后,覆盖率显著提升。一年多后(2024年1月),hsts.c的行覆盖率翻倍,altsvc.c的行覆盖率增长了近五倍。
进一步的优化与高级建议 除了上述具体修复,评估还识别出其他提升覆盖率的机会,并向cURL团队提出了战略性建议:
- 扩展种子文件:为
CURLOPT_LOGIN_OPTIONS、CURLOPT_USERPWD、CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256等众多尚未覆盖的libcurl选项创建新种子文件。 - 全局启用特定选项:在模糊测试中启用
CURLOPT_COOKIEFILE、CURLOPT_CRLFILE等选项,以模糊测试cookie引擎和证书吊销列表处理等代码。 - 使用协议字典:目前仅为HTTP目标提供了模糊测试字典。建议为其他文本协议(如FTP、IMAP)创建字典,以引导模糊器更快地发现特定语法和关键词相关的错误。
- 对命令行接口进行模糊测试:通过AFL++的
argv-fuzz-inl.h等工具,对curl的命令行参数解析进行模糊测试,这已在一次审计中发现了多个漏洞。 - 实施结构感知模糊测试:这是最关键的长期建议。当前TLV输入格式导致大部分变异生成的输入无效,模糊器效率低下。建议编写自定义变异器,确保所有变异后的输入都符合TLV结构,从而显著提升覆盖反馈的速度和有效性,更可能发现深层漏洞。
结论 此次工程通过分析覆盖率、补充种子文件、启用关键选项和修改代码逻辑,有效提升了cURL核心安全功能(HSTS、Alt-Svc)的模糊测试覆盖。文章同时指出,采用字典、对CLI进行模糊测试以及实施结构感知模糊测试等高级技术,是进一步提升cURL模糊测试效能、发现更深层次漏洞的关键方向。
14. You can't make an open source HDMI 2.1 driver (arstechnica.com)
- 核心限制:HDMI论坛(HDMI标准授权组织)禁止对HDMI 2.1规范进行开源实现,导致AMD等厂商无法提供支持HDMI 2.1+功能的开源驱动程序。
- 受影响用户:Linux用户在通过HDMI连接时,无法使用高分辨率与高刷新率组合(如4K@120Hz、5K@240Hz),也无法通过HDMI实现AMD FreeSync等技术。
- 背景与过程:
- HDMI 2.1规范从未公开发布,Phoronix早在2021年即指出其非公开性。
- AMD工程师Alex Deucher自2021年起推动开源实现,并于2023年2月表示正与法务团队评估合规方案。
- 2023年期间,AMD虽在基础功能上取得进展,但经多次法律审查,最终决定权交由HDMI论坛。
- 2023年10月,HDMI论坛明确拒绝开源许可申请。
- 关键障碍:HDMI论坛的授权协议严格限制规范的使用与分发,不允许开源社区开发独立驱动。
- 当前状况:开源HDMI 2.1驱动开发被正式阻断,Linux用户短期内无法通过开源方案实现HDMI 2.1的高级功能。
15. Streaming HTML out of order without JavaScript (lamplightdev.com)
文章介绍了无需JavaScript实现HTML流式乱序传输的新技术。核心是通过服务器端分块发送HTML,利用浏览器Shadow DOM的slot机制和声明式Shadow DOM特性,实现内容按生成顺序传输但按正确结构渲染,无需客户端脚本介入。
Demo演示要点:
- 页面先渲染应用外壳(页头页尾),列表区域显示加载占位符
- 服务器延迟后发送列表项HTML,但各列表项内容乱序到达
- 浏览器通过Shadow DOM自动将乱序内容插入对应slot,实现正确顺序渲染
- 查看页面源码可见HTML仍按发送顺序排列
技术背景:
- 传统流式HTML传输可加速首屏渲染,但此前无法解决乱序传输的渲染顺序问题
- 现代框架通过JavaScript实现乱序流式渲染,但需依赖特定框架和脚本
无JS实现的关键技术:
- Shadow DOM:通过slot机制在独立DOM树中定义内容结构,外部内容通过slot属性插入
- 声明式Shadow DOM:新增
<template shadowrootmode="open">语法,允许服务器端声明Shadow DOM结构,浏览器无需JS即可创建 - 流式HTTP响应:服务器持续发送HTML分块而非等待完整响应
实现条件:
- 支持流式传输的HTTP服务器(如Hono,也可用PHP/Java/Go等)
- 支持流式传输的模板语言(如SWTL,可处理异步生成器/数组等)
- 浏览器支持声明式Shadow DOM(现代浏览器均已支持)
工作原理:
服务器首先发送包含声明式Shadow DOM结构的HTML,该结构预定义了内容位置(如<slot name="content">)。随后按生成顺序发送各内容块,每个内容块通过slot属性指定插入位置。浏览器接收到后续内容后,自动将其插入到Shadow DOM中对应的slot位置,从而在DOM树中形成正确顺序,尽管HTML流顺序是乱的。
技术优势:
- 完全无JavaScript依赖,利用浏览器原生Web标准实现
- 无需特定框架,兼容多种后端语言
- 允许内容并行生成和发送,提升服务器响应效率
- 保持渐进式渲染优势,用户可快速看到页面外壳
示例代码结构:
服务器端使用Hono发送流式响应,结合SWTL模板语言异步生成HTML。通过<template shadowrootmode="open">声明Shadow DOM结构,后续发送的HTML片段通过slot="content"属性指定插入位置。浏览器自动处理slot分配,实现乱序传输但正确渲染。
16. Financial systems take a holiday (www.bitsaboutmoney.com)
金融系统与假日文化
金融系统及其相关的人力和计算机系统,继承了建设社会的文化规范,尤其体现在工作时间安排上。银行设有假日,而人们对于假日的认知深受银行营业时间的影响。文化与系统相互塑造,难以分离。这带来了实际影响:节假日期间,移动支付应用的实用性下降。
假日的本质
假日是交易双方共同约定为非工作日的日期,常基于社会默契(如谢林点)。虽然某些假日具有普遍共识(如圣诞节),但许多假日的界定复杂且存在争议。例如日本的“公司创立日”,各公司自定日期,若与之有业务往来的银行需遵守该假日,系统必须记录这些个性化安排。技术系统通常依赖权威数据源(如政府公告或Bloomberg)记录公共假日,但可能无法覆盖这类公司特定假日,导致操作问题。
操作后果
假日常与周末连休形成“长周末”。这期间,消费者交易活动(如黑色星期五、网络星期一)激增,但银行系统基本停滞。金融机构需承诺“次日支付”,但底层资金转账可能需要两个工作日,因此需垫付资金。在长达四到五天的长周末中,需垫付的资金量巨大,增加了流动性压力。
技术挑战与设计考量
金融系统属于计算机系统,但其可用性常远低于谷歌等平台。部分系统故意维持假日停机,作为反欺诈控制手段,通过人员轮岗阻止单一内部人员实施复杂欺诈。完全取消假日不现实,因为系统最终依赖需要休息的人员,且假日安排有助于发现潜在问题。
尽管加密货币等分布式系统倡导24/7运行,但金融系统需在不同文化操作惯例间中介,无法消除假期与工作日之间的差距。某些政府系统(如美国国税局)因依赖遗留批次处理系统而设置“办公时间”,以避免数据完整性风险。
未来趋势
随着技术发展,金融系统可能逐步向更高可用性靠拢,但不会完全消除假日。金融系统是复杂组织网络,依赖具体人员及其社会文化承诺。文化与系统共同演变,基础设施变化虽慢,但仍会发生。
总之,金融系统的假日安排是文化、操作惯例与技术约束交织的结果,短期内不会消失,而应被视为系统设计的固有部分。
17. Ford EVs gain access to Tesla Superchargers starting today (arstechnica.com)
福特电动汽车即日起可使用特斯拉超级充电站
充电协议与网络接入
福特电动汽车已采用ISO 15118“即插即充”协议,充电时无需App或信用卡即可自动完成计费。超过1.5万个特斯拉充电站已接入福特BlueOval充电网络,用户可通过FordPass手机应用或车载Charge Assist应用导航至这些站点。
充电器类型限制
福特电动汽车仅兼容较新的特斯拉超级充电器(最高支持250kW快充),其充电插头底座为黑色。旧款充电器(最高150kW)底座为银色,不会在福特应用中显示。建议用户通过福特官方应用查找兼容充电位置。
适配器使用范围
该适配器仅适用于直流快充,不支持特斯拉交流目的地充电器。福特插电混动车型仅支持交流充电,无需适配器,也无法使用超级充电站。
使用注意事项
- 适配器安装简便,福特提供了教程视频。
- 需避免在拔下车辆时遗忘适配器(价值230美元),但因特斯拉充电线需归位至支架,遗忘风险较低。
战略意义
福特CEO Jim Farley表示,此举通过提供更多充电选择,提升公共充电体验,是福特作为电动汽车品牌增长的关键举措。
18. CACM Is Now Open Access (cacm.acm.org)
19. Neurosurgeon pioneers Alzheimer's, addiction treatments using ultrasound [video] (www.youtube.com)
20. GGUF, the Long Way Around (vickiboykis.com)
文章摘要:GGUF文件格式详解
本文通过深入探讨机器学习模型及其文件格式的演变,解释了GGUF(GPT-Generated Unified Format)的背景、结构和功能。文章从基础概念出发,逐步介绍序列化技术,最终聚焦于GGUF的本地推理优化。
机器学习模型基础
- 模型本质:机器学习模型是包含架构、权重和偏置的文件或集合,通过训练产生。以线性回归为例,模型通过输入数据(如日照小时数)预测输出(如坚果酱罐数),使用PyTorch实现时,模型对象包含状态字典(state_dict),存储权重和偏置的张量。
- 训练过程:定义模型、损失函数(如RMSE)和优化器,通过前向传播和反向传播迭代更新权重,最小化预测误差。训练后,模型成为内存中的对象,可用于推理。
序列化与文件格式演变
- 序列化需求:训练后的模型需持久化到文件,以便重用、分发或恢复训练。PyTorch使用Python的Pickle进行序列化,将对象转换为字节流写入文件。
- Pickle的问题:Pickle不安全,因为它允许执行任意代码,存在恶意攻击风险,且跨语言兼容性差。
- Safetensors的引入:HuggingFace开发Safetensors作为Pickle的替代。它更安全、高效,基于Rust实现,跨语言兼容,优化张量存储,通过类型安全和结构化头信息(包含元数据和数据偏移)提升性能。
GGML到GGUF的本地推理优化
- GGML的兴起:随着Apple Silicon性能提升和本地推理需求(如Whisper.cpp、llama.cpp),GGML格式被创建。它优化用于边缘设备,使用16位浮点减少内存占用,包含魔术字节、元数据和张量数据。
- GGML的局限:GGML将元数据和数据存储在同一文件,更新元数据时破坏向后兼容性,且需要特定架构的转换脚本。
- GGUF的改进:GGUF是GGML的升级版,保持单文件结构但引入键值对存储元数据,支持版本控制,确保向后兼容。其结构包括:
- 头信息:魔术字节("GGUF")、版本号(如版本3)、元数据键值对。
- 张量信息:张量名称、类型、形状和数据偏移。
- 张量数据:实际权重数据,使用16位浮点优化内存和计算。
GGUF的关键特性与应用
- 格式设计:GGUF文件默认小端序,头信息灵活,通过键值对存储模型元数据(如层数、注意力头数),便于扩展。
- 本地推理优化:GGUF专为本地推理引擎(如llama.cpp、Ollama)设计,支持量化减少内存占用,提升在消费级硬件(如Apple Silicon)上的性能。
- 生态支持:GGUF成为本地LLM推理的标准格式,广泛应用于HuggingFace模型转换和分发,结合压缩技术(如LoRA)使大模型本地化可行。
总结
文章从机器学习模型的基本原理出发,追溯了序列化格式从Pickle到Safetensors,再到GGML和GGUF的演变。GGUF通过改进元数据存储和向后兼容性,优化了本地推理效率,成为当今LLM本地部署的关键格式。理解这些背景有助于更好地使用本地推理工具和模型文件。
21. Things You Should Never Do, Part I (2000) (www.joelonsoftware.com)
核心警告:永远不要从头重写代码
本文的核心观点是:软件公司可能犯下的最严重战略错误,就是决定从头开始重写整个代码库。 作者以网景(Netscape)的失败案例为引子,阐述了这一行为的毁灭性后果,并剖析了程序员热衷于此的心理根源,最后提出了正确的替代方案。
一、灾难性案例:网景的教训
- 事件:网景公司耗费近三年时间从头重写其浏览器代码(跳过5.0版,直接开发6.0)。
- 后果:在瞬息万变的互联网行业,这漫长的空窗期导致其市场份额急剧下滑,竞争对手趁虚而入。
- 更广泛的模式:宝兰(Borland)在重写dBase for Windows和Quattro Pro时犯了同样错误,导致项目失败或产品竞争力低下。微软也曾计划从头重写Word(金字塔项目),但幸运的是他们保留了旧代码的开发,从而避免了战略灾难。
二、程序员为何热衷于“推倒重来”?
- 本质心态:程序员内心如同建筑师,渴望在一片空地上从头建造宏伟项目,对渐进式的改进和修复缺乏兴趣。
- 根本原因:“读代码比写代码更难”。由于难以理解旧代码的复杂性和历史决策,程序员往往认为旧代码是“一团乱麻”。
- 错误的认知:他们将代码中那些为了处理各种边缘情况(如特定硬件、低内存、用户误操作)而积累的补丁和修复,视为丑陋的“毛发”,却忽略了这些“毛发”正是代码经过实战检验、稳定可靠的证明。
三、从头重写的巨大代价
- 抛弃宝贵知识:旧代码中包含了大量在真实环境中发现并修复的bug,这些是用时间和金钱换来的经验。重写意味着将所有这些积累全部丢弃。
- 赠予竞争对手时间窗口:长达数年的重写期,等于将市场拱手让人。
- 陷入战略瘫痪:在此期间,公司无法推出可交付的新版本,无法响应市场需求和新功能,几乎等同于停业。
- 浪费巨额资金:花费大量资源去重新编写已经存在且有效的功能。
四、旧代码的价值与“丑陋”表象的本质
作者指出,当程序员抱怨代码“糟糕”时,问题通常分三类,且均无需推倒重来:
- 架构问题(如代码职责划分不清):可以通过谨慎的重构(Refactoring)、移动代码、优化接口来逐步解决,而无需废弃现有代码。
- 效率问题(如某些模块运行缓慢):这通常只影响一小部分代码,可以进行局部优化甚至重写。通常优化1%的关键代码就能获得99%的性能提升。
- 代码风格丑陋(如命名不一致):这是最不重要的问题,通常可以用编辑器宏或查找替换工具在几分钟内批量解决,而非重写整个项目。
五、正确的道路:渐进式改进
- 不存在“新代码必然更好”的保证。新团队很可能重蹈旧版本的覆辙,甚至引入新的、未曾有过的问题。
- “先做一个再扔掉”的旧法则在大型商业软件项目中极其危险。它只适用于实验性的、小规模的编码。
- 正确的做法是:在现有经过检验的代码基础上,进行有计划、持续的重构和优化。这既保留了代码中的宝贵知识和稳定性,又能逐步改善架构和性能。
总结:从头重写代码是一项成本极高、风险极大且通常不必要的冒险。成功的软件演进应基于对现有代码库的尊重、理解和谨慎的改进,而非彻底的废弃与重写。
22. Defcon: Preventing overload with graceful feature degradation (2023) (www.micahlerner.com)
Defcon:通过优雅的功能降级防止过载
研究背景
系统过载可能导致严重故障,影响用户体验并可能损坏硬件。Meta 开发了 Defcon 系统,通过优雅的功能降级(graceful feature degradation)动态调整资源使用,在过载期间提升系统可用性。
核心设计与抽象
- 旋钮(Knob)抽象:每个功能对应一个旋钮,包含唯一名称、开关状态、负责团队和业务关键性等级。
- 分类与优先级:旋钮按服务、产品或功能(如搜索、视频)分组,并根据业务影响分为多级(如“Defcon Level 1”为最严格降级)。
- 客户端与服务端旋钮:
- 服务端旋钮:直接调整服务器逻辑,响应延迟低(秒级)。
- 客户端旋钮:部署在移动端(如 iOS 应用),可减少网络请求,但更新机制更复杂(支持静默推送、配置拉取及紧急配置协议)。
工作机制
- 状态传播:旋钮状态通过 Knob Actuator Service 同步至服务器和客户端,存储于数据库。
- 测试与验证:通过 A/B 测试验证功能降级对资源和用户行为的影响,数据用于容量规划和事件响应决策。
- 事件处理:值班人员可根据实时监控(如资源利用率、用户指标)选择性地关闭非关键功能,快速释放容量。
评估方法
- 资源指标:使用实时监控系统(RMS)、资源利用率指标(RUM)和瞬时资源利用率(TRU)量化降级效果。
- 用户行为测量:跟踪业务指标(如视频观看时长)的变化。
- 实验验证:通过模拟过载场景(如逐步增加流量并关闭旋钮),证明降级可显著降低基础设施负载,例如减少对 Memcache、TAO 等核心服务的压力。
实际影响与经验
- 资源节省:关闭低优先级功能可快速释放计算资源,而严格降级(如 Level 1)虽能大幅节省容量,但对业务指标影响显著。
- 跨系统依赖:功能降级可缓解上游服务压力(如 Instagram 旋钮影响 Facebook 及 TAO 系统)。
- 挑战:需与产品团队协作定义功能关键性;旋钮的维护和代码覆盖需持续优化。
结论
Defcon 提供了一个可扩展的框架,通过动态禁用功能应对过载,平衡系统稳定性和用户体验。其设计抽象和测试方法为大规模系统容错提供了实践参考。
23. Where I'm at on the whole CSS-Tricks thing (chriscoyier.net)
CSS-Tricks 的出售、衰落与转机
2022年3月,作者将 CSS-Tricks 出售给 DigitalOcean。出售的主要考量包括:
- 公平的售价。
- DigitalOcean 作为资源丰富的上市公司,明确将内容与社区作为投资策略以带动业务增长。
- 旨在弥补 DigitalOcean 在前端内容领域的缺失。
- 承诺移除网站广告,仅展示 DigitalOcean 的自身推广。
- 留任主编 Geoff。
- 作者当时同时经营 CSS-Tricks 和 CodePen,压力过大。
出售初期进展尚可,有新内容出现。但一年后,DigitalOcean 裁撤了 Geoff 及所有内容与社区团队,网站陷入停滞。最后一篇文章关于 Passkeys,此后便再无更新。作者对此感到遗憾,但作为出售方,理解并接受 DigitalOcean 对网站拥有完全控制权。
公众对 DigitalOcean 的不满情绪高涨,认为其浪费了一个宝贵的行业资源。作者透露,他曾尝试与 DigitalOcean 新上任的内容与社区副总裁沟通,并提出一个大胆的提案:将 CSS-Tricks 的所有权转回给作者,由作者负责运营。
作者提案的核心方案:
- 由作者重新运营网站,利用其对网站的熟悉度快速恢复运营。
- 为 DigitalOcean 扭转品牌形象,消除因放弃 CSS-Tricks 产生的负面口碑,重新激发社区兴趣。
- 创作有助于 DigitalOcean 业务的内容,例如结合前端热点(如 Astro 框架)撰写相关教程。
- 将网站托管迁移至 DigitalOcean,作为其 WordPress 托管服务的活广告。
- 作为交换,DigitalOcean 可免除后续投入,仅从品牌和营销层面获得回报。
然而,该提议最终未能推动。DigitalOcean 方面回复表示仍在考虑,但后来告知提议者缺乏在公司内部推动此方案的“信念”。
截至2024年7月的最新进展:
- 原主编 Geoff 已回归并负责网站运营。
- 网站设计得到改善,内容重新开始更新,包括发布高质量的深度指南。
- 作者将此视为一个积极的成果。