2作者: derstruct4 个月前
我创建了一个 Go 语言扩展,可以将 HTML 模板转换为类型化的 Go 表达式,并添加了 `elem` 原语。它通过自己的语言服务器工作,该服务器代理 gopls 并添加了额外的功能,以及一个运行时包。<p>从核心思想上讲,它与 `templ` 类似——它编译成 Go,有自己的扩展名(`.gox`)、语言服务器、CLI 工具和 IDE 插件,可以写入 `io.Writer`。但它们之间有更多的不同之处。<p>1. HTML 作为一等 Go 表达式被支持。例如,这是有效的语法:`hello := &lt;h1&gt;Hello World!&lt;&#x2F;h1&gt;`。此外,`elem` 关键字的作用类似于 `templ`,但支持匿名函数:<p>``` var f = elem() { &lt;h1&gt;Header&lt;&#x2F;h1&gt; } ```<p>2. 我致力于提供卓越的 LSP 体验,我的语言服务器架构有所不同,这使我能够启用 LSP 编辑(重命名有效!)并支持无缝的 LSP 导航(转到定义、调用等——不会指向生成的代码文件)。它还自动管理生成的文件(边键入边编译,边保存边写入,无需手动运行 `generate` 命令)<p>3. 改进了解析稳定性。我基于扩展的 Go tree-sitter 语法构建了解析器,并使语法更具特色。实际上,这意味着在编辑过程中有更好的开发者体验,并且产生的工件更少(它不会被纯文本中的关键字触发)<p>4. 不同的原语集。我有一个具体的类型 `gox.Elem` 和一个带有 `Main() gox.Elem` 函数的 `gox.Comp` 接口。这允许在基本的 `gox.Elem` 上扩展功能集,同时使您能够编写组件,而无需降低到 `Render(ctx, io.Writer)` 接口。<p>5. 可扩展的渲染管道。在 `GoX` 中,HTML 被转换为类型化作业流,可以以任何方式进行预处理。例如,您可以添加自己的元素 `&lt;eb&gt;`,并在渲染时将其转换为 `&lt;span class=&quot;font-extrabold&quot;&gt;`。<p>此外,它具有各种可扩展性点,例如您可以将属性读取和修改为常规的 go 值。甚至有一个特殊的接口 `gox.Modify`,可以在渲染时读取和设置/取消设置任何属性:`&lt;svg (styles.NormSVG) ...&gt;` 可以设置 `fill`、`stoke` 并取消设置现有的 width/height。<p>我基本上试图解决我使用 templ 时遇到的所有问题,并将总体设计转向更好的可扩展性,并保持核心功能最少,我认为我成功了。<p>在原始性能方面,templ 每次都会胜过 `GoX`。我添加的额外层仍然是一个额外的层。它以微秒为单位,无法想象它会成为瓶颈,但无论如何。<p>附注:我主要构建它是为了支持我的服务器驱动的 Web 应用程序运行时/框架,但它也可以完美地独立运行,并且与 templ 兼容。
1作者: G_S4 个月前
Hi HN, 我制作了“堆栈”(The Stack),一个由泥板、金属和电子元件构成的雕塑作品。 这件作品反映了数字艺术中知识的层层堆叠:原材料、工艺、电路、代码和算法。雕塑的顶部放置了一个ESP32,每15秒广播一个新的Wi-Fi网络名称。在附近的手机和笔记本电脑上,这些名称会出现在可用网络列表中,并形成一首支离破碎的诗歌。 由于设备扫描网络的方式不同,每个人看到的序列略有差异。 我对泥土(一种用于存储知识的最古老的载体之一)和无线网络(无形的、不稳定的、容易被忽视)之间的对比很感兴趣。这件作品也反映了“堆栈”的概念:制作数字作品所涉及的工具、系统和继承技术的众多层级。
3作者: lemonade3114 个月前
我开发了 Polter: <a href="https://github.com/myDataValue/polter" rel="nofollow">https://github.com/myDataValue/polter</a> 这是一个开源的 React 库,它允许 AI 代理通过使用你的实际 UI 来执行任务,而不是进行 API 调用。 为什么?因为这解决了许多应用程序中用户不理解如何使用你的产品的问题,而目前大多数代理都只是 API 调用。 通过这种方式,用户可以隐式地理解你的 UI,从而减少了支持邮件和用户引导。 目前市场上的大多数解决方案都是为外部网站构建的,使用不稳定的网页抓取器、公共 DOM 等。Polter 存在于你的 React 树中,连接到你的 AI/LLM websocket,并且始终有效。 试用一下,告诉我你的想法。 谢谢
2作者: babawere4 个月前
Keeper 是一个可嵌入的密钥存储库(默认使用 Argon2id、XChaCha20-Poly1305)。它提供四个安全级别、审计链和崩溃安全轮换。对于大多数使用场景来说,Vault 都显得过于复杂。Keeper 适用于你对环境变量感到担忧,并需要加密的本地存储,而且它不会让你失望。它不依赖于隐蔽性来保证安全,因此,目前还处于早期阶段,现在是发现奇怪的边缘情况、竞态条件、内存泄漏、密码学误用以及任何可能导致程序崩溃问题的最佳时机。如果你想进行对抗性测试,README 中有完整的安全模型分解。