2005年04月19日

TextQQ是命令行下的QQ聊天工具,主要是让上班族们可以聊QQ,而又不让老板知道。



现在虽然只支持四个指令,但你已经可以很爽地聊天了。支持群聊天。赶快试试:

http://cosoft.org.cn/project/showfiles.php?group_id=5604

2005年04月13日

#!/usr/bin/perl

for (1..36) {    # 36个候选球
    $can{$_} = $_;
}
print scalar keys %can, "\n";

@r = (14);        # 结果集,预先放入自己喜欢的幸运球

for (0..5) {    # 幸运球之外,剩下还有6个球要选
    $i = int(rand(scalar(%can)));    # 选球
    push @r, $can{$i};                # 把选中的球放入结果集
    delete $can{$i};                # 把选中的球从候选集中清除
}

# 把结果输出到文件中
open FH, ">tical_result.txt";
for (sort {$a <=> $b} @r) {
    print FH;
    print FH " ";
}
close FH;
print scalar keys %can, "\n";

2005年04月08日

使用Weather::Com模块,可以从weather.com网站获取天气预报,最多可获取到10天后的天气,内容包括温度、湿度、风力、晴雨等信息。具体使用请参看模块文档。




Code:


#use Data::Dumper;


use Weather::Com;



# define parameters for weather search


my %params = (


   ’current’  => 1,


   ’forecast’ => 3,


   ’links’    => 1,


   ’units’    => ’s’,



   #                ‘proxy’      => ‘http://proxy.sonstwo.de’,


   ’timeout’    => 250,


   ’debug’      => 0,


   ’partner_id’ => ’somepartnerid’,


   ’license’    => ‘12345678′,


);



# instantiate a new weather.com object


my $weather_com = Weather::Com->new(%params);



# search for locations called ‘Heidelberg’


my $locations = $weather_com->search(‘Beijing’)


  or die "No location found!\n";



# and then get the weather for each location found


foreach ( keys %{$locations} ) {


   my $weather = $weather_com->get_weather($_);


   print $weather->{‘dayf’}->{‘day’}->[0]->{‘dt’},"\t";


   print $weather->{‘dayf’}->{‘day’}->[0]->{‘t’},"\t";


   print f2c($weather->{‘dayf’}->{‘day’}->[0]->{‘hi’}),"\t";


   print f2c($weather->{‘dayf’}->{‘day’}->[0]->{‘low’}),"\t";


   print $weather->{‘dayf’}->{‘day’}->[0]->{‘part’}->[0]->{‘t’},"\t";


   print $weather->{‘dayf’}->{‘day’}->[0]->{‘part’}->[1]->{‘t’},"\t";


   print "\n";


   print $weather->{‘dayf’}->{‘day’}->[1]->{‘dt’},"\t";


   print $weather->{‘dayf’}->{‘day’}->[1]->{‘t’},"\t";


   print f2c($weather->{‘dayf’}->{‘day’}->[1]->{‘hi’}),"\t";


   print f2c($weather->{‘dayf’}->{‘day’}->[1]->{‘low’}),"\t";


   print $weather->{‘dayf’}->{‘day’}->[1]->{‘part’}->[0]->{‘t’},"\t";


   print $weather->{‘dayf’}->{‘day’}->[1]->{‘part’}->[1]->{‘t’},;


   print "\n";


   print $weather->{‘dayf’}->{‘day’}->[2]->{‘dt’},"\t";


   print $weather->{‘dayf’}->{‘day’}->[2]->{‘t’},"\t";


   print f2c($weather->{‘dayf’}->{‘day’}->[2]->{‘hi’}),"\t";


   print f2c($weather->{‘dayf’}->{‘day’}->[2]->{‘low’}),"\t";


   print $weather->{‘dayf’}->{‘day’}->[2]->{‘part’}->[0]->{‘t’},"\t";


   print $weather->{‘dayf’}->{‘day’}->[2]->{‘part’}->[1]->{‘t’},"\t";


   print "\n";


#   print $weather->{‘head’}->{‘locale’} . "\n";


#   print Dumper($weather);


#   for $key (keys %{$weather}) {


#      print $key . "\n";


#   };


}



sub f2c {


   my $f = shift;


   return int(($f-32)*5/9);


}


2005年04月07日

昨晚回家先试了一下zhcon,直接敲zhcon就行,然后屏幕闪了一下,出了一块logo信息,就进入zhcon环境了。中文输出在这里显示得很好。感觉就好像以前的uc-dos。



安装kde:apt-get install kde。170个包。88兆花了近两个小时。



让我很奇怪,debian基本安装时装了XFree86-common。却没有装xserver。所以当我运行startx时报错找不到xserver。没办法,apt-get install xserver。



安装完成后还是启动不了,说是没有字体。于是我接着安装xfonts-base,下载太慢了,实在受不了。于是先中止。装apt-spy。装完后运行



Code:
apt-spy -e 60 -n 10 -w ~/apt-spy.result




apt-spy会自动检测debian源镜像,取带宽最大的,生成sources.list。上面这个指令是检查前60个镜像,把前10名记到个人主目录下的apt-spy.result文件里。同时用最快的镜像源生成sourses.list文件。



经过一小时左右的检测,我终于得到了一个很快的镜像源。原来的cn99平均速度是4k左右,现在这个平均50多k,爽多了。还有一个普遍现象是http的镜像源通常比ftp的镜像源要快。



好了,再来get
xfonts-base,这下快多了。安装后再次执行startx,就进入了kde的漂亮界面(英文的)。运行kde自带的浏览器看个中文网站试试,哈
哈,全是方格。看来中文字体还没装。记得tasksel里有一个task是中文桌面环境,应该是装上就好了。留待下次搞定吧。



下载期间切到其他终端跑了跑cpan,安装了两个模块,一切正常。

2005年04月06日

该方法使用了ActivePerl::DocTools模块,理论上该模块也可用于非ActivePerl的perl发行版。

ActivePerl安装时,会安装一套带目录索引的html文档。阅读起来很方便。而且每当用ppm安装了新模块后,会同时生成模块文档并更新文档索引。然而,用cpan安装模块后却不会自动产生文档和索引。

查看了ppm源代码后,发现它调用ActivePerl::DocTools模块来生成文档和更新索引。于是我们可以写个简单的脚本即可实现安装cpan模块后的文档和索引更新。
 
代码如下:
#!/usr/bin/perl

use ActivePerl::DocTools;
ActivePerl::DocTools::UpdateHTML();
ActivePerl::DocTools::WriteTOC();

2005年04月05日

我的笔记本装的是mandrakelinux。这个系统安装起来很容易,是新手入门linux的最佳发行版。下面简要说说一些常用软件。

konsole:kde自带的终端,非常好。初次运行的时候字体很大,就被我给唾弃了。后来经朋友推荐,回来耐心配置了一下,才发现,原来这个东东用着这么爽。

mplayer:看视频用的,我一般看avi和mpg都用它。和其他同类软件比,他的优点是音量比较大。

realplayer:官方的,跟windows下的没两样。

azureus:bt客户端。不过bt服务器好像前一阵子崩溃了,现在什么都搜不到。

amule:所以我改用电驴了,这个是linux上的电驴。内建搜索功能,输入fuck试试。

xmms:1.2.7有bug,装1.2.10吧。听mp3用的,跟winamp基本一样。

unrar:用来解rar压缩包。unrar x aaa.rar。

firefox:世界上最好的web浏览器。

gnu fphoto:同步数码相机照片用的。

acrobat:官方下载,看pdf。

xchm:看chm格式的帮助文件,用着不爽。

eclipse:java开发环境。

vim:很强的编辑器。

lumaQQ:linux上的QQ软件,现在已经支持群聊了,就是不支持群共享文件。

gaim:聊msn用的。

下载了最新的debian测试版sarge,刻盘,安装。

光盘安装。基本安装ok,安装时没有选择额外的软件包。安装于pc:奔三 500,392M内存,12G硬盘。

配置pppoe,不得要领,得知pppoe是通过pppd运行的,大概指令为pppd pty ‘pppoe [pppoe-options]‘ [pppd-options],但是options太多了。后发现debian基本安装带了一个pppoeconf的包。运行起来是交互界面,配置很顺利。配置完后生成一个dsl-provider脚本。这个脚本可以用pon来运行。pon可能是pppd带的吧。

因为安装的时候选的中文,所以locale被设置成了中文,导致很多指令输出中文。该死的是这些中文又不能正常显示(显示为一些乱七八糟的制表符),可能跟字体有关吧。经过摸索,得知将环境变量LANG设为C就可以回到英文locale。为什么是C而不是en_US?奇怪。至于怎么正确显示中文,还是不的而知。

运行base-config,选择配置apt。我选了中国的一个源cn99。然后先upgrade,以保证系统最新。

用apt安装了lynx,访问了一下google,觉得不爽。

看了半天man,搞不懂apt如何列表一个包里的文件。

执行updatedb。

很高兴的是网络和apt很容易就配好了,其他的就简单了。

下回该安装x server和kde了。

mysql缺省运行的时候会从/etc/my.cnf读取配置,开放3306端口,建立/tmp/mysql.sock文件。mysql自动计算出的data目录通常为/usr/local/mysql/data。要以绿色方式运行多个mysql很简单,下面简单说明一下。

假设系统上已经运行了一个mysql server,端口3306,socket文件/tmp/mysql.sock。下载了tar.gz包后解压到任何位置。然后运行:

cd /path/to/another_mysql
mysqld –user=root –port=3307 –socket=/tmp/mysql.sock2 –basedir=..

就可以了。–user指定运行mysql的linux用户。如果不指定就缺省为当前登录用户。如果你现在登录的就是root,那么mysql出于安全策略会不肯运行。加上–user可以绕过这个限制。端口号和socket都要跟正在运行的msyql server不同。–basedir指定mysql根目录,data目录由此计算出来。

:)

2005年03月30日

bugzilla是一套bug管理系统,用perl cgi写的,支持mysql、postgresql等数据库。

bugzilla支持多语言,它会根据http请求头里的Accept-Language,获取和显示相应语言的模板。

然而有一个小bug(或许算不上bug):添加了多语言支持之后,每次加载页面,浏览器都使用utf-8编码显示页面,于是看到的是一堆乱码。这时需要从菜单里选择:查看->编码->简体中文(或其他语言相应编码),才能正常显示。这样每次查看一个新页面,都要选择浏览器编码,很累很累。

导致这个bug的原因是bugzilla没有在响应头里设置好相应语言的编码。bugzilla调用CGI::header()来产生相应头。如果事先没有设置好编码,CGI模块就会默认给做成utf-8编码。浏览器顺应地也就用utf-8编码来显示页面了。

修正这个bug很简单,只要让bugzilla自动设置好响应编码就行了。由于bugzilla里的cgi对象都是通过Bugzilla::cgi()函数得到的,因此我们选择修改这个函数,在其中添加自动设置响应编码的功能。

该函数的原始代码:

sub cgi {
    my $class = shift;
    $_cgi ||= new Bugzilla::CGI();
    return $_cgi;
}

修改后的代码:

sub cgi {
    my $class = shift;
    $_cgi ||= new Bugzilla::CGI();
 if (index(Bugzilla::Config::Param(‘languages’),$ENV{‘HTTP_ACCEPT_LANGUAGE’})) {
  if ($ENV{‘HTTP_ACCEPT_LANGUAGE’} eq ‘zh-cn’) {
   $_cgi->charset(“gb2312″);
  }
 }
    return $_cgi;
}

这只是一段简单的修改代码,让bugzilla支持中文。大家可以举一反三。

d

2005年03月23日

这里主要讲windows上的使用,在unix和linux上基本也一样。

第一次运行时,cpan会在当前盘根目录下建一个.cpan目录,把配置和数据都放在里面。有时候你切换到另一个盘运行cpan会提示找不到数据。所以最好在同一个盘运行cpan。

在命令提示符下敲cpan,回车,就进入了cpan互操作模式。可以看见cpan提示符。

敲o conf,回车,先看一下设置。看看make程序用的是什么。cpan自带make程序,如果它在你的path变量路径里没有找到其他make程序,如MS的nmake,就会缺省使用自己的make程序。不过cpan自带的make程序在windows下无法执行make test这一步。所以我们还是用nmake吧。把nmake放到path路径里,然后在cpan提示符下敲o conf init,回车。这样会启动cpan设置向导,当向导问你是否要自己一项一项配置时,回答no。cpan就会自动检测系统进行配置,这样就会检测到nmake并设为make程序。这时用o conf查看,make会设置成全路径。如果你的nmake所在的路径有空格,比如:C:\program files\vc7\bin\nmake.exe,make模块时会出错。解决办法就是把路径去掉:o conf make nmake.exe。

然后就可以用了,当然你要连在互联网上才行。一般我都是在http://search.cpan.org上挑好模块,直接安装。如安装mysql的DBD驱动:敲install DBD::mysql,回车就行。当然你也可以一步一步来:get,make,test,install。其中make会同时执行perl makefile.pl和make两个步骤。如果perl makefile.pl要加参数的话,可能就不好用cpan安装了,还是手动吧。当然可能有更深的配置,我没有钻到,也懒得去钻了。

cpan里也可以搜索,用a搜索作者,b搜索bundle,d搜索发布,m搜索模块,i同时搜索以上四项。这些指令都支持正则。

在cpan提示符下敲h,回车,会显示命令帮助,都很简洁,不妨多看看。

cpan主要就是配置难点,使用起来是很方便的,能自动处理依赖什么的,模块比ppm多无数倍。相信用过apt和urpmi的人会深有体会。

顺带提一句.net带的nmake非常好,赶快升级吧。