安装Ubuntu 14.10后要做的事(下)—— 开发工具篇

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配置文件,一键安装非常快速,省去了不少配置时间,参考运行截图:

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

注:

  1. 选择安装的jdk目录,JAVA_HOME目录后面不要多添加/,在Linux下用冒号来分割路径,赋值时变量值前加$符号
  2. CLASSPATH中当前目录. 不能丢,利用export将这三个变量导出为全局变量
  3. 使用source /etc/profile使其生效或注销重新登陆
  4. 查看当前的系统变量使用如下命令:
    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;

注:

  1. 在cmd中测试: javac/java -version
  2. 运行命令行参数,切到项目运行目录下:执行
 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就会被触发了

它要做以下事情:

  1. Travis会使用三个不同node.js版本运行程序

  2. 机器在完成安装后,会进入项目目录,根据脚本首先需要安装全局依赖,然后再根据package.json执行npm install来安装依赖

  3. 执行我们指定的测试脚本

  4. 如果测试通过,返回码会是0,否则测试有不通过的case,返回码不会为0,测试失败。把Travis上面显示项目目前的测试通过状态的图片添加到项目的README中,如

[![build status](https://travis-ci.org/charlesxiong/node-hello.svg?branch=master)](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开发环境配置


6 Python开发管理

posted @ 2015-01-08 17:57  charlesxiong  阅读(7928)  评论(0编辑  收藏  举报