Pengjun's profile上善若水PhotosBlogLists Tools Help

Pengjun Jia

Location
Album  
Photo 1 of 2

上善若水

便决计、疏狂休悔。但有玉人常照眼,向名花、美酒拚沉醉。天下事,公等在。
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