一个终端图形用户界面(TUI),利用 tmux 来简化和优化终端标签的管理,使其更加便捷和友好。
返回首页
最新
他们为什么从去年开始表现得如此(拼命想要自毁)?<p>最新的例子:<p>微软Office更名为“Microsoft 365 Copilot应用”(https://news.ycombinator.com/item?id=46496465)<p>不仅这个更名荒谬,而且页面(office.com)看起来也充满了奇怪的氛围。
我制作了这个工具,以便在手机上使用我的笔记本终端会话,而不需要数据经过服务器。<p>使用命令 tt start -p mypassword → 获取一个 URL(二维码)→ 在浏览器中打开 → 输入密码 → 连接成功。<p>在你的设备和浏览器之间建立直接的 WebRTC 数据通道。<p>信令服务器是一个 Cloudflare Worker,交换约 2KB 的 SDP/ICE 元数据后就不再干预。密码从未传输 - argon2id 在两端本地生成 256 位密钥。所有终端输入输出在到达数据通道之前都经过 NaCl SecretBox 加密。底层使用 DTLS 进行双重加密,但我希望中继在信令期间也看不到任何有用的信息。<p>使用 Go 和 Pion/WebRTC,代码量约 14k 行。浏览器使用 xterm.js 和 WebCrypto 进行 argon2id。默认使用 STUN,TURN 适用于对称 NAT。<p>我的使用案例:在不在办公桌前时,通过手机检查 Claude 代码的运行情况。酒店 WiFi 和不稳定的移动数据。花了一些时间在 TURN 回退、保持连接和断开时的缓冲写入上。作为 PWA,这个工具可以从主屏幕启动,并在应用切换时保持有效。在 3G 网络下表现尚可。<p>权衡:ICE 收集在连接时需要 2-5 秒。浏览器无法发起连接,需在主机上使用 CLI。代码在 24 小时后过期。<p>单一二进制文件,无依赖。支持多会话的守护进程模式。进行了竞争检测测试、断开连接的混沌测试和网络条件模拟。加密和 WebRTC 的代码覆盖率约为 72%。<p><a href="https://github.com/artpar/terminal-tunnel" rel="nofollow">https://github.com/artpar/terminal-tunnel</a><p>附言:默认中继运行在我的 Cloudflare 免费套餐上,因此没有保证。你可以自托管 Worker 或在本地运行 tt relay。
Hi HN,<p>Package repositories don't need to be complicated. They're just static files: metadata indexes and the packages themselves. Yet somehow hosting your own feels like you need dedicated infrastructure and deep knowledge of obscure tooling.<p>repogen is an SSG for package repos. Point it at your .deb/.rpm/.apk files, it generates the static structure, you upload to S3 or any web host. Done. $0.02/month to host packages for your whole team.<p>It supports Debian, RPM, Alpine, Pacman, and Homebrew. Has incremental mode for updating repos without redownloading everything. Handles signing. Very alpha, but it works. Would love to get feedback!
构建Doo是因为我厌倦了为每个API编写200行身份验证的样板代码。
示例(完整API):
```rust
import std::Http::Server;
import std::Database;
struct User {
id: Int @primary @auto,
email: Str @email @unique,
password: Str @hash,
}
fn main() {
let db = Database::postgres()?;
let app = Server::new(":3000");
app.auth("/signup", "/login", User, db);
app.crud("/todos", Todo, db); // Todo = 你定义的任何结构
app.start();
}
```
结果:
- POST /signup 具有电子邮件验证 + 密码哈希(自动来自 @email, @hash)
- POST /login 使用JWT
- 完整的CRUD端点:GET, POST, GET/:id, PUT/:id, DELETE/:id
- 编译为本地二进制文件
状态:Alpha v0.3.0。身份验证、CRUD、验证和Postgres正常工作。正在积极修复bug。
在生产环境中使用之前,你需要看到什么?
嘿!<p>我最近了解到Leo Babauta的“微小安慰”概念——在你感到身体疲惫或精神耗竭的困难时刻,简单而健康的方式来充电。<p>以下是一些让我产生共鸣的原则:
• 保持小而偶尔(不要过度)。
• 用它们来充电,而不是逃避问题。
• 放下内疚——这是一种自我意识,而不是软弱。
• 活在当下,享受此刻。<p>以下是我的微小安慰:<p><pre><code> 1. 听轻松的音乐时阅读
2. 冷的时候洗热水澡,热的时候洗冷水澡
3. 最喜欢的花生酱棒
4. 烤面包上的花生酱和果酱
5. 在公园散步或进行北欧健走
6. 跑步或骑自行车
7. 烹饪
8. 加料燕麦粥(坚果、葡萄干、枣、香料)
9. 躺在沙发上闭眼抬腿
10. 小憩
11. 深呼吸练习
12. 短暂的冥想
13. 蒸汽浴
</code></pre>
我尽量选择那些安全且不易过度的方式。<p>你有哪些微小安慰可以帮助你充电呢?
嗨,HN,我是SentienceAPI的独立创始人。在过去的12月份,我一直在构建一个专门为大型语言模型(LLM)代理设计的浏览器自动化运行时。
问题:构建可靠的网络代理非常痛苦。你基本上只有两个糟糕的选择:
原始DOM:直接获取document.body.innerHTML既便宜又快速,但会使上下文窗口超载(超过10万个标记),并且缺乏空间上下文(代理会尝试点击隐藏或屏幕外的元素)。
视觉模型(GPT-4o):发送屏幕截图虽然可靠,但速度慢(延迟3-10秒)且成本高(约$0.01每步)。更糟的是,它们经常会产生虚假坐标,错过按钮10个像素。
解决方案:语义几何Sentience是代理的“视觉皮层”。它位于浏览器和你的LLM之间,将嘈杂的网站转换为干净、排序、具有坐标意识的JSON。
工作原理(技术栈):
客户端(WASM):一个Chrome扩展程序注入一个Rust/WASM模块,直接在浏览器进程中修剪95%的DOM(脚本、跟踪像素、不可见的包装器)。它在小于50毫秒内处理Shadow DOM、嵌套iframe(“框架拼接”)和计算样式(可见性/z-index)。
网关(Rust/Axum):修剪后的树发送到一个Rust网关,该网关应用简单视觉提示的启发式重要性评分(例如,is_primary)。
大脑(ONNX):一个服务器端的机器学习层(通过ort运行ms-marco-MiniLM)根据用户的目标(例如,“搜索鞋子”)对元素进行语义重新排序。
结果:你的代理获得了前50个最相关的可交互元素的列表,包含精确的(x,y)坐标、重要性值和视觉提示,帮助LLM代理做出决策。
性能:
成本:每步约$0.001(相比于视觉模型的$0.01+)
延迟:约400毫秒(相比于视觉模型的5秒+)
负载:约1400个标记(相比于原始HTML的10万个)
开发者体验(“酷炫”的东西):我讨厌调试文本日志,所以我构建了Sentience Studio,一个“时光旅行调试器”。它将每一步(DOM快照 + 屏幕截图)记录到一个.jsonl追踪文件中。你可以像视频编辑器一样浏览时间线,准确查看代理看到的内容与它产生的幻觉之间的差异。
链接:
文档与SDK: [https://www.sentienceapi.com/docs](https://www.sentienceapi.com/docs)
GitHub(SDK):
SDK Python: [https://github.com/SentienceAPI/sentience-python](https://github.com/SentienceAPI/sentience-python)
SDK TypeScript: [https://github.com/SentienceAPI/sentience-ts](https://github.com/SentienceAPI/sentience-ts)
Studio演示: [https://www.sentienceapi.com/docs/studio](https://www.sentienceapi.com/docs/studio)
构建Web代理: [https://www.sentienceapi.com/docs/sdk/agent-quick-start](https://www.sentienceapi.com/docs/sdk/agent-quick-start)
带有重要性标签(金星)的屏幕截图:
[https://sentience-screenshots.sfo3.cdn.digitaloceanspaces.com/Screenshot](https://sentience-screenshots.sfo3.cdn.digitaloceanspaces.com/Screenshot) 2026-01-06 上午7:19:41.png
[https://sentience-screenshots.sfo3.cdn.digitaloceanspaces.com/Screenshot](https://sentience-screenshots.sfo3.cdn.digitaloceanspaces.com/Screenshot) 2026-01-06 上午7:19:41.png
我负责后端的Rust和SDK的Python/TypeScript。项目现在处于测试阶段,我非常希望能收到关于架构或排序逻辑的反馈!
我制作这个工具是因为在技术面试中,我在“思维表达”方面遇到了困难,即使我知道最优解。<p>我现在正在使用它来练习表达我的想法,这在技术面试中是一个非常重要的环节,而 LeetCode 并没有涵盖这一点。<p>它可以无缝集成到 leetcode.com 上,作为一个小“橡皮鸭”出现在你的屏幕上。<p>LeetDuck 会自动配置,在开始时主动向你提问一个随机的行为问题,响应你的运行和提交,并在你成功完成问题后询问时间和空间复杂度。<p>让我知道你们的想法!这真的是其他人也会使用的东西吗?
这是一篇简短的技术文章,记录了一个个人项目。<p>项目的目标是将基于雷达的存在检测系统隐藏在一个普通的手机充电器内。<p>重点不在于固件功能,而是在于设计决策:
- 物理限制
- 雷达方向
- 电气隔离
- 简单性优于可配置性<p>这不是一篇教程,也不是产品公告。只是记录在现实世界限制下所做的工程决策。<p>欢迎反馈。
我一直在捕捉阶段遇到困难。大多数应用在这个时刻感觉太繁重了。即使是想出一个标题也足以打断思路。
我的应用 Ilseon(安卓)正是针对这个特定问题而设计的。它不是一个完整的 GTD 系统或项目管理工具,而是一个专注的任务管理器,旨在减少心理负担,帮助用户一次专注于一件事。
不过,Ilseon 的工作流程中包含了一些 GTD 元素:
* 快速捕捉
任务和想法几乎可以在没有任何结构的情况下捕捉。捕捉时不需要标题、标签或项目。
* 繁忙时的语音捕捉
当打字不方便时(如走路或开车),我会录制一段简短的语音备忘录。如果你选择添加 Gemini API 密钥,Ilseon 可以从转录文本中提取任务,但这完全是可选的,并且是在捕捉后进行的,而不是在捕捉过程中。
* 想法收集箱
有一个单独的草稿本,用于记录尚未成为任务的想法。在回顾时,这些想法可以被提升为任务或笔记,或者被丢弃。
* 完成后的反思
完成并不是结束。一个小的反思步骤鼓励用户回顾实际完成了什么。
* 本地优先存储
音频以标准的 .m4a 文件格式保存在本地文件夹中(Recordings/ilseon/)。
我希望能得到关注清晰捕捉过程的人的反馈。你在使用当前工具捕捉时是否遇到过摩擦,尤其是在离开桌子的时候?
GitHub: [https://github.com/cladam/ilseon](https://github.com/cladam/ilseon)
Play Store: [https://play.google.com/store/apps/details?id=com.ilseon](https://play.google.com/store/apps/details?id=com.ilseon)
大型语言模型(LLMs)通常被用来减少我们的阅读量。我希望它们能够用来增强我们的阅读习惯。
我给Claude Code提供了一组命令行工具,以探索一个包含100本非小说类书籍的库(这些书籍是从HN的推荐中挑选出来的),并提取出能够连接思想的摘录序列。
当它将史蒂夫·乔布斯的自我欺骗与关于Theranos的摘录联系起来时,我第一次感到好奇,结果它发现了许多更引人入胜的线索。
我希望其他人也能觉得这些内容有趣。
实施说明: [https://pieterma.es/syntopic-reading-claude](https://pieterma.es/syntopic-reading-claude)
嘿,我在一个 Tell HN 主题中分享了这个游戏,当时它还在开发中。我很高兴地发现很多人尝试了它,并且我收到了积极的反馈和建设性的批评。
总之,我找到了一个我非常喜欢的游戏开发库——Kaplay [1]。我喜欢它的原因在于简单的事情做起来很简单。这意味着我可以在不需要学习(或抗争)新工具的情况下,享受制作游戏的乐趣。我一直想做游戏,但这是我实际完成的第一个。
我必须告诉你——游戏开发让人充满快乐!它结合了许多元素(游戏设计、编程、艺术、音效、用户界面……),而且非常有趣。
这个游戏结合了动作和回合制玩法。可能目标有点过于雄心勃勃,但我认为我成功地做出了一个有趣的小游戏。如果你不确定我在说什么,可以试着玩一下教程,它应该会有所帮助。还有一个全球排行榜,我的朋友在上面占据主导地位,如果有人能把他拉下马,我会非常感激 :)
这个游戏完全免费。我在考虑开源它,但代码并没有达到我平常的标准,因为我是在边学边做。此外,我对添加新内容的兴奋超过了回头重构的兴趣。所以我还在考虑这个问题。
在你问之前,不,我没有用 vibe-coding 的方式来做。对我来说,这意味着把有趣的部分委托给其他东西。我已经在这个项目上工作了大约一个月,都是在我孩子睡觉后的晚上。
我非常欢迎所有反馈!
[1] [https://kaplayjs.com/](https://kaplayjs.com/)
P.S. 我还计划写一两篇关于它的博客文章。我已经开始制作一个关于导弹如何编码的互动演示。