Pi-hole v6 重磅发布:性能提升与全新界面
Pi-hole v6 正式发布!此版本对核心进行了全面升级,集成了嵌入式Web服务器和REST API,淘汰了lighttpd和PHP,显著提升性能并减小安装包体积。新版还支持订阅允许列表、整合配置文件、重新设计的用户界面(包含基础和专家模式)、原生HTTPS支持以及基于Alpine的Docker镜像,大幅减小镜像大小。升级过程会自动迁移配置,但建议备份。
Pi-hole v6 正式发布!此版本对核心进行了全面升级,集成了嵌入式Web服务器和REST API,淘汰了lighttpd和PHP,显著提升性能并减小安装包体积。新版还支持订阅允许列表、整合配置文件、重新设计的用户界面(包含基础和专家模式)、原生HTTPS支持以及基于Alpine的Docker镜像,大幅减小镜像大小。升级过程会自动迁移配置,但建议备份。
计算机科学家们长期以来受困于内存限制,难以解决某些复杂问题。一个突破性的进展来自“催化计算”:通过巧妙地利用大量但不可直接访问的额外内存(类似于一个巨大的、无法直接操作的硬盘),并允许对其进行可逆的微调,从而提升计算能力,如同化学催化剂一样。这项技术最初由Buhrman和Cleve提出,随后得到扩展和应用。James Cook,一位软件工程师,更是将这一技术应用于此前难以解决的树评估问题,展现了其巨大的潜力。这项研究颠覆了我们对计算资源利用的传统认知,为解决更复杂的计算问题开辟了新道路。
作者升级Web应用到Svelte 5后,遇到了几个意想不到的问题。Svelte 5为了提升性能引入了“深度响应式”,使用了代理和隐式组件生命周期状态。虽然看起来更简洁,但实际上引入了更多抽象,导致开发者需要记住更多复杂的规则才能正确使用,例如代理不是对象,组件也不是函数。作者举例说明了在使用代理和回调函数时遇到的问题,例如`DataCloneError`和组件卸载后回调函数中prop值变为undefined的情况。作者认为Svelte 5牺牲了开发者的自主性,增加了认知负担,最终放弃了在新的项目中使用Svelte。
历经数年开发的FFmpegKit视频处理库正式退休。作者由于时间限制和FFmpeg许可证的法律复杂性,难以继续维护该项目。最新的6.0版本将在2025年4月1日后移除下载,建议用户自行编译FFmpegKit或寻找替代方案。此举突显了开源项目维护的挑战,以及处理复杂许可证的必要性。
Scripton 的 UI 工具包让为脚本添加交互功能变得轻而易举。通过简单的代码,开发者可以轻松创建滑块、按钮等交互元素,直接在脚本中显示和处理图像数据。例如,这段代码展示了如何使用滑块调整深度阈值,并实时显示处理后的图像。这对于图像处理、数据可视化等应用场景非常实用,极大提升了脚本的易用性和交互性。
Cot 是一个为 Rust 开发者设计的全新 Web 框架,它旨在简化 Web 应用开发流程。Cot 借鉴了 Django 的理念,提供开箱即用的功能,例如会话管理、身份验证、模板引擎和管理面板,并集成了 ORM 和自动迁移系统。虽然目前仍处于早期阶段,但 Cot 已经具备基本可用性,并计划通过频繁发布迭代改进,完善 ORM、API 和管理面板等功能。作者鼓励社区参与贡献,共同塑造 Cot 的未来。
作者Matthew Plant介绍了他的Scheme实现项目scheme-rs,该项目旨在利用异步Rust的优势,解决其编译速度慢和调试困难的问题。scheme-rs采用R6RS标准,并提供与异步Rust的无缝互操作性,方便开发者进行代码粘合和调试。作者还展望了未来基于scheme-rs的Gouki语言,该语言将结合Scheme的宏系统和Rust的类型系统,提供更强大的编程体验。目前scheme-rs虽然仍在开发中,但核心功能已实现,作者计划未来完善其内置函数和优化编译性能。
Jiga 是一家完全远程优先的物理产品开发公司,致力于帮助工程师更快地构建物理产品。他们崇尚简单、快速、以产品为导向的工程文化,每周仅举行两次简短会议。他们寻找拥有3年以上全栈开发经验、精通React、NodeJS和MongoDB的工程师,并具备AWS和EC2/ECS服务的经验。公司提供灵活的远程工作环境、股票期权和年度团队出游等福利。如果你热爱构建UI组件和API端点,并且拥有快速高效的工作态度,那么Jiga正适合你。
Terreateam团队分享了他们使用Fly.io和SQLite的经验。虽然Fly.io大力推广服务器端SQLite,但作者认为,除非有充分理由,否则不应在生产环境中使用SQLite作为主要数据存储。因为这会增加备份、高可用性配置(如LiteFS和Consul)等复杂性,并且迁移到其他数据库(如PostgreSQL)也比较困难。文章以Atlantis项目为例,说明了使用数据库库(如BoltDB、SQLite)带来的高可用性挑战,并最终建议,除非有非常明确的需求,否则在生产环境中应优先选择传统的数据库架构,以获得更好的可扩展性和可靠性。
TimeRetain是一款无需注册即可免费使用的隐私时间追踪工具,目前处于测试阶段。它简单易用,支持标记、过滤和导出数据(CSV或PDF),并提供实用的统计分析。无论你是员工、企业主还是学生,都可以用它来追踪工作时间、客户通话或学习时间,甚至可以对时间进行微调。所有数据都存储在你的浏览器中,保护你的隐私。
Go 1.24 版本正式发布,带来了诸多改进。核心变化包括:全面支持泛型类型别名,简化了工具依赖管理(通过 go.mod 中的 tool 指令),并提升了构建缓存机制和性能。标准库方面,新增了 os.Root 用于限制文件系统访问,以及新的测试和加密库,增强了安全性与效率。此外,该版本还改进了运行时、编译器和链接器,并对多个平台和架构进行了优化。
作者花了近一个月的时间完成了Nand2Tetris课程的第一部分,从最基本的Nand门开始,一步步构建了一个16位冯·诺依曼计算机,最终成功运行了Pong游戏。这个过程让他深刻理解了抽象的概念,并从硬件层面提升了软件开发能力。作者在学习过程中也分享了他克服困难的经历,例如在理解多路选择器时遇到的挑战,以及最终顿悟的喜悦。
作者在安装新房洗衣机的过程中,遭遇了各种意想不到的难题,从钻孔到更换水管,耗时4小时,远超预期的10分钟。这让他联想到软件开发中估算的困境。看似简单的任务,总会出现一些未预料到的问题,例如过时的工具、不兼容的系统或隐藏的需求,导致项目严重延期。作者以洗衣机安装为例,生动地说明了在软件开发中,即使是看似熟悉的工作,也可能因为一些细小的差异而大幅增加工作量,强调了充分了解需求和预估潜在风险的重要性。
本文探讨了小型软件公司如何在巨头环伺下取得成功。作者列举了SQLite、Hwaci、Pinboard、Tarsnap、Sublime Text和Zig等公司作为案例,这些公司规模小,但凭借高质量的产品、独特的商业模式和对用户需求的关注,获得了长期的成功。他们避免了“快速增长或死亡”的硅谷模式,选择专注于可持续发展,并以其人性化的沟通方式赢得了用户喜爱。作者认为,这种“小而美”的模式并非缺乏雄心,而是选择了另一种更可持续、更令人满足的成功定义。
RustOwl是一款强大的工具,它可以可视化Rust代码中变量的所有权和生命周期。通过颜色编码的下划线,RustOwl直观地展示变量的生命周期、不可变借用、可变借用以及值移动等信息,方便开发者进行调试和优化。它支持VSCode、Neovim和Emacs等编辑器,并提供多种安装方式,包括简单的命令行安装和从源代码手动安装。虽然在某些情况下可能存在少量显示问题,但RustOwl已经证明了其在提高Rust开发效率方面的巨大潜力。
本文介绍了如何在Linux系统上创建自签署TLS证书和证书颁发机构(CA),并将其安装到系统中,从而解决浏览器不信任自签署证书的问题。文章详细讲解了生成私钥、证书请求文件、签署证书以及在Ubuntu和Arch Linux系统上安装CA证书的步骤,并说明了如何在Firefox和Chromium浏览器中导入CA证书。通过创建自己的CA并将其添加到受信任的CA列表中,可以有效地避免中间人攻击,确保私有网络的安全。
由于持续遭受网络暴力,包括人身攻击、代码盗用和3D打印设计被盗卖等,mt32-pi 项目开发者宣布停止更新该项目。mt32-pi 是一个基于 Raspberry Pi 的裸机 MIDI 合成器,旨在模拟著名的 Roland MT-32 音频模块。开发者表示,网络暴力严重影响了其身心健康,已无法继续维护该项目。
NES86项目令人惊叹地将IBM PC模拟器移植到了NES游戏机上!它通过模拟Intel 8086处理器和相关硬件,成功运行了嵌入式Linux内核子集(ELKS),甚至包括shell和实用工具。这意味着你可以在老旧的NES上体验到部分x86软件,虽然仅限于简单的串口终端。该项目开源,并提供了详细的构建步骤,包括ELKS镜像的编译和NES86 ROM的生成。准备好迎接挑战,在复古硬件上运行现代操作系统吧!
开发一款Apple Watch应用需要处理与iOS App间的通信。作者利用Racket宏定义了一种领域特定语言(DSL),自动生成Swift代码来处理WatchConnectivity框架的复杂细节,包括消息编码、解码和消息处理器的实现。这避免了大量重复代码编写,并提高了代码的可维护性和可靠性。通过定义消息类型和处理器,DSL自动生成Swift枚举、结构体、发送消息的函数和消息处理协议,极大简化了开发流程。
本文讲述了作者破解一个iOS Widget应用的反调试保护措施的经历。该应用使用了多种保护手段,包括阻止调试器附加、在注入代码时提前退出以及在越狱设备上运行时使手机崩溃。作者逐步分析了这些保护措施,特别是利用`ptrace`函数的`PT_DENY_ATTACH`请求来阻止调试器附加。作者详细解释了绕过`ptrace`以及阻止手机崩溃的方法,最终成功附加调试器并注入代码。
Reddit部分版主抱怨AI生成内容泛滥,导致大量垃圾信息和攻击性言论涌现,严重浪费版主时间用于审核和处理。虽然有些版主认为AI也能带来一些新颖内容,但普遍认为AI生成内容的质量参差不齐,且难以区分,增加了审核难度。许多版主更关注的是审核AI生成内容所耗费的时间成本,这些时间本可以用于其他社区建设工作。一些版主戏称与AI拥护者“斗争”是日常工作的一部分。
作者在使用AMD RX 570显卡的Linux系统中,遇到睡眠唤醒后黑屏或死机的棘手问题。经过一年多的艰苦调试,他最终找到了问题根源:amdgpu驱动程序在高内存占用情况下,VRAM备份到系统内存时可能出现内存不足错误。作者尝试了多种方法,包括修改systemd配置、使用debug shell、甚至使用Ghidra反编译内核模块查找bug,最终通过引入电源管理通知器机制,在系统进入睡眠前预先备份VRAM,成功解决了该问题。此修复预计将包含在稳定的Linux内核6.14版本中。
想象一下,在浏览器中运行一个完整的Rails博客,包括前端和后端,无需服务器或云!WebAssembly让服务器端框架在本地运行成为可能,模糊了传统Web开发的界限。本文介绍了如何将Rails应用程序打包成WebAssembly模块并在浏览器中运行,重现了Rails著名的“15分钟构建博客”的魔力,但这次运行环境是你的浏览器。这不仅是一个技术演示,也展示了WebAssembly带来的无限可能,例如离线应用和本地应用开发。
开源项目的许可证扫描工作量巨大且重复,因为公司很少共享资源。文章提出,开源项目可以出售SBOM片段(CycloneDX中的组件或SPDX中的包,包含正确的许可证信息)作为解决方案。通过赞助GitHub项目,企业可以获得始终最新的SBOM信息,从而避免重复劳动,并确保许可证信息的准确性。
hk是一个由Rust编写的Git预提交钩子管理器,旨在提升性能和易用性。它解决了现有工具如`mise`和`pre-commit`的一些痛点,例如仅在特定文件更改时运行任务以及繁琐的插件管理。hk通过使用pkl格式配置,并采用先进的并行执行逻辑,显著提高了运行速度。与`lefthook`相比,hk具有更快的速度和更丰富的内置功能,并且无需像`pre-commit`那样依赖插件。目前hk正处于开发阶段,未来计划达到与`lefthook`和`pre-commit`相当的易用性,并持续改进性能和功能。
作者讲述了参与一个使用过时Ant构建工具和缺乏现代依赖注入的遗留项目的经历。这个项目迫使他们重新审视现代软件开发实践,例如干净代码、自动化测试、持续集成和敏捷开发,并理解这些最佳实践背后的原因。虽然过程充满挑战,但作者最终成功交付了项目,并对现代开发方法有了更深刻的认识,也意识到团队合作和全生命周期负责的重要性。
一位资深博主历经15年Dreamhost共享主机后,因其FastCGI支持不稳定而迁移至Mythic Beasts。文章探讨了共享Unix主机与云服务的优劣。作者认为,尽管云服务看似现代化,但缺乏开放协议和长期稳定性;而共享主机,虽然选择有限,但基于Unix系统的可编程性和可迁移性,更适合轻量级脚本和长期维护。作者对比了多个共享主机服务商,并最终推荐Mythic Beasts和OpalStack,因其对Unix系统的良好支持。
本文深入探讨了 C++ 中 thread_local 变量的性能问题。作者通过分析汇编代码,揭示了 thread_local 变量在不同场景下的性能差异,特别是带有构造函数的 thread_local 变量以及在共享库中的使用,其性能开销远超预期。作者发现,即使简单的访问操作,也可能因构造函数的调用、共享库的动态加载等因素,导致性能急剧下降。文章最后总结了性能优化建议,并探讨了未来改进方向,希望能帮助开发者规避 thread_local 的性能陷阱。
2025年的State Of Open大会揭示了开源维护者面临的困境:志愿者们投入大量时间却得不到足够支持,许多人已离开或考虑离开。Asahi Linux项目负责人Hector Martin因倦怠和用户压力而辞职,这只是冰山一角。维护者们面临着来自“何其容易”用户的压力、无休止的需求和偶尔的不愉快信息。即使得到少量公司资助,也远远不足以满足需求。调查显示,许多维护者考虑辞职,许多项目可能无法维护。问题并非仅仅是金钱,也需要更多贡献者分担非代码任务,如社区管理和资金筹集。但改变需要催化剂,也许只有重大项目崩溃才能促使人们认识到为开源维护者付费的重要性。
作者质疑ChatGPT的自动补全功能是否属于糟糕的UX/UI设计。作者认为,在搜索栏中自动补全功能很有用,因为搜索的响应空间小,成功的可能性大。但在聊天中,自动补全功能却常常适得其反,因为它无法准确预测用户的输入,反而会打断用户的思路,导致挫败感。作者将ChatGPT的自动补全比作一个打断别人说话的同事,认为这种设计难以理解,并怀疑其用户体验的合理性。