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

作者: eliang   2016-07-07 18:52:09
兩個月前我在 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。
作者: landlord (91)   2016-07-07 18:55:00
great!
作者: Masakiad (Masaki)   2016-07-07 18:59:00
開源推
作者: lensuper (莫三)   2016-07-07 19:07:00
強者
作者: chiwa (我是青蛙,不是王子^_^)   2016-07-07 19:10:00
高手!!
作者: ntddt (滅頂,降公投罷免門檻)   2016-07-07 19:12:00
強者狂推 讓世界看到台灣軟實力
作者: crossdunk (推噓自如)   2016-07-07 19:13:00
4000!!!!!!!!!!!!
作者: SMNOONMS   2016-07-07 19:14:00
推開源
作者: SuM0m0 (Part Time Player)   2016-07-07 19:16:00
讚耶 看起來很不錯
作者: rodion (r-kan/reminder)   2016-07-07 19:20:00
感謝分享經驗談:>
作者: mmm951 (白天天氣好)   2016-07-07 19:24:00
推分享
作者: hSATAC (cAt Ash)   2016-07-07 19:27:00
作者: feeling543 (ifeelings)   2016-07-07 19:28:00
推!
作者: sdf611097 (猶若洗苦)   2016-07-07 19:29:00
作者: max241 (養生之道)   2016-07-07 19:31:00
GOD
作者: cookie1115 (大餅)   2016-07-07 19:32:00
作者: aa06697 (todo se andarà)   2016-07-07 19:36:00
太神啦
作者: y2468101216 (芸)   2016-07-07 19:37:00
作者: minikai (一肚子拐)   2016-07-07 19:41:00
太神了! 已跪!
作者: MoriUmi (森海)   2016-07-07 19:48:00
推 有空來用用看 感覺很實用 手打指令超容易打錯的
作者: jlhc (H)   2016-07-07 19:54:00
推一個!!!
作者: fake01 (假面超人)   2016-07-07 20:02:00
太神辣
作者: Zeusken (Rushken)   2016-07-07 20:04:00
好強
作者: sky75217 (瑞比特)   2016-07-07 20:07:00
作者: TKSHADE (雨怎麼下不停)   2016-07-07 20:16:00
強者~~!!
作者: longlyeagle (長鷹寶寶實驗室)   2016-07-07 20:21:00
push
作者: Aaronter   2016-07-07 20:26:00
感謝支援
作者: Hevak (Arthow Eshes)   2016-07-07 20:29:00
有在trending看到,原來是台灣人@@! cool
作者: chung928 (chung928)   2016-07-07 20:30:00
推強者!
作者: Yshuan (倚絃)   2016-07-07 20:30:00
朝聖!!
作者: bowin (盡其在我)   2016-07-07 20:33:00
推!Good job!! :-)
作者: bab7171   2016-07-07 20:49:00
作者: FLAMEDDD   2016-07-07 20:53:00
請問「fork它」是甚麼意思阿 謝謝
作者: SmileJoS ( O.o)   2016-07-07 20:56:00
推推推,好強
作者: wuliou (wuliou)   2016-07-07 20:56:00
太強辣
作者: vi000246 (Vi)   2016-07-07 20:58:00
作者: eliang   2016-07-07 21:00:00
fork意思是拿別人的code改成另一個東西沒想到PTT廣告效益也很好,又多了好多星星,感謝鄉民支持
作者: A4P8T6X9 (殘廢的名偵探)   2016-07-07 21:06:00
作者: gozule (好冷啊~~)   2016-07-07 21:12:00
open source果然高手如雲
作者: javy0521   2016-07-07 21:16:00
推!
作者: Zarmy (扎米)   2016-07-07 21:22:00
強者推!
作者: nfsong (圖書館我來了)   2016-07-07 21:24:00
作者: FLAMEDDD   2016-07-07 21:24:00
感謝 eliang 解釋
作者: zerofinal (人生~)   2016-07-07 21:34:00
作者: n080925 (Lonely Journey)   2016-07-07 21:40:00
強者請受我一拜!!
作者: tongzhou (路過的小牛)   2016-07-07 21:43:00
推強者
作者: tnav ((''))   2016-07-07 21:48:00
cool
作者: alibuda174 (阿哩不達)   2016-07-07 21:49:00
作者: bobbyho (BobbyHo)   2016-07-07 21:50:00
推 OpenSource
作者: imindflow (imindflow)   2016-07-07 21:53:00
作者: gerojeng (阿樂 - 反省再出發)   2016-07-07 21:55:00
強者
作者: jily (吉利)   2016-07-07 22:14:00
超屌的!!!!
作者: b510336 (風的細語)   2016-07-07 22:35:00
太神啦~
作者: wowna (wowna)   2016-07-07 22:35:00
作者: x4base (RU~)   2016-07-07 22:42:00
朝聖推~~
作者: ThxThx (洗洗睡)   2016-07-07 22:45:00
路過推,太神了...
作者: lulufufu (lulufufu)   2016-07-07 22:46:00
神人推...
作者: Ekmund (是一隻小叔)   2016-07-07 23:02:00
...
作者: yuanyu90221 (菜菜鳥)   2016-07-07 23:03:00
作者: Expsun (無限燃燒)   2016-07-07 23:09:00
作者: descent (「雄辯是銀,沉默是金」)   2016-07-07 23:11:00
作者: fantasystar (小光先生)   2016-07-07 23:17:00
這難道是傳說中的伊亮
作者: abc0922001 (中士abc)   2016-07-07 23:18:00
超強XDDD 開源推fork就是把別人盤子的牛肉夾道自己盤子上
作者: kakahikari (那不是我)   2016-07-07 23:53:00
作者: dali17dali17   2016-07-07 23:57:00
跪了
作者: johnny4753 (Li)   2016-07-08 00:10:00
實在太強拉 拜一下
作者: srxrrr (幹!我是肌董)   2016-07-08 00:14:00
已跪QQ
作者: Ghosso (居關)   2016-07-08 00:31:00
是傳說中的lab學長嗎!
作者: PHEj (Vino)   2016-07-08 00:32:00
太神了 開源推!
作者: takingblue (takingblue)   2016-07-08 00:36:00
太強了!
作者: qrtt1 (有些事,有時候。。。)   2016-07-08 00:50:00
朝聖
作者: markbex (馬克杯)   2016-07-08 00:59:00
作者: hydrogencl (荒費青春)   2016-07-08 01:44:00
github推!
作者: jammy50605 (小刀)   2016-07-08 02:14:00
太神啦
作者: Bright (璀璨的代價)   2016-07-08 02:16:00
神!
作者: retard (Baby baby~~)   2016-07-08 02:57:00
你老婆應該也是搞軟體的~~ 好讚~~
作者: Sean64 (Sean)   2016-07-08 05:03:00
朝聖推 <(__)>
作者: timwu (Tim Wu)   2016-07-08 05:51:00
好久沒在ptt回文啦.. 已star , parsimonious 是 PEG , 不能再叫它 CFG 了, http://go.shr.lc/29DVncS , PEG很輝煌的一役就是唐鳳用parsec幹完perl6, then 真希望 prompt-toolkit可以 port 到 GO 啊
作者: mirage7714 (C'est mon soeur.)   2016-07-08 08:09:00
強者推
作者: janice001 (真理)   2016-07-08 08:37:00
純推
作者: mithuang (阿明)   2016-07-08 09:53:00
還告訴老婆能拿到多少星星XDD,好熱血的感覺!!!
作者: eliang   2016-07-08 09:59:00
@timwu 謝謝指正,大學沒修過編譯器,只在正規語言學過CFG
作者: abola921 (南港金城武)   2016-07-08 10:04:00
作者: decheng (bodhi)   2016-07-08 10:14:00
推呀~!強大~
作者: eva19452002 (^^)   2016-07-08 10:41:00
我連原po一根腳毛都比不上
作者: Argos (Big doge is watching u)   2016-07-08 10:51:00
推推!
作者: terry01333 (terry)   2016-07-08 11:10:00
推!
作者: jenesis (ゼネシス)   2016-07-08 11:16:00
真的 除了專案本身的品質以外宣傳也是很重要的
作者: iamshiao (CircleHsiao)   2016-07-08 11:24:00
作者: jiaming (假命)   2016-07-08 12:26:00
作者: whitglint   2016-07-08 12:31:00
看起來不錯,一定要用用看,給推!
作者: Zatarra ( )   2016-07-08 12:43:00
推!!
作者: hijkxyzuw (i,j,k) ×(x,y,z)   2016-07-08 12:45:00
原來是台灣人推!
作者: smallmac (洨麥克)   2016-07-08 13:05:00
作者: frank11118 (想睡覺)   2016-07-08 13:08:00
強者
作者: ian90911 (xopowo)   2016-07-08 13:16:00
太神啦
作者: andreli (小狗跟正妹是我的死穴)   2016-07-08 13:58:00
推!
作者: tomroy (離題輝。)   2016-07-08 15:13:00
作者: doranako (真愛無限)   2016-07-08 15:37:00
作者: TEMPEST (小民)   2016-07-08 17:21:00
真的太厲害了
作者: popxpopxpop (爆爆爆)   2016-07-08 18:19:00
fork推
作者: wadeabc (潛水夫)   2016-07-08 18:52:00
作者: drinks (資深魯蛇)   2016-07-08 19:24:00
厲害!
作者: promiseone (妄想飛)   2016-07-08 19:32:00
作者: LV999 (封頂)   2016-07-08 19:40:00
好威
作者: tenth ( 哈哈哈)   2016-07-08 21:00:00
推~
作者: netsphere (Ruby&Waku)   2016-07-08 21:26:00
推,厲害
作者: gechenchen92 (誠懇哥)   2016-07-08 22:12:00
推真強者和分享
作者: Sidney0503 (Sidney0503)   2016-07-08 22:13:00
只能推了
作者: kenn7   2016-07-08 22:24:00
前輩
作者: kiki86151 (魯飯)   2016-07-08 23:04:00
作者: easybaby   2016-07-09 00:16:00
作者: enamor753 (enamor753)   2016-07-09 01:14:00
朝聖
作者: polo8214 (ANDY)   2016-07-09 01:27:00
感謝分享
作者: heihei   2016-07-09 01:41:00
推!
作者: bobju (枯藤老樹昏鴉)   2016-07-09 01:48:00
讚~
作者: xdraculax (首席怪叔叔)   2016-07-09 08:31:00
作者: lovdkkkk (dk)   2016-07-09 11:22:00
(y)
作者: O87 (土鬼阝匋阝可!)   2016-07-09 13:01:00
推推
作者: wadeabc (潛水夫)   2016-07-09 16:06:00
這世界就需要你這種人,哪像老屁股領錢不做事
作者: loveisth520   2016-07-09 19:30:00
已跪
作者: shibin (喜餅)   2016-07-10 12:07:00
推分享
作者: aacs0130 (湛靈)   2016-07-10 17:24:00
強者,推推
作者: BlazarArc (Midnight Sun)   2016-07-11 10:21:00
作者: lukedoomer (I want nothing but you)   2016-07-11 13:38:00
這東西的用處應該就只是測試透過HTTP傳輸的API?我覺得這CLI很棒,但我想知道是不是有我不知道的用處
作者: akito117 (宗益)   2016-07-11 13:52:00
作者: eliang   2016-07-11 15:19:00
@lukedoomer 主要用途就是測試HTTP API沒錯另一用途是用curl或httpie指令為例告訴別人如何呼叫API
作者: wanlinlin (wanlinlin)   2016-07-11 16:30:00
推神
作者: andy5564 (笛)   2016-07-12 08:30:00
作者: secondDim ( 祈求備取會上)   2016-07-12 09:13:00
跪著推了
作者: Csy065 (小偉大人)   2016-07-14 00:01:00
有神快拜
作者: supertalker (威哥)   2016-07-14 11:09:00
朝聖推
作者: uly (遊歷)   2016-07-14 19:13:00
跪了
作者: et282523 (不屈鬥志)   2016-07-14 21:22:00
推~
作者: bananayen (Jeff)   2016-07-18 16:26:00
推強者

Links booklink

Contact Us: admin [ a t ] ucptt.com