## .NET PDF 渲染解决方案的探索 为 C# 项目寻找一款良好且具有宽松许可的 PDF 渲染解决方案是一个持续的挑战。作者的研究表明,核心困难不在于*创建* PDF,而在于准确地布局和设置其内容——这项任务通常通过嵌入浏览器引擎来解决,但这并非理想方案。 理想的解决方案需要 DOM 表示、布局/样式功能、PDF 写入功能以及格式转换。虽然许多库存在于此过程的特定部分,但只有少数提供完整且具有宽松许可的软件包。 **QuestPDF** 脱颖而出,提供了一个现代且维护良好的库,尽管其许可结构具有独特性,允许重新分发 MIT 许可的代码,但存在商业限制。**MigraDoc** 与 **PDFSharp** 结合使用,成为最可行的选择,尽管在高级样式和大型报告的潜在内存问题方面存在局限性。 作者探索了许多其他库(如 iText、Aspose.PDF 和各种 HTML 到 PDF 转换器),但大多数由于许可或功能问题而未能满足要求。最终,缺乏一个真正全面的开源解决方案促使作者对创建“胶水代码”产生了兴趣,以便更好地集成现有的 .NET 库,从而更轻松地进行文档格式转换。
数百吨非法倾倒的垃圾——面积达60米 x 15米 x 10米——在牛津郡切尔韦尔河附近的一片田地被发现,引发了对潜在“生态灾难”的担忧。无人机拍摄的画面显示,这是一项高度有组织的操作,垃圾经过预先粉碎并整齐地堆放,表明可能涉及犯罪团伙。 倾倒规模前所未有,清理费用可能超过当地议会全年预算。人们的担忧集中在环境风险上:毒素渗入水道,分解引发火灾,以及对泰晤士河生态系统的整体破坏。 批评者,包括泰晤士河之友,指责环境署不作为和“无能”,声称自9月以来就已知晓该地点,但未采取任何干预措施。该机构表示正在进行调查,并已获得法院命令关闭该地点。最近的贵族委员会报告强调了有组织犯罪在全国范围内倾倒垃圾中的作用,并指出了环境署内部存在的问题,该机构的首席执行官对此表示异议。
## 驯服 C:构建一个安全且快速的 Grep 克隆
本文详细介绍了作者使用 C23 构建 `cgrep`,一个高性能 `grep` 克隆程序,同时主动避免常见的 C 陷阱,如内存泄漏和段错误。核心思想是通过一个自定义的 600 行头文件 `safe_c.h`,用 C++ 和 Rust 启发的现代安全特性来增强 C 的能力。
`safe_c.h` 引入了类似 RAII 风格的清理机制,使用 `[[cleanup]]` 属性(或兼容的替代方案),智能指针 (`UniquePtr`, `SharedPtr`) 用于自动内存管理,以及安全的字符串处理,使用 `StringView` 和 `Span` 来防止缓冲区溢出。它还包含 Result 类型以实现强大的错误处理,以及互斥锁包装器以防止死锁。
这些添加并没有牺牲性能;作者利用编译器内在函数,如 `LIKELY`/`UNLIKELY` 进行分支预测优化。结果是,一个 2,300 行的 `cgrep` 实现,其速度与传统的 C 一样快,但更安全且更易于维护,需要的手动内存管理调用也少得多。作者将在后续文章中详细介绍 `cgrep` 的设计和性能(声称在某些基准测试中,它优于 `ripgrep`,且内存占用更小)。最终,该项目展示了 C 的灵活性和可扩展性,证明了在合适的工具下,C 既可以强大*又*安全。
## fastmcpp:高性能C++ MCP实现 fastmcpp是Python库`fastmcp`的C++移植版本,处于测试阶段,提供模型上下文协议(MCP)的高性能实现。它支持工具、资源、提示,以及多种传输层,包括STDIO、HTTP/SSE和WebSocket。 该库为构建MCP服务器和客户端提供原生C++体验,依赖项极少(nlohmann/json,可选libcurl、cpp-httplib、easywsclient)。主要特性包括JSON-RPC协议处理、JSON Schema验证,以及用于请求/响应处理的中间件。 fastmcpp跨平台(Windows、Linux、macOS),需要C++17或更高版本以及CMake 3.20+。虽然核心MCP功能与Python参考实现一致,但C++测试套件目前较小。Python的`fastmcp`仍然是行为和API的权威来源。 示例程序展示了服务器和客户端的使用、工具集成以及中间件实现。开发正在积极进行中,欢迎通过GitHub贡献代码。([https://github.com/0xeb/fastmcpp](https://github.com/0xeb/fastmcpp))
## Chrome DevTools CDP 编辑器:摘要
Chrome DevTools 协议 (CDP) 允许开发者远程与 Chrome 浏览器交互,用于调试和自动化。为了简化此过程,DevTools 引入了一个新的 CDP 编辑器,旨在简化 CDP 命令的编写和发送。
此前,手动构建命令因复杂的语法和不断参考文档的需求而繁琐。新的编辑器通过**命令和参数的自动补全**解决了这个问题,减少了错误并节省了时间。它动态显示必需(红色)和可选(蓝色)参数,为字符串、数字、枚举、布尔值、数组和对象提供直观的输入字段。
主要功能包括**实时错误检查**、**带有文档链接的工具提示**以及**编辑和重新发送**以前使用的命令的能力。用户还可以轻松**将命令复制为 JSON 格式**。
该编辑器的目标是使 CDP 更易于访问,提高原型设计速度和整体开发者体验。鼓励用户在 Chrome Canary、Dev 或 Beta 渠道中尝试新功能并提供反馈。
“snarky”一词,意为讽刺或不敬,在过去25年中在美国和英国的受欢迎程度激增,其名词形式“snark”也随之流行。虽然人们常错误地将其与路易斯·卡罗尔的诗作联系起来,但它的起源实际上非常复杂。
通过词典追溯,“snark”最初在19世纪的苏格兰指的是打鼾或抱怨,与令人不快的词语“nark”有关。 “snarky”的首次记录用法出现在20世纪初的英国文学作品中,尤其是在E. Nesbit的作品中,她用它来表示“愤怒”或“无礼”。
这个词逐渐跨越大西洋,1915年出现在美国出版物中。 名词“snark”是一个更近期的发展,出现在20世纪80年代末。 它目前的流行可能源于它的发音——“sarcastic”(讽刺)和“snarl”(咆哮)的混合——以及当代社会中讽刺态度的增加。
## Castrol Honda 超级摩托车:复古游戏调试故事 最近发现一款1998年的PC摩托车竞速游戏《Castrol Honda 超级摩托车世界冠军》,在现代Windows 7上运行却出乎意料地困难。虽然它与较旧的系统如Windows 98和XP兼容,但在较新的操作系统上会崩溃或冻结。根本原因?在于游戏通过DirectInput枚举输入设备时存在缓冲区溢出。 这款游戏使用DirectX 5构建,试图列出所有连接的设备,包括现代主板的LED控制器,超过了其内部数组有限的8个设备容量。这会覆盖关键数据,导致崩溃。 一个巧妙的修复方案被实现为一个2KB的DLL shim,拦截DirectInputCreateA函数。该shim过滤设备枚举,只包含操纵杆/游戏控制器,或者在找到八个设备后停止枚举,从而防止溢出。作者细致地优化了shim以实现最小的尺寸,利用了`/NODEFAULTLIB`和`#[no_std]`等技术,甚至解决了链接器的一些问题,以最大限度地兼容旧版本的Windows。补丁已在GitHub上提供,为这款经典游戏注入了新的生命。
马尔科姆·考利是20世纪一位极具影响力的文学人物,以其发现和支持新人才的能力而闻名。20世纪30年代,他从《新共和国》杂志的编辑开始,推出了约翰·奇弗和阿尔弗雷德·卡津的职业生涯。后来,在维京出版社,他主导了威廉·福克纳的复兴,在巩固其在文学史上的地位并最终促成他获得诺贝尔奖方面发挥了关键作用。他还为杰克·凯鲁亚克的《在路上》的出版而努力,并指导肯·克西,帮助塑造了《飞越疯人院》。
考利的影响源于他对培养一种独特的*美国*文学传统的信念,使其超越了仅仅是英国文学的延伸。他旨在与广大读者建立联系,重视语境和作者的生活,以及文本分析——这与新兴的学术“新批评”形成对比。
尽管承认考利并非完美无缺(包括最初对斯大林主义俄罗斯的幼稚看法),传记作者杰拉尔德·霍华德强调了他持久的重要性。考利理解美国文学不断变化的格局,认识到平装书出版的力量以及批判权威从面向公众的评论家转移到大学学者的趋势。他最终寻求定义和庆祝美国写作的独特声音。
## 双星号通配符 (**) 的意外历史 `**` 通配符用于递归文件匹配,并非原始 Unix 工具的一部分。它作为一个扩展出现,有着出乎意料的复杂历史。Zsh 在 1992 年左右率先引入了此功能,允许 `**` 进入子目录。十年后,KornShell (ksh93) 独立实现了类似的功能,并将其命名为“globstar”。有趣的是,ksh 的作者并不知道 zsh 的早期工作! Bash 在 2009 年采用了“globstar”,其设计深受 ksh93 的影响,将此模式带给庞大的用户群体。尽管缺乏 POSIX 标准化,`**` 已经超出了 shell 的范围,出现在 Ruby(2000 年代初)和 Python(Python 3.5 于 2015 年)等语言中,以及 Ant 等构建工具和 Git 等版本控制系统中。 每个实现都有细微的差别,但 `**` 通常匹配零个或多个目录。今天,它已成为一种被广泛接受的约定,展示了一个 shell 创新如何演变成一种跨语言的文件系统遍历工具。虽然 zsh 发明了它,ksh 命名了它,而 bash 则使其流行起来,但 `**` 证明了计算世界中实用的问题解决能力。