1作者: alielmorsy19大约 1 个月前原帖
嗨,HN, 我一直在开发一个图形用户界面(GUI)库,遇到了一个熟悉的问题:我需要一个轻量级、可预测且易于集成的布局引擎。我找不到合适的解决方案,于是最终决定自己构建一个。这个项目就变成了Masharif。 Masharif是一个完整的Flexbox布局引擎。它支持边距、内边距、间隙以及完整的flex属性,行为与Web上的Flexbox非常接近。 一些技术说明: - 完整的Flexbox实现 - 支持边距、内边距、间隙和嵌套布局 - 设计上简单易嵌入且易于理解 性能(在10,101个节点上测试): - 初始布局:约0.87毫秒 - 单个属性编辑(宽度):约0.07毫秒 - 100个属性编辑(flex-grow切换):约0.07毫秒 - 结构变化(移除子元素):约0.75毫秒 为什么要再做一个布局引擎? Yoga显然是行业标准,但我想要一些更符合C++习惯的东西,而不是C风格的API。不过,最主要的原因是我想接受这个挑战,通过自己构建一个引擎来真正理解这个问题领域。 我非常欢迎反馈、批评或提问。
1作者: bazlightyear大约 1 个月前原帖
一种贪婪的短语基础分词器,在压缩性能上优于GPT-4和GPT-4o分词器,并且词汇量更小。 <p>基准测试(enwik9,1 GB):</p> <p>分词器 词汇量 总标记数 比率 吞吐量</p> 贪婪短语 65,536 222,805,405 4.49x 47 MB/s Tiktoken o200k_base (GPT-4o) 200,019 270,616,861 3.70x 4.35 MB/s Tiktoken cl100k_base (GPT-4) 100,277 273,662,103 3.65x 7.13 MB/s <p>贪婪短语:比GPT-4好1.23倍,比GPT-4o好1.21倍。词汇量小1.5-3倍,编码吞吐量高6-11倍。</p> <p>工作原理:</p> 1. 短语挖掘 — 将文本拆分为基本单元(单词、标点符号、空格)。挖掘二元组/三元组。顶级短语填充95%的词汇槽位。 2. BPE回退 — 对剩余的字节序列进行BPE训练。填充剩余的5%词汇。 3. 贪婪编码 — 优先匹配最长的Trie结构。对于未知的字节采用回退机制(零OOV)。
1作者: Winsaucerer大约 1 个月前原帖
你好!我非常兴奋地分享我的项目 Spawn,这是一个数据库迁移/构建系统。目前,它通过 psql 支持 PostgreSQL,以创建和应用迁移,以及编写黄金文件测试。它有一些创新,我认为相较于我尝试过的其他选项,这使得它非常有用。 <p>GitHub: <a href="https://github.com/saward/spawn" rel="nofollow">https://github.com/saward/spawn</a></p> <p>文档: <a href="https://docs.spawn.dev/" rel="nofollow">https://docs.spawn.dev/</a></p> <p>特别感谢 minijinja (<a href="https://docs.rs/minijinja/latest/minijinja/" rel="nofollow">https://docs.rs/minijinja/latest/minijinja/</a>),它使得很多精彩功能成为可能!</p> <p>一些功能(目前仅支持通过 psql 的 PostgreSQL):</p> - 将函数/视图/数据存储在单独的文件中 - Git diff 显示新迁移中函数的具体更改 - 轻松编写函数/视图/触发器的测试 - 环境特定变量,因此迁移仅将测试数据应用于开发/本地数据库目标 - 从 JSON 文件生成数据 - 宏用于轻松生成可重复的 SQL 及其他酷炫技巧(例如,视图的拆除和重新创建) 我大约在两年前开始这个项目。最终我能够将其发展到一个我满意的 MVP 状态。我喜欢使用 PostgreSQL 及其所有功能,但目前可用的工具使得利用这些功能变得更加困难。 我创建 Spawn 是为了解决我个人的一些痛点。主要问题是,如何管理视图和函数等的更新?虽然有一些挑战(Spawn 并不能解决所有问题),但主要问题是创建和审查迁移。典型的(没有 Spawn 的)做法是: 1. 将函数复制到新的迁移中并进行编辑。这使得 PR 审查变得困难,因为你看到的只是大量的新更改。 2. 可重复的迁移。如果这些迁移依赖于可重复迁移中的 DDL 或 DML,那么从头构建时会破坏旧迁移。 3. Sqitch 重构。虽然可行,但整体上有点繁琐,尤其是 DAG,并且我在 Sqitch 的变量支持(和 Perl)方面遇到了限制,无法实现我想做的其他事情。 Spawn 是我尝试解决这个问题的方案,同时提供一种简单(单一二进制文件)的方法来编写和运行测试。你可以: - 将视图或函数存储在其自己的单独文件中。 - 使用模板将其包含在你的迁移中(例如,{% include "functions/hello.sql" %})。 - 构建迁移以查看最终的 SQL,或将其应用于数据库。 - 将迁移固定,以永久锁定当前组件。这与 'git commit' 非常相似,允许旧迁移以与首次创建时相同的方式运行,即使你后来更改了 functions/hello.sql。 - 通过在原地编辑 functions/hello.sql 并将其导入到新的迁移中来稍后更新函数。Git diff 显示 hello.sql 中的具体更改。 请查看一下,告诉我你的想法,希望它对你来说和对我一样有用。谢谢! <p>(AI 声明:大约 90% 的非测试代码由我编写,AI 在核心架构建立后被多次使用,并协助生成文档)</p>
4作者: fdneng大约 1 个月前原帖
我自大学毕业以来一直在YC支持的创业公司工作。目前我在一家开发深度分布式系统产品的公司,身边都是非常优秀的工程师,他们在各自的领域表现得异常出色。他们常常对一些我几乎不理解的事情拥有深厚的知识和直觉。 最近,我感到有些不自信——好像我更多地在为产品中那些不那么令人兴奋的部分贡献,而不是“酷炫”或核心的工程挑战。 此外,我还是一名移民,我和妻子正期待着我们的孩子。平衡这一点与全远程工作的生活确实很困难,有时我觉得自己失去了一些能力或敏锐度。我正在采取措施来应对这一问题——我很快会和心理医生谈谈——但我真心想知道:在一个高效的工程团队中,如何克服这些情绪呢?