整理一下除了工作项目外做过的个人项目,有的是解决问题的工具,有的是练手造轮子,有的是把灵机一动的idea实现出demo
AI apps
一个 vscode 插件,可以基于代码生成各种类型的图表、给代码添加注释,用于简化代码阅读。
还去复旦某实验室做了次分享 😁
一个辅助内网运维的 Devops agent,在工作中使用,设计了一套数据脱敏机制
AI 个人助理 p6,基于gpt-3 api 的 LLM agent,相比于chatgpt等产品的优势是能帮我干活,例如帮我下载电影。
chatgpt api网关
因为我没有信用卡、用不了chatgpt api,就逆向工程分析了5个 chatgpt的镜像站点(比如 poe.com 这种),把这些站点的api 封装成了一个网关,对外暴露出和openai 一样的接口。
请求到达网关后,网关会做协议转换、然后把请求转发给不同的镜像站点 (而不是openai 的官方站点)。
为了避免触发风控、被封号,网关内部设计了一些负载均衡、限流、熔断、爬虫策略来躲避风控、提高稳定性。
最终达到的效果:可以免费、高速的使用chatgpt api :)【用AI给代码添加注释】
在 jetbrains 系列的IDE(比如 IDEA,Goland,Clion) 里, 选中代码后,按一下快捷键就能自动给代码添加注释
在工作中解决痛点,一些提高效率的工具
-
protoc-gen-p6
一个代码生成器,用于为 Layotto 项目自动生成 代码、文档、CI 配置。
想解决的问题:每次想在 Layotto 项目里实现一个 API 时,需要写很多代码和文档,review 起来也很花时间,因此写了这个工具,开发者定义好 proto 后,敲一条命令就能生成所有代码、sdk、文档、CI 配置。让机器替人写代码,让程序员下岗
更详细的说明见文档: 如何基于 proto 文件生成代码、文档
在 CI 中自动测试文档,mdx 。写这个是因为开源项目的 quickstart 文档长时间不维护可能会过时,因此想在 CI 中自动测试文档。这个工具会自动运行 markdown 文档中的 shell 脚本,其实是基于另一个开源项目 mdsh 的封装。
更详细的说明见文档: 使用工具自动测试 Quickstart 文档-
开源治理工程化,github-growth-hack 。工作负责做开源,要推动提高SOFAStack和MOSN社区的活跃度,涉及项目较多,靠人工管不过来。搞了个自动化治理工具,功能包括:
- 观测: 生成项目活跃度数据周报/月报,一方面便于大盘展示、数据分析,一方面便于推动
- 专家系统:类似于 k8s 的 Controller 模式,声明对每个项目的期望状态,由 Controller 监控状态,如果状态不符合预期,则提醒项目维护者,并给出一定的专家建议,建议完成xx事情,即可达到期望状态
"refined-alipay": 感觉公司一些内部系统不好用,于是做了一个 chrome 插件,安装后会自动魔改蚂蚁内部各种系统的 UI 界面,让界面变得更好用,提高生产力(例如屏蔽所有的蓝点、红点,例如小 UI 自动放大,等等)。没开源。
类似于 https://github.com/refined-github/refined-github测试环境监控系统:呆过的第一家公司刚开始做微服务转型,但是分布式系统的基础设施不完善,测试环境天天出问题。为简化测试环境问题排查,我写了个监控工具(其实是扫描器),定时多线程扫描公司内各个微服务,发现系统挂掉则邮件报警(使用Java)
边缘机房“故障自动诊断”:也是在呆过的第一家公司,项目会在客户的多个机房部署,机房之间通过专线网络通信,每个机房规模不大(可以理解成“边缘机房”)。边缘机房的稳定性不高(毕竟每个机房的硬件资源有限,不可能为每个微服务部署太多副本),为简化生产环境问题排查,我写了个故障自动诊断组件,获得老板认可后集成进发布包。
简化报销发票: 加班打车/吃饭报销、到处找发票太麻烦,写过个电子发票收集工具,每次消费完了把发票发到指定邮箱后,工具会自动搜集指定邮箱下的发票、下载到电脑上的指定目录,一键批量打印。后来去了大厂发现内部有类似的服务,而且是和报销系统打通的。
chrome debug插件
https://github.com/seeflood/console.watch
刚工作的时候前后端都要写,感觉前端debug别人的代码/开源框架比较烦(很多前端代码写的和套娃一样,可读性不高),写过一个chrome插件,提供“当对象的属性被修改时,控制台进断点”。后来发现做爬虫、分析别人的网页的时候也能用上
自动生成sql建表语句的工具(Vue+jQuery);
拿vue当模板引擎做的,一个根据数据库表设计生成DDL建表语句的工具。
当然现在不用了,Visual Paradigm真香自动生成前端埋点代码的工具(Vue+jQuery);
写前端的时候还得负责加埋点代码,很恶心,于是搞了个生成埋点代码的工具。
同样是拿vue当模板引擎,配下要拦截哪些ajax请求,能自动生成埋点代码(代码逻辑:拦截指定ajax请求、抠出来需要的字段、发到后端打日志)
生成的埋点代码不是这里加一句代码、那里加一句代码,而是一个独立的文件,拦截页面所有ajax请求、过滤出感兴趣的事件、做埋点逻辑。
代码放在了https://github.com/seeflood/easy-life/blob/master/src/main/js/recorder/template.html
后来换公司、不需要自己埋点了,这个就没再维护。现在看来这个思路可以优化:不仅可以拦截ajax请求,还可以拦截感兴趣的dom事件
参与过的开源项目
-
Layotto
这个其实是工作项目(公司开源项目),我作为开源Co-founder,也不要脸的帖在这了哈哈 - SOFAStack维护者
- Dapr member
- MOSN contributor
自己造的一些轮子/玩具
PUA-RPC
https://github.com/seeflood/PUA-RPC
一个java的RPC框架,特点是具有PUA功能:每次RPC调用会打日志,日志中随机加入一条PUA语录以鼓励程序员,而如果出现了RPC调用失败/报错/性能问题等bad case,会在日志中加入批评程序员的话分布式定时任务调度系统
毕业设计项目,使用Go语言实现的一个分布式定时任务调度系统,基于Etcd做存储,去中心化的调度(每台机器到了时间都去抢锁,谁抢到谁执行,没有中心化的调度节点),支持多种容错策略(at least once,at most once等)
做的过程中学了一些分布式系统的理论才意识到分布式系统中的时钟是非常不可靠的东西(除非用原子钟),所以这种去中心化调度其实是有很多问题的,因此不看好同样架构的Elastic-Job(一个开源的分布式定时任务调度框架)前端mvvm框架
学习vue的时候看了原理自己写了一个简易版的mvvm框架,时间太久代码找不到了……
核心就是个数据双向绑定,dom变了改内存变量,内存变量变了改dom
javascript容器库
https://github.com/seeflood/jContainer
javascript容器库,包含常用容器及相关算法Copy-Paste-Data-Structures
https://github.com/seeflood/Copy-Paste-Data-Structures
一个java和Go的高级数据结构库,设计目标是任何数据结构都能单独复制粘贴出来、单独使用,文件和文件之间没有任何互相依赖,以便在打online-judge比赛(比如leetcode周赛,google比赛)的时候能够直接粘贴使用,或者把某个数据结构粘贴到自己的工作项目中做魔改。