返回首页
最新
你好。我开发了一个名为BentoPDF的开源工具。它是一个可以在浏览器中运行的开源PDF工具包。通过最新的更新,你可以直接在浏览器中编辑现有的PDF文本、图像和对象。
<p>官方网站:<a href="https://www.bentopdf.com" rel="nofollow">https://www.bentopdf.com</a>
代码库:<a href="https://github.com/alam00000/bentopdf" rel="nofollow">https://github.com/alam00000/bentopdf</a>
<p>除了最新的更新,我还想和你分享Hyper Compress。它是一个高保真、内容保留的压缩引擎,能够保持PDF的合规性,并超越所有其他开源PDF压缩工具。
<p>它可以在各种环境中运行:命令行界面、Node SDK、C API、自托管服务,以及通过WebAssembly在浏览器中运行。
<p>官方网站:<a href="https://hyper.bentopdf.com" rel="nofollow">https://hyper.bentopdf.com</a>
代码库和基准测试:<a href="https://github.com/alam00000/bentopdf-hyper-compress" rel="nofollow">https://github.com/alam00000/bentopdf-hyper-compress</a>
<p>Kura是一个PDF标准、转换和预检引擎。
<p>它支持:
<p>- 所有11个PDF/A合规级别:PDF/A-1a、PDF/A-1b、PDF/A-2a、PDF/A-2b、PDF/A-2u、PDF/A-3a、PDF/A-3b、PDF/A-3u、PDF/A-4、PDF/A-4e和PDF/A-4f
<p>- 可访问性:PDF/UA-1和PDF/UA-2
<p>- 印刷制作:PDF/X-1a、PDF/X-3、PDF/X-4、PDF/X-4p、PDF/X-5g、PDF/X-5n和PDF/X-5pg
<p>- 工程和可变数据打印:PDF/E-1和PDF/VT
<p>- 电子发票:Factur-X、ZUGFeRD、XRechnung和Order-X
<p>- 396个捆绑的印刷预检配置文件
<p>它已经通过多个标准套件进行了测试,包括veraPDF语料库、Isartor、BFO、根特输出套件5.0、PDF/UA参考套件和加州理工学院的PDF/VT套件。
<p>在30,677次PDF转换中,它没有发生任何崩溃和超时,平均转换时间为0.05秒。
<p>与Hyper一样,它以CLI、C库、npm包、Docker镜像和WebAssembly构建的形式发布。
<p>官方网站:<a href="https://kura.bentopdf.com/" rel="nofollow">https://kura.bentopdf.com/</a>
代码库和基准测试:<a href="https://github.com/alam00000/bentopdf-kura" rel="nofollow">https://github.com/alam00000/bentopdf-kura</a>
<p>Kura和Hyper Compress都运行在WASM构建中,因此你的PDF不会被上传,所有操作都在你的浏览器中进行。
<p>如果可能的话,我希望你们能试用一下,并给我反馈你们的使用体验。
<p>谢谢。
嗨,HN,我刚刚完成了Snaketron的重写,这是一款竞争性的多人贪吃蛇游戏。(没错,是用Rust写的)<p>关于这个游戏的历史,有个有趣的小故事:<p>早在2012年,我(糟糕地)实现了Snaketron的第一个版本。问题在于,我将游戏状态保存在客户端,虽然我意识到这不安全,但我不知道该如何解决这个问题,而不让延迟增加到无法游戏的程度。当时我还在上学,从未参与过游戏开发,甚至没听说过“网络代码”这个术语。发布我的第一个个人项目的兴奋让我忽视了这个安全隐患,把它放在了“理论问题”的类别中,然后就发布了。<p>没人会注意到这个问题,如果有人注意到了,他们也不会花时间去破解我的小贪吃蛇项目,对吧?<p>错了!Hacker News的表现完全符合其名字的含义。当我忙于处理流量激增、扩展数据库和修复bug时,几个玩家发现了安全漏洞,开始了他们的贪吃蛇狂潮。不断有报告称出现了无法被击杀的蛇,于是我决定启动一局游戏,看看能否抓住它。<p>我加载了一局1对1的游戏,而我的对手是……太空入侵者。我的蛇是蛇,而他们的“蛇”则是太空入侵者游戏的渲染。毫无疑问,他们也在四处移动,并且是无敌的。我真希望我能录下那个场景,但我震惊于HN不仅玩了我的项目,还以如此史诗般的方式进行了破解。<p>我一直想好好重建它,所以这就是V2!这次的架构和动机都大不相同。<p>首先,游戏状态由服务器主导,延迟通过客户端状态预测进行补偿。游戏引擎用Rust编写,并编译为WASM以供客户端库使用。<p>为了减少运维负担,我还对这个项目施加了严格的弹性要求:它必须具备自动扩展能力。因此,一个节点可以加入集群,正在进行的游戏会自动重新平衡,而不会干扰游戏进行。<p>我还尝试让新的Snaketron更加有趣。核心机制仍然是像经典贪吃蛇一样,收集食物而不碰撞。但现在团队比赛有了目标,使竞争性游戏更加结构化。还有一个从青铜到大宗师的排名子系统(如果有足够的人玩,校准这个将会很有趣),以及一些有趣的功能,比如加速、连击、皮肤和“本局最佳”检测。<p>关于Rust:我最初选择用Rust的一个目标是为了学习这门语言。但结果并没有我想象中那么好。通常我通过构建东西来学习,但人工智能变得如此强大,以至于我停止了手动编写代码,更愿意在夜晚和周末专注于我更感兴趣的事情,而不是纠结于借用检查错误:游戏设计和高可用性相关的内容。<p>关于人工智能:谁知道如果没有人工智能,这个项目是否能完成。可能不会,毕竟我还有日常工作和生活中的其他事情。这是20万行代码(大部分是测试,别担心),但仍然。<p>无论如何,这里是项目链接。感谢您的阅读,希望您喜欢这个游戏,任何反馈都非常感谢!<p>[0] <a href="https://snaketron.io" rel="nofollow">https://snaketron.io</a><p>[1] <a href="https://github.com/lopatin/snaketron" rel="nofollow">https://github.com/lopatin/snaketron</a><p>[2] <a href="https://news.ycombinator.com/item?id=4028597">https://news.ycombinator.com/item?id=4028597</a>(2012年的原始帖子)
HN在IPv4上运行正常(209.216.230.207),但在IPv6上似乎无法访问(2606:7100:1:67::26),我从多个地点进行了检查。没有任何HN状态监测工具能够捕捉到这个问题。“Happy eyeballs”机制使得在双栈IPv4/IPv6网络上一切正常,但在我的情况下,我是通过一个显然偏好IPv6的代理访问的,只有在超时后才会切换到IPv4。(这证明了IPv6逐步推广的有效性,99.9%的时间都能正常工作!)
嘿,HN!
我是Moss'Ab。Murmell([https://murmell.com](https://murmell.com))是一个无限画布,编码代理在云端共同运行,而不是在你的笔记本电脑上。
这就像Google文档,只不过其他编辑者是你、你的团队成员和一组代理,大家都在同一个画布上工作。
简短演示:[https://app.murmell.com/demo](https://app.murmell.com/demo)
这个想法源于YC的黑客马拉松。我们在极大的压力下尝试构建这个项目,最后一刻才部署,但由于多个代理并行工作,所有的分支发生了冲突。一切在最糟糕的时刻崩溃,我们花费了最后的时间在解开这些纠缠,而不是构建。我们没有获胜。
Murmell是我希望那天能拥有的东西:一个让代理和人们能够互相看到工作的平台,运行在不属于任何一台笔记本电脑的机器上。
每个画布在云端都有自己的机器。关闭你的笔记本电脑,代理仍然在继续工作;在任何地方重新打开它,或者让团队成员通过发送链接打开同一个画布,你就进入了同一个会话,而不是它的副本。工作保持在你离开时的状态:相同的分支,相同的开发服务器仍在运行,因此代理可以在任务中间接着做,而不是从头开始。
你可以像使用Google文档一样与团队协作,系统是相同的,读取或编辑链接,他们连接后可以在你的终端上输入,你可以看到他们的鼠标和他们正在输入的终端。你们可以互相互动,这比共享屏幕、复制提示等要实用得多。
最困难的部分是构建云基础设施,尝试使其可扩展,并管理会话以提供最佳体验:当虚拟机关闭时,它会快照所有内容,并在你回来时恢复一切,甚至与你的终端的对话,这些都通过我构建的类似Obsidian的系统存储,也能节省一些令牌。
所以这个黑客马拉松的答案是文件声明。在代理处理某个任务之前,它会声明路径,这是一个带有TTL的独占租约,因此没有任何东西会因为代理在任务中途崩溃而永远被锁定。如果另一个请求同一文件的代理被拒绝,拒绝信息会告诉它谁持有该文件,剩余时间有多久,并让它选择其他工作或联系持有者(代理可以通过看板进行沟通)。
一个观察者会对每一次写入进行分类,因此如果任何内容在其他人的声明内进行写入,它会立即在画布上显示为冲突,而不是在一个小时后才发现的合并冲突。当一个代理完成工作后,可以将其声明交给下一个代理。
代理也从不持有你的提供者密钥,它们获得一个令牌,容器的回环代理在外部交换为真实密钥,这使得泄露的令牌在该容器外部毫无价值。
Murmell是收费的。我目前将价格设定为50%的折扣,因为它仍然没有达到我想要的状态。不过,它是完全可用的:我每天都在用Murmell开发Murmell(说实话,这为我和我的联合创始人节省了很多时间)。
为了完全透明,实际上它的成本比我们赚的要高,但目标是收集反馈,使Murmell尽可能好。
背景信息:我19岁,是一名大四的计算机工程学生,我已经在这个项目上工作了大约三个月半,昼夜不停。我是在2024年我父亲给我展示Windsurf(今天的Devin)用于Python作业后发现Claude代码的,从那时起我觉得我再也没离开过我的笔记本电脑,哈哈。
所以请随意评论或提供反馈,甚至订阅以支持这个项目 :)