Pengjun's profile上善若水PhotosBlogLists Tools Help

Blog


    July 04

    北京风情

    王小波

      我小时候住在成方街,离北京的城墙很近。就在这条街的尽头,城墙塌了一个口子,沿着一道陡坡,躲开密密麻麻的酸枣刺,就可以上到城上。城墙上面是宽阔的大道,漫地的方砖中间长满了荒草。庚子年间,八国联军来攻打北京,看到了这座城墙。有个联军的军官在日记里写道:这是世界上最宏伟的防御工事——他是对这城墙的高度发出的感叹,而我对城墙顶上的广阔感触很深。那上面是一片荒无人迹的辽阔的地带,走上半小时碰不见一个人。后来我在美国,和台湾来的同学聊天,说到梁思成先生曾建议把北京的城墙改作高速公路,那同学笑了起来,说道:梁先生的主意真怪,城墙顶上还能修马路吗?这位同学去过世界上很多地方,看到过很多城墙,那上面都修不了马路。我也到过世界上很多城市,见过很多古城墙。罗马城的城墙算是宏伟的了,假如有两个帕瓦罗蒂那样的人在上面并肩行走,就得掉下来一个。难怪没见过北京城墙的人要不信在上面可以修马路——其实不仅能修,而且修出来会是这世界上最伟大的人文景观之一。

      过去,在北京三十四中附近的城墙里有个很大的仓库,里面放了军火和汽油。有一天爆炸了,三十四中的师生出来救人,赢得了很大的荣誉——他们学校有间荣誉室,里面挂满了那回得来的锦旗。我插队时和三十四中的学生在一起,听他们说过自己母校的光荣史。这说明城墙顶上不但能跑汽车,肚子里还能修仓库。像这样的城墙在世界上绝无仅有,可惜已经被拆了个精光。没有了宏伟的城墙、寂寞的城楼,北京城是一座没有了历史的城市。有些人会说,它怎么会没有历史——历史写在纸上。这种看法是不对的。我到过很多城市,就我所见,一座城市的历史不可能是别的,只能是它的建筑。北京城就其本来面目来说,是一座硕大无比的四合院。没有了城墙它就不成个样子。

      中国有五千年的文明史,这部历史有一半写在故纸上,还有一半埋在地下,只是缺少了一部立在地上的历史,可以供人在其中漫步。我小的时候,北京不但有城墙,还有很多古老的院子——我在教育部院里住过很久,那地方是原来的郑王府,在很长时间里保持了王府的旧貌,屋檐下住满了燕子。傍晚时分,燕子在那里表演着令人惊讶的飞行术:它以闪电般的速度俯冲下来,猛地一抬头,收起翅膀,不差毫厘地钻进椽子中间一个小洞里。一二百年前,郑王府里的一位宫女也能看到这种景象,并且对燕子的飞行技巧感到诧异 ——能见到古人所见,感到古人所感,这种感觉就是历史感。很遗憾的是,现在北京城里盖满了高楼,燕子找不着自己住过的屋檐,所以也很少能看到了。现在的年轻人读到“似曾相识燕归来”,大概也不读懂了。所幸的是,北京还有故宫,还有颐和园。但是没有了城墙,没有了燕子,总是一种缺憾。


    September 25

    黄金分割

    Fibonacci 数列计算黄金分割 : 1, 1, 2, 3, 5,8,13,21 ... ...

    x = 2
    y = 3.0

    while y < 10000 :
    print x/y
    x ,y = y, x+y

    August 08

    取Gmail邮件(Draft)

    import getpass, poplib, base64
    import string ,email
    from BeautifulSoup import BeautifulSoup
    
    M = poplib.POP3_SSL('pop.gmail.com')
    M.user('jiapengjun')
    M.pass_(getpass.getpass())
    
    hdr,message,octet=M.retr(1000)
    mail=email.message_from_string(string.join(message,'\n'))
    
    print mail['To'] , mail['From']
    
    msg = ''
    for part in mail.get_payload() :
            type = part.get_content_charset()
            msg = part.get_payload()
    
    msg = unicode(base64.decodestring(msg), type)
    print msg
    
    #soup = BeautifulSoup(msg) 
    #print soup.prettify()
    #print soup.__str__('windows-1252')
    
    July 31

    嘿嘿,意大利

    看来意大利人在欧洲不怎么招人待见,不过这片子把意大利换成中国也挺match的
     
    May 12

    使用smtplib 发送email.

    # Import smtplib for the actual sending function
    import smtplib
    
    # Import the email modules we'll need
    from email.MIMEText import MIMEText
    me = 'pjia@gmail.com'
    you = 'pjia@gmail.com'
    textfile = 'D:/workspace/stax.dtd'
    
    # Open a plain text file for reading.  For this example, assume that
    # the text file contains only ASCII characters.
    fp = open(textfile, 'rb')
    # Create a text/plain message
    msg = MIMEText(fp.read())
    fp.close()
    
    # me == the sender's email address
    # you == the recipient's email address
    msg['Subject'] = 'The contents of %s' % textfile
    msg['From'] = me
    msg['To'] = you
    
    # Send the message via our own SMTP server, but don't include the
    # envelope header.
    s = smtplib.SMTP()
    s.connect('bjlinux12:25')
    s.sendmail(me, [you], msg.as_string())
    s.close()
    
    

    使用telnetlib 登陆telnet.

    import getpass
    import sys
    import telnetlib
    import string
    import time
    
    HOST = "bjhp8"
    user = raw_input("Enter your remote account: ")
    password = getpass.getpass()
    
    tn = telnetlib.Telnet(HOST)
    
    # 显示DEBUG信息,打开下边的注释
    # tn.set_debuglevel(10)  
    
    tn.read_until("login:")
    tn.write(user + "\n")           # 如果不work, 试试使用'\r\n'
    if password:
        tn.read_until("Password: ")
        tn.write(password + "\n")
    
    # 有些系统需要先读取缓冲后才可以发送命令
    m_msg = tn.read_until('>', 5)
    print m_msg
    
    # 倒霉的SUSE还要设置一下TERM type.
    if string.find(m_msg , 'tset') != -1 :
            tn.write("vt100\n")
    
    tn.write("ls\n")
    print tn.read_until('>', 5)
    tn.write("exit\n")
    
    # 对方断开链接后,使用read_all读取返回信息
    print tn.read_all()
    
    September 22

    MSN space 一个被忽略的功能

    以前一直没有注意,今天试了一下还挺好用,就是通过email来发布blog .
     
    首先登陆到你的blog页面,点击“设置“ , 选择”电子邮件发布“ :
        1 选中 ”Turn on e-mail publishing“
        2 输入一个用于发送邮件的邮箱,比如我经常使用gmail邮箱,就填入”jiapengjun@gmail.com
        3 选择一个”secret word“ , 这个随便填一个容易记住的就行,这个word会和你的msn ID 拼成一个发布地址,比如我填入”1234“ ,拼出来的邮件地址是”jiapj.1234@spaces.msn.com“,那么每次从jiapengjun@gmail.com 发送到jiapj.1234@spaces.msn.com的邮件会自动发布到你的blog上。邮件的title会自动发布成blog添加项的标题
       4 选择邮件提交后马上publish,还是先存放为draft, 等编辑之后再publish。
     
    这个功能的一个好处可以直接转发自己的邮件,而不用登陆上来进行copy & paste, 对于我这种自己不会写东东,只知道C&P的人来说比较方便。
     
    另外,注意保密邮件中的保密信息,比如手机号码、用户口令之类的,毕竟贴到Space上大家都能看到。
     
    June 23

    Sed1line (Draft)

    # Add by jpj,     2005/06/21

    x: P<->H    P:pattern space     H:hold space    C:current line   
    h: P->H   
    H: P+>H
    g: H->P
    G: H+>P
    n: C+1 ->P
    N: C+1 +>P
    d: Delete P
    D: Delete P first LINE .

    sed -n    '/postfix/{p;n;N;p;}'    /etc/passwd        //打印 C, C+2
    sed -n    '/postfix/{N;N;p;}'      /etc/passwd        //打印 C, C+2
    sed -n    '/postfix/,+2p'           /etc/passwd        //打印 C, C+2
    sed -n    '/postfix/{n;N;N;p;}'    /etc/passwd        //打印 C+1, C+3

    sed -n    '/postfix/{x;p;};h'      /etc/passwd        //打印 C-1
    sed -n    '/postfix/{G;p;};h'      /etc/passwd        //打印 C, C-1
    sed -n    '/postfix/{x;p;x;p;};h' /etc/passwd        //打印 C-1, C
    sed -e :a -e '/postfix/q;N;11,$D;ba'                 /etc/passwd   //打印 C-9, C
    sed -n -e :a -e '/postfix/q;N;=;p;3,/$=/D;ba'    /etc/passwd   //打印 C-2, C
        #####    1 -> N => P[1+2]     p:print P[12]
        #####      -> N => P[1+2+3]   p:print P[123]
        #####    D =>P[2+3]
        #####      -> N => P[2+3+4]   p:print P[234]
        #####    D =>P[3+4]
        #####    ... ...

    sed    '/postfix/{x;p;x}'  /etc/passwd            //该行前加一空行
    sed     '/postfix/{p;x;}'  /etc/passwd            //该行后加一空行
       
    sed     'n;d'    /etc/passwd                //隔行打印

    sed -n  '/postfix/{q;};p'                    /etc/passwd    //打印 1, C
    sed -n    '1h;1!H;/postfix/{x;p;q;}'      /etc/passwd    //打印 1, C
    sed -n  '1{x;n};H;/postfix/{x;p;q;}'     /etc/passwd    //打印 1, C

    sed =     /etc/passwd| sed 'N;s/\n/\t/'      `        //打印行号
    sed -n  '$='                           /etc/passwd        //打印文件行数
    sed -n  '/postfix/='                 /etc/passwd        //打印postfix所在行的行号


    sed    's/.$//'                                 // DOS to UNIX 格式
    sed    's/$'"/`echo \\\r`/"                // UNIX to DOS 格式

    sed    '1!G;h;$!d'         /etc/passwd     // 反转打印 ,同tac [cat reverse]


     

    March 18

    NFS 安全问题

    假设 A 机器 export 出一个目录   /export   ,目录中含有一个文件 asroot

    ls  /export/asroot 结果如下:

    -rwsr-xr--  1 root root 13408 Oct 21 16:46 /export/asroot

    asroot设置了setuid(0) , 执行 /export/asroot  id  显示如下:
     
    uid=0(root) gid=0(root) groups=0(root),64(pkcs11) , 程序以root用户运行


    此时 B 机器 mount -t nfs  A:/export/asroot   /local/share

    在 B 机器上的一个普通用户 user1 到 /local/share 目录下执行 asroot id, 结果如下:

    uid=0(root) gid=100(users) groups=14(uucp),17(audio),33(video),100(users)

    user1获得 root的执行权限

    March 17

    几条 linux 命令

    查找相关文件:  apropos   keyword

    压缩执行文件:  gzexe    /bin/ls

    使用iso文件:    mount  -t iso9660  xxxx.iso  /mnt/cdrom  -o loop

    监控命令运行:  watch   ls -l  xxx.log

    禁止修改文件: chattr +i file.name { FS : ext2, ext3 }

    比较排序文件: comm file1 file2

    单词查询: look prefix_word

    拼写检查: ispell or spell

    设置终端: stty  or tput