Archive → June, 2010
PHP Snippet: ip4_in_range
ip 范围检测函数,老生常谈了,贴一下自己造的轮子:
function ip4_in_range ($ip, $start, $end = null) {
if (func_num_args() === 2) {
if (strpos($start, '*') !== false) {
$end = str_replace('*', '255', $start);
$start = str_replace('*', 0, $start);
} elseif (strpos($start, '/') !== false) {
$ip_dec = ip2long($ip);
list($range, $netmask) = explode('/', $start);
$netmask_dec = ~ (pow(2, (32 - intval($netmask))) - 1);
$range_dec = ip2long($range);
return (($ip_dec & $netmask_dec) === ($range_dec & $netmask_dec));
} else {
trigger_error('ip4_in_range: Parameter $start maybe in invalid format.');
return false;
}
}
extract(array_map(function ($ip) {
return (float) sprintf("%u", ip2long($ip));
}, compact('ip', 'start', 'end')));
if ($start > $end) {
list($start, $end) = array($end, $start);
}
return ($ip >= $start && $ip <= $end);
}
只简单的做了几个小测试,都通过了。用法:
- ip4_in_range('10.0.1.13', '10.0.1.0/24');
- ip4_in_range('10.0.1.13', '10.0.1.*');
- ip4_in_range('10.0.1.13', '10.0.1.10', '10.0.1.20');
Ubuntu Installing Note
- 首先保证两个机器位于同一网段。
- 下载必须的文件:http://archive.ubuntu.com/ubuntu/dists/maverick/main/installer-i386/current/images/netboot/ 中的 mini.iso,netboot.tar.gz,pxelinux.0, pxelinux.cfg 文件夹及其下的 default 文件。解压 netboot.tar.gz,注意不要给 netboot.tar.gz 中的 pxelinux.0 和 pxelinux.cfg 覆盖下载回来的同名文件。这里是下载 Ubuntu Maverick,时间不同了可能选择的版本也不同了。
- 下载 TFTPD32 的最新版本:http://tftpd32.jounin.net/tftpd32.html。
- TFTPD32 与前述下载的文件必须存于同一文件夹中。打开后点击 DHCP Server 的选项卡,IP Pool starting address 填入通过 netboot 安装 ubuntu 的机器(Target PC)的 IP,Boot File 填 pxelinux.0,WING/DNS Server、Default Router、Mask 按照实际情况填写,保存。
- 启动 Target PC,注意打开并设定网络启动,然后看看 TFTPD32 中显示的机器 MAC 地址是否 Target PC 的 MAC 地址。多看 Log viewer 中的信息。在文件复制完毕后,在 Target PC 上开始安装 Ubuntu。
- 务必使用 LVM。这次安装的 500GB 硬盘分区方案:
- /boot – 250M, ext2(还会选择其他 filesystem 么?)
- /swap – 3G
- / – 30G, btrfs
- /home – 200G, /ext4
- /var – 分配所有的剩余空间,/ext4
- 修改 /etc/apt/sources.list,
sudo apt-get update && sudo apt-get upgrade sudo apt-get install openssh-server. See also: Top 20 OpenSSH Server Best Security Practicessudo apt-get install mysql-server apache2 libapache2-mod-php5 php5 php5-cli php5-mcrypt php5-curl php5-gd php5-mysql php5-sqlite php-pearsudo apt-get install dnsmasq sysstat
PHP Framework,以及团队
这一次选 Framework 的过程比较简单。Zend Framework 直接忽略,个人感觉它更像一个 toolkits 或者 library。Symfony 的感觉就是 Model 太臃肿,做 ORM 的 Propel 和 Doctrine 实际上都不讨我喜欢,此外通过脚本实现 duplicated 的代码还是放弃罢了。个人感觉写脚本做 script generator 的 framework 就有点过了。考虑 Kohana,但 Singleton 使用过度了,感觉这就不利于做 Unit Test,写 Mock 也会比较困难的感觉;或者可能是自己没有通读 Kohana 源码的关系。暂时用着 Lithium,可能也有不便于测试,或者 Singleton 过多的问题,但目前感觉还是不错的。Lithium 缺少文档,下一步大概就是读一读源码了,不过得看看工作怎么安排是好了。
目前的团队有三个人——忽略“鸡”这个角色。对于实践 Scrum,我并没有底,毕竟自己也是半吊子的水平,对 scrum 的认识仅限于《硝烟中的Scrum和XP》一书。也经过好一段子日子的思考了,打算在接下来的日子,
- 先把使用 Google Calendar 和 Gmail 这两个使用习惯培养起来,
- 然后实践 Daily Scrum Meeting,先从交流和每人能确定自己的工作目标做起。
由于端午节假期,我与另一位团队成员也得回学校处理毕业相关事宜,所以一口气吃成胖子也是不现实的。或者在接下来做的一个外包单子中实践上述的两点。
《Get Things Done》的重读还没有完成。这个星期奔波在旅途中就去了两天(再次来回肇庆-广州),回广州后的第二天就是病了的感觉,也是有气无力地混了一天多。感觉这一周没完成了点什么,看来对产出物的定义还是需要有的。