Soft_Job 板


LINE

兩個月前我在 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。 --
QR Code



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.127.191
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1467888742.A.259.html
1F:推 landlord: great! 07/07 18:55
2F:推 Masakiad: 開源推 07/07 18:59
3F:推 lensuper: 強者 07/07 19:07
4F:推 chiwa: 高手!! 07/07 19:10
5F:推 ntddt: 強者狂推 讓世界看到台灣軟實力 07/07 19:12
6F:推 crossdunk: 4000!!!!!!!!!!!! 07/07 19:13
7F:推 SMNOONMS: 推開源 07/07 19:14
8F:推 SuM0m0: 讚耶 看起來很不錯 07/07 19:16
9F:推 rodion: 感謝分享經驗談:> 07/07 19:20
10F:推 mmm951: 推分享 07/07 19:24
11F:推 hSATAC: 強 07/07 19:27
12F:推 feeling543: 推! 07/07 19:28
13F:推 sdf611097: 推 07/07 19:29
14F:推 max241: GOD 07/07 19:31
15F:推 cookie1115: 強 07/07 19:32
16F:推 aa06697: 太神啦 07/07 19:36
17F:推 y2468101216: 推 07/07 19:37
18F:推 minikai: 太神了! 已跪! 07/07 19:41
19F:推 MoriUmi: 推 有空來用用看 感覺很實用 手打指令超容易打錯的 07/07 19:48
20F:推 dreamnook: 07/07 19:53
21F:推 jlhc: 推一個!!! 07/07 19:54
22F:推 fake01: 太神辣 07/07 20:02
23F:推 Zeusken: 好強 07/07 20:04
24F:推 sky75217: 推 07/07 20:07
25F:推 TKSHADE: 強者~~!! 07/07 20:16
26F:推 longlyeagle: push 07/07 20:21
27F:推 Aaronter: 感謝支援 07/07 20:26
28F:推 Hevak: 有在trending看到,原來是台灣人@@! cool 07/07 20:29
29F:推 chung928: 推強者! 07/07 20:30
30F:推 Yshuan: 朝聖!! 07/07 20:30
31F:推 bowin: 推!Good job!! :-) 07/07 20:33
32F:推 bab7171: 推 07/07 20:49
33F:推 FLAMEDDD: 請問「fork它」是甚麼意思阿 謝謝 07/07 20:53
34F:推 SmileJoS: 推推推,好強 07/07 20:56
35F:推 wuliou: 太強辣 07/07 20:56
36F:推 vi000246: 推 07/07 20:58
37F:→ eliang: fork意思是拿別人的code改成另一個東西 07/07 21:00
38F:→ eliang: 沒想到PTT廣告效益也很好,又多了好多星星,感謝鄉民支持 07/07 21:02
39F:推 A4P8T6X9: 推 07/07 21:06
40F:推 gozule: open source果然高手如雲 07/07 21:12
41F:推 javy0521: 推! 07/07 21:16
42F:推 Zarmy: 強者推! 07/07 21:22
43F:推 nfsong: 推 07/07 21:24
44F:推 FLAMEDDD: 感謝 eliang 解釋 07/07 21:24
45F:推 zerofinal: 推 07/07 21:34
46F:推 n080925: 強者請受我一拜!! 07/07 21:40
47F:推 tongzhou: 推強者 07/07 21:43
48F:推 tnav: cool 07/07 21:48
49F:推 alibuda174: 推 07/07 21:49
50F:推 bobbyho: 推 OpenSource 07/07 21:50
51F:推 imindflow: 強 07/07 21:53
52F:推 gerojeng: 強者 07/07 21:55
53F:推 jily: 超屌的!!!! 07/07 22:14
54F:推 b510336: 太神啦~ 07/07 22:35
55F:推 wowna: 推 07/07 22:35
56F:推 x4base: 朝聖推~~ 07/07 22:42
57F:推 ThxThx: 路過推,太神了... 07/07 22:45
58F:推 lulufufu: 神人推... 07/07 22:46
59F:推 Ekmund: ... 07/07 23:02
60F:推 yuanyu90221: 推 07/07 23:03
61F:推 Expsun: 推 07/07 23:09
62F:推 descent: 推 07/07 23:11
63F:→ fantasystar: 這難道是傳說中的伊亮 07/07 23:17
64F:推 abc0922001: 超強XDDD 開源推 07/07 23:18
65F:推 abc0922001: fork就是把別人盤子的牛肉夾道自己盤子上 07/07 23:24
66F:推 kakahikari: 猛 07/07 23:53
67F:推 dali17dali17: 跪了 07/07 23:57
68F:推 johnny4753: 實在太強拉 拜一下 07/08 00:10
69F:推 srxrrr: 已跪QQ 07/08 00:14
70F:推 Ghosso: 是傳說中的lab學長嗎! 07/08 00:31
71F:推 PHEj: 太神了 開源推! 07/08 00:32
72F:推 takingblue: 太強了! 07/08 00:36
73F:推 qrtt1: 朝聖 07/08 00:50
74F:推 markbex: 推 07/08 00:59
75F:推 hydrogencl: github推! 07/08 01:44
76F:推 jammy50605: 太神啦 07/08 02:14
77F:推 Bright: 神! 07/08 02:16
78F:推 retard: 你老婆應該也是搞軟體的~~ 好讚~~ 07/08 02:57
79F:推 Sean64: 朝聖推 <(__)> 07/08 05:03
80F:推 timwu: 好久沒在ptt回文啦.. 已star , parsimonious 是 PEG , 不能 07/08 05:51
81F:→ timwu: 再叫它 CFG 了, http://go.shr.lc/29DVncS , PEG很輝煌的一 07/08 05:53
82F:→ timwu: 役就是唐鳳用parsec幹完perl6, then 真希望 prompt-toolkit 07/08 06:01
83F:→ timwu: 可以 port 到 GO 啊 07/08 06:01
84F:推 mirage7714: 強者推 07/08 08:09
85F:推 janice001: 純推 07/08 08:37
86F:推 mithuang: 還告訴老婆能拿到多少星星XDD,好熱血的感覺!!! 07/08 09:53
87F:→ eliang: @timwu 謝謝指正,大學沒修過編譯器,只在正規語言學過CFG 07/08 09:59
88F:推 abola921: 推 07/08 10:04
89F:推 decheng: 推呀~!強大~ 07/08 10:14
90F:→ eva19452002: 我連原po一根腳毛都比不上 07/08 10:41
91F:推 Argos: 推推! 07/08 10:51
92F:推 terry01333: 推! 07/08 11:10
93F:推 jenesis: 真的 除了專案本身的品質以外宣傳也是很重要的 07/08 11:16
94F:推 iamshiao: 推 07/08 11:24
95F:推 jiaming: 推 07/08 12:26
96F:推 whitglint: 看起來不錯,一定要用用看,給推! 07/08 12:31
97F:推 Zatarra: 推!! 07/08 12:43
98F:推 hijkxyzuw: 原來是台灣人推! 07/08 12:45
99F:推 smallmac: 推 07/08 13:05
100F:推 frank11118: 強者 07/08 13:08
101F:推 ian90911: 太神啦 07/08 13:16
102F:推 andreli: 推! 07/08 13:58
103F:推 tomroy: 猛 07/08 15:13
104F:推 doranako: 推 07/08 15:37
105F:推 TEMPEST: 真的太厲害了 07/08 17:21
106F:推 popxpopxpop: fork推 07/08 18:19
107F:推 wadeabc: 推 07/08 18:52
108F:推 drinks: 厲害! 07/08 19:24
109F:推 promiseone: 推 07/08 19:32
110F:推 LV999: 好威 07/08 19:40
111F:推 tenth: 推~ 07/08 21:00
112F:推 netsphere: 推,厲害 07/08 21:26
113F:推 gechenchen92: 推真強者和分享 07/08 22:12
114F:推 Sidney0503: 只能推了 07/08 22:13
115F:推 kenn7: 前輩 07/08 22:24
116F:推 kiki86151: 推 07/08 23:04
117F:推 easybaby: 推 07/09 00:16
118F:推 enamor753: 朝聖 07/09 01:14
119F:推 polo8214: 感謝分享 07/09 01:27
120F:推 heihei: 推! 07/09 01:41
121F:推 bobju: 讚~ 07/09 01:48
122F:推 xdraculax: 推 07/09 08:31
123F:推 lovdkkkk: (y) 07/09 11:22
124F:推 O87: 推推 07/09 13:01
125F:推 wadeabc: 這世界就需要你這種人,哪像老屁股領錢不做事 07/09 16:06
126F:推 loveisth520: 已跪 07/09 19:30
127F:推 shibin: 推分享 07/10 12:07
128F:推 aacs0130: 強者,推推 07/10 17:24
129F:推 BlazarArc: 推 07/11 10:21
130F:推 lukedoomer: 這東西的用處應該就只是測試透過HTTP傳輸的API? 07/11 13:38
131F:→ lukedoomer: 我覺得這CLI很棒,但我想知道是不是有我不知道的用處 07/11 13:39
132F:推 akito117: 推 07/11 13:52
133F:→ eliang: @lukedoomer 主要用途就是測試HTTP API沒錯 07/11 15:19
134F:→ eliang: 另一用途是用curl或httpie指令為例告訴別人如何呼叫API 07/11 15:22
135F:推 wanlinlin: 推神 07/11 16:30
136F:推 andy5564: 推 07/12 08:30
137F:推 secondDim: 跪著推了 07/12 09:13
138F:推 Csy065: 有神快拜 07/14 00:01
139F:推 supertalker: 朝聖推 07/14 11:09
140F:推 uly: 跪了 07/14 19:13
141F:推 et282523: 推~ 07/14 21:22
142F:推 bananayen: 推強者 07/18 16:26
143F:推 demo1945: 來朝聖 07/27 01:31
144F:推 tim5104: 超強的給推!感謝原po的貢獻!! 11/30 22:26
145F:推 p90085: 高手推推 11/30 23:16
146F:推 zxc455233: 朝聖跪 12/01 21:23
147F:推 iamten: 推推 03/01 16:46
148F:推 Jason81000: 推 03/03 14:50
149F:推 vvind: 推 05/20 23:19







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP