mac下添加VIM配色方案

(1)安装vim后,执行命令

whereis vim

你会看到返回结果:vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz

注意:/usr/share/vim 为vim为用户提供的共享数据或设置方案选择

(2) 在你的家目录下创建.vimrc

set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
set expandtab

(3)增加配色方案

首先查看你的系统中自带的有哪些,从(1)中我们知道执行命令  ls -l  /usr/share/vim/vim70/colors/

可以看到

-rw-r--r-- 1 root root 2588 2011-03-06 blue.vim
-rw-r--r-- 1 root root 2809 2011-03-06 darkblue.vim
-rw-r--r-- 1 root root  548 2011-03-06 default.vim
-rw-r--r-- 1 root root 2399 2011-03-06 delek.vim
-rw-r--r-- 1 root root 2812 2011-03-06 desert.vim
-rw-r--r-- 1 root root 1666 2011-03-06 elflord.vim
-rw-r--r-- 1 root root 2476 2011-03-06 evening.vim
-rw-r--r-- 1 root root 3238 2011-03-06 koehler.vim
-rw-r--r-- 1 root root 2460 2011-03-06 morning.vim
-rw-r--r-- 1 root root 2006 2011-03-06 murphy.vim
-rw-r--r-- 1 root root 1037 2011-03-06 pablo.vim
-rw-r--r-- 1 root root 2673 2011-03-06 peachpuff.vim
-rw-r--r-- 1 root root 2174 2011-03-06 README.txt
-rw-r--r-- 1 root root 1239 2011-03-06 ron.vim
-rw-r--r-- 1 root root 2720 2011-03-06 shine.vim
-rw-r--r-- 1 root root 2419 2011-03-06 slate.vim
-rw-r--r-- 1 root root 1627 2011-03-06 torte.vim
-rw-r--r-- 1 root root 1840 2011-03-06 zellner.vim

所以我们知道配色方案的名字有morning,evening,desert等等,

如果我们想要将配色方案改为evening,那么我们只需要在.vimrc中增加一行  colorscheme evening 即可。

(4)如果觉得配色方案太少,可以从外部下载配色方案,这里给出一个网址:

http://vimcolorschemetest.googlecode.com/svn/colors/

你可以使用工具wget下载下来,然后将.vim的文件放入/usr/share/vim/vim70/colors/目录下,然后更改.vimrc即可生效。

linux下安装php7+mysql5.7+nginx

环境:
CentOS7.1 X64
MySQL5.7.10
PHP7.0.4
Tengine/2.1.2 (nginx/1.6.2)

参考:http://blog.haohtml.com/archives/15340

一。安装常用扩展库

sudo yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libevent libevent-devel libcurl libcurl-devel net-tools

sudo yum -y install libmcrypt libmcrypt-devel libaio

如果通过Yum安装不了libmcrypt的话,直接源码编译

wget -O libmcrypt-2.5.8.tar.gz "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?big_mirror=0"
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
sudo make install

添加www用户,php-fpm和nginx统一使用此用户 Continue reading

Git回滚的常用手法

传统VCS的回滚操作

对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求。

如果你是传统VCS,比如SVN或者P4来说,revert是个最直观,也是最直接的手段,当然前提是你的修改还没有被提交到远程的中央仓库。

如果你已经ci了你的code到了远程中央仓库,那revert恐怕也无能为力,只能借助其他命令workaroud这个问题,比如:你用SVN的话,就得来个逆向merge操作,把所有的修改都merge回去。

但这样做也有一些弊端:

这次merge会作为一次全新的commit记录记录下来,也就是说它不能真正从你的历史记录里面抹掉你那次不想要的修改。通常情况下其实也没啥大不了的,除非你个人洁癖就是不想看到以前的那次commit记录或者你真的干了啥不想让别人知道的事情。

Git时代的回滚操作

但当发展到git时代,这种回滚操作的复杂度,已经随着git模型本身的特点,变得不那么简单了。

熟悉git的人都知道,为了分布式的需求,git将每一个网络节点作为了一个完整的VCS,也就是每个单台的host在没有网络的前提下,都是一个不受任何影响可以满足除了和其他节点同步(比如:git pull/push这类)之外的几乎所有操作。

为了达到这种效果,git不仅在本地有一个完整的local repository,而且将原本简单的working tree(或者叫working directory)也切成了两块区域——working tree和index(也叫stage)。

这样,光从本地修改的角度来看,你的修改就可能存在三块区域中,working tree、index或者commit之后的历史对象区域。下面我们一个一个各个区域一般都怎么回滚。 Continue reading

git commit 与 git commit -a 的区别

软件版本:
操作系统:ubuntu10.04
内核版本:Linux version 2.6.32-36-generic
git 版本:git version 1.7.0.4

目录:

1. 文件状态
2. 提交
2.1 git commit 与 git commit -a
2.2 添加提交信息
3. 修改/取消
4. 参考资料

1. 文件状态

一般仓库中的文件可能存在于这三种状态:

1)Untracked files → 文件未被跟踪;
2)Changes to be committed → 文件已暂存,这是下次提交的内容;
3)  Changes bu not updated → 文件被修改,但并没有添加到暂存区。如果 commit 时没有带 -a 选项,这个状态下的文件不会被提交。 Continue reading

golang中chan实例

package main

import "fmt"

func main() {
 data := make(chan int) // 数据交换队列
 exit := make(chan bool) // 退出通知

go func() {
 for d := range data { // 从队列迭代接收数据,直到 close 。
   fmt.Println(d)
 }

 fmt.Println("recv over.")
 exit <- true // 发出退出通知。
}()

data <- 1 // 发送数据。
data <- 2
data <- 3

close(data) // 关闭队列。

fmt.Println("send over.")

<-exit // 等待退出通知。
}

输出结果:

1
2
3
send over.
recv over.

而如果将上面与 exit chan有关的三行删除掉,则结果为:

1
2
3
send over.

缺少了“recv over."一行,为什么?

大家可以  time.Sleep(time.Second * 2) 来自己分析一下

golang中chan的理解与使用教程

对于 chan 介绍见:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.7.md

这里我们主要通过实例来介绍对chan的理解及用法.

无Buffer的Channels

实例1:

func main() {
ci := make(chan int)

ci < - 4

value := <-ci
fmt.Println(value)
}

执行结果错误为:

fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:

从上面“fatal error: all goroutines are asleep - deadlock!” 这句我们可以看出是groutings 阻塞了,这里为写阻塞,从“goroutine 1 [chan send]”可以看出来。 Continue reading

Dev with Vagrant and Docker

前言

为了在团队里搭建统一的本地开发环境,最近花了点时间用了下vagrant和docker,在此做个记录, 这也算一个DevOps的实践。


Vagrant介绍

Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。

我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。

以上介绍直接抄自网络,我觉得介绍的很到位。 Continue reading

golang中flag包的用法

golang中flag包主要用来CLI下,获取命令参数,示例如下mysql.go:

package main

import (
"flag"
"fmt"
)

func main() {
host := flag.String("h", "localhost", "请指定一个主机")
user := flag.String("u", "root", "请指定数据库用户")
port := flag.Int("P", 3306, "Port number to use for commection or 0 for default to, in port 3306")

//var name string
//flag.StringVar(&name, "u", "root", "请指定用户名") 

flag.Parse() //参数解析

fmt.Println("主机地址:", *host)
fmt.Println("用户名:", *user)
fmt.Println("端口:", *port)
}

像flag.Int、flag.Bool、flag.String这样的函数格式都是一样的,第一个参数表示参数名称,第二个参数表示默认值,第三个参数表示使用说明和描述。flag.StringVar这样的函数第一个参数换成了变量地址,后面的参数和flag.String是一样的。

使用flag来操作命令行参数,支持的格式如下:

-id=1 go run mysql.go -h="127.0.0.1" -u="sxf" -P=3307 
--id=1: go run mysql.go --h="127.0.0.1" --u="sxf" --P=3307 
-id 1:  go run mysql.go -h "127.0.0.1" -u "sxf" 
--id 1:  go run mysql.go --h "127.0.0.1" --u "sxf" --P 3307

还是非常方便的。

这里不指定参数的情况,会使用默认值:

go run mysql.go

 

fatal error: 'php.h' file not found 错误的解决办法

今天在MAC下安装Swoole扩展的时候(https://github.com/swoole/swoole-src),提示

In file included from /Users/sxf/Downloads/swoole-src/swoole.c:19:
./php_swoole.h:22:10: fatal error: 'php.h' file not found
#include "php.h"
^
1 error generated.
make: *** [swoole.lo] Error 1

错误。解决办法如下:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include /usr/include

这里注意一下,你使用的系统版本号。

*注意MacOSX10.10.sdk修改为自己系统的版本号*

另外也有可能遇到提示 pcre.h 找不到,直接安装一下即可 brew install pcre,参考: http://blog.csdn.net/rsp19801226/article/details/44590803

 

mac下常用工具箱

1.用iTerm2来代替系统自带的终端.可以安装 iTerm2 + zsh + Oh My Zsh 三种组合。http://macshuo.com/?p=676

2.安装Homebrew,一般用来代替LINUX下的YUM apt-get这种在线安装工具。http://brew.sh/index.html

3.安装Git图片客户端 SourceTree。https://www.sourcetreeapp.com

4.安装MySQL管理工具Sequel Pro。http://www.sequelpro.com

5.文本编辑器除了VIM,还推荐 SublimeAtom

6.开发者快速文档查询工具 Dash,非常有用。https://kapeli.com/dash

7.使用效率工具Alfred,比系统自带的 spotlight 强多了。http://www.alfredapp.com

8. http抓包工具charles http://blog.csdn.net/jiangwei0910410003/article/details/41620363, 最新版本为10.3.2。破解版从网上下载,但替换的文件路径有些变化。打开应用程序,选择Charles, 右键选择显示包内容,找到文件目录 Contents->Java(并不是 Contents->Resources->Java )替换掉charles.jar文件即可。安装SSL的时候,在手机上打开Safari浏览器,打开网址 http://www.charlesproxy.com/getssl ,然后安装SSL证书即可。