提交代码前编译

idea很好用,但是不会自动编译代码,需要打开这个类才会检查编译错误。如果修改了代码后出现编译错误,需要手动编译才能发现,有时提交代码前忘了编译,就会将错误代码提交。

可以使用git的pre-commit hook,在提交代码前自动的编译。

1
2
touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

pre-commit文件内容如下:

1
2
3
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
mvn compile test-compile > mvn-compile.log 2>&1
exit $?

其中第一行是可选的,因为我的项目代码和mvn版本决定了必须使用1.7,所以设置了jdk为1.7版本。

第二行中将日志输出到mvn-compile.log,方便查看错误。

第三行的$?是第二行的执行结果,如果编译成功$?为0,编译失败$?不为0。

git 会根据hook的返回结果判断是否继续,返回0表示成功,需要继续,返回非0表示失败,就直接禁止提交。

批量修改照片的EXIF信息

今天将相机中的照片都导入到Mac的Photos中,突然发现这些照片的拍照时间不对,年月日时分秒都不对。并且之前导入的照片都不对,肯定是相机的日期设置的不对。到相机上检查,果然是。那之前的照片也得全部修改了。

第一条路

打开Photos,选中照片,双击时间,会弹出修改时间的界面。但这样只能一个个的修改,不知改到何年何月,并且由于不知道照片的具体拍照时间,还只能自己估摸着改,很是不方便。

第二条路

一个个改不行,那就试着批量改。Google后发现可以用AppleScript脚本批量修改Photos中的照片信息,包括时间。但由于不知道拍照时间,还是只能改个大概。所幸的是,我居然找到一张照片,里面的显示器有电脑的系统时间,那这就好办了,知道了时间差,所有照片的拍照时间就能精确得到了。
照片的错误拍照时间是 2014-01-06 12:55,实际时间是2015-02-05 00:14,那时间差就是394天,11小时,19分,懒得算的可以用这个工具:http://www.timeanddate.com/date/durationresult.html?d1=06&m1=1&y1=2014&d2=05&m2=02&y2=2015&h1=12&i1=55&s1=00&h2=00&i2=14&s2=00

AppleScript脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
tell application "Photos"
activate
set imageSel to (get selection)
set imageCount to (count of imageSel)
repeat with i from 1 to imageCount
tell media item i
set image to item i of imageSel
set image_date to the (date of image) + 394 * days + 11 * hours + 19 * minutes
set date of image to image_date
end tell
end repeat
return "Modify image date successfully."
end tell

使用方式就是打开AppleScript编辑器,输入以上脚本,然后打开Photos,选择要修改的照片,再回到AppleScript编辑器,点运行就好啦!但我使用时发现,速度很慢,大概一秒钟改一两个,并且还不能一次选择很多照片(大概能选择30张左右),不然就报错。有可能是脚本问题,但不知道怎么改了。所以,换路。

第三条路

在Google的过程中,无意发现了jhead这个软件,能修改EXIF信息。查看文档,使用很简单,并且支持多系统。

先安装,在mac下可以通过brew install jhead来安装。Photos中的照片要先导出来,导出时要选择导出未修改的原件。导出后执行以下命令:

1
jhead -da2015:02:05/00:14-2014:01:06/12:55 -ft *.JPG

这个工具异常的方便,-da参数是专门用来对付相机时间不对这个问题的。只要指定一个正确的拍照时间和不正确的拍照时间就好了,都不用你去算时间差,所有的照片都按这个时间差来修改。-ft是修改照片的修改时间为拍照时间,如果创建时间大于拍照时间,也会被修改成拍照时间。完成后导入到Photos就好了,当然,要先删除Photos中有问题的照片。

总结:不能在一棵树上吊死,要多在几棵树上试试。

All done!

使用Nginx作为wordpress的web服务器

服务器: Ubuntu 14.0
需要安装php5-fpm。

1
2
sudo apt-get install nginx
sudo apt-get install php5-fpm

修改nginx配置,在/etc/nginx/sites-available/中增加文件www.xxx.com:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
root /var/www/xxx;
index index.php index.html index.htm;
server_name www.xxx.com;
server_name xxx.com;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}

1
ln -s /etc/nginx/sites-available/www.xxx.com /etc/nginx/sites-enabled/

以上设置完成后就可以安装wordpress了,但过几分钟就不能访问了,报php5-fpm connection timeout,重启php5-fpm又好了,但还是过几分钟就不能访问。要做以下修改:

修改/etc/php5/fpm/pool.d/www.conf,将request_terminate_timeout设置为30s。

1
2
service nginx restart
service php5-fpm restart

剩下的就是安装wordpress了,Google it!。

Intellij Idea配置

user.dir设置

对于包含很多子项目的maven工程,在eclipse下运行单元测试时,user.dir为子项目的路径,但在Intellij Idea下是项目根目录路径,这时就可能出现eclipse找得到文件,在idea下找不到的情况。设置如下:
Run->Edit configurations->Defaults,选择测试工具,比如TestNG或Junit,修改Working directory$MODULE_DIR$
以上是修改默认的测试,对于已有的测试,需要单独修改。

使用Git作为svn的客户端

新公司基本都在用SVN做版本控制,但习惯了git的我,没法喜欢svn,并且公司svn根深蒂固,各个工具平台都和svn结合紧密,很难改用git,还好git够强大,居然能作为svn的客户端,本地操作都是使用git,push到svn服务器还是svn格式的,这样愉悦自己,不影响他人。
下面说下使用方式,具体文档在https://git-scm.com/book/en/v2/Git-and-Other-Systems-Git-as-a-Client

假设svn仓库地址为:http://xxx.xxx.com/svn/projecta ,有trunk和branches/dev分支。

clone到本地

使用git svn clone http://xxx.xxx.com/svn/projecta -s将svn的文件都clone到本地。其中-s表示使用svn的标准目录格式,就是trunkbranchestags,如果不是这种格式,也可以使用-T trunk -b branches -t tags来单独指定。

本地操作

clone到本地后,本地只有一个master分支,对应svn的trunk,如果想切换到其他分支,要先将svn的分支拉出来,再checkout:

1
2
git branch dev remote/origin/dev
git checkout dev

切换后就可以像普通的git仓库一样操作了,如git addgit statusgit commit等。

提交到svn

git commit只是提交到本地,需要执行git svn dcommitpush到svn服务器。

常用操作

  • git svn info:同svn info
  • git svn branch bug1:创建svn分支

Mac常用工具

Homebrew

Mac下必备的软件安装工具,类似于Ubuntu下的apt-get。安装方式:

1
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

安装后,需要运行brew updatebrew doctor
使用方式:brew install wget.

Homebrew Cask

homebrew的扩展,可以安装有图形化界面的软件。安装很简单:brew install caskroom/cask/brew-cask
用它安装软件也很简单,brew cask install xxx就好,介绍几个好用的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 预览插件,可以在Finder中按空格直接预览文件
brew cask install qlcolorcode
brew cask install qlstephen
brew cask install qlmarkdown
brew cask install quicklook-json
brew cask install qlprettypatch

brew cask install quicklook-csv
brew cask install betterzipql
brew cask install webpquicklook

brew cask install suspicious-package

brew cask install gitbook
brew cask install github
brew cask install near-lock
brew cask install dash
brew cask install atom
brew cask install caffeine
brew cask install java
brew cask install qq

brew cask install flashlight
brew cask install dropbox
brew cask install google-chrome
brew cask install sequel-pro
brew cask install tunnelblick
brew cask install hammerspoon
brew cask install sogouinput
brew cask install betterzipql
brew cask install quicklook-json
brew cask install qlimagesize

brew cask install qlstephen
brew cask install qlcolorcode
brew cask install sourcetree

the_silver_searcher

安装方式:brew install the_silver_searcher,文件内容搜索神器,谁用谁知道。

oh-my-zsh

zsh是命令行环境bash的一种替代选择,oh-my-zsh对zsh做了很多扩展,有很多插件和主题,比如git插件能直接显示当前的分支和状态,如下图:
zsh
安装方式:

1
curl -L http://install.ohmyz.sh | sh

安装好后重新打开命令行,就能看到效果了。
zsh的配置文件是~/.zshrc,可以在里面配置theme和plugin。

byobu

by obu是Ubuntu自带的,类似于screen的终端控制工具,可以多tab,多窗口,比screen好用很多。在Mac下需要通过brew安装:brew install byobu,效果如下图:
byobu
F2是新建tab,F3/F4在不同tab间切换。

Vim

vim就不用介绍了,要说的是它的插件管理,使用vundle.
详细安装方式里面介绍很详细。

flashlight

虽然新版OSX的spotlight已经很强大了,但还是有扩展的余地的,于是flashlight诞生了。
介绍几个扩展功能:

  • kuaidi 100033892580可以查快递;
  • gh flashlightgithub flashlight可以搜索github;
  • baidu 阿三可以搜索百度,bing 阿山可以搜索bing;
  • man ls这个太赞了,直接打开man文档;
  • taobao 鞋子搜索淘宝,jd 鞋子搜索京东;
  • visa mastercard amex diners jcb discover hipercard可以生成测试信用卡号;
  • uuid生成uuid;
  • dash each可以查询dash文档;
  • zhihu daily查看知乎日报;
  • 。。。
    通过以上示例就知道这货有多强大了,还有太多功能,也可以自己写扩展。
    Flashlight可以通过brew cask install flashlight安装。
    另外说一点,很多人用mac喜欢把切换输入法的快捷键设置为command+space(貌似是默认的),不过我喜欢设置成shift+command+space,这样就能将spotlight设置成command+space了,最常用的功能要设置成最顺手的快捷键。

Dash

查看文档的利器,可以离线下载各种开发文档,绝对满足你的需求,不过免费版有点恶心,每次查看文档需要等个8秒钟,所以还是花点钱买了吧!价格不高,不超过100¥。

Sublime Text 3

一个很漂亮也很强大的编辑器,其插件很多,安装也很方便,全得益于Package Control,不过需要自己安装,安装方式:
打开Sublime Text,按Ctrl + `,输入以下内容后回车:

1
import urllib.request,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404' + 'e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

安装好后,按Shift+Cmd+P,输入install Package,回车,然后就可以看到很多的插件了,这里推荐几个我常用的:

  • Emmet是web开发人员的福音,可以很方便快捷的编写html/css代码;
  • Markdown Preview提供了markdown文件的预览; Vintage可以在sublime text上使用vim的快捷键,还有其他的插件可以自己找;
  • git
  • darkula主题,Idea IntellIj的主题,黑酷。

如果要在命令行中使用,还需要执行以下命令:

1
ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl

subl --help查看使用方式。

StackEdit

在线的markdown编辑器,功能齐全,支持多种网络存储(dropbox/google drive/Github/Gist/Wordpress/Blogger等).

JSFiddle

在线的代码演示工具。类似的还有CodePen.

Mou

Mac上的Markdown编辑器,国人作品,简洁实用。
Mou

Source Tree

Mac上强大的git图形界面。
Source Tree

Hammerspoon

引用官方文档:

What can it do for me?
You can write Lua code that interacts with OS X APIs for applications, windows, mouse pointers, filesystem objects, audio devices, batteries, screens, low-level keyboard/mouse events, clipboards, location services, wifi, and more.

可以扩展mac的快捷键、控制窗口大小、监控wifi、地理位置等。我的配置:https://github.com/Aaronlong31/hammerspoon-config

Near Lock

Near Lock 可以配合 iPhone 实现自动解锁、上锁 Mac。Near Lock 的使用体验非常棒,你只需把 iPhone 带在身上就可以了,随时打开你的 Mac 都是解锁状态。而当你离开 Mac 又会自动上锁,炫酷的不行。

Terminal

系统自带的terminal基本满足需求,不过还要些许配置:

  • 选择主题为Pro,好看!
  • 可以闪动光标,不然容易找不到光标在哪;
  • 打开键盘tab,勾选使用Option键作为Meta键,这样就可以使用alt + .这样的操作了!

Java

JDK1.7及以上都可以到oracle的官网下载,JDK1.6需要到苹果的官网下载。
下载后配置JAVA_HOME,修改~/.profile,加入以下代码:

1
2
3
# 如果想换成JDK1.7就写1.7,前提是你要先安装;1.6和1.7的安装路径很不一样,这样写切换时就方便多了。
export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
export PATH=$JAVA_HOME/bin:$PATH

还有其他的工具,以后慢慢补充。

ssh-config配置

之前遇到这样的一个问题:我有两个github账号,一台电脑上都要访问这两个账号,都使用ssh key认证方式,该怎么配置ssh?

这里先说说ssh的配置。

ssh的配置文件

ssh client有两个配置文件,/etc/ssh/ssh_config~/.ssh/config,前者是对所有用户,后者是针对某个用户,两个文件的格式是一样的。

ssh配置文件的格式

每一行是一个配置项,如下:

1
2
config value
config value1 value2

也可以使用=号:

1
2
config=value
config=value1 value2

空行和以#开头的行会被忽略;
所有的值是区分大小写的,但参数名不区分。

示例

通常情况下使用ssh连接服务器使用如下命令:

1
ssh username@server.com

这时会默认使用~/.ssh/id_rsa这个密钥,如果想使用不同的密钥则要:

1
ssh -i path/to/id_rsa username@server.com

如果不想每次都指定这些密钥、用户名、服务器地址的话,可以在~/.ssh/config中配置,如下:

1
2
3
4
Host server1
HostName server.com
User username
IdentifyFile path/to/id_rsa

这样就可以简单的使用以下命令:

1
ssh server1

其实就相当于server1是个别名,可以任意取名。

在来看看最开始提出的问题,有两个github账号,这时可以用ssh-keygen生成两个ssh密钥,~/.ssh/id_rsa1和~/.ssh/id_rsa2,~/.ssh/config,每个账号一个,配置如下:

1
2
3
4
5
6
7
8
9
Host github-user1
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa1

Host github-user2
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa2

使用git clone时就用如下命令:

1
2
git clone github-user1:user1/repo.git
git clone github-user2:user2/repo.git

nodejs的配置

nodejs 配置

使用淘宝的NPM镜像:https://npm.taobao.org/

配置

方式一:

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

方式二:

1
2
3
4
alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"

安装npm模块

1
cnpm install [name]

同步模块

1
cnpm sync connect