※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2016-07-09 23:00:30
看板 Soft_Job
作者 標題 [心得] 我如何在 GitHub 上拿到四千顆星
時間 Thu Jul 7 18:52:09 2016
兩個月前我在 GitHub 發表了一個開源專案,發表後一夕爆紅,在一開始的 24 小時內就
得到 1200+ 顆星,目前已累積 4000+ 顆星。這個專案名叫 HTTP Prompt,網址是:
https://github.com/eliangcs/http-prompt
GitHub - eliangcs/http-prompt: HTTPie + prompt_toolkit = an interactive command-line HTTP client featuring autocomplete and syntax highlighting
http-prompt - HTTPie + prompt_toolkit = an interactive command-line HTTP client featuring autocomplete and syntax highlighting ...
http-prompt - HTTPie + prompt_toolkit = an interactive command-line HTTP client featuring autocomplete and syntax highlighting ...
我想在這裡分享一下它的開發故事。
這一切要先從 Vertica 講起。沒多久前我的工作幾乎每天都會使用 Vertica,Vertica
是一個強大的資料庫,但它官方的客戶端程式(vsql)一點都不強大。另一個 GUI 的選擇
DbVisualizer 也是難用到爆。
我就想起 PostgreSQL 那邊有一個叫 pgcli 的好物,我想如果 fork 它,應該不需要太大
功夫就能把它改成 Vertica 版本。最後也如我所想,沒花幾天就寫出了 vcli:
https://github.com/dbcli/vcli
GitHub - dbcli/vcli: Vertica CLI with auto-completion and syntax highlighting
vcli - Vertica CLI with auto-completion and syntax highlighting ...
vcli - Vertica CLI with auto-completion and syntax highlighting ...
我還聯絡了 pgcli 的原作者,告訴他「我用你的東西寫了另一個專案」,他很高興的幫我
在他網站上宣傳。但 Vertica 實在是小眾,所以 vcli 並沒有得到很多注意。但至少有了
vcli,我終於能每天快快樂樂的使用 Vertica 了。
在他網站上宣傳。但 Vertica 實在是小眾,所以 vcli 並沒有得到很多注意。但至少有了
vcli,我終於能每天快快樂樂的使用 Vertica 了。
vcli、pgcli、mycli(for MySQL)其實都是建於一個叫 prompt-toolkit 的 Python 套件
之上。有了 prompt-toolkit 的加持,任何命令列程式因為有了自動完成和語法高亮,都
會變得超酷炫,去它的首頁看看有多少專案使用它就知道了:
之上。有了 prompt-toolkit 的加持,任何命令列程式因為有了自動完成和語法高亮,都
會變得超酷炫,去它的首頁看看有多少專案使用它就知道了:
https://github.com/jonathanslenders/python-prompt-toolkit
GitHub - jonathanslenders/python-prompt-toolkit: Library for building powerful interactive command lines in Python
python-prompt-toolkit - Library for building powerful interactive command lines in Python ...
python-prompt-toolkit - Library for building powerful interactive command lines in Python ...
當時有一陣子工作常會需要連接 HTTP/REST API,這應該也是很多人工作的一部分,我相
信大部分人應該都是用 Postman 這類 GUI 工具,但身為一個什麼都要盡量用命令列介面
的 hacker,用 GUI 實在有點 low,而且跟 terminal 切換起來也不方便。所以我就選擇
使用類似 curl 的 HTTPie。使用 HTTPie 的缺點是常需要打很多重複的字,不像 Postman
會幫你記住之前的狀態,我想如果 HTTPie 或 curl 有互動模式就好了。我調查了一下,
原來早在一年前就有人這麼想了:
信大部分人應該都是用 Postman 這類 GUI 工具,但身為一個什麼都要盡量用命令列介面
的 hacker,用 GUI 實在有點 low,而且跟 terminal 切換起來也不方便。所以我就選擇
使用類似 curl 的 HTTPie。使用 HTTPie 的缺點是常需要打很多重複的字,不像 Postman
會幫你記住之前的狀態,我想如果 HTTPie 或 curl 有互動模式就好了。我調查了一下,
原來早在一年前就有人這麼想了:
https://github.com/jkbrzt/httpie/issues/343
Interactive Shell · Issue #343 · jkbrzt/httpie · GitHub
httpie - CLI HTTP client, user-friendly curl replacement with intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc. ...
httpie - CLI HTTP client, user-friendly curl replacement with intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc. ...
甚至在五年前就有人寫出我心目中理想的工具了:
https://github.com/chrislongo/HttpShell
GitHub - chrislongo/HttpShell: An interactive shell for issuing HTTP commands to a web server or REST API.
HttpShell - An interactive shell for issuing HTTP commands to a web server or REST API. ...
HttpShell - An interactive shell for issuing HTTP commands to a web server or REST API. ...
但 HTTPie 實在設計得太完美讓我不想放棄它,而且 HttpShell 似乎也沒在更新,所以我
也就不考慮使用 HttpShell。
「任何命令列程式受了 prompt-toolkit 加持,都會變得超酷炫」,那我何不站在巨人肩
膀上,結合 HTTPie 和 prompt-toolkit,寫出一個有自動完成和語法高亮的 HTTP client
,不要求使用者放棄完美的 HTTPie,肯定有賣點。
膀上,結合 HTTPie 和 prompt-toolkit,寫出一個有自動完成和語法高亮的 HTTP client
,不要求使用者放棄完美的 HTTPie,肯定有賣點。
於是我開始著手開發 HTTP Prompt,我還告訴我老婆,我這寫完至少會在 GitHub 拿一千
顆星星。我當時不是隨便推算的。因為 pgcli 都有四千多顆星了,用 HTTP 的人一定多過
PostgreSQL,所以如果我執行得好,吸引一千顆星星應該不是問題。
顆星星。我當時不是隨便推算的。因為 pgcli 都有四千多顆星了,用 HTTP 的人一定多過
PostgreSQL,所以如果我執行得好,吸引一千顆星星應該不是問題。
一開始卡最久是我想找出一個完美的寫法,使得自動完成、語法高亮、指令解析三大模組
能用一個統一的 context-free grammar(CFG)解決,但 prompt-toolkit 的作者告訴我
這個想法不切實際:
能用一個統一的 context-free grammar(CFG)解決,但 prompt-toolkit 的作者告訴我
這個想法不切實際:
https://github.com/jonathanslenders/python-prompt-toolkit/issues/276
Completer and lexer based on a context-free grammar? · Issue #276 · jonathanslenders/python-prompt-toolkit · GitHub
python-prompt-toolkit - Library for building powerful interactive command lines in Python ...
python-prompt-toolkit - Library for building powerful interactive command lines in Python ...
所以最終只有指令解析是以 CFG 實做,另兩個模組則分別土法煉鋼。CFG parser 一開始
也讓我有點頭痛,幸虧有人寫了一個現成的 parser:
https://github.com/erikrose/parsimonious
GitHub - erikrose/parsimonious: The fastest pure-Python PEG parser I can muster
parsimonious - The fastest pure-Python PEG parser I can muster ...
parsimonious - The fastest pure-Python PEG parser I can muster ...
讀過 parsimonious 的程式碼,我只能說這套件的作者功力深厚,沒有編譯器或正規語言
的基礎還真寫不出這樣的東西。
prompt-toolkit 已解決大部分的難題,所以除了 CFG 之外就沒什麼特別困難的地方了。
我前後大概花了三個禮拜完成基本功能,即發佈到 Reddit/programming,沒多久就登上熱
門第一名:
我前後大概花了三個禮拜完成基本功能,即發佈到 Reddit/programming,沒多久就登上熱
門第一名:
https://www.reddit.com/r/programming/comments/4k1l2o
HTTP Prompt: An interactive command-line HTTP client featuring autocomplete and syntax highlighting : programming
reddit: the front page of the internet ...
reddit: the front page of the internet ...
Reddit 廣告效益真的很強,HTTP Prompt 初期的流量都是靠 Reddit 吸引進來的。之後星
星數愈增愈快,幾乎是每一分鐘都就多一顆星,也成功登上 GitHub Trending 第一名,老
婆還幫我拍了一張照片做紀念:
星數愈增愈快,幾乎是每一分鐘都就多一顆星,也成功登上 GitHub Trending 第一名,老
婆還幫我拍了一張照片做紀念:
http://imgur.com/4zKkv98
Issue 和 pull request 也跟著星星一起來,其中有不少不錯的功能建議,我也陸續加入
,在後面幾個版本釋出。
開發開源專案是很好玩的,當你知道很多人正在使用你寫的軟體、給你回饋,你會覺得你
在做一件有意義的事。希望這篇文章能鼓勵更多人使用 HTTP Prompt,也能幫助到一些想
參與開源專案的人,當然最好是可以貢獻到 HTTP Prompt :P。
在做一件有意義的事。希望這篇文章能鼓勵更多人使用 HTTP Prompt,也能幫助到一些想
參與開源專案的人,當然最好是可以貢獻到 HTTP Prompt :P。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.127.191
※ 文章代碼(AID): #1NVZHc9P (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1467888742.A.259.html
推 : great!1F 07/07 18:55
推 : 開源推2F 07/07 18:59
推 : 強者3F 07/07 19:07
推 : 高手!!4F 07/07 19:10
推 : 強者狂推 讓世界看到台灣軟實力5F 07/07 19:12
推 : 4000!!!!!!!!!!!!6F 07/07 19:13
推 : 推開源7F 07/07 19:14
推 : 讚耶 看起來很不錯8F 07/07 19:16
推 : 感謝分享經驗談:>9F 07/07 19:20
推 : 推分享10F 07/07 19:24
推 : 強11F 07/07 19:27
推 : 推!12F 07/07 19:28
推 : 推13F 07/07 19:29
推 : GOD14F 07/07 19:31
推 : 強15F 07/07 19:32
推 : 太神啦16F 07/07 19:36
推 : 推17F 07/07 19:37
推 : 太神了! 已跪!18F 07/07 19:41
推 : 推 有空來用用看 感覺很實用 手打指令超容易打錯的19F 07/07 19:48
推 :20F 07/07 19:53
推 : 推一個!!!21F 07/07 19:54
推 : 太神辣22F 07/07 20:02
推 : 好強23F 07/07 20:04
推 : 推24F 07/07 20:07
推 : 強者~~!!25F 07/07 20:16
推 : push26F 07/07 20:21
推 : 感謝支援27F 07/07 20:26
推 : 有在trending看到,原來是台灣人@@! cool28F 07/07 20:29
推 : 推強者!29F 07/07 20:30
推 : 朝聖!!30F 07/07 20:30
推 : 推!Good job!! :-)31F 07/07 20:33
推 : 推32F 07/07 20:49
推 : 請問「fork它」是甚麼意思阿 謝謝33F 07/07 20:53
推 : 推推推,好強34F 07/07 20:56
推 : 太強辣35F 07/07 20:56
推 : 推36F 07/07 20:58
→ : fork意思是拿別人的code改成另一個東西37F 07/07 21:00
→ : 沒想到PTT廣告效益也很好,又多了好多星星,感謝鄉民支持
→ : 沒想到PTT廣告效益也很好,又多了好多星星,感謝鄉民支持
推 : 推39F 07/07 21:06
推 : open source果然高手如雲40F 07/07 21:12
推 : 推!41F 07/07 21:16
推 : 強者推!42F 07/07 21:22
推 : 推43F 07/07 21:24
推 : 感謝 eliang 解釋44F 07/07 21:24
推 : 推45F 07/07 21:34
推 : 強者請受我一拜!!46F 07/07 21:40
推 : 推強者47F 07/07 21:43
推 : cool48F 07/07 21:48
推 : 推49F 07/07 21:49
推 : 推 OpenSource50F 07/07 21:50
推 : 強51F 07/07 21:53
推 : 強者52F 07/07 21:55
推 : 超屌的!!!!53F 07/07 22:14
推 : 太神啦~54F 07/07 22:35
推 : 推55F 07/07 22:35
推 : 朝聖推~~56F 07/07 22:42
推 : 路過推,太神了...57F 07/07 22:45
推 : 神人推...58F 07/07 22:46
推 : ...59F 07/07 23:02
推 : 推60F 07/07 23:03
推 : 推61F 07/07 23:09
推 : 推62F 07/07 23:11
→ : 這難道是傳說中的伊亮63F 07/07 23:17
推 : 超強XDDD 開源推64F 07/07 23:18
推 : fork就是把別人盤子的牛肉夾道自己盤子上
推 : fork就是把別人盤子的牛肉夾道自己盤子上
推 : 猛66F 07/07 23:53
推 : 跪了67F 07/07 23:57
推 : 實在太強拉 拜一下68F 07/08 00:10
推 : 已跪QQ69F 07/08 00:14
推 : 是傳說中的lab學長嗎!70F 07/08 00:31
推 : 太神了 開源推!71F 07/08 00:32
推 : 太強了!72F 07/08 00:36
推 : 朝聖73F 07/08 00:50
推 : 推74F 07/08 00:59
推 : github推!75F 07/08 01:44
推 : 太神啦76F 07/08 02:14
推 : 神!77F 07/08 02:16
推 : 你老婆應該也是搞軟體的~~ 好讚~~78F 07/08 02:57
推 : 朝聖推 <(__)>79F 07/08 05:03
推 : 好久沒在ptt回文啦.. 已star , parsimonious 是 PEG , 不能80F 07/08 05:51
→ : 再叫它 CFG 了, http://go.shr.lc/29DVncS , PEG很輝煌的一
→ : 再叫它 CFG 了, http://go.shr.lc/29DVncS , PEG很輝煌的一
→ : 役就是唐鳳用parsec幹完perl6, then 真希望 prompt-toolkit82F 07/08 06:01
→ : 可以 port 到 GO 啊
→ : 可以 port 到 GO 啊
推 : 強者推84F 07/08 08:09
推 : 純推85F 07/08 08:37
推 : 還告訴老婆能拿到多少星星XDD,好熱血的感覺!!!86F 07/08 09:53
→ : @timwu 謝謝指正,大學沒修過編譯器,只在正規語言學過CFG87F 07/08 09:59
推 : 推88F 07/08 10:04
推 : 推呀~!強大~89F 07/08 10:14
→ : 我連原po一根腳毛都比不上90F 07/08 10:41
推 : 推推!91F 07/08 10:51
推 : 推!92F 07/08 11:10
推 : 真的 除了專案本身的品質以外宣傳也是很重要的93F 07/08 11:16
推 : 推94F 07/08 11:24
推 : 推95F 07/08 12:26
推 : 看起來不錯,一定要用用看,給推!96F 07/08 12:31
推 : 推!!97F 07/08 12:43
推 : 原來是台灣人推!98F 07/08 12:45
推 : 推99F 07/08 13:05
推 : 強者100F 07/08 13:08
推 : 太神啦101F 07/08 13:16
推 : 推!102F 07/08 13:58
推 : 猛103F 07/08 15:13
推 : 推104F 07/08 15:37
推 : 真的太厲害了105F 07/08 17:21
推 : fork推106F 07/08 18:19
推 : 推107F 07/08 18:52
推 : 厲害!108F 07/08 19:24
推 : 推109F 07/08 19:32
推 : 好威110F 07/08 19:40
推 : 推~111F 07/08 21:00
推 : 推,厲害112F 07/08 21:26
推 : 推真強者和分享113F 07/08 22:12
推 : 只能推了114F 07/08 22:13
推 : 前輩115F 07/08 22:24
推 : 推116F 07/08 23:04
推 : 推117F 07/09 00:16
推 : 朝聖118F 07/09 01:14
推 : 感謝分享119F 07/09 01:27
推 : 推!120F 07/09 01:41
推 : 讚~121F 07/09 01:48
推 : 推122F 07/09 08:31
推 : (y)123F 07/09 11:22
推 : 推推124F 07/09 13:01
推 : 這世界就需要你這種人,哪像老屁股領錢不做事125F 07/09 16:06
推 : 已跪126F 07/09 19:30
--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 279
回列表(←)
分享