存档

作者存档

perl下的时间处理

2009年6月20日 happysa 4 条评论

获得unix时间:

1
2
3
4
5
#!/usr/bin/perl 
use strict;
use warnings;
 
print time;

获得当前系统时间:

1
print scalar localtime();

这里localtime()可带一个时间参数,默认是以当前的unix时间为参数,若要得到unix时间100秒的具体时间,可以用localtime(100)

unix时间转换成普通的日期时间:

1
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

$sec --> 秒
$min --> 分
$hour --> 时
$mday --> 当月的第几天(1..31)
$mon --> 月(0.11)
$year --> 年(1900..,从1900年开始,所以得加上1900才能得到当前年份)
$wday --> 一周中的第几天(0是星期天,然后1..6代表周一到周六)
$yday --> 一年中的第几天(0..365)
$isdst --> 夏令时标志,如果当前时间正在使用夏令时,则$isdst为1,否则为0。
执行localtime函数得到的就是由上面这些值所组成的一个字符串。

普通的日期时间转换成unix时间
有时候为了得到两次时间间隔,把普通日期时间转换成unix时间处理起来就方便多了。

1
2
3
use Time::Local;
my $time = timelocal($sec,$min,$hour,$mday,$mon,$year); 
# replace 'timelocal' with 'timegm' if your input date is GMT/UTC
分类: tips 标签: , ,

perl中去除数组里的重复元素

2009年6月3日 happysa 2 条评论

方法很多,先介绍下我自己的方法,通过hash的键唯一性来得到不重复的元素列表,代码如下:

1
2
3
4
5
6
7
8
#!/usr/bin/perl 
use warnings;
use strict;
 
my @array = ("a","b","c","d","a","d","c");
my %hash;
$hash{$_}++ foreach (@array);
print sort keys %hash;

下面是网上看到的一个方法,通过grep函数来获得不重复的元素:

1
2
3
4
5
6
7
8
#!/usr/bin/perl
use warnings;
use strict;
 
my @array = ("a","b","c","d","a","d","c");
my %hash;
my @out = grep (!$hash{$_}++, @array);
print @out;

该方法的意思是:当第一次碰到某元素$_时,$hash{$_}的值为0,!$hash{$_}为真,于是把元素$_加到数组@out中,然后把$hash{$_}值加1,这样下次再碰到同样的元素时由于!$hash{$_}此时为假,就不会写入@out数组里了,从而达到去掉重复元素的目的。
两种方法从运行效率上来看应该差不多,不过第二个感觉更炫一点。

分类: tips 标签:

70码

2009年5月13日 happysa 2 条评论

70码

注:此图来自internet,非原创。版权没有,翻印不究。

分类: blog 标签: , ,

细节决定成败

2009年5月10日 happysa 9 条评论

detail      话说今天学校里体育达标测试中某女生替别人跑800被抓出来了,究其原因,我觉得很大程度上是细节没处理好,还有就是没有看清当时的形势。

  • 登记名字的时候把学号写错了。 可能是一开始习惯性地把自己的学号写上去了,后来发现不对,于是把原来的划掉重新写了另一个学号。当时老师看到就问了一句,“你怎么学号都给写错了,不会是替考的吧?”之后就在她跑的过程中拿起她的学生证仔细看了起来,于是发现学生证上的照片是后来贴上去的,照片上甚至没有本来应该有的钢印。
  • 跑得太快了,实力很明显。听老师的意思说,那种跑得很慢,或者跑完后还很痛苦的一般都不会是替人跑的,因为跑得慢还去替人跑一点意义都没有。跑得快的就难说了,看那女的很轻松地跑完了800米,再加上前面的一些事情,更加怀疑她是在替考的。

      最后跑完登记成绩的时候老师让她去拿一卡通来,因为上面的照片是印上去的改不掉,结果她一去不复返了。

      细节决定成败,如果她在一开始的时候没有把学号写错,或者先看清楚当时的形势,或许情况会好一点。因为当时是下午2点很热的时候,跑的一共就三个女生,要混水摸鱼比较难,而且学生证是在跑完后登记成绩的时候给老师看一眼就好了,那个时候一般不会很仔细看,而她却在一开始的时候就把学生证递上去了,这就给了老师更多的时间来研究学生证,结果就露馅了。而在早上就有很多女生在跑,如果她选择早上来或者第二天早上再来,那可能就成功了。

      最后如果确定她的替跑属实的话,那可能等待她和被替考那位同学的就是一次记过或者警告处分了,敢做就要敢当,但愿她们不要因为这个而耽误了学业。

分类: blog 标签:

给grep上色

2009年5月2日 happysa 没有评论

功能类似于vim里的hlsearch,把匹配的东西高亮显示出来,易于定位,如图

grep_color

这里用到grep的一个参数--color,color有三个值供选择:never、always、auto。always和auto的区别就是,always会在任何情况下都给匹配字段加上颜色标记,当通过管道或重定向时就会多出一些控制字符,结果会变成
export ^[[1;32m^[[KGREP^[[m^[[K_OPTIONS='--color=always'
export ^[[1;32m^[[KGREP^[[m^[[K_COLOR='1;32'
而auto则只在输出到终端时才加上颜色。
可以在.bashrc里加上
export GREP_OPTIONS='--color=auto'
来实现高亮匹配,具体用什么颜色,可以通过
export GREP_COLOR='a;b' #默认是1;31,即高亮的红色
来设置,其中:
a可以选择:【0,1,4,5,7,8】

0 关闭所有属性
1 设置高亮度
4 下划线
5 闪烁
7 反显
8 消隐

b可以选择:【30-37或40-47】

30 black
31 red
32 green
33 yellow
34 blue
35 purple
36 cyan
37 white
30 -- 37 设置前景色
40 -- 47 设置背景色

一些参考
grep的man文档
GNU grep's new features
Howto colorize Unix/Linux stuff

分类: linux 标签: , , ,

在google map上看猪流感疫情分布图(顺便普及下流感常识)

2009年4月29日 happysa 没有评论

互联网越来越密切地融入到人们的生活中了,从这个google map的猪流感疫情分布图就可见一斑。

2009-04-28_2351291

这个以「猪流感」为主的 Google Map 叫 「H1N1 Swine Flu 猪流感疫情分步图」,它会依据实际情況在不同的国家及地区标示各种不同类型的「猪流感」怀疑、确诊、死亡个案。每个泡泡代表一个通报病例,不同颜色代表不同意义。具体如下:

粉红色      代表  怀疑为猪流感
紫色       代表  确定为猪流感
泡泡上无黑点者  代表  即为死亡病例。
黃色       代表  检验后为H1N1阴性(即已经排除的病例)

点击查看H1N1猪流感Google地图:
1、2009 Swine Flu (H1N1) Outbreak Map
2、H1N1 Swine Flu

好像韩国已经发现疑似病例了,不知道会不会传到国内,希望不要发展到当年的非典那样,满大街的口罩,草木皆兵。

普及一下科普知识,以下是转自sohu网的关于猪流感、禽流感以及普通流感之间的一些对比

猪流感

传播途径:该病毒非常活跃,可由人传染给猪,猪传染给人,也可在人群间传播。人群间传播主要是以感染者的咳嗽和喷嚏为媒介。

症状:人类感染猪流感的最明显症状是“最初出现类似普通流感症状,但体温突然超过39度,肌肉酸痛感明显增强,伴随有眩晕、头疼、腹泻、呕吐等症状或其中部分症状。

潜伏期:新型猪流感病毒可能在人体潜伏7天后才表现出病症。

死亡率:猪流感的死亡率为6.77%,比一般流感要高,其高致死率的主要原因有两个:一是病毒来势凶猛;二是民众起初对新疾病不重视,以为是普通感冒,很多人自己随便吃些药,错过了发病初72小时的最佳救治期。

易感染人群:猪流感致死的患者年龄绝大多数在20岁至45岁之间,属于青壮年。

防治疫苗:人类已研制出的所有流感疫苗对于猪流感都无效,但人感染猪流感是可防、可控、可治的。

禽流感

传播途径:禽流感病毒迄今只能通过禽传染给人,不能通过人传染给人。

症状:感染后的症状主要表现为高热、咳嗽、流涕、肌痛等,多数伴有严重的肺炎,严重者心、肾等多种脏器衰竭导致死亡。

潜伏期:人禽流感潜伏期一般为1~3天,通常在7天以内。

死亡率:人患禽流感死亡率达60%。

易感染人群:在已发现的感染病例中,13岁以下儿童所占比例较高,病情较重,其属于易感人群。

防治疫苗:各国已在研制预防禽流感的疫苗。

普通流感

传播途径:人际传播,空气飞沫传播为主,流感患者及隐性感染者为主要传染源。发病后1~7天有传染性,病初2~3天传染性最强。

症状:普通人流感与人感染猪流感后的症状相似。

潜伏期:流感的潜伏期为1-4天,平均为2天。

死亡率:普通流感可致死,但死亡率较低。

易感染人群:四类最易感染流感的人群,分别是:老年人,患有肝脏、肾脏、心脏等慢性病的人群,经常接触流感人群的医护人员,儿童。

防治疫苗:已研制出可预防流感的疫苗,接种时间多为每年10-11月中旬,每年接种1次。

分类: internet 标签: ,

永远的支青三代

2009年4月21日 happysa 4 条评论

2009-04-21_175933 说实话,刚开始参加培训时听宝儿说前一届毕业分开的那天很多人都哭了,我还有点怀疑,短短的一个半月时间,感情真的能那么好吗?现在我相信了。
文笔有限,就把所有美好的回忆都留在心里,还是那句口号:
支青三代,人人可爱;
支青三代,永不言败。
愿支青三代的每一位同学都有美好的前程,认真生活,快乐工作。

分类: blog 标签:

wordpress下解决godaddy免费空间feed出错的问题

2009年4月17日 happysa 26 条评论

128px-feed-icon_svg问题描述:
在浏览器里打开feed地址,不能像正常的feed订阅那样出来订阅的页面,在firefox下是直接以纯文本形式显示,IE7下显示“已取消到该网页的导航”,而直接通过google reader等倒是能正常订阅。在Feed Validator上检查feed文件的正确性,问题如下:

This feed does not validate.
line 1, column 1: Blank line before XML declaration [help]
line 42, column 1: XML parsing error: :42:1: not well-formed (invalid token) [help]

虽然对于我这blog来说feed订阅这东西短期内基本上是拿来摆设的,不过有这问题心里总是不爽,于是乎网上搜寻解决办法,皇天不负有心人,最后顺利解决问题了,下面就介绍一下我的解决方法(方法非原创,参考了SAM LESHER)。

先说说引起这个问题的原因:godaddy的免费空间(CreatingDrew),因为godaddy会自动加上一段广告代码,所以在feed的XML文件输出时也在文件的最后两行给加上了广告代码,并在最前面加了一个空行,这就是上面检查出的问题,所以只要去了这个空行和广告代码就OK了,步骤大致如下:

1. 根据wordpress输出feed的默认地址下载feed文件到本地,这个文件是包含广告代码的
2. 写脚本,使用sed对文件进行过滤,把开头的空行和广告给删除掉
3. 通过修改后的feed文件输出feed订阅信息
4. 在godaddy管理页面上建一条cron任务,每隔一定时间执行一遍脚本,使更新后的feed地址也是正常的

可以把feed文件下载和过滤都写到一个脚本里,修改feed地址则可以使用插件来完成。

下面是实现脚本:

#!/bin/sh
BLOGADDRESS="http://blog.happysa.org" #blog地址,用于下载feed文件
FEEDPATH=/var/www/home/happysa/domains/happysa.org/public_html/feed #下载后的feed文件存放地址,路径根据具体情况修改
FEEDFILE=$FEEDPATH/feed.xml
RSSFILE=$FEEDPATH/rss.xml
RDFFILE=$FEEDPATH/rdf.xml
ATOMFILE=$FEEDPATH/atom.xml
COMMENTSFILE=$FEEDPATH/comments.xml
#GDSTRING1="</object></layer></span></div></table></body></html><!-- adsok -->"
#GDSTRING2="<script language='javascript' src='https://a12.alphagodaddy.com/hosting_ads/gd01.js'></script>"
 
if [ -f $FEEDFILE ]; #删除老的feed文件
then
    rm -f $FEEDFILE
fi
wget -q $BLOGADDRESS/feed -O $FEEDFILE #下载feed文件
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $FEEDFILE #过滤广告代码和最前面的空行,过滤条件可根据具体情况作改动
sed -i 's/blog.happysa.org\/feed\"\( rel=\"self\" type=\"application\/rss+xml\" \/>\)/feed.happysa.org\/\"\1/' $FEEDFILE #修改订阅地址
 
if [ -f $RSSFILE ];
then
    rm -f $RSSFILE
fi
wget -q $BLOGADDRESS/feed/rss -O $RSSFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $RSSFILE
 
if [ -f $RDFFILE ];
then
    rm -f $kRDFFILE
fi
wget -q $BLOGADDRESS/feed/rdf -O $RDFFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $RDFFILE
 
if [ -f $ATOMFILE ];
then
    rm -f $ATOMFILE
fi
wget -q $BLOGADDRESS/feed/atom -O $ATOMFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $ATOMFILE
sed -i 's/blog.happysa.org\/feed\/atom\" \/>/feed.happysa.org\/atom.xml\" \/>/' $ATOMFILE
 
if [ -f $COMMENTSFILE ];
then
   rm -f $COMMENTSFILE
fi
wget -q $BLOGADDRESS/comments/feed -O $COMMENTSFILE
sed -i '/!-- adsok --/d;/alphagodaddy/d;1d' $COMMENTSFILE
sed -i 's/blog.happysa.org\/feed\/comments\"\( rel=\"self\" type=\"application\/rss+xml\" \/>\)/feed.happysa.org\/comments.xml\"\1/' $COMMENTSFILE

以上代码新建一个脚本feed.sh,在空间下放哪都可以,之后在空间根目录下建立feed文件夹,用于存放feed文件。

好像免费空间没有ssh帐号的,有些东西设置就会麻烦一点,首先要打开ftp客户端登陆后在脚本文件上右击修改属性,使之有可执行权限。接着就是利用cron建立一个自动执行计划,让脚本每隔多少时间执行一次,在Hosting Control Center上Content下的Cron manager,如图:

2009-04-17_213114

Create Cron Job,主要是Command,时间勾上Run twice an hour,这样可以更新频繁一点,之后保存。

2009-04-17_213705

接下来就是设置feed地址了,只要feed正常了,怎么用就很简单了,网上的方法也很多,比如可以使用wp-feedlocations,安装后在里面设置feed地址

2009-04-17_215302

上面有个地方用到空间的绝对路径,查看绝对路径可以利用php的system函数,同时如果没到cron的时间而想手动执行脚本也可以利用这个,并且可以用这个来输出信息进行调试,我的方法是空间下新建一个php文件,如foo.php,写入如下代码:

<?php
    system("pwd");
    system("sh /var/www/home/happysa/domains/happysa.org/public_html/scripts/feed.sh  >log 2>&1");
?>

然后在浏览器里访问http://happysa.org/foo.php,就可以看到绝对路径并手动执行脚本了。

分类: blog 标签: , ,

记在开头

2009年4月13日 happysa 没有评论

heckert_gnusmall很早就想自己搞个博客了,一来是好玩,生命在于折腾嘛,另一个原因则是希望能记录下自己学习当中的点点滴滴。

关于happysa.org这个域名,顾名思义,To be a happy SA.  系统管理员的工作经常会比较繁琐而且容易受到外界干扰,保持一个良好的心态、快乐的心情,我认为是很有必要的。

很快就要毕业参加工作了,希望有个好的开始。

分类: blog 标签: ,