星期一, 四月 21, 2008

cygwin rxvt 及其中文支持配置

安装 cygwin 本身是比较简单的,按照提示做就好了。但安装好之后,默认启用 Windows 的 cmd.exe 作为命令行功能是比较弱的,可以启动后再运行 rxvt,但发现中文输入输出有问题。

首先,设置 cygwin 使用 rxvt 作为默认的 CLI,编辑 cygwin.bat(C:\cygwin\cygwin.bat)文件,最后文件是这样的:
@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=codepage:oem tty binmode title
rxvt -e bash --login -i
主要看最后两行。

为支持中文,编辑 ~/.bashrc 如下:
export LESSCHARSET=latin1
alias less='/bin/less -r'
alias ls='/bin/ls -F --color=tty --show-control-chars'
export LC_ALL=zh_CN.GBK
export LC_CTYPE=zh_CN.GBK
export LANG=zh_CN.GBK
# export XMODIFIERS="@im=Chinput"
# stty cs8-istrip
# stty pass8
export OUTPUT_CHARSET="GBK"
编辑 ~/.inputrc 如下:
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
set completion-ignore-case on
此时,如果使用的是 cmd.exe 作为 CLI,则已经可以输入输出中文了,但如果是 rxvt,则还需要修改 ~/.Xdefaults,因为 rxvt 中文显示和字体有关:
! ~/.Xdefaults - X default resource settings 
Rxvt*loginShell: True
Rxvt*font: -*-courier-medium-r-*-*-16-140-*-75-*-*-*-*
Rxvt*boldfont: -*-courier-bold-r-*-*-16-140-*-75-*-*-*-*
! Rxvt*font: -*-nsimsun-medium-r-*-*-16-140-*-75-*-*-*-*
! Rxvt*boldfont: -*-nsimsun-bold-r-*-*-16-140-*-75-*-*-*-*
Rxvt*SaveLines: 2000
Rxvt*background: #000020
Rxvt*foreground: #ffffbf
目前我只发现 courier 和 nsimsun(新宋) 字体可用。

另外,如果安装的是 native 版本的 gvim,可以直接调用,前提是已经将 gvim 加入到了 Windows 的 %PATH% 环境变量中了。因为 Windows 文件名的原因,如果直接运行 gvim ~/.Xdefaults 是不行的,但可以运行 gvim .Xdefaults。

星期一, 四月 14, 2008

Python open() 的 'U' 参数

看下面的一个 Python 脚本:
#!/usr/bin/python
# -*- encoding: utf-8 -*-

__author__ = "周鹏 "
__date__ = "14 April 2008"
__version__ = "0.1"

import re
import os,sys
import subprocess
from subprocess import PIPE

class CheckFail:
def __init__(self, message):
self.message = message

class CheckPoint:
"""
过滤 dmesg 输出以检查是否有硬件故障
"""
def __init__(self, args, info, config):
self.args = args
self.info = info
self.config = config
self.status = "OK"
self.strerr = ""
self.L_regexp = []
re_empty_line = re.compile("^\s*$")
for line in open(config, 'rU'):
if line.startswith("#"): continue
elif re_empty_line.match(line): continue
line = r"%s" % line.strip("\n")
self.L_regexp.append(re.compile(line))

def run(self):
pipe = subprocess.Popen(["dmesg"], stdout=PIPE, stderr=PIPE)
for line in pipe.stdout.readlines():
line = line.strip("\n")
for ro in self.L_regexp:
mo = ro.search(line)
if mo:
return "FAIL", "dmesg 硬件或核心故障: %s" % line
return self.status, self.strerr
这里使用 open(fname, 'rU') 从一个配置文件 config 中读取需要的过滤模式,然后对 dmesg 的输出进行匹配,因为开始编辑这个 config 文件的时候时在 Windows 下面,所以如果仅仅使用 'r',则读到的将是带 \r 作为换行符的串,那么当与在 Linux 下的文本进行过滤时,则完全不可能真正进行匹配!

所以这里使用了一个 'U' 参数。

星期日, 四月 06, 2008

较安全的 outlook 基本设置

安全性首先取决于对服务器的设置,即对于 SMTP 和 POP3 等都有必要的验证,同时通信使用加密连接如 SSL,此时对于 outlook 的设置如下:

"工具"->"电子邮件帐户..."->"添加/更改"

"用户信息"是出现在邮件头中的信息,"登陆信息"是指接收邮件使用 POP3 服务器时的登陆信息,"服务器信息"包括发送和接收的 POP3/SMTP 服务器,很可能是同一台服务器,例如:ssl.example.com。

然后进入"其他设置",在"发送服务器"标签中设置"我的发送服务器(SMTP)需要验证"以及"使用与接收邮件服务器(即 POP3)相同的设置",如不设置后者,则通常意味着 SMTP 和 POP3 使用了不同的服务器,或至少没有使用统一的账号系统。

在"高级"标签中,因为需要使用 SSL 加密,因此必须勾选相应选项,同时需要设定正确的端口,SMTP SSL 通常为 465,POP3 SSL 为 995;通常情况下,你可能需要在不同的主机上处理邮件,因此应该选择"在服务器上保留邮件的副本",这样就不至于导致在一台客户机上接收邮件后在另外一台客户机上无法处理。但此时无法保证设置和对邮件的处理结果保持一致,如何能使用 IMAP 才好!