dev.to博客数据CLI工具,AI代码审查器git-lrc
作者开发终端工具实时展示dev.to博客数据,同时在建git-lrc微型AI代码审查器,可在每次提交时自动运行。
作者开发终端工具实时展示dev.to博客数据,同时在建git-lrc微型AI代码审查器,可在每次提交时自动运行。
你好,我是 Maneshwar。我正在构建 git-lrc,一个在每次提交时运行的微型 AI 代码审查工具。它是免费的,源码已在 Github 上发布。请给 git-lrc 点个星来帮助开发者发现这个项目。也欢迎你尝试并分享反馈。
我检查 dev.to 统计数据的频率比我在工作面试中想承认的还要频繁。
反应数、浏览数、评论数,那些不断上升的小数字,还有那些顽固拒绝上升的。
通常这个仪式意味着打开浏览器,点进仪表板,然后像在看茶叶占卜一样逐篇文章地盯着,眯着眼睛。
我想要一些更舒适的东西。
我的热门文章按点赞数、浏览数和评论数排序,全部同时显示在屏幕上,自己安静地刷新,而我假装做真正的工作。
所以我花了一个下午把它做了出来。
这需要一个小的 Go 程序,一个发挥重任的项目档案库,以及两个我绝对没有要求但却被赠送的 bug。
让我带你走一遍这个过程,包括这些 bug。
计划有三个活动部分。
首先,dev.to 已经把你的数据交给你了。
有一个端点,GET /api/articles/me,你在 api-key header 中发送你的 API 密钥,然后你会得到你发布的每篇文章,包含已经为你计算好的重要字段:positive_reactions_count、page_views_count 和 comments_count。
不需要爬虫、不需要 HTML 解析、不需要哭。
你可以在 dev.to 设置中的 Extensions 下生成一个密钥。
其次,我不想从零开始构建整个 TUI。
网格、颜色、边框、键盘处理、刷新循环。生命太短了 xD
第三,因此我需要一个已经能画漂亮终端仪表板的东西,只要我给它好好喂数据,它就会乐意展示我的数字。
这第三样东西是存在的,它叫 devdash。
devdash 是一个高度可配置的终端仪表板,由 Matthieu Cneude(更为人知的名字是 Phantas0s)开发。
它拥有 GitHub、Google Analytics、Google Search Console、Travis 等的 widget,整个布局完全由单个 YAML 文件驱动。
行、列、T 恤尺寸、颜色,全都是声明式的。
这是一件真正优雅的 Go 代码。
有两个小问题。它自 2023 年以来一直是存档状态。它对 dev.to 完全一无所知。
现在,我本可以 fork 它,添加一个适当的 Forem 服务,连接结构体,编写测试,然后向一个礼貌地关闭业务的 repo 打开 pull request。
但我找到了懒人之门,它早就打开了。
devdash 有一个叫 lh.table 的 widget,本地主机表。
你给它一个 shell 命令,它运行那个命令,然后把命令打印的任何内容都渲染成一个带边框的表格。
它把输出的每一行都按空格拆分,把这些部分插入到列中。这就是整个约定。
所以 devdash 不需要知道 dev.to。
它只需要一个打印行的命令。我可以成为那个命令。
如果 Matthieu 有朝一日读到这篇文章:感谢你构建了一个灵活到可以被这么优雅地滥用的工具。
去 X 上烦 Matthieu,告诉他他的存档项目还在这儿发挥作用。
这是整个东西的形状。
中间那个小 Go 二进制文件是唯一我真正必须写的东西。
我把它叫 devto-stats。
它获取我所有的文章(每次分页 100 条,直到 dev.to 没有数据为止),只保留已发布的,按 devdash 要求的任何指标排序,然后打印干净的行。
req.Header.Set("api-key", apiKey)
resp, _ := client.Do(req)
// GET https://dev.to/api/articles/me?per_page=100&page=N
配置只是指向三个表 widget,分别指向该命令的三个变体。
- name: lh.table
options:
title: " MOST VIEWED "
command: "./bin/devto-stats -mode=table -sort=views -limit=10"
headers: "#,Article,Views"
border_color: green
三个这样的块,分别着色为红、绿、黄,并排坐在一起。理论上讲,完成。
我打开了它。Overview 条带填充了。Most Liked,光荣地出现了。Most Commented,也在那儿。
Most Viewed,一个亮红色的 ERROR 框。
这个命令手工运行时完全没问题。
它只在 devdash 里面失败。
线索在于 devdash 刷新的方式:它同时触发每个 widget,各自在自己的 goroutine 中,全部在同一时刻。
四个 widget 意味着四份 devto-stats 同时全力冲向 dev.to API,肘部在外。dev.to 做了明智的事情,回复了 429 Too Many Requests。
四个中的一个总会输掉这场竞速,通常是 Most Viewed。
我构建了一个非常小、非常礼貌的针对我自己的拒绝服务攻击。
修复方案是无聊但正确的那种:在收到 429 时,等待并重试,带上退避加抖动。
if resp.StatusCode == http.StatusTooManyRequests {
backoff := time.Duration(attempt-1) * 700 * time.Millisecond
jitter := time.Duration(rand.Intn(500)) * time.Millisecond
time.Sleep(backoff + jitter)
continue // try this page again
}
抖动是重要的部分。没有它,全部四个会以相同的量退避,然后再次碰撞,就像四个人在走廊里道歉并以同样的方式让开。
有了随机偏移,它们会自己分散开。
之后零错误。
Most Viewed 最终渲染了。它渲染错了。
第一行看起来不错,然后下面的每一行都向右滑动了一列。
标题出现在数字列,数字消失了。
我认出了它在哪儿开始的文章。
我的顶部文章标题是 "Good Bye CRUD APIs, Hello Sync"。
看看那个标点符号。
devdash 在内部做的事情是这样的:它按空格拆分每一行来得到单元格,把这些单元格用逗号重新连接起来,然后按逗号再拆分整个批次,把它分块成 N 列的行。
标题内的逗号与 devdash 有意添加的逗号无法区分。
一个标题变成两个单元格,该行有四个部分而不是三个,由于分块是全局的,它后面的每一行都永远被移位了。
真正的修复属于上游,在一个不再接待访客的 repo。
所以我在我这一方修了它,我可以控制输出的地方。
我的二进制文件已经 slugify 标题以存活空格拆分。
我只是教会它也要清除逗号。
s := strings.Join(strings.Fields(title), "-")
s = strings.ReplaceAll(s, ",", "") // devdash re-splits the table on commas
一行。逗号中毒的表格苏醒了。
这是原始数据流,一个面板运行的内容,直接来自二进制,来自我实际账户的真实数字:
devdash 把三个数据流组成框架,变成着色的、有边框的、自我刷新的表格,肩并肩地坐着:Most Liked 红色,Most Viewed 绿色,Most Commented 黄色,顶部有一个摘要条。
Ctrl+R 强制刷新,Ctrl+C 退出,任其自己运行时它每五分钟重绘自己。
444 篇文章,全部账户完整,没有浏览器,没有点击,只是一个安静的终端告诉我关于人们真正阅读了哪些文章的真相。
最好的集成往往是没有集成。devdash 从未了解 dev.to。
我让 dev.to 改用 devdash 的语言,一个在 2023 年停止维护的工具在没有对其源代码进行任何更改的情况下渲染了 2026 年的数据。
整个东西,Go 帮手、YAML 和 Makefile,都在这儿:lovestaco/devto_devdash。
自带你的 API 密钥。
衷心感谢 Matthieu Cneude 和 devdash。
有时这项工作的最好工具是某个多年前停止工作的工具,安静地坐在那儿,仍然完全乐意再推出一个仪表板。
AI agent 编写代码很快。它们也会无声地删除逻辑、改变行为并引入 bug——而不告诉你。你常常在生产中才发现。
git-lrc 修复了这个。它挂钩到 git commit 并在每个 diff 落地前进行审查。60 秒设置。完全免费。
欢迎任何反馈或贡献者!它在线、源代码可用,已准备好任何人使用。
免费、微型 AI 代码审查,在 Git 提交时运行
| 🇩🇰 Dansk | 🇪🇸 Español | 🇮🇷 Farsi | 🇫🇮 Suomi | 🇯🇵 日本語 | 🇳🇴 Norsk | 🇵🇹 Português | 🇷🇺 Русский | 🇦🇱 Shqip | 🇨🇳 中文 | 🇮🇳 हिन्दी |
免费、在提交时运行的微型 AI 代码审查
如今 GenAI 是一辆没有制动的赛车。它加速很快——你描述一些东西,大段代码立即出现。但 AI agent 无声地破坏东西:它们删除逻辑、放松约束、引入昂贵的云调用、泄露凭证,并改变行为——而不告诉你。你常常在生产中才发现。
git-lrc 是你的制动系统。它挂钩到 git commit,并在每个 diff 落地前运行 AI 审查。60 秒设置。完全免费。
简而言之,git-lrc 帮助防止故障、泄露和技术债在发生之前就被阻止
一览:10 个风险类别·100+ 个故障模式被跟踪·每次提交…
某些评论可能只对已登录的访客可见。登录以查看所有评论。
有关进一步的操作,你可能会考虑屏蔽此人和/或举报滥用