末日前几天

the days before Doomsday

How to Use Xdebug and LLDT to Debug Your PHP Code With Vagrant and PHPStrom

主要用到的软件

  • PhpStorm PHP 开发 IDE
  • Xdebug PHP debug 插件
  • Xhprof Facebook 出品的 PHP 性能测量插件
  • LLDT-chrome-plugin 自己写的一个 Chrome 浏览器插件,集成了xdebugHelper,并添加了更多的选项。
  • Vagrant 一款可以管理 VirtualBox 虚拟机的软件。
  • VirtualBox 一款夸平台的虚拟机软件。
  • Nginx web 服务器软件(运行在虚拟机中)
  • PHP-FPM php 运行管理(运行在虚拟机中)

配置git使用proxy

Git 目前支持的三种协议 git:// ssh:// http://https://

其代理配置各不相同.
(1) core.gitproxy 用于 git:// 协议
(2) http.proxy 用于 http:// 协议
(3) ssh:// 协议的代理需要配置 ssh 的 ProxyCommand 参数

(一) 针对GIT 协议(git://)配置代理

git 协议配置代理可以有两种方式,但是都是需要安装软件: socat
(1) Debian/Ubuntu just sudo apt-get install socat
(2) CentOS use yum install epel source yum -y install socat
(3) Mac OS: brew install socat

1. Git Through A HTTP Proxy

让 git 走 HTTP 代理需要创建 gitproxy.sh 脚本,然后赋予可执行权限: 参考的这个文章

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
# Use socat to proxy git through an HTTP CONNECT firewall.
# Useful if you are trying to clone git:// from inside a company.
# Requires that the proxy allows CONNECT to port 9418.
#
# Save this file as gitproxy somewhere in your path (e.g., ~/bin) and then run
# chmod +x gitproxy
# git config --global core.gitproxy gitproxy
#
# More details at http://tinyurl.com/8xvpny

# Configuration. Common proxy ports are 3128, 8123, 8000.
_proxy=proxy.yourcompany.com
_proxyport=3128
_proxyauth=username:password

exec socat STDIO PROXY:${_proxy}:$1:$2,proxyport=${_proxyport},proxyauth=${_proxyauth}

然后配置 git 使用这个代理, 在 ~/.gitconfig 文件里写入:

1
2
3
[core]
    gitproxy=gitproxy.sh for github.com
    #man git-config 查看 core.gitproxy 部分,关于 for * 的说明

2. Git Through A SOCKS Proxy (or SSH Tunnel)

参考的这篇文章

第一步: 使用 ssh开启一个socks 代理.

1
2
ssh -nNT -D 8119 remote.host
#This command starts a SOCKS v4 proxy listening on localhost, port 8119.

第二步: 创建一个新的 gitproxysocks.sh 脚本,并赋予可执行权限.

1
2
3
4
5
6
7
8
9
#!/bin/sh
#
# Use socat to proxy git through a SOCKS proxy.
# Useful if you are trying to clone git:// from inside a company.
#
# See http://tinyurl.com/8xvpny for Emil Sit's original HTTP proxy script.
# See http://tinyurl.com/45atuth for updated SOCKS version.## Configuration.
_proxy=localhost_proxyport=8119
execsocat STDIO SOCKS4:$_proxy:$1:$2,socksport=$_proxyport

第三步: 配置 git 使用这个脚本,可以像上面那样写入到配置文件 ~/.gitconfig 中,也可以配置 GIT_PROXY_COMMAND 环境变量, git 获取数据时会检查这个环境变量.

1
export GIT_PROXY_COMMAND=gitproxysocks.sh

(二) 针对HTTP 协议(http://)配置代理

配置 git 对 http:// 协议开头的仓库使用 http 代理,可以直接编辑 ~/.gitconfig 文件.

1
2
[http]
    proxy = http://proxy.yourcompany.com:8080

或者,可以通过下面的脚本直接设置 http_proxyhttps_proxyall_proxy 环境变量。 把下面的脚本保存为 http_proxy.sh ,并在 ~/.bashrc 或者 ~/.zshrc 里加入 source /path/to/http_proxy.sh, 这样在想使用 proxy 时,运行 http_proxy_enable 命令就可以了,取消时运行 http_proxy_disable

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
http_proxy_enable() {
    IP="http://username:password@proxy.yourcompany.com:8080"
    export http_proxy=$IP
    export https_proxy=$IP
    export all_proxy=$IP
}

http_proxy_disable() {
    unset http_proxy
    unset https_proxy
    unset all_proxy
}

(三) 针对SSH 协议(ssh://)配置代理

使用 ssh 的好处就是在 clone 数据,或者提交数据到 github.com 时,不用在输入 github 的帐号密码.
下面是 ssh 的设置,打开 ~/.ssh/config 输入 :

1
2
3
4
5
6
Host github*
    User git
    Hostname github.com
    Port 22
    Proxycommand ssh root@proxy.yourcompany.com nc %h %p
    IdentityFile  ~/.ssh/id_rsa

检测 Linux 服务器硬件资源的 Bash 脚本

最近公司要做机房的机器整理,把空闲的机器撤下来.

这样就需要列一个机器硬件配置的列表,就写了一个 bash 脚本来做检查,先for 循环自动 scp 到目标机器, 然后 for 循环自动 ssh 登录进所有的机器运行这个脚本.

输出的格式位 markdown, 可以很容易转换成 html 的 table .或者改一下脚本的输出格式为cvs, 到这个网站生成表格.

目前可以检查的资源有: 包含服务器的型号, U 数, Dell 序列号, 内存数, 最大内存数, 可以插的内存条数, 已经用的内存条数, 内存类型, 硬盘大小, CPU 信息.

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
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

ISINSTALLED_D=$(rpm -qa |grep dmidecode)

if [ -z $ISINSTALLED_D ]; then
  yum -y install dmidecode
fi

export PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
NUM=$1
NUM=${NUM:=0}
ISSHOW_DES=$2
ISSHOW_DES=${ISSHOW_DES:=0}

U_NUM=$(dmidecode -t chassis |grep Height:|cut -d : -f 2)
U_NUM=${U_NUM// /}
PRODUCT=$(dmidecode -t system|grep Product|cut -d : -f 2|  sed -e 's/^[ \t]*//')
SERIAL=$(dmidecode -t system|grep Serial|cut -d : -f 2|  sed -e 's/^[ \t]*//')
HOSTNAME=$(hostname | cut -d . -f 1)
MEM=$(free -o|cut -c 1-20|grep -vi "swap"|grep Mem|cut -d : -f 2|sed -e 's/^[ \t]*//')
MEM=$(echo "$MEM 1000000" | awk '{printf "%.1fGB", $1/$2}')
MEM_MAX_CAPACITY=$(dmidecode -t memory|grep "Maximum Capacity"|cut -d : -f 2)
MEM_MAX_CAPACITY=${MEM_MAX_CAPACITY// /}
MEM_NUM_OF_DEV=$(dmidecode -t memory|grep "Number Of Devices"|cut -d : -f 2)
MEM_NUM_OF_DEV=${MEM_NUM_OF_DEV// /}
MEM_NUM_OF_DEV_USED=$(dmidecode -t memory|grep "Speed: Unknown"|wc -l)
MEM_NUM_OF_DEV_USED=$(($MEM_NUM_OF_DEV - $MEM_NUM_OF_DEV_USED))
MEM_TYPE=$(dmidecode -t memory|grep "Type: "|tail -1|cut -d : -f 2)
MEM_TYPE=${MEM_TYPE// /}
DISK_SIZE=$(fdisk  -l  2>/dev/null | grep GB |cut -d , -f 1|cut -d : -f 2|sed -e 's/ //g')
DISK_SIZE=$(echo $DISK_SIZE|tr ' ' '+')
CPU=$(cat /proc/cpuinfo |grep CPU|head -1|cut -d : -f 2 | sed -e 's/^[ \t]*//')
CPU=${CPU// /}
CPU=${CPU//@/ }
CPU_NUM=$(cat /proc/cpuinfo |grep CPU|wc -l)
CPU_INFO="$CPU * $CPU_NUM"

if [ "${ISSHOW_DES}0" != "00" ]; then
  echo "|ID|服务器名|服务器型号|U数|DELL序列号|内存数|最大内存|总内存槽数|已经内存槽数|内存类型|硬盘大小信息|CPU 信息汇总|"
  echo "|--|------|--------|---|---------|-----|------|---------|----------|------|----------|----------|"
fi
echo "|$NUM|$HOSTNAME|$PRODUCT|$U_NUM|$SERIAL|$MEM|$MEM_MAX_CAPACITY|$MEM_NUM_OF_DEV|$MEM_NUM_OF_DEV_USED|$MEM_TYPE|$DISK_SIZE|$CPU_INFO|"

Hi Octopress

完成了 Blog 由 Wordpress 转向 Octopress 的迁移 我的 Blog 的迁移轨迹是 CSDN –> Wordpress –> Octepress 由于 CSDN 上面没有什么有用的文章我就没有迁移过来, Wordpress 的代码共享功能没有 Octepress 好用, 所以最终选择了 Octepress。

Github Pages 对用户使用 master 分支作为 http://username.github.io 网站的公共目录。因此,你需要在 source 分支上对你的 blog 源代码编辑,然后 commit 生成的内容到 master 分支上。

用Ruby增强ping命令

故事的起因是,我在mac下一直用chrome,但是chrome有一个很不爽的地方,是在地址栏copy的域名,每次都自动的加上http://的字符串,这样就没有办法直接粘贴到 Terminal, 用ping命令查看ping值。 这个事情真的弄的我很头疼。

所以就想办法关掉这个chrome的特性,google了半天也也没有找到,就放弃了。如果有人知道告诉我,十分感谢 :)

转而想可不可以增加 ping 的功能呢? 让ping可以支持有http://的域名。

正好,最近再看 ruby 的一些东西,感觉蛮方便的。就写了一个ruby脚本,可以自动的去掉http之类的协议头,然后传给ping命令执行。不就ok了嘛。

写出来之后,又不爽不能及时的知道 ip 的地理位置,所以呢,就又增加了调用纯真的 ip 数据库,顺便把ip的地理位置信息现实出来。

第一步,安装所需要的依赖库,qqwry.dat 自己下载,然后改脚本里的路径信息。

1
gem install escape qqwry

下面的代码我是另存为一个叫 p 的文件,放到了 $home/bin/ 下面。

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
#!/usr/bin/env ruby
# encoding : utf-8
require "escape"
require "uri"
require 'qqwry'
require 'resolv'

unless ARGV.length == 1
  puts "Usage: p <domain>\n"
  exit
end

domain=ARGV[0].dup


if domain[0..3] != "http"
   domain.insert(0,'http://')
end
host=URI.parse("#{domain}").host
ip=Resolv.getaddress host

db = QQWry::Database.new('/Users/yourname/Documents/vbox/ip/qqwry.dat')
r = db.query(ip)

puts ""
puts "#{host}\t===>\t#{ip}\t===>\t#{r.country} #{r.area}"
puts ""
exec "ping #{host}"

使用方法:

1
p http://www.google.com

脚本虽然很简单,但是用起来感觉很好。

我的Evernote笔记

最近发生了很多事情,刚刚从未来的丈母娘那里回来.

没有什么主要的技术文章,就发一些自己平时积累的Evernote的笔记.

★★★ 虚拟机开发环境的搭建利器vagrant vagrant是一个创建和分发虚拟化开发环境的工具,使用ruby编写,基于Oracle的VirtualBox,它提供了一个可配置的、轻量级的、可重用的、便携的虚拟化开发环境.

★★★ Git的学习笔记

★★ Pow 相关笔记 Pow是一个Rack Server for Mac OS X.

★★★ 读Postfix权威指南笔记

简单的机器资产管理,machineBill

原来的公司因为有多台机器资产管理的需求,特意写了一个台账系统,用的是jQuery EasyUI + PHP + Mysql,制作的极其简单,主要是用jQuery EasyUI的练手之作。

现在看来是没有用了。公布出来方便以后自己用的着的时候查询。

已经发到了 github 上。

并安装到了BBkanba上了一个Demo。
http://bill.bbkanba.com.

关于开发Squid的ecap动态库插件的指导

“Squid cache"(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。 Squid 有广泛的用途,从作为网页服务器的前置 cache 服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在 Unix 一类系统运行。

上面是摘自开源中国(oscine.net)对squid的中文介绍。squid的功能的确很强大,有些需要深入挖掘一下,今天这篇文章主要讲述一下这几天研究成果。squid 做透明代理或者网关的情况下,过滤用户请求内容,或者过滤用户请求的回应内容的技术。可以把 squid 当做一个理论上的“防火墙”来使用,避免用户浏览非法网站或下载带有病毒的文件(结合开源杀毒软件功能),甚至替换掉那些烦人的广告。当然,它还可以在服务器的返回结果中植入自己的广告代码,或者统计代码,最灵活的是可以控制操作用户请求的 HTTP 头内容,过滤不必要的 HTTP 头信息,或者添加自定义HTTP头信息。

总之,我们可以利用 squid 分析,捕捉,拦截,替换,或者修改请求回应信息。

Squid 拥有强大的ACL(访问控制)配置指令,可以实现一些通用的访问控制,但是如果想要更加灵活的控制,应该怎么办? 在官网wiki中(Content Adaptation)给出了答案.

Xcode编译的app程序打包为ipa文件

正确的方法是利用Xcode,The right way is –>“Xcode menu” –> Project –> Archive –> “Xcode menu Window” –> “Organizer” –> “Organizer – Archives” –> Distribute –> “Save for Enterpirs of Ad-Hoc Deployment” –> next –> ***.ipa –> done.