# extra practice
## 使用oh-my-zsh
* 官網?[http://ohmyz.sh/](http://ohmyz.sh/)
* 代碼?[https://github.com/robbyrussell/oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)
安裝步驟
* 先安裝zsh
* 安裝oh-my-zsh
以后環境變量在~/.zshrc里
## alias
俗稱別名,是一個linux命令
舉例:在git里面我們最常用的命令是查看狀態,可以又太長
于是
~~~
vi ~/.zshrc
~~~
增加如下別名定義
~~~
alias gs='git status'
~~~
source使環境變量生效(如果不想重啟電腦的話)
~~~
source ~/.zshrc
~~~
如果不理解環境變量,自己去閉門思過去
它的作用是讓長命令變短
有個經典說法:“演進就應該像女生的裙子”
## 殺死所有nodejs相關進程
天天寫nodejs的都有這個痛苦,起了太多實例,分不清哪個是哪個
索性都干掉吧
~~~
ps -ef|grep node|awk '{print $2}'|xargs kill -9
~~~
這是非常經典的一條命令
說明
* ps -ef查看進程
* grep node是過濾進程里的和node相關的所有進程
* awk '{print $2}' 取出進程號
* xargs kill -9 殺掉該進程
`|`是pipe,即管道的意思:上一個的輸出,是下一個的輸入
nodejs里stream和pipe是一樣的概念
如此理解變掌握了shell的精髓
“上一個的輸出,是下一個的輸入,組合著用”
每一個命令把它寫到極致
這是unix的哲學
## 命令行查找代碼
ack是一個perl腳本,是grep的一個可選替換品。其可以對匹配字符有高亮顯示。是為程序員專門設計的,默認遞歸搜索,省提供多種文件類型供選。
[http://beyondgrep.com/install/](http://beyondgrep.com/install/)
Ubuntu
* Package "ack-grep"
Mac
* brew install ack
mac下面直接用,linux記得自己alias一下
檢索文本內的key是非常高效的
~~~
? vsc-doc git:(master) ? ack i5ting
extra.md
72:https://github.com/i5ting/awesome-mac-practice2/blob/master/app/Dash.zip?raw=true
preview/index.html
434:<li><a href="http://i5ting.github.io/nodejs-video/node-inspector.mov">node-inspector視頻</a></li>
435:<li><a href="http://i5ting.github.io/nodejs-video/node-debug.mov">node-debug視頻</a></li>
525:<p>這其實和<a href="http://i5ting.github.io/How-to-write-jQuery-plugin/build/jquery.plugin.html#10501">jquery插件里的配置項</a>原理是類似的</p>
1307:<p>詳見 http://i5ting.github.io/vsc-course/ </p>
preview/README.html
434:<li><a href="http://i5ting.github.io/nodejs-video/node-inspector.mov">node-inspector視頻</a></li>
435:<li><a href="http://i5ting.github.io/nodejs-video/node-debug.mov">node-debug視頻</a></li>
525:<p>這其實和<a href="http://i5ting.github.io/How-to-write-jQuery-plugin/build/jquery.plugin.html#10501">jquery插件里的配置項</a>原理是類似的</p>
1307:<p>詳見 http://i5ting.github.io/vsc-course/ </p>
preview/toc/js/ztree_toc.js
2:* https://github.com/i5ting/jQuery.zTree_Toc.js
README.md
313:- [node-inspector視頻](http://i5ting.github.io/nodejs-video/node-inspector.mov)
314:- [node-debug視頻](http://i5ting.github.io/nodejs-video/node-debug.mov)
427:這其實和[jquery插件里的配置項](http://i5ting.github.io/How-to-write-jQuery-plugin/build/jquery.plugin.html#10501)原理是類似的
1266:詳見 http://i5ting.github.io/vsc-course/
~~~
這其實就是全文檢索
其實go寫的[fzf](https://github.com/junegunn/fzf)也很棒
這個命令非常非常常用,尤其是閱讀源碼,或者特別復雜的項目里
## 查詢文檔神器
* [http://zealdocs.org/](http://zealdocs.org/)?(推薦,離線下載)
有很多doc在[dash](https://github.com/i5ting/awesome-mac-practice2/blob/master/app/Dash.zip?raw=true)(mac)里默認是沒有的;
see here :?[http://kapeli.com/docset_links](http://kapeli.com/docset_links)
如果是下載到本地的docset,放到zealdocs目錄下面,需要重啟zeal
* linux 叫zeal
* mac 叫dash
都是基于docset的神器
本地文檔的好處是,盡量少依賴網絡,沒有網也能干活,這是本事
培養自己的獨立思考能力,而不是acv的庸才
## 目錄切換神器
autojump是一個命令行工具,它允許你可以直接跳轉到你喜愛的目錄,而不用管你現在身在何處。
[https://github.com/wting/autojump](https://github.com/wting/autojump)
Linux
~~~
sudo apt-get install autojump
~~~
Mac os
~~~
brew install autojump
~~~
需要修改~/.zshrc里的plugin,修改為
~~~
plugins=(git autojump)
~~~
然后
~~~
source ~/.zshrc
~~~
至此,已經完成了安裝。
此后cd到任意目錄,以后就可以使用j這個直達到某個目錄了,下面是示例:
~~~
? nodejs-newbie git:(master) ? cd ~/workspace/github/nodejs-newbie
? nodejs-newbie git:(master) ? cd ~
? ~ j nodejs-n
/Users/sang/workspace/github/nodejs-newbie
? nodejs-newbie git:(master) ?
~~~
這樣就會跳到上一次cd進去的目錄,是不是非常方便?
我本地有非常多的github上的項目,彼此依賴,就采用這種方式切換,省了不少腦細胞
如果想玩的更high,可以參見[https://github.com/clvv/fasd](https://github.com/clvv/fasd)
## 根據端口號查看進程
nodejs寫web程序,都要起一個端口,反復打開,關閉,就難免有僵尸進程,怎么也殺不掉
只知道端口如何查看進程呢?
lsof是系統管理/安全的工具,列出打開文件(lists openfiles)
~~~
$ lsof -i:3005
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 30438 sang 26u IPv6 0xd9428cd06d17f6af 0t0 TCP *:geniuslm (LISTEN
~~~
3005是端口號
于是衍生一下,根據端口殺進程,比如express默認是3000端口,難免有時有僵尸進程,如果直接根據端口殺死,是不是很爽?
~~~
lsof -i:3005|xargs killall
~~~
全干掉,想不死都不行
再衍生一下,能不能封裝成一個nodejs模塊,端口號作為參數,完成上述功能呢?
于是有了kp
kp is a tool for kill process by server port
我寫的一個模塊,上面就是原理,下面說一下用法
~~~
[sudo]npm install -g kp
kp 3002
~~~
[https://github.com/i5ting/kp](https://github.com/i5ting/kp)
是不是簡單實用呢?
## mongodb客戶端
推薦 www.robomongo.org
* 支持win
* 支持linux
* 支持mac(mac10.10下中文亂碼,需要robomongo v0.8.5+)
這個是最好用的,但是每次啟動都比較麻煩
* mac下面使用quicksilver或spotlit
* linux使用alias rogo='robomongo'
別名alias,有用吧,得學會偷懶
## 使用node-inspector調試Node代碼
上面講了vsc調試nodejs,可是如果你想了解更深的原理
看我寫的三法三例調試教程
[https://cnodejs.org/topic/5463f6e872f405c829029f7e](https://cnodejs.org/topic/5463f6e872f405c829029f7e)
## 使用mongoose-cli數據庫建模
隨時隨地,測試model,融合bluebird等promise庫,讓業務處理更簡單
[https://cnodejs.org/topic/55c44f0db98f51142b367b54](https://cnodejs.org/topic/55c44f0db98f51142b367b54)
## mongo here
如果你同時有多個項目,它們有不同的mongodb,你會哭的,而且又是啟動有特別容易出問題
mongo here就是解決這個問題的
當前目錄啟動mongodb
在新建目錄執行
~~~
mh
~~~
它會創建tmp目錄,然后日志,數據都放到tmp里。
全局啟動mongodb
~~~
mhg
~~~
它會創建~/mongo/目錄,當前用戶下起mongo服務,即用戶下全局共享
[https://github.com/i5ting/mongo-here](https://github.com/i5ting/mongo-here)
核心原理很簡單,寫個shell腳本,執行命令mh的時候執行它就好了
~~~
#! /bin/bash
mkdir -p tmp/db
mkdir -p tmp/pids
mkdir -p tmp/logs
# remove lock file
[ -f tmp/db/mongod.lock ] && rm -rf tmp/db/mongod.lock
touch tmp/pids/mongodb.pid
# mongod --bind_ip 192.168.1.100 --port 27017 --dbpath tmp/db --logpath tmp/logs/mongodb.log --pidfilepath tmp/pids/mongodb.pid
nohup mongod --bind_ip 127.0.0.1 --port 27017 --dbpath tmp/db --logpath tmp/logs/mongodb.log --pidfilepath tmp/pids/mongodb.pid >mongod.log 2>&1 &
~~~
此處是在當前目錄下面建立tmp目錄,所以保證了權限等問題
mhg其實更簡單,就是在用戶主目錄`~`下建
懂shell就是好,可以干很多壞事兒,是不是?
## json editor
我平常經常api,大部分api都是返回json字符串,結構看起來特別惡心
那能不能可視化呢?
~~~
[sudo] npm install -g je
je
~~~
詳見[https://github.com/i5ting/je](https://github.com/i5ting/je)
## nodejs里的csv處理
~~~
[sudo] npm install -g j2csv
json2csv
~~~
詳見[https://github.com/i5ting/json2csv](https://github.com/i5ting/json2csv)
上面給出的方案適合3000條以內的數據,受限于瀏覽器
更大量的數據,需要
~~~
[sudo] npm install -g ej
ej input.json output.csv
~~~
[https://github.com/i5ting/ej](https://github.com/i5ting/ej)
很多時候,實現導入導出,見
[https://github.com/i5ting/i-csv](https://github.com/i5ting/i-csv)
## upload-cli
服務器上有些上傳、刪除的工作,ssh進去之后,操作太麻煩了
于是寫了upload-cli :a node cli tools for uploads ui
[https://github.com/i5ting/upload-cli](https://github.com/i5ting/upload-cli)
* 目前已經支持通過命令行`uci`上傳,可指定host
## 編寫markdown文檔
大部分人都有的需求
* 生成markdown模塊
* markdown編譯成html
* 支持table of content
* 能夠push到git pages上
為了markdown toc,我寫了[https://github.com/i5ting/i5ting_ztree_toc](https://github.com/i5ting/i5ting_ztree_toc)
然后寫了一個nodejs模塊[https://github.com/i5ting/tocmd.npm,用于編譯markdown,按照toc模板編譯](https://github.com/i5ting/tocmd.npm%EF%BC%8C%E7%94%A8%E4%BA%8E%E7%BC%96%E8%AF%91markdown%EF%BC%8C%E6%8C%89%E7%85%A7toc%E6%A8%A1%E6%9D%BF%E7%BC%96%E8%AF%91)
當然,每次發布到gitpages,我很不爽,于是使用gulp里的`gulp-gh-pages`直接自動化
最后我想更懶點
于是就有了[https://github.com/i5ting/docto](https://github.com/i5ting/docto)
一條命令全部搞定
- 前言
- 1 skill
- 1.1 Coding WebIDE
- 1.2 git
- 1.3 extra practice
- 1.4 預習
- 2 nodejs入門
- 2.1 入門
- 2.2 安裝
- 2.3 helloworld
- 2.4 commonJS規范
- 2.5 模塊導出
- 2.6 Nodejs代碼調試
- 2.7 編寫Nodejs模塊
- 2.8 最小化問題
- 2.9 隨堂練習
- 3 異步流程控制
- 3.1 什么時候會用到異步流程控制
- 3.2 簡單做法async模塊
- 3.3 Promise/a+規范
- 3.4 Node.js Promise/a+實現
- 3.5 生成器Generators/yield
- 3.6 Async函數/Await
- 3.7 神奇的co
- 3.8 5種 yieldable
- 3.9 學習重點
- 3.10 隨堂練習
- 4 express和微信開發入門
- 4.1 入門
- 4.2 connect
- 4.3 靜態Http服務器
- 4.4 那些預處理器
- 4.5 路由
- 4.6 視圖與模塊引擎
- 4.7 中間件
- 4.8 更多實踐
- 4.9 微信入門
- 4.10 隨堂練習:完成登錄、注冊功能
- 5 微信實例與H5實踐
- 5.1 微信基礎和sandbox
- 5.2 公眾號菜單和自動回復
- 5.3 微信OAuth用戶授權
- 5.4 微信分享
- 5.5 wechat-api
- 5.6 H5-上篇
- 5.7 H5-下篇
- 5.8 隨堂練習
- 6 weui實戰
- 6.1 使用bower
- 6.2 移動端抽象
- 6.3 優化滑動列表
- 6.4 weui
- 6.5 讓weui和iscroll結婚
- 6.6 優化事件
- 6.7 how-to-write-h5
- 6.8 優化無止境
- 6.9 隨堂練習
- 7 微信支付
- 7.1 吹個牛
- 7.2 支付概述
- 7.3 科普幾個概念
- 7.4 準備
- 7.5 調試
- 7.6 公眾號支付(JSAPI)
- 7.7 對賬單
- 7.8 數據處理
- 7.9 隨堂練習
- 8 項目實戰《付費課程系統MVP》
- 8.1 需求分析
- 8.2 ui/ue
- 8.3 技術棧
- 8.4 模型
- 8.5 靜態api
- 8.6 開發
- 8.7 部署
- 8.8 監控
- 8.9 數據統計
- 8.10 demo
- 9 高級篇
- 9.1 前后端分離實踐?
- 9.2 如何展望未來的大前端
- 9.3 容器和微服務
- 10 答疑問題收集