我們每天都在使用前人開發的各種工具。
一款好的工具能無縫地融入到你的工作環境中,而一款「差」的工具經常須要花費額外的精力才幹整合到你的工作環境中。
(注意:這裡的差是指使用者體驗方面的問題,但這些工具本身還是實用的)。作為project師,我們總是須要開發一些工具給自己或者給別人用。
marius eriksen的這篇文章(
)講了設計unix工具須要注意的地方。
須要說明的是。這篇文章講的是開發unix工具方面的建議,主要是使之能非常好地和經典的unix工具能非常好地整合在一起。所以裡面的建議可能不適用於別的場景。
一、從標準輸入(stdin)中讀取資料。將結果輸出到標準輸出(stdout)。
換種說法,你的工具應該是個過濾器,從而它能非常easy地被整合到shell的管道中去,就能和unix的非常多工具在一起工作了。
二、輸出的結果中最好不要有header或者其它裝飾性輸出
假設使用你工具的人須要解析工具的輸出結果。輸出結果中包括太多這樣的裝飾性輸出會使得解析工作變得複雜。
三、輸出的結果要能easy解析
結果中的每條記錄最好是單行。純文字的輸出,每條記錄中的列用空格或者tab切割(請不要用json格式輸出)。
由於那些經典的unix工具,比方sort。grep。sed都是假定輸入是這樣的格式的。
四、把工具的輸出看成是工具的api
對api來講。非常重要的一點就是要保持其穩定性。假設你的工具的輸出格式變化了的話。其它依賴於你的工具就可能掛掉。
五、把診斷資訊輸出到標準錯誤(stderr)
診斷資訊包含進度資訊,除錯資訊,日誌,錯誤和用法,這些資訊不是你工具的主要輸出資訊。
假設診斷資訊和資料混在一起的話,會使得工具的輸出結果難以解析。
把診斷資訊輸出到stderr的另外乙個優點是,當你對資料進行過濾或者重定向的時候,這些診斷資訊還是會完整地輸出到螢幕上。
六、用退出狀態碼來標記錯誤
假設你的工具執行失敗了,應當把退出狀態碼設為乙個非0值。這使得你的工具可以非常好地和別的指令碼整合在一起。我想這點應該是沒有爭議的。
七、輸出內容中盡量包括完整資訊
輸出內容中不可避免地會包括一些上下文或者環境資訊,比方機器名。檔案路徑等。好的工具的輸出應盡量提供完整的資訊,比方用絕對路徑和fqdn。這樣就僅僅須要少的上下文資訊就能理解輸出內容了。比方,假設輸出包括檔案的相對路徑,那麼就須要知道當前的工作資料夾是什麼才幹知道相應的檔案在**。
八、避免過多沒用的診斷資訊
不要在正常的情況下輸出過多的診斷資訊。假設非要這種話,把診斷資訊輸出到stderr。同一時候放在verbose模式,預設不開啟verbose模式。
九、避免使用者互動
好的工具應當避免使用者互動,這使得工具可以被cron排程,或者在遠端機器上執行。須要互動的工具會很難以地和其它工具整合。假設非要提供互動模式。請也一定提供silent模式。
須要使用者互動的場景可能有讓使用者確認乙個危急的操作。在這樣的情況下能夠讓使用者指定乙個特定的引數,比方git中刪除乙個branch是用git branch -d。
當branch上有commit沒有合併的時候,想要強制刪除分支就要用git branch -d。
能夠看到,上面的建議主要是關注在怎樣使得工具能和別的工具整合在一起是用,怎樣使得工具的輸出能更好地被解析。假設在開發工具的時候考慮這些建議。你的工具會更優秀。
網路推廣人員需要掌握的九大查詢工具
隨著網路推廣意識的不斷加強,越來越多的人開始加入到網路推廣的大軍當中。要想在激烈的競爭中取得勝利,我們網路推廣人員一定要做到 知己知彼 知己,就是深入了解自己 的推廣情況 知彼,就是充分了解競爭對手 的推廣情況。推廣情況是可以通過一些相關資料體現出來的。嶽浩認為網路推廣人員如果能夠掌握以下九大查詢工...
Spring MVC 的九大元件
從名字上看,handleradapter 是乙個介面卡。因為spring mvc中handler 可以是任意形式的,只要能夠處理請求便可。但是把請求交給servlet 的時候,由於servlet 的方法結構都是 doservice httpservletrequest req,httpservlet...
好工具的重要性
所謂工欲善其事,必先利其器。乙個好工具的重要性是不言而喻的,而我也確實的吃了一把壞工具的虧。最近一直在做乙個 的專案,既然是 那乙個好的瀏覽器是很重要的,自己的電腦上用的chrome雖然很好,但也有著一些問題,最明顯的問題就是記憶體占用太多,我4g記憶體的電腦一開啟就占用到50 多開幾個網頁就直往上...