1 完善GCC環境
- 安裝g++編譯器
命令: sudo apt-get install build-essential
build-essential是一套完整的軟件包,它提供了編譯程序必需的軟件包列表信息,包括gcc,libc
- 安裝詞法和語法分析器
命令:
sudo apt-get install flex
sudo apt-get install bison
- 如果想在ubutun 14.10的64位系統上編譯32位程序
命令:
sudo apt-get install g++-multilib
g++ -m32 -o xxx xxx.cpp //-m32選項將程序編譯成32位的應用
2 配置Vim
參考ma6174的超強vim配置文件,一鍵安裝非常快速,省去了不少配置時間,參考運行截圖:
wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh
主要是掌握它的快捷鍵命令:
a. 多窗口操作
- :sp + 文件名水平分割窗口
- :vs + 文件名垂直分割窗口
- Ctrl+w快速切換窗口
b. Taglist和NerdTree
- F3:快速打開或關閉樹形目錄
- F9:查看當前代碼結構及自動補全
c. 其他
- F5:一鍵運行程序
- F6:代碼格式化
- F8:調試C和C++
- F2:去除代碼中的空行(個人覺得不實用)
3 安裝Sublime text3
3.1 添加Sublime Text3的安裝源,執行更新、安裝
sudo add-apt-repository ppa:webupd8team/sublime-text-3
sudo apt-get update
sudo apt-get install sublime-text
3.2 解決sublime text3無法輸入中文的問題
- 安裝C/C++的編譯環境和gtk、libgtk2.0-dev
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev
- 保存以下代碼到文件sublime_imfix.c
#include <gtk/gtkimcontext.h>
void gtk_im_context_set_client_window (GtkIMContext *context,
GdkWindow *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass = GTK_IM_CONTEXT_GET_CLASS (context);
if (klass->set_client_window)
klass->set_client_window (context, window);
g_object_set_data(G_OBJECT(context),"window",window);
if(!GDK_IS_WINDOW (window))
return;
int width = gdk_window_get_width(window);
int height = gdk_window_get_height(window);
if(width != 0 && height !=0)
gtk_im_context_focus_in(context);
}
- 編譯成共享庫
gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
- 拷貝到/opt/sublime_text目錄下
注意:/opt/sublime_text/不同版本可能有所不同,請調整為自己安裝版本的路徑
sudo cp libsublime-imfix.so /opt/sublime_text/libsublime-imfix.so
- 修改/usr/bin/subl文件,在第一行加入:
export LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so
- 修改sublime-text.desktop
sudo vim /usr/share/applications/sublime_text.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Sublime Text
GenericName=Text Editor
Comment=Sophisticated text editor for code, markup and prose
Exec=/usr/bin/subl %F #這里修改執行路徑為/usr/bin/subl,subl文件剛才已經修改過,大家應該記得
Terminal=false
MimeType=text/plain;
Icon=sublime-text
Categories=TextEditor;Development;
StartupNotify=true
Actions=Window;Document;
[Desktop Action Window]
Name=New Window
Exec=/usr/bin/subl -n #這里修改執行路徑為/usr/bin/subl,subl文件剛才已經修改過,大家應該記得
OnlyShowIn=Unity;
[Desktop Action Document]
Name=New File
Exec=/usr/bin/subl new_file #這里修改執行路徑為/usr/bin/subl,subl文件剛才已經修改過,大家應該記得
OnlyShowIn=Unity;
修改以上三處代碼,保存。Sublime Text 3即可完全正常使用搜狗輸入法輸入中文
3.3 安裝Package Control和一些常用的插件
a. 安裝Package Control
使用Ctrl+~快捷鍵,輸入下面一段代碼:
import urllib.request,os; pf = 'Package Control.sublime-package'; ipp =
sublime.installed_packages_path(); urllib.request.install_opener(
urllib.request.build_opener( urllib.request.ProxyHandler()) );
open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen(
'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())
b. 使用Ctrl+Shift+P輸入Install Package,安裝以下插件
- 解決中文亂碼:GBK Encoding Support(如果文件的編碼方式不被sublime text支持,需要再安裝Codecs33 package,一般問題就解決了),ConvertToUTF8(在創建html文件時有干擾)
- 閱讀源代碼: ctags(需要先安裝ctags)
- 快速開發Web前端代碼:Emmet
- 側欄右鍵功能增強:SideBar + Side Bar Git
- 代碼對齊和自動補齊:Alignment + CodeIntel
- 其他:查找代碼中的錯誤linter
4 安裝Eclipse
4.1 安裝JRE(注:使用對應的JDK也可以)
a. 下載對應的JRE版本,假定是jre1.7
b. 將JRE的解壓子目錄安裝在/opt/java目錄下,執行如下命令
sudo mkdir /opt/java
cd java
sudo tar -zxvf~/Downloads/jre-7u51-linux-i586.tar.gz /opt/java/
c. 將JRE1.7.0作為Java默認的運行時環境
這過程即是告訴系統我這里有一個可用的Java二進制包並且使用此包執行java命令
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jre1.7.0_51/bin/java" 1
sudo update-alternatives --set java /opt/java/jre1.7.0_51/bin/java
最后命令行輸出如下信息表示設置成功:
update-alternatives : using /opt/java/jre1.7.0_51/bin/java to provide /usr/bin/java (java)in manual mode
d. 檢測是否安裝成功,執行java-version
,安裝成功輸出如下信息
java version "1.7.0_51"
Java(TM) SE RuntimeEnvironment (build 1.7.0_51-b13)
Java HotSpot(TM) ServerVM (build 24.51-b03, mixed mode)
e. 如果想在Linux命令行下運行Java程序,同樣也需要配置環境變量
方法一: 修改/etc/profile文件,修改系統級的環境變量,對所有用戶的shell都適用
export JAVA_HOME=/opt/java/jdk1.7.0_51
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
注:
- 選擇安裝的jdk目錄,JAVA_HOME目錄后面不要多添加/,在Linux下用冒號來分割路徑,賦值時變量值前加$符號
- CLASSPATH中當前目錄. 不能丟,利用export將這三個變量導出為全局變量
- 使用source /etc/profile使其生效或注銷重新登陸
- 查看當前的系統變量使用如下命令:
echo $PATH | tr ':' '\n'
方法二: 修改.bash_profile文件,把這些環境變量的權限控制到用戶級別,只允許某個用戶使用這些環境變量,同樣也是在.bash_profile文件末尾添加這三行代碼,再重新登陸
最后一種辦法: 在當前shell中臨時設置變量,退出當前shell后就失效了
f. 補充Windows下配置Java環境
JAVA_HOME=C:\Program Files\Java\jdk\
PATH=%PATH%;%JAVA_HOME%\bin\;%JAVA_HOME%\jre\bin;(一定別忘了分號)
CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
注:
- 在cmd中測試:
javac/java -version
- 運行命令行參數,切到項目運行目錄下:執行
javac xxx.java
java xxx args0 args1 args2
4.2 安裝Eclipse
a. 下載最新的Eclipse版本
b. 解壓文件並置於/opt目錄下:
sudo tar -zxvf eclipse-standard-kepler-SR2-linux-gtk.tar.gz ~/
sudo cp -ar eclipse /opt/
c. 設置Eclipse環境和插件安裝
- 編碼方式
Eclipse下文件的編碼方式:Win下默認為gbk,Linux下默認為utf-8。
同一個系統下開發項目,默認編碼方式最好要保持一致,一般建議為UTF-8,若出現同一項目中不同源文件編碼方式不同,最好用一個轉碼插件設置下(可用notepad++另存為特定編碼格式的文件即可)。
Windows->Workspace ->Text file encoding,最好默認為UTF-8
Windows->Content Type->Text,Java Source file選項的Default encoding可根據不同系統設置為UTF-8,出現中文亂碼可設置為GBK/GB2312/GB18030,再Update
- Color theme插件-配色利器
在Help->Eclipse Marketplace中找到Color theme plugin,下載安裝 。在Window->General->Color Theme中,任選一個主題,個人比較喜歡sublime Text 2
- 比較好用的插件
ExploreFS(右鍵打開文件位置)、Pydev 、CDT、dev-utils
如果C++程序編譯時出現無法解析頭文件等情況,顯示 Unresolved inclusion 。盡管不影響編譯,卻無法定位頭文件中的符號。
它的原因是沒有指定Eclipse的C和C++的目錄,可以通過設定Eclipse中 C_INCLUDE_PATH 和 CPP_INCLUDE_PATH 兩個環境變量指定頭文件目錄。 在 Window -> Preferences -> C/C++ -> Environment
中添加這兩個變量(其中4.8.2是gcc的版本,用gcc --version可以獲得):
C_INCLUDE_PATH 設為 /usr/include
CPP_INCLUDE_PATH 設為 /usr/include/c++/4.8.2
4.3 命令行編譯運行Java程序
a. 編譯生成二進制的class文件,生成xxx.class: javac xxx.java
b. 運行帶main方法的class文件,執行時分帶包和不帶包的
- 不帶包,運行時不帶class后綴名: java xxx
- 帶包,即在類文件中使用了如package com.stdlib.xxx
運行時則需要在包的基路徑src下運行(假設目錄結構是/src/com/stdlib),使用如下命令:
javac ./com/stdlib/xxx.java
java com.stdlib.xxx
- 運行jar文件中的class,只需要加上參數
-cp <jar文件名>
,如下
java -cp <jar文件名> <包名>.xxx
c. 帶參數的命令行
- 常用方法
java classname args[0] args[1] args[2]
- 重定向標准輸入
以讀取data.txt作為標准輸入流- java classname < data.txt
- 重定向標准輸出
將標准輸出流寫入data.txt中- java classname > data.txt
- 管道
將程序的輸出流重定向為另外一個程序的輸出流- java class1 args0 | java class2
如果Javac和Java命令均需要引用jar包呢 ? 例如project項目里面有lib下的jar包,src下的源碼文件,想編譯並運行src下的文件,只需在project目錄下運行如下命令:
javac -classpath ./lib/stdlib.jar:./src/ ./src/BinarySearch.java
java -cp ./lib/stdlib.jar:./src/ BinarySearch args0 args1 <(>) xxx
4.4 Gradle自動化構建簡單實例
5 Node.js開發管理
5.1 源碼安裝Node.js
tar -zxvf node-latest.tar.gz
rm -f node-latest.tar.gz
cd node-v*
./configure
make
sudo make install
Node.js安裝時默認安裝了npm,查看兩者是否安裝成功
charles@charles-t400s:~$ node --version
v0.10.33
charles@charles-t400s:~$ npm --version
1.4.28
5.2 Yeoman、Grunt和Bower
Yeoman : 使用Web開發的最佳實踐方式,為開發者提供一系列健壯的工具、程序庫和工作流,幫助他們快速構建出漂亮、引人注目的Web應用。
它能夠解決哪些前端問題呢?
統一開發團隊代碼風格和開發規范
維護和使用開發的組件庫
模塊化前端項目
服務器部署前是否壓縮?流程如何簡化
它不僅是一個工具,而且也是一個工作流。它由三種核心工具組成,致力於提高你構建Web App時的生產力和滿意度,分別是:
- Yo :腳手架工具,用於搭建新應用的腳手架,編寫你的Grunt配置,提交相關Grunt任務,創建你需要的Bower庫依賴
- Grunt :任務構建工具,用於自動化處理諸如代碼最小化,代碼編譯,單元測試,代碼規范等重復性任務
- Bower :包管理工具,用於包依賴管理,無需手動下載和管理你的腳本,用它可以對庫進行搜索,自動安裝,檢查更新,確保依賴關系等,管理Web站點的各種資源,比如框架,庫,公共部分等
統一安裝:sudo npm install -g yo bower grunt-cli karma-jasmine
檢查是否安裝成功:
charles@charles-t400s:~$ yo -v
1.3.3
charles@charles-t400s:~$ bower -v
1.3.12
charles@charles-t400s:~$ grunt -v
grunt-cli: The grunt command line interface. (v0.1.13)
Fatal error: Unable to find local grunt.
If you're seeing this message, either a Gruntfile wasn't found or grunt
hasn't been installed locally to your project. For more information about
installing and configuring grunt, please see the Getting Started guide:
http://gruntjs.com/getting-started
# 這里需要定位到含Gruntfile的項目目錄下才調用運行已經安裝好的Grunt
# 添加Grunt和插件到現有的一個package.json,在root模式下在項目目錄中本地安裝module
sudo npm install grunt --save-dev
Karma是一個基於Node.js的JavaScript測試執行過程管理工具(Test Runner)。Karma可用於測試所有主流Web瀏覽器,也可集成到CI(Continuous integration)工具
Jasmine是一款 JavaScript BDD(行為驅動開發)測試框架,它不依賴於其他任何JavaScript組件,有干凈清晰的語法,可以很簡單的寫出測試代碼。
5.3 創建一個Angular Web項目
a. 安裝生成器和搭建腳手架
sudo apt-get install ruby ruby-compass # root模式下安裝ruby和compass
sudo npm install -g generator-angular #安裝angular生成器
mkdir angular-hello #創建項目文件夾
yo angular webapp # 搭建一個AngularJs應用程序的腳手架
b. 安裝庫依賴- npm、bower
rm -rf node-modules/ #上面步驟有部分庫沒裝成功,需要root權限,因而需重新安裝
sudo npm install #安裝默認依賴
sudo npm install grunt-karma karma-phantomjs-launcher karma-jasmine --save-dev
bower install && bower install underscore #根據所需從bower中安裝庫
bower install --save-dev xxx
c. Grunt自動化任務
sudo npm install grunt --save-dev #把新版Grunt到你的項目中,並自動添加到你的項目依賴
grunt test #測試你的應用
grunt serve #預覽你的應用
grunt #部署構建你的應用
5.4 持續集成平台-Travis和覆蓋率測試-Coveralls
Travis是一個持續集成(CI)平台,這樣的平台可以提供不同的版本運行環境,例如Node.js程序,可以運行不同的Node.js版本檢測有沒有兼容性問題,這種比手動切換node版再跑一次要方便很多。一般來說travis每次跑測試,都會提供一個基本的Linux環境,如build-essential、wget、git等基礎默認依賴,一旦你的應用在travis平台跑通后,就不需擔心別的用戶安裝不上了。
Github項目連接travis的基本步驟:
a. 注冊Travis(以Github用戶登陸),選擇你需要開啟集成測試的倉庫或者在你的倉庫下Settings - Webhooks & Services - Services
,選擇添加Travis CI服務
服務拿到授權后,每當你push代碼到github上,travis會自動幫你跑測試
b. 構建配置信息.travis.yml
,放在項目根目錄下,由它決定你的測試該怎么運行。是用npm test
還是make test
還是jake test
(以node-hello程序為例)
一個簡單的.travis.yml
文件,如下:
language: node_js
node_js:
- '0.11'
- '0.10'
- '0.8'
before_install:
- npm install -g yo bower grunt-cli
services:
- mongodb
script: make test
c. 項目代碼push到倉庫后,travis就會被觸發了
它要做以下事情:
-
Travis會使用三個不同node.js版本運行程序
-
機器在完成安裝后,會進入項目目錄,根據腳本首先需要安裝全局依賴,然后再根據
package.json
執行npm install
來安裝依賴 -
執行我們指定的測試腳本
-
如果測試通過,返回碼會是0,否則測試有不通過的case,返回碼不會為0,測試失敗。把Travis上面顯示項目目前的測試通過狀態的圖片添加到項目的README中,如
[](https://travis-ci.org/charlesxiong/node-hello/)
5.5 線上部署應用-Heroku、Appfog
Heroku是一種Pass平台,目前支持多種語言環境,無需你配置服務器,數據庫,也不需要理會負載均衡,一切都可在平台上直接獲取。你只需專注於自己的業務,把應用的邏輯寫好,部署到線上,非常適合開發一些demo Web應用。
A. 常規Node.js App,例如Node-hello部署稍微簡單
a. 注冊Heroku,下載Heroku工具包:
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
b. 登陸Heroku並在項目目錄執行:
charles@charles-t400s:~/node-hello$ heroku login
Enter your Heroku credentials.
Email: haojun.xiong2010@gmail.com
Password (typing will be hidden):
Authentication successful.
charles@charles-t400s:~/node-hello$ heroku create
Creating hidden-inlet-5897... done, stack is cedar-14
https://hidden-inlet-5897.herokuapp.com/ | https://git.heroku.com/hidden-inlet-5897.git
Git remote heroku added
c. 創建一個Procfile並把本地的master分支推送到heroku這個遠端地址
Profile的內容:
web: node index.js
推送部署到Heroku中:
charles@charles-t400s:~/node-hello$ git remote -v #查看遠程庫
heroku https://git.heroku.com/hidden-inlet-5897.git (fetch)
heroku https://git.heroku.com/hidden-inlet-5897.git (push)
origin git@github.com:charlesxiong/node-hello (fetch)
origin git@github.com:charlesxiong/node-hello (push)
charles@charles-t400s:~/node-hello$ git push heroku master
Counting objects: 29, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (29/29), 3.03 KiB | 0 bytes/s, done.
Total 29 (delta 10), reused 3 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Node.js app detected
remote: ....
remote: Procfile declares types -> web
remote:
remote: -----> Compressing... done, 5.7MB
remote: -----> Launching... done, v3
remote: https://hidden-inlet-5897.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/hidden-inlet-5897.git
* [new branch] master -> master
d. 查看發布的應用網址:https://hidden-inlet-5897.herokuapp.com/ 或者執行heroku open
B. 部署一個Angular App到Heroku中
5.6 集大成者:開發測試部署運維自動化-Docker
參考Lesson 5: Docker開發環境配置