分类 工具 下的文章

在一个新的环境下安装homebrew

在一个新的环境下安装 homebrew

新装系统时难免会遇到权限的问题,在老版系统下(osx 10.10.* )需要一些权限设置,方式如下:
sudo chown -R $(whoami):admin /usr/local
sudo chown -R $(whoami) /Library/Caches/Homebrew
brew doctor
brew prune
brew update

git标签操作

列出所有标签

git tag

添加标签(同时生成独立的版本库)

# 给当前commit打标签
git tag -a v0.0.1 -m '第一次添加标签'

# 给指定的commit打标签,需要commit的head
git tag -a v0.0.1 0ed1dd07d324cb5aece243a95312187955619fcf

不加 -a 参数相当于是一个commit的引用

将标签推送到远程库

# 推送本地所有标签
git push origin --tags
# 推送指定标签
git push origin v0.0.1

跳转到指定标签

git checkout v0.0.1

和跳转到branch操作一样,但是因为是独立的版本库上,你在独立标签中的git branch和在主线中包含的branch显示的是不同的,独立版本库和分支的性质是不一样的

删除指定标签

git tag -d v0.0.1

删除远程分支

git push origin -d tag <tagname>

使用redis—geo api实现搜索附近的人,自己写的一个composer包

git地址

安装

需要使用composer,安装composer, composer中国镜像

如果是应用在项目当中的话找到根目录,需要和 composer.json同级

composer require gaopengfei/redis_lbs

#基本操作

初始化

require_once __DIR__.'/vendor/autoload.php';
$lbs = new \LBS\Services\LBSService();

添加

$add_params = [
    [
        'name' => 'yabao_road',
        'long' => '116.43620200729366',
        'lat' => '39.916880160714435'
    ],
    [
        'name' => 'jianguomen',
        'long' => '116.4356870231628',
        'lat' => '39.908560377800676'
    ],
    [
        'name' => 'chaoyangmen',
        'long' => '116.4345336732864',
        'lat' => '39.924466658329585'
    ],
    [
        'name' => 'galaxy_soho',
        'long' => '116.4335788068771',
        'lat' => '39.921372916981106'
    ],
    [
        'name' => 'cofco',
        'long' => '116.43564410781856',
        'lat' => '39.92024564137184'
    ],
    [
        'name' => 'fesco',
        'long' => '116.435182767868',
        'lat' => '39.91811857809279'
    ],


];
/**
 * 在集合中新加一个坐标
 * @param array $params
 *  结构是 ['name'=>'xxx','long'=>'1.2321','lat'=>'1.3112']或者[['name'=>'xxx','long'=>'1.2321','lat'=>'1.3112']]
 * @param null $key
 * @return int
 */
$res = $lbs->add($add_params);

返回
int 6

删除

/**
 * 删除集合中指定元素
 * @param $name
 * @param null $key  默认存在集合,可以指定
 * @return int
 */
$res = $lbs->del('gao1');

返回
int 0 或 1


如果是指定的集合名就
$res = $lbs->del('gao1','set-name');

用坐标查询附近的单位

/**
 * 查询范围内元素,如果不转 key就用默认的
 * @param $long     经度
 * @param $lat      纬度
 * @param $radius   范围
 * @param $unit     单位  (仅支持 m,km,ft,mi)
 * @param null $key 集合名
 * @return mixed
 */
$search = $lbs->search('116.435182767868','39.91811857809279',500,'m');

返回数组
array:4 [▼
  0 => array:2 [▼
    "name" => "fesco"
    "dist" => "0.1250"
  ]
  1 => array:2 [▼
    "name" => "yabao_road"
    "dist" => "162.8454"
  ]
  2 => array:2 [▼
    "name" => "cofco"
    "dist" => "239.7758"
  ]
  3 => array:2 [▼
    "name" => "galaxy_soho"
    "dist" => "386.9165"
  ]
]

根据已有的位置查询

/**
 * 根据集合中的元素查询范围内元素,如果不转 key就用默认的
 * @param $name         集合中的元素名
 * @param $radius       范围
 * @param $unit         单位
 * @param null $key     集合名
 * @return mixed
 */
$search = $lbs->->searchByMembers('fesco',500,'m');

返回数组
array:4 [▼
  0 => array:2 [▼
    "name" => "fesco"
    "dist" => "0.1250"
  ]
  1 => array:2 [▼
    "name" => "yabao_road"
    "dist" => "162.8454"
  ]
  2 => array:2 [▼
    "name" => "cofco"
    "dist" => "239.7758"
  ]
  3 => array:2 [▼
    "name" => "galaxy_soho"
    "dist" => "386.9165"
  ]
]

列出集合的所有值(其实就是 zrange)

/**
 * 列出集合中的内容
 * @param $key          集合的key
 * @param int $start    起始位置
 * @param int $end      结束位置 -1 为直到末尾
 * @return array
 */
$list = $lbs->list($test->geoset_name,2,-1);

返回数组
array:6 [▼
  0 => "jianguomen"
  1 => "yabao_road"
  2 => "fesco"
  3 => "cofco"
  4 => "galaxy_soho"
  5 => "chaoyangmen"
]

docker(3) 构建dockerfile

上一章我们用的是 docker commit 命令创建的自己的库,虽然简单但是定制性比较差,因此我们采用另一种且更广泛的做法就是 docker build命令,先上手做个demo

cd $HOME/document/www
mkdir build_demo
cd build_demo
vi Dockerfile

下面是 Dockerfile 中的代码

# Version 0.0.1
FROM gaofeifiy/ubuntu-last
MAINTAINER GPF “5173180@qq.com”
RUN touch /ReadMe.txt
RUN echo 'hey your contain build success!' > /ReadMe.txt
EXPOSE 80

然后在 $HOME/document/www/build_demo 目录下运行

➜  lnmp_docker docker build -t="gaofeifiy/lnmp_server" .
# 下面是显示的
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM gaofeifiy/ubuntu-last
 ---> 6f8cfa1871b0
Step 2 : MAINTAINER GPF
 ---> Running in 3e442a5807f3
 ---> 8d0efc1cf9f7
Removing intermediate container 3e442a5807f3
Step 3 : RUN touch /ReadMe.txt
 ---> Running in 91a7a049d18c
 ---> b98309a7d5a4
Removing intermediate container 91a7a049d18c
Step 4 : RUN echo 'hey your contain build success!' > /ReadMe.txt
 ---> Running in 0158f49fef8f
 ---> 6416fe72ff4c
Removing intermediate container 0158f49fef8f
Step 5 : EXPOSE 80
 ---> Running in 26e1d7df6ab7
 ---> c994cb02df6e
Removing intermediate container 26e1d7df6ab7
Successfully built c994cb02df6e

-t 就是我们新建镜像的标签

接下来我们查看一下本地的镜像列表里出现了什么

➜  lnmp_docker docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
gaofeifiy/lnmp_server   latest              c994cb02df6e        40 hours ago        227 MB
gaofeifiy/ubuntu-last   latest              6f8cfa1871b0        2 days ago          227 MB

我们刚刚创建的镜像已经出现到本地的列表里面了 输入 docker history c994cb02df6e 查看镜像的构建流程

我们回顾一下整个流程:刚才所有的操作都是在 Dockerfile 这个文件中进行的,我们用到以下命令

. FROM gaofeifiy/ubuntu-last 新建的库采用 gaofeifiy/ubuntu-last 这个镜像构建的(就是上一章我们建的那个,因为写这个的时候电脑没网... 其实应该是 ubuntu:16.04 这类的基础镜像)
. MAINTAINER GPF “5173180@qq.com” 指定了该镜像的作者和邮箱
. RUN touch /ReadMe.txt 运行系统命令,创建一个ReadMe.txt 文件 其他的RUN命令欧式同样的道理
. EXPOSE 80 指定镜像对外端口是80

下面介绍一下更多的Dockerfile相关的指令

. ENV 设置镜像中的环境变量 比如 ENV REFRESHED_AT 2017-02-22 设置缓存更新时间
. CMD 和docker run 命令类似,是等容器启动后执行的命令,会被docker run指令干扰 例CMD ["/bin/bash","-l"] 这里推荐使用数组形式,防止出现-c参数的干扰
. ENTRYPOINT 和CMD命令类似,但是不会被docker run的命令干扰,而且会把docker run后的指令当作 ENTRYPOINT的参数来用 例如:ENTRYPOINT ["/usr/sbin/nginx","-g","demon off"] 这条命令和 ENTRYPOINT ["/usr/sbin/nginx"] 加上 docker run -t -i xxx镜像 -g "demon off" 两条语句产生的作用相同
. USER 指定镜像以什么用户去运行,默认是root 也可以docker run -u 来指定用户
. VOLUME 创建一个容器的共享卷,这样的话多个镜像容器公用一套内容,相当于类中的静态变量
. ADD 将本地文件添加到镜像当中,会解压 仅限在以Dockerfile文件为根目录的目录下
. COPY 将本地文件拷贝到镜像当中,不会解压 仅限在以Dockerfile文件为根目录的目录下
. ONBUILD 当其他镜像使用本镜像的时候触发的命令 例如ONBUILD RUN echo 'hello world' 当别的镜像引用到这个镜像的时候就会执行这条命令

go安装godoc

现在的版本(go version 1.8)下,go的开发工具已经都在git上上线了,可以直接安装

git clone https://github.com/golang/tools $GOPATH/src/golang.org/x/tools

go build golang.org/x/tools

就能生成 godoc 的二进制包了,注意需要把第三方的包放到 $GOPATH/src 目录下,这样才能让go能找到并构建