可以统计访问量前10的资源。附带一个测试数据生成程序。
用法:
编译生成可执行文件以后,
sta2.exe 日志文件路径
下载
-
用C++写了个Apache日志分析程序
2006-11-27 21:12 -
项目回忆录(三)
2006-11-25 19:30版权短信网站原型
这个项目是跟老师做的。是给移动通信公司开发的增值服务网站。老师拉项目的时候,客户要能看到样子,就拉了几个学生来做这个东西。内容管理部分用Mambo,其余部分自己实现。老师让我们先用Mambo弄一个计算中心的网站来练手,叫我做模板。拿了它的自带的几个模板仔仔细细看了一遍,才弄明白是怎么回事。这个东西功能是很强大,不过实在是复杂。因为要实现模块动态增删,模板上的限制就很大。调了半天CSS,总算把自己设计的页面弄成了模板文件。
接下来就开始弄这个版权短信了。因为团队里我PHP最熟,所以就让我给其他人辅导PHP,帮他们解决各种各样的问题,另外也做一些美工的活。项目用Oracle做数据库。装好Oracle 10g Express后,就拿PHP的Oracle扩展去连,结果连不上。上网查了下,发现还要另外的Instant Client。装上以后还是不行,找了半天原因后,第一次知道,原来WinXP设置环境变量以后要重启才会有作用……。然后更神奇的事情发生了。一连数据库,PHP就带着Apache一起翘掉。又郁闷了半天。后来在一个老外的论坛上搜到了同样的问题,原来是PHP自带的那个Oracle扩展有问题,到snapshot上下了一个最新的,终于连上了伟大的Oracle。
虽然我强调过代码规范的重要性,但有些人为了图快并没有很好的遵守。到了后来,代码就没法看了。一天天看着代码腐败下去,心里很不爽,不过也没啥办法。不管怎么说,最后总算是弄出来了。
一开始也不知道是哪个老师想到用Mambo来做内容管理的。带上这么一个复杂的大东西,整合、维护都很麻烦。再好的东西也要看用在什么地方。如果仅仅为了避免新闻系统重复开发,完全可以找个简单的,其实如此简单的新闻发布,自行开发也不会费多少力气,还能避免整合的问题。
最后,真正上线的网站是用Java重新开发的。虽然有点失望,但同时也感到庆幸。不知道那个Java的质量怎么样,总之眼不见为净,起码上线的不是我们那个糟糕的东西。
-
prolog
2006-11-10 21:48cat('Myrtle').
dog('Fido').
tiger('Huhu').
mouse('Jerry').
direct_afraid(X,Y):-mouse(X),cat(Y).
direct_afraid(X,Y):-cat(X),dog(Y).
direct_afraid(X,Y):-dog(X),tiger(Y).
afraid(X,Z):-direct_afraid(X,Y),afraid(Y,Z).
afraid(X,Z):-direct_afraid(X,Z).
查询:
| ?- afraid('Jerry',Who).
结果:
Who = 'Huhu' ? ;
Who = 'Fido' ? ;
Who = 'Myrtle' ? ;
no
-----------------------------------------------------
dog('Fido').
barks('Fido'):-fail.
wags_tail('Fido').
meows('Myrtle').
friendly(X):-wags_tail(X),dog(X).
afraid(_,X):-friendly(X),fail.
afraid(_,X):-barks(X).
cat(X):-meows(X).
查询:
| ?- dog(X),cat(Y),((afraid(X,Y),fail);true).
结果:
X = 'Fido'
Y = 'Myrtle'
yes
prolog对否定的处理太麻烦了…………
几个prolog在线教程:
http://www.coli.uni-saarland.de/~kris/learn-prolog-now/lpnpage.php?pageid=online
http://cs.wwc.edu/KU/PR/Prolog.html
http://www.chinaai.org/Article_Show.asp?ArticleID=314
-
memcached on win
2006-11-04 19:40memcached是一个很好的分布式缓存,在linux上安装很方便,以前在win试过,没弄成功。今天showsa告诉我有一个win上的移植,这就方便多了。
http://jehiah.com/projects/memcached-win32/
如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。
常用设置:
-p <num> 监听的端口
-l <ip_addr> 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
-m <num> 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c <num> 最大同时连接数,默认是1024
-f <factor> 块大小增长因子,默认是1.25
-n <bytes> 最小分配空间,key+value+flags默认是48
-h 显示帮助
然后就可以用php的memcached客户端来试一下了。
<?php
//test1.php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$memcache->set('test', 'hello');
?>
<?php
//test2.php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
echo $memcache->get('test');
?>
依次运行test1.php, test2.php,就可以看到,放在memcached里的"hello"。
具体的用法可以看php手册,这里就不多说了。 -
项目回忆录(一)
2006-10-22 15:23以前做过的项目也不少,但一直都没好好总结过。上个学期在eBay实习生的面试的时候,就感觉到,虽然是自己做过的项目,但很多东西都已经不记得了。为了以后的面试,也要准备一下了。昨天ACM的罗老师要我说说兼职实习的经历,也只能说个大概。从现在开始,一点点开始回忆吧。
华东理工大学就业信息网
05年快放暑假的时候,学工部和就业办找了我和寒意,要我们找一些人一起完成学校的新版的就业网。看过了原来的asp的版本,放弃了修改的想法,决定用php重新写。那段时间自己写了个php的框架,包括MVC、基于标签库的模板引擎、还有类似现在ActiveRecord的ORM,也打算实践一下,看看实际效果如何。于是这个项目就这样开始了。因为马上就要考试,所以考试后才开始和我们说具体的需求。
在了解了大致的需求以后,猴子做了第一个页面设计,他们看过后觉得基本满意。然后就放假了,老师去旅游,我们干活。做着做着,就觉得有点问题,但老师都不在,也没得人问。只好先按自己的理解先做着。在开发的过程中,还是感觉到ORM带来的开发效率的提高。
一个暑假下来,东西也做得差不多,军训之后,就给老师看了。结果发现,要改好多地方。这也算是意料之外,情理之中的。然后就开始了漫长的修改过程。幸好当初考虑到了一些可能的变化,预先做了点准备,不然就有很多东西要重新来过了。那时候我的ORM只能映射一个表,对于要多个表的关联,就要手写sql了。因为查询相当复杂,又涉及到很多变化的参数,手动拼装sql就相当痛苦(还顺带发现了一个php的mysql扩展的bug)。长长的sql语句不好读也不好改。那时候就想着,什么时候做一个更好的ORM。但那时是没时间弄这个的。只能继续痛苦下去。我的那个MVC框架是仿Struts的,也和Phrame,PHP.MVC之类的差不多。在使用过程中,也确实体会到了不少好处。比如可以很方便的把权限验证之类的东西分离出来。但那时候我没有真正理解MVC,把很多业务逻辑都写到了Action里面。这样几个类似功能的Action之间就出现了重复的代码。更大的麻烦在于,由于Action是直接输出页面的,这样就不好自动测试了。那个模板引擎也碰到了性能问题,因为是模仿jstl的,为了更强的功能,虽然也是预先编译成php代码的,但是执行效率还是不理想。好在网站访问量不是很大,学校网络的带宽也有限,这个问题没造成什么后果。
基本弄完以后,又碰到了麻烦。他们要把excel表格的学生数据导入到数据库中。本来我觉得不难实现,但真的拿到了测试数据却头大了。因为是人工输入的,很多东西都不规范,当中一些学院专业改过名,一些地方也改过名,电脑又是一个驴,要让他像人一样能够明白那些看起来不一样的东西其实是一样的太难了。咱程序员可以根据情况处理一下,那些老师可没这能力啊。以后就不了了之了。
这个项目并没有成功,最大的问题就是出在了交流上。和客户交流的不畅导致最初的设计有较大的偏差,造成了后面一系列麻烦的修改。架构上的问题也带来了很大的麻烦。虽然说这个项目没有成功,但从中却学到了很多东西。
-
利用STL实现一个Heap
2006-08-13 21:07发现STL里有个现成的Heap算法,就拿来包装了一下,然后用它写了个A*来解8数码。虽然不一定是最优解,但速度确实快了好多。
现在把那个Heap的代码贴出来。很简单的吧。有STL就是好。
//需要include algorithm和vector
template<class _type>
class Heap {
public:
Heap(){
make_heap(data.begin(), data.end());
}
void push(_type entry){
data.push_back(entry);
push_heap(data.begin(), data.end());
}
_type top(){
return *(data.begin());
}
_type pop(){
_type ret;
ret = top();
pop_heap(data.begin(), data.end());
data.pop_back();
return ret;
}
bool empty(){
return size() == 0;
}
bool clear(){
data.clear();
make_heap(data.begin(), data.end());
}
int size(){
return data.size();
}
private:
vector<_type> data;
};
-
几个Ajax框架
2006-06-21 21:15Dojo http://dojotoolkit.org/
Rico http://openrico.org/
qooxdoo http://qooxdoo.org/
-
Scheme
2006-06-11 23:19(define pp (lambda (x)
(if (= x 0) 0 (+ x (pp (- x 1))))
))
关注下Scheme语言。一直听说函数式语言如何如何,今天去见识一下
用的DrScheme。感觉比MIT的那个方便。
上面是个1加到x的程序,对应的C程序是
int pp(int x){
if(x==0)
return 0;
else
return x+pp(x-1)
}
可能这个程序太简单,还没能体现出函数式语言的优势。 -
破解foxmail密码
2006-02-02 19:41今天老妈把邮箱密码忘了。想到foxmail里应该有记录,就找出账号设置文件,打开看看,果然有密码,不过被加密了。google到解决办法后,用php写程序解决了。然后修改了一下,变成通用的。其实可以用看星星的程序解决。不过手边没有,再说,咱程序员自有自己的办法^_^
<?php
function hexDecode($s) {
return preg_replace('/(\w{2})/e',"chr(hexdec('\\1'))",$s);
}
function foxmailCrack($src) {
$s1 = substr(hexDecode($src), 1) ^ "~draGon~";
$s2 = chr(ord('Z') ^ hexdec(substr($src, 0, 2)));
$s2 .= substr(hexDecode($src), 1, -1);
$out = '';
for($i = 0; $i < strlen($s1); $i++){
$tmp = ord($s1[$i]) - ord($s2[$i]);
$tmp = $tmp < 0 ? $tmp + 255 : $tmp;
$out .= chr($tmp);
}
return $out;
}
?> -
一行代码实现字符串的16进制编码解码
2006-01-30 13:58<?php
function hexEncode($s) {
return preg_replace('/(.)/es',"str_pad(dechex(ord('\\1')),2,'0',STR_PAD_LEFT)",$s);
}
function hexDecode($s) {
return preg_replace('/(\w{2})/e',"chr(hexdec('\\1'))",$s);
}
echo hexDecode(hexEncode("北京\n欢迎您!"));
?>





