存档

‘Programe’ 分类的存档

hiphop for php from facebook

2010年2月11日 哈哈 没有评论

hiphop for php是facebook开发的一款的php转换软件
他能将php代码转换成高度优化的c++代码
然后再用g++编译成二进制文件
用这样得到的二进制文件跑在服务器上取代php代码以提高性能
据说能将系统的cpu占有率降低50%

BTW:
据说hiphop for php将在2010年早期由facebook放出
我们拭目以待

使用perl中函数sysopen的一个弱智问题

2009年12月30日 哈哈 没有评论

闲暇无聊学着写过一个perl程序
用来从网上抓点东西下来
再改吧改吧,存到本地的文件里
最早打开文件用的是open
但后来为了直接在open时就设定打开的文件的权限
就改用sysopen
像这样:

my $save_u = umask();
umask(0);
if (sysopen(FH, $path, O_RDWR|O_CREAT, $fmode)) {
print FH ($data);
close(FH);
} else {
print “Couldn’t open $path for writing:$!
\n”;
return 2;
}
umask($save_u);

但后来发现写入的文件尾巴上老有点问题
最开始老以为是某个替换内容用的正则表达式有问题
但查了半天都没查出来为什么
把每一个正则替换前后的数据都打印出来了没发现问题
最后甚至于把写到文件里去的数据打出来
还是没发现问题
最后就只有落到sysopen这里
认为是写错了
最后把sysopen那一行改成

if (sysopen(FH, $path, O_WRONLY|O_CREAT|O_TRUNC, $fmode)) {

这下终于好了
不过到今天才真正想明白为什么出问题
是因为sysopen时少了个参数O_TRUNC
这样的话打开的文件原来存在的话
没有执行truncate工作
直接从前往后写
也就是覆盖原来的内容
这种情况下
如果新内容比老内容多的话不会出问题
因为原来所有的内容都给覆盖掉了
可万一新内容比旧内容少的时候
就会留下老内容的一段尾巴
所以我们从页面上看老是尾巴上多一点东西
至于O_RDWR改成O_WRONLY则是非必须的
原因是为什么呢
这是因为打开原来存在的文件的时候没有truncate掉原来的内容
所以写到最后一段
如果没内容写了
那么原来文件的最后一部分就留下了
所以呢解决的方法很简单
在sysopen的option参数中加上O_TRUNC即可

perl程序出”Unknown encoding: gb18030″错的问题

2009年12月1日 哈哈 没有评论

写了个简单的perl程序
用来转码(gbk->utf8,utf8->gbk)之类
其中涌到了perl包Encode
发现个问题
当调用Encode包中的方法decode的时候,出错了
代码是这么写的
$html = decode($charset, $html);
当执行到这里的时候就报错:

Unknown encoding: gb18030

上面代码里的$charset是通过Encode::Detect::Detector->detect方法检测到的某个文件的编码
这里是gb18030

最后是怎么解决的呢
装了个perl包:Encode::HanExtra
并在程序里加上

use Encode::HanExtra;

问题就解决了

How do I extract URLs from html?

2009年11月23日 哈哈 没有评论

perl的faq第九节有个简洁的例子

#!/usr/bin/perl -n00
# qxurl – tchrist@perl.com
print “$2\n” while m{
< \s* A \s+ HREF \s* = \s* (["']) (.*?) \1 \s* >
}gsix;

这个正则表达式相当简单实用
但是实际上有点问题
比如
<a href=”xxxxxxx” target=”_blank”>
这样的html代码
就会匹配出xxxxxxx” target=”_blank
这显然不行
于是做了小小的改动:

#!/usr/bin/perl -n00
# qxurl – tchrist@perl.com
print “$2\n” while m{
< \s* A \s+ HREF \s* = \s* (["']) (.*?) \1 \s* [^>]*
\s* >
}gsix;

这样就没问题了

在rhel5上体会ror(ruby on rails)敏捷编程

2009年11月10日 哈哈 没有评论

以前有个服务器信息管理系统(自己php+mysql搞的)
现在想改成ror(ruby on rails)的框架
于是就在一台rhel5的机器上搭了个环境
首先,rhel5的机器必须先启用epel((Extra Packages for Enterprise Linux)
如果不会,这里有文章
然后

yum install ruby rdoc ri rubygem-rails ruby-mysql

安装ror的环境
再接着

cd /opt
rails myapp -d mysql
cd myapp
vim config/database.yml

确认其数据库的配置是否正确
然后

rake db:create:all
script/generate scaffold platform id:integer plat_info:text
script/generate scaffold contact id:integer e_name:string c_name:string mobile:string email:string msn:string
script/generate scaffold idc id:integer idcname:string cport:integer tport:integer location:string network:string netmask:integer
script/generate scaffold server id:integer mac0:string mac1:string ip0:integer ip1:integer ip0a:integer ip1a:integer enable:boolean b_date:date e_date:date e_note:string desc:string password:string idcid:integer plat_id:integer contact_id:integer production:string services:string role:string hardware:string cpuinfo:text partitions:text memory:text
vim db/migrate/*.sql

编辑这几个表(platforms、contacts、idcs、servers)的表结构
再接着

rake db:migrate
script/server &

ok了
再用浏览器访问下http://ip:3000/idcs、http://ip:3000/contacts、http://ip:3000/platforms、http://ip:3000/servers
呵呵
针对这几个表的增删改的程序都已经自动生成好了
一句代码都不用写

分类: Programe 标签: , , ,

用Net::SSH::Perl连服务器巨慢……

2009年2月4日 哈哈 1 条评论

工作上需要个脚本连服务器
本想用python
但是貌似python的那个ssh模块儿只支持ssh2
而我们有好多还是跑的ssh1
故而使用了perl
perl的模块儿Net::SSH::Perl倒是ssh1、ssh2大小通吃
但是也有个问题
连ssh2的时候
速度巨慢
google了一下
网上有人说是因为少装了个模块儿:Math::BigInt::GMP
导致和sshd服务器端交换key的时候计算非常慢
同时,还提到2个perl模块儿:YAMLMath::BigInt
说也需要
于是我就装上了
再一跑程序
果然是快了不少

使用perl包Net::SSH::Perl时的小问题

2008年12月1日 哈哈 没有评论

工作需要
用perl写了个程序ssh到一些机器上去做一些操作
于是就用了Net::SSH::Perl这个perl模块儿
感觉这个东西还挺好用的
但有一个需要注意的
就是redhat系列的系统
自带的ssh client的全局配置文件是/etc/ssh/ssh_config
Net::SSH::Perl认的是/etc/ssh_config
因为这样
所以有台机器我用ssh命令直接连没有问题
但是通过Net::SSH::Perl就连不上
后来通过把/etc/ssh/ssh_config拷一份为/etc/ssh_config
这才搞定

把网上的pygetsong改了改,使之支持下载wma

2007年8月31日 哈哈 没有评论

原来网上有个广为流传的用python写的从baidu下mp3的程序:pygetsong
Xupeng Yun写的
由于原来的只能下mp3文件
我要放到pda上听
感觉mp3太大
于是想改改,使之支持wma
顺便学习下python
改的过程中发现原来的程序有点bug
就是原来的程序没有进行歌曲名称匹配
比如要下的是歌手”A”的歌曲”B”
也许搜出来有首歌名字叫”XBX”
源程序没检测歌曲名
直接把链接放到可用的url里了
这样就有可能下的歌不对
我把匹配时的正则表达式修改了下
使之精确匹配歌曲名
下载:
我修改过的getsong

分类: Programe 标签:

支持msn协议的python包msnp.py的例程在FC4下跑有问题

2007年2月26日 哈哈 2 条评论

这两天想实现通过msn发报警信息
于是就找了到了些python下用的支持msn的api
msnp算是一个
msnp文档上要求是python2.3+
我的FC4(Fedora Core 4)是python2.4
安装没有问题
测试也没有问题
能正常登录
阅读全文…