[心得] 我如何在 GitHub 上拿到四千顆星

看板Soft_Job作者時間7年前 (2016/07/07 18:52), 編輯推噓137(137011)
留言148則, 137人參與, 5年前最新討論串1/1
兩個月前我在 GitHub 發表了一個開源專案,發表後一夕爆紅,在一開始的 24 小時內就 得到 1200+ 顆星,目前已累積 4000+ 顆星。這個專案名叫 HTTP Prompt,網址是: https://github.com/eliangcs/http-prompt 我想在這裡分享一下它的開發故事。 這一切要先從 Vertica 講起。沒多久前我的工作幾乎每天都會使用 Vertica,Vertica 是一個強大的資料庫,但它官方的客戶端程式(vsql)一點都不強大。另一個 GUI 的選擇 DbVisualizer 也是難用到爆。 我就想起 PostgreSQL 那邊有一個叫 pgcli 的好物,我想如果 fork 它,應該不需要太大 功夫就能把它改成 Vertica 版本。最後也如我所想,沒花幾天就寫出了 vcli: https://github.com/dbcli/vcli 我還聯絡了 pgcli 的原作者,告訴他「我用你的東西寫了另一個專案」,他很高興的幫我 在他網站上宣傳。但 Vertica 實在是小眾,所以 vcli 並沒有得到很多注意。但至少有了 vcli,我終於能每天快快樂樂的使用 Vertica 了。 vcli、pgcli、mycli(for MySQL)其實都是建於一個叫 prompt-toolkit 的 Python 套件 之上。有了 prompt-toolkit 的加持,任何命令列程式因為有了自動完成和語法高亮,都 會變得超酷炫,去它的首頁看看有多少專案使用它就知道了: https://github.com/jonathanslenders/python-prompt-toolkit 當時有一陣子工作常會需要連接 HTTP/REST API,這應該也是很多人工作的一部分,我相 信大部分人應該都是用 Postman 這類 GUI 工具,但身為一個什麼都要盡量用命令列介面 的 hacker,用 GUI 實在有點 low,而且跟 terminal 切換起來也不方便。所以我就選擇 使用類似 curl 的 HTTPie。使用 HTTPie 的缺點是常需要打很多重複的字,不像 Postman 會幫你記住之前的狀態,我想如果 HTTPie 或 curl 有互動模式就好了。我調查了一下, 原來早在一年前就有人這麼想了: https://github.com/jkbrzt/httpie/issues/343 甚至在五年前就有人寫出我心目中理想的工具了: https://github.com/chrislongo/HttpShell 但 HTTPie 實在設計得太完美讓我不想放棄它,而且 HttpShell 似乎也沒在更新,所以我 也就不考慮使用 HttpShell。 「任何命令列程式受了 prompt-toolkit 加持,都會變得超酷炫」,那我何不站在巨人肩 膀上,結合 HTTPie 和 prompt-toolkit,寫出一個有自動完成和語法高亮的 HTTP client ,不要求使用者放棄完美的 HTTPie,肯定有賣點。 於是我開始著手開發 HTTP Prompt,我還告訴我老婆,我這寫完至少會在 GitHub 拿一千 顆星星。我當時不是隨便推算的。因為 pgcli 都有四千多顆星了,用 HTTP 的人一定多過 PostgreSQL,所以如果我執行得好,吸引一千顆星星應該不是問題。 一開始卡最久是我想找出一個完美的寫法,使得自動完成、語法高亮、指令解析三大模組 能用一個統一的 context-free grammar(CFG)解決,但 prompt-toolkit 的作者告訴我 這個想法不切實際: https://github.com/jonathanslenders/python-prompt-toolkit/issues/276 所以最終只有指令解析是以 CFG 實做,另兩個模組則分別土法煉鋼。CFG parser 一開始 也讓我有點頭痛,幸虧有人寫了一個現成的 parser: https://github.com/erikrose/parsimonious 讀過 parsimonious 的程式碼,我只能說這套件的作者功力深厚,沒有編譯器或正規語言 的基礎還真寫不出這樣的東西。 prompt-toolkit 已解決大部分的難題,所以除了 CFG 之外就沒什麼特別困難的地方了。 我前後大概花了三個禮拜完成基本功能,即發佈到 Reddit/programming,沒多久就登上熱 門第一名: https://www.reddit.com/r/programming/comments/4k1l2o Reddit 廣告效益真的很強,HTTP Prompt 初期的流量都是靠 Reddit 吸引進來的。之後星 星數愈增愈快,幾乎是每一分鐘都就多一顆星,也成功登上 GitHub Trending 第一名,老 婆還幫我拍了一張照片做紀念: http://imgur.com/4zKkv98
Issue 和 pull request 也跟著星星一起來,其中有不少不錯的功能建議,我也陸續加入 ,在後面幾個版本釋出。 開發開源專案是很好玩的,當你知道很多人正在使用你寫的軟體、給你回饋,你會覺得你 在做一件有意義的事。希望這篇文章能鼓勵更多人使用 HTTP Prompt,也能幫助到一些想 參與開源專案的人,當然最好是可以貢獻到 HTTP Prompt :P。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.127.191 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1467888742.A.259.html

07/07 18:55, , 1F
great!
07/07 18:55, 1F

07/07 18:59, , 2F
開源推
07/07 18:59, 2F

07/07 19:07, , 3F
強者
07/07 19:07, 3F

07/07 19:10, , 4F
高手!!
07/07 19:10, 4F

07/07 19:12, , 5F
強者狂推 讓世界看到台灣軟實力
07/07 19:12, 5F

07/07 19:13, , 6F
4000!!!!!!!!!!!!
07/07 19:13, 6F

07/07 19:14, , 7F
推開源
07/07 19:14, 7F

07/07 19:16, , 8F
讚耶 看起來很不錯
07/07 19:16, 8F

07/07 19:20, , 9F
感謝分享經驗談:>
07/07 19:20, 9F

07/07 19:24, , 10F
推分享
07/07 19:24, 10F

07/07 19:27, , 11F
07/07 19:27, 11F

07/07 19:28, , 12F
推!
07/07 19:28, 12F

07/07 19:29, , 13F
07/07 19:29, 13F

07/07 19:31, , 14F
GOD
07/07 19:31, 14F

07/07 19:32, , 15F
07/07 19:32, 15F

07/07 19:36, , 16F
太神啦
07/07 19:36, 16F

07/07 19:37, , 17F
07/07 19:37, 17F

07/07 19:41, , 18F
太神了! 已跪!
07/07 19:41, 18F

07/07 19:48, , 19F
推 有空來用用看 感覺很實用 手打指令超容易打錯的
07/07 19:48, 19F

07/07 19:53, , 20F
07/07 19:53, 20F

07/07 19:54, , 21F
推一個!!!
07/07 19:54, 21F

07/07 20:02, , 22F
太神辣
07/07 20:02, 22F

07/07 20:04, , 23F
好強
07/07 20:04, 23F

07/07 20:07, , 24F
07/07 20:07, 24F

07/07 20:16, , 25F
強者~~!!
07/07 20:16, 25F

07/07 20:21, , 26F
push
07/07 20:21, 26F

07/07 20:26, , 27F
感謝支援
07/07 20:26, 27F

07/07 20:29, , 28F
有在trending看到,原來是台灣人@@! cool
07/07 20:29, 28F

07/07 20:30, , 29F
推強者!
07/07 20:30, 29F

07/07 20:30, , 30F
朝聖!!
07/07 20:30, 30F

07/07 20:33, , 31F
推!Good job!! :-)
07/07 20:33, 31F

07/07 20:49, , 32F
07/07 20:49, 32F

07/07 20:53, , 33F
請問「fork它」是甚麼意思阿 謝謝
07/07 20:53, 33F

07/07 20:56, , 34F
推推推,好強
07/07 20:56, 34F

07/07 20:56, , 35F
太強辣
07/07 20:56, 35F

07/07 20:58, , 36F
07/07 20:58, 36F

07/07 21:00, , 37F
fork意思是拿別人的code改成另一個東西
07/07 21:00, 37F

07/07 21:02, , 38F
沒想到PTT廣告效益也很好,又多了好多星星,感謝鄉民支持
07/07 21:02, 38F

07/07 21:06, , 39F
07/07 21:06, 39F
還有 69 則推文
07/08 19:32, , 109F
07/08 19:32, 109F

07/08 19:40, , 110F
好威
07/08 19:40, 110F

07/08 21:00, , 111F
推~
07/08 21:00, 111F

07/08 21:26, , 112F
推,厲害
07/08 21:26, 112F

07/08 22:12, , 113F
推真強者和分享
07/08 22:12, 113F

07/08 22:13, , 114F
只能推了
07/08 22:13, 114F

07/08 22:24, , 115F
前輩
07/08 22:24, 115F

07/08 23:04, , 116F
07/08 23:04, 116F

07/09 00:16, , 117F
07/09 00:16, 117F

07/09 01:14, , 118F
朝聖
07/09 01:14, 118F

07/09 01:27, , 119F
感謝分享
07/09 01:27, 119F

07/09 01:41, , 120F
推!
07/09 01:41, 120F

07/09 01:48, , 121F
讚~
07/09 01:48, 121F

07/09 08:31, , 122F
07/09 08:31, 122F

07/09 11:22, , 123F
(y)
07/09 11:22, 123F

07/09 13:01, , 124F
推推
07/09 13:01, 124F

07/09 16:06, , 125F
這世界就需要你這種人,哪像老屁股領錢不做事
07/09 16:06, 125F

07/09 19:30, , 126F
已跪
07/09 19:30, 126F

07/10 12:07, , 127F
推分享
07/10 12:07, 127F

07/10 17:24, , 128F
強者,推推
07/10 17:24, 128F

07/11 10:21, , 129F
07/11 10:21, 129F

07/11 13:38, , 130F
這東西的用處應該就只是測試透過HTTP傳輸的API?
07/11 13:38, 130F

07/11 13:39, , 131F
我覺得這CLI很棒,但我想知道是不是有我不知道的用處
07/11 13:39, 131F

07/11 13:52, , 132F
07/11 13:52, 132F

07/11 15:19, , 133F
@lukedoomer 主要用途就是測試HTTP API沒錯
07/11 15:19, 133F

07/11 15:22, , 134F
另一用途是用curl或httpie指令為例告訴別人如何呼叫API
07/11 15:22, 134F

07/11 16:30, , 135F
推神
07/11 16:30, 135F

07/12 08:30, , 136F
07/12 08:30, 136F

07/12 09:13, , 137F
跪著推了
07/12 09:13, 137F

07/14 00:01, , 138F
有神快拜
07/14 00:01, 138F

07/14 11:09, , 139F
朝聖推
07/14 11:09, 139F

07/14 19:13, , 140F
跪了
07/14 19:13, 140F

07/14 21:22, , 141F
推~
07/14 21:22, 141F

07/18 16:26, , 142F
推強者
07/18 16:26, 142F

07/27 01:31, , 143F
來朝聖
07/27 01:31, 143F

11/30 22:26, , 144F
超強的給推!感謝原po的貢獻!!
11/30 22:26, 144F

11/30 23:16, , 145F
高手推推
11/30 23:16, 145F

12/01 21:23, , 146F
朝聖跪
12/01 21:23, 146F

03/01 16:46, , 147F
推推
03/01 16:46, 147F

03/03 14:50, 5年前 , 148F
03/03 14:50, 148F
文章代碼(AID): #1NVZHc9P (Soft_Job)