从分享一个小工具到首个 GitHub 1K Star 小成就
2021 年 11 月,Python 版 trzsz 工具
背景:在 iTerm2 中使用 rz sz 又卡死了,才想起当前是 tmux 环境,然后 kill 并重登录,真的很浪费时间。
原因:rz sz 在传输时会有一些特殊字符,tmux 的存在导致传不过去。
解法:如果先将文件 Base64 编码再传输,就可以顺利穿过 tmux 了。
结果:写了个小工具 trzsz ( trz / tsz ) 自用,接着在 GitHub 上开源分享出来: github.com/trzsz/trzsz
2022 年 2 月,TypeScript 版 trzsz.js 库
背景:trzsz 开始只支持 iTerm2 ,网友提出想要支持其他终端,例如 electerm 和 tabby 等。
结果:用 TypeScript 写了个 trzsz.js 的库,顺便支持在浏览器 webshell 中使用。这个库主要是面向终端或 webshell 开发者的,用来接入并支持 trzsz ( trz / tsz ): github.com/trzsz/trzsz.js
2022 年 3 月,Go 版 trzsz 工具
背景 1: trzsz 还有很多其他终端未支持,有网友特别想支持 Linux 的原生终端,但是提 PR 过去大概率会被拒绝。
背景 2: 有网友在 V2 分享了 termtunnel,让我突然想到,可以写个工具作为 ssh 进程的父进程,就可以完全控制 ssh 的输入和输出了,从而实现对 trzsz ( trz / tsz ) 的支持。
结果:为了支持所有平台,为了便于分发(独立的程序,无任何依赖),选择了用 Go 来开发,于是便有了 Go 版的 trzsz ( trz / tsz ): github.com/trzsz/trzsz-go
2023 年 5 月,实现 ssh 客户端
背景 1: Windows 中的 ConPTY 和 ConHost 存在性能问题,导致 Go 版 trzsz 只有几十 K 的速度。
背景 2: 有网友来咨询 trzsz.js 的问题,他用的是 Go wails,才知道 Go 有强大的 ssh 库,可以把 Go 版 trzsz 改造成一个库让他接入。
背景 3: 在 ssh 登录不常用的服务器时,总是不能准确地记住别名是什么,然后就是 cat ~/.ssh/config ,很不丝滑。
结果:把 Go 版 trzsz 改造成一个库,自己写一个 ssh 客户端,完全兼容原生 ssh 的,然后定制自己想要的功能,顺便解决 trzsz 在 Windows 慢的问题,叫 trzsz-ssh ( tssh ): github.com/trzsz/trzsz-ssh
2024 年 1 月,tssh 率先突破 1k star
trzsz-ssh ( tssh ) 是以上几个最后开源的,却是最先达到 1k star 的,为期不到一年。
trzsz-ssh ( tssh ) 也支持原生 zmodem ( rz / sz ),只要有本地 shell 的终端就能使用。凡是没有原生支持 rz / sz 的终端,配合 tssh 使用大概率会有惊喜。
截止到现在,star 和 fork 数量的汇总 github.com/trzsz:
Python 版 958 star 48 fork
TypeScript 版 177 star 14 fork
Go 版 752 star 46 fork
tssh 1000 star 62 fork
总结与感想
在日常工作中会遇到很多的小痛点,当重复遇到的次数多了,那怕只是几秒的浪费,我就会去思考有没有优化的空间,会去网上看看别人是如何做的,实在找不到就只好自己动手丰衣足食了。
开始并没有想着要投身开源,因为找不到 tmux 中使用 rz sz 的解决方案,而自己写了个小工具,只是想简单分享给同样为 tmux 不支持 rz sz 而苦恼的人。
最后说明一下,以上其实省略了大量的优化过程,那是用很多很多的周末堆起来的……
前面有个链接多了个冒号导致 404 ,这里修正一下: github.com/trzsz上面说到的几个开源项目都 pin 在这里的首页中。
这写到简历里,比啥博士硕士学历都好用啊
OP 高产啊 👍🏻
全能选手?!
感谢分享如果 1k star 是对单个 repo ,则恭喜 po 主可以免费用 coploit 了
#2 过了找工作的年纪啦。如果哪天被裁了,也不一定会写这几个到简历里。
#4 刚毕业时写 C# 和 JAVA ,现在的工作写 C/C++,你猜我会多少门语言?
#5 还有这好事?我去了解下。
是滴,另外 JetBrains 全家桶楼主也是具有资格的,发个邮件过去,所有 ultimate edition 都能免费用
c# yyds 。。。
点击此处可以直接查看是否有资格免费使用 copilot< github.com/github-copilot/free_signup>
此外其实这个并不要求你有 1k repo ,内部判断逻辑未知,我看有人只有 200 star 也有资格
#9 Wow ,原来 1k star 能解锁这么多东西呀。
#11 现在看还是 $10/month ,或 $100/year 。
yep :P
是不是除了语法差异,基本上思路逻辑都差不多?
JetBrains 全家桶有一个叫开源免费许可证,只需要维护满 3 个月开源仓库就行可以直接点击 < www.jetbrains.com/shop/eform/opensource> 去申请,不需要像上面说的手动发邮件
Copilot 是每月一审,似乎有足够 Star 就可以JetBrains 每年一审,不看 Star ,看纯代码的提交频率
#16 产品逻辑都差不多,实现会有差异的。有些语言提供了好用的基础库,实现起来就简单清晰,有些语言就要自己实现一些库,或者换一种写法。
我也用 go 写了个类似你那个 ssh 的功能,后面没维护了。只做了选服务器和连接功能,比较简单
感谢分享,可能是我建了一个 trzsz 组织 github.com/trzsz ,个人项目中并没有高 star 的,所以 copilot 的免费资格没有。不过也无所谓,首先公司不允许用,其次我家里也还没试过,对 copilot 没什么依赖。以前写代码依赖 Google ,现在依赖 ChatGPT 和 Google 。写的语言太多了,不可能全都记住,所幸其本质原理都一样,反复捡起来很快。JetBrains 我也几乎没用过,很久以前用 eclipse 写 JAVA ,后来用 vim 写 C/C++ ,现在用 nvim 写所有了,AstroNvim astronvim.com/ 长的很像 vscode 。
早已经 star ,非常香
我的 github.com/golang-module/carbon 4229 star 了
我有单个项目 1K 多 star ,我点击你这个地址过去看到的是$10/month ,或 $100/year ,没有免费啊
#23 强
俺也一样,点进去看到的是首次免费 30 天,以后就是$10/month ,没看到一直免费的条款和说明
已 star 你的,加油!
我也有个项目马上 1K 了,但是进去好像还是付费的 麻了啊
果断 star 。用了下 tssh ,优雅,太优雅了
看了一下你的主页,我猜测是没有参与过那种超多 Star 的项目贡献,所以没给。你看我的主页,没有一个超过 300 Star 的项目,但是我有免费使用权,可能因为我参与了不少那种大项目。
#30 我也给超多 Star 的项目贡献过,是不是还与提交的 commit 数和代码行数有关?我列举一些(代码行数不多): github.com/gnachman/iTerm2 github.com/pwndbg/pwndbg github.com/microsoft/terminal github.com/electerm/electerm github.com/tsl0922/ttyd github.com/warmcat/libwebsockets在 GitHub 中搜索 "is:pr author:用户名" 能列出某个人的所有 PR 。PS:我暂不需要 coploit ,我只是好奇它的规则。
我想到了,github coploit 的免费名额可能跟贡献的排名有关。可能 1K 的 repo 只取第一名,2K 的 repo 只取前两名,依赖类推……( 猜的,具体也不一定是这个比例 )。
github coploit 的免费与否不仅仅看 star 数量、贡献排名、贡献代码量这些,因为我有一个 5k+star 的个人项目,照样不免费。但我也见过 100 多 star 就能免费用的,官方也没有给出一个评判标准,总之很迷
既然这是 tmux 的问题,有没有考虑过告诉 tmux 开发者让他们修 bug ,彻底消除根源问题?
#34 一开始是去 tmux 的 github 找解决办法的,tmux 没有意向支持 rz / sz ,并且锁 issue 了: github.com/tmux/tmux/issues/906 github.com/tmux/tmux/issues/1439
我的: github.com/go-eagle/eagle 马上 1.5k 了
弱弱的问一下,tssh 和 windterm 的区别是什么,目前在用 windterm ,tssh 刚刚试用了一下挺好使,但又不太习惯,感觉和 windterm 有点相似 github.com/kingToolbox/WindTerm
#37 tssh 不是一个终端,是和 ssh 一样的命令行程序,一般要在某个终端里面运行。特别是在一些没有太多配置的精简终端,或原生终端里,非常适用。你可以认为 tssh 就是 ssh ,它额外提供了一些扩展的功能,例如选机器登录,记住密码,和文件传输等。
#36 强,加油。
rt 比如: 定义结构体 type S struct { ID int64 Name string } 有切片 []S{ { ID: 1, Name: "1",…
比如我有这样一个 JSON { "pages": ["pages/index/index"], "subpackages": [ { "name": "A", "pa…
spring-cloud-gateway 服务被攻击,启动加载路由配置的时候报错 GatewayRouteConf(filters=[{"args":{"name":"Resu…