一个匹配质数的perl正则表达式的分析

2012年1月5日 没有评论

  网上有个牛人老外,用perl写了个匹配质数的正则表达式,就像这样:

perl -lne '(1x$_) =~ /^1?$|^(11+?)\1+$/ || print "$_ is prime"'

,这是个交互式的东东,运行后得你手工输入数值,脚本判断是否是质数,是就打印说啥啥是质数。这句简单的代码我仔细分析了下,终于大概弄懂了。首先,是把你输入的数,转换成输入数值个1的字串,然后进行匹配,匹配不上,则输入的数为质数。匹配的正则表达式又是两个表达式的合集(两个表达式是的关系)。
  第一个正则匹配表达式很简单:“

^1?$

”,就是用来匹配0个或1个”1″,也就是这两个数(0和1不是质数),关键在于第二个正则表达式:

^(11+?)\1+$

,显然3(字串是111)、5(字串是11111)匹配不了,是质数;4(爱传是1111)和6(字串是111111)能匹配上,是合数。至于其中寻找质数的逻辑,我也大概弄明白了,比如说,数字7,字串是1111111,匹配11(11)+匹配不了,尝试111(111)+也不行,1111(1111)+也不行,所以是质数;同理,数字9,字串是111111111,匹配11(11)+匹配不上,但是匹配111(111)+可以,所以9是质数。

分类: tips 标签: ,

好东西vyatta,可以用来做内网上网的网关

2012年1月1日 没有评论

官网在这里
或者是用来做各个idc之间打洞。
先mark一下,
以后有空应用时再来详细研究研究。

分类: tips 标签:

Snow in your teminal(圣诞礼物:终端上下雪)

2011年12月25日 没有评论

原文来自:http://climagic.org/coolstuff/let-it-snow.html

第一段脚本:

clear
while :
do
        echo $LINES $COLUMNS $(($RANDOM%$COLUMNS))
        sleep 0.1
done | gawk '{
        a[$3]=0
        for(x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH ",o,x
                printf "\033[%s;%sH*\033[0;0H",a[x],x
        }
}'

执行上面这段脚本之前,需要手工设置COLUMNS LINES或执行:

export COLUMNS LINES

第二段脚本:

 

原文来自:http://climagic.org/coolstuff/let-it-snow.html

分类: tips 标签: ,

Matrix Effect on teminal using bash(用bash在终端上显示matrix效果)

2011年12月22日 没有评论

原文来自http://www.climagic.org/coolstuff/matrix-effect.html

echo -e "\e[1;40m"
clear
while :
do
        echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(( $RANDOM % 72 ))
        sleep 0.05
done | gawk '{ 
        letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&*()"
        c=$4
        letter=substr(letters,c,1)
        a[$3]=0
        for (x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH\033[2;32m%s",o,x,letter;
                printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter
                if (a[x] >= $1) {
                        a[x]=0;
                }
        }
}'

这一段在我的Linux(centos5和centos6)上跑都没问题,但是在我的mbp(Macbook pro)上不行,因为没有gawk。
第二个脚本:

echo -e "\e[1;40m"
clear
characters=$( jot -c 94 33 | tr -d '\n' )
while :
do
        echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(( $RANDOM % 72 )) $characters
        sleep 0.05
done | gawk '{
        letters=$5
        c=$4
        letter=substr(letters,c,1)
        a[$3]=0
        for (x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH\033[2;32m%s",o,x,letter
                printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter
                if (a[x] >= $1) {
                        a[x]=0
                }
        }
}'

这一段在我的centos上跑不了,因为缺省没装jot;但在我的ubuntu上可以跑,因为我

apt-get install athena-jot

第三个脚本:

echo -e "\e[1;40m"
clear
while :
do
        echo $LINES $COLUMNS $(($RANDOM % $COLUMNS)) $(printf "\U$(( $RANDOM % 500 ))")
        sleep 0.05
done | gawk '{
        c=$4
        letter=$4
        a[$3]=0
        for (x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH\033[2;32m%s",o,x,letter
                printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter
                if (a[x] >= $1) {
                        a[x]=0
                }
        }
}'

原文来自http://www.climagic.org/coolstuff/matrix-effect.html

分类: tips 标签: ,

cacti里图上title中显示中文的问题

2011年12月21日 没有评论

系统环境:centos6+cacti0.8.7g
用Aggregate做了几个聚合图,方法前面有提到。
在创建新的图的时候,在title里有中文字符,存取数据库都没有问题,但是在显示的图上,中文字符没有了,原本以为是rrdtool不支持中文导致,打开debug模式一看,才知道,原来在执行生成图的rrdtool的”–title”参数里,中文字符就没有了,这显然不是rrdtool的问题了,而应该是cacti的问题。翻了下cacti的代码,在文件lib/rrd.php里,有一句:

"--title=" . cacti_escapeshellarg($graph["title_cache"]) . RRD_NL .

,而在lib/functions.php里关于cacti_escapeshellarg函数的定义里,将其直接用函数escapeshellarg函数替代(因为

$config["cacti_server_os"] == "unix"

成立)
于是又着重找了找php函数escapeshellarg过滤中文字符的资料,果然有说法,说是LC_CTYPE是缺省值”C”导致,也提了解决方法,就是在文件lib/functions.php中的最前方,显式的将LC_CTYPE设置正确。具体的解决办法如下:
在文件lib/functions.php的最前面,添加一句代码:

setlocale(LC_CTYPE, "UTF8", "en_US.UTF-8");

保存,再一刷页面,OK了。

安装backtrack5取代ubuntu11.10

2011年12月8日 没有评论

老早就下载了backtrack5的iso文件,今天终于刻盘在公司的台式机上安装了一下。具体怎么装我也不赘述,官方的安装文档在这里,我这里只说问题,按照文档第一步,我

startx

的时候就出问题了。系统提示:

Warning: Type "ONE_LEVEL" has 1 levels, but  has 2 symbols

,然后google了一下,原来这是64位版本的问题,官方早有解决方法,看这里。我再简单描述一下,解决起来很简单:

rm /root/.kde/cache-root/icon-cache.kcache
rm /root/.kde/cache-root/plasma_theme_Volatile.kcache
rm /root/.kde/cache-bt/icon-cache.kcache
rm /root/.kde/cache-bt/plasma_theme_Volatile.kcache

然后再startx,就没有问题了。

分类: TroubleShooting 标签:

tracks for android提交内容乱码的解决

2011年11月21日 没有评论

前面提到tracks for android在修改了内容或者提交一个新的action的时候,中文内容会乱码。最新消息,现在已经解决了。因为tracks for android的作者开放了源码,我直接取了一份,在会java的同事的提点下,最终找到了编码的地方,小改两行代码,问题解决。
编辑文件src/ca/xvx/tracks/util/HttpConnection.java,将其105行和118行的内容:

StringEntity ent = new StringEntity(content);

改成

StringEntity ent = new StringEntity(content, "UTF-8");

即可。

分类: google, tips, TroubleShooting 标签:

/tmp目录下文件过多的问题

2011年11月19日 没有评论

/tmp目录缺省用来保存php的session文件,某台机器这个目录下文件数过多,rm -rf *都会报“参数太长”的错误。用命令:

find . -type f -name "sess_*" -cmin +30 |xargs rm -f

删除之。注意:这里的sess_*要用引号引起来,否则,也会出“参数太长”的错误。

分类: TroubleShooting 标签:

migrate openldap from 2.3.x to 2.4.x

2011年11月17日 没有评论

  centos5的机器,openldap是2.3.x的;另外一台centos6的机器,openldap是2.4.x的,现在需要把数据从2.3.x上迁移到2.4.x上去(其实最初的需求是2.3.x和2.4.x之间主从同步的,后来需求才降低到数据迁移)。
  折腾了一整天,终于搞好了,赶紧做个记录。
  首先,在centos5(openldap2.3.x)上备份数据

slapcat -l data.ldif

  然后,将centos5上的data.ldif和/etc/openldap/slapd.conf拷贝到centos6(openldap2.4.x)上
  接着,重要的操作来了:

cp /usr/share/doc/openldap-servers-2.4.x/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
slapadd -l data.ldif -f slapd_2.3.conf 
slaptest -f slapd_2.3.conf -F /etc/openldap/slapd.d/
chown -R ldap:ldap /etc/openldap/slapd.d
chown -R ldap:ldap /var/lib/ldap/*
/etc/rc.d/init.d/slapd start

  以上:第一步拷贝DB_CONFIG貌似不是必需的,不过没做的话会老报警告信息。这里假设复制过来的slapd.conf的文件名为slapd_2.3.conf

分类: tips 标签:

mysql的临时文件导致硬盘分区满

2011年11月15日 没有评论

碰到个问题,某个跑mysql的服务器,经常报/区空间满(使用率大于阀值),但马上又会报好了。怀疑是mysql的临时文件把根区空间占满了导致的。于是查了查文档,知道如果没有DIRTMP这个环境变量的话,mysql会用/tmp来做自己的临时文件存储目录。于是我们直接改老php.ini,把tmpdir = /xxx/path加到mysqld的下面,重启mysql,这下解决了。

分类: Operation System 标签: