2024-06-16

38 篇热帖

1. Perplexity AI is lying about their user agent (rknight.me)

文章摘要:Perplexity AI 的用户代理欺骗行为

文章作者 Robb Knight 在 2024 年 6 月 15 日撰文指出,Perplexity AI 存在隐瞒其真实用户代理(User Agent)并无视 robots.txt 规则抓取网站内容的行为。

问题背景与测试过程

  • 作者在个人网站(rknight.me)及 MacStories 上实施了限制 AI 爬虫的措施:从 3 月 30 日起在 robots.txt 中禁止 PerplexityBot,6 月 14 日起在 Nginx 服务器端进行封锁(返回 403 错误)。
  • 尽管如此,Perplexity AI 仍能总结一篇明确禁止其爬取的博文内容,且摘要细节准确,引发作者质疑。
  • 作者通过代码模拟 PerplexityBot 用户代理访问测试,确认服务器封锁机制本身有效。

Perplexity AI 的矛盾回应

  • 当被问及如何绕过 robots.txt 访问内容时,Perplexity AI 先是声称自己“无法伦理地访问或总结被 robots.txt 限制的内容”。
  • 但随后又承认先前提供了相关总结,并为此道歉,称其行为“不道德”。作者认为此回应自相矛盾且敷衍。

技术证据:用户代理伪装

  • 通过服务器访问日志分析(由作者及另一位开发者 Lewis 共同验证),发现 Perplexity AI 实际使用的用户代理字符串为标准的 Windows 10 下的 Chrome 浏览器格式,未包含其声明的“PerplexityBot”标识。
  • 这表明 Perplexity AI 使用无头浏览器(Headless Browser)抓取内容,并故意伪装成普通浏览器,从而绕过基于用户代理的封锁,且其请求 IP 似乎不来自已知的 Perplexity AI 网段,进一步增加了屏蔽难度。

作者的反应与后续行动

  • 作者对此做法表示强烈不满,认为 AI 公司无偿抓取内容用于训练,损害了内容创作者的权益。
  • 他已加入 Perplexity AI 的 Discord 社区,在介绍频道说明情况,并在错误报告频道提交了此问题。
  • 文章最后以“Fuck you, pay me”表达了对当前AI数据抓取生态的愤怒,并暗示可能寻求GDPR等法律途径维权。

核心结论

文章揭示了Perplexity AI在实际操作中无视网站限制措施、伪造用户代理以规避封锁的行为,质疑其伦理声称的真实性,并反映了当前AI内容抓取对网站所有者带来的挑战。

2. Do not try to be the smartest in the room; try to be the kindest (www.jorgegalindo.me)

本文作者分享了个人经历与观点,强调在会议和商业交往中,善良比聪明更重要。作者自谦并非专家,但凭借多年经验,始终以“不求最聪明,但求最善良”的原则指导言行。在商业世界常被“战争”隐喻主导的背景下,善良被视为一种能改变游戏规则的软技能。

作者提出了“善良框架”的核心四要素:

  1. 倾听:真正关注他人发言,而非等待自己说话的机会。
  2. 尊重:理解并接纳不同现实,不仅自己做到,也倡导他人践行。
  3. 共情:深入理解议题背景,设身处地为他人着想。
  4. 解决问题:通过结合前三点,推动会议达成解决方案,避免时间浪费。

作者认为善良具有传染性,能促进团队间的良性互动。他总结道:很少有人会怀念会议室里最聪明的人,但每个人都会想念一位善良的人。

3. Show HN: We Made The World's Smallest and Cheapest Network Switch (docs.murexrobotics.com)

mrxSwitch:全球最小且最便宜的开源网络交换机

核心概述

mrxSwitch 是一款完全开源、全球最小且最便宜的网络交换机。它专注于简洁与低成本,采用外部磁性元件、高性能非管理交换芯片和 1.25mm 间距的快速以太网(100BASE-TX)连接器。

技术规格

  • 类型:5 端口 100BASE-TX 非管理型交换机
  • 核心芯片:IP175Gx 以太网集成交换芯片
  • 电源:支持高达 15V 输入,通过内部电路降至 3.3V 工作电压
  • 电路设计:四层板设计以最小化噪声;所有中心抽头采用完整的 Bob-Smith 终端;差分对阻抗精确计算为 100Ω
  • 磁性元件:使用 10 对磁性变压器和共模扼流圈,以确保符合 IEEE 802.3 标准
  • 尺寸:V2 版本为 44.9mm × 42.2mm,为当前全球最小网络交换机
  • 应用场景:嵌入式系统、遥控潜水器(ROV)与自主水下航行器(AUV)、消费电子、DIY 项目及其他空间受限的网络应用

状态与版本

  • V2.0:已测试且功能正常,提供电路板布局文件。
  • V1.0:已测试且功能正常,相关详情见博客文章。

主要组件

  1. IC Plus IP175Gx:5 端口 10/100 以太网集成交换芯片(85nm CMOS 工艺,全状态指示灯,EEPROM 配置)。
  2. LM1117MP-3.3:800mA LDO(3.3V 固定输出,最大输入 15V,压差 1.2V)。
  3. QT48A03:千兆双端口变压器(350μH 初级,8mA 直流偏置)。
  4. BT16A07:百兆单端口变压器(350μH 初级)。
  5. 2x QT24A23(已停产):百兆/千兆单端口变压器(350μH 初级,8mA 直流偏置)。

V2 版本改进

  • 尺寸减小 30%,成为全球最小网络交换机(截至 2024 年 6 月)。
  • 物料清单(BOM)成本整体降低 15%(使用更多基础元件)。
  • 用更便宜、更紧凑的 QT48A03 替换了两个 QT24A23 变压器。
  • 移除了配置组件和 EEPROM。

附加资源

  • 原理图(PDF)已提供。
  • 项目包含待办事项列表和更新日志。
  • 提供更多产品图片及网络 PLC 模块信息。
4. NLRB judge declares non-compete clause is an unfair labor practice (www.nlrbedge.com)

美国国家劳动关系委员会(NLRB)行政法法官萨拉·卡尔皮宁在审理J.O. Mory公司案件时作出裁决,认定雇主的竞业禁止条款同事非招揽条款构成《国家劳动关系法》下的不当劳动行为。这是首次有行政法法官对此类条款作出此类裁定。

案件背景

案件核心涉及一名以组织工会为目的入职的"工会渗透员"(salter)。该员工在求职时隐瞒了过往雇佣经历,入职后宣布自己的工会组织者身份,随后被解雇。法官裁定,工会渗透活动属于受保护的活动,即便为了渗透而在求职时隐瞒经历也受保护,因此雇主解雇该员工的行为构成不当劳动行为。法官下令雇主重新雇用该员工并补发工资。

争议条款与裁定理由

在本案审理中,NLRB总法律顾问依据斯特里赛案标准提出,雇主的两项条款属于非法工作规则:

  1. 竞业禁止条款

    • 内容要求员工在离职后12个月内,不得以任何身份参与、受雇于或对雇主业务的"相似或竞争性"企业。
    • 法官认为该条款范围过于宽泛(例如,员工是否连让家人去竞争对手的商店购物都算违规?)。其主要问题是,条款会威慑员工不敢参与受保护的工会活动。因为员工若知道被禁止从事本地区相关行业的任何工作,在面临可能被解雇的风险时,就会因害怕失业而不敢采取可能引发雇主不满的行动(如组织工会)。
  2. 同事非招揽条款

    • 内容禁止员工在离职后24个月内,以任何方式招揽、鼓励或试图说服其他员工离开雇主。
    • 法官认为该条款会阻止员工进行受保护的协调活动,例如:
      • 向同事介绍工会提供的工资和福利。
      • 鼓励同事参与工会渗透活动。
      • 请同事集体威胁辞职,以改善工作条件。
    • 员工会合理担心,如果自己进行上述活动,雇主可能会指责其违反非招揽条款,从而导致其不敢行使合法权利。

重要意义

此裁决标志着NLRB首次正式将适用于非管理层的竞业禁止和同事非招揽条款认定为不当劳动行为。尽管联邦贸易委员会(FTC)也在考虑全面禁止竞业禁止协议,但NLRB总法律顾问的政策立场表明,在当前环境下,针对非监督职位的此类条款实际上因可能违法而难以执行。

5. The Raspberry Pi 5 Is No Match for a Tini-Mini-Micro PC (louwrentius.com)

文章标题:树莓派5无法与Tini-Mini-Micro PC匹敌

文章核心观点:作者认为,在家庭服务器领域,二手企业级1升迷你PC(如HP Elitedesk Mini系列)是比树莓派5更具吸引力的选择。

树莓派的局限

  • 树莓派5(2023年秋发布)性能尚可,但受制于SD卡性能。
  • 尽管支持NVME SSD,但需要额外配件(HAT),且总成本并不便宜。
  • 最大内存仅8GB。

“Tini-Mini-Micro” PC的优势

  • 指Dell、Lenovo、HP等品牌生产的小型企业台式机(1升体积)。
  • 企业淘汰后以大幅折扣在二手市场出售,性价比高。
  • 与树莓派5相比,具备以下优势:
    1. 性能更强:CPU单核性能比树莓派5快42%-62%。
    2. 存储更优:原生支持SATA/NVME SSD,无需额外HAT。
    3. 内存更大:最大支持32GB RAM。
    4. 价格相当或更低:完整的树莓派5系统(含电源、外壳、存储)约160欧元,而二手AMD平台迷你PC仅115欧元。

实测硬件与性能

  • 测试机型:HP Elitedesk 800 G3 (Intel i5-6500) 和 Elitedesk 705 G4 (AMD Ryzen 3 PRO 2200GE)。
  • 性能:Geekbench 6测试中,两者单核/多核得分均远超树莓派5。
  • 存储:原生支持M.2 NVME SSD,性能和容量远超树莓派的SD卡。
  • 功耗
    • Intel机型通过系统优化(安装Debian、运行powertop、无头模式)可将空闲功耗降至3.5-7瓦,与树莓派5相当。
    • AMD机型优化后空闲功耗约为10-11瓦。
  • 其他:开机时间短,支持KVM虚拟化,部分型号具备远程管理功能(Intel AMT)。

结论 二手1升迷你PC在CPU性能、存储支持、内存容量和总体性价比上均优于树莓派5,使其成为更强大的家庭(实验室)服务器选择。作者仍肯定树莓派在特定场景(如低功耗、需GPIO)的价值,但认为除非价格大幅降低且性能显著提升,否则其作为家庭服务器的吸引力有限。

6. What You Get After Running an SSH Honeypot for 30 Days (blog.sofiane.cc)

本文记录了在Ubuntu 24.04 LTS系统上运行一个SSH蜜罐30天后所捕获的攻击活动与数据分析。

核心发现:攻击频率与凭据

在30天的监测期间,蜜罐共记录了11,599次SSH登录尝试,相当于每天平均386次攻击,显示出持续且高强度的扫描和爆破活动。

攻击者最常尝试的用户名依次为:

  • root (8181次)
  • 345gs5662d34 (977次,可能是Polycom CX600电话的默认凭据)
  • admin (359次)
  • pi (198次)

最常尝试的密码包括:

  • 345gs5662d34 (977次)
  • 3245gs5662d34 (967次)
  • admin (246次)
  • 123456 (239次)
  • password (208次)

数据表明,大量攻击针对默认或常见的系统用户名和弱密码。

登录成功后执行的命令分析

一旦攻击者成功登录(通过蜜罐模拟),他们会执行一系列命令以达到不同目的:

  1. 环境探测:执行 unamels -lacat /proc/cpuinfoifconfig 等命令,用于收集操作系统、内核版本、硬件架构、网络配置等系统信息,为后续攻击做准备。

  2. 植入持久化后门(典型示例):一个常见模式是执行以下命令组合:

    cd ~ && rm -rf .ssh && mkdir .ssh && echo "ssh-rsa AAAA...mdrfckr">>.ssh/authorized_keys && chmod -R go= ~/.ssh
    

    这会清除用户的SSH目录,并注入攻击者的RSA公钥,实现持久化远程登录,同时锁定其他用户。

  3. 执行恶意脚本

    • ./oinasf 脚本:这是一个神秘脚本,随后常伴随读取系统自身可执行文件的操作,疑似用于探测漏洞或系统信息。
    • Sakura.sh 脚本:属于 Gafgyt (BASHLITE) 僵尸网络 恶意软件。该恶意软件自2014年起出现,主要针对物联网设备和Linux系统,通过弱密码或漏洞入侵,常用于发起DDoS攻击。
  4. 部署特定恶意软件

    • mdrfckr 加密货币挖矿程序:其行为包括植入上述SSH密钥、杀死其他挖矿进程以独占系统资源。文中提到了一个相关的GitHub仓库记录。
    • MIPS架构恶意软件:针对路由器和物联网设备,旨在控制这些设备。
    • 其他侦察命令:如检查是否存在其他挖矿进程 (grep miner)、查看磁盘空间、内存使用情况等。

总结

运行30天的SSH蜜罐清晰展示了互联网上的自动化攻击威胁。攻击模式高度一致:使用默认凭据进行暴力破解,成功后快速执行系统信息收集,并部署恶意软件以实现持久化控制、加密货币挖矿或组建僵尸网络。其中发现的 mdrfckrGafgyt 是两种具有代表性的恶意软件。这些活动强调了使用强密码、禁用默认账户以及加强服务器安全监控的重要性。

7. Google, Cloudflare and Cisco will poison DNS to stop piracy block circumvention (torrentfreak.com)

法国Canal+通过法律扩大封锁范围,要求谷歌、Cloudflare和Cisco干扰公共DNS以阻止盗版绕行

核心事件

法国广播公司Canal+为打击盗版体育赛事直播,通过法律途径将网站封锁措施从本地互联网服务提供商扩展至全球公共DNS提供商。巴黎司法法院已下令谷歌、Cloudflare和Cisco必须对法国用户干扰其DNS服务,以阻止访问约117个盗版网站域名。

事件背景与发展过程

  1. 初始封锁(2023年):Canal+起诉包括Footybite.co在内的多个盗版体育流媒体网站,并胜诉。法院要求法国多家本地ISP(如Orange、SFR、Free)对其自有的DNS解析器进行技术干预,向用户提供非真实响应,从而阻止访问这些盗版网站。
  2. 用户绕行:许多互联网用户为绕过封锁,将设备DNS设置切换至Cloudflare (1.1.1.1)、Google (8.8.8.8) 和Cisco (208.69.38.205) 等尚未被干预的公共DNS服务。
  3. 法律升级(2024年):Canal+再次提起诉讼,直接针对这三家公共DNS提供商。其法律依据主要是《法国体育法典》第L333-10条(2022年1月生效),该条款允许权利持有者在发生“严重和反复侵权”时,可要求“任何可能有助于补救的人”采取“一切相称的措施”来阻止或终止侵权。
  4. 法院裁决:巴黎法院支持Canal+的诉求。法院认为,使用替代DNS的用户数量以及切换DNS的简便性并不相关。Canal+作为赛事转播权拥有者,有权申请封锁禁令。法院也驳回了DNS提供商关于其服务不适用该法律的论点。

争议与效果评估

  • 影响范围估算:谷歌律师引用法国反盗版机构Arcom的数据进行分析后指出,此举可能影响的用户群体极小。估算显示,仅有约0.084% 的法国互联网用户同时使用第三方DNS和访问相关盗版站点。结合调查中仅2%的用户在遭遇封锁后会放弃寻找其他绕行方式,实际可能因此措施而停止访问盗版的用户仅占总互联网用户的约0.00168%,相当于法国全国约800人
  • 支持者立场:尽管影响可能有限,但法院认为,权利持有者行使法律赋予的申请封锁的权利是正当的。
  • 公司回应:谷歌表示将遵守法院命令。此前,在2023年的案件中,谷歌已被要求从其搜索结果中移除相关盗版网站域名。

阻止的盗版网站域名(部分列举)

以下为法院命令中需封锁的117个域名中的部分示例

  • footybite.cc, footybite.tv, footybite.io
  • hesgoal.today, hesgoal.name, hesgoaltv.me
  • redditsoccerstreams.org, reddit-soccerstreams.com
  • streameast.gg, streameast.top
  • totalsporteks.net, totalsportek.ac
  • sportsurge.app
  • (完整列表包含多个变体及地区性盗版网站域名)

潜在影响与后续

  • 短期效果:理论上,使用这三个公共DNS来访问上述盗版网站的法国用户将再次被拦截。
  • 长期挑战:由于绕过此类DNS封锁的方法与绕过本地ISP封锁同样简单(例如使用VPN或更改DNS设置),这引发了对于封锁措施可持续性的疑问。文章结尾提出,下一步Canal+可能会要求采取何种更进一步的措施,以及针对谁,仍有待观察。
8. ESASky (sky.esa.int)

ESASky 加载状态提示

该内容为 ESASky 系统的加载界面或启动提示页,主要包含以下核心信息:

  • 系统标识:页面标题明确为 ESASky,并展示了 ESASky 的专属 Logo 图像。
  • 版本与加载状态:通过文本提示当前正在加载 ESASky 7.7.0 版本。

总体而言,此内容是一个简短的前端加载占位符或启动画面,用于在系统初始化或资源加载期间,向用户直观地展示当前运行的软件名称、视觉标识以及具体的版本号(7.7.0)。

9. Simple sabotage for software (2023) (erikbern.com)

软件中的简单破坏(2023)

本文借鉴二战时期CIA的《简单破坏》手册,列举了通过隐蔽行为逐步降低软件团队生产力的方法。作者将这一思路应用于现代软件开发和管理领域,讽刺性地展示了如何“合法地”拖垮团队效率。核心观点是:生产力损耗如同复利,无数微小障碍的累积效应会呈指数级放大

主要破坏策略

技术层面

  • 强制重写核心系统,归咎于前任,耗时6-18个月。
  • 鼓励使用不同语言/框架,最大化系统碎片化
  • 要求复杂开发环境(如服务网格)及生产与开发环境差异。
  • 极度谨慎部署,利用任何问题延缓发布。
  • 实施繁琐的代码审查流程,以“安全”或“合规”为由增加层级。
  • 所有任务需经至少5人评审、签字,禁止范围外优化(如代码清理)。
  • 自建非核心功能(借口避免供应商锁定),并过度抽象化
  • 基于不切实际的规模假设做技术决策。
  • 建立臃肿的“平台团队”,强制其他团队频繁对接API变更
  • 为微小改动引入架构/安全审查。

产品层面

  • 以学术理由否定实用指标,选择与商业价值无关的虚荣指标。
  • 将所有功能定义为“必须完成”的大赌注,坚持“零版本”全完才上线。
  • 频繁制定宏大战略,又频繁转向。
  • 将明显改进贬为“局部优化”,用流行趋势(如AI)消耗资源。
  • 产品经理忙于“战略规划”,禁止工程师使用内部产品
  • 内部贬低用户为“愚蠢”。

领导层面

  • 薪酬与职级挂钩,职级与团队规模挂钩,鼓励机构臃肿。
  • 夸大战略/技术复杂性,进行昂贵并购后关闭产品。
  • 增加虚线汇报关系,让管理者跨团队、跨职能管理。
  • 频繁调换低绩效员工,将高绩效者投入模糊的R&D项目
  • 所有决策必开会,且要求所有“干系人”参与。

招聘层面

  • 建立看似客观实则主观的招聘流程。
  • 以“文化契合度”等模糊理由拒绝优秀候选人,以“潜力”等理由录用较弱者。
  • 高薪招募资深领导者,承诺大量编制。
  • 使用夸张职级吸引投机者,为专家编造项目防其离职。

项目管理层面

  • 要求极度详尽的项目估算
  • 鼓励跨团队、跨地域项目,新增依赖其他团队的需求。
  • 频繁使用昂贵外包机构,交付模糊原型让内部团队完成。
  • 为其他团队构建复杂“自助服务”系统。

核心启示

作者指出,这些行为单独看都“合理”,但累积效应是乘积而非叠加。例如,100个降低5%效率的因素会将总效率拉低至原来的约1/131。真正的生产力来自于果断拒绝无数个“看似合理”的小损耗。文章以“破坏者”视角,实则警示管理者:避免这些隐蔽陷阱是保持团队高效的关键

10. Just Enough Software Architecture (www.georgefairbanks.com)

《恰到好处的软件架构》简介

本文是对书籍《Just Enough Software Architecture》的介绍。该书旨在填补开发者从语言/面向对象知识到实际系统设计之间的空白,提供一种实用的、风险驱动的软件架构方法。

核心理念与独特价值

本书区别于其他架构书籍,主要基于以下理念:

  1. 风险驱动的架构设计:主张根据项目风险决定前期设计的详尽程度。风险小时无需过度设计,风险高时则避免草率设计。它提供了一种灵活的“恰到好处”的架构方法,可根据风险调整设计的严谨性。
  2. 架构民主化:旨在让所有开发者(而不仅仅是架构师)都能理解和关注架构。帮助开发者理解设计约束的原因,以及小改动如何影响系统整体属性。
  3. 培养陈述性知识:不仅传授操作技能(程序性知识),更致力于解释“为什么”。为开发者已有的实践经验提供概念和名称,提升其指导新手和进行清晰沟通的能力。
  4. 强调工程性:聚焦于软件开发的技术工程部分,即开发者如何通过建模和分析架构来确保系统可靠工作,进行权衡决策,而非组织管理或流程。
  5. 提供实用建议:支持在架构与详细设计之间灵活切换(“钻下去/跳出来”),提供具有不同抽象层次的模型来解决具体问题。

书籍结构

全书分为两大部分:

第一部分:风险驱动的软件架构

  • 定义软件架构:它是系统的骨架,影响质量属性,独立于功能,并通过约束影响系统特性。在解决方案空间小、失败风险高或质量属性要求严苛时尤为重要。
  • 介绍风险驱动模型:核心是(1)识别并优先排序风险,(2)选择并应用技术,(3)评估风险降低效果。
  • 通过“家庭媒体系统”实例演示模型应用。
  • 给出使用模型和架构的建议,如聚焦风险、合理添加约束、将架构技能分布到团队中。

第二部分:架构建模

  • 帮助读者建立软件架构的心智模型。
  • 介绍核心概念模型:领域模型(对应现实世界)、设计模型(软件设计)、代码模型(对应源码),以及视图和视图类型。
  • 强调构建封装边界的重要性,并传授确保封装有效的技术。
  • 整合了多种架构抽象和建模技术,涵盖质量属性与功能性。
  • 讨论构建和调试有效模型的实用方法,并提醒注意常见陷阱。

发布信息

  • 电子书:可在Google Play购买,包含ePub、Mobi和PDF三种无DRM格式,售价9.99美元。
  • 精装书:可在亚马逊购买。
  • 可搜索性:在Google Books和亚马逊的“内部搜索”功能中可搜索全书内容。部分示例章节可提供下载。
12. European Alternatives (european-alternatives.eu)

欧洲数字产品替代方案

概述

该平台旨在帮助用户寻找欧洲本土的数字服务和产品替代方案,例如云服务和SaaS产品。

选择欧洲替代品的主要优势

  1. 支持本地企业
    购买本地企业的产品意味着间接支持自身所在地区。企业缴纳的税收会回流至当地,并为区域创造就业机会。

  2. 数据保护与GDPR合规
    一些欧洲以外的公司可能忽视或未能正确实施GDPR等数据保护法律。欧洲本土公司通常更注重遵守相关法规。

  3. 增值税与支付便利
    在欧洲运营的企业,购买其他欧洲公司的产品/服务可能获得增值税退款。欧洲公司也更倾向于提供当地常用的支付方式。

  4. 相似的法律环境
    欧盟内部许多法律和框架由欧盟统一制定,有助于覆盖广大市场而无需考虑显著的国家差异。同时,针对位于欧盟的另一家公司维权也更为容易。

可用的服务类别与替代方案数量

平台提供以下各类数字服务的欧洲替代方案:

  • 网页分析服务(31个替代方案):跟踪网站用户行为,帮助所有者了解使用情况并优化网站。
  • 云计算平台(12个替代方案):提供按需托管服务。
  • 内容分发网络服务(6个替代方案):地理分布式网络,用于高效分发内容。
  • 电子邮件提供商(20个替代方案):为用户提供电子邮件地址及相应邮箱。
  • 虚拟私有服务器托管(23个替代方案):提供具有预配置内存、存储、流量和虚拟核心的虚拟服务器。
  • 搜索引擎(6个替代方案):允许用户搜索互联网。
  • 事务性电子邮件服务(7个替代方案):允许用户通过其服务从应用程序发送电子邮件。
  • 域名注册商(17个替代方案):管理互联网域名预订的公司。
  • 时间追踪应用(13个替代方案):帮助用户追踪在不同任务或项目上花费的时间。
  • 导航应用(8个替代方案):帮助用户从A点到达B点。
  • 正常运行时间监控服务(12个替代方案):定期检查网站或其他服务是否活跃。
  • 文件托管服务(11个替代方案):允许用户上传文件以进行备份或与他人共享。
  • 机器翻译服务(5个替代方案):通过编程方式将文本从一种语言翻译成另一种语言。
  • 对象存储提供商(15个替代方案):允许用户以分层方式存储文件。
  • 微博服务(2个替代方案):允许用户发布简短文本、图像或视频链接。

用户参与

平台鼓励用户注册账户,以提出变更建议或推荐新的产品/服务。

13. Reformatting 100k Files at Google in 2011 (laurent.le-brun.eu)

谷歌2012年大规模重构BUILD文件格式事件

背景与启动

  • 2012年9月,谷歌工程师Russ Cox和Rob Pike计划为Bazel构建工具的BUILD文件强制推行统一格式。
  • 当时代码格式化工具尚不普遍,但gofmt的成功促使他们希望为BUILD文件实现类似标准化。
  • BUILD文件格式混乱,风格指南存在分歧,此前的格式化工具采用率有限。

工具Buildifier的设计

  • 由Russ Cox用Go语言编写,设计相对简化:
    • 将注释附加到语法树的邻近节点(非精细结构,有时会移动注释)。
    • 仅在硬编码情况下分行,不考虑行长度。
    • 在语法树特定位置保留现有分行。
    • 始终重格式化整个文件,非局部修改。
  • 设计决策使工具实现相对简单,能在几分钟内重格式化整个代码库。

实施策略与挑战

  • 严格强制执行:Russ坚持必须对所有工程师强制执行,无例外、无工具设置、无个人偏好。
  • 团队分工:作者协助定义BUILD文件样式指南、识别可安全重排序的列表(如源文件列表)。
  • 工具集成:需集成到主要代码编辑器中,确保保存时自动格式化。
  • 生成工具适配:生成BUILD文件的工具应委托给Buildifier处理,而非自行保持格式。
  • 测试验证
    • 使用Bazel Query检查重格式化不影响Bazel对文件的理解(针对可重排序列表)。
    • 利用谷歌测试基础设施运行相关测试(虽慢且计算成本高)。
  • 大规模变更提交
    • 使用工具将大型变更拆分为可独立提交的小变更。
    • 冲突时自动回退冲突文件。
    • 通过“全局审批者”绕过代码审批流程。

结果与影响

  • 实施过程出乎意料地顺利,几乎无人抱怨新要求或格式风格。
  • 核心收益
    • 实现了代码格式统一,此前关于缩进、括号位置的冗长讨论不再存在。
    • 彻底改变了BUILD文件的大规模变更维护方式。此前重构工具难以处理格式匹配,常引发代码审查争议。
    • 使后续语言迁移(从Python到Starlark)成为可能。
  • Russ Cox强调,统一格式的价值只有在消除格式问题后才能充分显现,它提升了代码审查和编辑流程的效率。

关键数据与背景

  • 迁移开始时文件数为19.3万,结束时为21.6万(迁移期间代码库仍在增长)。
  • 原始标题中“2011年”实为错误,事件实际发生在2012年。
  • Nilton Volpato编写了Buildifier初版,协助了向新实现的过渡和维护。
14. You've Read Your Last Free Article, Such Is the Nature of Mortality (www.mcsweeneys.net)

本文以讽刺幽默的笔法描绘了数字时代人们阅读习惯的碎片化,以及媒体通过免费内容吸引订阅的商业模式。文章反复强调“这是你的最后一篇免费文章”,并虚构了这样一个情境:读者因未完整阅读文章而对世界一知半解,未来甚至无法回答子孙的提问。文中用夸张的比喻(如“打开的标签页如闹鬼墓地的墓碑”)和假设的对话,讽刺了读者仅浏览标题、缺乏深度阅读的现象。同时,文章提及新闻曾经珍贵的历史对比,并最终以戏谑口吻推销订阅服务,暗示不订阅将导致“终生的无知”。文末附有其他文章标题列表,延续了幽默荒诞的风格,整体旨在探讨信息过载时代下的阅读危机与媒体生存逻辑。

15. Reverse engineering a restaurant pager system (k3xec.com)

餐厅呼叫器系统逆向工程摘要

背景与动机

作者 Paul Tagliamonte 在业余时间对餐厅呼叫器系统的工作原理产生好奇,并购买了一套流行的 Retekess TD-158 餐厅呼叫器系统(包含 10 个呼叫器和一个基站)进行研究。目标是理解其无线通信协议并尝试控制设备。

硬件与初始观察

  • 设备工作于 433 MHz ISM 频段,手册指出基站 ID 范围为 0-999。
  • 作者推测协议至少需要 10 位来存储基站 ID。

信号分析与解码

  1. 调制方式:在 433.92 MHz 频率捕获信号后,发现与之前研究的圣诞树灯协议相同的 OOK(开关键控)编码方案
  2. 符号速率:测量得到符号持续时间约为 858 微秒(约 1165 波特)。
  3. 数据包结构:解调出 26 位数据包,结构如下:
    • 前 10 位:基站 ID(如 55 的二进制为 0000110111
    • 中间 10 位:呼叫器 ID(如 10 的二进制为 0000001010
    • 后 6 位:命令字段(例如呼叫命令值为 8)

协议逆向与命令集

通过分析不同操作的数据包,作者归纳出以下命令类型:

命令类型 命令 ID 描述
Call 8 呼叫指定 ID 的呼叫器
Off 60 请求充电座中的呼叫器在断电后关闭
F2 40 将呼叫器编程为指定的呼叫器 ID 和基站
F3 44 设置提醒持续时间(秒)
F4 48 设置呼叫器蜂鸣模式(0=禁用,1=慢,2=中,3=快)
F5 52 设置呼叫器振动模式(0=禁用,1=启用)

此外,协议还包含一个全零的唤醒前导包,可能用于信号检测。

实验结果

作者成功编写了一个简单的调制器,能够控制呼叫器。整个逆向工程过程耗时较短(一夜),未达到预期的数周,但验证了协议的有效性。

总结与展望

  • 该项目展示了常见 ISM 频段设备使用简单调制和协议的特点。
  • 作者鼓励爱好者基于此信息自行尝试,并计划探索其他更复杂的呼叫器系统。
  • 作者出于潜在滥用考虑,未发布完整代码,但提供了足够的技术细节供他人复现。

关键点:餐厅呼叫器系统通常使用低复杂度的无线协议,易于通过 SDR(软件定义无线电)工具进行逆向和控制。

17. Hello world in C inline assembly (2018) (jameshfisher.com)

本文介绍了一种在C语言中绕过标准库函数,通过内联汇编(inline assembly)直接触发系统调用来实现“hello, world”输出的技术方法。

核心目的与运行环境

  • 目的:不依赖 printf 等C标准库函数,直接通过底层的 write 系统调用输出文本。
  • 环境:专用于 Linux x86-64 架构。由于直接操作底层寄存器,代码不具备跨平台可移植性。

关键功能与实现结构

  1. 内联汇编注入:使用 asm(...) 语法在C代码中嵌入汇编指令。核心语句 asm("syscall"); 用于直接触发系统调用。
  2. 寄存器变量绑定syscall 指令要求通过特定寄存器传递参数。程序利用 register 关键字结合 asm("寄存器名") 语法,将C局部变量强制映射到指定的CPU寄存器:
    • rax:系统调用号,赋值为 1(代表 write 调用)。
    • rdi:第一个参数,赋值为 1(代表标准输出文件描述符)。
    • rsi:第二个参数,赋值为目标字符串 "hello, world!\n" 的指针。
    • rdx:第三个参数,赋值为 14(代表写入的字节长度)。

进阶用法与技术限制

  • 汇编指令替代C赋值:可以在 asm() 块中使用 GNU 汇编(GAS)语法的 mov 指令直接为 raxrdirdx 赋值,从而减少C变量的声明。
  • 指针地址的处理难点:对于 rsi 寄存器所需的字符串指针,由于其具体的内存地址在编译阶段未知,无法简单地通过基础 mov 指令硬编码。若要在纯汇编中处理此类未知指针,必须借助更高级的“扩展内联汇编”(extended asm)特性来实现。
18. AI for math resources, and erdosproblems.com (terrytao.wordpress.com)

本文包含两个不相关的公告。第一个公告推广数学中AI资源的列表,该列表由Talia Ringer在国家科学院去年举办的“数学推理中AI”研讨会期间发起,现接受新贡献、更新或更正。作者正协助Talia编辑列表,并提及下周将举办后续网络研讨会,延续研讨会主题。

第二个公告宣传Thomas Bloom最近启动的erdosproblems.com网站,作为Paul Erdős所提数学问题的活仓库。Thomas呼吁多方协助开发网站,包括GitHub管理、网页设计、编程、可访问性改进、数学家撰写评论、分享Erdős相关记忆、报告问题解决或错误、添加新问题等。作者个人贡献了问题#587,该问题由Erdős本人给出,并在2010年被Nguyen和Vu基本解决。作者还提到在同一会议上发表了关于与Gowers、Green和Manners合作工作的讲话,并提供了相关资源链接。

19. Making my first embedded Linux system (popovicu.com)

文章摘要:构建我的第一个嵌入式Linux系统

本文记录了作者从零开始,设计并制作第一块能运行Linux的PCB的完整过程与经验总结。

核心观点

作者鼓励读者不必畏惧嵌入式系统设计。虽然原型可能存在新手错误,但目标是让它能启动并运行Linux。掌握基础电子学知识并付出时间,便可能在几天内完成类似原型。

从简单微控制器(ATtiny)开始

  1. 编程流程探索:作者首先从简单的ATtiny微控制器入手,理解了为其编程的完整链路:通过AVR Dragon等硬件编程器连接电脑USB与芯片的SPI接口,并使用avrdude软件驱动编程过程。
  2. 替代方案:亦可利用树莓派的GPIO引脚模拟SPI进行编程,从而省去专用编程器。
  3. 首个PCB实践:随后,作者设计了一个仅包含ATtiny芯片、LED和电源的简易PCB,将面包板原型转化为实物,完成了首次PCB设计与制作的实践。

设计嵌入式Linux系统的关键组成部分

以Allwinner F1C100s SoC为核心,设计需包含以下模块:

  1. 电源:SoC需要多种电压(如3.3V, 2.5V, 1.1V)。使用USB的5V输入,并通过三个电压调节器转换得到所需电压。需在调节器周围按照数据手册添加滤波电容。
  2. 晶振:需要24MHz晶振为SoC提供时钟,并搭配两个电容(通常每个约22pF)构成振荡电路。
  3. 去耦电容:在SoC的电源引脚附近密集放置大量100nF的去耦电容,以滤除噪声、稳定供电。这是PCB布局的重点和难点。
  4. 存储:使用SPI NOR闪存芯片存储Linux系统镜像。通过一个“FEL模式”按钮接地闪存时钟引脚,可强制SoC进入USB下载模式,便于初始系统烧录和调试。
  5. 其他组件
    • USB接口:提供5V电源并实现与主机的USB通信(用于数据传输)。
    • 复位按钮LED指示灯(或驱动)及外扩引脚
    • 磁珠:用于过滤USB电源噪声。
    • SVREF引脚处理:对于功能未明的SVREF引脚,参考其他设计,采用电阻分压电路处理。

PCB布局与布线

  • 挑战:QFN封装的SoC引脚密集,去耦电容难以就近放置。
  • 解决方案:采用4层PCB(信号层-地层-电源层-信号层),以提高布线密度并更好地实现电源/地平面,利于信号完整性和去耦效果。
  • USB布线:对于USB 2.0全速模式,差分对布线要求相对宽松,保持走线长度和宽度合理即可。
  • 工具:使用EasyEDA进行设计,其与JLCPCB制造服务集成良好,提供了便捷的元件库和封装。

软件镜像与启动

  • 系统镜像:复用了针对类似硬件(Lichee Pi)的现有Linux镜像。
  • 启动方式:由于实际使用的闪存容量(2MB)小于预期(16MB),无法直接存储完整系统。因此,利用“FEL模式”按钮进入下载模式,通过sunxi-fel工具从电脑的USB连接将U-Boot等启动程序直接加载到SoC的RAM中运行,成功启动了Linux。
  • 验证:成功将U-Boot写入闪存并启动,验证了闪存通信正常。

结论

整个过程虽然充满“hacky”的实验性质,但成功满足了作者的好奇心,并带来了极大的成就感。作者希望这篇文章能帮助读者更快地踏上构建自己第一个嵌入式Linux系统的旅程。

20. Impulse Tracker source code now available on GitHub (github.com)

Impulse Tracker 源代码现于 GitHub 公开

Impulse Tracker(IT)的完整源代码,包括声音驱动、网络驱动及部分支持文档,现已在 GitHub 上发布。该源代码最初于2014年随“20 years of Impulse Tracker”系列文章在 BitBucket 上发布,但由于 BitBucket 停止支持 Mercurial 仓库,故迁移至 GitHub。

注意: 此仓库仅用于分享历史代码,项目已无活跃开发,除阻碍构建的问题外,不会合并其他更改或修复。

构建前提软件: 构建 Impulse Tracker 需要:

  • Turbo Assembler v4.1
  • Turbo Link v3.01
  • Borland MAKE v4.0
  • DOS 环境

具备上述环境后,构建主程序 IT.EXE 只需调用一次 MAKE。声音驱动则需通过 SoundDrivers 子目录中的各 M*.BAT 文件单独构建。

源代码文件概览: 主要文件包括:

  • IT.ASM:启动例程。
  • IT_DISK.ASM:磁盘 I/O 例程(使用 IT_D_*.INC 文件)。
  • IT_DISPL.ASM:播放屏幕(F5)显示例程。
  • IT_EMS.ASM:EMS 内存处理例程。
  • IT_F.ASM:对象模型使用的函数集合。
  • IT_FOUR.ASM:快速傅里叶变换例程,用于图形均衡器(Alt-F12),非所有声卡可用。
  • IT_G.ASM:全局按键处理函数。
  • IT_H.ASM:帮助模块(F1)。
  • IT_I.ASM:采样列表(F3)与乐器列表(F4)模块。
  • IT_K.ASM:键盘模块。
  • IT_L.ASM:信息栏代码。
  • IT_M.ASM:主消息循环/调度器。
  • IT_MDATA.ASM:全局音乐变量数据。
  • IT_MMTSR.ASM:采样压缩/解压缩例程。
  • IT_MOUSE.ASM:鼠标处理代码。
  • IT_MSG.ASM:消息编辑器模块(Shift-F9)。
  • IT_MUSIC.ASM:模块回放代码(同时使用 IT_M_EFF.INC)。
  • IT_NET.ASM:网络代码。
  • IT_OBJ1.ASM:用户界面对象定义。
  • IT_PE.ASM:谱面编辑器模块(F2)。
  • IT_S.ASM:屏幕函数(包括字符生成)。
  • IT_TUTE.ASM:交互式教程模块。
  • IT_VESA.ASM:用于图形均衡器的 VESA 代码。
  • SWITCH.INC:程序的高级开关。

常见问题解答:

  1. 问:源代码中为何有许多奇怪的字符? 答: 原始源代码使用 DOS 字符编写,在注释中使用字符绘制边框/方框。为保留历史原貌,代码未作改动。
  2. 问:为何 ASM 源码中没有使用 STRUC 或 ENUM? 答: 仅因为编写时不了解这些结构。仓库中的 InternalDocumentation 文件夹详细说明了代码中出现的一些魔法数字的含义。
  3. 问:为何某些函数的流程看起来跳来跳去? 答: 原始代码需兼容至 8086 处理器,而 8086 仅允许条件跳转在 +/-128 字节范围内,因此作者曾花费大量时间调整代码以满足此限制。当后来移除该限制后,并未回头更新受此影响的代码。

许可证: 源代码采用 BSD 3-clause 许可证。

21. SimCity in the web browser using WebAssembly and OpenGL (micropolisweb.com)

基于WebAssembly和OpenGL的网页版SimCity

项目概述

这是一个将经典《模拟城市》移植到Web浏览器的项目,名为Micropolis。它基于Maxis开发的原版《模拟城市经典版》,由Will Wright设计,Don Hopkins负责移植。目前项目仍处于未完成且持续开发的状态,开发者通过Patreon寻求支持以推动进一步开发。

技术实现

  • 核心技术:使用WebAssemblyOpenGL技术实现。
  • 代码仓库:完整代码托管于GitHub(https://github.com/SimHacker/MicropolisCore)。
  • 演示资源:可通过YouTube视频“MicropolisWeb Demo 1”和“Space Inventory Cellular Automata Music 1”查看演示。

操作方式

  • 鼠标控制:左键拖拽平移视图,滚轮缩放。
  • 键盘控制
    • 方向键:平移视图。
    • 逗号(,)和句号(.)键:缩放视图。
    • 字母键:加载不同城市地图。
    • 反斜杠(\)键:生成新地图。
    • 数字键:调整游戏速度(0键切换暂停)。
    • 方括号键([ ]):调整税率。
    • 减号(-)和等号(=)键:切换不同的图块集。
  • 其他:点击“X”按钮可隐藏帮助窗口。

相关资源与引用

  • 参考资料
    • Chaim Gingold的著作《Building SimCity》。
    • Chaim Gingold的“SimCity Reverse Diagrams”。
  • 命名许可:“Micropolis”名称使用遵循《Micropolis Public Name License》条款。

注意事项

  • 重要警告请勿按空格键,否则将打开未完成的“Space Inventory”功能。
  • 未来计划:更多功能与彩蛋正在开发中。
22. Engineer's solar panels are breaking efficiency records (spectrum.ieee.org)

工程师陈一锋:推动太阳能电池效率创纪录

灵感来源与职业生涯

陈一锋早年受德国屋顶太阳能电视节目的启发,对光伏发电技术与经济模式产生浓厚兴趣。2013年获得光伏科学与技术博士学位后,他加入中国光伏巨头天合光能,现任该公司技术副总裁助理,领导研发团队已创下超过25项太阳能效率与输出功率的世界纪录。因其在光伏能源转换领域的贡献,他荣获2023年IEEE Stuart R. Wenham青年专业人员奖

技术突破:PERC与TOPCon太阳能电池

  • PERC技术优化:天合光能团队通过开发多层抗反射涂层、超精细金属栅线及先进汇流条布局等技术,将商业PERC电池效率提升至24.5%(2022年纪录),接近该技术约25%的理论极限。
  • TOPCon技术突破:团队转向研发隧穿氧化层钝化接触(TOPCon)技术,利用薄氧化硅层减少能量损失。2022年实现TOPCon电池25.5%的效率纪录;近期更创下量产TOPCon组件740.6瓦的输出功率纪录(第26项世界纪录)。
  • 制造工艺创新:通过优化激光诱导烧结等工艺,强化金属接触与硅片的连接,进一步提升组件性能。

行业影响与展望

陈一锋指出,每提升1%-2%的效率在规模化应用中会产生显著的经济、环境与社会价值。随着技术迭代与成本下降,全球太阳能装机量持续增长。中国目前以约占全球40%的装机容量领先,预计至2026年太阳能容量将超过1太瓦

教育背景与IEEE的作用

  • 本科毕业于中国中山大学光学专业,后于该校及德国汉诺威莱布尼茨大学攻读博士学位,师从多位光伏领域先驱(沈辉、Pietro P. Altermatt、Pierre Verlinden)。
  • 加入IEEE后,他通过IEEE Xplore数据库广泛获取研究资料,认为其是跨领域知识创新的“宝库”。

核心观点:“利用科学为人类创造有用之物,并追求卓越,驱使我不断改进技术,哪怕只是微小进步。”——陈一锋

23. SQLite is likely used more than all other database engines combined (sqlite.org)
25. The Architecture Behind a One-Person Tech Startup (2021) (anthonynsimon.com)

本文介绍了一位独立开发者运行SaaS业务的技术架构,重点阐述了其如何利用云原生工具构建和管理高效、自动化的系统。该架构的核心是一个运行在AWS上的托管Kubernetes集群,用于承载多个项目,包括一个Web性能分析SaaS(Panelbear)作为示例。作者强调,尽管技术栈强大,但实际每月维护时间仅0-2小时。

核心架构与演进 系统最初是一个简单的单体Django应用,后为获得零停机部署、自动扩缩容等能力而迁移至Kubernetes。当前架构是一个运行在Kubernetes上的传统单体应用,结合了Django、Postgres(关系数据)、ClickHouse(分析数据)和Redis(缓存)。所有基础设施通过Terraform和Kubernetes清单文件进行版本控制,集中在一个代码库中,实现了可重复、可审查的“基础设施即代码”。

关键组件与自动化

  1. 流量入口与负载均衡:流量经由Cloudflare代理,到达AWS NLB,再由集群内的ingress-nginx进行路由。通过Kubernetes Ingress注解,可自动完成DNS设置、TLS证书申请和按IP的速率限制
  2. 部署与运维:使用GitHub Actions和Flux实现自动化滚动部署与回滚。Push到主分支会触发构建镜像,并自动同步到集群。利用活性探针实现“允许崩溃”的自愈机制。
  3. 自动扩缩容:应用容器根据CPU/内存使用率进行水平自动扩缩,集群节点也会随之自动增减。
  4. 数据存储
    • 关系数据:小型实验项目使用集群内Postgres,成长后迁移至AWS RDS以获得托管备份和安全更新。
    • 列式数据:ClickHouse用于高效存储和查询分析数据,部署在集群内并定期备份至S3。
    • 缓存:使用Redis进行应用数据缓存(如用量计数),并通过HTTP头利用Cloudflare CDN缓存静态资源。
  5. 配置与安全:应用配置通过环境变量和ConfigMap管理。敏感信息使用kubeseal加密后存储,并通过AWS KMS管理的密钥在集群内解密。
  6. 监控与运维
    • 监控与告警:使用New Relic(集成Prometheus指标)替代了自托管方案,确保监控系统自身高可用。Uptime监控也由其负责。
    • 错误跟踪Sentry用于捕获和聚合应用异常,并提供详细上下文。
    • 日志与调试:应用日志输出至stdout,由Kubernetes收集。本地开发使用Django Debug Toolbar和cProfile进行调试。
    • 计划任务:使用Celery执行定时任务,并通过Cronitor.io监控任务运行状态。
  7. 支付集成:使用Stripe Checkout处理订阅和支付,避免直接处理信用卡信息。Webhooks用于同步订阅状态变化。

总结 该架构展示了一种平衡了强大能力与运维简洁性的方案。通过深度利用Kubernetes的自动化特性、完善的监控告警体系以及版本化的基础设施管理,单人开发者能够有效支撑起一个增长中的SaaS业务,将主要精力聚焦于产品开发与客户服务。作者最后也指出,对于不同需求,应选择合适的技术栈,并提到已开始用更简单的Kamal替代部分Kubernetes部署场景。

26. Sans Bullshit Sans (2015) (www.sansbullshitsans.com)

Sans Bullshit Sans (2015) 项目概述

  • 项目名称:Sans Bullshit Sans,这是一个2015年发布的字体或设计项目。
  • 核心内容:该项目可能是一种无衬线字体,其名称中的“Bullshit”暗示了其设计风格可能带有讽刺、简约或去繁就简的特点,旨在摒弃传统字体中的冗余元素。
  • 信息获取:项目的详细信息可通过提供的网站链接(http://www.sansbullshitsans.com/...)进行访问。该网站可能包含字体样本、设计理念、下载方式或其他相关资料。
  • 发布背景:作为2015年的一个项目,它反映了当时设计领域对字体创新和批判性思维的探索。

(注:总结基于提供的标题和链接内容推断而成,实际项目细节需访问指定网站获取。)

27. An Interview with AMD CEO Lisa Su About Solving Hard Problems (stratechery.com)

AMD CEO 苏姿丰专访:解决难题的启示录

核心主题: 专访探讨了苏姿丰的个人职业历程、AMD近十年来的转型成功、人工智能(AI)带来的行业变革,以及AMD未来如何在AI和高性能计算(HPC)领域竞争。

一、 从IBM到AMD:关键经验与抉择

  1. IBM岁月的宝贵教训:
    • 产品落地的最后5%最关键: 在IBM推动铜互连技术产品化时,苏姿丰意识到,从研究到量产的最后阶段(涉及良率、可靠性等)才是真正的“秘密武器”,而非最初的研究创意。
    • 硬件与软件的平衡: PlayStation 3的Cell处理器虽技术超前,但因开发难度大、缺乏兼容性而在商业上受挫。这让她深刻认识到软硬件协同、可编程性和兼容性的重要性,影响了AMD后续(如PS4/PS5)的设计。
    • 向管理转型: 作为前IBM CEO Lou Gerstner的技术助理,她学到了顶级商业领导力:关注外部市场、客户需求,并利用公司独特优势解决问题(例如IBM的中间件战略)。
  2. AMD的重生与战略定力:
    • 坚持核心: 2014年接任CEO时,AMD深陷困境(PC周期性市场,与GlobalFoundries的晶圆协议束缚)。她力排众议,拒绝了当时热门的手机芯片市场诱惑,坚定不移地聚焦高性能计算(HPC)
    • 关键赌注:
      • Chiplet架构: 拥抱模块化设计,解决大芯片良率和成本问题,带来灵活性和性能提升(历经Zen 1到Zen 3的演进)。
      • 拥抱台积电(TSMC): 停止与GlobalFoundries在先进制程上的纠缠,与TSMC深度合作,获得领先的制程技术和产能支持。
      • 定制化路线: 与索尼、微软在游戏主机上的深度合作,提供高度定制的CPU+GPU融合方案,证明了AMD在IP组合和定制化上的独特能力。收购Xilinx进一步强化了定制和异构计算能力。

二、 AI时代:机遇、挑战与竞争

  1. “ChatGPT时刻”与AMD的准备:
    • AI需求爆发(2022年底)验证了AMD自2017年以来对GPU用于HPC和AI的押注。
    • 基于Chiplet策略,AMD能快速推出针对不同场景的产品:MI300A (集成CPU+GPU,面向HPC)MI300X (纯GPU,面向AI训练/推理)
    • 挑战: NVIDIA凭借长期投入和强大的CUDA生态,在AI市场占据先机。AMD正在全力追赶,特别是在软件易用性方面(整合Xilinx软件团队,推动PyTorch、OpenAI Triton等开源抽象层)。
  2. 竞争格局与未来展望:
    • 对抗NVIDIA: 苏姿丰认为AI硬件市场足够大,不存在“一刀切”方案。AMD的策略是提供开放、模块化、可定制(Tailor) 的解决方案,满足不同客户(如不同超大规模云服务商)的特定需求和工作负载,强调系统效率(功耗)。
    • 开放标准联盟: 积极推动Ultra Accelerator Link (UALink)Ultra Ethernet Link 等开放互连标准,旨在打破NVIDIA在GPU集群互联上的封闭生态,降低AI基础设施成本和复杂性。Intel也是联盟成员。
    • x86与ARM: 明确AMD是计算公司,而非单纯的x86公司。认为x86架构在HPC和AI领域仍有强大生命力(如数据中心CPU现代化、边缘推理),同时也会在合适场景使用Arm。
    • CPU的持续价值: 强调并非所有工作负载都需要GPU。数据中心老CPU的能效升级(用更少、更强的新CPU替换旧CPU)是巨大机会。许多推理任务和中小型模型仍适合在CPU上运行。
  3. 竞争心态:
    • 将当前AI热潮视为高性能计算的“下一个弧线”(Next Arc),充满兴奋和斗志。
    • 承认NVIDIA在生态上的优势,但认为技术竞赛是长期(10年+)过程,AMD拥有正确的技术路线(Chiplet、CPU+GPU融合)、强大的执行能力和明确的战略方向。
    • 与Intel在x86领域竞争,但在开放标准(如UALink)上存在合作空间,共同应对行业挑战。

三、 核心领导力哲学

  • 选择难题: 职业生涯倾向于选择有挑战性的技术与管理问题。
  • 端到端负责: 即使是Fabless模式,AMD也深度参与从技术路线图规划、架构设计到与制造伙伴(如TSMC)协作确保量产质量与良率的全过程。
  • 技术与商业平衡: 深刻理解技术突破必须与商业成功(正确的战略、客户、市场)紧密结合。
  • 长期视野: 强调半导体投资回报周期长(3-5年),决策需基于对未来趋势的判断,而非短期热点。

总结: 在苏姿丰领导下,AMD通过坚守高性能计算核心、大胆创新(Chiplet、拥抱TSMC)、深化定制合作,成功实现逆袭。面对AI浪潮,AMD正凭借其技术积累、开放生态策略和软硬件协同能力,在挑战NVIDIA的同时,努力塑造一个更多元化、定制化的AI计算未来。苏姿丰对行业趋势的洞察、解决难题的毅力和对长期路线的坚持是AMD成功的关键。

29. Packaging Swift Apps for Alpine Linux (mko.re)

在 Alpine Linux 上打包 Swift 应用

本文探讨了在 Alpine Linux 上运行 Swift CLI 应用的可行方案,主要源于 Alpine 使用 musl libc 而 Swift 工具链依赖 glibc 的兼容性问题。作者通过其项目 age-plugin-se 的实践,总结并比较了三种方法。

核心挑战

Alpine Linux 默认使用 musl libc,而 Swift 官方工具链主要针对 glibc。虽然 Swift 6 将支持静态链接的 musl 目标,但完整的 Swift 环境短期内不太可能原生支持 Alpine。

三种解决方案

1. 使用预编译的动态链接二进制文件

  • 做法:尝试在 Alpine 上直接运行其他 Linux 发行版(如 Debian)编译的二进制文件。
  • 障碍:由于库(如 libstdc++)不兼容,运行会失败。安装 gcompat 无效。
  • 变通方法:在 Alpine 内设置 Debian chroot 环境并配置符号链接,但这需要在每台目标机器上手动设置,非常不便。

2. 打包二进制文件与依赖库

  • 做法:创建一个自包含的软件包,包含编译好的二进制文件、glibc 动态链接器及其所有动态库依赖。
  • 步骤
    1. 在 Alpine 上使用脚本创建 Debian chroot 环境。
    2. 在 chroot 中安装 Swift 编译器并编译源代码。
    3. 使用特定编译标志,将 glibc 链接器路径和库运行时路径(-rpath)硬编码到可执行文件中。
    4. 将可执行文件、glibc 链接器和所有依赖的动态库(如 libc.so.6libstdc++.so.6)复制到最终包目录中。
    5. 将整个结构集成到 Alpine 的 abuild 脚本中,生成 .apk 包。
  • 优点:生成的包可以像普通 Alpine 包一样通过 apk add 安装和运行,无需额外设置。

3. 交叉编译静态二进制文件

  • 做法:利用 Swift 6 预览版对静态链接的支持(基于 musl),在 macOS 上交叉编译出完全静态的 Linux 二进制文件。
  • 步骤
    1. 在 macOS 上使用 Swift 工具链为 Linux 各架构编译静态二进制文件。
    2. 由于 Alpine 的 abuild 无法在 macOS 运行,作者编写了一个纯 Go 脚本,根据 APK 规范将二进制文件打包并签名成 .apk 文件。
    3. 此过程集成到 GitHub 工作流中以实现自动化发布。
  • 优点:生成的二进制文件无任何外部依赖,可直接在 Alpine 上运行。

方案对比与包大小分析

文章最后对比了不同构建方式的最终包大小:

  • 动态链接(macOS):252 KiB(最小基准)。
  • 动态链接(Linux):1.2 MiB(因静态链接了 BoringSSL 而增大)。
  • 动态链接 + 静态 Swift 标准库(Linux):43.4 MiB。
  • 上述 + 打包所有动态依赖库(Linux):48.1 MiB。
  • 完全静态链接(Linux):100.4 MiB(大小显著增加,原因可能与链接优化有关,作者希望未来能改进)。

结论:对于在 Alpine Linux 上部署 Swift 应用,方案二(打包二进制与依赖库) 在当前是最实用且用户体验较好的选择,它平衡了兼容性与安装便利性。方案三(静态编译)是面向未来的方向,但目前存在包体积过大的问题。

30. A collection of 2,299 blogs about every topic (ooh.directory)

这是一个包含2,299个博客的目录网站,博客主题广泛,按类别进行组织和展示。

博客分类概览 网站将收录的博客分为12个主要类别,并标注了各类别下的博客数量:

  • 艺术与媒体:926个,涵盖建筑、书籍、设计、游戏、音乐等子分类。
  • 计算机、互联网与科技:411个,包括硬件、互联网、网络开发。
  • 国家、地区与城镇:133个,例如伦敦、英国、美国。
  • 经济与商业:71个,涉及BBC、经济学、管理。
  • 教育:38个。
  • 政府、政治与法律:63个,包括法律、军事、政治。
  • 人文科学:169个,涵盖未来学、地理、历史、语言。
  • 个人博客:379个。
  • 休闲:254个,包括饮食、运动与健身、旅行。
  • 科学:147个,包括地球科学、数学、空间。
  • 社会:55个,包括死亡与坟墓、心理地理学、宗教。
  • 无法归类的博客:46个,包括“完成主义者”博客等。

示例博客展示 网站展示了部分“最近添加”或“最近更新”的博客,内容多样:

  1. 技术开发:包括如何使用AI可持续地开发真实产品(棒球管理应用)、在Cloudflare Durable Objects上构建强一致性数据库、以及关于高斯点绘制的图形学研究。
  2. 文化与艺术:有访谈独立艺术家的音乐博客、探索英国先驱视频游戏公司的博客、记录街头艺术观察的博客。
  3. 公共服务与兴趣:涉及英国公务员体系、儿童社会关怀(如寄养经历)、桌游与迷你战棋、钓鱼(飞钓)经历、电影评论等。
  4. 专业领域:涵盖计算几何与算法、英语语言文学的学习技巧等。
  5. 生活与幽默:包括怀旧玩具收藏、怪异电视节目评论、以及一部名为《恐龙漫画》的网络漫画。

这些示例博客通常包含作者信息、所在地标识(如🇺🇸、🇬🇧)、更新时间以及最新文章摘要。

31. Ollama v0.1.45 (github.com)

文章标题提到“Ollama v0.1.45”,但提供的文章内容实际上全部是GitHub平台功能介绍的通用文本,并未包含任何关于Ollama或其版本v0.1.45的具体信息。

文章内容主要由以下部分构成:

  1. GitHub核心功能模块:列出了AI代码创建(如GitHub Copilot)、开发者工作流(Actions、CodeSpaces)、应用安全(代码扫描、秘密保护)等功能板块。
  2. 解决方案分类:按公司规模、使用场景(DevSecOps等)、行业(医疗、金融等)展示GitHub的应用方式。
  3. 探索与支持资源:包括主题浏览、案例、文档、社区论坛等。
  4. 页面交互元素:如用户反馈、保存搜索、登录/注册、外观设置等界面说明。

总结:所提供的文本内容是GitHub平台的导航介绍或营销材料,与标题指定的“Ollama v0.1.45”无直接关联。内容中未提及Ollama项目的任何更新、功能、改动或版本信息。

32. Highly realistic talking head video generation (github.com)

高逼真度说话人头视频生成项目总结

项目概述

Hallo是一个由复旦大学、百度、苏黎世联邦理工学院和南京大学联合开发的高逼真度说话人头视频生成技术。该项目能够根据音频输入,生成对应的逼真人物头部动画视频。

主要特性

  • 高质量生成:能够根据音频生成高度逼真的说话人头视频,支持经典电影片段重现
  • 丰富的社区资源:提供多种工具集成,包括Gradio演示、Windows版本、ComfyUI、WebUI和Docker模板
  • 多语言支持扩展:社区扩展支持了中文(普通话)语音输入
  • 开源完整:提供完整的推理代码和训练代码,包含详细的教程文档

安装与使用

系统要求

  • 操作系统:Ubuntu 20.04/22.04
  • GPU:A100(测试环境)
  • CUDA版本:12.1
  • 需要安装ffmpeg

安装步骤

  1. 创建conda环境并激活
  2. 安装依赖包和项目本身
  3. 下载预训练模型(包含多个组件):
    • 去噪UNet、人脸定位器、图像音频投影模块
    • 人声分离模型(Kim_Vocal_2)
    • 人脸分析模型(InsightFace、mediapipe)
    • 运动模块(AnimateDiff)
    • VAE模型和Stable Diffusion v1.5
    • wav2vec音频编码模型

输入要求

源图像要求

  • 正方形裁剪
  • 人脸为主要焦点,占比50%-70%
  • 正面视角,旋转角度小于30度

驱动音频要求

  • WAV格式
  • 英语音频(训练数据为英文)
  • 人声清晰,可包含背景音乐

推理运行

通过scripts/inference.py脚本运行,可自定义输出路径、姿态权重、人脸权重、唇部权重和面部区域扩展比例等参数。

训练流程

数据准备

  1. 视频需满足与推理图像类似的要求(正方形、人脸占比50%-70%、正面视角)
  2. 组织为标准目录结构,包含videos文件夹
  3. 执行两步数据预处理:
    • 第一步:转换视频为帧、提取音频、生成掩模
    • 第二步:生成人脸嵌入(InsightFace)和音频嵌入(Wav2Vec),需要GPU支持
  4. 生成元数据JSON文件

训练执行

  1. 更新配置文件中的元数据路径
  2. 使用accelerate launch启动分布式训练
  3. 支持多节点训练配置

项目状态与计划

已完成里程碑

  • 2024-06-15:发布推理源代码和预训练模型
  • 2024-06-28:发布数据准备和训练脚本

待改进方向

  • 提升中文语音支持性能
  • 修复已知问题:视频帧丢失、音量影响推理结果、兼容Windows系统等
  • 推理代码逻辑优化

社会风险与缓解

该项目认识到音频驱动人像动画技术可能带来深度伪造等社会风险,强调需要建立伦理准则和负责任的使用规范,包括透明的数据使用政策、知情同意和隐私保护。

社区贡献与致谢

项目得到了社区的广泛支持,感谢多个开源项目的贡献者,并提供了多个研究职位的机会。

引用格式:提供了标准的学术引用格式,鼓励在研究中使用该工作时进行引用。

34. Ask HN: Freelancers, how do you get work?
35. Fifty Years of Diff (exple.tive.org)

Fifty Years of Diff:纪念 diff 诞生五十周年

2024年6月14日,Unix 系统中的核心工具 diff 迎来其五十周年纪念。diff 由 Douglas McIlroy 和 James Hunt 开发,于1974年随 Unix 第五版发布,迅速成为自由软件和协作软件的基石。

diff 的历史与意义

  • diff 最初用于比较文件差异,是版本控制系统的基础工具。
  • 随后,merge 和 patch 工具相继出现,其中 patch 在1984年发布,进一步扩展了协作能力。
  • diff 被认为是开源协作的种子,没有它,人们甚至无法意识到协作的缺陷。

diff 的影响与重要性

  • diff 促进了软件开发中的同行压力,推动了早期 Unix 系统的快速迭代和改进。
  • 它被视为社会软件的顶峰,使得陌生人之间无需外部同意即可协作。
  • 作者强调,将计算世界划分为拥有 diff 和 patch 的群体与没有的群体,前者能更好地进行开放协作。

当前挑战与批评

  • 现代软件开发中,如文档处理(Word、PPT)、网页开发等领域,缺乏类似 diff 和 patch 的工具,导致协作困难。
  • 网页开发中的“查看源代码”精神逐渐消失,框架和商业指标阻碍了协作。
  • 搜索引擎和容器化技术的失效,阻碍了问题解决和社区发现,进一步削弱了协作机会。

技术原则与展望

  • 作者提出,技术应服务于人类,当 diff 和 patch 能让陌生人自由协作时,才体现了以人为本的设计。
  • 当前许多系统(如网页)的修改和跟踪机制笨拙,与开源精神背道而驰。
  • 批评指出,这种封闭性可能源于商业利益,牺牲了发现、协作和支持的路径。

总之,diff 的诞生标志着软件协作的里程碑,但现代技术环境仍需回归其核心原则,以促进真正的开放和人类为中心的发展。

37. Perfectionism is optimizing at the wrong scale (www.autodidacts.io)

完美主义是在错误尺度上进行优化

  • 核心矛盾:完美主义既是优势也是缺陷。在宏观层面,需要容忍微观的不完美——如果这对目标无关紧要,或追求完美的代价会影响更重要的整体目标。资源有限时,对子任务追求完美可能以牺牲项目或人生层面的完美为代价。

  • 完美主义的利弊:长期来看,高质量通常会获得回报(如更高报酬、更好声誉)。但问题在于“你试图赢得什么游戏?”如果答案是“人生”,则必须做出权衡。

  • 应对策略(分类处理无关紧要事项)

    1. 不分类:可能导致错过时限或牺牲质量。
    2. 降低质量分类:尝试完成所有任务,但降低标准。
    3. 延期分类:追求高质量但推迟时限,可能永远无法完成。
    4. 项目分类:专注于少数几件事并做到最好。
    5. 功能分类:完成更多项目的最小可行版本,而非彻底完善少数项目。
    6. 牺牲生活其他方面:通过减少睡眠、健康或关系来暂时承担更多,但这如同信用卡债务,未来需连本带利偿还。
  • 时机的重要性

    • 过度追求完美常导致错失时机。在正确时机做到“足够好”,优于在错误时机追求完美。
    • 机会有时间窗口。有时来不及做到完美,但及时推出“足够好”的版本可能更符合现实需求。
    • “完美主义者”常是“不理解时效性本身就是完美一部分”的委婉说法。
  • 最终问题:你的行动是否导向对你真正重要的目标?你如何坚持优先事项,并接受某些事情将被搁置?

38. Harvard Railroad Economics Exam (1906) (www.irwincollier.com)

哈佛大学铁路经济学考试(1906)摘要

本文展示了1906-07学年哈佛大学经济学17门课“铁路实践”的课程信息及年终考卷,并辅以课程讲师斯图尔特·达格特的生平简介。

1. 讲师背景

  • 斯图尔特·达格特:1881年生于威斯康星州密尔沃基。1903年至1906年在哈佛大学获得学士、硕士和博士学位,其博士论文《铁路重组》后作为《哈佛经济研究》第4卷出版(1908年)。
  • 教学生涯:1906至1909年在哈佛大学任讲师,1909年受聘于加州大学伯克利分校任铁路经济学助理教授,1917年升为正教授。1920至1927年担任商学院院长,1951年作为弗拉德基金会交通学荣誉教授退休。1954年卒于加州奥克兰。

2. 课程信息

  • 课程:经济学17,课程名称“铁路实践”。
  • 学期:1906-07学年第二学期。
  • 注册学生:共37人,包括4名研究生、14名高年级生、12名大三学生、5名大二学生及其他2人。

3. 年终考试内容

考试要求回答前3道必答题及另外5道题。问题覆盖铁路运营管理的多个实务领域:

必答题:

  1. 区分铁路的部门化组织分区化组织,并说明两种体系下的责任划分。
  2. 模拟一个从波士顿经范德比尔特铁路线至芝加哥、再经芝加哥与西北铁路至明尼阿波利斯的鞋类货运案例。要求填写完整的货运单据,并分别说明在“审计办公室结算”和“枢纽结算”两种模式下的处理方式。
  3. 详细描述针对上述运输案例的直通货运单结算系统,包括报告流程、余额确定与结算方法。

选答题(示例):

  • 行业组织:列举主要的货运交通协会及其覆盖区域,并比较其与先前存在的“联营池”的区别。
  • 铁路场站:绘制一个可行的铁路终端集群示意图;解释极杆场驼峰场重力场的定义及各自的优缺点。
  • 车辆比较:讨论钢制货运车厢相较于木制车厢的优点,以及大型车厢相较于小型车厢的优点;比较欧美货运车厢的尺寸差异及原因。
  • 运营成本:分析为何客运比货运成本更高。
  • 信号系统:解释“闭塞信号”系统;分别描述路签制自动电气制的工作原理,并为后者绘制必要的电路图。
  • 国有铁路:比较法国与德国的国有铁路运营经验,包括国有化原因、运营线路范围、运营结果及导致该结果的原因。

总结:该考卷体现了20世纪初哈佛大学铁路经济学课程高度实务性的特点,涵盖铁路组织、财务结算、车辆技术、信号系统、场站设计及国有化运营比较等核心议题,旨在培养学生的实践分析与行业知识。