184 分•作者: DGAP•15 天前
返回首页
最新
16 分•作者: nill0•15 天前
2 分•作者: radicalethics•15 天前
2 分•作者: hello-tmst•15 天前
我们厌倦了编写原始的 Cypher 查询——转义引号、零代码补全、重构噩梦——所以我们构建了 GraphORM:一个使用纯 Python 对象的、针对 RedisGraph/FalkorDB 的类型安全的 Python ORM。
它能做什么
不再需要脆弱的 Cypher 查询:
```cypher
query = """
MATCH (a:User {user_id: 1})-[r1:FRIEND]->(b:User)-[r2:FRIEND]->(c:User)
WHERE c.user_id <> 1 AND b.active = true
WITH b, count(r2) as friend_count
WHERE friend_count > 5
RETURN c, friend_count
ORDER BY friend_count DESC
LIMIT 10
"""
```
你可以编写类型安全的 Python 代码:
```python
stmt = select().match(
(UserA, FRIEND.alias("r1"), UserB),
(UserB, FRIEND.alias("r2"), UserC)
).where(
(UserA.user_id == 1) & (UserC.user_id != 1) & (UserB.active == True)
).with_(
UserB, count(FRIEND.alias("r2")).label("friend_count")
).where(
count(FRIEND.alias("r2")) > 5
).returns(
UserC, count(FRIEND.alias("r2")).label("friend_count")
).orderby(
count(FRIEND.alias("r2")).desc()
).limit(10)
```
主要特性:
• 使用 Python 类型提示的类型安全模式
• 流畅的查询构建器 (select().match().where().returns())
• 自动批量处理 (flush(batch_size=1000))
• 原子事务 (with graph.transaction(): ...)
• 零字符串转义——O'Connor 和 "The Builder" 都能正常工作
目标受众
• AI/LLM 代理开发者:将长期记忆存储为图 (User → Message → ToolCall)
• 网络爬虫工程师:用 12 行代码插入 1 万个页面 + 链接,而 Cypher 需要 80 行
• 社交网络构建者:使用 indegree()/outdegree() 查询“朋友的朋友”
• 数据工程师:跟踪血缘关系 (Dataset → Transform → Output)
• 刚接触图的 Python 开发者:避免 Cypher 学习曲线
数据插入:真正的变革
原始 Cypher 噩梦:
```
queries = [
"""CREATE (:User {email: "alice@example.com", name: "Alice O\'Connor"})""",
"""CREATE (:User {email: "bob@example.com", name: "Bob \"The Builder\""})"""
]
for q in queries:
graph.query(q) # 没有事务安全!
```
GraphORM 的幸福:
```python
alice = User(email="alice@example.com", name="Alice O'Connor")
bob = User(email="bob@example.com", name='Bob "The Builder"')
graph.add_node(alice)
graph.add_edge(Follows(alice, bob, since=1704067200))
graph.flush() # 一次网络调用,原子事务
```
30 秒内试用
```bash
pip install graphorm
```
```python
from graphorm import Node, Edge, Graph
class User(Node):
__primary_key__ = ["email"]
email: str
name: str
class Follows(Edge):
since: int
graph = Graph("social", host="localhost", port=6379)
graph.create()
alice = User(email="alice@example.com", name="Alice")
bob = User(email="bob@example.com", name="Bob")
graph.add_node(alice)
graph.add_edge(Follows(alice, bob, since=1704067200))
graph.flush()
```
GitHub: [https://github.com/hello-tmst/graphorm](https://github.com/hello-tmst/graphorm)
我们很乐意收到诚实的反馈:
• 这是否解决了您真正的痛点?
• 生产环境使用还缺少什么?
• 有任何 API 设计建议吗?
33 分•作者: DamnInteresting•15 天前
1 分•作者: shivam-dev•15 天前
1 分•作者: speckx•15 天前
1 分•作者: askl•15 天前
1 分•作者: hung•15 天前
1 分•作者: todsacerdoti•15 天前
1 分•作者: ryan_rudd•15 天前
1 分•作者: stephanschulz•15 天前
1 分•作者: jaygood•15 天前
我是一名开发者,每天有一半的时间都在进行屏幕共享。我厌倦了“通话前的仪式”,即关闭所有私人应用,以确保在演示时不会意外地展示银行余额或私人消息。
现有的“专注”模式可以隐藏通知,但如果需要共享整个桌面以提供上下文,它们就无能为力了。
我开发了 Cloakly 来解决这个问题。它是一个 Windows 实用程序,允许你“隐藏”特定窗口。这些窗口对你来说完全可见且可交互,但对于捕获软件(Zoom、Teams、Discord 等)来说,它们是 100% 隐形的。
其工作原理(简要说明):它利用 Windows 操作系统属性,将特定的窗口句柄从捕获流中排除。它允许你在共享的同一屏幕上保留参考笔记或私人聊天。
功能:
* 双重现实:你看到窗口;观众看到你的壁纸/桌面。
* 幽灵模式:调整窗口透明度,以便透视到下方的内容。
* 隐身:该应用程序可以隐藏其在任务栏中的存在。
我今天在 Product Hunt 上发布,看看这是否是其他人的痛点,还是仅仅是我个人的问题。我很乐意听取你对该实现的反馈,以及你是否认为它对你的工作流程有用。
PH 链接:[https://www.producthunt.com/products/cloakly](https://www.producthunt.com/products/cloakly)
网站:[https://www.getcloakly.com/](https://www.getcloakly.com/)
2 分•作者: erwald•15 天前
1 分•作者: PaulHoule•15 天前
21 分•作者: surprisetalk•15 天前
85 分•作者: brk•15 天前
44 分•作者: bobsterlobster•15 天前
14 分•作者: NathanFlurry•15 天前
最近,我们一直在研究在沙盒中自动化编码代理。令人困惑的是,每个代理之间的标准化程度和易用性差异如此之大。
我们开源了 Sandbox Agent SDK,它基于我们内部构建的工具,旨在解决以下三个问题:
1. 通用代理 API:使用相同的 API 与任何编码代理交互。
2. 在沙盒内运行代理:Agent Sandbox 提供了一个 Rust 二进制文件,通过 HTTP 提供通用代理 API,而无需费力地处理未公开的接口。
3. 通用会话模式:持久化会话总是存在问题,因为我们不希望对话的真实来源存在于我们无法控制的模式的容器内部。
Agent Sandbox SDK 具有以下特点:
* 任意编码代理:通用 API,可与所有代理交互,并提供完整的功能覆盖。
* 服务器或 SDK 模式:作为 HTTP 服务器运行或使用 TypeScript SDK。
* 通用会话模式:用于存储代理记录的通用模式。
* 支持您的沙盒提供商:Daytona、E2B、Vercel Sandboxes 等。
* 轻量级、可移植的 Rust 二进制文件:只需一个 curl 命令即可安装在任何地方。
* OpenAPI 规范:文档齐全,易于集成。
我们将在未来几周内添加更多内容——非常希望听到任何反馈或问题。
2 分•作者: crediblejhj•15 天前
大家好,我是来自韩国的高中毕业生,即将开始大学的计算机科学学习。<p>我用 C++ 从头开始构建了一个浏览器引擎,目的是为了了解浏览器的工作原理。这是我第一次使用 C++,开发了 8 周,经历了大量的调试——但它终于能运行了!<p>功能:<p>- 带有错误修正的 HTML 解析<p>- CSS 级联和继承<p>- 块/内联布局引擎<p>- 异步图像加载 + 缓存<p>- 链接导航 + 历史记录<p>最难的部分:<p>- 字符串解析(HTML,CSS)<p>- 渲染<p>- 图像缓存和布局重排<p>我学到的(除了代码):<p>- 系统化的调试至关重要<p>- 带着已知的 bug 发布,而不是追求完美<p>- “为什么?”的力量<p>大约 3,000 行 C++17/Qt6 代码。 欢迎大家对代码架构和 C++ 最佳实践提出反馈!<p>GitHub:<a href="https://github.com/beginner-jhj/mini_browser" rel="nofollow">https://github.com/beginner-jhj/mini_browser</a>