存档

‘tips’ 分类的存档

一个匹配质数的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了。

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 标签:

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 标签:

Defining the email address which Nagios sends emails from

2011年11月7日 2 条评论

  首先,说明一下:题目是摘抄的。但是问题是通的,用过nagios的都知道,nagios是用程序mail来发报警邮件的,而mail命令不支持命令行直接指定发件人的邮件地址,而且缺省的发件人地址是调用mail的用户@服务器的主机名,所以基本上用nagios的人都有需求修改发件人的邮件地址,解决方法也五花八门。
  网上大都是改mailrc文件来修改发件人地址的,我不推荐这样做主要是因为如果有别的程序再调mail发邮件,发件人也会是这个修改后的邮件地址,我这里用的算是一种比较简便的方法:使用nail替代nagios原来用的mail来发邮件。因为nail命令直接就支持”-r”参数来设置发件人的邮件地址。在centos5下,直接

yum install nail

即可,如果在centos6下,nail和mail是一个软件包,所以有mail的话,都不用安装,nail就有了,直接用就好了。

RackTables里添加FireWall设备类型

2011年11月6日 没有评论

  RackTables是一款非常棒的it资产管理系统,他自带了好多的设备类型,但是遗憾,没有防火墙设备(也许他认为防火墙设备完全可以直接归到server里,其实我也认可这种看法:),但我还是想添加一种新的设备类型:防火墙,而且RackTables超强的可定制性使之成其了可能。

  1. Main page–>Configuration–>Dictionary–>RackObjectType
  2. 点击Edit这个tab
  3. 在框里输入FireWall,再点击输入框前面或后面的加号(“+”)

  这样,FireWall这个object type就建成了。但这样的话还有问题,object id是这个的object,没法设置其ip地址,要解决这个问题,也简单:

  1. Main page–>Configuration–>User interface
  2. 再点击Change这个tab
  3. 找到”List source: IPv4-enabled objects”,并在后面的框里的最后加上” or {$typeid_11111}”(11111为FireWall的object type id)

  至此,就一切搞定了。

分类: tips 标签: ,

graphviz画图输出png格式时中文不能显示的问题

2011年11月2日 没有评论

用svg格式输出没有问题。
网上解释,据说有两个问题要解决:

  1. dot文件需要为utf8编码
  2. 需要指定fontname

对于我来讲,第一点不成问题,我缺省编码就是utf8
那么关键就是第二个问题了
centos5.x下

yum install fonts-chinese

centos6.x下

yum install cjkuni-ukai-fonts

然后在.dot文件中指出:

node [ fontname = "AR PL ZenKai Uni" ];

(centos6.x用

node [ fontname = "AR PL UKai CN" ];

)
再输出成png格式也能显示中文了。

分类: tips 标签: , ,