2024-08-04

29 篇热帖

1. Open Source Farming Robot (farm.bot)

开源农场机器人(FarmBot)概要

核心产品

FarmBot 是一款开源的 CNC 农业机器人系统,旨在实现高度自动化、超本地化的食物生产。其设计让用户能够在自家的种植床、城市屋顶或小型温室中种植食物,享受食物主权和自动照料的便利。

主要应用场景

  • 家庭使用:为个人、家庭和社区持续生产蔬菜。该系统实现全自动操作,在离家期间也能确保作物得到照料。
  • 教育领域:作为 K-12 学校和大学实用且有趣的实践工具,用于学习机器人学、营养学、土壤科学、生物学、编程等 STEM 学科。已有多于 500 所教育机构采购。
  • 无障碍园艺:为残障人士提供园艺治疗,并赋能其自主种植食物。
  • 太空探索:与 NASA 等机构合作,探索开源方案以在太空、月球和火星上生产食物。

产品型号与安装

  • 型号:主要有 Genesis v1.8(覆盖面积 1.5m x 3m)和 Genesis XL v1.8(覆盖面积 3m x 6m)两款。
  • 安装:所有型号出厂时已预组装 95%,基础安装仅需 2-3 小时。
  • 用户需提供:种植床基础设施、电源(110/220V)、水源(标准花园水管接口)和互联网连接。

技术特点与硬件

  • 设计与材质:采用铝、不锈钢和抗紫外线 ABS 塑料等优质材料,经久耐用,适合户外环境。
  • 核心部件:包括 NEMA 17 步进电机、GT2 同步带、不锈钢精密丝杆、TMC2130 步进驱动器及树莓派计算机。
  • 功能:支持自动换刀,配备播种器、浇水喷头、旋转工具、土壤温湿度传感器和防水摄像头。
  • 控制:通过免费的 Web 应用程序(my.farm.bot)进行控制和配置,软件开源,用户也可自行托管。

型号关键参数对比

参数 Genesis v1.8 Genesis XL v1.8
最大机器面积 1.5m x 3m (4.5m²) 3m x 6m (18m²)
安装时间 约 2 小时 约 3 小时
LED灯带长度 1.2m 2.7m
运输重量 19.5kg 24kg
全球免邮

服务与支持

  • 保修:在产品交付后 30 天内,对损坏或缺陷部件提供免费更换。
  • 支持政策:大部分客户可通过在线资料自行安装。提供有限的免费技术支持(最多 2 小时,有效期 12 个月)。不支持使用非官方部件或非设计用途的定制。
  • 软件服务:家庭种植用途预期永久免费提供基础服务,但对商业用途、超大面积种植、高级功能或特定限制可能会收费。

社区与愿景

文章通过客户案例(如 Sudweeks 家庭)和与太空探索等前沿项目的合作,强调 FarmBot 不仅是一个产品,更是一个由 DIY 爱好者、专业人士和教育机构组成的全球开源社区,共同推动 21 世纪的农业与协作开发。

2. Porting my JavaScript game engine to C for no reason (phoboslab.org)

文章总结:作者Dominic Szablewski在2010年创建了JavaScript游戏引擎Impact,用于在Flash衰落后证明网页也能制作游戏。多年后,他出于对C语言的喜爱,决定将其移植为C语言版本,命名为high_impact

核心设计与理念high_impact是一个为2D动作游戏设计的框架,结构简洁,代码量少。它并非传统库,而是提供基础功能(如加载瓦片地图、管理实体、物理碰撞、动画、音效)的脚手架,开发者在此基础上编写业务逻辑。引擎后端支持SDL和Sokol,可编译至Windows、Mac、Linux及WebAssembly。

关键技术实现

  1. 实体系统:所有动态游戏对象(实体)共享统一的entity_t结构体,并通过宏扩展自定义属性。实体类型通过函数指针表(entity_vtab_t)定义行为。系统采用固定大小存储,支持大量实体,并通过引用(entity_ref_t)安全地跟踪实体。
  2. 碰撞检测:与简单的“停止”方式不同,引擎通过射线追踪计算实体与瓦片地图的精确碰撞点,并能处理斜坡地形,实现更真实的物理反馈。实体间的碰撞则采用“扫描修剪”的宽相位检测进行优化。
  3. 渲染系统:提供OpenGL和软件渲染器两种后端。OpenGL渲染器通过将四边形收集到单个缓冲区、使用纹理图集技术,试图将一帧的渲染合并为单次绘制调用,以提升性能。
  4. 内存管理:采用预分配的静态“hunk”内存池,配合自动重置的“bump分配器”(区域分配器),避免了复杂的free操作。内存按层级(全局、场景、帧)自动分配和释放,大幅简化了内存管理。
  5. 资产与音频:使用自创的QOI(图像)和QOA(音频)格式加载资产,系统在构建时自动转换资源。音频系统支持混音、声像调节和变调。

关卡编辑器:保留了原版Impact的关卡编辑器Weltmeister(仍用JavaScript编写)。它利用现代浏览器的FileSystemAPI直接读写本地文件,并能解析C源码中的宏定义来配置实体在编辑器中的外观和行为。

验证与展望:作者通过将两个旧游戏Biolab DisasterDrop移植到C版引擎,验证了high_impact的实用性和设计合理性。项目强调可扩展性,欢迎社区为其添加新的平台后端(如Vulkan、Metal)或支持更多硬件。整个项目以MIT许可证开源。

3. How I Use "AI" (nicholas.carlini.com)

文章摘要:我如何使用"AI"

核心观点

作者是一位程序员和机器学习研究者,认为大型语言模型(LLM)虽被过度炒作,但确实提供了实质性价值。作者在过去一年中每周花数小时与各种LLM交互,编程效率因此提高了至少50%。文章通过50多个具体对话实例来支撑这一论点。

主要使用场景

1. 构建完整应用

作者让LLM为其编写了完整的Web应用(如一个GPT-4问答竞赛网站),涵盖Flask后端、HTML前端、JavaScript交互逻辑、图表绘制(从matplotlib迁移到Chart.js)、Docker容器化部署等全流程开发。

2. 学习新技术

  • Docker:从未使用过Docker的作者通过与LLM交互学会创建容器、传递GPU、配置环境
  • Podman:因权限问题从Docker迁移到Podman,LLM帮助重写了所有代码
  • Flexbox/CSS:请求LLM帮助实现网页布局
  • 树莓派Pico W:用MicroPython编写LED闪烁、WiFi连接、MQTT通信、HTTP服务器等程序
  • CUDA编程:LLM帮助编写GPU计算程序,包括避免分支的优化技巧
  • Arduino到MicroPython:将C语言步进电机控制代码移植到MicroPython

3. 简化代码

作者将golly(Conway's Game of Life的C++工具)500+行代码精简为所需功能,再用LLM生成Python封装,并编译为.so共享库供Python调用。

4. 自动化单调任务

  • Python字节码反汇编:将Python 3.9的字节码翻译回Python源码
  • 数据格式转换:将非结构化数据(如书籍列表、diff代码)转换为JSON或HTML格式
  • LaTeX引用生成:自动生成网页资源的LaTeX引用
  • 文本转语音:编写脚本将论文分段朗读以检查语法

5. 解决一次性任务

  • 数据可视化:快速生成matplotlib图表
  • 数据下载与处理:并行下载和过滤parquet数据集
  • 格式转换:PNG转STL文件用于3D打印
  • Curl转Python:将命令行API调用转为Python requests代码
  • 字符计数:Python转C以提高性能
  • Rust重写:用Rust重写数据处理脚本提升速度

6. 充当API参考和知识问答

  • Python运算符对应的魔术方法(如~对应__invert__
  • Bash特殊变量($@获取所有剩余参数)
  • iperf网络测试工具使用
  • LaTeX命令(\red{}定义)
  • LLDB调试器命令
  • find命令解析
  • ZSH错误消息解释
  • HTML/CSS效果(如drop cap)

7. 解释电子学基础知识

  • PCB设计中的"pitch"概念
  • 晶振封装标识(HC50)
  • 电容编码(681、104)
  • LED规格解读
  • 焊接SSOP贴片元件方法
  • KiCad自定义库导入

8. 修复常见错误

作者已将错误修复集成到工作流中:程序以非零状态退出时,自动调用LLM解释错误并提供补丁。

关键论点

  • 不应以LLM不能做什么来评判,而应看它们能做什么——就像不会因为人类不能心算64位整数就说人类无用
  • LLM特别擅长解决已有解决方案的问题(99%的工作都是别人做过的事情)
  • 当前模型已足以让大多数人完成以前无法完成的任务
  • 五年前景可观还是可怕,尚不确定
4. How to build quickly (learnhowtolearn.org)

如何快速构建:大纲速刷法

核心方法:大纲速刷法

该方法通过递归式大纲规划极速填充内容,实现比传统“进度条式”工作流约10倍的提速。关键理念是:先快速完成整体框架,再回头完善细节。

方法步骤

  1. 创建项目大纲:列出主要部分或模块
  2. 递归细化大纲:对每个部分再次进行大纲划分,逐级分解直到任务足够小
  3. 极速填充:从最低层级开始,以最快速度完成每个小任务(过程中绝不追求完美
  4. 整体完善:全部内容完成后,再回头优化细节(如样式调整、内容润色等)

关键要求

  • 必须递归拆分:持续分解任务直到足够细小
  • 必须极速执行:填充阶段专注速度,忽略质量
  • 必须延后优化:完成前绝不纠结细节

与传统方法对比

  • 传统“进度条式”:从头到尾线性推进(如从第一段写到最后一段),容易造成压力、降低效率,且质量受限。
  • 大纲速刷法:先快速搭建整体结构,后期专注完善。优势:
    • 降低心理压力,保持头脑清晰
    • 更早看到整体进度,增强动力
    • 有更多时间优化关键部分,提升最终质量
    • 长期能完成更多项目,加速学习成长

应用实例

文档写作

  1. 确定主题,可选头脑风暴
  2. 快速写出章节大纲
  3. 对每章节递归生成子大纲
  4. 从最底层开始极速填写内容(不追求质量)
  5. 完成后回头优化:添加图片、调整格式、润色文字

编程开发

  1. 明确程序核心功能
  2. 按功能拆分为组件(如数据收集、清洗、分析、存储)
  3. 对每个组件递归拆分(例如数据收集可再分为网页抓取、模拟数据等方法选择、执行组件等)
  4. 从最低层级组件开始实现

重要性说明

大纲是构建的基础,速刷法看似简单,实则是对基本功的深度掌握。真正提升效率的关键往往在于优化方法算法,而非单纯加大努力。重新评估和打磨那些被忽视的基础技能,能带来显著性能提升。

作者建议:不要仅阅读,应在下一个实际项目中实践此方法,以形成习惯。

5. Reverse engineering the 59-pound printer onboard the Space Shuttle (www.righto.com)

航天飞机临时电传打印机系统逆向工程

背景与起源 该打印机是NASA为1981年首次航天飞机发射紧急设计的过渡方案,旨在向宇航员传送程序、任务计划、天气报告等文件。由于原本计划的上行链路文本与图形系统因数据中继卫星延迟无法使用,NASA在7个月内基于陆军AN/UGC-74军用通信终端快速改造而成。尽管名为“临时”,但其可靠性超出预期,作为备份使用了50多次飞行。

打印机制 打印机采用旋转金属鼓与撞击式打印原理:

  • 字符鼓:宽80列,每列有64个浮雕字符,螺旋排列以平衡负载。
  • 打印方式:80个电磁锤对应每一列,在鼓旋转时精确击打纸张和色带,将字符印于纸上。
  • 字符集:与军用终端相比,替换10个特殊字符为航天常用的符号(如希腊字母)。

电路结构

  1. 解调板(作者逆向工程)

    • 将音频信号(FSK编码,3600Hz代表“1”,7200Hz代表“0”)解调为串行数据流(600波特)。
    • 包含信号放大、滤波、载波检测及数字自动相关解调电路,实现低功耗待机。
  2. 逻辑板(沿用军用终端)

    • CPU板:摩托罗拉6800微处理器控制打印过程,将ASCII字符转换为鼓码。
    • 打印控制板:驱动80个电磁锤,在鼓旋转时精准撞击对应字符。
    • 通信板:处理串行输入,支持ASCII/Baudot格式。
    • 内存板:为内置文字处理器提供存储(航天飞机上未使用该功能)。
  3. 电源

    • 开关电源提供多路电压,并为鼓电机提供转速闭环控制。
    • 恒流源设计(军事用途防泄密),在航天飞机上造成不必要的功耗。

航天飞机适配改装

  • 机械改造:移除键盘、控制面板及坚固框架,减重至59磅;增加安装导轨以适配储物柜。
  • 安全与散热:添加温敏警示贴纸;引入1瓦待机模式,通过音频信号激活打印机。
  • 安装与连接:固定于中层甲板后部储物柜(MA9F),门板设置电源/音频接口;需隔音处理以降低撞击噪音。

使用与替代系统

  • 部署:每次任务打印数千行,但使用成本高昂(每磅$27,000)。
  • 后续系统
    • TAGS(传真式图像打印机)因卡纸问题可靠性差。
    • TIPS(热敏脉冲打印机)于1993年逐步取代两者,采用商业现货设备。

测试与结论 作者通过逆向工程成功使该打印机恢复工作,证明了其功能完整性。尽管设计受时间与材料限制,存在过热、遗留无用功能(如文字处理器)等问题,但作为紧急过渡方案,其可靠性与长期服役表现远超预期。

6. Making your own hot sauce (successfulsoftware.net)

这篇文章讲述了作者因喜爱的美国辣椒酱“Ring of fire”在英国难购而尝试自制辣椒酱的经历,并详细介绍了制作方法、配方试验及安全提示。

制作动机:作者喜欢“Ring of fire”辣椒酱(由哈瓦那辣椒、塞拉诺辣椒、番茄、醋和香料制成),但该产品在英国变得稀少且昂贵,而市面上多数辣椒酱风味或辣度不足,因此决定自己尝试制作。

基本制作流程

  1. 乳酸发酵:将辣椒与自选蔬菜或水果在盐水(盐水比例约2-3%)中于室温下发酵约两周。需使用带通气孔的容器以排出气体,避免爆炸风险。
  2. 处理:弃去大部分盐水,加入醋。
  3. 混合与熬煮:将混合物搅打均匀,随后在锅中熬煮以增稠风味(此步骤可选,但能提升口感和稳定性,并终止发酵)。
  4. 装瓶:完成熬煮后装瓶。

配方试验结果

  • 青辣椒与洋葱配方:与“Ring of fire”风味相当,评价不错。
  • 苏格兰帽辣椒与菠萝/芒果配方:风味突出,作者认为甚至优于“Ring of fire”。
  • 苏格兰帽辣椒与香蕉配方:质感和口感不佳,最终丢弃。

安全与注意事项

  • 发酵过程需保持容器密封清洁,以防肉毒杆菌等有害物质滋生。表面出现白色酵母可接受,但出现绒毛状物质则应丢弃。
  • 自制辣椒酱因盐或酸度可能不足,建议冷藏并在数周内食用。
  • 制作过程中,大蒜在发酵后变蓝或绿色属正常现象(作者曾因此误弃食材)。

其他信息

  • 自制辣椒酱可灵活调整风味、辣度和酸度。
  • 作者目前开始自行种植辣椒。
  • 推荐YouTube频道“Chillichump”作为学习资源。
7. Nxylon: New super-black material made from wood (news.ubc.ca)

不列颠哥伦比亚大学的研究人员意外发现了一种名为Nxylon的新型超黑木材材料,它能吸收超过99%的可见光,反射率低于1%。该发现源于他们在使用高能量等离子体改善木材防水性的实验中,偶然观察到木材切割端表面呈现出极黑特性。

与传统依赖黑颜料的材料不同,Nxylon通过其独特结构阻止光线逃逸,从而实现极高的光吸收率。即使表面镀有金等导电合金,其黑色特性依然保持不变。这种材料由北美常见的椴木制成,具有重量轻、硬度高、易于切割成型的特点,可持续且可再生。

Nxylon在多个领域具有应用潜力,包括珠宝(可替代黑曜石等黑色宝石)、手表表盘(可替代乌木等昂贵黑木)、太阳能电池(提升效率)、天文设备(减少杂散光)以及艺术与装饰领域。研究人员已开发出手表和珠宝原型,并计划与设计师合作扩大应用。

团队正筹备成立Nxylon Corporation of Canada公司,以推动商业化生产,包括开发可生产大面积超黑木材的商用等离子反应器,用于制造不反光的天花板和墙板。研究强调该技术有望为林业带来新的价值,尤其在不列颠哥伦比亚省等地推动木材产业从大宗商品生产向高附加值产品转型。

该项目由不列颠哥伦比亚大学、德州农工大学和澳大利亚国立大学的研究人员共同完成。

8. Written by a 16 year old, a book on how computers work (github.com)

摘要

本文介绍了一本由16岁少年撰写的关于计算机如何工作的书籍。作者在长期使用计算机后,意识到自己并未完全理解相关技术,因此投入大量时间进行研究,最终完成了一篇20,000字的文章。文章揭示了计算机硬件的基本原理,例如CPU本质上是高度组织的沙子,并以通俗易懂的方式解释计算机概念,避免技术术语如“栈溢出”。作者鼓励读者探索屏幕背后的技术,并提及后续内容如“RAM-a-thon, Segment 0”,暗示这是一个学习系列的一部分。整体目的是以有趣的方式普及计算机知识,激发读者的好奇心。

11. Self-Compressing Neural Networks (arxiv.org)

《自压缩神经网络》文章总结

研究背景与目标

该研究致力于减小神经网络的模型规模,因为网络规模是决定神经网络执行时间、功耗、带宽需求以及内存占用的主要因素。研究面临的核心挑战在于:如何在不依赖专用硬件的前提下,以支持高效训练和推理的方式有效缩减模型体积。

核心方法:自压缩(Self-Compression)

为解决上述挑战,作者提出了一种名为“自压缩”的简单且通用的模型压缩方法。该方法通过引入广义损失函数(generalized loss function) 来最小化整体网络规模,并同时实现以下两个核心目标:

  1. 移除冗余权重:剔除网络中不必要的权重参数。
  2. 降低权重表示位数:减少用于表示剩余有效权重所需的比特(bit)数量。

实验结果

实验数据表明,该方法在大幅压缩模型的同时保持了优异的性能。在仅保留原网络 3% 的比特数18% 的权重的极端压缩条件下,模型依然能够维持原有的浮点精度(floating point accuracy)

12. Tomato nostalgia as I relive my Croatian island childhood (www.croatiaweek.com)

文章摘要:

这篇文章讲述了作者拉娜·V(Lana V.)在克罗地亚岛上追寻童年记忆中完美番茄味道的经历。

童年记忆中的番茄: 作者回忆童年在克罗地亚岛上度过的夏天,记忆中的番茄硕大、颜色鲜红、完全熟透,表面带有自然的斑点和不规则形状。它们与现代超市中整齐划一、外观完美的番茄截然不同,但拥有令人难忘的浓郁风味,与新鲜面包、甜椒粉和盐一起构成了她记忆中完美的简单一餐。

寻找过程的挫折: 三十年后,作者试图重温这种感觉。她走访了多家商店,但发现货架上的番茄大多产自荷兰,外观苍白、乏味、缺乏香气,与她记忆中的番茄相去甚远。一次,她在货架下发现了一箱标有“克罗地亚产”的小番茄,但购买后品尝,味道同样令人失望。

通过秘密渠道获得: 几近放弃时,她遇到一位对食物很有研究的朋友。朋友起初极不情愿透露来源,仿佛在分享一个珍贵的秘密。经过几天等待和类似“地下交易”的沟通后,作者通过转账获得了一批番茄。朋友将其用超市塑料袋包装,放在当地一家咖啡馆。

重获记忆中的味道: 作者取回番茄后,被其香气震撼。她决定独自享用,用橄榄油、鸡蛋、黄瓜等蔬菜搭配,并加入从海边小径采摘的茴香和粗盐制作沙拉。这次品尝让她感觉如同置身天堂,童年的番茄记忆瞬间涌回,她再次沉浸在那熟悉而美妙的味道中,仿佛找回了童年的感觉。

文章通过寻找番茄的历程,描绘了对传统本土食物风味的怀念,以及现代食品生产与记忆中自然风味之间的差异,充满了个人情感与地方生活气息。

14. Nvidia reportedly delays its next AI chip due to a design flaw (www.theverge.com)

核心要点:英伟达下一代AI芯片因设计缺陷发布延迟

据The Information报道,英伟达已告知微软等主要云服务提供商,其下一代AI芯片“Blackwell”B200的生产将推迟至少三个月。延迟原因是在生产后期发现了设计缺陷

B200芯片是广受欢迎且供不应求的H100芯片的继任者,后者为全球大量AI云基础设施提供支持。英伟达发言人John Rizzo表示,公司预计该芯片将在2024年下半年开始量产,但未对具体延迟传闻置评。

目前,英伟达正与芯片制造商台积电合作进行新一轮测试,大规模出货预计推迟至2025年第一季度。报道称,微软、谷歌和Meta等公司已订购了价值“数百亿美元”的B200芯片。

此次延迟发生前不久,英伟达曾宣布基于Blackwell架构的产品将于2024年开始向合作伙伴提供。新芯片旨在开启公司AI芯片的年度更新节奏,而此时AMD等竞争对手也在加紧开发自家AI芯片。

15. TPU transformation: A look back at 10 years of our AI-specialized chips (cloud.google.com)

本文回顾了谷歌张量处理单元(TPU)自2015年首次部署以来十年的发展历程与成就。

起源与目的:约十年前,谷歌意识到其AI计算需求将迅速超越现有基础设施。以语音识别为例,处理全球数亿用户每天仅三分钟的对话,就需要耗尽当时谷歌几乎全部的计算能力,或将其数据中心规模翻倍。为此,谷歌决定研发专用芯片,TPU应运而生。它是一种专门为AI设计的应用特定集成电路(ASIC),旨在高效执行AI模型所需的矩阵和向量运算,与通用CPU和最初用于图形处理的GPU形成区别。

发展与演进

  • 初代成功:TPU v1于2015年内部部署后,实际需求远超预期,很快便生产超过10万块,广泛应用于广告、搜索、语音识别、AlphaGo等项目。
  • 训练能力突破:初代TPU主要专注于推理。随后,谷歌意识到训练能力是关键瓶颈,遂开发了TPU v2,构建了首个由256块TPU芯片通过高带宽互连组成的训练超级计算机(即TPU Pod),大幅提升了模型训练的规模与效率。
  • 持续创新:此后TPU更新换代加快,并在性能、效率和规模上不断提升。例如,TPU v3引入液冷技术以提高能效;TPU v4采用光学电路开关,加速Pod内芯片通信;最新第六代TPU Trillium,相比前代TPU v5e,单芯片计算性能提升超过4.7倍,为训练更先进AI模型提供支持。
  • 平衡设计哲学:每一代TPU都在专注于优化当前模型(基于张量数学)的同时,保持一定的灵活性,以适应未来2-8年AI模型的快速演变,避免过度特化导致过早淘汰。

应用与影响

  • 内部基石:TPU已成为谷歌几乎所有AI产品的支柱,支撑着Google DeepMind的Gemini 1.5 Flash、Imagen 3、Gemma 2等前沿基础模型。
  • 云端开放:2018年,谷歌通过Google Cloud对外开放Cloud TPU服务。如今,Anthropic、Midjourney、Salesforce等众多知名AI团队广泛使用。超过60%的获资生成式AI初创公司和近90%的生成式AI独角兽企业都在使用包括Cloud TPU在内的谷歌云AI基础设施。
  • 未来展望:谷歌正在从单一芯片或Pod,转向构建一个由TPU组成的全球数据中心网络,致力于实现从硅片到基础设施的全栈定制化,以更好地匹配未来数据的需求。
16. Sega Jet Rocket: The '70s arcade game with no computer or screen (newatlas.com)

世嘉 Jet Rocket:70年代无计算机无屏幕的街机游戏

世嘉于1970年推出的Jet Rocket是一款具有开创性的机电街机游戏。它无需计算机或视频屏幕,却开创了多个“第一”:世界首款飞行模拟游戏第一款第一人称射击游戏以及首款让玩家在虚拟世界中探索的“开放世界”游戏

核心玩法与机制

玩家操控一架夜间任务的空军喷气机,通过操纵杆和发射按钮向地面目标(如油库、导弹阵地)发射火箭。命中目标(每个得5分)会伴随闪光和爆炸音效。所有这些效果均通过精密的机电装置实现。

技术原理

游戏机柜内采用了一套创新的机电反射系统

  • 动态画卷:一个大型垂直传送带上覆有柔性泡沫地形图,包含目标。
  • 反射镜:位于玩家与画卷之间的镜子以45度角反射画卷内容,创造立体水平景观。
  • 转向控制:玩家转动操纵杆时,镜子会相应倾斜,模拟飞机左右转弯。
  • 黑光照明:使用紫外线灯使地形上的荧光涂料在暗背景中显现,营造夜景效果。
  • 火箭发射视觉:V形阵列灯光通过一块透明亚克力板反射到玩家视野中,模拟火箭轨迹。
  • 命中检测:画卷背面设有导电钢网片,当其经过对应目标区域的触针时,若玩家正在按下发射按钮,便会触发电路,点亮画卷下方的灯光,使泡沫目标发光并触发音效。

历史与影响

Jet Rocket于1970年8月全球发售,初期非常受欢迎。然而,美国三家公司(Williams、Bally、Chicago Coin)迅速推出未经授权的克隆游戏,抢占了北美市场,导致世嘉自身销售受阻。尽管Jet Rocket及其克隆品因早期电子游戏的兴起仅生产了数年,但世嘉在1977年仍推出了继任者Heli-Shooter(加入了微处理器,但仍无屏幕)。

现存状况

如今存世的功能性Jet Rocket机器极为稀少。收藏家Rusty Key以100美元购得一台并进行了全面修复,估计完全修复的机器价值约1000美元。Key指出,游戏机柜巨大沉重,需要机电维护技能,但其展现的机械创新精神至今仍具魅力。他强调:“用有限材料实现目标的创造力是Jet Rocket的核心,它与50年前一样吸引人。”

这款无数字技术的游戏证明了早期机电游戏设计的精巧与开创性,为后续电子游戏的发展奠定了重要基础。

17. Belenios: Verifiable online voting system (www.belenios.org)

Belenios 可验证在线投票系统摘要

系统概述

Belenios 是一个旨在提供易用且安全的在线投票系统,其核心安全特性包括投票隐私和可验证性。该系统适用于多种选举类型,从科学委员会到体育协会的公投均可支持。Belenios 软件基于 GNU Affero 通用公共许可证第3版分发,用户也可自行部署在服务器上。

主要安全特性与目标

  • 投票隐私:确保选票内容保密。
  • 可验证性:允许选民和权威机构验证选举的完整性和正确性。
  • 阈值加密:支持分布式密钥生成(DKG),选举密钥可由多个受托人(trustees)分持,解密需要阈值数量的受托人协作。
  • 安全增强:持续改进,如采用 AES-GCM 替代 AES-CCM、增加凭证长度、引入单独盐值等,以提升安全性。

关键版本演进与功能更新

近期重要更新(2023-2024)

  • Belenios 3.1:主要修复了新管理员界面部署后的问题,并包含安全增强。
  • Belenios 3.0:修复了阈值模式下分布式密钥生成(DKG)实现中的关键问题(通过增加签名字段),并进行了大量代码重构和界面改进。
  • Belenios 2.5:引入“限制模式”,强制执行所有安全选项以符合安全评估标准(CSPN)。
  • Belenios 2.4:简化选民流程(凭证包含在私有链接中),增加了凭证长度,优化了管理员体验。
  • Belenios 2.3:更新了私有凭证格式以增强安全性,并调整了凭证发送时机以便管理员操作。

中期功能发展(2022-2023)

  • Belenios 2.2:实验性推出新的、更直观的管理员界面,并增加了对STV(单记可转让投票)的支持。
  • Belenios 2.1:支持并使用 Ed25519 椭圆曲线,改进了受托人密钥管理,简化了选民投票流程。
  • Belenios 2.0:引入了选举事件链式记录的新格式(为服务器提交承诺做准备),移除了投票阶段的最后确认步骤,并改进了API支持。
  • Belenios 1.x 系列 (2020-2022):陆续增加了对多种投票方法的支持(如孔多塞-舒尔茨、多数判断、单记可转让投票),改进了多语言支持(通过Weblate平台协作翻译),增强了监控和调试功能。

早期功能与基础设施(2015-2019)

  • 2015年:首个在线平台版本上线。
  • 2016年:实现完全开放的投票平台,并引入多语言支持。
  • Belenios 1.8:支持在线创建管理员账户,并完全集成了阈值加密模式。
  • Belenios 1.10:增加了混洗网络(mixnets)模式,支持对投票进行排序或打分,以保护隐私并适用于多种计票方法。
  • Belenios 1.11:选举主页集成验证材料,方便各相关方进行验证。
  • 持续更新:各版本陆续修复了各种错误,改进了用户界面,并不断扩展支持的语言。

部署与使用

  • 公共服务器:项目部署了新的公共服务器(托管于OVH),逐步替代旧服务器,以提供更好的可用性。旧服务器上的账户和选举不会自动迁移。
  • 多语言支持:界面支持多种语言(如英语、法语、德语、意大利语、罗马尼亚语等),并鼓励社区参与翻译。
  • 捐赠支持:项目接受捐赠,用于支持基础设施和开发成本。
  • 安全分析:提供了主要基于法国CNIL标准的安全分析文档(法文)。

总结

Belenios 是一个不断演进、注重安全与可验证性的在线投票系统。它通过持续的版本更新,不仅增强了核心密码学协议的安全性(如修复DKG问题、升级算法),还大幅提升了用户体验(如新的管理员界面、简化的选民流程),并扩展了功能以支持多样化的选举规则。其开源特性、多语言支持以及提供的公共服务器,使其成为一个灵活且可广泛使用的选举解决方案。

18. Make your electronics tamper-evident (www.anarsec.guide)

如何使电子产品防篡改:防护“邪恶女仆”攻击的综合策略

核心问题:“邪恶女仆”攻击

攻击者可临时物理接触加密设备(如笔记本电脑、手机)。虽无法解密数据,但能在短时间内篡改硬件(如植入键盘记录器)、修改固件或软件。当用户随后输入凭据时,设备即被攻陷。此类攻击风险高,且难以察觉。

核心理念:纵深防御

采用多重安全层,显著增加攻击者的难度与成本,使其知难而退。防护需覆盖硬件、固件、软件及物理空间。

具体防护措施

1. 硬件防篡改:闪光指甲油密封法

  • 原理:将独特且无法复制的闪光指甲油直接涂在笔记本电脑的螺丝上。任何撬动都会破坏图案。
  • 操作步骤
    1. 为所有螺丝编号并拍照。
    2. 在螺丝上涂抹含有多种颜色和大小闪片的指甲油,确保厚度适中。
    3. 干燥后,使用 Blink Comparison 应用(Android)拍摄高清对比照片。该应用可加密存储并简化“闪烁对比”法,便于发现细微变化。
  • 注意事项:此方法效果受螺丝孔深度、指甲油厚度和闪片密度影响。直接涂于螺丝上优于先贴贴纸再涂抹。

2. 物品存储防篡改:彩色混合物法

  • 原理:将电子设备放入透明容器(如鱼缸),用彩色豆子、大米等混合物完全覆盖,形成独特随机图案。
  • 操作步骤
    1. 将设备(已关闭)用薄膜包裹保护后放入容器,覆盖混合物。
    2. 将容器置于能减少轻微震动的地方。
    3. 使用 Blink Comparison 应用从各个可见角度拍摄照片并加密存储。
  • 验证:返回后重新拍摄,与原始照片对比,检查图案是否改变。

3. 软件与固件防篡改

  • 目的:检测远程或物理访问导致的固件、操作系统篡改,是纵深防御的关键层。
  • 工具
    • GrapheneOS:使用 Auditor 应用进行远程认证。若系统被篡改,会通过邮件通知。
    • Heads 固件(用于兼容的笔记本):在启动密码输入前验证系统完整性。需将安全密钥随身携带并备份。
  • 行动:一旦检测到篡改,立即视设备为不可信。

4. 物理入侵检测

  • 目的:监测空间是否被非法进入,即使攻击未直接触动防篡改存储物。
  • 工具与方法
    • Haven 应用(Android):利用手机传感器(麦克风、摄像头、运动检测器)监控并记录房间变化。目前远程通知功能不稳定,建议仅记录本地日志。
    • 视频监控系统:如 motionEye OS,可设置移动侦测和远程通知。选择注重隐私(如非云端)的型号。
  • 部署:使用专用廉价Android设备,离家前启动Haven或监控系统,置于关键通道。回家后检查日志或录像。

综合实践流程

为有效防护,应系统性地组合以上措施:

离家前:

  1. 将已关闭的设备存入彩色混合物防篡改容器
  2. 使用Blink Comparison拍摄存储容器照片。
  3. 启动 Haven物理入侵检测系统。
  4. (可选)将照片通过加密渠道发送给自己的另一台已存放在容器内的设备。

回家后:

  1. 首先检查Haven日志或监控录像。
  2. 使用 Blink Comparison 验证存储容器的图案。
  3. 如有必要,验证笔记本电脑螺丝上的指甲油图案。
  4. AuditorHeads 一旦设置完成,便自动在启动时提供保护。

结论

通过组合物理密封(闪光指甲油)、存储监控(彩色混合物)、完整性校验(Auditor/Heads)和入侵检测(Haven/视频监控)这四层防护,任何“邪恶女仆”攻击的成功都将极为困难,从而极大地降低了此类攻击被尝试的可能性。关键在于建立从可信新设备开始的、持续一贯的安全习惯。

19. Evaluating a class of infinite sums in closed form (www.johndcook.com)

本文探讨了一类无穷级数 (\sum_{n=0}^{\infty} \frac{n^k}{c^n}) 的封闭形式评估问题,其中 (k) 是非负整数,(c) 是有理数且 (|c| > 1)。研究发现,这类级数可以评估为有理数,并存在相应的算法来计算其值。

评估方法基于多对数函数 (\text{Li}s(z) = \sum{n=1}^{\infty} \frac{z^n}{n^s}) 和恒等式 (\sum_{n=0}^{\infty} n^k z^n = \text{Li}_{-k}(z)),其中 (z = 1/c)。当 (s) 为非正整数时,(\text{Li}_s(z)) 可表示为有理函数。具体地,(\text{Li}_0(z) = \frac{z}{1-z}),且通过对有理函数的微分和乘法操作,可推导出其他非正整数 (s) 对应的 (\text{Li}_s(z))。

例如,作者验证了初始恒等式 (\sum_{n=0}^{\infty} \frac{n^3}{2^n} = 26),这对应于 (\text{Li}_{-3}(1/2) = 26)。进一步验证表明,当 (c=2) 时,对于 (k=1) 至 (10),级数和均为整数,并有更新内容证明了当 (n=2) 时和为整数的结论。此外,对于更大的 (c) 值(如 (c=3) 或 (c=5)),级数和偶尔也为整数。

总之,文章阐明了通过多对数函数评估这类无穷级数封闭形式的方法,并提供了具体例子和证明,扩展了对无穷级数求和的理解。

21. USB Sniffer Lite for RP2040 (github.com)

USB Sniffer Lite for RP2040 摘要

这是一个基于树莓派RP2040微控制器的简易USB协议分析器(嗅探器),主要用于调试和捕获USB数据流量。

核心功能与特性

  • 支持模式:支持USB低速(Low Speed)和全速(Full Speed)通信模式。
  • 接口与兼容性:设备作为虚拟串口(VCP)呈现,无需安装额外驱动软件,兼容所有主流操作系统。
  • 固件更新:提供编译好的UF2格式二进制文件,通过将RP2040引导至BootROM模式并拷贝文件即可完成固件更新。
  • 解码能力:嗅探器本身不包含数据包解码功能,但推荐使用外部在线工具(如USB Descriptor and Request Parser)来解析标准的USB描述符和请求。

硬件连接

  • 基础连接:可将目标USB设备的D+和D-信号线直接连接到RP2040的指定GPIO引脚(默认为GPIO10接D+,GPIO11接D-)。接地线需连接GND。其他引脚用于触发、状态指示等功能。
  • 简易制作:可通过拆解USB线并焊接至树莓派Pico开发板来快速制作,无需复杂电路。
  • 专用电路板:项目提供了一个专用PCB设计。该设计集成了一个USB集线器(FE8.1),允许仅通过一个PC主机USB端口同时连接嗅探器和目标设备,简化了布线。

设置与控制

设备通过串口命令进行配置和控制,支持多项可调设置:

  1. 捕获速度:选择低速或全速模式。
  2. 捕获触发:可启用或禁用外部触发功能。触发信号为低电平有效,可用于在调试目标产生特定事件时开始捕获。
  3. 捕获限制:可设置捕获的数据包数量上限(从100到10000个,或无限)。
  4. 显示格式:包括时间显示格式(相对于首包、前一包等)、数据显示格式(完整显示、限制字节数或不显示)以及是否合并连续的空帧。
  5. 命令集:支持打印帮助、显示缓冲区、开始捕获和停止捕获等命令。捕获开始后,数据包被存储在内存中,可随时通过命令重新显示。

总结

该项目提供了一种低成本、基于RP2040的USB协议分析解决方案。其主要价值在于能够实时捕获USB低速/全速流量,并通过虚拟串口将原始数据包输出到主机进行进一步分析。虽然解码需要借助外部工具,但其灵活的触发机制、可配置的显示选项以及从简易飞线到专用集成板的多种硬件方案,使其适用于嵌入式系统开发和USB设备调试场景。

22. LLM as Database Administrator (2023) (arxiv.org)

文章标题:LLM as Database Administrator (2023)

本文提出了 D-Bot,一个基于大语言模型的数据库自动诊断系统,旨在解决数据库管理员工作繁重、响应延迟以及现有方法局限性等问题。

背景与问题

  • 数据库管理员的角色:负责数据库系统的管理、维护和优化,但面对大量数据库时,工作艰巨且难以快速响应。
  • 现有方法的不足:传统经验性方法仅适用于有限的诊断场景,且在数据库版本更新时,更新诊断规则非常耗时耗力。

解决方案:D-Bot 系统

D-Bot 利用大语言模型,实现以下核心功能:

  1. 自动知识获取:从诊断文档中离线提取知识。
  2. 智能诊断报告:在可接受的时间内(例如10分钟内,远快于人工的数小时),自动生成合理且有依据的诊断报告,包括识别根本原因和解决方案。

关键技术

系统包含四项主要技术:

  1. 离线知识提取:从文档中构建诊断知识库。
  2. 自动提示生成:包括知识匹配和工具检索等步骤,为LLM生成有效的诊断提示。
  3. 树搜索算法:用于分析问题的根本原因。
  4. 协作机制:用于处理具有多个根本原因的复杂异常。

评估与结果

  • 测试基准:在包含6个典型应用、539个真实异常案例的基准上进行验证。
  • 性能:结果表明,D-Bot 能够有效分析未见过的异常的根本原因,其性能显著优于传统方法和像GPT-4这样的原始大语言模型。
23. Organic maps: Experimental feed based public transport mapping (github.com)

Organic Maps:基于GTFS数据的实验性公共交通地图功能

功能简介

Organic Maps当前公共交通功能有限,仅包含从OpenStreetMap收集的稀疏轨道交通数据(地铁、轻轨、单轨、火车线路及站点),并提供相应的“地铁图层”和导航功能。通过启用实验性GTFS公共交通功能,应用可支持更广泛的交通类型(公交、火车、轮渡、缆车、无轨电车等),实现完整的公共交通路线规划。

启用步骤

  1. 下载GTFS数据
    运行Python脚本 download_gtfs.py 从Transitland和OpenMobilityData聚合器抓取GTFS数据包,并解压至指定目录。可选仅从OpenMobilityData下载以避免申请API密钥。

  2. 处理与转换数据
    使用C++工具 gtfs_converter 对GTFS数据进行过滤、合并和转换,生成中间JSON文件。此工具支持两种模式:

    • 纯GTFS模式:仅处理GTFS数据
    • 合并模式:整合GTFS与OSM交通数据
      需备份生成的ID映射文件,以确保多次更新时交通实体一致性。
  3. 配置地图生成
    map_generator.ini 中取消注释 SUBWAY_URL 并设置 TRANSIT_URL 参数为转换后的JSON目录,随后运行地图生成器生成包含新版交通数据的地图文件(mwms)。

功能特性

  • 完整路线规划:基于时刻表、休息日及例外情况,支持多种交通方式间的换乘路线规划。
  • 优化地铁图层:改进平行同色线路的显示方式,将单色平行线路合并为一条线,使地图更清晰。
  • 数据冲突处理:主动过滤GTFS中的地铁数据以避免与OSM冲突;轻轨、单轨及火车数据可能仍存在冲突,但地铁图层仅显示OSM数据,路线规划则智能选择GTFS或OSM中的最优路线。

实验性原因

该功能尚未充分测试,且缺少用户界面用于按交通类型筛选、设置出发时间及路线跟随模式。

问题咨询

如有疑问,可联系开发者 mesozoic-drones(邮箱:mesozoic.drones@gmail.com)。

24. Apprentice, Journeyman, and Master: The Medieval Guild (2018) (blog.philosophicalsociety.org)

中世纪行会:历史、功能与工匠等级制度

一、历史背景

中世纪行会的兴起与汉萨同盟密切相关。汉萨同盟(德语意为“商队”)于1100年代在北欧(主要在德国)崛起,是一个由城镇和商会组成的商人联盟,旨在对抗封建欧洲体系。该同盟拥有独立的法律体系、军队,并直接效忠于神圣罗马帝国皇帝。

随着独立城镇和商人势力的增长,行会制度应运而生。汉萨同盟属于商人行会,而手工业行会则在类似时期以相似方式发展。手工业行会旨在保护以往由父子、亲属或随机劳工传承的技艺。随着城镇发展,对稳定的手工业产品供给需求增加,手工业行会提供商品,商人满足需求,这标志着真正资本主义的开端

二、行会的主要功能

无论是商人行会还是手工业行会,都承担着相似的重要功能:

  1. 建立贸易垄断:在本地或特定行业分支内形成垄断。
  2. 制定与维护标准:保证商品质量和交易诚信。
  3. 稳定价格:努力维持商品和物资价格的稳定。
  4. 影响政府:试图控制城镇或市政府,以促进成员利益和实现经济目标。

三、工匠等级制度:学徒、熟练工与师傅

行会采用的等级制度起源于罗马帝国,甚至可能更早的美索不达米亚。这套制度使用三个核心术语来划分工匠的熟练程度,对共济会成员也具有重要意义。

  1. 学徒

    • 定义:指“学习者”。男孩(有时包括女性)从幼年起被纳入行会,跟随师傅学习手艺。
    • 状态:与师傅绑定,在规定时间内学习特定的身心技艺。在满足行会和师傅的要求之前,不能成为行会的正式成员。
    • 目的:确保有足够数量的熟练工匠,为不断增长的城镇提供质量稳定、具有竞争力的商品和服务。
  2. 熟练工

    • 定义:指“为他人工作的人”。它是完成学徒期后被派往外界工作的学徒,通常为其他师傅或工坊服务。
    • 词源:英文“Journeyman”中的“journey”原意为“一日”,指按日工作的人。
    • 状态:不再与单一师傅绑定,可以选择工作。但其原来的师傅仍需为其品格和能力提供担保。熟练工的个人荣誉或耻辱直接关系到师傅和所属行会的声誉。
    • 核心:追求工作和品行的完美。
  3. 师傅

    • 定义:指“拥有控制权或权威的人”,也意味着“精通者”。
    • 条件:必须精通手艺的所有领域,能适应各种条件和材料。这是部分靠自我努力、部分靠授予的头衔。
    • 成就证明:熟练工需要通过展示其技术能力的**“杰作”** 来证明实力,才有可能晋升为师傅。
    • 地位:成为师傅后,可以建立自己的作坊,雇佣和培训学徒。师傅往往形成一个精挑细选的内圈,不仅拥有技术能力,还需证明其财富和社会地位。许多人可能终其一生都停留在熟练工阶段。

四、行会的核心目的

值得注意的是,行会的主要功能并非直接生产商品或改进技术(这些只是辅助角色)。行会存在的根本目的是培训学徒。通过引入和绑定学徒,行会确保了高质量工艺的延续、产品质量的一致以及行业传统的传承。因此,行会的角色是为新个体引入一门技艺,向他们灌输标准、质量、一致性和追求完美的理念,从而拓展他们在特定领域的视野和技术知识,使其能为城镇和家庭提供服务。行会及其成员在服务自身的同时,也服务于整个社区。

25. Rhombus: Macro-extensible language with conventional syntax built on Racket (docs.racket-lang.org)

Rhombus 语言概览

Rhombus 是一个构建在 Racket 平台上的可宏扩展、具备传统语法的编程语言。其核心设计目标是提供一种更符合常见编程习惯的语法,同时深度利用 Racket 强大的宏系统实现语言的灵活扩展。

文档结构与内容

提供的资料主要为 Rhombus 的官方文档目录结构,涵盖了从入门到高级主题的完整内容:

1. 入门与基础

  • 快速入门:提供简明教程,帮助用户快速上手。
  • 元编程教程:专门讲解 Rhombus 的元编程能力。

2. 语言核心与参考

  • Rhombus 指南与参考:语言使用和核心特性的详细说明。
  • 元编程参考:宏系统的深入技术文档。
  • 语言模型:阐述 Rhombus 的设计哲学和内部结构。
  • FFI (外部函数接口):用于与其它语言编写的库进行交互。
  • Shrubbery 表示法:一种用于处理代码结构和缩进的语法。

3. 核心功能库

Rhombus 提供了一系列丰富的内置库,覆盖主要编程领域:

  • 工具:用于文档撰写(如 Scribble)和幻灯片制作。
  • GUI 与图形:包含绘图工具包、图形用户界面工具包、功能化图片库等。
  • 网络:涵盖 HTTP 客户端、SSL 安全通信、URL 解析等。
  • 解析:支持 CSV、HTML、JSON、XML 等多种格式的读写与解析。
  • 互操作性:重点介绍了 Rhombus 与 Racket 的互操作性

4. 生态系统集成

Rhombus 并非孤立存在,其文档目录同时并行展示了支撑它的 Racket 语言及其庞大生态系统,包括:

  • Racket 核心:指南、参考手册、包管理、命令行工具等。
  • Racket 工具链:如 DrRacket IDE、raco 命令行工具、测试覆盖工具等。
  • 广泛的 Racket 库:涉及 GUI、网络、解析、数据结构、并发、数据库、数学、科学计算、Web 开发等数百个具体库和工具。
  • 其它 Racket 环境语言:列举了如 Typed Racket、R6RS Scheme、Datalog、Plait 等众多在 Racket 生态中实现的其它编程语言。

核心特点总结

  1. 宏扩展性:核心卖点,允许开发者深度定制和扩展语言语法。
  2. 传统语法:采用更常见、非 S-表达式的语法形式,降低部分开发者的入门门槛。
  3. 构建于 Racket:继承了 Racket 成熟的基础设施、庞大的包生态系统和强大的宏能力。
  4. 全面性:从语言核心、标准库到开发工具,提供了完整的开发栈。
  5. 生态集成:设计上与 Racket 生态系统无缝集成,可充分利用现有的 Racket 资源和代码。

该文档体系表明 Rhombus 是一个旨在结合传统编程体验与 Racket 强大宏系统、面向实际应用开发的现代语言。

26. Probability Estimates of a 21st Century AMOC Collapse (arxiv.org)

根据再分析数据对21世纪大西洋经向翻转环流(AMOC)崩溃的概率进行了基于观测的估计。研究首先从气候模型模拟中确定了监测AMOC崩溃的最优观测区域,发现大西洋南部边界附近的盐度数据最为关键。基于再分析产品,研究估算了AMOC崩溃时间的概率密度函数,预测崩溃时间可能在2037年至2064年之间(10%-90%置信区间),均值为2050年。此外,估算AMOC在2050年之前崩溃的概率为59% ± 17%。该研究为评估AMOC崩溃风险提供了新的观测依据。

27. You can contribute to KDE with non-C++ code (rabbitictranslator.com)

非C++代码亦可为KDE做出贡献

KDE项目并非仅依赖C++,多种其他编程语言和专用技术格式均可用于贡献。本文概述了在KDE中可用这些技术进行贡献的领域及具体方式。

如何按语言查找项目

在KDE Invent上创建账户并登录后,通过“Explore projects”功能可选择特定编程语言进行筛选。

支持贡献的技术领域

Python

Python在KDE中应用广泛,仅次于C++、QML和CMake。主要贡献方向包括:

  • Appium测试:用于GUI应用的自动化测试,通过Selenium AT-SPI WebDriver实现。
  • 核心应用:如KDevelop、Kdenlive、Lokalize、KTimeTracker等。
  • 开发工具:包括kde-builder(替代Perl编写的kdesrc-build)、Doxyqml(用于QML API文档生成)、pology(处理PO文件的工具集合)。
  • 跨平台构建工具:Craft及其配方(Craft Blueprints)。
  • 网站与基础设施:KDE网站(使用Hugo的custom_generation.py)、CI工具(ci-utilities)、CI公证服务。 推荐贡献重点:Doxyqml、Craft Blueprints、Appium测试、KDE网站、pology、Selenium WebDriver、KDevelop的Python插件。

Ruby

主要用于基于Jekyll的静态网站和专用工具:

  • Jekyll相关:如KDE的Aether主题。
  • Appium测试:亦可使用Ruby编写。
  • 专用工具:GitLab分类工具(由Gardening团队使用)、Bugzilla机器人(管理bug报告)、Releaseme(软件发布工具集)、实验性Homebrew KDE仓库。

Perl

主要项目为kdesrc-build——长期用于从主分支构建KDE软件及其依赖的主入口工具。目前缺乏维护,但因成熟稳定且存在迁移过渡期,仍将持续使用。

容器格式(Containerfile/Docker/Podman)

KDE基础设施广泛使用容器:

  • 主要仓库:ci-images(容器镜像)、ci-utilities(包含GitLab模板)。
  • 贡献价值:系统管理员稀缺,此类帮助至关重要。可通过自建GitLab实例学习相关工具。

HTML/SCSS/JavaScript

KDE急需熟悉Hugo的Web开发者。关键需求包括:

  • 主要项目:KDE开发者网站(存在低对比度等无障碍问题)。
  • 广泛需求:维护众多网站(可通过Websites Group查看列表),部分旧网站需从PHP/WordPress等技术迁移。

WebAssembly

QML Online项目待恢复——这是一个可在线编写QML/Kirigami代码并实时生成GUI的工具,但未迁移至Qt6。需要熟悉容器和Qt6 WebAssembly的贡献者。

Flatpak与Snap

  • Flatpak:KDE作为上游,直接在项目仓库中提供清单。贡献途径包括KDE Invent上的项目清单及Flathub应用,可通过KDE Flatpak Matrix组协调。
  • Snap:由Canonical/Ubuntu方主导包装工作,贡献主要通过Snapcraft论坛和KDE neon维护者进行。

CMake

KDE普遍使用CMake,KDE的额外CMake模块(ECM)简化了C++/Qt项目配置。贡献方向:

  • 标准CMake:理解现代CMake实践。
  • Qt CMake:掌握QML应用相关的Qt特定API。
  • KDE ECM:在标准和Qt CMake基础上进一步减少样板代码。

Java

主要项目为KDE Connect Android(纯Java编写以确保原生性能)。此外,构建Android版KDE应用也涉及Qt与Java/Kotlin的集成。

Rust

KDE已有Rust-to-Qt绑定生成器及相关Wiki页面。关键非KDE项目可为Rust生态提供支持:

  • cxx:实现C++与Rust的双向互操作。
  • cxx-qt:支持Qt在Rust中使用,由KDAB开发。
  • Ritual:提供Rust对C++(及Qt)的绑定。
  • QMetaObject-rs:为Rust提供QML/QtQuick绑定。

总结

KDE项目欢迎多种技术背景的贡献者,无论您熟悉Python、Ruby、Web开发、容器化、打包技术、构建系统还是其他语言,均可找到适合的贡献入口。

28. The introverts are winning (newhumanist.org.uk)

《内向者的胜利》内容摘要

核心主题

本文探讨了疫情后社会日益明显的“居家退缩”现象,分析了人们偏好居家生活的原因,并呼吁大众走出舒适区,重新参与现实世界的社交与生活。

疫情后的社交退缩现象

疫情放大了内向者与外向者的差异。尽管防疫限制早已解除,但调查显示,近三分之一的英国年轻人(18-40岁)在封锁期间感到更快乐,甚至支持恢复部分限制措施。同时,外向者发现组织线下社交变得前所未有的困难,自发性聚会大幅减少。

退缩背后的深层原因

  1. 现实因素:居家办公的普及与生活成本危机,显著增加了外出社交的经济与精力成本。
  2. 心理因素:法国哲学家帕斯卡·布鲁克纳(Pascal Bruckner)指出,恐怖袭击、气候危机等负面信息让外部世界显得更具威胁。人们出于恐惧选择躲在安全的家中,形成了“拖鞋的胜利”。

互联网与技术的影响

现代科技为“隐居”提供了强大武器。互联网让人们无需出门即可完成工作、购物、娱乐和社交,催生了“萎缩但高度互联”的新型人类。调查显示,半数千禧一代和Z世代认为线上体验可有效替代线下互动,进一步削弱了人们外出的动力。

鼓励走出家门的理由

作者反驳了完全居家的生活方式,提出以下外出的必要性:

  1. 培养心理韧性:现实生活中的不便与“摩擦”(如排队、跑腿)是必要的,它们能锻炼人的心理韧性,避免在遭遇逆境时不知所措。
  2. 拥抱意外之喜:走出家门才能遇到意料之外的人与事(如偶遇旧识、帮助他人),这种随机性和偶然性是丰富人生的关键。
  3. 维持社会运转:本地小企业、餐厅和社区依赖人们的线下参与。如果所有人都选择退缩,实体经济将难以维系,社会功能将走向衰退。

结论

逃避现实世界本质上是一种自私的选择,会导致社会环境进一步恶化。人类社会的运转依赖于人与人之间的真实连接与互动。为了社会的存续和个人的充实,人们应当抵制绝对舒适的诱惑,勇敢地走出家门,拥抱真实的生活。

29. Parsing Protobuf Definitions with Tree-sitter (relistan.com)

使用Tree-sitter解析Protobuf定义

背景与问题

作者在工作中需要解析Protocol Buffers(protobuf)定义文件以构建工具和生成代码。传统方法如使用protoc及其插件(如protoc-gen-gotemplate)存在局限性,难以构建复杂逻辑。在Go中使用protoreflect处理编译后的结果则过于繁琐。作者所在的后端系统广泛依赖protobuf进行模式定义和序列化,但Go绑定存在诸如GetXYZ()调用繁琐、无法使用结构体标签等问题,导致需要维护手动映射层,效率低下且易出错。

引入Tree-sitter

作者转向Tree-sitter解析库,因其在Neovim中广泛应用且功能强大。Tree-sitter支持多种语言绑定(包括protobuf),并提供Go绑定(github.com/smacker/go-tree-sitter),使得从Go代码中解析protobuf定义成为可能。

解析流程与查询构建

示例定义

以典型的protobuf消息BlogPost为例,包含枚举类型PostType和多个字段。目标是提取消息名称、枚举名称/键/值以及字段名称/类型。

可视化AST与查询编写

作者利用Neovim的:InspectTree命令可视化抽象语法树(AST),并通过:EditQuery编辑器构建S表达式查询。核心查询示例如下:

(message_name (identifier)) @message_name
(enum_name (identifier)) @enum_name
(enum_field
    (identifier) @enum_key
    (int_lit (_) @enum_value)
)
(field (
    (type (message_or_enum_type)) @field_type
    )
    (identifier) @field_name
)

此查询提取消息名、枚举名/键/值以及字段名/类型,并按顺序返回捕获结果。

Go代码实现

数据结构与解析函数

定义Message结构存储解析结果:

type Message struct {
    Name   string
    Fields map[string]string
    Enums  map[string]map[string]int
}

ParseMessage函数读取文件并使用Tree-sitter解析:

  1. 创建解析器并设置语言为protobuf。
  2. 解析文件内容生成树。
  3. 调用GetMessageFields提取字段和枚举信息。

查询执行与结果处理

GetMessageFields函数执行预定义查询,遍历匹配结果,根据捕获名称构建字段映射(fields)和枚举映射(enumFields)。处理过程中需注意Tree-sitter将零值视为八进制的特殊情况。

辅助函数

queryTree函数封装查询初始化和执行,返回查询对象、游标和错误。

最终输出

解析结果以JSON格式呈现,包含消息名、字段类型映射和枚举定义,便于后续代码生成或数据映射。

应用与总结

此方法已在作者工作中得到应用,用于生成绑定和逻辑。Tree-sitter和Neovim工具链为处理类似问题提供了高效、可扩展的方案。