12/31/2006

架设 wiki -- MoinMoin server

简介

*
MoinMoin 是用 Python 语言写的一个开源的 WiKi 引擎,基于 GNU GPL 协议发布。MoinMoin 的软件架构很灵活,通过 Python 能很容易进行功能扩展,现在已开发出大量的 Extensions。MoinMoin 不使用后台数据库存放数据,而是以文本的形式存放在服务器目录中。
*
MoinMoin 不带 Web 服务器,需与 Web 服务器配合才能进行 WiKi 页面的发布。MoinMoin 支持的 Web 服务器有Apache + CGI、Apache + FastCgi、Apache + Mod_Python、IIS 等。dot1 上面 MoinMoin 采用 Apache + CGI 方式。

准备工作

* 1.保证 Apache、python 已安装并能正常工作;
*

2.下载最新版 moin-1.5.6, http://moinmoin.wikiwikiweb.de/MoinMoinDownload

安装配置

*

安装 MoinMoin
* tar zxvf moin-1.5.6.tar.gz
* cd moin-1.5.6
* python -v setup.py install
*

默认安装在 /usr/share/moin 目录下面,该目录存放 MoinMoin 系统的模板,内容大致有以下几类:
o

/usr/share/moin/data 目录存放 WiKi pages,users,plugin,cache 等
o

/usr/share/moin/underlay 目录存放默认的 WiKi pages,有多种语言版本的帮助文档、默认页面文档等
o /usr/share/moin/htdocs 目录存放网页元素,如图片、主题风格等
o /usr/share/moin/server 目录存放服务器启动脚本示例
o /usr/share/moin/config目录存放配置文件示例
*

通过拷贝模板目录中的文件,就可生成不同的 WiKi 实例。MoinMoin 的软件升级也很简单,只需用新版的模板文件下覆盖旧文就可以了。
*

创建 MoinMoin 实例
* 在服务器上创建一个目录用于存放实例,目录名不能是 wiki,它已被系统保留使用,这里我们使用 ccosswiki ,并从模板目录拷贝实例所需文件,如下:
o cd /var/www
o mkdir ccosswiki
o cp -rf /usr/share/moin/data ccosswiki
o cp -rf /usr/share/moin/underlay ccosswiki
o cp /usr/share/moin/config/wikiconfig.py ccosswiki
* 设置实例目录权限
* chown -R apache.apache ccosswiki
* chmod -R ug+rw ccosswiki
* chmod -R o-rwx ccosswiki
* 配置 Apache + CGI 方式
* 1.cp /usr/share/moin/server/moin.cgi /var/www/ccosswiki
* 2.修改 moin.cgi 中 sys.path.insert() 路径,如下:
o sys.path.insert(0, '/var/www/ccosswiki/')
* 3.配置 wikiconfig.py

# -*- coding: utf-8 -*- #使用UTF-8编码
# IMPORTANT! This encoding (charset) setting MUST be correct! If you live in a
# western country and you don't know that you use utf-8, you probably want to
# use iso-8859-1 (or some other iso charset). If you use utf-8 (a Unicode
# encoding) you MUST use: coding: utf-8
# That setting must match the encoding your editor uses when you modify the
# settings below. If it does not, special non-ASCII chars will be wrong.

"""
MoinMoin - Configuration for a single wiki

If you run a single wiki only, you can omit the farmconfig.py config
file and just use wikiconfig.py - it will be used for every request
we get in that case.

Note that there are more config options than you'll find in
the version of this file that is installed by default; see
the module MoinMoin.multiconfig for a full list of names and their
default values.

Also, the URL http://moinmoin.wikiwikiweb.de/HelpOnConfiguration has
a list of config options.

** Please do not use this file for a wiki farm. Use the sample file
from the wikifarm directory instead! **

@copyright: 2000-2005 by Juergen Hermann
@license: GNU GPL, see COPYING for details.
"""

from MoinMoin.multiconfig import DefaultConfig


class Config(DefaultConfig):

# Wiki identity ----------------------------------------------------

# Site name, used by default for wiki name-logo [Unicode]
sitename = u'CCOSS Wiki' #你的WiKi网站的名称

# Wiki logo. You can use an image, text or both. [Unicode]
# For no logo or text, use '' - the default is to show the sitename.
# See also url_prefix setting below!
logo_string = u'MoinMoin Logo' #网站Logo

# name of entry page / front page [Unicode], choose one of those:

# a) if most wiki content is in a single language
#page_front_page = u"MyStartingPage"

# b) if wiki content is maintained in many languages
page_front_page = u"FrontPage" #启用首页

# The interwiki name used in interwiki links
#interwikiname = 'UntitledWiki'
# Show the interwiki name (and link it to page_front_page) in the Theme,
# nice for farm setups or when your logo does not show the wiki's name.
#show_interwiki = 1



# Critical setup ---------------------------------------------------

# Misconfiguration here will render your wiki unusable. Check that
# all directories are accessible by the web server or moin server.

# If you encounter problems, try to set data_dir and data_underlay_dir
# to absolute paths.

# Where your mutable wiki pages are. You want to make regular
# backups of this directory.
data_dir = '/root/mywiki/data/' #设置data目录路径,要用绝对路径

# Where read-only system and help page are. You might want to share
# this directory between several wikis. When you update MoinMoin,
# you can safely replace the underlay directory with a new one. This
# directory is part of MoinMoin distribution, you don't have to
# backup it.
data_underlay_dir = '/root/mywiki/underlay/' #设置underlay目录路径,要用绝对路径

# This must be '/wiki' for twisted and standalone. For CGI, it should
# match your Apache Alias setting.
url_prefix = '/wiki'


# Security ----------------------------------------------------------

# This is checked by some rather critical and potentially harmful actions,
# like despam or PackageInstaller action:
superuser = [u"root", ] #设置超级用户

# IMPORTANT: grant yourself admin rights! replace YourName with
# your user name. See HelpOnAccessControlLists for more help.
# All acl_rights_xxx options must use unicode [Unicode]
acl_rights_before = u"YourName:read,write,delete,revert,admin" #设置管理权限

# Link spam protection for public wikis (Uncomment to enable)
# Needs a reliable internet connection.
#from MoinMoin.util.antispam import SecurityPolicy


# Mail --------------------------------------------------------------

# Configure to enable subscribing to pages (disabled by default)
# or sending forgotten passwords.

# SMTP server, e.g. "mail.provider.com" (None to disable mail)
mail_smarthost = "192.168.28.200" #使用21cn的smtp服务器发送邮件

# The return address, e.g u"Jürgen Wiki " [Unicode]
mail_from = u"hongzhiyi" #发送者

# "user pwd" if you need to use SMTP AUTH
mail_login = "hongzhiyi 123456" #SMTP服务器验证,以"user password"格式填写


# User interface ----------------------------------------------------

# Add your wikis important pages at the end. It is not recommended to
# remove the default links. Leave room for user links - don't use
# more than 6 short items.
# You MUST use Unicode strings here, but you need not use localized
# page names for system and help pages, those will be used automatically
# according to the user selected language. [Unicode]
navi_bar = [ #设置导航栏
# If you want to show your page_front_page here:
u'%(page_front_page)s',
u'RecentChanges',
u'FindPage',
u'HelpContents',
]

# The default theme anonymous or new users get
theme_default = 'modern' #设置网页主题峁


# Language options --------------------------------------------------

# See http://moinmoin.wikiwikiweb.de/ConfigMarket for configuration in
# YOUR language that other people contributed.

# The main wiki language, set the direction of the wiki pages
language_default = 'zh' #设置默认语言

# You must use Unicode strings here [Unicode]
page_category_regex = u'^Category[A-Z]'
page_dict_regex = u'[a-z]Dict$'
page_form_regex = u'[a-z]Form$'
page_group_regex = u'[a-z]Group$'
page_template_regex = u'[a-z]Template$'

# Content options ---------------------------------------------------

# Show users hostnames in RecentChanges
show_hosts = 1

# Enable graphical charts, requires gdchart.
#chart_options = {'width': 600, 'height': 300}

* 4.配置 Apache2
* 在 /etc/httpd/conf.d/ 下新增 moinmoin.conf,添加如下内容:

Alias /wiki/ "/usr/share/moin/htdocs/"

Order deny,allow
Allow from all


ScriptAlias /ccosswiki "/var/www/ccosswiki/moin.cgi"

Order deny,allow
Allow from all


* 重启 Apache 并测试 Wiki
* 1./etc/init.d/httpd reload
*

2.在浏览器中输入 http://192.168.28.1/ccosswiki
* 安装中文语言包
* 测试成功后,添加新用户,输入 root 用户名(在 wikiconfig.py 设置的超级用户),然后以 root 身份登录,输入以下网址:
o

http://192.168.28.1/ccosswiki/SystemPagesSetup
o

如果你没有管理权限,访问该页面时在语言包前面是不会显示安装按钮的。

相关配置

* 设置时区
*

除了手动更改外,我没找到好的办法 :(
* 具体操作:在“用户设置”、“时区”中修改“您的当地时间是”为+8的时间,比如 2006-12-13 14:36:54 [+08:00]
*

PS.刚试了几个采用 MoinMoin 的中文 Wiki 也有这个问题。
* 其它设置

补充

* 采用 Apache + Mod_Python 方式
* 这种方式能获得更高的性能,配置也不复杂,至少在我自己的机器上面很轻松搞定
*

1.安装 Mod_Python,目前最新版本为3.2.10,下载地址:http://www.modpython.org,安装过程如下:
o tar zxvf mod_python-3.2.10.tgz
o cd mod_python-3.2.10
o

./configure --with-apxs=/opt/apache2/bin/apxs 由于我机器上的apache没有安装在默认路径,故需要指定 apxs 的路径
o

make && make install 默认安装在 apache/modules 目录下
*

2.配置 /etc/httpd/conf.d/python.conf,添加 LoadModule python_module modules/mod_python.so
*

这时可以重启 apache 看能否正确装载 Mod_Python
* 3.检查 wikiconfig.py 中 data_dir 和 data_underlay_dir 路径是否正确
*

4.修改 /etc/httpd/conf.d/moinmoin.conf,注释 ScriptAlias :

#ScriptAlias /mywiki "/var/www/moin/mywiki/moin.cgi"

* 并增加


SetHandler python-program
# Add the path of your wiki directory
PythonPath "['/var/www/moin/mywiki'] + sys.path"
PythonHandler MoinMoin.request::RequestModPy.run


* 5.重启 apache 测试

权限

1.成为管理员:
在配置文件wikiconfig.py中加入如下一行:

acl_rights_default = u'+admin:admin,delete Known:read,write,revert All:read'

这样非注册用户仅有阅读权限,注册用户(Known指已经注册的用户)可读写;admin拥有管理员权限并且可删除、重命名.简言之,拥有admin权限的就是管理员.
2.建立群组:
假设我们要建立一个名为TrustedGroup的可信赖的组(注意:一个组名应该就是一个WikiName(wiki名),即以首字母大写的两个(或以上)单词组成一个词(单词之间无空格),如TrustedGroup)
1)进入FindPage,建立一个名为TrustedGroup的wiki page
2)编辑TrustedGroup,所有的组员名单以列表方式给出,比如:

* hitgnu
* jeffrey

由于此页面会影响到访问权限的管理,应该设置其权限于仅允许管理员读写,其他的用户应该对其无任何权限,故而此页的最后内容应该类似如下的方式:

#acl +admin:write,read All:
* hitgnu
* jeffrey

3.关键页面授权特定用户组访问:
建立了用户组之后,我们可以指定某个页面授权特定组的特殊权限,只需在该页面添加类似如下的内容:

#acl +admin:read,write,revert,delete TrustedGroup:read,write,revert All:

这样,仅仅管理员和特定的组成员可以看到并可以编辑该页面的内容,有效地保护该页面包含的敏感内容.

12/29/2006

待完成脚本

修改 IP 地址 sudo vi /etc/network/interfaces
...
auto eth1
iface eth1 inet static
address 192.168.2.18
netmask 255.255.255.0
gateway 192.168.2.1
wireless-essid TP-LINK
...

重啟網卡 使設置生效 sudo /etc/init.d/networking restart

修改 DNS sudo vi /etc/resolv.conf

以上工作,怎么用脚本实现呢?


#!/bin/bash
#############################
#Function: Auto change IP #
#Arch : Ubuntu,Debian #
#Created : 2006.12.28 #
#############################
usage(){
echo "USAGE: $0 "
}

if [ $# -gt 2 ] || [ $# -eq 0 ];then
usage
exit -1;
fi

if [[ $1 == 'spec' ]];then
if [ $# -lt 2 ];then
echo " No address specified!"
exit -1;
fi
else
if [ $# -eq 2 ];then
usage
exit 1;
fi
fi

mfile="/home/dev/tmp/interfaces"
mhome="192.168.2.18"
mout="192.168.1.18"
mode="$1"
case "$mode" in
home)
#cmd="perl -pi -e 's/(address\s+).*/\$1"$mhome"/ unless /^#/ ' $mfile"
cmd="sed -e 's/\(address \).*/\1"$home"/' $mfile"
echo $cmd
#eval $cmd
echo "Change to home mode ok."
;;
out)
#cmd="perl -pi -e 's/(address\s+).*/\$1"$mout"/ unless /^#/ ' $mfile"
cmd="sed -e 's/\(address \).*/\1"$out"/' $mfile"
echo $cmd
#eval $cmd
echo "Change to outside mode ok."
;;
spec)
#cmd="perl -pi -e 's/(address\s+).*/\$1"$mout"/ unless /^#/ ' $mfile"
cmd="sed -e 's/\(address \).*/\1$$2/' $mfile"
#eval $cmd
echo $cmd
echo "Change to specify mode ok."
;;
*)
echo " Not support mode specified!"
usage
;;
esac

12/26/2006

Diango + apache + mod_python 配置成功了!

系统为Debian,配置过程如下:
1.安装 apache2 mysql Django mod_python等,这里说明一下,应该安装 apache2,因为 apache 不支持 mod_python 模块;
2.创建 Django 工程,django-admin startproject mytest ,并做相应设置,启动 manage.py runserver 进行测试,保证 django 环境可用;
3.启动 apache2,保证 apache server 可用(安装 mod_python 后,启动 apache 该模块会自动加载,可查看 /etc/apache2/mods-available/mod_python.load);
4.新建 /etc/apache2/conf.d/python_django.conf 文件,内容如下(特别注意 PythonPath 的设置,我机器上 django 工程的绝对路径为 /home/dev/work/mytest):
Listen 192.168.28.170:8888


SetHandler python-program
PythonPath "['/home/dev/work/'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mytest.settings
PythonDebug On
PythonAutoReload Off


5.重新启动 apache,http://192.168.28.170:8888/xxxx/

在 debian 下使用 sudo

安装了 debian,使用过程中觉得 su 到 root 用户执行某些操作比较麻烦,还容易误操作,于是安装了 sudo,感觉方便多了,而且安全,下面是安装过程总结。
1.切换到 root 用户下面,安装 sudo 包: apt-get install sudo
2.配置:visudo /etc/sudoers,内容如下:

# Host alias specification
Host_Alias LAN = 192.68.28.169
# User alias specification
User_Alias DEV = admin
# Cmnd alias specification
Cmnd_Alias FILEUTILS = /bin/chown, /bin/chmod, /bin/chgrp, /bin/mount, /bin/umount, /usr/bin/cdrecord
Cmnd_Alias DEBUTILS = /usr/bin/dpkg, /usr/bin/apt-get
Cmnd_Alias EDITORS = /bin/vi, /bin/vim
# User privilege specification
root ALL=(ALL) ALL
%dev ALL=(ALL) NOPASSWD: ALL
Defaults:%dev !lecture
Defaults:%dev !authenticate

3.Ctrl + x 选择 Y 保存(覆盖原文件)
4.切换到 dev 用户下,执行 sudo apt-get update 试试 :D

Good luck!

12/21/2006

http://www.yarshure.com/zh/ibm_django/
http://moyuer.cn/

du -hs .evolution/

大清后宫主题曲君不见

12/20/2006

遇到几个 shell 问题

langpack=`cat /etc/sysconfig/i18n|grep "^LANG="|sed 's/_.*//'|sed 's/.*\"//'`
if [ $langpack == "zh" ]; then
echo "yes"
else
echo "no"
fi

cp %{_libdir}/firefox/defaults/profile/prefs.js `find $HOME/.mozilla/firefox/ -name prefs.js 2>/dev/null` --reply=yes &>/dev/null

cp test.js $( echo $( find $HOME/.mozilla/firefox/ -name xpti.dat )|cut -d '/' -f 1-5 )

12/15/2006

Shell mirror Ubuntu 的 i386 部分

转载自http://linux.hiweed.com/node/3218

rsync -aPS --delete-after --exclude *amd64* --exclude *ia64* --exclude *powerpc* --exclude *sparc* --exclude *hoary* --exclude *warty* --exclude *dapper* --exclude *.iso --exclude *.orig.tar.gz --exclude *.diff.gz --exclude *.dsc rsync://archive.ubuntu.com/ubuntu /home/w103/hiweed/mirror/ubuntu/


解释一下:
第2行 exclude 掉不想要的架构。
第3行 exclude 掉不想要的发行版本。
第4行 exclude 去掉 .iso 光盘镜像文件。
第5行 exclude 去掉源代码软件包。
第6行是镜像来源。
第7行是镜像到哪里去。

一个自动选择最快ubuntu mirror site的shell脚本

转载自http://blog.scaner.i.thu.cn

Bash:
#!/bin/bash

if [ $# != 1 -a "$1" != "hoary" -a "$1" != "breezy" ] ; then
echo "$0 (hoary|breezy)"
exit 1
fi

echo "Seting $1 ..."
MIRRORS="http://ftp.iinet.net.au/pub/ubuntu/ http://mirror.optus.net/ubuntu/ http://mirror.isp.net.au/ftp/pub/ubuntu/ http://www.planetmirror.com/pub/ubuntu/ http://ftp.filearena.net/pub/ubuntu/ http://mirror.pacific.net.au/linux/ubuntu/ http://ubuntu.inode.at/ubuntu/ http://ubuntu.uni-klu.ac.at/ubuntu/ http://gd.tuwien.ac.at/opsys/linux/ubuntu/archive/ http://ftp.belnet.be/pub/mirror/ubuntu.com/ http://ubuntu.mirrors.skynet.be/pub/ubuntu.com/ http://mirror.freax.be/ubuntu/archive.ubuntu.com/ http://espelhos.edugraf.ufsc.br/ubuntu/ http://ubuntu.interlegis.gov.br/archive/ http://ubuntu.c3sl.ufpr.br/ubuntu/ http://mirror.cpsc.ucalgary.ca/mirror/ubuntu.com/ http://mirror.arcticnetwork.ca/pub/ubuntu/packages/ http://archive.ubuntu.org.cn/ubuntu/ http://debian.cn99.com/ubuntu/ http://mirror.lupaworld.com/ubuntu/ http://ftp.ucr.ac.cr/ubuntu/ http://archive.ubuntu.cz/ubuntu/ http://ubuntu.supp.name/ubuntu/ http://mirrors.dk.telia.net/ubuntu/ http://mirrors.dotsrc.org/ubuntu/ http://klid.dk/homeftp/ubuntu/ http://ftp.estpak.ee/pub/ubuntu/ http://www.nic.funet.fi/pub/mirrors/archive.ubuntu.com/ http://mir1.ovh.net/ubuntu/ubuntu/ http://fr.archive.ubuntu.com/ubuntu/ http://ftp.u-picardie.fr/pub/ubuntu/ubuntu/ http://ftp.oleane.net/pub/ubuntu/ http://debian.charite.de/ubuntu/ http://ftp.inf.tu-dresden.de/os/linux/dists/ubuntu http://www.artfiles.org/ubuntu.com http://ftp.rz.tu-bs.de/pub/mirror/ubuntu-packages/ http://www.ftp.uni-erlangen.de/pub/mirrors/ubuntu/ http://debian.tu-bs.de/ubuntu http://ftp.ntua.gr/pub/linux/ubuntu/ http://ftp.kfki.hu/linux/ubuntu/ http://komo.vlsm.org/ubuntu/ http://kambing.vlsm.org/ubuntu/ http://ubuntu.odg.cc/ http://ubuntu.lhi.is/ http://ftp.esat.net/mirrors/archive.ubuntu.com/ http://ftp.heanet.ie/pub/ubuntu/ http://ftp.linux.it/ubuntu/ http://na.mirror.garr.it/mirrors/ubuntu-archive/ http://ubuntu.mithril-linux.org/archives/ http://mirror.letsopen.com/os/ubuntu/ http://ftp.kaist.ac.kr/pub/ubuntu/ http://ubuntu-arch.linux.edu.lv/ubuntu/ http://ftp.litnet.lt/pub/ubuntu/ http://nl.archive.ubuntu.com/ubuntu/ http://ubuntu.synssans.nl http://www.computacion.uni.edu.ni/iso/ubuntu/ http://no.archive.ubuntu.com/ubuntu/ http://ubuntulinux.mainseek.com/ubuntu/ http://ubuntu.task.gda.pl/ubuntu/ http://darkstar.ist.utl.pt/ubuntu/archive/ http://ubuntu.dcc.fc.up.pt/ http://ftp.iasi.roedu.net/mirrors/ubuntulinux.org/ubuntu/ http://ftp.lug.ro/ubuntu/ http://debian.nsu.ru/ubuntu/ http://ftp.acc.umu.se/mirror/ubuntu/ http://mirror.switch.ch/ftp/mirror/ubuntu/ http://apt.ubuntu.org.tw/ubuntu/ http://apt.nc.hcc.edu.tw/pub/ubuntu/ http://ubuntu.csie.ntu.edu.tw/ubuntu/ http://ftp.cse.yzu.edu.tw/ftp/Linux/Ubuntu/ubuntu/ http://godel.cs.bilgi.edu.tr/mirror/ubuntu/ http://www.mirror.ac.uk/mirror/archive.ubuntu.com/ubuntu/ http://ubuntu.blueyonder.co.uk/archive/ http://mirror.cs.umn.edu/ubuntu/ http://lug.mtu.edu/ubuntu/ http://mirror.clarkson.edu/pub/distributions/ubuntu/ http://ubuntu.mirrors.tds.net/ubuntu/ http://www.opensourcemirrors.org/ubuntu/ http://ftp.ale.org/pub/mirrors/ubuntu/ http://ubuntu.secs.oakland.edu/ http://mirror.mcs.anl.gov/pub/ubuntu/ http://mirrors.cat.pdx.edu/ubuntu/ http://ubuntu.cs.utah.edu/ubuntu/ http://ftp.ussg.iu.edu/linux/ubuntu/ http://mirrors.xmission.com/ubuntu/ http://ftp.osuosl.org/pub/ubuntu/ http://mirrors.cs.wmich.edu/ubuntu/"

TIME="/usr/bin/time -o timer.txt -f %e"
URL="dists/$1/main/binary-i386/Packages.gz"
WGET="wget --cache=off -T 20 -t 1 -w 0 -O /dev/null"
PAYTIME=1000
TEMPTIME=1000

SITE="NONE"

for mirror in $MIRRORS; do
echo "Testing $mirror ..."
TEMPTIME=$($TIME $WGET $mirror$URL)
if [ "$?" = 0 ] ; then
TEMPTIME=$(cat timer.txt)
echo "wget $1: $TEMPTIME CurrMinTime: $PAYTIME"
TEMPTIME2=$(echo "$PAYTIME> $TEMPTIME"|bc)
if [ $TEMPTIME2 = 1 ] ; then
PAYTIME=$TEMPTIME
SITE=$mirror
echo "Set best site($PAYTIME): $SITE"
fi
fi
rm timer.txt
done

12/11/2006

曾经免费的 stardict 收钱了~

首先他这样收费不合理,另外这难不到我们,字典可以从这样下载:
ftp://nchc.dl.sourceforge.net/s/st/stardict/

安装方法:
tar -xjvf xxxdict.tar.bz2
mv a /usr/share/stardict/dic

12/06/2006

django

Proposal: Forms and BoundForms
http://code.djangoproject.com/svn/django/trunk/django/newforms/
http://codeplayer.blogspot.com/index.html

恢复删除的文件

首先停止对该分区的写操作并以只读方式 mount 该分区,做备份

# debugfs /dev/
然后使用 lsdel 列出被删除的文件节点,
找到对应时段被删除的, 文件大小大致符合的文件,
然后将其 dump 出来.

使用 ls -d 查看的删除的文件名称


----------------------------------------------------------

星传
telnet towel.blinkenlights.nl

珍爱生命,远离电脑

什么也别说,先装上它,或许我们又一次挽救了一个即将被工作累死的生命。如果你是每天对着电脑工作的人,而且眼睛、脖子、肩膀或者手腕正体验着酸痛,除了加强锻炼,你可以试试用 WorkRave 先保护一下自己。

WorkRave 可以按照你设置的时间间隔弹出提示窗口强制你休息,防止你太沉醉于工作以致于损害了身体。休息的过程中,还可以跟着它一起做做操。通过设置咖啡时间提醒你在长时间工作后起来活动活动。一天工作结束,它也会友好地提示你不要再对着电脑。


WordRave:
http://www.workrave.org/download/

DrWright(only linux):
http://ftp.acc.umu.se/pub/GNOME/sources/drwright/

scim配置

建立“/etc/X11/Xsession.d/95xinput”,在此文件中输入如下内容:
-----------------------------
case "$LANG" in
zh_TW*)
/usr/bin/scim -d
XMODIFIERS="@im=SCIM"
;;
zh_HK*)
/usr/bin/scim -d
XMODIFIERS="@im=SCIM"
;;
zh_CN*)
/usr/bin/scim -d
XMODIFIERS="@im=SCIM"
;;
esac

export XMODIFIERS

12/04/2006

Debian 无线上网

无线网卡驱动的官方主页:http://ndiswrapper.sourceforge.net
安装指南:http://ndiswrapper.sourceforge.net/mediawiki/index.php/Installation

1. 先用apt装个kernel-header-2.6.x
2. 去http://sourceforge.net/projects/ndiswrapper/,下载ndiswrapper的source
3. 解压ndiswrapper,进入ndiswrapper源代码目录,执行

12/01/2006

idea

来个办公室的花草排行?
[14:41:55] 蜘蛛侠 说:
卧室的?
[14:42:07] 蜘蛛侠 说:
谁在和你养一样的花草?
[14:42:40] 蜘蛛侠 说:
嗯 如果有这么的网站,我会去的
[14:43:25] 艳 说:
或者是吧自己家的花草 那过去秀秀



python源码分析:
http://blog.donews.com/lemur/

django教程:
http://www.woodpecker.org.cn/obp/django/django-stepbystep/newtest/doc/

11/28/2006

继续 python

这几天在家学 python
今天看看这个网站:http://blog.bobobook.cn/?cat=11

另外:
http://www.danga.com/
http://www.danga.com/words/

11/27/2006

今天的事(可能有些记录不准确)

事情经过很简单:今天她要看我的 blog,于是我把网址发给她了,心想她看过之后应该会高兴的,因为有那篇新写的《爱》。随后,她发过来一句话:“......很生气......”,我听了很失望,于是赌气说:“那我把它删了。”她也来气了,随后我就真的把它删除了,然后就看到她的 MSN 签名变为“随便你,爱怎么样怎么样”......
事后再做什么解释都显得多余,我不对,不该说来气就来气!

11/24/2006

杂七杂八

ssh 运行远端机器上的程序
如果你的 ssh server 有啟動 X forwarding 的話(RH/FC 預設是啟用的),
那你就加個 -X 參數就好了,如:
ssh -X user@server xapp


用 wget 下载整个网页的命令
wget -r -p -np -k http://learn.tsinghua.edu.cn/homepage/015450/index.html


皮裤胡同凶宅奇案郭德纲


鳥哥的 Linux 私房菜
http://linux.vbird.org/

转载钱大师写的信

My Dear Shu-Wu(1),  May 14

  Your letter gives me a joyful surprise(2). Your English is astonishingly good. This is not “flannel ”nor“ butter”(3) but my sincere opinion (my hand upon my heart!). The idea found from your version of Chairman’s statement is, to say the least, quite unjust(4). Perhaps your hand is recovering some of its old cunning momentarily lost through long lack of practice(5). At any rate, it would be a pity-nay, a sin, a crime(6)-to let your(7) English get rusty & become finally unserviceable.

  Yours in haste

  By a slip of pen, you wrote “allocation” instead of “Collocation”(8).This is a mere peccadillo. Don’t let meticulousness about such trifles cramp your style.

 注解:

  1、My Dear ……是英语书信的一种格式,并不非译出来不可。这里可译作:书武。林书武当时是中国社会科学院语言研究所研究人员。1970年冬,下放河南息县劳动锻炼,在那段时间跟钱钟书有过一段交往。此信写于1971年5月。

  2、a joyful surprise: 又惊又喜。英语的短语,译成汉语时往往变成动词短语。

  3、flannel, 花言巧语。此信中用双引号有两处。第一处有“所谓的”的意思,注8为第二处,意指原词。

  4、这是一个复杂句,但并不难分析。要说的是:“to say the least”,是个插入语;英语句子常用插入语。例如:Your composition, to put it bluntly, is ill written.你的作文,坦率地说,写得很不好。

  5、momentarily lost修饰cunning; through long lack of practice, 这里又是名词短语变作译文中动词短语的例子。

  6、sin和crime, 几乎是同义词。这里连用,旨在加强语气。

  7、词底下划一横线,表强调之意。

  8、Co 底下加二道短横线,意为要注意。


  My Dear Lin(1),

  I am deeply grateful, but I have smiting of conscience(2). As you know, I have my own ration of sugar, & I must not deprive you of yours(3). As to the dim sum, a healthy young man has more need of them to stay his hunger(4) between the meals--much more that and old man does. So I am returning them with heartfelt thanks--accompanied with a little token of esteem(5). The latest No. of Broadsheet is worth glancing at.(6)

   Your thankfully

注解:

  1、这封信没署日期。大概写于1972年钱钟书杨绛离开河南明港,提前返回北京的几个月前。信中提到“白糖”、“点心”等话,指的是林书武为了感谢钱钟书赠送英语书报,对林书武学习上的指导,送给钱钟书的东西。

  2、smite和conscience搭配,是地道的英语,如:His conscience smote him. 他受到了良习的谴责。也可以说成:He had smiting of conscience.

  3、to deprive you of yours, 夺取你的东西,不能说成to deprive yours.同类动词还有一些,例如:rob, Those barking of a dog robbed me of my sleep. 狗吠了又吠,弄得我无法入睡。

  4、to stay ones hunger是地道的英语,学生往往想不到这种用法。充饥,不要说成to fill ones hunger, 要采用这里的说法。

  5、a little token of esteem, 当时钱钟书还送给林书武一些英文报纸杂志。

  6、to be worth 接动词的ing形式,表示值得做……,这里的is worth glancing at, 值得一看。注意:跟to be worthy的差别:to be worthy of something: 应该得到某事物;to be worthy to do sth.:应该做某物。

11/22/2006

转自水木的文章

标 题: 结婚一年,认识七年,岁月如梭,还是留个脚印吧

我相信每一对最后能走到婚姻的情侣都有很长的故事能写出来,从认识到最后能一起生活,经
历的事情都是几十页的纸也写不完的.我们何尝不是.这里记录的只是几个片断……很多情节
都是虽然是让人伤心的往事,但记录下来或许能让我们更珍惜现在拥有的.

初次见面
大一刚进校,一九九九年十一月初,被两个土人搞了个联谊宿舍,跟chine第一次见面.
之前看过照片,chine蹲在他们宿舍其他高个子男生前面,掩饰了唯一的缺点------矮
-_-|||,于是印象很好,对这类的清秀的帅帅的男生,难免有些心动.
见面后大家一起吃饭k歌,也不知道哪跟神经不太对,一向给人第一印象比较文静的我,那天竟
然出奇的健谈.两人给彼此的印象都颇深吧……
不过当时我跟前男友关系未断,所以聚会后和chine并未有更多的联系.

第二次见面
九九年最后一个月我过得很糟糕,和前男友吵过n次以后终于分手了之,很多年以后前男友都
还不太明白当时为何我执意分手,其实原因无非两个:其一,我爱得不够深,其二,他当时还不
够成熟不太懂得珍惜.
十二月底圣诞元旦活动挺多,31号推掉了别的活动/约会,受chine之约来到清华.之后无非闲
逛一下清华园,上食堂晚饭.晚上出校门准备去世纪坛逛逛,可chine这个路痴,活生生的没找
到世纪坛到底在哪里,带着我在长安街上溜达,从西单到天安门到前门到王府井走了n圈以后
,两人决定放弃,在天安门旁边找了个椅子休息,准备看升旗了之^_^.
他每次说起这一幕都怨当时天气太冷穿得太少,忍不住把我搂在怀里说要温暖一下……也不
知到底是天气太冷还是的确心动,反正当他把我搂在怀里,我就顺从的靠过去了,然后两人
kiss……..

似乎太快了,一个寒冷的晚上的冲动,却决定了一辈子的路……

寒假前后
寒假之前的三周过得很幸福,刚开始的日子总是像蜜一样甜的.从kiss到ml的进展似乎也就是
不到一周的时间.也是我的第一次ml.
(关于ml,不多说了,只觉得和谐的ml是爱情必不可少的条件)
寒假很漫长.包括情人节在内的整整一个寒假,他竟然连一个电话都没往我家里打.虽然他家
离城里偏远一些打电话不方便,但我知道那不是理由.
寒假以后就证实了我的猜测,他跟我坦白,本以为分隔两地,他能和前女友lily自然而然的分
手,但寒假回去又一次见面就击碎了这种想法,lily是个优秀独立坚强的女孩,她不希望也不
愿意跟chine分手,chine承认还是喜欢这她的,也不忍心告诉她关于我的事情,分手的事情也
不了了之……
那我们的关系怎么办?我当时心里很绝望.他没有要跟我分开的意思,也没有跟我承诺会跟
lily分手.我们是分手还是继续他让我选,可当时的我能怎么选?我怎么可能甘心放弃,我选择
了等.却没想到还有更绝望的事情再前面等着.

七夕事件
接下来的半年我过得很辛苦,后来回想起来,当时的chine肯定没想到这个女孩会是将来跟自
己结婚的那个人.或许因为当时的我还不是他最爱的女孩,或许因为大家都还需要时间才能成
长,需要经历才能成熟.
他其实对我很不错,但他有意无意说的一些话做的一些事也很是慢慢的在伤着我的心.跟
lily的关系也一直都还在维持着.
二OOO年的七夕或许是我最伤心的七夕,偶然的闯进他的邮箱发现他给另外一个在大一上半学
期拒绝过他的追求的女孩yang写的信,信里大意就是 :坦言告诉她自己还是喜欢她,虽然有了
我做女朋友,但并不是很爱我.
我当时只是觉得晴天霹雳,半年的时间在等,以为能等到他和lily慢慢分手,但却等到的是怎
样的结果呢,等到的是知道他心里还有另外的女孩,另外一个更爱的女孩.
那段时间哭过多少次我已经数不清楚了.知道内情的朋友都劝我分手.
但最终没有选择分手.或许是因为太过迷恋,或许是因为我已经心存报复.当时的我不甘心就
这么放手.

Lily的退出
二OOO年下半年,大二上.lily决定放弃在国内的学业,出国读书了.既然决定出国,分手是在所
难免的了.但他告诉我lily要出国的时候,他是显得很伤心沮丧的.仿佛一个亲人要离开自己
的感觉.那时的他或许不知道 我感觉出他这种伤心沮丧的感觉的时候,心里的绝望和怨恨有
多深.
Lily出国之前两次来北京,一次签证的事情,一次出国上飞机之前.两次他都和她开房间过夜
的.对于这件事情他没有瞒我,但不知道有几个女人能忍受知道自己的恋人正在和别的女人
ml的感觉-------但我没法和一个就要离开的女人计较太多.当时的我也不愿就这么放弃就要
到手的男人.
那段时间我也疯狂的在single灌水麻痹自己.认识了不少水车们……
二OO一年上半年,chine开始尝试柜台的生意,对我也是一心一意,我能感觉得出来他越来越爱
我.但当时的我却无法平静的享受这份爱,我要报复.

报复和伤害
二OO一年下半年,chine的事业正是低谷期,遇到了非常不顺的事情.而ahcool却在这个时候闯
进了我们的生活.
ahcool是chine的朋友,是个和chine完全不同的男人,不多形容了,总之当时的他很多地方都
在吸引着我.当时的我一心一意是想找到一个能让我去爱,让我有勇气去放弃chine的男人.他
就是这么一个男人.
我想当年我的目的是达到了的,我和ahcool的背叛对chine的伤害有多深,或许只有chine自己
能体会.
但那段疯狂而混沌的日子的结果或许却是我没有想到的.
ahcool最终离开了我,因为他最终选择了他在老家的女友.其实这个结果我是预见到了的,我
心里清楚他最终不会和我在一起.但我没有想到的是自己根本无法承受这样的结果.
二OO二年上半年,ahcool走出了我们的生活,却像一个影子一样留在我们中间.chine最终没有
放弃我,就像当年我等他一样,或许他付出了比我多十倍的艰辛来等我,等我慢慢忘记
achool.等我慢慢恢复平静.

恢复
接下来的一年对于我和chine都是很艰难的一年,我心里清楚多少次chine都想放弃我们这段
感情,但他不舍.我更是努力的去平复,去淡忘对ahcool的爱,我希望平静的生活……
一直到二OO三,非典隔离了我们的生活,但却让我清醒不少.
我终于彻底的明白了什么是我生命中最重要的,我要尽我的力去挽回我们的这段感情.
谢天谢地我的清醒似乎很是时候,chine也终于决心继续和我一起生活.

结婚和结婚之后
工作过后的日子似乎过得很快,两人感情也越来越好.^_^
二OO五年年初,老公家里因为拆迁的事情就开始催我们赶紧结婚,本来没想过这么早就要结婚
的,不过既然时势需要,而且感情也很深了,结就结吧,呵呵.
(再次谢谢deathscythe死神给我们留下的漂亮的婚纱照.)
领证后不到一周就发现怀孕了,清晰的记得当时的兴奋和幸福.
但最终和肚子里的三胞胎宝宝无缘,半年以后流产时我们抱头痛哭的情景也还一直留在我脑
子里.

…………………

此文完毕.
本来想分章节贴出来,发现也不是特别长,就贴成一篇文章好了……
我们今后的路还很长,希望几十年以后,还能这么幸福的一起走过^_^.

最后想说,两个人能走到婚姻,能在一起生活,不仅是需要爱情,更需要宽容,理解.
缘分是从天上掉下来的,但抓住缘分却是要靠两个人互相的努力…

愿天下有情人终成眷属

11/21/2006

今天好多了

昨天一天不知道怎么过的,晕晕乎乎的。晚上10点半就睡觉了,躺下后翻来覆去,睡不着,感觉浑身不舒服(可能累的吧),不过还是睡着了,醒来的时候,大概6点多吧,我哥什么时候上床睡觉的,我一点都不知道,好久没睡这么沉了 :-p 今天感觉精神多了!

----------------------------------------

http://javascript-reference.info/
http://www.vhouse.cn/html/ershou.htm

11/17/2006

今天的任务

由于任务提前完成,而新任务下周才布置下来,故这两天继续先前的学习计划,学习驱动开发。现在对 Module 框架比较了解了,所以就找了一个实际的例子( FPS200 usb driver)来看看,重点看 usb 驱动开发。
希望尽快整理出详细的文档。

另外,周六要帮忙搬家,东西很多哦,做好心理准备~周日没其它安排的话,要去看房子。最近的几周,一直排的很满啊。。。


---------------------------------------------------------

各种ADSL路由器端口影射设置
http://www.linuxmine.com/20585.html

北京宽带网
http://www.bta.net.cn/

11/14/2006

About WebMethods

webMethods 概览

webMethods 是一个platform的名字,也是一个公司的名字。这个platform主要是用来做EAI的。webMethods公司的网站就是webMethods.com,上面有一些简单的介绍。而如果需要学习,则可以到advantage.webmethods.com这个地址上去,不过似乎只有webMethods的合作伙伴才可以注册帐号,浏览里面的doc. 另外有一个叫wmusers.com的网站,上面有一些简单的资料,但是远不如前者齐全了。

webMethods有一个certificate,以前是免费的(当然,你需要是webMethods的partner)。但从今年的7月开始,无论是谁,都必须先参加其相关课程才能够去考。(相关课程的价格很高,数千USD)。所以以前能考出来的人实在是幸运的。

webMethods 这个平台有好几个部分构成,主要有IS(Intergration Server), Broker, Workflow, Modeler, Trading Network,还有一些诸如MainFrame,eStandards等的还没怎么接触过。

就软件而言,webMethods提供了IS Server,Developer,Modeler,Workflow,Administrator等, 这几个已经可以基本完成开发了。在后面的相关文章里我会再逐一介绍。

接下来的文章里,绝大部分来自于webMehods官方提供的guideline里的内容,也有一些是在做case study时的一些体会。


webMethods 之 components

首先我们看一下webMethods的主要结构:

如图所示,左侧的几个组件代表client端的组件,而右侧的是server端的。

在官方文档里,将webMethods platform分为了run-time components, design-tiem conponents和

administrator components。后两者主要以操作为主,在本文中,主要介绍run-time组件。

webMethods的run-time组件主要分为IS(Integration Server),Broker,Adapters,Mainframe,Trading Networks和Workflow等。

IS是run-time的核心组件,它是integration logic的主要执行者。“ webMethods Integration Server connects internal and external resources to the integration platform”。

Broker是“message router”,它是我们所说的“message backbone” or “message facility”的主要部件。

Adapter位于IS上,它将the back-end resources与integration platform连接起来。

Mainframe “functions as an agent between the Integration Server and online applications running under CICS (Customer Information Control System) or IMS/DC (Information Management System/Data Communications) on the mainframe.”

Trading Networks 是IS的一个附加(add-on)组件,它用以实现与外部系统(如客户的相关系统)的信息交换。“webMethods Trading Networks acts as a business document gateway ”。

Workflow用来执行workflows. "A workflow is a series of tasks performed by one or more people (participants) at execution time."

Run-time components主要就是以上几种。另外,design-time components主要包括Developer, Workflow Designer, Modeler, Trading Networks Console. Adminstrator components主要有Administrator,Monitor和Manger。这些将在后面介绍。


webMethods 之 Developer 1

现在开始Developer的内容。Developer我认为是webMethods开发的最重要的IDE。本文先讲一些相关概念。

Service

这里的service很像我们平常程序中的函数,doc:Integration Server is a service-base integration broker. A service is a process that may be invoked to perform a wide variety of tasks.


Package

Pacakge可以看成是一个容器。官方的doc是这么写的“A package is a container that is used to bundle services and related elements. Packages are designed to hold all of the components of a logical unit in an integration solution.”


Element

Elements可以看成是package中可以包含的元素。doc:Elements include folders, services, specifications, IS document types, triggers, and IS schemas.


Element Names

Elements Names比较特别,是由目录名和element名构成的。比如:

folder.subfolder1.subfolder2:element


Lock

Lock很像版本控制里的概念。doc: A lock on an element prevents another user from editing that element. There are two types of locks: user locks and system locks.


ACL


ACL是一种权限控制的机制。doc:

An ACL (access control list) controls access to packages, folders, and other elements (such as services, IS document types, and specifications) at the group level.


webMethods 之 Developer 2


我们继续讲webMethods Developer。本文主要讲的是Developer的Flow Service。

Flow Service的功能类似于一般的函数。但是,这个函数是用webMethods自创的Flow语言写的。(其实与其说写,还不如说“画”的)。看doc里的定义: A flow service is a service that is written in the webMethods flow language. 另外,每个Flow Service都有输入输出。

Flow Service是由Flow Step构成的。我们可以将flow step想象为函数的一条(或者多条语句)。doc:A flow step is a basic unit of work. 本文主要讲的就是不同类型的flow step。

了解了上面的两个概念,我们还需要知道Pipeline的含义。 在我看来,Pipeline很像JSP里的Servlet Context,它存放着可以被整个系统使用的数据。我们看doc:The pipeline is the general term used to refer to the data structure in which input and output values are maintained for a flow service. It allows services in the flow to share data. When a service in the flow executes, it has access to all data in the pipeline at that point. (SHARE)

接下来是有关flow step的内容。flow step 分为BRANCH,SEQUENCE,REPEAT,LOOP,EXIT,MAP六种。这六种其实只不过是对一般编程语言的赋值、流程控制等的重新定义而已。

BRANCH是分支结构的意思,它与Java里的switch类似。而有趣的是,用来确定BRANCH走向的参数名恰好就是在switch中定义的. (而子选择参数是以Label确定的)

SEQUENCE是顺序结构的意思。它的意义在于它可以将多个flow step封装成一个来看待。并且,在其内部可以定义运行到何时结束,比如until failure, until success, until done等。

REPEAT是重复,它可以指定重复次数。

LOOP的意义在于它极大方便了对数组的枚举。

EXIT是退出的意思,它可以选择退出到程序的那一层。

MAP是赋值的作用,它有一个叫transformer的东西,可以在赋值前完成一些处理。

以上就是对Flow Language的简单介绍,上面的各种step都是通过拖拽图标实现的,而不是手工code。这是好是坏,也没什么好说的。不过pipeline的作用,是需要在实践中逐步体会的。


webMethods 之 Developer 3

写到这里,有关于Developer的基本概念应该是有些了解了。那么在本文中,我们看一下在实践中的几个要点。


首先是启动Integration Server。IS的启动可以直接在开始菜单启动,也可以在cmd下启动。在cmd中启动时,有个参数可以用:

-debug num 这个表示log的显示等级,num越大Log越详细

-log none 这个表示将log显示在cmd窗口中,如果没有这个参数,可进入Adminstrator查看

一般来说,初次启动IS还是需要在cmd中显示比较好(顺便说一句,笔者使用的webMethods6.1,要想正常启动IS,需要修改: %webMethods%/IntergrationServer/bin/server.bat ,line 49:

SET JAVA_DIR=C:\webMethods6\jvm\win142

否则会报ClassNotFound的错误,因为JRE路径没有设对)

成功启动IS之后,可以在浏览器输入http://localhost:5555 进入Administrator。第一次进入的用户名是Administrator,密码是manage。在里面,通常可以自己添加用户。这个比较简单,就不说了。

以后在Developer中,以自己的用户登录,就可以开始工作了。


webMethods 之 Developer 4

成功进入Developer之后,我们就可以开始工作了。比较简单的内容这里就不写了,下面只摘录一些我在做case study时的理解。
  1. 在一般编程时,我们常常需要定义一些数据类型。在Developer里,这种数据类型的定义是通过Document Type来实现的。这种Document Type很像structure,当然,通过IDE,它的定义过程也被极大地傻瓜化了。同时,Document Type的定义也可来自XML、XML Schema等,这也许才是改进之处吧。

  2. 既然Service可以看成一个函数,那么因为原来函数是可以调用函数的,所以,Service也是可以调用Service的。事实上,数据定义,流程控制,以及数据处理——这三者已经构成了编程语言的三个要素。

  3. 在Developer 中,还有一些常用的Element,其实都是傻瓜化了的程序功能。比如Adapter Service,提供了对数据库操作的支持,我们只需要在IS中定义好相应的数据库联接,就可以方便的在Developer中调用。又比如 Trriger,它提供了对subscribe的支持(以后我会讲publish-subscribe)。比如Notification,它能够监视数据源的变化,有力地支持了数据同步功能。这些可以说是webMethods为集成提供的不错的工具吧。

webMethods 之 Trading Networks

笔者对Trading Networks的认识还只是概念而已,由于读了相应的文档,所以把一些笔记整理在这里。

普遍意义上的Trading Network是指“a set of organizations that have agreed to exchange business documents”

webMethods Trading Networks是运行在IS上的一个组件,其功能是与其他组织(公司、市场等)的系统联系“to form a business-to-business trading network.”

在Trading Networks有Partner这样的概念。它是构成Trading Network的元素,“send documents to Trading Networks for processing and/or that will receive documents that Trading Networks is instructed to deliver”

有关Partner的Information有两方面:一个是Profile,记录的是“information about a corporation that is a part of a trading network.”

另一个是TPA(Trading partner agreements),是一组定义Trading的参数约定,是可选的。文档里的说法是:“ A Trading Partner Agreement (TPA) is an optional set of parameters that you can define and use to tailor how documents are exchanged between two trading partners.

用手机拨分机

  有很多人用手机拨电话(特别是打单位电话的时候)总是要等待电脑语音提示完了以后通过总机转到分机,既费时又费钱。其时我们完全可以直接拨打到分机去。只要手机屏幕上出现P字的时候,你就可以直接拨分机号码了。

让我们来看看有哪些较流行的手机能支持吧:

  如果你持有的是诺基亚的手机:只要按住米字键3次,就会在屏幕上出现小写的p。

  如果你持有的是摩托罗拉的手机:只要按住米字键一至两秒,就会在屏幕上出现一个小方格,就是表示停顿一下的意思。

  如果你持有的是“爱立信”的手机:只要按住米字键一至两秒,就会在屏幕上出现小写的p。

  如果你持有的是西门子的手机:同样也要按住米字键一至两秒,就会在屏幕上出现大写的P6618、6688不支持。

11/06/2006

c面试题

1, 已知一个32位的字, 请给出一个高效的算法计算其中1的个数,可以
使用临时变量。
这个我实在没有好办法,我觉得唯一的办法就是写一个循环进行移位。

2,下面是两个变量的声明,请把那个数组初始化为零,且不能增加任何
其他变量。
unsigned char c;
int x[257];(刚才错写成256了)
这到题的那点是数组x长度为257,使用变量c进行循环的话会溢出。
我的土方法:
for(c=0; c < 255; c ++){
x[c] = 0;
x[c + 1] = 0;
}

3.
unsigned long val;
char a=0x96;
char b=0x81;

val= b<<8 | a;

问val=___?

4. 写一个函数互换两个变量,但不能用到第三个变量.

5. What is wrong with the following code? Write a main() to print “hello” using
the function f().


void f(char** p)
{
printf(“%s”, p[0]);
}

void main()
{
char a[50][50];
strcpy(a[0], “hello”);
f(a);
}

6. Coding Problem:

"The most obnoxious book I have in my bookshelf is one that somebody
bought my baby daughter... Runny Babbit: A Billy Sook by Shel
Silverstein. Information on this book (in case you want to torture a
parent) can be found at
http://www.amazon.com/gp/product/0060256532/sr=8-1/qid=1139876282/ref=pd
_bbs_1/104-0687593-6578327?%5Fencoding=UTF8 - and a good close-up from
one of the pages in the book can be seen at
http://webcontent.harpercollins.com/images/interior/bookseller_spreads/0
060256532.interior01.jpg. Your programming task is to create a Runny
Babbit translator. I should be able to compile your program (language
of your choice), use it to type in any paragraph of English text (end at
blank line), and have it type back a paragraph translated into Runny
Babbit language. Your output doesn't have to be a perfect match to the
samples in the book - but document any assumptions you make in your code
regarding translation rules."

7. c里面有几种调用序列?

8. 如何用一句不带循环的C语句来判断一个数是否是2的幂
a & (a-1)

9. char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ )
NULL ;
return address ;
}

解决手脚冰冷法则

有很多原因导致手脚冰冷,怎么解决呢,如下:

1. 多运动,早晨步行。
2. 多补充维他命E,见效慢。
3. 多吃多吃含烟碱酸的食物,例如蛋、牛奶、糙米、全麦制品、香菇、绿豆中。
4. 一年四季都要避免吃生冷的食物、冰品或喝冷饮
5. 多吃坚果.胡萝卜
6. 培养吃辛辣食物的习惯,例如辣椒、胡椒、芥末、大蒜、青葱
7. 常吃温补食物,如人参茶、姜母鸭、桂圆茶、黑芝麻、甜汤圆...等
8. 不要饿过头。
9. 注意保暖
10. 精油泡澡
11. 穴道按摩

实战tor + privoxy

好久没更新了,今天想写blog,结果依旧打不开,使用http://anonymouse.org可以打开blog,但无法登陆,于是就动用了强大的“核武器”清除封锁,挖哈哈~

假设你已经以下源文件:
tor-0.1.1.24.tar.gz
privoxy-3.0.5-beta-src.tar.gz(www.privoxy.org 该网站有可能被封锁而打不开,可以通过http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.privoxy.org)

安装过程就不多说,不过在安装privoxy时最好按照INSTALL所说的,创建privoxy用户及组。
此外启动privoxy前需要配置,在config文件(/usr/local/etc/privoxy/config或/etc/privoxy/config)增加这么一行:
forward-socks4a / localhost:9050 .

为了在firefox中使用tor,安装插件Torbutton plugin(https://addons.mozilla.org/firefox/2275/),重启firefox使该插件生效。

启动privoxy
/etc/rc.d/init.d/privoxy start

启动tor
tor &

打开firefox,点击右下角"Tor Disabled"

Good luck!

参考: http://tor.eff.org/docs/tor-doc-unix.html.en 《Running the Tor client on Linux/BSD/Unix》

10/25/2006

解锁:访问被 great firewall 屏蔽的网页

Great firewa11 检测到你的访问目标是被禁止的内容时,直接给你返回一个 tcp reset 包,所以浏览器中会显示连接被重置,然后你在一时间里或是永远也访问不了这个网站了。
为了避免内容中出现被禁止的文字一般使用一种叫 "leet" 的方法:
http://en.wikipedia.org/wiki/Leet
http://www.postshow.net/2006/05/leet.php


通用解锁:

*1)使用代理服务器,下面我列出一些代理服务器:*
http://proxy.leehoo.net/proxy/live/
http://www.proxy4free.com/
*2)使用代理软件*
windows:
自由门
linux:
tor

*3)使用代理站点*
http://anonymouse.org/cgi-bin/anon-www.cgi/$web_site
把$web_site替换为你想访问的站点。例如http://anonymouse.org/cgi-bin/anon-
www.cgi/http://costi.wordpress.com/

http://www.webwarper.net/

*4)如果要访问的站点有rss输出。我们可以使用一些国外的RSS在线阅读器来获得
信息。*
几个国外的在线RSS阅读器:
netvibes <http://www.netvibes.com/>
google reader <http://www.google.com/reader/>
BlogLines <http://www.bloglines.com/>

不同站点的RSS地址(以下的$blog_name可替换为其他名字):
blogspot:
站点地址: http://$blog_name.blogspot.com/
对应RSS地址: http://$blog_name.blogspot.com/atom.xml
blogsome:
站点地址: http://$blog_name.blogsome.com/
对应RSS地址: http://$blog_name.blogsome.com/feed/
wordpress:
站点地址: http://$blog_name.wordpress.com/
对应RSS地址: http://$blog_name.bwordpress.com/feed/


专项解锁:

*1)Wikipedia*
方法一:
在hosts文件中新加一行,内容如下:
145.97.39.132 en.wikipedia.org zh.wikipedia.org upload.wikimedia.org
linux的hosts文件路径位 /etc/hosts
winxp的hosts文件路径为 C:\WINDOWS\system32\drivers\etc\hosts
方法二:
使用这个wikipedia在线浏览器 <http://gollum.easycp.de/en/>,这是一个基于
PHP和 Javascript的,专门用于浏览wikipedia的浏览器。中文用户可以直接访问
这里 <http://gollum.easycp.de/gollum/gollum.php?a=core&l=zh-cn&wl=zh&q=>。
方法三:
使用安全连接,安全连接地址为:https:
//secure.wikimedia.org/wikipedia/zh/wiki/%E9%A6%96%E9%A1%B5

*2)SourceForge*
方法一:
使用安全连接,地址和普通地址一样,只是http <http://sourceforge.net>改为
https <https://sourceforge.net>

sourceforge有时候只是部分子域名被封锁。如果我们知道项目的名称,我们可以
尝试通过直接访问其他子域地址。例如filezilla的首页我们可能访问不了,但是
下载地址我们可以通过这个地址
<http://prdownloads.sourceforge.net/filezilla>访问.

*3)Google*
在hosts文件中新加一行,内容如下:
64.233.171.99 www.google.com mail.google.com
linux的hosts文件路径位 /etc/hosts
winxp的hosts文件路径为 C:\WINDOWS\system32\drivers\etc\hosts

*4)BlogSpot*
用在要访问的地址后面加上.nyud.net:8080/
例如你想访问http://atrios.blogspot.com,那么可以用http://atrios.blogspot.com.nyud.net:8080/这个地址来访问。

10/24/2006

网站收藏

1)KDE 2.0 Development 有例子 很清楚
http://developer.kde.org/documentation/books/kde-2.0-development/index.html

2)一些有用例子---网络编程等
http://www.cse.buffalo.edu/~milun/unix.programming.html

3)印度舞MTV
http://www.qtcn.org/blog/blog.php?uid-2-dirid-6-page-5.html

43个不可不知的健康常识(转载)

43个不可不知的健康常识

  1、常吃宵夜,会得胃癌,因为胃得不到休息。
  
  2、一个星期只能吃四颗蛋,吃太多对身体不好。
  
  3、鸡屁股含有致癌物,不要吃较好。
  
  4、饭后吃水果是错误的观念,应是饭前吃水果。
  
  5、女生月经来时,不要喝绿茶,反正茶类的不要喝就对了,多吃可以补血的东西。
  
  6、喝豆浆时,不要加鸡蛋及糖,也不要喝太多。
  
  7、空腹时不要吃蕃茄,最好饭后吃。
  
  8、早上醒来,先喝一杯水,预防结石。
  
  9、睡前三小时不要吃东西,会胖。
  
  10、少喝奶茶,因为高热量、高油,没有营养价值可言,长期饮用,易罹患高血压、糖尿病...等疾病。
  
  11、刚出炉的面包不宜马上食用。
  
  12、远离充电座,人体应远离30公分以上,切忌放在床边。
  
  13、天天喝水八大杯。
  
  14、每天十杯水,膀胱癌不会来。
  
  15、白天多喝水,晚上少喝水。
  
  16、一天不要喝两杯以上的咖啡,喝太多易导致失眠、胃痛。
  
  17、多油脂的食物少吃,因为得花5~7小时去消化,并使脑中血液集中到肠胃,易昏昏欲睡。
  
  18、下午五点后,大餐少少吃,因为五点后身体不需那么多能量。
  
  19、10种吃了会快乐的食物:深海鱼、香蕉、葡萄柚、全麦面包、菠菜、大蒜、番茄、低脂牛奶、鸡肉、樱桃。
  
  20、睡眠不足会变笨,一天须八小时睡眠,有午睡习惯较不会老。
  
  21、最佳睡眠时间是在晚上10点~清晨6点。
  
  22、每天喝酒不要超过一杯,因为酒精会抑制制造抗体的B细胞,增加细菌感染的机会。
  
  23、服用胶囊应以冷水吞服(可以第一个吃),睡前30分先服药,忌立即躺下。

  24、酸梅具防止老化作用,青春永驻;肝火有毛病者宜多食用。
  
  25、掉发因素:熬夜、压力、烟酒、香鸡排、麻辣锅、油腻食物、调味过重的料理。
  
  26、帮助头发生长:多食用包心菜、蛋、豆类;少吃甜食(尤其是果糖)。
  
  27、每天一杯柠檬汁、柳橙汁,不但可以美白,还可以淡化黑斑。
  
  28、苹果:机车族、瘾君子、家庭主妇的常备良药;一天一颗,才能让自己有个干干净净的肺。
  
  29、抽烟又吃维他命(B胡萝卜素-A维他命的一种)会致癌,尽早戒烟,才是最健康的做法。
  
  30、女性不宜喝茶的五个时期:月经来时、孕妇、临产前、生产完后、更年期。
  
  31、抽烟:关系最大的是肺癌、唇癌、舌癌、喉癌、食道癌,也与膀胱癌有关。
  
  32、饮酒导致肝硬化,引发肝癌。
  
  33、吃槟榔会导致口腔纤维化,引发口腔癌。
  
  34、食物过于精细,缺乏纤维,含大量脂肪,尤其是胆固醇,会引发胃癌。
  
  35、食物过于粗糙,营养不足时,导致食道癌、胃癌。
  
  36、食品中的黄曲毒素、亚硝酸类物皆具有致癌性。
  
  37、不抽烟,拒吸二手烟。
  
  38、适量饮酒,不拚酒,不醉酒。
  
  39、减少食用盐腌、烟熏、烧烤的食物。
  
  40、每天摄取新鲜的蔬菜与水果。
  
  41、每天摄取富含高纤维的五谷类及豆类。
  
  42、每天摄取均衡的饮食,不过量。
  
  43、正确饮食习惯:早上吃的像皇帝,中午吃的像平民,晚上吃的像乞丐。

10/20/2006

学习进度

1) python:
http://diveintopython.org/power_of_introspection/built_in_functions.html

2) 驱动开发周末找资料

10/19/2006

CPUG 会课集锦---有关python

http://wiki.woodpecker.org.cn/moin/CPUGclasses

(转贴)导入MSN到Gtalk, 用gtalk和MSN的好友聊天!

不久前, Google开放了Gtalk与其他IM的通信, 可以通过Gtalk与AIM、MSN、Yahoo! IM等即时通讯用户连线聊天. 但是具体该如何实现呢?其实并不难,只需要一个PSI.首先到http://psi-im.org/download下载PSI, 用Windows的可以直接下载Windows Zip Archive (2.96 MB), 解压就可以用.

确定退出Gtalk和MSN, 运行psi主程序, 点击左下角的菜单“account setup”添加你的gtalk帐号,如附件Account 和 Connection设置参照我的设置, 见下图:



















设置好后, 点击列表中的帐号, 并上线. 此时点左下角的菜单“services discovery”在address中输入服务器地址jabber.cn,Nude可以不填. 点右边的browse,会出现服务器列表,选择MSN等IM协议,点右键菜单“register”输入msn帐号及密码,并注册.














[如果刷新不出服务器列表, 可以试试以下几个国外的:   jabber.org
  jabber4friends.de
  jabber.ru
  ursine.ca
在添加msn帐号的时候密码错误的话是不会弹对话框出来提醒你的,如果你一直没有收到请求认证的消息可能就是密码错误了.]

关掉psi, 登陆gtalk, 接受msn好友的添加请求.然后就可以与他们在gtalk中聊天了.

10/18/2006

iText

    iText 是 Lowagie.com 站点(请参阅 参考资料)免费提供的 Java 库,支持 HTML、RTF、XML和 PDF 等文档的生成,iText可以在两个许可协议下使用:MPL 和 LGPL。iText需要的环境为:JDK1.4 以上的版本和Adobe Acrobat Reader。
    iText库主要包括以下类:
    com.lowagie.text.Document —— 是生成 PDF 的主要的类。它是需要使用的第一个类。一旦开始创建文档,将需要一个写入器向文档中写入内容。
    com.lowagie.text.pdf.PdfWriter —— 就是一个 PDF 写入器。
    com.lowagie.text.Paragraph —— 这个类表示一个缩进的段落。
    com.lowagie.text.Chapter —— 这个类表示 PDF 文档中的章节。使用 Paragraph 作为题目并使用 int 作为章节号码来创建它。
    com.lowagie.text.Font —— 这个类包含了全部的字体规范,例如字体、大小、样式和颜色。各种字体都在这个类中声明为静态常数。
    com.lowagie.text.List —— 这个类表示一个列表,按顺序包含许多 ListItems。
    com.lowagie.text.Table —— 这个类表示包含单元格的表,单元格有序地排列在矩阵中。
    com.lowagie.text.Image —— 这个类表示包含处理图片类型文件,包括PNG, GIF, JPEG, WMF等类型。

    iText将html文件转为pdf方法:
    1)在服务器文件系统上创建PDF文件。应用使用java.io.FileOutputStream把文件写到服务器文件系统上。用户通过HTTP GET方法下载该文件。
    2)使用java.io.ByteArrayOutputStream在内存中创建PDF文件。应用通过servlet的输出流将该PDF文件字节发送到客户端。由于应用不需要把文件写到文件系统上,这样能保证在集群服务环境中能正常工作,所以我更倾向于使用B技术。如果你的应用运行在集群环境中且服务器集群不提供会话亲和的功能,第一种方法可能会导致失败。

    实际应用采用第二种方法:
PDFServlet。输出流OutputStream是 java.io.ByteArryOutputStream。用ByteArrayOutputStream,PDF文档字节将存储在内存中。当 PDFServlet接收到一个HTTP请求时,它将动态地生成一个PDF文档并将该文档发送到客户端。
PDFServlet类扩展了javax.servlet.http.HttpServlet类并导入了两个iText包:com.lowagie.text和com.lowagie.text.pdf。

该网站非常有参考价值:
http://www.adobepress.com/articles/printerfriendly.asp?p=420686&rl=1
http://www.lowagie.com/iText/tutorial/index.html
http://faq.xunweb.org/itfaq/jsp3/2006-06-04/2097.html(iText怎样才能显示中文? )

10/16/2006

加油~

在这家公司快半年了,要继续努力!继续十一制定的计划!
在这里贴一下以后面试注意的问题,以及目标公司的招聘要求(看看自己的不足的地方)。

首先心里应该有底,要清楚面谈的基本内容和目的,比如:
# 介绍
介绍的目的是让应试者放轻松

# 应试者参加过的项目
这个问题的目的是在寻找一样品质:热情
1)谈到他们做过的项目时变得热情洋溢;他们的语速更快,语言更生动活泼。这说明他们对某些东西有兴趣,有热情(因为现实中有许多人对所做的项目根本漠不关心呢)。
2)能认真地去解释事情。
3)如果这个项目是一个团队项目,看看他们是否在有承担领导责任的迹象?

# 无法回答的问题
聪明的应试者猜到你不是要测验他们的专业知识,他们会积极地给出一个估计。

# C语言函数
通常要求应试者用C语言写一些小函数。以下是通常会出的题目:
1. 将一个字符串逆序
2. 将一个链表(linked list)逆序
3. 计算一个字节(byte)里有多少bit被置1
4. 搜索给定的字节(byte)
5. 在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的
6. 字符串转换成整数
7. 整数转换成字符串(这个问题很不错,因为应试者要用到堆栈或者strev函数)

# 你满意吗?(代码)

# 设计问题
好的程序员会问更多的信息。

# 挑战
软弱的应试者会屈服。那我就和他说拜拜了。
坚定的应试者会找到一个办法说服你。
不得不承认,面试双方的地位并不是平等的。有可能应试者由于害怕你的权力而不敢于你争辩。但是,好的应试者有足够的热情和勇气坚持正确的观点,他们由于热切希望说服你而会暂时忘记正在被面试。这样的人就是我们要雇佣的人。

# 你还有什么问题?


以下摘自redhat招聘linux开发人员的部分要求:
...
- Proficient in a variety of scripting languages,including python,shell and perl preferred
- Extensive experience in the packaging and delivery of software for one or more flavours of Linux/UNIX
- Expeience in developing Linux Desktop applications
- Expeience in developing applications for GTK/GNOME and QT/KDE
- Understanding of and experience in object-oriented design and coding
- Excellent communication skills(verbal and written) in English

以下摘自Novell招聘linux开发人员的部分要求:
*招聘对象及要求:
1. 通用要求:
* 熟练使用 GNU/Linux 操作系统及开发环境如 GNU Automake/Autoconf/Libtool/ 系列工具、
CVS/SVN 协同开发工具、GDB 调试器、GCC 编译器 等
* 精通 C 语言编程,要求十万行以上 C 代码编程经验
* 熟练 C++ 语言编程
* 熟练使用英语进行沟通、阅读英语文档
* 热爱开放源代码事业
* 热爱编程
* 使用 GNU/Linux 作为日常办公桌面
* 两年以上相关工作经验

1. 桌面技术研发工程师,要求:
* 熟练使用 QT/KDE 或 GTK/GNOME 开发环境和开发库
* 熟悉国际化软件编程技术,如 Unicode/ISO10646、字体、打印等

2. 服务器、系统技术研发,要求:
* 精通 Linux 内核模块开发
* 熟悉服务器相关技术,如网络程序开发、多线程多进程程序开发等
* 熟悉硬件驱动开发

10/13/2006

扪心自问

自从两人在一起后,互相之间经常有摩擦,当然我惹她生气多,老是做错,然后两个人都很伤心,我对自己快没信心了,发现快一无是处了。。。她呢?应该更加没信心了吧。
以前我做事无拘无束,不用太在乎别人的感受,一些事一些话想说就说,不想说就放在心里。自私?!
她呢,脑子里经常想很多事,加上PH值很低,眼里容不下半点沙子,希望我100%对她。我可以理解的,也能做到,但是我也是PH值偏低的人,也想她能这么对我。这也许就是“龟毛对龟毛”?说实话,她让我很不放心,很多时候不知道她怎么想的。比如她看到好玩的或者好吃的时,我就不存在了,比如和她一起走,她可以双手插在裤袋里面想着事情。。。还是喜欢她象个小女孩子挽着我的胳膊一起走。
两个人在一起就必然有冲突,因为每个人做事,思考问题的方式不一样,有自己的习惯,我想两人走到一起,就要互相适应对方,互相谦让对方,做事前先想想对方,多考虑对方的感受!我想我能够做到,信心会恢复的!

10/12/2006

较劲

首先是我做的不对,让她生气了,接下来她就挂我的电话了。第二天中午给她打电话,本来好声好气的,结果她的一句“你有什么事情吗?”,向我浇了一盆冷水。下班后,我主动给她发了两条短信,但她没回。我心里能好受吗?刚好老爸打来电话问我回家吃饭吗?我于是答应了。
车刚开过西坝河,她打来电话,问我在哪里吃饭?很快说完了,不爽。
到家吃完饭,就打开电脑,看她没在线,就上网看房子的信息,看到一条重要的消息,就给她打电话,结果无人接听!
今天吃完中饭,想想还是打电话问问她吧,结果,“好!。。。饭!。。。菜!。。。好!”,很不耐烦的样子,于是挂了电话。没办法了,短信不回,电话不接,就算接了也是“你有什么事情”等。
我恨不得一赌气也不给她电话、短信!反正她不会回的,也不愿意接电话!想想结局会怎么样呢?分道扬镳?
今天下班了再主动联系她吧,毕竟事因我而起。

10/11/2006

靓颖 - The One

mp3下载:
www.gbdisk.com
提取码:
part1:5441892196216290
part3:5243341086196500
part2:5687215050240804

歌词下载:
http://www.newsmth.net/att.php?s.82.602748.8650.rar

10/10/2006

这两天心里有点毛

9.30 早上8点半到达yz,在火车站乘坐公交车至江都,路上花了越50分钟呢,然后下车去超市给奶奶买月饼,到家已经10点多了,好累!
10.1 今天“又”是她生日。晚上陪她一起去超市顶层的游乐场玩,投硬币的,开汽车和摩托车比较好玩。“打鼹鼠”她打出了80分的高分,很厉害哦!
10.2 上午她爸妈找我“谈心”。下午和他们一起去了“小猪子”家。“小猪子”还是那么调皮,她爸妈很热情。在她家吃过午饭,打了会儿牌,我们就走了,她和她姐、她妈妈还有我一起世纪联华购物,然后在附近商场逛了逛。那件白色的风衣她穿着挺好看的,当时就下决心以后要给她买,嗯~
10.3 下午陪她去买拎包,她妈妈也去了。逛了半天,淘了一个便宜货,凑合。回来的路上看到路边在搭戏台,问她妈妈才知道晚上有“扬剧”。
晚上,她妈妈、她和我一起去看“扬剧”,第一次近距离看戏呢 :) 没想看戏的人还不少哦。虽然绝大部分听不懂,但看着台上的戏子穿着戏服,一招一式,有模有样的唱着,台下老人大人小孩饶有兴趣的听着,一片祥和的气氛,不知道扬剧有多久的历史了,也许还是和现在一样的戏服,一样的唱腔......大音响和烟花的声音把我拉回来的现实中......
10.4 早上醒了,看手机时间,手机没点已经关机了,感觉时间尚就又躺下眯会儿。再醒来仍不想动,于是躺着看书。后来听到敲门声,赶紧穿好衣服,打开门一看原来是她姐姐,叫我起床的。没办法了~过去她那边,看时间--9点多,她们的作息时间也和我们家不一样啊。
下午“谈心”
晚饭过后,四人出去散步,风吹着挺舒服的 :) 后来到了龙川广场的一个KTV唱歌,唱了一个小时。
10.5 手机依旧没电。早上醒后眯了一会儿就起床了。看到她妈妈和爸爸在楼下,她爸爸在给自行车打气,这时才知道时辰尚早 :( 吃过早饭,她也起床了,于是帮她准备早饭,然后趁她洗漱的功夫把她的被子等收拾好了。谁知她一点反应都没有,估计是被侍候惯了。
我打开电脑看新闻,接着看电影《达芬奇密码》
下午同她和她妈妈一起去附近的“鞋城”给她买皮鞋,买了两双皮靴。回来后我一个人去澡堂洗澡,我速战速决,回来后,被她爸妈说了:“以后不要这么快了!”
晚上看电视,不知道为什么,心情有点压抑。
10.6 今天中秋节呢。上午骑自行车载着她去龙川广场的“小肥羊”订位子,另外陪她取钱。
中午喝红葡萄酒,头有点晕乎,酒量太差 :( 吃完饭大家都午休了 我睡的很香呢 好久没睡的这么沉了
下午我们一起打麻将
晚上聚餐
10.7 “回北京的心情”

七天长假这么快就结束了。
昨天早上6点半到了北京,天阴沉沉的。下了火车就拎着大包小包的把她送到了宿舍,快到宿舍的时候下起了小雨。把她安顿好了就急忙去挤公交车,还要到公司上班呢。好不容易撑到下班,见到她,很开心,一起说说笑笑走到站台。她突然对着我的耳朵大叫一声,我一点准备都没有,吓的够呛,心砰砰只跳,另外感觉耳朵嗡嗡的作响,然后问她干嘛,责备她不该这样,但她当时只是笑着说是开玩笑,我越说越急,心里有点毛,后来她一扭头就走,那一刻我心里别提多难受了,但没办法啊,我是男人,于是又给她打电话,让她回来......
今天晚上给她打电话,已经快11点了,我知道她今天很累的,一心想着让她早点休息。说到一半,我说:“你快休息吧......”,她立刻说:“怎么,不耐烦了啊”,然后又问我在哪里打电话,此刻我爸爸过来了,而她在电话那头不停的催,还问:“怎么了.......”,听口气好像发火了,不过我想等爸爸离开后再讲,于是没有说话,但心里憋着,我爸爸一走开,我马上说“我在厨房......”,我说的很快,因为我的心里有点毛。

10/09/2006

两个测试

What Gender Is Your Brain?
http://www.blogthings.com/whatgenderisyourbrainquiz/

What is your Perfect Major? (PLEASE RATE ME!!<3)
http://quizfarm.com/test.php?q_id=119158

进程的一生

[进程的一生]
一.fork
之后将讲述的线程也完全一样使用do_fork函数生成。只是在于调用这个函数时传递的参数不同。

do_fork(flag,进程上下文)
分配一个空的task_struct(alloc_task_struct函数)
分配一个进程ID(get_pid函数)
初始化task_struct结构体的各个成员
复制文件描述符表(copy_files函数)
当前目录,umask等的复制(copy_fs函数)
复制信号情报(copy_sighand函数)
父进程上下文的复制(copy_thread函数)
使用Copy-On-Write复制虚拟内存空间(copy_mm函数)
将生成的子进程链接入RUNQ(wake_up_process函数)

二.exec
进程可使用exec系统调用执行新的命令。exec系统调用将一次性释放全部虚拟内存空间,之后生成新的空间并将新的命令映射入内。

do_execve(文件路径,参数。环境)
打开文件(open_namei函数)
计算exec后的UID/GID,读入文件头(prepare_binprm函数)
读入命令名,环境变量,启动参数(copy_strings函数)
调用各种不同二进制文件的操作函数(search_binary_handler函数)

ELF格式的话,经由search_binary_handler函数调用load_elf_binary函数。如果是动态链接,同时映射动态链接器(ld*.so)

load_elf_binary(linux_binprm* bprm,pt_regs* regs)

分析ELF文件头
读入程序的头部分(kernel_read函数)
if(存在解释器头部)
{
读入解释器名(ld*.so)(kernel_read函数) |(zalem note:可用
打开解释器文件(open_exec函数) | objdump -s -j .interp xxx
读入解释器文件的头部(kernel_read函数) | 命令查看,
| linux下是/lib/ld-linux.so.x)
}

释放空间,清除信号,关闭指定了close-on-exec标识的文件(flush_old_exec函数)
生成堆栈空间,塞入环境变量/参数部分(setup_arg_pages函数)
for(可引导的所有的程序头)
{
将文件映射入内存空间(elf_map,do_mmap 函数)
}

if(为动态链接)
{
映射动态链接器(load_elf_interp函数)
}

释放文件(sys_close函数)
确定执行中的UID,GID(compute_creds函数)
生成bss领域(set_brk函数)
bss领域清零(padzero函数)
设定从exec返回时的IP,SP(start_thread函数)(动态链接时的IP指向解释器的入口)

三.exit

进程的结束由do_exit函数进行。除显式调用exit系统函数外,接受到信号而终止的情况下也被调用。do_exit函数释放除task_struct结构体外的所有资源。do_exit使用exit_notify函数向父进程发送SIGCHLD信号。接受到SIGCHLD函数的父进程找出成为ZOMBIE状态的子进程,释放其task_struct.

do_exit(终止号)
{
停止此进程的计时器(del_timer_sync函数)
释放IPC信号灯(sem_exit函数)
释放虚拟空间(__exit_mm函数)
关闭文件及释放管理空间(__exit_files函数)
释放当前目录,umask情报(__exit_fs函数)
抛弃信号及管理领域的释放(__exit_sighand函数)
将进程状态设为TASK_ZOMBIE
通知父进程(exit_notify函数)
放弃CPU(schedule函数)
}


父进程使用下面的release函数释放成为了ZOMBIE的task_struct结构体。

release(ZOMBIE的子进程)
释放PID(unhash_process函数)
释放task_struct(free_task_struct函数)

使用python进行数据库模块封装

import MySQLdb
class db:
#构造函数,其中连接了数据库
def __init__(self , host , user , passwd):
try
print "Open the Database"
self.conn = MySQLdb.connect(host , user , passwd)
except MySQLdb.OperationalError ,error:
print "Error %d: %s" % (error[0] , error[1])

#关闭数据库
def db_close(self):
self.conn.close()
print "close the database"

#使用数据库
def db_use(self , name):
str = "use " + name
result = self.db_execute_SQL(str)
return result

#查询数据库
def db_select(self , name , *arg):
str = "SELECT * FROM " + name + self.__str_join__(" " , arg)
result = self.db_execute_SQL(str)
return result

#向数据库添加数据
def db_insert(self , name , *value ):
str = "INSERT INTO " + name + " VALUES (" + self.__str_join__("," , value) + ")"
result = self.db_execute_SQL(str)
return result

#删除数据库中的数据
def db_delete(self , name , ID ):
str = "DELETE FROM " + name + " WHERE id = " + ID
result = self.db_execute_SQL(str)
return result

#修改数据库中的记录
def db_update(self , name , id , *arg):
str = "UPDATE " + name + " SET " + self.__str_join__("," , arg) + " WHERE id = " + id
result = self.db_execute_SQL(str)
return result

#向数据库中添加表
def db_create_table(self , name , *arg):
str = "CREATE TABLE " + name + "(" + self.__str_join__("," , arg) + ")"
result = self.db_execute_SQL(str)
return result

#删除数据库中的表
def db_drop_table(self , name):
str = "DROP TABLE " + name
result = self.db_execute_SQL(str)
return result

#修改数据库中的表
def db_alter_table(self , name , type , arg):
TYPE = ("ADD" , "DROP" , "RENAME")
if type in TYPE:
str = "ALTER TABLE " + name + " " + type + " " + arg
result = self.db_execute_SQL(str)
else:
print "You have an error in your SQL syntax;"
return False
return result

#查看表的结构
def db_describe(self , name):
str = "DESCRIBE " + name
result = self.db_execute_SQL(str)
return result

#执行SQL
def db_execute_SQL(self , str):
cursor = self.conn.cursor()
try:
print str
cursor.execute(str)
self.conn.commit()
allRecords = cursor.fetchall()
except MySQLdb.ProgrammingError , error:
print "You have an error in your SQL syntax;"
return False
except MySQLdb.OperationalError , error:
print "Error %d: %s" % (error[0] , error[1])
return False
if allRecords == ():
return True
else:
return allRecords

#用于连接SQL命令
def __str_join__(self , symbol , arg):
s = " "
for i in arg:
if s != " ":
s += symbol
s += i
return s

#用于测试的模块
if __name__=='__main__':
con = db("localhost" , "root" , "xxxxxxxxxxx")
con.db_execute_SQL("CREATE DATABASE books")
con.db_use("books")
con.db_create_table("books" , "id int" , "Title CHAR(20)" , "Author CHAR(20)")
con.db_insert("books" , '3' , "'dd'" , '"LeYan"')
con.db_insert("books" , "4" , '"JanusLe"' , '"fff"')
print con.db_select("books")
con.db_delete("books" , "4")
print con.db_select("books")
con.db_update("books" , "3" , 'Author = "NoName"')
print con.db_select("books")
con.db_alter_table("books" , "ADD" , "tttt varchar(20)")
print con.db_describe("books")
con.db_alter_table("books" , "DROP" , "tttt")
print con.db_describe("books")
con.db_close()

==================
MySQLdb的安装
下载MySQLdb,展开之后,运行
python setup.py build
进行编译

这一步可能出现许多问题,常见的有

fatal: library -lmysqlclient_r: not found
这是因为当前平台上没有thread-safe library造成的。
解决办法是,在site.cfg文件中设置:
threadsafe = False

mysql.h: No such file or directory
这是因为找不到mysql.h这个文件,一般来说,文件都存放在mysql安装目录的include目录下。
解决办法是,在site.cfg中指定mysql的路径。

另外需要注意的是,在编译时,一定要保证mysql安装目录中/bin目录下的文件都在PATH中,否则无法编译通过。

接下来执行
python setup.py install
安装完成。

比较诡异的是,有时即使安装完成,在python中执行
import MySQLdb
仍然可能出错:
libmysqlclient.so.12: cannot open shared object file: No such file or directory

遇到这种问题,需要在/usr/lib/下为libmysqlclient.so.12设置一个符号链接(这里假设mysql安装在/usr/local/mysql下)
ln -s /usr/lib/mysql/lib/libmysqlclient.so /usr/lib/libmysqlclient.so.12
再次执行
import MySQLdb
成功。

RFC中文文档

http://man.chinaunix.net/develop/rfc/default.htm


RFC文档目录

RFC1 主机软件
RFC2 主机软件
RFC3 文档规范
RFC4 网络时间表
RFC6 与 Bob Kahn 会话
RFC10 文档规范
RFC13 零文本长度的EOF信息
RFC16 M.I.T
RFC18 IMP-IMP和主机-主机控制联接
RFC19_可用来降低有限交换节点阻塞的两条协议性的建议
RFC20_用于网络交换的 ASCII 格式
RFC21 网络会议
RFC22 主机-主机控制信息格式
RFC23_多重传送的调节信息
RFC24 文档规范
RFC25 不使用高的连接号
RFC27 文档规范
RFC28 时间标准
RFC29 响应 RFC 28
RFC30 文档规范
RFC32 关于SRI所提议的实时时钟的一些想法
RFC34 关于ARC时钟的一些初步记录摘要
RFC35 网络会议
RFC36 协议注解
RFC37 网络会议结尾等
RFC38 NWG/RFC #36 网络协议的注解
RFC40 关于未来协议的更多注解
RFC41 IMP-IMP 通讯信息
RFC42 信息数据类型
RFC43 被提议的会议
RFC45 关于未来协议的更多注解
RFC53 官方协议机构
RFC58 逻辑信息同步
RFC60 简单的 NCP 协议
RFC63 迟来的网络会议报告
RFC66 NIC - 第三级别的想法和其它噪音
RFC69 提议改变 主机/IMP 规范来消除标记
RFC71 输入错误后的再分配
RFC72 建议改变网络协议延期执行
RFC73 响应 NWG/RFC 67
RFC75 网络会议
RFC78 NCP状态报告:UCSB/RAND
RFC79 圆木协议错误
RFC81 涉及信息的请求
RFC84 NWG/RFC的1-80列表
RFC85 网络工作组会议
RFC90 CCN 作为一种网络服务中心
RFC99 网络会议
RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释
RFC102 主机-主机 协议故障清除委员会的说明
RFC103 中断键的执行
RFC104 连接 191
RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书
RFC106 用户/服务器 站点协议的网络主机问卷
RFC107 主机-主机 协议故障清除委员会的说明
RFC108 1971年2月17-19日在 Urbana 举行的 NWG 会议的人员列表
RFC124 在 RFC 107 中有印刷错误
RFC132 RFC 107 的排版错误
RFC148 RFC 123 的注释
RFC149 最好的铺设计划
RFC154 风格显示
RFC156 伊利诺斯州站点的状态: 响应 RFC 116
RFC179 连接的数字分配
RFC185 NIC 分发手册
RFC188 数据管理会议公告
RFC198 站点证明-林肯实验室 360/67
RFC204 利用报路
RFC218 改变 IMP 状态报告设备
RFC228 澄清
RFC232 网络图形会议延缓
RFC245 预定网络工作组会议
RFC246 网络图形会议
RFC256 IMPSYS 变更通知
RFC276 NIC过程
RFC285 网络图形
RFC324 RJE 协议会议
RFC335 新界面 - IMP/360
RFC348 放弃过程
RFC404 文件迁移协议的注释
RFC405 给 TIP 用户的第二封信
RFC456 UCSB 的数据重置服务
RFC457 FTP 的服务器与服务器交互
RFC496 IMP/TIP 内存更新时间表(修订版 2)
RFC516 丢失消息的检测
RFC591 在 NVT ASCII UCSB和在线系统之间的实验输入映象
RFC621 “注意圣诞节的时候要把长袜挂在烟囱下面”
RFC628 更深的数据语言的设计观念
RFC634 最近的网络图
RFC637 SU-DSL网络地址的更改
RFC677 双重数据库的维护
RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690)
RFC697 FTP的CWD命令
RFC698 Telnet扩展ASCII选项
RFC763 角色邮箱
RFC775 面向目录的 FTP 命令
RFC779 Telnet发送-位置选项
RFC792 Internet 控制信息协议
RFC797 位图文件格式
RFC821 简单邮件传输协议
RFC826 以太网地址转换协议或转换网络协议地址
RFC827 Exterior 网关 协议 (EGP)
RFC854 Telnet协议说明书
RFC855 Telnet选项说明书
RFC856 Telnet二进制传输
RFC857 Telnet回声选项
RFC858 Telnet抑制前进选项
RFC859 Telnet状态选项
RFC860 Telnet定时标记选项
RFC861 Telnet扩展选项列表选项
RFC862 回声协议
RFC863 废除协议
RFC864 字符产生协议
RFC865 白天协议的引用
RFC866 激活用户
RFC867 白天协议
RFC868_时间协议
RFC872 局域网上的TCP协议
RFC877 IP 数据包通过公共数据网络的传输标准
RFC888 STUB Exterior Gateway Protocol
RFC890 外部网关协议执行表
RFC894 IP 数据包通过以太网网络传输标准
RFC895 IP 数据包通过试验性以太网网络的传输标准
RFC896 在IPTCP internet网络中的拥塞控制
RFC903 反向地址转换协议
RFC911 BERKELEY UNIX 4.2下的EGP网关
RFC917 因特网子网
RFC918 邮局协议
RFC925 多局域网地址解决
RFC930 Telnet终端类型选项
RFC932 子网地址分配方案
RFC937 邮局协议( 版本 2)
RFC948 IP 数据包通过IEEE 802.3 网络传输的两种方法
RFC949 FTP 未公开的独特命令
RFC951 引导协议(BOOTP)
RFC955 朝向一个处理过程应用的传输服务
RFC962 TCP-4 的最初
RFC968 “这是开动前的黑暗”
RFC974 邮件路由与域名系统
RFC975 自治联邦
RFC976 UUCP 邮件互换格式标准
RFC985 Internet 网关要求 - 起草
RFC988 主机扩展用于IP多点传送
RFC1050 RPC远程步骤呼叫协议说明书
RFC1055 在串行线路上传输IP数据报的非标准协议
RFC1057 RPC远程步骤呼叫协议说明书版本 2
RFC1073 Telnet窗口大小选项
RFC1075 远距离矢量多播选路协议
RFC1088 IP 数据包传输通过NetBIOS网络的标准
RFC1090 SMTP在X.25
RFC1091 TelnetTELNET终端类型选项
RFC1094 NFS网络文件系统协议说明书
RFC1096 Telnet X 显示定位选项
RFC1097 Telnet潜意识-信息选项
RFC1112 主机扩展用于IP多点传送
RFC1113 Internet电子邮件秘密增强第一部分- 信息加密和身份验证步骤
RFC1131 OSPF规范
RFC1132 802.2分组在IPX网络上传输的标准
RFC1134 +PPP协议:关于在点到点链路上进行多协议包传送的建议
RFC1142 OSI IS-IS 域内路由协议
RFC1144 低速串行链路上的TCPIP头部压缩
RFC1155 基于TCPIP网络的管理结构和标记
RFC1166 Internet数字
RFC1180 TCPIP指南
RFC1191 路径MTU探索
RFC1215 为使用SNMP定义Trap的惯例
RFC1239 试验管理系统库(MIB)到标准管理系统库(MIB)的重分配
RFC1242 基准术语用于网络互连设备
RFC1258 BSD 的远程登录
RFC1287 未来的Internet 体系结构
RFC1288 Finger用户信息协议
RFC1298 基于IPX协议的SNMP
RFC1321 MD5 信息-摘要算
RFC1332 PPP Internet 协议控制协议 (IPCP)
RFC1333 PPP 链接质量监控
RFC1355 网络中心数据库的保密和准确性问题
RFC1365 一种IP地址扩展提议
RFC1370 OSPF适用范围声明
RFC1387 RIP(版本2)协议分析
RFC1388 RIP协议版本2
RFC1393 Traceroute使用IP选项
RFC1397 在边界网关协议(Border Gateway Protocol)版本2
RFC1408 Telnet环境选项
RFC1413 鉴定协议
RFC1418 SNMP优于OSI
RFC1420 SNMP优于IPX
RFC1426 SMTP服务扩展用于8bit-多用途网际邮件扩充协议(MIME)传输
RFC1428 Internet邮件从Just-Send-8到8bit-SMTPMIME的转换
RFC1433 直接ARP
RFC1445 简单网络管理协议(SNMPv2)版本 2的管理模式
RFC1454 下一代IP提议的比较
RFC1461 通过X.25多协议互连SNMP管理系统库(MIB)扩展
RFC1469 通过令牌-环局域网的IP多点传送
RFC1483 通过ATM适应层5的多协议封装
RFC1558 LDAP研究过滤器的字符串表达
RFC1571 Telnet环境选项互用性问题
RFC1590 媒体类型注册过程
RFC1591 域名系统的结构和授权
RFC1597 私有Internet的地址分配
RFC1605 SONET to Sonnet翻译
RFC1606 用IP版本9的历史观
RFC1611 DNS服务器MIB扩展
RFC1612 DNS解析器MIB扩展
RFC1618 ISDN上的PPP(点对点)协议
RFC1628 UPS 管理信息基础
RFC1633 Internet 体系结构中的综合服务概述
RFC1635 怎样使用匿名FTP
RFC1636 IAB工厂关于在Internet体系结构的安全报告 -2月8-10号, 1994
RFC1643 以太网-类似界面类型的管理对象的定义
RFC1658 字符流设备使用SMIv2管理对象的定义
RFC1661 点对点协议(PPP)
RFC1671 向IPng 过渡和其他考虑的白皮书
RFC1690 Internet工程与计划组(IEPG)介绍
RFC1691 康奈尔大学数字图书馆文档体系结构
RFC1696 用SMIv2定义的调制解调器MIB
RFC1713 DNS调试工具
RFC1715 地址分配效率比率H
RFC1723 路由信息协议(版本2)
RFC1724 RIP 版本 2 管理系统库(MIB) 扩展
RFC1738 统一资源定位器(URL)
RFC1752 推荐IP下一代协议
RFC1769 简单网络时间协议(SNTP)
RFC1771 边界网关协议版本4(BGP-4)
RFC1776 地址是信息
RFC1777 轻量级目录访问协议
RFC1787 在多供应Internet上的软件路由
RFC1796 不是所有RFCs是标准
RFC1797 A级子网实验
RFC1810 报告MD5性能
RFC1818 最好最新的实践
RFC1822 使用具备Photuris技术的指定IBM专利的权利的授予
RFC1823 LDAP 应用程序界面
RFC1827 IP 密码安全有效载荷 (ESP)
RFC1828 使用键控MD5进行IP鉴别
RFC1860 IPv4变量长度子网表
RFC1867 HTML中基于表单的文件上传
RFC1869 SMTP服务扩展
RFC1878 变量长度子网表格用于IPv4
RFC1883 Internet协议,版本6(IPv6)说明书
RFC1901 基于社区的SNMPv2介绍
RFC1904 简单网络管理协议(SNMPv2)版本 2的一致声明
RFC1918 个人Internets的地址分配
RFC1928 SOCKS V5的用户名/密码鉴定
RFC1930 自治系统(AS)创建,选择,和注册的指导方针
RFC1939 邮局办公协议-版本3
RFC1942 HTML表格
RFC1945 超文本传输协议--HTTP/1.0
RFC1957 邮局协议(POP3)执行的一些观察
RFC1962 PPP压缩控制协议 (CCP)
RFC1977 PPP BSD 压缩协议
RFC1979 PPP压缩协议
RFC1981 IP 版本 6的路径MTU探索
RFC1982 序列号算法
RFC1988 有条件地授予权利给特殊的HP专利于连接Internet工程特遣队的Internet-标准网络管理框架中
RFC1993 PPP G和alf FZA 压缩 协议
RFC1994 PPP挑战握手身份验证协议 (CHAP)
RFC1997 BGP 组属性
RFC1998 BGP 社区属性在多本地路由中的应用
RFC2002 IP移动性支持
RFC2003 在IP内封装IP
RFC2004 IP最小封装
RFC2005 IP移动性的适用性陈述
RFC2011 SNMPv2 管理信息基础用于Internet 协议使用SMIv2
RFC2012 SNMPv2 管理信息基础 用于传输控制协议使用SMIv2
RFC2013 有关采用SMIv2用户数据报协议的SNMPv2管理信息数据库
RFC2015 多用途网际邮件扩充协议(MIME)安全具有相当好的保密性(PGP)
RFC2021 远程网络监控管理信息基础 版本 2使用SMIv2
RFC2025 简单公共密钥GSS-API机制(SPKM)
RFC2040 RC5, RC5-CBC, RC5-CBC-Pad,和 RC5-CTS算法
RFC2042 注册新BGP属性类型
RFC2046 多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第二部分:媒体类型
RFC2053 AM (美国)域
RFC2078 通用安全服务应用接口(GSS-API) V2
RFC2079 X.500 属性类型和对象类别去掌握统一资源定位器(URIs)的定义
RFC2085 具有重放预防的HMAC-MD5 IP 身份验证
RFC2088 IMAP4非同步字符
RFC2095 简单挑战/回应的IMAP/POP授权扩展
RFC2096 IP面向表格管理系统库(MIB)
RFC2101 IPv4 今天地址行为
RFC2104 HMAC:键入-散列法用于信息身份验证
RFC2105 CCisco 系统的标签交换体系结构纵览
RFC2113 IP路由器警告选项
RFC2118 微软点对点压缩(MPPC)协议
RFC2119 关键字用于使用在RFCs指出要求水平
RFC2128 拨号控制MIB(SMIv2)
RFC2144 CAST-128 加密算法
RFC2147 TCP和UDP通过IPv6 Jumbograms
RFC2198 多余音频数据的RTP有效载荷
RFC2208 资源预留协议(RSVP)——版本1 适用性声明 关于配置的一些指导
RFC2212 有保证的质量服务说明书
RFC2217 TelnetCom端口控制选项
RFC2221 IMAP4 登陆参考
RFC2228 FTP 安全扩展
RFC2234 语法说明书的扩充BNF:ABNF
RFC2236 Internet组管理协议,版本2
RFC2241 Novell目录服务的DHCP选项
RFC2245 匿名SASL机制
RFC2260 可升级支持用于多目录多供应者的连通
RFC2279 UTF-8,ISO 10646的一种转换格式
RFC2281 Cisco热备份路由协议(HSRP)
RFC2283 BGP-4的多协议扩展
RFC2284 PPP可扩展认证协议
RFC2289 一种一次性密码系统
RFC2296 HTTP 远程变量选择算法--RVSA/1.0
RFC2313 PKCS#1:RSA加密 版本1.5
RFC2330 IP 执行规则的管理
RFC2343 应用于捆绑的MPEG的RTP有效载荷的格式
RFC2344 移动IP反向隧道
RFC2367 PF_KEY键管理 API,版本 2
RFC2372 处理Internet协议(TIP)-要求和补充信息
RFC2373 IPv6寻址体系结构
RFC2374 IPv6 可集聚全球单播地址格式
RFC2379 RSVP通过ATM执行的指导方针
RFC2384 POP URL 方案
RFC2393 IP有效载荷压缩协议(IPComp)
RFC2394 IP有效载荷压缩使用DEFLATE
RFC2401 Internet 协议的安全体系结构
RFC2403 在ESP和AH中使用HMAC-MD5-96
RFC2404 在ESP和AH中使用HMAC-SHA-1-96
RFC2406 IP 封装安全有效载荷 (ESP)
RFC2407 Internet IP 用于解释ISAKMP的安全域
RFC2408 Internet 安全关联和键管理协议 (ISAKMP)
RFC2409 Internet密钥交换(IKE)
RFC2410 NULL加密算法及其在IPsec协议中的应用
RFC2411 IP安全文件指南
RFC2412 OAKLEY 键决定协议
RFC2435 针对JPEG压缩视频的RTP荷载格式
RFC2449 POP3 扩展机制
RFC2451 ESP CBC-模式密码算法
RFC2459 Internet X.509 公钥基础设施:证书和CRL简介
RFC2460 Internet协议,版本6(IPv6)说明书
RFC2463 针对因特网协议第六版(Ipv6)的因特网控制报文协议(ICMPv6)规范
RFC2466 IP 版本6 管理信息基础:ICMPv6组
RFC2471 IPv6检测地址分配
RFC2474 IPv4与IPv6包头中差分服务字段(DS Field)的定义
RFC2475 分类业务的体系结构
RFC2492 IPv6 通过ATM网络
RFC2495 有关 DS1,E1,DS2,E2接口类型的管理部件的定义
RFC2508 低速串行链路下IP/UDP/RTP数据包头的压缩
RFC2511 Internet X.509认证请求消息格式
RFC2516 在以太网上传输PPP的方法(PPPoE)
RFC2526 IPv6保留的子网任意传送地址
RFC2541 DNS 安全操作考虑
RFC2547 BGP/MPLS VPNs
RFC2554 SMTP服务认证扩展
RFC2560 x.509因特网公钥基础设施在线证书状态协议——OCSP
RFC2570 标准互联网络管理框架第三版介绍
RFC2577 FTP 安全考虑
RFC2581 TCP拥塞控制
RFC2582 TCP的快速恢复算法NewReno修正
RFC2585 Internet X.509 公共键底部结构操作协议: FTP和HTTP
RFC2597 确定的面向PHB组
RFC2598 面向加速PHB
RFC2618 RADIUS 身份验证客户端管理系统库(MIB)
RFC2629 用XML 写I-Ds 和 RFC文档
RFC2633 S/多用途网际邮件扩充协议(MIME) 版本 3 信息说明书
RFC2644 更改直接广播在路由器上的缺省值
RFC2669 DOCSIS 电缆设备管理系统库(MIB) 电缆设备管理信息基础用于DOCSIS 适应性电缆调制解调器和电缆调制解调器中断系统
RFC2670 音频频率(RF)界面管理信息基础用于MCNS/DOCSIS适应性RF界面
RFC2685 虚拟专用网标志符
RFC2702 基于MPLS的流量工程要求
RFC2706 ECML v1:电子商务字段名
RFC2713 LDAP(轻型目录存取协议)目录中JAVATM对象的表征模式
RFC2714 LDAP(轻型目录存取协议)目录中的CORBA对象参考方案
RFC2731 Dublin核心元数据在HTML上的编码
RFC2732 文本IPv6地址在URL上的格式
RFC2733 RTP有效载荷格式用于普通正向错误更正
RFC2736 RTP有效载荷格式说明书作者的指导方针
RFC2754 RPS IANA的发布
RFC2756 超文本缓存协议(HTCP/0.0)
RFC2764 IP VPN的框架体系
RFC2773 使用KEA和SKIPJACK加密
RFC2774 HTTP 扩展框架
RFC2781 UTF-16,ISO 10646的一种编码
RFC2784 通用路由封装(GRE)
RFC2788 网络服务监视MIB
RFC2793 用于文本交谈的RTP负载
RFC2796 BGP路由映象
RFC2809 通过RADIUS的L2TP强制通道的执行
RFC2810 Internet 延迟交谈:体系结构
RFC2811 Internet延迟交谈:通道管理
RFC2813 Internet 延迟交谈:服务器协议
RFC2817 在HTTP/1.1中升级到TLS
RFC2818 TLS之上的HTTP
RFC2824 呼叫过程语言框架和要求
RFC2825 复杂网络:I18N的发布,域名,和其它Internet协议
RFC2829 LDAP的身份验证方法
RFC2830 轻量级目录访问协议(v3): 传输层安全扩展
RFC2833 用于DTMF数字信号、电话音和电话信号的RTP负载格式
RFC2854 text/html 媒体类型
RFC2855 IEEE 1394的DHCP
RFC2861 TCP 拥塞窗口检验
RFC2862 用于实时指针的RTP负载格式
RFC2866 RADIUS(远程用户拨号认证系统)记帐协议
RFC2867 RADIUS 账目管理修改用于通道协议支持
RFC2868 RADIUS 属性用于协议支持
RFC2869 RADIUS 扩展
RFC2871 一个IP电话路由框架
RFC2873 在Ipv4优先域中的TCP过程
RFC2874 支持IPv6地址集合和重编号的DNS 扩展
RFC2882 网络访问服务要求: 扩展范围实践
RFC2887 可靠的多点传送设计空间用于大的数据传送
RFC2889 基准方法论用于局域网交换设备
RFC2890 GRE中Key和SequenceNumber扩展
RFC2893 IPv6 主机和软件路由器转换机制
RFC2898 PKCS #5: 基于密码的密码系统说明书 版本 2.0. B
RFC2906 AAA 授权要求
RFC2914 拥塞控制原理
RFC2917 核心 MPLS IP VPN 体系结构
RFC2918 BGP-4(边界网关协议)的路由刷新功能
RFC2920 SMTP 针对命令流水线的服务扩展
RFC2923 TCP的路径MTU发现问题
RFC2932 IPv4 多点传送路由管理系统库(MIB)
RFC2935 Internet开放贸易协议(IOTP)HTTP 补充
RFC2945 SRP身份验证和键交换系统
RFC2946 Telnet 数据加密选项
RFC2959 实时传输协议管理信息库
RFC2964 超文本传输协议(HTTP)状态管理的应用
RFC2971 Internet信息访问协议(IMAP4)的标识符扩展
RFC2976 SIP信息方法
RFC2983 有区别的协议和通道
RFC2987 字符集注册和语言媒体特征标签
RFC2988 计算TCP重传时间的定时器
RFC2991 多路径分发在Unicast上和多点传送下一路程段选择
RFC2992 等值多-路径算法的分析
RFC2994 MISTY1加密算法的描述
RFC3001 对象标识符的URN名称空间
RFC3003 audio/mpeg 媒体类型
RFC3005 IETF 讨论列表许可证
RFC3007 安全的域名系统动态更新
RFC3009 奇偶向前纠错 MIME类型的注册
RFC3014 提示日志 管理系统库(MIB)
RFC3016 用于MPEG-4视听流的RTP负载格式
RFC3018 统一内存空间协议说明书
RFC3019 IP 版本 6 管理信息基础用于多点传送听众探索协议
RFC3021 在Ipv4点对点连接中使用31位前缀
RFC3022 传统IP网络地址转换(传统NAT)
RFC3028 滤网:一种邮件过滤语言
RFC3029 Internet X.509 公共键下部构造数据有效性和认证服务协议
RFC3032 MPLS标记栈编码
RFC3033 信息域和协议标识符在Q.2941普通标识符和Q.2957用户对用户发送信号中的分配用于Internet 协议
RFC3034 标签转换在帧中继网络说明书中的使用
RFC3035 MPLS使用LD和ATM VC交换
RFC3037 LDP 的适用性
RFC3038 VCID提示通过ATM链接用于LDP
RFC3040 Internet网复制和缓存分类法
RFC3042 使用有限传输增强TCP的丢失恢复能力
RFC3043 Network Solutions的个人网络名(PIN): 一种个人和组织的统一资源名域
RFC3044 在ISSN-URN命名空间中用ISSN作为URN
RFC3046 DHCP 中继代理信息选项
RFC3048 可靠的多点传输建立阻止一对多大数据传送
RFC3051 IP有效载荷压缩使用ITU-T V.44打包方法
RFC3055 PINT服务体系结构管理信息基础.
RFC3058 IDEA加密算法在CMS上的使用
RFC3059 服务定位协议的属性列表扩展
RFC3061 对象标识符的一种URN姓名空间
RFC3062 LDAP口令修改扩展操作
RFC3066 语言鉴定标签
RFC3067 TERENA'S事件对象描述和转换格式要求
RFC3069 VLAN聚合实现IP地址有效分配
RFC3070 基于帧中继的第二层隧道协议
RFC3072 结构化的数据改变格式 (SDXF)
RFC3074 DHC加载平衡算法
RFC3078 微软点对点加密(MPPE)协议
RFC3081 将区块扩展交换协议(BEEP)核心映射到传输控制协议(TCP)
RFC3082 服务定位协议(SLP)的预研报告
RFC3083 基线私人界面管理信息基础(MIB)用于兼容Cable Modems和Cable Modem终端系统的DOCSIS
RFC3085 新闻型标记语言(NewsML)资源的URN名字空间
RFC3090 域名系统在区域状况下的安全扩展声明
RFC3091 改进数字产生协议
RFC3093_防火墙增进协议 (FEP)

9/28/2006

makefile备份

GTK2_CFLAGS=`pkg-config gtk+-2.0 --cflags`
GTK2_LIBS=`pkg-config gtk+-2.0 --libs`

OBJS=hinet_radio.o eggtrayicon.o
PREFIX=/usr

all: $(OBJS)
cc -o hinet_radio $(GTK2_LIBS) $(OBJS)

hinet_radio.o: hinet_radio.c
cc -c $(GTK2_CFLAGS) hinet_radio.c

eggtrayicon.o: eggtrayicon.c eggtrayicon.h
cc -c $(GTK2_CFLAGS) -DEGG_COMPILATION eggtrayicon.c

clean:
rm -f hinet_radio
rm -f *.o

install: all
install -s hinet_radio $(PREFIX)/bin/hinet_radio


=================================

GCC=gcc
CFLAGS=-c
IFLAGS=-I.
OBJS=t.o

.SUFFIXES: .c .o
.c.o:
$(GCC) $(CFLAGS) $(IFLAGS) $*.c

all: t
t: $(OBJS)
@echo Linking $@...
$(GCC) -o $@ $?
@echo "##### $@ loaded #####"

clean:
rm -f *.o

initrd修改

cd /boot
mkdir tmp/
cd tmp/
cp initrd*.img ./
mv initrd*.img initrd*.gz
gunzip initrd*.gz
cpio -id rm initrd*
然后修改init文件,拷贝要添加的内核模块到lib/目录下。

从新打包步骤:

在当前修改目录下
find . | cpio --create --format='newc' > ../initrd
cd ../
gzip initrd
cp initrd.gz initrd.img

amsn

前两天升级了新系统,安装amsn后,输入中文为乱码,因为忙别的事情就没弄它,今天看了一下,很简单,就是是因为amsn默认编码不对,设置为gb2312就行了。
amsn目前较新的版本为amsn-0.96RC1(好象通过svn可下载0.97的),无法输入中文的问题已经解决,不需要打补丁。在安装amsn之前需要先装tk和tcl。最后编译安装amsn,启动amsn后选择语言为中文,重启,然后在"偏好设置(ctrl+p)"中的“外观”,选择gb2312即可。

9/27/2006

十一学习计划

时间宝贵,为贯彻前段时间自己定的目标,现把假期学习计划安排如下,希望能完成!(主要是睡觉前的时间)
1.把那本linux内核设计的书看完;--- 已经看了一半了,这个应该能够完成
2.熟悉python并学习界面开发,顺带熟悉gtk等知识;--- 这几天有空也在看这方面资料,可以打印几份资料,带在身上,另外,界面的话,先看zhfsj_IWuibu1oarZS.zip这个例子,差不多能完成
3.驱动方面知识估计没时间看了,先排在这里,可以向后面推;

9/26/2006

linux安装amsn

在linux下以前用gaim上msn,后来一直用amsn,觉得不错,不过安装可能费点事,以下是我的安装过程,供参考:
1.如果系统未安装tcl,则到http://www.tcl.tk/下载tcl8.4.13-src.tar.gz和tk8.4.13-src.tar.gz,并编译安装;
2.下载amsn(http://amsn.sourceforge.net/download.php),编译安装;
3.执行amsn &

在执行amsn时出错:
amsn line:3 exec wish not found

最后发现并不是没有wish命令,ls -l /usr/bin/wish*,有wish8.4,于是建链接 ln -s /usr/bin/wish8.4 /usr/bin/wish

9/25/2006

目标

这次又面临一个选择,有一家做银行开发的公司给我offer,没什么就是钱给的多点,开始有点犹豫,当我去那家公司“参观”之后,又和我哥商量了一下,决定还是放弃这个机会,继续我现在的工作,为了我现在的这条linux开发之路,已经放弃两次机会了,我相信我的选择没有错的。
既然这么坚定自己当初的选择,就给自己定一个基本的发展方向吧:学习linux内核这是一个长期的过程,然后就是linux驱动开发和嵌入式开发(目前正在做这方面的),利用现在的机会,静下心来,好好学。发现现在好些人比较浮躁,这是要不得的。相信我坚持一年或两年,回头看看这两次选择,应该会满意的笑了。

十一的火车票买到了

昨天吃完中饭,一起打拱猪,这次我有所进步,有几轮都是0分:P 结束之后,我就在找乐网搜索火车票的信息,然后马上打电话过去,说有两张票,我立刻说“我马上过来取!”,然后就准备出门了,她也要去,我怕她累着了,就让她别去了,于是一个人杀向西三环(20/30站吧),经过一个多小时,才到了花园村。。。。。。又经过一个多小时回到家中,在车上又累又饿,不过还好,拿到票了,心里踏实许多 :)
现在可以安心盼着放假了,29号就可以休息啦~连续7天哦 :D

9/15/2006

生日快到了

她的生日就要到了,怎么安排呢?
已经想了很多种,晚上再想想,明天定下来

9/07/2006

[转载]美音听力及发音小技巧

1.【美音听力与发音小技巧】第一期至第三十三期结束篇http://blog.hjenglish.com/melodious/category/2060.html?Show=All

2. 最新新东方听力笔记(完整版)
http://www.exue.com/res/2006-04-26/16_3.shtml

抽时间整理一下。

9/01/2006

vi的一些命令

" 折叠:隐藏某些片断,使查看更容易
zf} : 使用动作命令折叠一个段落
v}zf : 使用可视模式折叠一个段落
zf'a : 折叠到一个标记上
zo : 打开折叠
zc : 重新关闭折叠

" 块缩进
>i{ 向右缩进
>a{ {}整个块缩进

" 显示/隐藏行号
:set nu
:set nonu

" 插入行号
:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)

"
:%s/^/mv /g 在每一行的头部添加“mv ”

"
guu 行小写
gUU 行大写

在普通模式下使用 "*" 键,可以搜索光标下的单词。

:g/^[ \t]*$/d 砍掉空白行

多个文件时之间复制、粘贴内容
"a3yy 把3行内容复制到命名为a的缓冲区
"ap 把名字为a的缓冲区内容拷贝到当前位置
:n 到下一个文件
:e!# 回到上一个文件

8/31/2006

06年九月的第一天

   转眼夏天就过去了,8月已过去,现在快1点半了,但却没有睡意,在一边下载着文档,一边看着geekbone的资料。自从转投linux和c以来,发现自己需要提高的地方很多,当然也学到了不少东西。对AIX比较熟,照着网上的文档安装过一遍:),另外,Oracle也比较熟,安装基本没问题,基本配置也会,再就是tuxedo,这块以前接触最多的了,安装配置以及写service就不说了,我还写WTC(WebLogic Tuxedo Connector)相关程序,原本那个系统的WTC很简单,后端(这里主要指中间件)数据经过WTC,它啥事也不做,把数据tpforward给前置服务器Weblogic,但后来需要考虑数据安全的问题,于是后端传过来的数据需要加密后再发到前置。这时就需要改用tpacall了。
   后来接触到了MQ,消息中间件。感觉MQ配置、开发并不复杂,关键要真正理解MQ的设计思想、框架。两台主机通过MQ发送文件,一般有两种方式:1)建远程队列;2)群集(cluster)。
   以前只听说过HA切换,有幸见识到了它的真面目,记得HACMP的版本是5.3,IBM High Availability Cluster Multiprocessing for AIX 5L V5.3 (HACMP V5.3)。HA安装到没什么,关键是在此之前的规划,包括网络划分、备份方案(比如raid 0+1)等等,这个挺复杂的,最后就是切换脚本。
   目前主要做Linux桌面应用开发,算是做产品吧,以前做工程(项目开发)挺累的,不过能学到不少东西,现在挺怀念的:)既然我选择了Linux开源方向,就要坚持走下去吧,要继续提高编程能力,以及Linux内核的学习,另外,争取参加几个开源项目,加油!

8/30/2006

在Linux下对一个二进制文件的分析过程

拿到这个文件,首先应该分静态分析和动态分析。

对未明2进制文件分析工具简单总结:
静态考查:file、nm、strings、objdump
动态跟踪:strace、lstrace
动态调试: gdb、insight
反汇编 :ida

对未明2进制文件分析方法简单总结:

1. 外部观察,了解文件类型、行为和外部接口。

2. 静态分析,看看程序用了那些外部函数:
nm xxx -- 列出二进制文件中符号表
objdump -R xxx -- 列出文件中入口函数的名称

3. 静态考查更多的外部接口
静态分析可以通过strings来简单了解。

4. 用ida反汇编,静态考查我们以上发现的兴趣点

8/25/2006

svn的bug?

最近使用svn时遇到一个问题:如果上传到svn服务器上的文件为link文件,则可能出问题,svn checkout出来该link文件变为一个普通文件,不知道是不是svn的bug或者svn服务器配置的问题?

关于VIM插件介绍

http://learn.tsinghua.edu.cn:8080/2005212716/html/vimplugins.html

先贴个网页,待有空补充

8/24/2006

贴一下我的.vimrc

在linux下面写c/c++程序,我习惯使用vim,下面是我喜欢的配置,具体含义可以 :help

~/.vimrc:

" vim:shiftwidth=4:tabstop=4:expandtab
set background=dark
set nobackup
set nowritebackup
set autoindent
set showcmd
set showmatch
set formatoptions+=mM
set noincsearch
set hlsearch
set wrap
set wrapscan
set ruler
set shiftwidth=4
set tabstop=4
set showmode
set novisualbell
set nonumber
syntax on
" Key mapping to stop the search highlight
nmap :nohlsearch
imap :nohlsearch
"Ctrl+p 添加注释信息
map ^P o/*Comment by hzy


" 编辑当前文件所在目录下的另一个文件
" 使用表达式来从当前文件路径中解析出路径
if has("unix")
map ,e :e =expand("%:p:h") . "/"
else
map ,e :e =expand("%:p:h") . "\\"
endif

"setup cscope automaticly
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif

Linux下firefox插件开发

最近在这方面的工作,抽时间总结一下。

终于有点时间了 :)
机器环境:Linux 2.6.12-1.1456.cocreate.3
Firefox版本:firefox-1.5.0.3
编译Firefox:
1)安装mozilla开发包;
2)从 ftp://ftp.mozilla.org/pub/mozilla.org/mozilla/ 下载Firefox源码firefox-1.5.0.3-source.tar.bz2,下载中文语言包firefox-langpacks-cn-1.5.0.3.tar.bz2;
3)以上两个文件下载完毕后放到/usr/src/redhat/SOURCES/,然后在/usr/src/redhat/SPECS/编写编译打包用的spec文件firefox-1.5.x,关于RPM、SPEC等可参考
http://www.redhat.com/docs/manuals/linux/RHL-7-Manual/ref-guide/index.html;
其中语言安装脚本部分可以这么写:
# Install langpacks
%{__mkdir_p} $RPM_BUILD_ROOT%{_libdir}/firefox/extensions
%{__tar} xjf %{SOURCE23}
for langpack in `ls firefox-langpacks/*.xpi`; do
language=`basename $langpack .xpi`
extensiondir=$RPM_BUILD_ROOT%{_libdir}/firefox/extensions/langpack-$language@firefox.mozilla.org
%{__mkdir_p} $extensiondir
unzip $langpack -d $extensiondir
find $extensiondir -type f | xargs chmod 644

langtmp=%{_tmpdir}/%{name}/langpack-$language
%{__mkdir_p} $langtmp
jarfile=$extensiondir/chrome/$language.jar
unzip $jarfile -d $langtmp
find $langtmp -type f | xargs chmod 644
%{__rm} -rf $jarfile
cd $langtmp
zip -r -D $jarfile locale
%{__rm} -rf locale
cd -
done
%{__rm} -rf firefox-langpacks

4)运行rpmbuild -bl firefox-1.5.x 确认%files的路径等正确,然后编译:rpmbuild -ba firefox-1.5.x,经过大约40几分钟(如果机器配置差的话需要更长的时间),如果没有出错则编译成功,生成的文件在/usr/src/redhat/RPMS/i386/和/usr/src/redhat/SRPMS/;

下面进入主题,编写插件:
为简单起见可以将firefox源码包中的插件simple目录拷贝一份出来,然后直接修改相应文件,编写代码。完成后需要生成生成头文件和xpt文件,命令如下:
(1)生成头文件
/usr/lib/mozilla-1.7.12/xpidl -m header -I/usr/share/idl/mozilla-1.7.12
testplug.idl
(2)生成xpt文件
/usr/lib/mozilla-1.7.12/xpidl -m typelib -I/usr/share/idl/mozilla-1.7.12
testplug.idl

写spec文件,如下:
。。。
%prep
rm -rf %{buildroot}

%setup -n %{name} -q

%build
./configure
%{__make}

%install
%{__mkdir} -p %{buildroot}%{_libdir}/firefox/{plugins,components}
install -m755 src/.libs/libtestplug.so %{buildroot}%{_libdir}/firefox/plugins
install -m755 src/testplug.xpt %{buildroot}%{_libdir}/firefox/components
install -m644 demo.html %{buildroot}%{_libdir}/firefox/

%clean
rm -rf %{buildroot}

%files
%defattr (-,root,root)
%{_libdir}/firefox/plugins/libtestplug.so
%{_libdir}/firefox/components/testplug.xpt
%{_libdir}/firefox/demo.html

%changelog
。。。

编译成功后启动firefox就可以看到测试了。


<参考>
mozilla/modules/plugin/tools/sdk/samples(firefox插件sample文件)
http://www.mozilla.org/projects/plugins/npruntime.html
http://kb.mozillazine.org/Extension_development

运行时改变Linux的交换文件(来自网上资料)

内存不够用,而且用光交换分区空间的情况,导致无法正确安装、升级软件包。解决办法:
1、使用dd命令建立一个文件,作为交换文件;
2、使用mkswap命令初始化上一步中建立的文件;
3、使用swapon命令激活交换文件,这样交换空间就是原有交换分区的容量加上新建的交换文件的容量;
4、进行耗费内存的操作;
5、根据需要可以使用swapoff关闭交换文件,并删除文件节省磁盘空间。

下面是操作的例子:

# dd if=/dev/zero of=/tmp/swapfile bs=1024 count=65536# mkswap /tmp/swapfile# swapon /tmp/swapfile# ...# swapoff /tmp/swapfile# rm /tmp/swapfile

KOffice相关开发资料

#google:
site:developer.kde.org xxx

#irc:
irc.kde.org

#koffice others:
http://commit-digest.org/ http://developer.kde.org/documentation/tutorials/kiosk/index.html http://developer.kde.org/documentation/library/3.4api/kdeui/html/classKMainWindow.html

更新系统库

os: Linux CCOSS_882447307 2.6.12-1.1456.cocreate.3
gcc: 3.3.3 20040412
qte: qt-embedded-free-3.3.6
kde-lib: kdelibs-3.5.3
koffice: koffice-1.5.1

自己写的测试程序(main.cpp,见附录),编译通过,然后运行 qvfb -width 640 -height 480 & ,接着运行测试程序./main -qws 出现以下错误:
./main: error while loading shared libraries: libkdecore.so.4: cannot open shared object file: No such file or directory

估计是因为在系统库中找不到libkdecore.so,于是ldconfig -p | grep libkdecore ,果然没找到,于是手动添加一下,vi /etc/ld.so.conf,增加/usr/local/kde/lib目录,再运行ldconfig更新一下就OK了。


#main.cpp for test
#include
#include
#include

int
main (int argc, char **argv)
{
KApplication *a;
a = new KApplication (argc, argv, "p2");

QPushButton *hello = new QPushButton (i18n ("Hello World !"), 0);

a->setMainWidget (hello);
hello->show ();

return a->exec ();
}

8/08/2006

终于可以访问了

今天通过http://www.pkblogs.com/primerlife这种方式,可以访问了

7/19/2006

这段时间好忙,还有一周就差不多忙完了

3/11/2006

MPEG Audio Player for Layer 1,2 and Layer3.

http://www.mpg123.de/

第一贴~

今天上午突然下起了鹅毛大雪,没一会儿又停了,阳光普照......真是怪啊~