每日HackerNews RSS

《Let Over Lambda》的这一章由 Doug Hoyte 撰写,探讨了通过在 Common Lisp 中实现一种类似 Forth 的栈式语言来进行元编程的方法。 作者认为,Lisp 和 Forth 都是语言设计中的“高局部极大值”,与其说是死板的标准,不如说是灵活的“构建材料”。通过利用 Lisp 的宏系统,作者实现了“cons 线程化代码”,将 Forth 的抽象寄存器和字典映射到了 Lisp 的结构中。该实现展示了**语法二元性**的力量——即编程工作量与代码被修改和重用的难易程度成反比。 本章涵盖内容: * **Forth 元编程:** 实现原语(primitives)和即时性(immediacy),从而允许在编译时执行。 * **控制结构:** 通过栈操作从零开始创建 `if`、`then`、`else` 和循环结构。 * **Flubification:** 一种将生成的类 Forth 线程“编译”回原生 Lisp 代码的过程,有效地将一个高度透明的非 Lisp 环境转化为不透明的 Lisp 函数。 最终,本章证明了通过基于宏的抽象,Lisp 可以吸收其他范式,模糊不同语言架构之间的界限,并证实了“任何东西都可以在 Lisp 中编程”。

Hacker News 最新 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Lisp 移向 Forth,Forth 移向 Lisp (letoverlambda.com) 9 分,由 fall 发布于 1 小时前 | 隐藏 | 过往 | 收藏 | 讨论 帮助 准则 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:

SQLite 已从一种仅限本地使用的工具演变为功能强大的生产级数据库,能够胜任高性能 Web 服务器应用。通过消除网络往返延迟,若针对高并发进行调优,SQLite 可实现亚毫秒级的查询执行速度。 为达到生产就绪状态的关键策略包括: * **WAL 模式**:启用预写式日志(Write-Ahead Logging)可实现读写并发,从而避免默认回滚日志中固有的阻塞问题。 * **并发管理**:使用 `BEGIN IMMEDIATE` 事务并设置 `busy_timeout`,可以防止死锁并妥善处理单写模式。 * **性能调优**:优化缓存大小并启用内存映射 I/O(mmap),将 I/O 瓶颈卸载至内核,从而显著提高读取速度。 * **持久性**:在瞬态云环境中,使用基于 VFS 的工具(如 Litestream 或 LiteFS)来处理复制并持久化到对象存储。 * **配置**:采用标准化的 PRAGMA “蓝图”(包括 `synchronous = NORMAL` 和 `journal_size_limit`)可确保系统稳定性并防止性能下降。 虽然 SQLite 不能取代大规模、全球分布式的 PostgreSQL 部署,但对于符合本地存储限制且以读取为主的应用,它是一种高效、低延迟的替代方案,能为现代 Web 服务提供精简的架构。

Hacker News:最新 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 | 登录 在生产环境中使用 SQLite:优化 WAL 模式、并发与 VFS 层 (micrologics.org) 17 分,由 ankitg12 于 1 小时前发布 | 隐藏 | 过往 | 收藏 | 讨论 | 帮助 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请加入 YC | 联系 搜索:

为了规范本地媒体库,作者开发了一个 Python 脚本,将 SRT 字幕文件转换为 WebVTT 格式。在此过程中,作者发现了一个意料之外的错误:许多源文件包含 UTF-8 字节顺序标记(BOM),即一种用于指示文件编码的隐藏字符(U+FEFF),这导致转换过程中出现了格式错误。 起初,作者试图手动处理 BOM,但随后发现了一个更优雅的解决方案:使用 Python 的 `encoding="utf-8-sig"` 参数,它可以在读取时自动检测并剔除 BOM。 为了修复此前已损坏且包含 BOM 的 WebVTT 文件,作者使用 `ripgrep` 定位到了这些有问题的字节序列(EF BB BF)。在确认无误后,作者编写了一个简单的 Python 脚本,批量清除了整个媒体库中这些不需要的字符。作者指出,通过静态站点管理媒体资源,能够为处理文本编码等底层技术挑战提供宝贵的实践经验。

Hacker News 最新 | 往日 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 修复字节顺序标记(BOM)相关的错误 (alexwlchan.net) 4 分,由 surprisetalk 发布于 1 小时前 | 隐藏 | 往日 | 收藏 | 讨论 | 帮助 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:

历史上,潜艇主要作为水面舰艇使用,依靠消耗空气的柴油发动机进行航行,仅在水下攻击时使用有限的电池动力。这种设计导致水下航速缓慢,且需要频繁浮出水面。 核动力的出现彻底改变了海战模式,使潜艇能够无限期地潜伏在水下。这一技术转变也催生了更符合流体力学的“金枪鱼状”船体设计,从而使潜艇航速更快、噪音更低、效率更高。 1960年,美国海军开展了“沙尘暴行动”(Operation Sandblast)以展示这一新能力。当时最大的潜艇“特里顿号”(USS Triton)成功完成了全程水下环球航行。在85天内航行超过36,000海里,“特里顿号”证明了核动力从根本上改变了潜艇的作战方式,使其从依赖水面的舰船转变为真正的深海霸主。尽管“特里顿号”服役时间短暂,但其历史性航行仍是海军史上的里程碑,标志着现代高性能潜艇战的全面开启。

最近的一则 Hacker News 帖子讨论了人类首次潜航环球六十周年,特别提到了“沙砾行动”(Operation Sandblast)。虽然这一历史里程碑令人印象深刻,但讨论很快转向了核潜艇上艰苦的现实生活。 用户们引用了潜艇兵生活中常见的黑色讽刺幽默,指出这种经历是由枯燥、恐惧以及生活在与复杂机械共存的“管子”里的幽闭恐惧感共同定义的。除了任务本身的技术挑战外,评论者还指出,船员们每天面临的最大难题往往是最琐碎的:在这样一个连基本清洁都成为一项重大作业任务的环境中,如何处理卫生和垃圾。

Louis-Francis Ratté-Boulianne 详细介绍了将开源 Mesa Vulkan 驱动程序 RADV(适用于 AMD GPU)移植到 Windows 的持续努力。RADV 是 Linux 上的标准驱动,而 Windows 用户目前只能使用 AMD 的专有驱动程序。 该项目基于 Faith Ekstrand 的初步研究,通过逆向工程与专有的 WDDM2 内核模式驱动程序进行交互。通过记录不透明的厂商特定数据调用,团队成功使 RADV 能够运行包括《反恐精英 2》在内的 3D 应用程序。这一举措改善了跨平台调试,促进了社区贡献,并建立了一个统一的代码库。 尽管取得了进展,但仍存在重大障碍。由于依赖于逆向工程所得的无文档接口,驱动程序非常脆弱,因为 AMD 会频繁更新其专有结构。要实现生产级的稳定性,需要 AMD 提供官方的文档化接口或稳定的中间层。此外,在高性能呈现层(如 DXGI 交换链)方面,还需要进一步的工作。 在 Valve 的支持下,该项目展示了在 Windows 上使用开源 Vulkan 驱动程序的潜力,旨在鼓励行业合作,为该平台未来的图形技术建立一个稳定且可维护的基础。

最近的一场 Hacker News 讨论探讨了将开源 GPU 驱动程序移植到旧版 Windows 操作系统(如 Windows 95/98)的可行性。讨论核心围绕着 Collabora 关于将 RADV Vulkan 驱动程序移植到 Win32 的文章展开。 虽然开发专用的内核模式驱动程序(KMD)常被视为一大障碍,但参与者认为,现代大语言模型(LLM)有望辅助完成此类项目所需的繁琐“粘合代码”编写工作。讨论指出,利用现有的 AMD、NVIDIA 和 Intel 开源驱动程序,可以为早期从未获得原生支持的 Windows 环境提供完整的 2D 和 3D 加速。爱好者们认为,在人工智能辅助编程的帮助下,即使是在 Windows 95 上运行 CUDA 等复杂功能,从理论上讲也是可以实现的。

数学理论规定,对于固定的 $x$,较大的底数 $a$ 应该得到较小的对数结果。然而,PHP 和 Lua 有时会违背这一原则。 作者指出,在某些极端情况下,即使 $a > b$,`log($x, $a)` 和 `log($x, $b)` 的计算结果也会与数学预期相矛盾。这种行为并非源于典型的浮点数误差,而是由这些语言实现 `log(x, base)` 函数的方式所致。为了计算任意底数的对数,语言通常使用换底公式:$\ln(x) / \ln(\text{base})$。但在底数为 10 或 2 时,PHP 和 Lua 会通过调用 `log10` 或 `log2` 等专门的高精度库函数来“投机取巧”。 这造成了一种隐蔽的不一致性:该语言混合使用了两种不同的计算方法——一种基于通用的自然对数公式,另一种基于经过专门优化的、更精确的函数。由于这些方法是独立实现的,它们可能会产生细微的舍入误差差异,从而导致结果出现非单调性。作者认为,尽管这是一种常见的实现疏忽,但它凸显了以牺牲一致性为代价来“优化”数学函数的危险性。

这篇 Hacker News 讨论探讨了为何 `log()` 等数学函数在不同编程语言中表现出非单调性及精度差异。 该讨论的主要观点包括: * **精度差异**:不同语言在进行计算(如 `2^3`)时会产生略微不同的结果。这源于底层数学库实现的差异:一些语言(如 Python 和 PHP)依赖于系统的 `libm` 实现,而另一些语言(如 Go 和 Node.js)则使用自定义的确定性实现,以确保在不同设备间保持一致。 * **制表者的困境(The Table-Maker’s Dilemma)**:参与者解释了对超越函数(如 `log` 或 `sin`)进行正确舍入的难度。要实现完美的精度在计算上代价高昂,因为从数学上讲,可能需要计算任意位数的数字才能确定最终的舍入值。 * **实现细微差别**:讨论澄清了所报告的误差(通常在 1 ULP,即最后一位的单位误差范围内)均符合 IEEE 754 浮点数规范,且通常被认为是可忽略不计的。 * **澄清事项**:用户纠正了术语使用,指出该问题具体在于“相对于底数的非单调性”,而非浮点数计算本身的缺陷,同时还破除了关于旧系统(如 PS1)为何会出现视觉渲染伪影的传言。

演示场景(Demo scene)是一种以技术创造力和“动手做”(DIY)传统为定义的亚文化,它孕育出了一系列独特的软件工具。在实验精神、资源利用能力以及偶尔的“作弊”(例如利用预先计算的查找表来绕过硬件限制)的驱动下,这些工具往往具有独特的、非直觉的且视觉上怪诞的用户界面。 这些工具通常分为以下几类: * **汇编器与提取器:** 这些工具通常基于文本或命令行,允许程序员管理内存、检查 CPU 寄存器,并从现有的游戏中“提取”精灵图或音乐等资源。 * **音乐追踪器(Trackers):** 这类工具起源于 *SoundMonitor* 和 *Ultimate Soundtracker*,采用类似于编程的方法进行创作,并经由 *ProTracker* 和 *Fasttracker II* 等迭代版本不断演进。 * **磁盘复制与实用工具:** 对于该文化的传播网络至关重要。例如 *X-Copy* 等工具用于管理自定义磁盘格式,而其他工具则处理数据压缩(“压缩器”)、ANSI 艺术和字体编辑。 无论是混乱的菜单系统、怪异的审美选择,还是复杂的手动输入方式,这些界面都反映了一个 DIY 时代。在那个时代,技术天才们往往将心血封装在功能强大(尽管并不常规)的软件中,而这些软件正是由数字地下世界的人们为彼此设计的。

这篇 Hacker News 的讨论回顾了一篇关于“演示场景(Demoscene)用户界面”的博文,探讨了 80 和 90 年代演示制作软件那种独特且往往古怪的审美。 参与者们分享了关于 X-Copy 和追踪器(trackers)等标志性工具的怀旧轶事,并指出欧洲的语言根源解释了为何当时常使用“sinus”(正弦)这一术语。大家深情地回忆起这些 UI“巴洛克式”且独树一帜的风格,它们比起现代设计规范,更看重个性和“酷炫感”。 讨论强调了当时的限制条件——比如低分辨率的 14 英寸显示器——迫使开发者将高密度、高功能的信息压缩在单一屏幕内。虽然这些界面通常显得杂乱,但它们培育出了一种独特的实验文化。当年的场景程序员们回忆起那个时代的技术挑战,例如在 68k 汇编语言中进行手动优化和预计算查找表;他们将那个界面设计的“狂野西部”时代与当今标准化、同质化的网页体验进行了对比。总的来说,社区并不只是将这些老派界面视为生产力遗迹,而是将其看作软件历史上一个充满活力且极具创造力的时代。

社区开发者已大幅提升了越狱 Kindle 及其他电子书阅读器的 Tailscale 使用体验。此前的版本仅限于基础连接,而新更新为高级用户提供了更强大的功能。 主要改进包括: * **Tailscale SSH:** 默认开启 SSH 访问,无需繁琐的 USB 网络配置。 * **代理模式 (Proxy Mode):** 允许 KOReader 等应用通过 SOCKS5 或 HTTP CONNECT 与你的 tailnet 中的其他设备(如 Calibre 或 Wallabag 服务器)通信。 * **完整 TUN 模式:** 在兼容硬件上提供设备级的网络支持。 对于专注于阅读的用户,新增的专用 KOReader 插件可自动配置这些代理连接,从而更轻松地将内容从内部服务器同步到设备。虽然安装这些非官方工具需要越狱设备并具备一定的技术耐心,但它们将普通的 Kindle 转变为功能更强的联网瘦客户端。无论是用于同步书库还是构建自定义电子纸设置,这些社区驱动的更新都为折腾电子阅读器带来了新的可能。

Hacker News 最新 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 更多 为越狱版 Kindle 准备的 Tailscale 新技巧 (tailscale.com) 34 点,发布者:Error6571,41 分钟前 | 隐藏 | 过往 | 收藏 | 讨论 | 帮助 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 加入 YC | 联系 搜索:

研究人员推出了一种名为 **Transformer Transformer** 的新型模型,能够针对特定任务设计定制机器人。通过输入操作演示,该系统即可生成一个完整的机器人——包括所有结构连杆、关节和物理属性——以适配所需的运动。 该模型利用在“RoboTokens”上训练的扩散 Transformer,这是一种用于表示各种机器人形态和动力学的统一方法。该架构具有高度通用性,支持人形、四足和双臂系统等多种形态,并能同时执行形态生成和跨形态控制。 与传统过拟合特定奖励函数的方法不同,Transformer Transformer 充当动力学模型。通过一种称为“动力学自我引导”(Dynamics Self-Guidance)的技术,它能进行与奖励无关的预测,并在推理时将其转换为特定任务的数值。这使得模型能够以零样本效率针对未见的奖励和轨迹优化设计。在 ALOHA2 双臂平台上的实际测试表明,与标准设计相比,该方法效果显著,跟踪误差降低了 73%,并降低了对关节速度的要求。最终,该方法在性能和运行时间上均优于演化基准模型。

Hacker News 最新 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Transformer Transformer:用于运动条件机器人协同设计的统一模型 (transformer-transformer.github.io) 8 分,由 ilreb 发布于 48 分钟前 | 隐藏 | 过往 | 收藏 | 讨论 | 帮助 准则 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:

更多

联系我们 contact @ memedata.com