2009/08
6
【转】高级PHP应用程序漏洞审核技术
Converting from Subversion to Mercurial
三种流行操作系统的内核比较
Serendipity 1.5 beta 1 This blog is using s9y 1.5 now.
Converting from Subversion to Mercurial
三种流行操作系统的内核比较
Serendipity 1.5 beta 1 This blog is using s9y 1.5 now.
Last modified on 2009-08-25 13:54
2009/07
8
2009/06
1
购物搜索的前景分析
Google购物搜索 Google的中文版终于推出了。不知道会带来什么影响。。。
Displaying row number (rownum) in MySQL
A B2B site for Telecommunication Products and Companies
16 PHP Frameworks To Consider For Your Next Project
Google购物搜索 Google的中文版终于推出了。不知道会带来什么影响。。。
Displaying row number (rownum) in MySQL
A B2B site for Telecommunication Products and Companies
16 PHP Frameworks To Consider For Your Next Project
Last modified on 2009-06-11 00:41
2009/04
25
用途: 当业务需要调用一个比较耗时外部资源时使用, 最常见的是从外部API获取相关内容
使用方法:
1. 建立外部资源脚本。 如示例中使用t.sh。 当然, 也可以直接使用curl等命令行
2. 准备好参数, 提供给pipe脚本
2. 使用popen调用脚本。 调用之后,就不用关心了。
3. 开始其他的和pipe不相关的逻辑处理
4. 其他处理完成之后, 使用fgets等方式,获取popen的数据
示例代码:
php程序:
pipe脚本:
输出如下:
代码方面, 我们有三个sleep。
php中一个 sleep 5,
sh中两个sleep, 10+1
如果使用串行的方式, 那么用时应该是10+1+5 = 16秒。
而使用pipe方式, 用时仅为:max(php, pipe) = max(5,11) = 11秒。
PS:很抱歉,空间服务商看起来不喜欢popen这个字眼, 所以只能将起替换成全角的了。请在使用时,替换一下吧:)
使用方法:
1. 建立外部资源脚本。 如示例中使用t.sh。 当然, 也可以直接使用curl等命令行
2. 准备好参数, 提供给pipe脚本
2. 使用popen调用脚本。 调用之后,就不用关心了。
3. 开始其他的和pipe不相关的逻辑处理
4. 其他处理完成之后, 使用fgets等方式,获取popen的数据
示例代码:
php程序:
# get argument for pipe here if it has.
#start pipe
echo 'call popen start: '. date("H:i:s"), "\n";
$pipe = popen(dirname(__FILE__) . '/t.sh', 'r');
echo 'call popen end: '. date("H:i:s"), "\n";
#Other code here
sleep(5);
echo "Here is my code. time: " . date("H:i:s"), "\n";
#read pipe result
while ($s = fgets($pipe,1024)) {
echo $s;
}
pipe脚本:
echo 1, `date +%T`;
sleep 1;
echo 2, `date +%T`;
sleep 10;
echo 3, `date +%T`;
输出如下:
call popen start: 10:16:40
call popen end: 10:16:40
Here is my code. time: 10:16:45
1, 10:16:40
2, 10:16:41
3, 10:16:51
代码方面, 我们有三个sleep。
php中一个 sleep 5,
sh中两个sleep, 10+1
如果使用串行的方式, 那么用时应该是10+1+5 = 16秒。
而使用pipe方式, 用时仅为:max(php, pipe) = max(5,11) = 11秒。
PS:很抱歉,空间服务商看起来不喜欢popen这个字眼, 所以只能将起替换成全角的了。请在使用时,替换一下吧:)
Defined tags for this entry: php
Not modified
2009/04
22
程序员的8个级别,你想成为哪一种?
自己给自己的评价,是第四阶段:
工作杰出的程序员
而问题也很明确,正好是今年的我在思考的问题:
接下来方向在哪里呢?
想了半年了, 还没有结果。所以,半年来一事无成。
1. 停留。
正如上文说的, 从来不会为找不到一份你满意的好工作好发愁。 也许这样也很好,也是不少人追求得一种境界。所谓“知我者谓我心忧,不知者谓我何求”, 不少人认为我很优秀了, 已经得到了这样的一个水平。而自己,却始终担心着, 接下来,我该如何?
没有人给我答案。 只是知道, 自己不能停留。
2. 行动。 将自己已经具备的能力作为行动, 转化为直接的经济价值。
在去年的一些性格分析中,了解到自己的性格偏向于思考型。 而提升方向是将提高自己的执行力。 将自己的想法转变为实际行动。今年的开初,也重点在这一方面。 做了一些垃圾站和一个手机资源网站的雏形。但结果真的很糟糕。自己毛糙的性格,在执行上不太得力。拍脑袋,丢三落四,后期推翻前期的规划。自己的行动总在一个怪圈中绕弯弯。
不得志。
3. 钻研。 继续去了解更多的技术细节,技术实现,技术解决方法等等。
从性格上说, 这是自己的一种消极表现。在不得志的情况下, 喜欢封闭自己, 将自己陷入技术中, 学习, 研究, 乐此不彼。 同时也会去隔离外部的一切交流,沟通。
这种性格和方式, 是我目前能够获得“工作杰出的程序员”这一个自我评价的源泉, 继续发扬,得到的, 是“知名程序员”, 还是程序员30岁的尴尬?
不确定。yanger给我建议是去成为一个“知名程序员”,因为我真的适合做程序。 这句话应该是赞扬的话,我却常常会将其理解对为自己性格弱点的一种讽刺。
4. 性格转变
我真的适合做程序。 但是我怕遇到老程序员的尴尬,也不甘于去做一个老程序员。目标是架构师。技术是核心, 而不可避免的, 要学会沟通, 要学会领导。
提前准备着一些东西是否必要, 是否是我目前急需准备的东西。
我想是的。 很多人却告诉我不是。
迷失了。 从来没有像这样迷失过。
接下来方向在哪里呢?
静下来,放慢脚步,等等灵魂的脚步,看看他怎么说。。。
期待你的声音,请告诉我,
接下来方向在哪里呢?
自己给自己的评价,是第四阶段:
工作杰出的程序员
你做为一个软件工程师的职业生涯非常的成功,因为你的工作能力相当杰出,你从来不会为找不到一份你满意的好工作好发愁,你的同事也非常尊敬你,每一家你工作过的公司都因为你的加盟而在某些方面得到了增强。
而问题也很明确,正好是今年的我在思考的问题:
你接下来的方向在哪呢?
接下来方向在哪里呢?
想了半年了, 还没有结果。所以,半年来一事无成。
1. 停留。
正如上文说的, 从来不会为找不到一份你满意的好工作好发愁。 也许这样也很好,也是不少人追求得一种境界。所谓“知我者谓我心忧,不知者谓我何求”, 不少人认为我很优秀了, 已经得到了这样的一个水平。而自己,却始终担心着, 接下来,我该如何?
没有人给我答案。 只是知道, 自己不能停留。
2. 行动。 将自己已经具备的能力作为行动, 转化为直接的经济价值。
在去年的一些性格分析中,了解到自己的性格偏向于思考型。 而提升方向是将提高自己的执行力。 将自己的想法转变为实际行动。今年的开初,也重点在这一方面。 做了一些垃圾站和一个手机资源网站的雏形。但结果真的很糟糕。自己毛糙的性格,在执行上不太得力。拍脑袋,丢三落四,后期推翻前期的规划。自己的行动总在一个怪圈中绕弯弯。
不得志。
3. 钻研。 继续去了解更多的技术细节,技术实现,技术解决方法等等。
从性格上说, 这是自己的一种消极表现。在不得志的情况下, 喜欢封闭自己, 将自己陷入技术中, 学习, 研究, 乐此不彼。 同时也会去隔离外部的一切交流,沟通。
这种性格和方式, 是我目前能够获得“工作杰出的程序员”这一个自我评价的源泉, 继续发扬,得到的, 是“知名程序员”, 还是程序员30岁的尴尬?
不确定。yanger给我建议是去成为一个“知名程序员”,因为我真的适合做程序。 这句话应该是赞扬的话,我却常常会将其理解对为自己性格弱点的一种讽刺。
4. 性格转变
我真的适合做程序。 但是我怕遇到老程序员的尴尬,也不甘于去做一个老程序员。目标是架构师。技术是核心, 而不可避免的, 要学会沟通, 要学会领导。
提前准备着一些东西是否必要, 是否是我目前急需准备的东西。
我想是的。 很多人却告诉我不是。
迷失了。 从来没有像这样迷失过。
接下来方向在哪里呢?
静下来,放慢脚步,等等灵魂的脚步,看看他怎么说。。。
期待你的声音,请告诉我,
接下来方向在哪里呢?
Last modified on 2009-04-27 14:59
2009/04
22
更换Mysql数据目录后, mysql服务器无法启动。
解决方法记录如下
1. 停止mysql服务
sudo /etc/init.d/mysql stop
2. 修改my.cnf文件,将
datadir = /var/lib/mysql
改为
datadir = /www/mysql
3. 移动文件
sudo mv /var/lib/mysql /www/
4. 重启mysql服务
sudo /etc/init.d/mysql restart
5 发现启动不了。查看系统信息:
Apr 21 11:03:16 rollenc-Ubuntu kernel: [ 7105.064106] type=1503 audit(1240282996.414:72): operation="inode_permission" requested_mask="rw::" denied_mask="rw::" fsuid=113 name="/www/mysql/ibdata1" pid=13604 profile="/usr/sbin/mysqld"
Google之后, 发现这是mysql在Ubuntu下的bug。 部分版本会出现。解决方法
6. 安装apparmor
sudo apt-get install apparmor
sudo touch /etc/apparmor.d/disable/usr.sbin.mysqld
sudo /etc/init.d/apparmor start
7. 编辑apparmor配置文件, 将其中的 /var/lib/mysql 修改为/www/mysql
sudo vi /etc/apparmor.d/*mysqld
sudo /etc/init.d/apparmor restart
8. 重新启动服务
sudo /etc/init.d/mysql restart
9 Done,一切正常。
解决方法记录如下
1. 停止mysql服务
sudo /etc/init.d/mysql stop
2. 修改my.cnf文件,将
datadir = /var/lib/mysql
改为
datadir = /www/mysql
3. 移动文件
sudo mv /var/lib/mysql /www/
4. 重启mysql服务
sudo /etc/init.d/mysql restart
5 发现启动不了。查看系统信息:
Apr 21 11:03:16 rollenc-Ubuntu kernel: [ 7105.064106] type=1503 audit(1240282996.414:72): operation="inode_permission" requested_mask="rw::" denied_mask="rw::" fsuid=113 name="/www/mysql/ibdata1" pid=13604 profile="/usr/sbin/mysqld"
Google之后, 发现这是mysql在Ubuntu下的bug。 部分版本会出现。解决方法
6. 安装apparmor
sudo apt-get install apparmor
sudo touch /etc/apparmor.d/disable/usr.sbin.mysqld
sudo /etc/init.d/apparmor start
7. 编辑apparmor配置文件, 将其中的 /var/lib/mysql 修改为/www/mysql
sudo vi /etc/apparmor.d/*mysqld
sudo /etc/init.d/apparmor restart
8. 重新启动服务
sudo /etc/init.d/mysql restart
9 Done,一切正常。
Not modified
2009/04
19
服务器前端已经抛弃了apache,改用了nginx。但subversion还需要依赖apache来访问。
因此, 又将apache中心装起来, 给了一个另外的端口。
在nginx上做一个proxy。完成三者的结合。
详细方式:
1. 安装subversion, apache,libapache2-svn,并设置好dav_svn.conf. 详情请参考 在linux(Ubuntu)下安装subversion
2. 修改apache的端口为10800, 避免和nginx冲突
sudo vi /etc/apache2/ports.conf
3. 重新启动apache。
sudo /etc/init.d/apache2 restart
4. 增加site-enable文件,建立nginx到apache_svn的proxy
5. 重新启动nginx
sudo /etc/init.d/nginx reload
完成。
因此, 又将apache中心装起来, 给了一个另外的端口。
在nginx上做一个proxy。完成三者的结合。
详细方式:
1. 安装subversion, apache,libapache2-svn,并设置好dav_svn.conf. 详情请参考 在linux(Ubuntu)下安装subversion
2. 修改apache的端口为10800, 避免和nginx冲突
sudo vi /etc/apache2/ports.conf
3. 重新启动apache。
sudo /etc/init.d/apache2 restart
4. 增加site-enable文件,建立nginx到apache_svn的proxy
server {
listen 80;
server_name svn.xfce.cn;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:10800;
}
}
5. 重新启动nginx
sudo /etc/init.d/nginx reload
完成。
Last modified on 2009-04-19 13:15
2009/04
19
由于服务器修改,或者备份的原因,你可能需要对Subversio的源进行迁移。
迁移方法有几中。 最直接的是将库文件直接copy到新的位置就好。
如果原来的svn版本和新的svn版本不一样的话, 这样迁移并不是很安全。
更安全的方式也很简单,如下:
1. 导出:
svnadmin dump ~/svn/dede > svndump
2. 将svndump文件copy到新的位置
3. 导入dump文件:
svnadmin load /home/svn/dede < svndump
完成
迁移方法有几中。 最直接的是将库文件直接copy到新的位置就好。
如果原来的svn版本和新的svn版本不一样的话, 这样迁移并不是很安全。
更安全的方式也很简单,如下:
1. 导出:
svnadmin dump ~/svn/dede > svndump
2. 将svndump文件copy到新的位置
3. 导入dump文件:
svnadmin load /home/svn/dede < svndump
完成
Defined tags for this entry: subversion
Last modified on 2009-04-19 11:34
2009/04
14
以下代码为在linux下, 批量将指定后缀的GBK文件转化为UTF8格式。
Update: 4月16号修改, 增加 filetype 循环
for filetype in php txt csv js css conf sql html tpl
do
for i in `find . -name "*.${filetype}"`;
do
mkdir -p `dirname /var/www/target/$i`;
iconv -f gbk -t utf-8 $i -o /var/www/target/$i;
done;
done;
Update: 4月16号修改, 增加 filetype 循环
Last modified on 2009-04-17 05:58
2009/04
3
TODO list 有Firefox扩展,便于管理自己的TODO
一游游戏网 在线Flash游戏。用来消磨时间最好了。
使用Mysql来搭建可扩展的SNS网站(浅谈)谈论了关于MySQL分表的方法。尾部的几个连接相当有用
学习豆瓣好榜样--网站架构
Zend Framework: Connecting to 2 databases
大量小文件的实时同步方案
技术人员的晋升路线
Peer to Peer (P2P) in Flash Player 10 beta
Bye bye MySQL? Oracle买了Sun, MySQL的前途确实不容乐观
一游游戏网 在线Flash游戏。用来消磨时间最好了。
使用Mysql来搭建可扩展的SNS网站(浅谈)谈论了关于MySQL分表的方法。尾部的几个连接相当有用
学习豆瓣好榜样--网站架构
Zend Framework: Connecting to 2 databases
大量小文件的实时同步方案
技术人员的晋升路线
Peer to Peer (P2P) in Flash Player 10 beta
Bye bye MySQL? Oracle买了Sun, MySQL的前途确实不容乐观
Defined tags for this entry: links
Last modified on 2009-04-25 04:42
2009/03
27
2009/03
26
1. sudo apt-get install vsftpd
2. vi /etc/vsftpd.conf
修改以下设置:
2. vi /etc/vsftpd.conf
修改以下设置:
anonymous_enable=NO #拒绝匿名用户
local_enable=YES #使用本地用户
write_enable=YES
local_umask=022
Not modified
2009/03
22
近期在重新学习音标,发现上面的写法大变,和自己以前的写法变化很大.
找了一下资料, 发现以下表格:

特别在新老音标中, 有一些音标形同音不同, 长音也不再有:后缀标示. 头大!
也了解到, 之前我们使用的是英语音标,即Jones音标; 新音标方式是美国音标,即KK音标.
也记起来, 目前我小弟的小学课本使用的也是KK音标.
找了一下资料, 发现以下表格:

特别在新老音标中, 有一些音标形同音不同, 长音也不再有:后缀标示. 头大!
也了解到, 之前我们使用的是英语音标,即Jones音标; 新音标方式是美国音标,即KK音标.
也记起来, 目前我小弟的小学课本使用的也是KK音标.
Last modified on 2009-03-22 14:11
2009/03
20
1. 安装依赖的包
sudo apt-get install libboost-dev automake libtool flex bison
2. 安装ruby, gem
sudo apt-get install ruby rubygem ruby1.8-dev
3.下面make时需要require mkmf,需要sys-proctable
sudo gem install sys-proctable
4. 下载thrift,解压
wget -O thrift.tgz "http://gitweb.thrift-rpc.org/?p=thrift.git;a=snapshot;h=HEAD;sf=tgz"
tar -xzf thrift.tgz
cd thrift
4. 安装
./bootstrap.sh
CONFIG_SHELL=/bin/bash ./configure --pref-x=/opt
make && sudo make install
sudo apt-get install libboost-dev automake libtool flex bison
2. 安装ruby, gem
sudo apt-get install ruby rubygem ruby1.8-dev
3.下面make时需要require mkmf,需要sys-proctable
sudo gem install sys-proctable
4. 下载thrift,解压
wget -O thrift.tgz "http://gitweb.thrift-rpc.org/?p=thrift.git;a=snapshot;h=HEAD;sf=tgz"
tar -xzf thrift.tgz
cd thrift
4. 安装
./bootstrap.sh
CONFIG_SHELL=/bin/bash ./configure --pref-x=/opt
make && sudo make install
Not modified
(Page 2 of 34, totaling 497 entries)















