<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-23853951</id><updated>2012-02-16T21:42:25.731+08:00</updated><category term='gmail google'/><category term='install'/><category term='gentoo'/><category term='_cdecl'/><category term='rent'/><category term='eix'/><category term='gcc、c、gdb'/><category term='GDB Linux'/><category term='sed'/><category term='chrome'/><category term='panoramio、Google Earth'/><category term='gnu fun'/><category term='mutt'/><category term='thead pool、负载均衡'/><category term='git'/><category term='python excel pyExcelerator'/><category term='wireless wifi Neo FreeRunner'/><category term='vim'/><category term='work'/><category term='sort'/><category term='xml'/><category term='substitute'/><category term='辞职'/><category term='heap'/><category term='subversion svn'/><category term='ubiquity'/><category term='Debian、Linux、dynamic tick'/><category term='gcc cpp gentoo'/><category term='水木、GNOME 、solaris'/><category term='vlc'/><category term='搬家'/><category term='DetaolB、linux、floppy'/><category term='Firefox'/><category term='pidgin msn-pecan wlm'/><category term='weather， 天气'/><category term='ISO安装LINUX'/><category term='move house'/><category term='cat'/><category term='procmail'/><category term='lspci'/><category term='msmtp'/><category term='AIX'/><category term='大规模、并行计算、集群'/><category term='remove'/><category term='google'/><category term='风'/><category term='cut、tr'/><category term='make.conf'/><category term='地铁、隐藏路线'/><category term='equery'/><category term='miniGUI keyboard control'/><category term='发烧'/><category term='fetchmail'/><category term='euse'/><category term='GTKFB'/><category term='ctags、cscope、vim'/><category term='winter'/><category term='感冒'/><category term='curl'/><category term='demo'/><category term='领带'/><category term='wireless wlan wifi TL-WN321G Ralink'/><category term='c、stack'/><category term='commands'/><category term='ibm'/><category term='linux devtodo conky'/><category term='炒股，访问blogspot.com'/><category term='wireless wlan  WiFi TL-WN322G+'/><category term='_stdcall'/><category term='英语、缩写'/><category term='gettext'/><category term='email blog update'/><category term='USB，内核'/><category term='T42'/><category term='block gentoo emerge'/><category term='po'/><category term='linux'/><category term='winter beijing badminton'/><category term='北京'/><category term='emacs'/><category term='netstat'/><category term='vi'/><category term='MoinMoin'/><category term='HID'/><category term='dBm dB mW'/><category term='Browse'/><category term='tapioca、gtalk'/><category term='gaim插件、GStreamer插件'/><category term='emerge'/><category term='libpcap cross compile arm'/><category term='内核、System.map、nm、kallsyms'/><category term='stack'/><category term='malloc'/><category term='RedHat、Oracle9i'/><category term='育儿'/><category term='Debian、VMware'/><category term='po4a'/><category term='gentoo X xorg'/><category term='SELinux、内核'/><category term='jscookMenu'/><category term='debugfs'/><title type='text'>天道酬勤</title><subtitle type='html'>从事嵌入式方面开发，主要关注 Linux, C/C++, Python 以及相关的开源项目等</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default?start-index=101&amp;max-results=100'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>166</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23853951.post-8390001496467661828</id><published>2011-02-14T18:10:00.000+08:00</published><updated>2011-02-14T18:18:14.233+08:00</updated><title type='text'>博客转移了</title><content type='html'>现在上blogger太麻烦，故转移到&lt;a href="http://www.vevepay.com/blog"&gt;新的博客&lt;/a&gt;了，欢迎访问！&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8390001496467661828?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8390001496467661828/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8390001496467661828' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8390001496467661828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8390001496467661828'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2011/02/blog-post.html' title='博客转移了'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4419046307730281987</id><published>2010-12-10T13:47:00.001+08:00</published><updated>2010-12-10T13:47:52.373+08:00</updated><title type='text'>交叉编译</title><content type='html'>最近朋友给一块arm板子，让我帮忙交叉编译无线网卡驱动，因为交叉编译都没有，所以从交叉编译器到编译驱动一条龙服务啊，简单记录一下。&lt;p&gt;1) 首先交叉编译器，我用crosstool-ng交叉编译工具，还比较顺利，事先查清楚板子上arm指令集，gcc 和&lt;br&gt;glibc的版本号就可以了，arm指令集可以到这里对照着查：&lt;a href="http://en.wikipedia.org/wiki/ARM_architecture"&gt;http://en.wikipedia.org/wiki/ARM_architecture&lt;/a&gt;；&lt;p&gt;2) 然后编译内核，make ARCH=arm menuconfig，作一下简单配置，记得选上 wireless，接下来编译内核：make&lt;br&gt;ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-   (记得export PATH&lt;br&gt;并指定刚刚编出来的交叉编译起)&lt;p&gt;如果编译过程中出现如下错误：&lt;p&gt;arm-9tdmi-linux-gnu-ld: no machine record defined&lt;p&gt;可能是 binutils 版本导致的，可以暂时注释 文件中下面两行：&lt;p&gt;ASSERT((__proc_info_end - __proc_info_begin), &amp;quot;missing CPU support&amp;quot;)&lt;br&gt;ASSERT((__arch_info_end - __arch_info_begin), &amp;quot;no machine record defined&amp;quot;)&lt;p&gt;&lt;br&gt;3) 最后准备编译无线网卡驱动，由于我机器上的内核是2.6.36，而板子上的是2.6.29.4，所以采用如下方法编译：&lt;p&gt;make KLIB=/usr/src/linux-2.6.29.4 KLIB_BUILD=/usr/src/linux-2.6.29.4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4419046307730281987?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4419046307730281987/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4419046307730281987' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4419046307730281987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4419046307730281987'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/12/blog-post.html' title='交叉编译'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5222562976351409764</id><published>2010-09-01T12:13:00.001+08:00</published><updated>2010-09-01T12:13:49.936+08:00</updated><title type='text'>Linux 平台下函数调用的堆栈分析</title><content type='html'>先给一个很简单的函数调用的程序，如下：&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;&lt;p&gt;int func(int a)&lt;br&gt;{&lt;br&gt;    int i = a;&lt;br&gt;    return i;&lt;br&gt;}&lt;p&gt;int main()&lt;br&gt;{&lt;br&gt;    int i = 2;&lt;br&gt;    func(i);&lt;br&gt;    i = 1;&lt;br&gt;    printf(&amp;quot;i=%d\n&amp;quot;, i);&lt;br&gt;    return 0;&lt;br&gt;}&lt;p&gt;这个程序运行的结果是打印&amp;quot;i=1&amp;quot;，我们要做的实验就是通过改变堆栈 ebp 的值，使得调用函数func 后返回到main 函数中跳过&amp;quot;i =&lt;br&gt;1;&amp;quot;，从而该程序运行结果变为&amp;quot;i=2&amp;quot;。&lt;p&gt;先看看main 和 func两个函数的汇编代码：&lt;p&gt;(gdb) disassemble main&lt;br&gt;Dump of assembler code for function main:&lt;br&gt;0x080483c1 &amp;lt;main+0&amp;gt;:	lea    0x4(%esp),%ecx&lt;br&gt;0x080483c5 &amp;lt;main+4&amp;gt;:	and    $0xfffffff0,%esp&lt;br&gt;0x080483c8 &amp;lt;main+7&amp;gt;:	pushl  -0x4(%ecx)&lt;br&gt;0x080483cb &amp;lt;main+10&amp;gt;:	push   %ebp&lt;br&gt;0x080483cc &amp;lt;main+11&amp;gt;:	mov    %esp,%ebp&lt;br&gt;0x080483ce &amp;lt;main+13&amp;gt;:	push   %ecx&lt;br&gt;0x080483cf &amp;lt;main+14&amp;gt;:	sub    $0x24,%esp&lt;br&gt;0x080483d2 &amp;lt;main+17&amp;gt;:	movl   $0x2,-0x8(%ebp)&lt;br&gt;0x080483d9 &amp;lt;main+24&amp;gt;:	mov    -0x8(%ebp),%eax&lt;br&gt;0x080483dc &amp;lt;main+27&amp;gt;:	mov    %eax,(%esp)                /* argument */&lt;br&gt;0x080483df &amp;lt;main+30&amp;gt;:	call   0x80483b0 &amp;lt;f&amp;gt;&lt;br&gt;0x080483e4 &amp;lt;main+35&amp;gt;:	movl   $0x1,-0x8(%ebp)          /* return address */&lt;br&gt;0x080483eb &amp;lt;main+42&amp;gt;:	mov    -0x8(%ebp),%eax&lt;br&gt;0x080483ee &amp;lt;main+45&amp;gt;:	mov    %eax,0x4(%esp)&lt;br&gt;0x080483f2 &amp;lt;main+49&amp;gt;:	movl   $0x80484d0,(%esp)&lt;br&gt;0x080483f9 &amp;lt;main+56&amp;gt;:	call   0x8048300 &amp;lt;printf@plt&amp;gt;&lt;br&gt;0x080483fe &amp;lt;main+61&amp;gt;:	mov    $0x0,%eax&lt;br&gt;0x08048403 &amp;lt;main+66&amp;gt;:	add    $0x24,%esp&lt;br&gt;0x08048406 &amp;lt;main+69&amp;gt;:	pop    %ecx&lt;br&gt;0x08048407 &amp;lt;main+70&amp;gt;:	pop    %ebp&lt;br&gt;0x08048408 &amp;lt;main+71&amp;gt;:	lea    -0x4(%ecx),%esp&lt;br&gt;0x0804840b &amp;lt;main+74&amp;gt;:	ret&lt;br&gt;End of assembler dump.&lt;p&gt;(gdb) disassemble func&lt;br&gt;Dump of assembler code for function func:&lt;br&gt;0x080483b0 &amp;lt;func+0&amp;gt;:	push   %ebp&lt;br&gt;0x080483b1 &amp;lt;func+1&amp;gt;:	mov    %esp,%ebp&lt;br&gt;0x080483b3 &amp;lt;func+3&amp;gt;:	sub    $0x10,%esp&lt;br&gt;0x080483b6 &amp;lt;func+6&amp;gt;:	mov    0x8(%ebp),%eax&lt;br&gt;0x080483b9 &amp;lt;func+9&amp;gt;:	mov    %eax,-0x4(%ebp)&lt;br&gt;0x080483bc &amp;lt;func+12&amp;gt;:	mov    -0x4(%ebp),%eax&lt;br&gt;0x080483bf &amp;lt;func+15&amp;gt;:	leave&lt;br&gt;0x080483c0 &amp;lt;func+16&amp;gt;:	ret&lt;br&gt;End of assembler dump.&lt;p&gt;当调用func函数时，该程序进程的堆栈发生了哪些变化呢？&lt;br&gt;首先需要传给func 的参数依次入栈，然后是函数的返回地址入栈，也就是call指令的下一条地址，进入func函数后，先把当前的 ebp&lt;br&gt;入栈，也就是上一次的栈帧地址入栈，其次分配栈空间，为函数的局部变量腾出地方。此时堆栈情况大致如下：&lt;br&gt;_________________&lt;br&gt;|     int i = 2                |&lt;br&gt;| ---------------------|&lt;br&gt;|     argument             |&lt;br&gt;| ---------------------|&lt;br&gt;|     return address     |&lt;br&gt;| ---------------------|&lt;br&gt;|     previous frame     |&lt;br&gt;|     pointer address    |&lt;br&gt;| ---------------------|&lt;br&gt;|     int i = a                |&lt;br&gt;|________________|&lt;p&gt;我们只要把这里的 return address 改为0x080483eb即可，也就是跳过0x080483e4处的赋值语句，这样就变量 i&lt;br&gt;的值就没有改变，因此可达到实验要求的效果。怎么改呢？很明显，可以通过func函数的局部变量 i，取它的地址，就可以访问堆栈了，可以在gdb&lt;br&gt;中做这样的测试：&lt;p&gt;p /x *(&amp;amp;i)            -----&amp;gt; 局部变量 i 的值&lt;br&gt;p /x *(&amp;amp;i+1)        -----&amp;gt; 之前的栈帧地址&lt;br&gt;p /x *(&amp;amp;i+2)        -----&amp;gt; 函数返回地址&lt;br&gt;p /x *(&amp;amp;i+3)        -----&amp;gt; 函数参数&lt;p&gt;&lt;br&gt;以下完整代码如下：&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;&lt;p&gt;int func(int a)&lt;br&gt;{&lt;br&gt;    int i = a;&lt;br&gt;    *(&amp;amp;i+2) = *(&amp;amp;i+2)+7;  /* 0x080483eb -0x080483e4 = 0x7 */&lt;br&gt;    return i;&lt;br&gt;}&lt;p&gt;int main()&lt;br&gt;{&lt;br&gt;    int i = 2;&lt;br&gt;    func(i);&lt;br&gt;    i = 1;&lt;br&gt;    printf(&amp;quot;i=%d\n&amp;quot;, i);&lt;br&gt;    return 0;&lt;br&gt;}&lt;p&gt;&lt;br&gt;注：以上代码均在x86, Linux 2.6.34, gcc 4.2.3的环境中调试运行。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5222562976351409764?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5222562976351409764/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5222562976351409764' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5222562976351409764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5222562976351409764'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/09/linux.html' title='Linux 平台下函数调用的堆栈分析'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4027013508413682146</id><published>2010-08-20T14:13:00.001+08:00</published><updated>2010-08-20T14:13:35.761+08:00</updated><title type='text'>常见协议的报文格式</title><content type='html'>/*&lt;br&gt;* TCP/IP 协议类型&lt;br&gt;*/&lt;br&gt;#define IPPROTO_IP        0              // IP&lt;br&gt;#define IPPROTO_ICMP    1              // ICMP&lt;br&gt;#define IPPROTO_TCP        6              // TCP&lt;br&gt;#define IPPROTO_UDP        17             // UDP&lt;p&gt;/*&lt;br&gt;* 其它定义&lt;br&gt;*/&lt;br&gt;#define ETH_ALEN       6              // 以太网地址大小&lt;br&gt;#define ETH_HLEN       14             // 以太网头部大小&lt;br&gt;#define ETH_DATA_LEN   1500           // 最大帧负载数据大小&lt;br&gt;#define ETH_FRAME_LEN  1514           // 最大帧大小，头部+负载数据&lt;p&gt;/*&lt;br&gt; * 常见协议定义&lt;br&gt; */&lt;p&gt;/*&lt;br&gt;* 14字节的以太网包头&lt;br&gt;*/&lt;br&gt;typedef struct _ETHDR&lt;br&gt;{&lt;br&gt;    UCHAR    eh_dst[ETH_ALEN];            // 目的MAC地址&lt;br&gt;    UCHAR    eh_src[ETH_ALEN];            // 源MAC地址&lt;br&gt;    USHORT    eh_type;                    //&lt;br&gt;下层协议类型，如IP（ETHERTYPE_IP）、ARP（ETHERTYPE_ARP）等&lt;br&gt;} ETHDR, *PETHDR;&lt;p&gt;/*&lt;br&gt;* 28字节的ARP头&lt;br&gt;*/&lt;br&gt;typedef struct _ARPHDR&lt;br&gt;{&lt;br&gt;    USHORT    ar_hrd;                //    硬件地址类型，以太网中为ARPHRD_ETHER&lt;br&gt;    USHORT    ar_pro;                //  协议地址类型，ETHERTYPE_IP&lt;br&gt;    UCHAR    ar_hln;                //    硬件地址长度，MAC地址的长度为6&lt;br&gt;    UCHAR    ar_pln;                //    协议地址长度，IP地址的长度为4&lt;br&gt;    USHORT    ar_op;                //&lt;br&gt;ARP操作代码，ARPOP_REQUEST为请求，ARPOP_REPLY为响应&lt;br&gt;    UCHAR    ar_sha[ETH_ALEN];    //    源MAC地址&lt;br&gt;    ULONG    ar_sip;                //    源IP地址&lt;br&gt;    UCHAR    ar_tha[ETH_ALEN];    //    目的MAC地址&lt;br&gt;    ULONG    ar_tip;                //    目的IP地址&lt;br&gt;} ARPHDR, *PARPHDR;&lt;p&gt;/*&lt;br&gt;* 20字节的IP头&lt;br&gt;*/&lt;br&gt;typedef struct _IPHDR&lt;br&gt;{&lt;br&gt;    UCHAR    h_lenver;            // 版本号和头长度（各占4位）&lt;br&gt;    UCHAR    tos;                // 服务类型&lt;br&gt;    USHORT    total_len;            // 封包总长度，即整个IP报的长度&lt;br&gt;    USHORT    ident;                // 封包标识，惟一标识发送的每一个数据报&lt;br&gt;    USHORT    frag_and_flags;        // 标志&lt;br&gt;    UCHAR    ttl;                // 生存时间，就是TTL&lt;br&gt;    UCHAR    protocol;            // 协议，可能是TCP、UDP、ICMP等&lt;br&gt;    USHORT    checksum;            // 校验和&lt;br&gt;    ULONG    saddr;                // 源IP地址&lt;br&gt;    ULONG    daddr;                // 目标IP地址&lt;br&gt;} IPHDR, *PIPHDR;&lt;p&gt;/*&lt;br&gt;* 20字节的TCP头&lt;br&gt;*/&lt;br&gt;typedef struct _TCPHDR&lt;br&gt;{&lt;br&gt;    USHORT    srceport;            // 16位源端口号&lt;br&gt;    USHORT    dstport;            // 16位目的端口号&lt;br&gt;    ULONG    seq;                // 32位序列号&lt;br&gt;    ULONG    ack;                // 32位确认号&lt;br&gt;    UCHAR    dataoffset;            // 高4位表示数据偏移&lt;br&gt;    UCHAR    flags;                // 6位标志位&lt;br&gt;    //FIN - 0x01&lt;br&gt;    //SYN - 0x02&lt;br&gt;    //RST - 0x04&lt;br&gt;    //PSH - 0x08&lt;br&gt;    //ACK - 0x10&lt;br&gt;    //URG - 0x20&lt;br&gt;    //ACE - 0x40&lt;br&gt;    //CWR - 0x80&lt;p&gt;    USHORT    window;                // 16位窗口大小&lt;br&gt;    USHORT    checksum;            // 16位校验和&lt;br&gt;    USHORT    urgptr;                // 16位紧急数据偏移量&lt;br&gt;} TCPHDR, *PTCPHDR;&lt;p&gt;/*&lt;br&gt;* 伪TCP头，计算校验和时使用&lt;br&gt;*/&lt;br&gt;typedef struct _PSDTCPHDR&lt;br&gt;{&lt;br&gt;    ULONG    saddr;&lt;br&gt;    ULONG    daddr;&lt;br&gt;    char    mbz;&lt;br&gt;    char    ptcl;&lt;br&gt;    USHORT    tcpl;&lt;br&gt;} PSDTCPHDR, *PPSDTCPHDR;&lt;p&gt;/*&lt;br&gt;* 8字节的UDP头&lt;br&gt;*/&lt;br&gt;typedef struct _UDPHDR&lt;br&gt;{&lt;br&gt;    USHORT    srcport;            // 源端口号&lt;br&gt;    USHORT    dstport;            // 目的端口号&lt;br&gt;    USHORT    len;                // 封包长度&lt;br&gt;    USHORT    checksum;            // 校验和&lt;br&gt;} UDPHDR, *PUDPHDR;&lt;p&gt;/*&lt;br&gt;*伪UDP头，计算校验和时使用&lt;br&gt;*/&lt;br&gt;typedef struct _PSDUDPHDR&lt;br&gt;{&lt;br&gt;    ULONG    saddr;&lt;br&gt;    ULONG    daddr;&lt;br&gt;    char    mbz;&lt;br&gt;    char    ptcl;&lt;br&gt;    USHORT    udpl;&lt;br&gt;} PSDUDPHDR, *PPSDUDPHDR;&lt;p&gt;/*&lt;br&gt;* 12字节的ICMP头&lt;br&gt;*/&lt;br&gt;typedef struct _ICMPHDR&lt;br&gt;{&lt;br&gt;    UCHAR   type;                //类型&lt;br&gt;    UCHAR   code;                //代码&lt;br&gt;    USHORT  checksum;            //校验和&lt;br&gt;    USHORT  id;                    //标识符&lt;br&gt;    USHORT  sequence;            //序列号&lt;br&gt;    ULONG   timestamp;            //时间戳&lt;br&gt;} ICMPHDR, *PICMPHDR;&lt;p&gt;/*&lt;br&gt;* 6字节的PPPOE头+2字节协议&lt;br&gt;*/&lt;br&gt;typedef struct _PPPOEHDR&lt;br&gt;{&lt;br&gt;    UCHAR    ver_type;            //版本+类型 一般为0x11&lt;br&gt;    UCHAR    code;                //编码&lt;br&gt;    USHORT    sessionid;            //session id&lt;br&gt;    USHORT    len;                //长度&lt;br&gt;    USHORT    protocol;            //协议&lt;br&gt;} PPPOEHDR, *PPPPOEHDR;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4027013508413682146?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4027013508413682146/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4027013508413682146' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4027013508413682146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4027013508413682146'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/08/blog-post.html' title='常见协议的报文格式'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-779197583538213443</id><published>2010-05-19T15:41:00.000+08:00</published><updated>2010-05-19T15:42:00.470+08:00</updated><title type='text'>时钟的指针</title><content type='html'>&lt;div class="teebody"&gt;&lt;p&gt;几个关于时钟的问题：&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;随便给你一个时间，比如9点25分，如何计算时针、分针之间的角度？&lt;/li&gt;&lt;li&gt;在24小时之中，时钟的时针、分针和秒针完全重合在一起的时候有几次？都分别是什么时间？你怎样算出来的？&lt;/li&gt;&lt;li&gt;有时候时针分针互换后合理的时间(比如12:00)，但有时候不行(比如3:00)，24小时中有多少次可以互换的机会？&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;思路：&lt;br&gt;&lt;br&gt;分针一分钟转过的角度为 360/60 = 6&lt;br&gt;时针一小时转过的角度为 360/12 = 30&lt;br&gt; 时针一分钟转过的角度为 360/12/60 = 0.5&lt;br&gt;x时y分，时针与分针之间的夹角为 |x*30 + y*0.5 - y*6|&lt;br&gt;&lt;br&gt;&lt;br&gt;3次或2次,或者一次,分别为时钟的12点和24点出现&lt;br&gt; 假设时针的角速度是ω（ω=π/6每小时），则分针的角速度为12ω，秒针的角速度为72ω。 &lt;br&gt; 分针与时针再次重合的时间为t，则有12ωt-ωt=2π，t=12/11小时，换算成时分秒为1小时5分27.3秒，显然秒针不与时针分针重合，同样可以算出其它10次分针与时针重合时秒针都不能与它们重合。只有在正12点和24点时才会重合。&amp;nbsp;  &lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-779197583538213443?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/779197583538213443/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=779197583538213443' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/779197583538213443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/779197583538213443'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/05/blog-post.html' title='时钟的指针'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5915583488618523415</id><published>2010-04-01T16:00:00.001+08:00</published><updated>2010-04-01T16:00:15.849+08:00</updated><title type='text'>[GNOME]OAFIID:Gnome_ClockApplet</title><content type='html'>前几天遇到一个奇怪的问题，Gnome-panel 上显示时间的Clock 不见了，我从&amp;quot;Add to Panel&amp;quot;重新添加Clock 则报错：&amp;quot;OAFIID:Gnome_ClockApplet&amp;quot;，我用的是Gentoo，自然想当然的运行revdep-rebuild，但rebuild 之&lt;br&gt;后问题依旧，上网搜了一下，也没有具体给出解决办法。于是搜ClockApplet,终于找到Clock 程序的配置文件&lt;br&gt; ：/usr/lib/bonobo/servers/GNOME_ClockApplet_Factory.server，打开后，第三行指出了具体的库文件：location=&amp;quot;/usr/lib/gnome-panel/libclock-applet.so&amp;quot;，这下就好办了。&lt;br&gt;&lt;br&gt;ldd /usr/lib/gnome-panel/libclock-applet.so&lt;br&gt;&lt;br&gt;果然，大部分链接都没问题，但出现以下结果：&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; libssl3.so.12 =&amp;gt; not found&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; libsmime3.so.12 =&amp;gt; not found&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; libnssutil3.so.12 =&amp;gt; not found&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; libnss3.so.12 =&amp;gt; not found&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;然后运行： qfile libssl3.so.12 libsmime3.so.12 libnssutil3.so.12 libnss3.so.12&lt;br&gt; &lt;br&gt;dev-libs/nss (/usr/lib/libsmime3.so.12)&lt;br&gt;dev-libs/nss (/usr/lib/libnssutil3.so.12)&lt;br&gt;dev-libs/nss (/usr/lib/libnss3.so.12)&lt;br&gt;dev-libs/nss (/usr/lib/libssl3.so.12)&lt;br&gt;&lt;br&gt;这样就找出了有问题的库文件对应的包名称，赶紧 emerge -q dev-libs/nss 吧，完成之后再次添加Clock 程&lt;br&gt; 序就正常了 :-)&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5915583488618523415?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5915583488618523415/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5915583488618523415' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5915583488618523415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5915583488618523415'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/04/gnomeoafiidgnomeclockapplet.html' title='[GNOME]OAFIID:Gnome_ClockApplet'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1641578452346868091</id><published>2010-03-26T11:17:00.001+08:00</published><updated>2010-03-26T11:17:02.316+08:00</updated><title type='text'>PHY 与 MAC</title><content type='html'>网卡工作在&lt;a href="http://en.wikipedia.org/wiki/OSI_model" title="OSI model"&gt;OSI  model&lt;/a&gt; 的最后两层，物理层(&lt;a href="http://en.wikipedia.org/wiki/Physical_Layer" title="Physical  Layer"&gt;Physical Layer&lt;/a&gt; )和数据链路层(&lt;a href="http://en.wikipedia.org/wiki/Data_Link_Layer" title="Data Link  Layer"&gt;Data Link Layer&lt;/a&gt;)。&lt;br&gt;&lt;br&gt;物理层的芯片称之为PHY。物理层定义了数据传送 与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等，并向数据链路层设备提供标准接口。  &lt;p style="font-family: SimSun,宋体,MS Song,serif;"&gt;以太网卡中数据链路层的芯片称之为MAC控制器，  数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。&lt;/p&gt;&lt;p style="font-family: SimSun,宋体,MS Song,serif;"&gt;MAC和PHY之间的关系是PCI总线接MAC总 线，MAC接PHY，PHY接网线（当然也不是直接接上的，还有一个变压装置），很多网卡的这两个部分是做到一起的。&lt;br&gt; &lt;/p&gt;&lt;p style="font-family: SimSun,宋体,MS Song,serif;"&gt;PHY和MAC之间互连的界面是IEEE定义的标准：MII/GigaMII(Media Independed  Interfade，介质独立界面)。MII界面传递了网络的所有数据和数据的控制。&lt;/p&gt;&lt;p style="font-family: SimSun,宋体,MS Song,serif;"&gt;参考：&lt;a href="http://en.wikipedia.org/wiki/PHY_%28chip%29"&gt;http://en.wikipedia.org/wiki/PHY_%28chip%29&lt;/a&gt;&lt;br&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1641578452346868091?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1641578452346868091/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1641578452346868091' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1641578452346868091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1641578452346868091'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/03/phy-mac.html' title='PHY 与 MAC'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-519777941343637642</id><published>2010-03-09T10:02:00.001+08:00</published><updated>2010-03-09T10:02:24.963+08:00</updated><title type='text'>公元纪年换算成花甲纪年</title><content type='html'>老祖宗的东西，别忘了。&lt;br&gt;&lt;br&gt;　　公元纪年与花甲纪年之间有着固定的对应关系，根据其对应关系可以发现一定规律，找出换算方法。&lt;br&gt; 花甲由十天干和十二地支两部分组成，那么我们换算的过程也分两步。在此之前请先记住一个中国人 很敏感的数字"4"。&lt;br&gt; 　　&lt;br&gt;第一步：确定天干。找出将换算成花甲纪年的公元年份的尾数，如1982年尾数为2，1984年 尾数为4。那么尾数&lt;br&gt; 　　有0至9共十个数字，正好和天干数目相等。将4与甲对应、5与乙对应、6与丙对应……0与庚对 应、1与辛对应、&lt;br&gt; 　　2与壬对应、3与癸对应，可确定天干。&lt;br&gt; &lt;br&gt;第二步：确定地支。我们将公元年份除以12取余数，可得出0至11共十二个数字，正好与地支数 目相等。将4与&lt;br&gt; 　　子对应、5与丑对应、6与寅对应……10与午对应、11与未对应、0与申对应、1与酉对应、2 与戌对应、3与亥对&lt;br&gt; 　　应，可确定地支。&lt;br&gt; 　　如1982年尾数为2，除以12余2，为壬戌年；1984年尾数为4，除以12余4，为甲子 年；2038年尾数为8，除以12余&lt;br&gt; 　　10，为戊午年。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-519777941343637642?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/519777941343637642/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=519777941343637642' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/519777941343637642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/519777941343637642'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/03/blog-post.html' title='公元纪年换算成花甲纪年'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8029520551711948571</id><published>2010-03-02T09:58:00.001+08:00</published><updated>2010-03-02T09:58:40.685+08:00</updated><title type='text'>udev 升级到151之惊魂记</title><content type='html'>昨天我的笔记本升级系统，顺便把udev 升级到151，重启机器之后hda 设备找不到了，ls /dev/hd* 也没东西，顿时一惊，硬盘没mount 上来，我啥也做不了啊，怎么办？心想应该是udev-151搞的鬼，于是在另外一台机器上搜索udev-151的ChangeLog， 才知道udev-151 remove remaining support for CONFIG_SYSFS_DEPRECATED，再检查我的笔记本的kernel config 中CONFIG_SYSFS_DEPRECATED 选项，居然还是选中的，赶紧去掉重新编译，可是 boot 分区没办法mount 啊，怎么把这个编译出来的新kernel 复制过去呢？ 找到一张linux 启动光盘，然后mount 这个boot 分区不就OK 了？我正是这么做的，之后就很顺利了，现在笔记本又启动正常了 :D&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8029520551711948571?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8029520551711948571/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8029520551711948571' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8029520551711948571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8029520551711948571'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/03/udev-151.html' title='udev 升级到151之惊魂记'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6969291227144120290</id><published>2010-02-10T16:54:00.001+08:00</published><updated>2010-02-10T16:54:27.881+08:00</updated><title type='text'>emerge error: "libGL.la" No such file or directory</title><content type='html'>今天系统sync 之后发行ibus 和ibus-pinyin都有更新了，于是开始更新ibus，谁知编译到一半说找不到libGL.la，这是哪个包里面的呢？&lt;br&gt;运行：qfile libGL.so&lt;br&gt;结果：media-libs/mesa (/usr/lib/opengl/xorg-x11/lib/libGL.so)&lt;br&gt;&lt;br&gt;于是重新emerge -q media-libs/mesa，结果还是不行，在网上搜了一圈没解决问题，于是到mesa 的portage 目录一看，该 media-libs/mesa/files/lib 下面有：&lt;br&gt; libGL.la和 libGLU.la 两个文件，原来libGL.la 这个文件藏 在这儿，唉！～&lt;br&gt;&lt;br&gt;估计是安装media-libs/mesa的脚本出问题了，忘记复制libGL.la 到/usr/lib/下面了。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6969291227144120290?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6969291227144120290/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6969291227144120290' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6969291227144120290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6969291227144120290'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/02/emerge-error-libglla-no-such-file-or.html' title='emerge error: &quot;libGL.la&quot; No such file or directory'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5469653916605546872</id><published>2010-01-22T15:36:00.001+08:00</published><updated>2010-01-22T15:36:21.760+08:00</updated><title type='text'>无线网络安全问题</title><content type='html'>今天在网上搜wpa_supplicant 以及 AP 的加密方式等资料，发现网上有很多讲破解无线网络的文档，其中提到了破解需要的工具，这里记录一下：&lt;br&gt;&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;&lt;br&gt;&lt;/font&gt;&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;系统: BackTrack&lt;br&gt; &lt;/font&gt;&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;网卡:卡王(台湾Wifly-City的产品)&lt;br&gt;&lt;/font&gt;&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;AP: SMC-WTVG(选用这款的原因是便携,而且功能是非常强大，结合无线&lt;a href="javascript:;" onclick="javascript:tagshow(event, &amp;#39;%C2%B7%D3%C9%C6%F7&amp;#39;);" target="_self"&gt;&lt;u&gt;&lt;strong&gt;路由器&lt;/strong&gt;&lt;/u&gt;&lt;/a&gt;（54M）、VoIP网络电话、无线AP、客户端、无线网卡等.)&lt;br&gt; &lt;/font&gt;&lt;br&gt;我还是第一次听说&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;BackTrack 系统，引用 &lt;/font&gt;&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;wikipedia(&lt;/font&gt;&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;&lt;a href="http://en.wikipedia.org/wiki/BackTrack)"&gt;http://en.wikipedia.org/wiki/BackTrack)&lt;/a&gt;的说明：&lt;br&gt; &lt;br&gt;&lt;/font&gt;&lt;b&gt;BackTrack&lt;/b&gt; is a &lt;a href="http://en.wikipedia.org/wiki/Linux_distribution" title="Linux distribution"&gt;Linux distribution&lt;/a&gt; distributed as a &lt;a href="http://en.wikipedia.org/wiki/Live_CD" title="Live CD"&gt;Live CD&lt;/a&gt; which resulted from the merger of &lt;a href="http://distrowatch.com/table.php?distribution=whoppix" class="external text" rel="nofollow"&gt;WHAX&lt;/a&gt; (previously Whoppix) and the &lt;a href="http://en.wikipedia.org/wiki/Auditor_Security_Collection" title="Auditor Security Collection" class="mw-redirect"&gt;Auditor Security Collection&lt;/a&gt;, which is used for &lt;a href="http://en.wikipedia.org/wiki/Penetration_test" title="Penetration test"&gt;penetration testing&lt;/a&gt;.&lt;br&gt; &lt;a href="http://en.wikipedia.org/wiki/BackTrack#cite_note-3"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;虽然&lt;font id="font_word" style="font-size: 14px; font-family: 宋体,Verdana,Arial,Helvetica,sans-serif;"&gt;BackTrack 是Linux 发行版，但是它最大的区别就是它是 &lt;/font&gt;Monolithic kernel，翻译成中文是单内核，有空一定要装装看。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5469653916605546872?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5469653916605546872/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5469653916605546872' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5469653916605546872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5469653916605546872'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/01/blog-post_22.html' title='无线网络安全问题'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7355067792149053670</id><published>2010-01-22T13:44:00.001+08:00</published><updated>2010-01-22T13:44:26.028+08:00</updated><title type='text'>交叉编译 openssl</title><content type='html'>前段时间做过 WiFi的项目，现在功能基本正常，但是目前只支持WEP，对 WPA1/WPA2等不支持，所以需要考虑后续改进的问题。&lt;br&gt;对于 WPA1/WPA2，在Linux下一般通过wpa_supplicant 来连接AP，而wpa_supplicant 认证过程使用了openssl 的库，因此需要先交叉编译openssl，这里做个笔记 :)&lt;br&gt;&lt;br&gt;./Configure --prefix=../openssl-arm os/compiler:arm-none-linux-gnueabi-gcc&lt;br&gt; &lt;br&gt;make 编译之后如果直接make install 的话会报错：&lt;br&gt;making install in crypto...&lt;br&gt;make[1]: Entering directory `/wireless/openssl-0.9.8l/crypto&amp;#39;&lt;br&gt;cp: cannot create regular file `../openssl-arm/include/openssl/crypto.h&amp;#39;: No such file or directory&lt;br&gt; chmod: cannot access `../openssl-arm/include/openssl/crypto.h&amp;#39;: No such file or directory&lt;br&gt;cp: cannot create regular file `../openssl-arm/include/openssl/tmdiff.h&amp;#39;: No such file or directory&lt;br&gt;...&lt;br&gt;&lt;br&gt;所以我没有 install，反正编译wpa_supplicant 时只需要openssl 的 libssl.a、 libcrypto.a以及 include/openssl/ 下的头文件&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7355067792149053670?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7355067792149053670/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7355067792149053670' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7355067792149053670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7355067792149053670'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/01/openssl.html' title='交叉编译 openssl'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8375469787404961005</id><published>2010-01-18T11:59:00.001+08:00</published><updated>2010-01-18T11:59:33.329+08:00</updated><title type='text'>打野战</title><content type='html'>周末去上庄那边的真人CS部落玩了大半天的真人CS，俗称打野战， 同去的有将近20个人，没想到的是居然来了好几位美女，我们分了两队，玩了两个地图，我第一次玩真人CS，挺海皮的，有位哥们挺猛的，穿的迷彩裤都被他弄成开档了，然后他穿着开裆裤继续战斗 :D 另外，发现狙击枪不太好用，还不如那个可以连发的冲锋枪，下次有机会再去，呵呵&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8375469787404961005?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8375469787404961005/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8375469787404961005' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8375469787404961005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8375469787404961005'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/01/blog-post.html' title='打野战'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-2343574572825388980</id><published>2010-01-08T11:09:00.001+08:00</published><updated>2010-01-08T11:09:43.393+08:00</updated><title type='text'>得到原始shortener url</title><content type='html'>接上一个主题，说说还原shortener url之后的url。现在有很多shortener url的网站，比如&lt;a href="http://goo.gl"&gt;goo.gl&lt;/a&gt;, &lt;a href="http://bit.ly"&gt;bit.ly&lt;/a&gt;等等，如果只是想知道原始的url，则这个网站不错&lt;a href="http://untr.im/" target="_blank"&gt;http://untr.im&lt;/a&gt;，这里还有一个小脚本：&lt;br&gt; &lt;br&gt;#!/bin/bash&lt;br&gt;#filename: getfullurl.sh&lt;br&gt;URL=$1&lt;br&gt;if test &amp;quot;x$URL&amp;quot; == &amp;quot;&amp;quot;; then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;br&gt;fi&lt;br&gt;curl -q -d &amp;quot;url=$URL&amp;quot; &lt;a href="http://untr.im/api/ajax/api"&gt;http://untr.im/api/ajax/api&lt;/a&gt; | awk -F &amp;#39;href=&amp;quot;&amp;#39; &amp;#39;{print $3}&amp;#39; | awk -F &amp;#39;&amp;quot; rel=&amp;quot;&amp;#39; &amp;#39;{print $1}&amp;#39;&lt;br&gt; &lt;br&gt;运行：&lt;br&gt;sh getfullurl.sh &lt;a href="http://goo.gl/rz2O"&gt;http://goo.gl/rz2O&lt;/a&gt;&lt;br&gt;% Total&amp;nbsp;&amp;nbsp;&amp;nbsp; % Received % Xferd&amp;nbsp; Average Speed&amp;nbsp;&amp;nbsp; Time&amp;nbsp;&amp;nbsp;&amp;nbsp; Time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time&amp;nbsp; Current&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dload&amp;nbsp; Upload&amp;nbsp;&amp;nbsp; Total&amp;nbsp;&amp;nbsp; Spent&amp;nbsp;&amp;nbsp;&amp;nbsp; Left&amp;nbsp; Speed&lt;br&gt; 192&amp;nbsp;&amp;nbsp; 170&amp;nbsp; 170&amp;nbsp;&amp;nbsp; 170&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 56&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp; 0:00:03&amp;nbsp; 0:00:03 --:--:--&amp;nbsp;&amp;nbsp;&amp;nbsp; 81&lt;br&gt;&lt;a href="http://wiki.thc.org/gsm"&gt;http://wiki.thc.org/gsm&lt;/a&gt;&lt;br&gt;&lt;br&gt;最好得到 &lt;a href="http://wiki.thc.org/gsm"&gt;http://wiki.thc.org/gsm&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-2343574572825388980?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/2343574572825388980/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=2343574572825388980' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2343574572825388980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2343574572825388980'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/01/shortener-url.html' title='得到原始shortener url'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-9094498706912283838</id><published>2010-01-08T10:48:00.001+08:00</published><updated>2010-01-08T10:48:20.190+08:00</updated><title type='text'>Use the Google URL Shortener API with Python</title><content type='html'>原文：&lt;a href="http://d.hatena.ne.jp/LaclefYoshi/20091216/1260891200"&gt;http://d.hatena.ne.jp/LaclefYoshi/20091216/1260891200&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://goo.gl"&gt;http://goo.gl&lt;/a&gt; 是 Google的URL Shortener 服务，类似的有很多，比如  &lt;a href="http://tinyurl.com" target="_blank"&gt;http://tinyurl.com&lt;/a&gt;，不过Google URL Shortener没有对外开放，目前只能通过 Google toolbar 和chromium的扩展程序(&lt;a href="http://goo.gl"&gt;goo.gl&lt;/a&gt; url shortener)才能使用，但是这位日本的朋友通过分析Google toolbar的xpi中js代码，写出了这段python代码，比较佩服他啊，下面贴出他的代码，其中做了一个小小的改动，使得程序可以接收参数。&lt;br&gt; &lt;br&gt;#!/usr/bin/python&lt;br&gt;&amp;quot;&amp;quot;&amp;quot; Google URL Shortener&lt;br&gt;&amp;nbsp;Usage: python &lt;a href="http://goo.gl"&gt;goo.gl&lt;/a&gt; URL&amp;quot;&amp;quot;&amp;quot;&lt;br&gt;&lt;br&gt;# import struct&lt;br&gt;import urllib&lt;br&gt;import simplejson&lt;br&gt;&lt;br&gt;def usage():&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; print __doc__&lt;br&gt;&lt;br&gt;def _c(vals):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; l = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for val in vals:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l += val &amp;amp; 4294967295&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return l&lt;br&gt;&lt;br&gt;def _d(l):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if l &amp;lt;=&amp;nbsp; 0:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l += 4294967296&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m = str(l) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; o = 0&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; n = False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for char in m[::-1]:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q = int(char)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if n:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q *= 2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o += q / 10 + q % 10 # Math.floor(q / 10) + q % 10&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o += q&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n = not(n)&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; m = o % 10&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; o = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if m != 0:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o = 10 - m&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(str(l)) % 2 == 1:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if o % 2 == 1:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o += 9&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o /= 2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return str(o) + str(l)&lt;br&gt;&lt;br&gt;def _e(uri):&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; m = 5381&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for char in uri:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # m = _c([m &amp;lt;&amp;lt; 5, m, struct.unpack(&amp;quot;B&amp;quot;, char)[0]])&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m = _c([m &amp;lt;&amp;lt; 5, m, ord(char)])&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return m&lt;br&gt;&lt;br&gt;def _f(uri):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for char in uri:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # m = _c([struct.unpack(&amp;quot;B&amp;quot;, char)[0], m &amp;lt;&amp;lt; 6, m &amp;lt;&amp;lt; 16, -1 * m])&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m = _c([ord(char), m &amp;lt;&amp;lt; 6, m &amp;lt;&amp;lt; 16, -1 * m])&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return m&lt;br&gt;&lt;br&gt;def _make_auth_token(uri):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = _e(uri)&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; i = i &amp;gt;&amp;gt; 2 &amp;amp; 1073741823&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = i &amp;gt;&amp;gt; 4 &amp;amp; 67108800 | i &amp;amp; 63&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = i &amp;gt;&amp;gt; 4 &amp;amp; 4193280 | i &amp;amp; 1023&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = i &amp;gt;&amp;gt; 4 &amp;amp; 245760 | i &amp;amp; 16383&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h = _f(uri)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; k = (i &amp;gt;&amp;gt; 2 &amp;amp; 15) &amp;lt;&amp;lt; 4 | h &amp;amp; 15&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; k |= (i &amp;gt;&amp;gt; 6 &amp;amp; 15) &amp;lt;&amp;lt; 12 | (h &amp;gt;&amp;gt; 8 &amp;amp; 15) &amp;lt;&amp;lt; 8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; k |= (i &amp;gt;&amp;gt; 10 &amp;amp; 15) &amp;lt;&amp;lt; 20 | (h &amp;gt;&amp;gt; 16 &amp;amp; 15) &amp;lt;&amp;lt; 16&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; k |= (i &amp;gt;&amp;gt; 14 &amp;amp; 15) &amp;lt;&amp;lt; 28 | (h &amp;gt;&amp;gt; 24 &amp;amp; 15) &amp;lt;&amp;lt; 24&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; j = &amp;quot;7&amp;quot; + _d(k)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return j&lt;br&gt;&lt;br&gt;def get_short_url(uri, user):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if user is None:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user = &amp;#39;&lt;a href="mailto:toolbar@google.com"&gt;toolbar@google.com&lt;/a&gt;&amp;#39;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; token = _make_auth_token(uri)&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; opt = &amp;#39;user=&amp;#39;+user+&amp;#39;&amp;amp;&amp;#39;+urllib.urlencode({&amp;#39;url&amp;#39;:uri})+&amp;#39;&amp;amp;auth_token=&amp;#39;+token&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # print opt&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ggl_url = &amp;#39;&lt;a href="http://goo.gl/api/url"&gt;http://goo.gl/api/url&lt;/a&gt;&amp;#39;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; res = urllib.urlopen(ggl_url, opt)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # print res.read()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; short_url =&amp;nbsp; simplejson.loads(res.read())[&amp;#39;short_url&amp;#39;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return short_url&lt;br&gt;&lt;br&gt;import sys, os&lt;br&gt;if __name__ == &amp;quot;__main__&amp;quot;:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; #print get_short_url(&amp;quot;&lt;a href="http://www.aida.t.u-tokyo.ac.jp/"&gt;http://www.aida.t.u-tokyo.ac.jp/&lt;/a&gt;&amp;quot;, None)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(sys.argv) == 2:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print get_short_url(sys.argv[1], None)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; usage()&lt;br&gt; &lt;a href="http://tinyurl.com" target="_blank"&gt;&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-9094498706912283838?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/9094498706912283838/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=9094498706912283838' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/9094498706912283838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/9094498706912283838'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2010/01/use-google-url-shortener-api-with.html' title='Use the Google URL Shortener API with Python'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3939179501435405421</id><published>2009-11-18T23:33:00.002+08:00</published><updated>2009-11-18T23:38:00.108+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weather， 天气'/><title type='text'>破墙发帖</title><content type='html'>如今在blogger发文比较麻烦，再加有了twitter，想说的就立即发到推特上了，把这里荒废了啊。&lt;br /&gt;&lt;br /&gt;今年的天气很不寻常啊，南方破天荒下大雪，北方也提前下雪，诡异的一年。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3939179501435405421?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3939179501435405421/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3939179501435405421' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3939179501435405421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3939179501435405421'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/11/blog-post.html' title='破墙发帖'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1557344068440363890</id><published>2009-07-23T20:01:00.001+08:00</published><updated>2009-07-23T20:01:37.537+08:00</updated><title type='text'>xfce desktop 起不来</title><content type='html'>最近升级系统之后桌面没了，发现 xfdesktop 没有起来，于是手动运行，但报以下错误：&lt;br&gt;xfdesktop[5225]: starting up&lt;br&gt;process 5225: arguments to dbus_connection_send_with_reply_and_block() were incorrect, assertion &amp;quot;(error) == NULL || !dbus_error_is_set ((error))&amp;quot; failed in file dbus-connection.c line 3301.&lt;br&gt; This is normally a bug in some application using the D-Bus library.&lt;br&gt;&amp;nbsp; D-Bus not built with -rdynamic so unable to print a backtrace&lt;br&gt;&lt;br&gt;在网上搜了一圈，发现需要添加 /etc/dbus-1/system.d/nasz-user.conf：&lt;br&gt;&lt;br&gt;&amp;lt;!DOCTYPE busconfig PUBLIC &lt;br&gt; &amp;nbsp;&amp;quot;-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN&amp;quot; &lt;br&gt; &amp;nbsp;&amp;quot;&lt;a href="http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"&gt;http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd&lt;/a&gt;&amp;quot;&amp;gt; &lt;br&gt; &amp;lt;busconfig&amp;gt; &lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;policy user=&amp;quot;dev&amp;quot;&amp;gt; &lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;allow send_destination=&amp;quot;org.freedesktop.Hal&amp;quot; &lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_interface=&amp;quot;org.freedesktop.Hal.Device&amp;quot;/&amp;gt; &lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;allow send_destination=&amp;quot;org.freedesktop.Hal&amp;quot; &lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_interface=&amp;quot;org.freedesktop.Hal.Manager&amp;quot;/&amp;gt; &lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/policy&amp;gt; &lt;br&gt; &amp;lt;/busconfig&amp;gt;&lt;br&gt;&lt;br&gt;其中 dev 改为实际用户名，然后重启 dbus&lt;br&gt;/etc/init.d/dbus restart&lt;br&gt;&lt;br&gt;再运行 xfdesktop &amp;amp; 即可。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1557344068440363890?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1557344068440363890/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1557344068440363890' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1557344068440363890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1557344068440363890'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/07/xfce-desktop.html' title='xfce desktop 起不来'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-2147730270208059554</id><published>2009-07-22T09:16:00.001+08:00</published><updated>2009-07-22T09:16:38.848+08:00</updated><title type='text'>eclipse</title><content type='html'>300年一遇的日全食，在北京只能看到日偏食，更人遗憾的是，北京今天是阴天，天空灰蒙蒙的，根本看不见&lt;br&gt;&lt;br&gt;北京日偏食，初亏：8:25:09；食甚：9:32:10；复圆：10:44:21 &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-2147730270208059554?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/2147730270208059554/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=2147730270208059554' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2147730270208059554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2147730270208059554'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/07/eclipse.html' title='eclipse'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5938375901240091888</id><published>2009-07-13T11:43:00.001+08:00</published><updated>2009-07-13T11:43:06.131+08:00</updated><title type='text'>在 Gmail 中添加 Twitter Gadget</title><content type='html'>Twitter 现在已经被封锁了，但如果之前在 Gmail 有 Twitter Gadget 好像可以继续使用哦 :-)，那么如果在 Gmail 中添加 Twitter Gadget呢?&lt;br&gt;&lt;br&gt;1) 让 Gmail 支持 Gadget。进入Gmail Lab，找到  &amp;quot;Add any gadget by URL&amp;quot; 并将它 Enable;&lt;br&gt;2) 点击 Gmail 右上角的 &amp;quot;setting&amp;quot;，选择 &amp;quot;Gadget&amp;quot;;&lt;br&gt; 3) 将 &lt;a href="http://twittergadget.appspot.com/"&gt;Twitter Gadget&lt;/a&gt; address: &lt;a href="http://twittergadget.appspot.com/gadget-gmail.xml"&gt;http://twittergadget.appspot.com/gadget-gmail.xml&lt;/a&gt;(SSL &lt;a href="https://twittergadget.appspot.com/gadget-gmail.xml"&gt;https://twittergadget.appspot.com/gadget-gmail.xml&lt;/a&gt;) 拷贝到地址栏中;&lt;br&gt; &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5938375901240091888?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5938375901240091888/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5938375901240091888' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5938375901240091888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5938375901240091888'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/07/gmail-twitter-gadget.html' title='在 Gmail 中添加 Twitter Gadget'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1434935125989723881</id><published>2009-07-10T10:54:00.001+08:00</published><updated>2009-07-10T10:54:53.768+08:00</updated><title type='text'>唠叨</title><content type='html'>twitter, fanfou, blogger... 仍然还处于被"墙"的状态，郁闷。&lt;br&gt;&lt;br&gt;零玖年，从胡说"不折腾"开始就注定了是不平常的一年，我就不一一列出来了，虽然目前网络状况很差，但还有有办法得到这些信息的。&lt;br&gt;&lt;br&gt;身处这样一个年代，平凡的我只希望周围的朋友们能快乐、健康的生活着，也希望自己通过更加努力地工作，早日有一个家。&lt;br&gt;&lt;br&gt;唠叨完了，继续干活 ;-)&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1434935125989723881?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1434935125989723881/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1434935125989723881' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1434935125989723881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1434935125989723881'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/07/blog-post.html' title='唠叨'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8789608656626197646</id><published>2009-06-11T17:05:00.001+08:00</published><updated>2009-06-11T17:05:22.230+08:00</updated><title type='text'>To support QPF font</title><content type='html'>最近比较忙而且blogspot 仍然被封锁中，因此很久没更新了，手头上的任务比较多阿，比如其中一个活儿就是为公司的一款老设备增加QPF 字体的支持，因为使用QPF，能进一步提高UI 的速度并减小占有的资源，现在已经做的差不多了(不然也没空来写这个了:-))。&lt;br&gt;&lt;br&gt;那么什么是 QPF 呢，全称&lt;b&gt; Qt Prerendered Font&lt;/b&gt; ，是用于QT/Embedded下的不可缩放的字体，对于QPF 字体以相同格式的存储，所以在字体显示时，Qt只要读取字体，做相应分 析，然后显示就完成了，这样进一步减少了对RAM 资源的浪费，另外QPF字体是基于UNICODE 编码的，因此具有良好的可移植性。&lt;br&gt;&lt;br&gt;我们定义的字体名称格式为：type-family-style-width-height-charset-encoding1[,encoding2,...]&lt;br&gt;另外QPF 结构的定义为：&lt;br&gt;typedef struct _QPFMETRICS&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char ascent, descent;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; char leftbearing, rightbearing;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char maxwidth;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char leading;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char flags;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char underlinepos;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char underlinewidth;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char reserved3;&lt;br&gt; } QPFMETRICS;&lt;br&gt;&lt;br&gt;typedef struct&lt;br&gt;{&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char font_name [LEN_UNIDEVFONT_NAME + 1];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int height;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int width;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int file_size;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; QPFMETRICS* fm;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; GLYPHTREE* tree;&lt;br&gt;} QPFINFO;&lt;br&gt;&lt;br&gt;对于 QPF 字体就是围绕该结构体进行一系列的操作了。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8789608656626197646?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8789608656626197646/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8789608656626197646' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8789608656626197646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8789608656626197646'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/06/to-support-qpf-font.html' title='To support QPF font'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7807133672233191945</id><published>2009-06-03T23:35:00.001+08:00</published><updated>2009-06-03T23:35:25.253+08:00</updated><title type='text'>What is the nc(netcat)?</title><content type='html'>今天偶然在我们的产品中看到 nc 这个命令，就试了一下，还挺好用，呵呵～&lt;p&gt;最简单的，先在机器A 运行 nc -l -p 4444，再在机器B 运行 nc 192.168.8.112 4444，这样 A 和 B&lt;br&gt;两台机器就建立的连接，可以进行聊天了，功能虽然简单，但由此扩展的功能就比较强大了，比如：&lt;p&gt;(A) nc -l -p 3333 &amp;gt; backup.tar.bz2&lt;p&gt;(B) nc 192.168.8.170 3333 &amp;lt; data.tar.bz2&lt;p&gt;这样就将 B 上的 data.tar.bz2 拷贝到了 A 中。&lt;p&gt;再举一例：&lt;p&gt;(A) nc -l -p 4444 | tar xvf -&lt;p&gt;(B) tar cf - . | nc 192.168.8.112 4444&lt;p&gt;这样就把 B 上的当前目录下所有文件上传到了 A 中。&lt;p&gt;&lt;p&gt;参考：&lt;p&gt;&lt;a href="http://netcat.sourceforge.net/"&gt;http://netcat.sourceforge.net/&lt;/a&gt;&lt;br&gt;&lt;a href="http://en.wikipedia.org/wiki/Netcat"&gt;http://en.wikipedia.org/wiki/Netcat&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7807133672233191945?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7807133672233191945/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7807133672233191945' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7807133672233191945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7807133672233191945'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/06/what-is-ncnetcat.html' title='What is the nc(netcat)?'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4117411868990189167</id><published>2009-05-13T18:56:00.003+08:00</published><updated>2009-05-13T19:07:48.779+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libpcap cross compile arm'/><title type='text'>libpcap cross compile for ARM</title><content type='html'>最近在做局域网内的 Discovery，目前已经做的差不多了，支持的协议有 ICMP,  ARP, NETBIOS 和 SNMP等。Discovery 的功能主要就是扫描局域网内的存在的主机和服务等，也就是发送上述协议的包，然后对返回的包进行分析，其中 ARP 用到了 libpcap库，这里先说一下 libpcap库的交叉编译，我是这么编译的：&lt;br /&gt;&lt;br /&gt;CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar LD=arm-none-linux-gnueabi-ld ac_cv_linux_vers=2 ./configure --host=arm-none-linux-gnu --target=arm-none-linux-gnu --with-pcap=linux&lt;br /&gt;&lt;br /&gt;make&lt;br /&gt;&lt;br /&gt;至于协议的具体实现以后再细说 :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4117411868990189167?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4117411868990189167/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4117411868990189167' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4117411868990189167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4117411868990189167'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/05/libpcap-cross-compile-for-arm.html' title='libpcap cross compile for ARM'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8557866764252648912</id><published>2009-04-21T10:21:00.005+08:00</published><updated>2009-04-21T10:36:28.560+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dBm dB mW'/><title type='text'>dBm 与 mW 转换</title><content type='html'>无线电发射机输出的射频信号，通过电缆输送到天线，由天线以电磁波形式辐射出去。电磁波到达接收地点后，由天线接收下来（仅仅接收很小很小一部分功率），并通过电缆送到无线电接收机。因此在无线网络的工程中，计算发射装置的发射功率与天线的辐射能力非常重要。Tx 是发射（ Transmits ）的简称。无线电波的发射功率是指在给定频段范围内的能量，通常有两种衡量或测量标准：&lt;br /&gt;1、功率（ W ）: 相对1 瓦（ Watt ）的线性水准。例如，WiFi 无线网卡的发射功率通常为0.036W ，或者说36mW 。&lt;br /&gt;2、增益（ dBm ）:相对1 毫瓦（ milliwatt ）的比例水准。例如WiFi 无线网卡的发射增益为15.56dBm 。&lt;br /&gt;&lt;br /&gt;任意功率P(mW) 与xdBm  换算的公式如下：&lt;br /&gt;&lt;br /&gt;   x = 10*lg(P/(1 mW))&lt;br /&gt;&lt;br /&gt;以及&lt;br /&gt;&lt;br /&gt;   P =(1 mW) 10^(x/10)&lt;br /&gt;&lt;br /&gt;例如，1毫瓦(1 mW)换算成dBm 为 0dBm，1瓦(1 Watt)换算成dBm 则为 30dBm。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在“小功率”系统中（例如无线局域网络设备）每个dB 都非常重要，有一个“3 dB 法则“，就是每增加或降低3 dB ，意味着增加一倍或降低一半的功率：&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;36 dBm  4 W&lt;br /&gt;33 dBm  2 W&lt;br /&gt;30 dBm  1 W = 1000 mW&lt;br /&gt;27 dBm  500 mW&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;具体可参考 Wiki：&lt;br /&gt;http://en.wikipedia.org/wiki/DBm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8557866764252648912?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8557866764252648912/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8557866764252648912' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8557866764252648912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8557866764252648912'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/04/dbm-mw.html' title='dBm 与 mW 转换'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-993680854504050752</id><published>2009-04-16T11:35:00.002+08:00</published><updated>2009-04-16T11:40:19.976+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email blog update'/><title type='text'>通过 EMail 更新 Blog?</title><content type='html'>早听说可以通过 Emai 或者更新 Blog，一直没试过，今天突然想起来了就试试看，以后Blog 更新的方式就多样化了 :)&lt;p&gt;这贴发完之后就抓紧干活了，今天把 WiFi 的UI 调整一下，然后基本功能再跑一遍，尽量做的兼容一些，另外为以后客户需求的&amp;quot;折腾&amp;quot;留出空间，这应该必然的&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-993680854504050752?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/993680854504050752/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=993680854504050752' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/993680854504050752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/993680854504050752'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/04/email-blog.html' title='通过 EMail 更新 Blog?'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5222397709078242947</id><published>2009-04-16T10:13:00.006+08:00</published><updated>2009-04-16T10:27:59.778+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wireless wifi Neo FreeRunner'/><title type='text'>继续做 WiFi 项目</title><content type='html'>其他的事情忙的差不多了，继续完善WiFi项目，上次是在 x86 上调试的，这次搬到了 Unit 上，目前只有 rt73 的 driver 可以用，不过使用同样的 iwlist 命令在Unit 与x86 上的输出不一样哦，可能交叉编译时某些 Option没打开?或者驱动的问题? 先凑合调试着，毕竟我对现在的UI 还不满意，我自己用起来都觉得有点费劲:P ，希望能做的专业一些。&lt;br /&gt;&lt;br /&gt;在网上搜了一些资料，比如在Neo FreeRunner 上面的WiFi 软件，主要有 KnjMokoWifi， Lint-wifi 和 Mofi 等，可以参考一下。其他的请参考下面的链接：&lt;br /&gt;&lt;br /&gt;Wireless LAN resources for Linux&lt;br /&gt;http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/&lt;br /&gt;&lt;br /&gt;Neo FreeRunner WiFi&lt;br /&gt;http://wiki.openmoko.org/wiki/Neo_FreeRunner_Wifi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5222397709078242947?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5222397709078242947/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5222397709078242947' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5222397709078242947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5222397709078242947'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/04/wifi.html' title='继续做 WiFi 项目'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-9021553438111962488</id><published>2009-03-23T11:46:00.002+08:00</published><updated>2009-03-23T11:54:13.072+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>公司搬家</title><content type='html'>今天是在新的办公室上班，在12层，靠着窗户，比原来好多了，可以呼吸到新鲜空气了，不过窗户打开的话，会比较吵，因为楼下不远处就是一个十字路口，不过还是满意了。&lt;br /&gt;这个月马上就要过去了，太快了，这月基本是在加班中度过的，每天加的都很晚，还有几次通宵，周末也没怎么休息:( 希望早日见到曙光，更希望我们的新产品能大卖，呵呵，这样才不辜负我们的辛勤劳动。&lt;br /&gt;不说了，要继续干活了。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-9021553438111962488?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/9021553438111962488/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=9021553438111962488' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/9021553438111962488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/9021553438111962488'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/03/blog-post.html' title='公司搬家'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1830035015024764590</id><published>2009-03-03T09:17:00.005+08:00</published><updated>2009-03-03T09:48:24.846+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vi'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='substitute'/><title type='text'>vi 替换操作</title><content type='html'>最近遇到这样的问题，首先编译出现很多未定义的字符串的错误，于是想到，我可以把这些编译出现的错误重定向到一个文件中，然后把其中的字符串过滤出来，统一定义一下就行了，操作如下：&lt;br /&gt;&lt;br /&gt;1) 交叉编译 app 工程，错误输出到 /tmp/k 文件中&lt;br /&gt;make T=arm app &gt; /tmp/k 2&gt;&amp;1&lt;br /&gt;&lt;br /&gt;2) vi 打开该文件，用 substitute 替换以 ’ 字符开头到字符串结尾的串&lt;br /&gt;:%s/\’ .\+$//g&lt;br /&gt;&lt;br /&gt;3) 剔除重复行&lt;br /&gt;sort -u /tmp/k &gt; /tmp/good&lt;br /&gt;&lt;br /&gt;疑问：&lt;br /&gt;使用 sort -u 可以满足我的要求，但是它剔重后的结果已经重新排序了，有时候可能保持原来的顺序，怎么办呢？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1830035015024764590?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1830035015024764590/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1830035015024764590' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1830035015024764590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1830035015024764590'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/03/vi.html' title='vi 替换操作'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8168056369649808619</id><published>2009-02-18T13:16:00.002+08:00</published><updated>2009-02-18T13:40:17.571+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wireless wlan  WiFi TL-WN322G+'/><title type='text'>TL-WN322G+</title><content type='html'>向公司又借了个TP-LINK 的TL-WN321G 无线网卡，以为插到我的PC上就可以使用，却发现没想象的那么简单，首先执行 lsusb:&lt;br /&gt;&lt;br /&gt;Bus 003 Device 001: ID 1d6b:0001  &lt;br /&gt;Bus 002 Device 001: ID 1d6b:0001  &lt;br /&gt;Bus 005 Device 003: ID 0ace:1215 ZyDAS WLA-54L WiFi&lt;br /&gt;Bus 005 Device 001: ID 1d6b:0002  &lt;br /&gt;Bus 004 Device 001: ID 1d6b:0001  &lt;br /&gt;Bus 001 Device 002: ID 04b3:310c IBM Corp. &lt;br /&gt;Bus 001 Device 001: ID 1d6b:0001&lt;br /&gt;&lt;br /&gt;原来用了不一样的芯片，看来要重新编译内核了，重新配置内核，选上 ZyDAS ZD1211/ZD1211B USB-wireless support 即可，编译安装之后，还需要安装 zd1211-firmware，如果是 Gentoo 系统的话 emerge d1211-firmware 即可，然后 modprobe zd1211rw，但发现还有问题，报错：RF MAXIM_NEW_RF 0x8 is not supported，搜索一圈，应该是 zd1211 驱动的 BUG 吧，临时解决办法可以打上下面的 patch： &lt;br /&gt;&lt;br /&gt;--- linux/drivers/net/wireless/zd1211rw/zd_rf.c  2009-02-18 13:38:12.000000000 +0000&lt;br /&gt;+++ linux-mod/drivers/net/wireless/zd1211rw/zd_rf.c 2009-02-18 13:38:01.000000000 +0000&lt;br /&gt;@@ -87,6 +87,7 @@&lt;br /&gt;   r = zd_rf_init_al7230b(rf);&lt;br /&gt;   break;&lt;br /&gt;  case UW2453_RF:&lt;br /&gt;+ case MAXIM_NEW_RF:&lt;br /&gt;   r = zd_rf_init_uw2453(rf);&lt;br /&gt;   break;&lt;br /&gt;  default:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8168056369649808619?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8168056369649808619/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8168056369649808619' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8168056369649808619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8168056369649808619'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/02/tl-wn322g.html' title='TL-WN322G+'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7051834010519923987</id><published>2009-02-12T14:25:00.002+08:00</published><updated>2009-02-16T14:37:46.729+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google 怎么了</title><content type='html'>这两天 Google 怎么了？！ Blogger, Groups 要么登录不了，要么就是显示如下的错误：&lt;br /&gt;&lt;br /&gt;"&lt;br /&gt;内容编码错误    &lt;br /&gt;&lt;br /&gt;无法显示您尝试查看的页面，因为它使用了无效或者不支持的压缩格式。&lt;br /&gt;"&lt;br /&gt;&lt;br /&gt;Update 2009-2-13: Blogger 基本正常，除了页面上方显示有问题外，另外 Groups 也可以登录了，但是打开任意一个主题的时候出错&lt;br /&gt;&lt;br /&gt;Update 2009-2-16: 我在家没遇到过，难道是我机器上 Firefox 出问题了？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7051834010519923987?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7051834010519923987/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7051834010519923987' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7051834010519923987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7051834010519923987'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/02/google.html' title='Google 怎么了'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-331972013452813638</id><published>2009-02-11T17:49:00.001+08:00</published><updated>2009-02-11T18:29:52.207+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wireless wlan wifi TL-WN321G Ralink'/><title type='text'>关于无线局域网(WiFi)</title><content type='html'>公司的设备上将来要加 WiFi 的功能，这方面的任务交给我来折腾了。&lt;br /&gt;先来熟悉一下 WiFi，但我的台式机没有无线网卡阿，这个好办，有"无线USB网卡"(Wireless USB Adapter)，我们公司有一个 TP-LINK TL-WN321G，插在我的电脑上面，执行： lsusb&lt;br /&gt;&lt;br /&gt;Bus 005 Device 003: ID 148f:2573 Ralink Technology, Corp. &lt;br /&gt;Bus 005 Device 001: ID 1d6b:0002  &lt;br /&gt;Bus 004 Device 001: ID 1d6b:0001  &lt;br /&gt;Bus 003 Device 001: ID 1d6b:0001  &lt;br /&gt;Bus 002 Device 001: ID 1d6b:0001  &lt;br /&gt;Bus 001 Device 002: ID 04b3:310c IBM Corp. &lt;br /&gt;Bus 001 Device 001: ID 1d6b:0001 &lt;br /&gt;&lt;br /&gt;第一个就是它了，是 Ralink 芯片哦，于是再搜索一下就知道型号应该是 rt73 / rt2571。&lt;br /&gt;&lt;br /&gt;接下来就要重新编译内核了，在 Networking support 中选上与 Wireless 相关的，另外选上 rt73usb 相关的，路径如下：&lt;br /&gt;&lt;br /&gt;Device Drivers  ---&gt; &lt;br /&gt;  Network device support  ---&gt;&lt;br /&gt;    Wireless LAN  ---&gt;&lt;br /&gt;      Ralink driver support  ---&gt;&lt;br /&gt;        Ralink rt2501/rt73 (USB) support&lt;br /&gt;&lt;br /&gt;然后使用以上编译的内核，重启机器，再次插上这个 TP-LINK 的 Wireless USB Adapter，运行 dmesg 看一下有无报错&lt;br /&gt;&lt;br /&gt;下面安装 wireless-tools 试试看能不能连上，安装过程就不说了，安装之后运行：&lt;br /&gt;&lt;br /&gt;~#iwconfig&lt;br /&gt;lo        no wireless extensions.&lt;br /&gt;&lt;br /&gt;eth0      no wireless extensions.&lt;br /&gt;&lt;br /&gt;wmaster0  no wireless extensions.&lt;br /&gt;&lt;br /&gt;wlan0     IEEE 802.11bg  ESSID:""  &lt;br /&gt;          Mode:Managed  Frequency:2.437 GHz  Access Point: Not-Associated   &lt;br /&gt;          Tx-Power=24 dBm   &lt;br /&gt;          Retry min limit:7   RTS thr:off   Fragment thr=2352 B   &lt;br /&gt;          Encryption key:off&lt;br /&gt;          Power Management:off&lt;br /&gt;          Link Quality:0  Signal level:0  Noise level:0&lt;br /&gt;          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0&lt;br /&gt;          Tx excessive retries:0  Invalid misc:0   Missed beacon:0&lt;br /&gt; &lt;br /&gt;很明显没有找到合适的AP，于是手动搜搜看：&lt;br /&gt;&lt;br /&gt;~#iwlist wlan0 scan&lt;br /&gt;wlan0     Scan completed :&lt;br /&gt;          Cell 01 - Address: 00:1C:F0:AB:29:46&lt;br /&gt;                    ESSID:"dlink"&lt;br /&gt;                    Mode:Master&lt;br /&gt;                    Channel:6&lt;br /&gt;                    Frequency:2.437 GHz (Channel 6)&lt;br /&gt;                    Quality=66/100  Signal level:-82 dBm  &lt;br /&gt;                    Encryption key:off&lt;br /&gt;                    IE: Unknown: 0005646C696E6B&lt;br /&gt;                    IE: Unknown: 010882848B960C121824&lt;br /&gt;                    IE: Unknown: 030106&lt;br /&gt;                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s&lt;br /&gt;                              9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s&lt;br /&gt;                              48 Mb/s; 54 Mb/s&lt;br /&gt;                    Extra:tsf=00000017aac553a9&lt;br /&gt;                    Extra: Last beacon: 3080ms ago&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;下面就可以手动连上这个AP了：&lt;br /&gt;&lt;br /&gt;/sbin/iwconfig wlan0 mode managed channel 6 key off essid dlink&lt;br /&gt;/sbin/iwconfig wlan0 ap 00:1C:F0:AB:29:46&lt;br /&gt;dhcpcd -nd wlan0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Good Luck!&lt;br /&gt;&lt;br /&gt;PS:中午和同事一起到旁边的书店买了本《IEEE 802.11 无线局域网》，要抽时间好好看看了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-331972013452813638?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/331972013452813638/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=331972013452813638' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/331972013452813638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/331972013452813638'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/02/wifi.html' title='关于无线局域网(WiFi)'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7722725432282920582</id><published>2009-01-12T16:38:00.003+08:00</published><updated>2009-01-12T16:51:19.035+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pidgin msn-pecan wlm'/><title type='text'>解决 Pidgin 登录失败的问题(Unable to retrieve MSN Address Book)</title><content type='html'>今天通过 Pidgin 登录 MSN 死活上不去，一直报错：Unable to retrieve MSN Address Book，以为升级 Pidgin 为最新版本就可以了，于是将 Pidgin 更新到 2.5.3，再次登录时发现问题依旧，于是在网上搜索之后才知道是一个BUG(http://developer.pidgin.im/ticket/8080)，很多人反映这一问题了，暂时可以通过如下方法解决：&lt;br /&gt;&lt;br /&gt;1）安装 msn-pecan 插件， emerge -av pidgin-msn-pecan&lt;br /&gt;&lt;br /&gt;2）重新启动 Pidgin，然后在 Login Options 中将 Protocol 改为 WLM 即可&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7722725432282920582?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7722725432282920582/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7722725432282920582' title='3 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7722725432282920582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7722725432282920582'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/01/pidgin-unable-to-retrieve-msn-address.html' title='解决 Pidgin 登录失败的问题(Unable to retrieve MSN Address Book)'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-2354992751139517145</id><published>2009-01-08T13:42:00.003+08:00</published><updated>2009-01-08T13:55:58.577+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='move house'/><category scheme='http://www.blogger.com/atom/ns#' term='remove'/><category scheme='http://www.blogger.com/atom/ns#' term='rent'/><title type='text'>要搬家了</title><content type='html'>马上要过年了，现在很多房子的房租都降了一些，目前我住的房租太贵了，单间1200元，因此打算在年前搬家，房子一堆杂七杂八的东西，正好趁这个机会收拾一下。从今天晚上开始关注租房的信息，希望能找到满意的房子阿。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-2354992751139517145?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/2354992751139517145/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=2354992751139517145' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2354992751139517145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2354992751139517145'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2009/01/blog-post.html' title='要搬家了'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5566844121602107899</id><published>2008-12-30T10:13:00.004+08:00</published><updated>2008-12-30T10:42:45.381+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gcc cpp gentoo'/><title type='text'>gcc 的问题?</title><content type='html'>最近我手头的项目代码编译报错，遇到两个问题，首先是出现以下错误：&lt;br /&gt;&lt;br /&gt;include/mxdef.h:56: error ‘NULL’ was not declared in this scope&lt;br /&gt;&lt;br /&gt;我的开发环境：&lt;br /&gt;&gt;gcc -v&lt;br /&gt;Using built-in specs.&lt;br /&gt;Target: i686-pc-linux-gnu&lt;br /&gt;Configured with: /var/tmp/portage/sys-devel/gcc-4.2.3/work/gcc-4.2.3/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.2.3 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.2.3/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.3 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.3/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.3/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.2.3/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu&lt;br /&gt;Thread model: posix&lt;br /&gt;gcc version 4.2.3 (Gentoo 4.2.3 p1.0)&lt;br /&gt;&lt;br /&gt;&gt;gcc-config -l&lt;br /&gt;[1] i686-pc-linux-gnu-3.3.6&lt;br /&gt;[2] i686-pc-linux-gnu-4.1.2&lt;br /&gt;[3] i686-pc-linux-gnu-4.2.3 *&lt;br /&gt;[4] i686-pc-linux-gnu-4.3.1&lt;br /&gt;&lt;br /&gt;以前可以编译通过的，估计是更新 Gentoo 后带来的问题，我也不知道具体是哪里的问题，于是尝试用其它版本的 gcc 编译，用 gcc-4.1.2 编译结果和上面是一样的，而用gcc-4.3.1 编译之后，出现以下错误：&lt;br /&gt;&lt;br /&gt;include/cdc.h:116: error: multiple parameters named ‘r’&lt;br /&gt;&lt;br /&gt;头文件 cdc.h 第116行为：&lt;br /&gt;&lt;br /&gt;static gal_pixel RGB2Pixel (int r, int g, int b, int r=255);&lt;br /&gt;&lt;br /&gt;gcc-4.2.3以及4.1.2 都忽略这个了阿，这样可以声明的函数有没有问题？待确认。&lt;br /&gt;&lt;br /&gt;第一个问题已经解决了，在头文件 mxdef.h 中增加 &lt;br /&gt;#include &amp;lt;string.h&amp;gt; 就可以了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5566844121602107899?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5566844121602107899/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5566844121602107899' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5566844121602107899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5566844121602107899'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/12/gcc.html' title='gcc 的问题?'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5157501768932801099</id><published>2008-12-15T08:54:00.004+08:00</published><updated>2008-12-15T12:33:48.729+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python excel pyExcelerator'/><title type='text'>用 Python 写了个脚本</title><content type='html'>最近完成了一个简单的脚本，写的过程中对 Python 有了进一步的了解。脚本的目的是把一个文本文件中的数据进行拆分，然后把结果存为 Excel 文件。其中拆分的过程中主要用到了正则表达式，写Excel 文件用的是 pyExcelerator，如果Excel 文件已经打开，写的时候会失败的，要加异常处理。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5157501768932801099?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5157501768932801099/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5157501768932801099' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5157501768932801099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5157501768932801099'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/12/python.html' title='用 Python 写了个脚本'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-2247577848250419279</id><published>2008-11-21T20:20:00.002+08:00</published><updated>2008-11-21T20:39:12.360+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmail google'/><title type='text'>Gmail 的主题</title><content type='html'>Gmail 可换主题了，好像是昨天推出的吧，Google 的产品每次出手都让人从心底里叫好，这次虽然只是一个功能的完善，但还觉得很不错，主题换了几个，还是觉得默认的好，另外那个终端的主题很受同事欢迎 :)&lt;br /&gt;现在对 Google 的产品越发依赖了，每天必须去的地方：Google reader、Groups 和 Gmail等，偶尔打开 Blogger 发个帖，当然搜索必定是 Google 了。&lt;br /&gt;另外，我也申请了 Google app engine，简单写了点东西，但一直没时间完善它，主要是自己想做点有新意的东西，苦于还没好的点子。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-2247577848250419279?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/2247577848250419279/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=2247577848250419279' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2247577848250419279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2247577848250419279'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/11/gmail.html' title='Gmail 的主题'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-717562573182184693</id><published>2008-11-19T08:58:00.000+08:00</published><updated>2008-11-19T09:07:34.260+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winter'/><title type='text'>好冷阿</title><content type='html'>再一次迎来了降温，仿佛一夜之间就进入了严冬，最低温度达到零下四度了，今天早上看到马路两边都是一地的落叶，估计象这样持续一周就该下雪了。&lt;br /&gt;早上公交车上播着全球经济危机、国内不少商场打折促销之类的新闻，虽然自己还没明显的感觉，但还是“配合一下”────勒紧裤腰带过日子&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-717562573182184693?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/717562573182184693/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=717562573182184693' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/717562573182184693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/717562573182184693'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/11/blog-post_19.html' title='好冷阿'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-9055422905113612106</id><published>2008-11-12T09:54:00.000+08:00</published><updated>2008-11-12T09:55:06.503+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miniGUI keyboard control'/><title type='text'>miniGUI 自定义控件</title><content type='html'>公司的新产品是触摸屏的，要使用软键盘，小头把这个任务安排给了我，于是上周几乎都在忙活这事，还好已经写得差不多了，对 miniGUI 自定义控件有了更深的体会，那就是“乱”。在 miniGUI 中添加自定义控件需要改 *.in 等一些文件，如果改的文件少一个了，编译也看不出来，但测试的时候就郁闷了，到头来只好回去检查 miniGUI 库的问题，总之比较麻烦，我是没办法，据说公司还掏了钱。其实很更好的解决办法，比如把涉及修改的地方都放到配置文件里面，至少不会改的晕头转向吧。&lt;br /&gt;题外话：把图片直接通过 framebuffer 显示到的屏幕上(我们的产品屏幕为 800x480)，挺漂亮的 :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-9055422905113612106?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/9055422905113612106/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=9055422905113612106' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/9055422905113612106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/9055422905113612106'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/11/minigui.html' title='miniGUI 自定义控件'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1986423938008388524</id><published>2008-11-08T13:21:00.003+08:00</published><updated>2008-11-08T13:28:39.034+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winter beijing badminton'/><title type='text'>北京的又一个冬天</title><content type='html'>窝在床上在网上逛着，虽然在房间里面，但还是觉得很冷，冬天到了哦，下周末就应该开暖气了吧，那时就好过多了，不过在公司一直觉得闷热，还穿短袖 @_^&lt;br /&gt;明天继续打羽毛球，感觉水平提高的比较慢阿，主要是没有志同道合的人一起练习，嗯，自己多努力吧&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1986423938008388524?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1986423938008388524/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1986423938008388524' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1986423938008388524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1986423938008388524'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/11/blog-post.html' title='北京的又一个冬天'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8096411668449301326</id><published>2008-10-10T10:40:00.003+08:00</published><updated>2008-10-10T11:07:53.682+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo X xorg'/><title type='text'>升级系统后进不了 X</title><content type='html'>工作用的台式机好久没更新了，于是前两天在下班前升级了系统&lt;br /&gt;&lt;blockquote&gt;emerge sync&lt;br /&gt;emerge -uDpv world&lt;br /&gt;&lt;/blockquote&gt;由于需要更新的包太多，就选了几个比较重要的包升级了，比如：xorg-x11, vim, gnome等等。结果第二天上班开机后进不了 X，赶紧查看 Xorg.0.log ：(EE) Failed to load /usr/lib/xorg/modules/drivers/intel_drv.so ... (EE) No devices detected 很容易想到是显卡驱动的问题，在 emerge -au xf86-video-i810 之后上面的错误没了，但还是进不去 X，报“No devices detected” 的错误，重新 emerge xorg-x11、xorg-server 问题依旧。&lt;br /&gt;怎么办？上班时间，容不得我瞎折腾。。。开始怀疑 xorg.conf 配置的问题，虽然之前用着好好的。&lt;br /&gt;先备份 xorg.conf，然后运行 X -configure 让它自动生成一份 xorg.conf，最后 copy 新的文件到 /etc/X11/xorg.conf 下, /etc/init.d/xdm restart，great! 熟悉的登录界面出现了！&lt;br /&gt;估计原来用着没问题的 xorg.conf在升级之后的 xorg 下有些不兼容吧，以后升级 xorg 一定要小心。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8096411668449301326?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8096411668449301326/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8096411668449301326' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8096411668449301326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8096411668449301326'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/10/x.html' title='升级系统后进不了 X'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6414385908007460047</id><published>2008-09-16T17:13:00.003+08:00</published><updated>2008-09-16T17:54:46.786+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubiquity'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>ubiquity 真的是“无处不在”</title><content type='html'>也许是被 Google 的 &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt; 抢了风头，&lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity"&gt;ubiquity&lt;/a&gt; 的发布似乎没引起人的注意，但是用过才知道它真的太强大了，感觉 Chrome 多余了:) 网上介绍 &lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity"&gt;ubiquity&lt;/a&gt; 已经很多了，就不多说了,在这里说说它的自定义命令，也就是我们可以添加新的命令到 &lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity"&gt;ubiquity&lt;/a&gt; 中。&lt;br /&gt;&lt;br /&gt;可以打开&lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity"&gt;ubiquity&lt;/a&gt; 的命令编译器(chrome://ubiquity/content/editor.html)，然后输入:&lt;br /&gt;&lt;blockquote&gt;function cmd_hello_world() {&lt;br /&gt; displayMessage( "Hello, World!");&lt;br /&gt;}&lt;/blockquote&gt;这个编译器是自动保存的，输入以上代码后，调出 ubiquity 界面，输入 hello_world 并回车，就能看到效果了，如果觉得不错可以和大家&lt;a href="https://wiki.mozilla.org/Labs/Ubiquity/Commands_In_The_Wild"&gt;分享&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;详细的说明请参考教程：https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_Author_Tutorial#The_Ubiquity_0.1_Command_Tutorial&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6414385908007460047?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6414385908007460047/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6414385908007460047' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6414385908007460047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6414385908007460047'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/09/ubiquity.html' title='ubiquity 真的是“无处不在”'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1073400172177951858</id><published>2008-09-09T09:30:00.001+08:00</published><updated>2008-09-09T09:32:35.380+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='地铁、隐藏路线'/><title type='text'>北京地铁还有隐藏路线？</title><content type='html'>是的，我是今天才知道。网上是这么描述的：&lt;br /&gt;&lt;blockquote&gt;总共只有3个：福寿岭、高井、54号，都修建于1965年，当时是为了战备,是防范空袭和运送物资的。&lt;br /&gt;&lt;br /&gt;现在福寿岭站已经对地铁技校学生开放，高井站对北京军区家属开放，但都尚未对社会开放。54号站为地上车站，已经基本废弃。&lt;br /&gt;&lt;br /&gt;每天有早晚各有两班地铁列车经停福寿岭、高井两站。&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1073400172177951858?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1073400172177951858/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1073400172177951858' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1073400172177951858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1073400172177951858'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/09/blog-post.html' title='北京地铁还有隐藏路线？'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7332114398912148001</id><published>2008-09-03T09:58:00.003+08:00</published><updated>2008-09-03T10:03:47.915+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Browse'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>试用 Google 浏览器 Chrome</title><content type='html'>得知Google 推出了自己的浏览器了，虽然暂时还没Linux 版，但我迫不及待想看看它的样子，于是特意切换到Windows 下试用了一把 :D 果然。。。又是如此地简洁，那么地清爽，速度也很快，没有让人失望。对了，about:memory 可以查看内存使用、浏览器进程等情况(Chrome 是多进程的) ，从内到外都让人眼前一亮阿。&lt;br /&gt;不过有一点比较奇怪，我头一次用 IE下载的程序装不了(点击没反应)，后来用firefox 下载的安装程序就没问题(大小一样的)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7332114398912148001?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7332114398912148001/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7332114398912148001' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7332114398912148001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7332114398912148001'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/09/google-chrome.html' title='试用 Google 浏览器 Chrome'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-2596663659143511936</id><published>2008-08-28T18:26:00.003+08:00</published><updated>2008-11-08T13:31:09.864+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux devtodo conky'/><title type='text'>好用的工具</title><content type='html'>今天找到两个比较好的工具 devtodo, conky&lt;br /&gt;&lt;br /&gt;下班了，回家慢慢补充 :D&lt;br /&gt;&lt;br /&gt;(续)&lt;br /&gt;我最后用的 devtodo，感觉不错 :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-2596663659143511936?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/2596663659143511936/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=2596663659143511936' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2596663659143511936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2596663659143511936'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/08/blog-post_28.html' title='好用的工具'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1388526064872540088</id><published>2008-08-25T13:19:00.001+08:00</published><updated>2008-08-25T13:21:27.088+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='育儿'/><title type='text'>育儿</title><content type='html'>1.当不让孩子做不该做的事情（如要不该要的东西）哭闹打滚时，父母要视而不见，不要去哄，除非孩子做危险的事情，时间一长孩子自己就不哭了&lt;br /&gt;2.当孩子做错事请时，不要把他自己关在房子里待着，要多交流&lt;br /&gt;3.下班回家后，要大声叫孩子的名字，并说我回来了，然后和孩子一起玩至少20分钟&lt;br /&gt;4.父母每周至少陪孩子外出游玩半天&lt;br /&gt;&lt;br /&gt;(以后陆续补充)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1388526064872540088?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1388526064872540088/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1388526064872540088' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1388526064872540088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1388526064872540088'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/08/blog-post.html' title='育儿'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8515787718738679564</id><published>2008-08-25T11:04:00.003+08:00</published><updated>2008-08-25T11:13:51.935+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='block gentoo emerge'/><title type='text'>安全解决 blocking 问题</title><content type='html'>[blocks &lt;span style="color: rgb(255, 0, 0);"&gt;B&lt;/span&gt;     ] &lt;span style="color: rgb(255, 0, 0);"&gt;sys-apps/setarch (is blocking sys-apps/util-linux-2.13.1.1)&lt;/span&gt;&lt;br /&gt;[blocks &lt;span style="color: rgb(255, 0, 0);"&gt;B&lt;/span&gt;     ] &lt;span style="color: rgb(255, 0, 0);"&gt;sys-apps/mktemp (is blocking sys-apps/coreutils-6.10-r2)&lt;/span&gt;&lt;br /&gt;[blocks &lt;span style="color: rgb(255, 0, 0);"&gt;B&lt;/span&gt;     ] &lt;span style="color: rgb(255, 0, 0);"&gt;&gt;=sys-apps/coreutils-6.10 (is blocking sys-apps/mktemp-1.5)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;类似上面的问题，在gentoo 系统中是经常遇到问题，一般情况下可以先删除(emerge -C)再安装，但这样做不太安全，特别是对于一些&lt;span class="postbody"&gt;重要的 packages，&lt;/span&gt;&lt;span class="postbody"&gt;再安装时会找不到需要用的命令)，可以采用下面的方法解决：&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="postbody"&gt;emerge --buildpkgonly --nodeps util-linux &amp;amp;&amp;amp; emerge -C setarch &amp;amp;&amp;amp; emerge --usepkgonly util-linux&lt;br /&gt;&lt;/span&gt;&lt;span class="postbody"&gt;emerge --buildpkgonly --nodeps coreutils &amp;amp;&amp;amp; emerge -C mktemp &amp;amp;&amp;amp; emerge --usepkgonly coreutils&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;也可以把 &lt;span class="postbody"&gt;package 加到 &lt;/span&gt;package.mask 中，然后在 emerge，如下：&lt;br /&gt;&lt;br /&gt;把 bash 先加到 /etc/portage/package.mask 中，这样 emerge portage 就不会报错了，然后再把 /etc/portage/package.mask 中的 =app-shells/bash-3.2_p33 拿掉，再 emerge bash&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8515787718738679564?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8515787718738679564/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8515787718738679564' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8515787718738679564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8515787718738679564'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/08/blocking.html' title='安全解决 blocking 问题'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6970813640644257669</id><published>2008-08-22T09:56:00.003+08:00</published><updated>2008-08-22T10:27:14.482+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GDB Linux'/><title type='text'>GDB 技巧</title><content type='html'>比较有用的命令：&lt;br /&gt;&lt;br /&gt;1.p(print)       Print value of expression EXP&lt;br /&gt;   p/x               Print value of variable and format it are x(hex)&lt;br /&gt;2.ptype          Print definition of type TYPE&lt;br /&gt;3.whatis        Print data type of expression EXP&lt;br /&gt;4.display       Print value of expression EXP each time the program stops&lt;br /&gt;5.define         Define a new command name&lt;br /&gt;6.layout        Change the layout of windows.     Layout names are: src/asm/split/regs&lt;br /&gt;&lt;br /&gt;举例如下：&lt;br /&gt;&lt;br /&gt;获取struct page结构的大小&lt;br /&gt;(gdb) p mem_map&lt;br /&gt;$80 = (struct page *) 0xc1000000&lt;br /&gt;(gdb) p mem_map+1&lt;br /&gt;$81 = (struct page *) 0xc1000020&lt;br /&gt;(gdb) p/x 0xc1000020 - 0xc1000000&lt;br /&gt;$82 = 0×20&lt;br /&gt;&lt;br /&gt;p *array@len&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;自定义函数&lt;br /&gt;(gdb) define nbt&lt;br /&gt;Type commands for definition of “nbt”.&lt;br /&gt;End with a line saying just “end”.&lt;br /&gt;&gt;next&lt;br /&gt;&gt;bt&lt;br /&gt;&gt;end&lt;br /&gt;(gdb) nbt&lt;br /&gt;&lt;br /&gt;TUI模式&lt;br /&gt;layout src    仅显示源代码窗口&lt;br /&gt;layout asm  仅显示汇编代码窗口&lt;br /&gt;layout split  显示源代码和汇编代码窗口&lt;br /&gt;layout regs  显示寄存器和源代码窗口，或者寄存器和汇编代码窗口&lt;br /&gt;layout next , layout prev  切换窗口&lt;br /&gt;C+l               刷新屏幕&lt;br /&gt;C-x 1            只用一个窗口&lt;br /&gt;C-x 2            用两个窗口，按多次会有不同两个窗口的组合形式&lt;br /&gt;C-x o            active 窗口转移&lt;br /&gt;C-x s            进入和退出TUI SingleKey 模式&lt;br /&gt;C-x a            退出TUI模式，回到传统模式&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6970813640644257669?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6970813640644257669/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6970813640644257669' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6970813640644257669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6970813640644257669'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/08/gdb.html' title='GDB 技巧'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3999375091481771817</id><published>2008-07-23T10:50:00.002+08:00</published><updated>2008-07-23T10:59:57.136+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><title type='text'>暂时告一段落</title><content type='html'>前段时间比较忙，周六都要加班，一切都是为了公司的新产品，应该是今年的“重头戏”了。昨天总监已经拿着产品到美国做 DEMO了, 现在可以喘口气了  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3999375091481771817?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3999375091481771817/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3999375091481771817' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3999375091481771817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3999375091481771817'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/07/blog-post.html' title='暂时告一段落'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5529622921069232356</id><published>2008-06-17T17:16:00.001+08:00</published><updated>2008-06-17T17:19:20.420+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='英语、缩写'/><title type='text'>常用的英语单词缩写及常用口语表达</title><content type='html'>常用的英语单词缩写&lt;br /&gt;&lt;br /&gt;4ever = forever&lt;br /&gt;ASL = Age/Sex/Location 年龄、性别、住址&lt;br /&gt;ASAP = As soon as possible尽快&lt;br /&gt;ATST = At The Same Time同时&lt;br /&gt;B4 = Before前面，以前&lt;br /&gt;BTW = By the way 随便说一下&lt;br /&gt;BBN = Bye Bye Now再见&lt;br /&gt;BBL = Be back later 稍后回来&lt;br /&gt;BRB =Be right back 很快回来&lt;br /&gt;Biz = Business交易&lt;br /&gt;BR = Bathroom浴室&lt;br /&gt;BRT = Be Right There马上到&lt;br /&gt;BS = Big Smile笑脸&lt;br /&gt;BWDIK = But What Do I Know?我怎么知道&lt;br /&gt;CU = See you 再见&lt;br /&gt;CUL = See you later 下次再会&lt;br /&gt;CIO = Check It Out算出来，解决&lt;br /&gt;CSL = Can’t Stop Laughing忍不住笑&lt;br /&gt;CWYL = Chat With You Later一会儿再聊&lt;br /&gt;&lt;br /&gt;============================&lt;br /&gt;&lt;br /&gt;美国人平时所用的许多短语，看似普通，但有的会有特殊意义，究竟是俚语、口语或俗语，没有绝对的定义。其实名称不重要，最重要的是懂得意义和用法，不是吗? &lt;p&gt;　　1. to have(many) irons in the fire： to have a lot of activities going on at the same time(同时有许多事，想马上全部做完，但又不知从何开始，似乎忙得不可开交)&lt;/p&gt; &lt;p&gt;　　Don't bother him because he has many irons in the fire.&lt;/p&gt; &lt;p&gt;　　别打扰他，他事情太多，忙得很!&lt;/p&gt; &lt;p&gt;　　Some people even like to have many irons in the fire.&lt;/p&gt; &lt;p&gt;　　有些人喜欢有很多事忙忙碌碌。&lt;/p&gt; &lt;p&gt;　　2. to talk over (one's) head(s)： to use large or big words so that audience will not understand exact meaning(指所谈论的内容过于专业或高深，非一般人可以理解;也指有人为了表?F自己才学非凡，故意谈些高深理论或用些难字，吓唬?e人)&lt;/p&gt; &lt;p&gt;　　Dr. Lee's lecture was so specialized that he almost talked over our heads.&lt;/p&gt; &lt;p&gt;　　李博士的演讲太专业了，几乎使我们无法理解。&lt;/p&gt; &lt;p&gt;　　In order to show his profound knowledge he talks over my head.&lt;/p&gt; &lt;p&gt;　　为了表?F他的学问高深，他故弄玄虚。&lt;/p&gt; &lt;p&gt;　　3. to put (something) back into (in) its cage： to put something under control (可以控制某件事情，多半指政治、健康等)&lt;/p&gt; &lt;p&gt;　　We are trying to put inflation back into its cage and our economy is on the mend.&lt;/p&gt; &lt;p&gt;　　我们正在设法控制通货膨胀，同时改善我们得经济。&lt;/p&gt; &lt;p&gt;　　Diplomats and politicians need to put aggression and hostility back into its cage.&lt;/p&gt; &lt;p&gt;　　外交官和政客应该收敛攻击和敌对的行为。&lt;/p&gt; &lt;p&gt;　　4. to keep (one's) fingers crossed： to hope something good will happen (祝福某人好运或一切顺利。把食指与中指交叉，祈求好运，是老外的迷信，但在写信或正式场合，多半是用"I wish you best (good) luck!"或"Good (best) luck to you!")&lt;/p&gt; &lt;p&gt;　　He keeps his fingers crossed hoping his father will send him more money.&lt;/p&gt; &lt;p&gt;　　他盼望有好运，老爸能多寄点钱给他。&lt;/p&gt; &lt;p&gt;　　Many people have been keeping their fingers crossed that we can live in a peaceful world.&lt;/p&gt; &lt;p&gt;　　许多人都在祈求好运，盼能在和平的世界里生活。&lt;/p&gt; &lt;p&gt;　　5. to stretch (one's) legs：to relax or to take a short break (久坐后，把腿舒展一下，或稍微休息一下)&lt;/p&gt; &lt;p&gt;　　Let's take ten minutes to stretch our legs.&lt;/p&gt; &lt;p&gt;　　让我们先休息十分钟。&lt;/p&gt; &lt;p&gt;　　May I take a break so that I can stretch my legs?&lt;/p&gt; &lt;p&gt;　　我可以休息一会儿伸伸腿吗?&lt;/p&gt; &lt;p&gt;　　During the a long flight from the US to Taiwan， I normally stretch my legs every two hours.&lt;/p&gt; &lt;p&gt;　　在从美国到台湾的长途飞行中，我通常每两个小时起身走走。&lt;/p&gt; &lt;p&gt;　　6. to read between the lines：to interpret the hidden meaning or a hidden message; to discern the true fact (从字里行间体会隐含的意义;领会言外之意或能了解其中的真正意义)&lt;/p&gt; &lt;p&gt;　　As you look at this poem， be sure to read between the lines.&lt;/p&gt; &lt;p&gt;　　读这首诗的时候，要从字里行间去体会它的含义。&lt;/p&gt; &lt;p&gt;　　After he re-read the love letter between the lines， he realized that he was dumped by his sweetheart.&lt;/p&gt; &lt;p&gt;　　重读情书之后，他终于明白他已经被情人抛弃了。&lt;/p&gt; &lt;p&gt;　　7. to let off steam：to give vent to one's anger(发泄、出气，像放掉蒸汽以减少压力似的。这与"to fly off the handle"意思相近，但比"to lose temper"委婉客气些)&lt;/p&gt; &lt;p&gt;　　What will you do if your wife lets off steam?&lt;/p&gt; &lt;p&gt;　　假如你太太大发脾气的话，你该怎么办呢?&lt;/p&gt; &lt;p&gt;　　(因为谈论的对象使对方的太太，所以语气要委婉客气些)。&lt;/p&gt; &lt;p&gt;　　但是谈到第三者，就可不必太委婉，可用lose temper：&lt;/p&gt; &lt;p&gt;　　What will you do if one of your staff lose temper?&lt;/p&gt; &lt;p&gt;　　如果你的同事冲你发脾气你该怎么办呢?&lt;/p&gt; &lt;p&gt;　　Occasionally we should be given a chance to let off steam.&lt;/p&gt; &lt;p&gt;　　我们应该不时的发泄一下情绪。&lt;/p&gt; &lt;p&gt;　　8. to pay through the nose：to pay too much for something or excessively expensive(花费太多，代价过高，与" to cost an arm and a leg"意义相近)&lt;/p&gt; &lt;p&gt;　　Don't pay through the nose when you buy the furniture.&lt;/p&gt; &lt;p&gt;　　不要花太多的钱买家具。&lt;/p&gt; &lt;p&gt;　　Some women paid through the noses for their jewelry.&lt;/p&gt; &lt;p&gt;　　有些女人花大把的钱购买珠宝首饰。&lt;/p&gt; &lt;p&gt;　　9. to take center stage：to be in the spotlight (引人注目的中心人物;以某人为公众瞩目的对象)&lt;/p&gt; &lt;p&gt;　　Mrs. Lin always takes center stage at a party.&lt;/p&gt; &lt;p&gt;　　林太太总能成为宴会上的焦点。&lt;/p&gt; &lt;p&gt;　　President Bush takes center stage wherever he goes.&lt;/p&gt; &lt;p&gt;　　布什总统不论走到哪里，都是公众瞩目的焦点。&lt;/p&gt; &lt;p&gt;　　His constant taking center stage could deprive him of his privacy.&lt;/p&gt; &lt;p&gt;　　他好出风头的毛病让他毫无隐私可言。&lt;/p&gt; &lt;p&gt;　　10. to drag(one's)feet：to procrastinate or postpone(慢慢的拖延，行动迟缓，拖拖拉拉)&lt;/p&gt; &lt;p&gt;　　It is not a good idea to drag your feet when the work needs to be done.&lt;/p&gt; &lt;p&gt;　　拖延工作是不好的。&lt;/p&gt; &lt;p&gt;　　No employers like for their employees to drag their feet on any project.&lt;/p&gt; &lt;p&gt;　　工作拖拖拉拉的员工总是不受欢迎的。&lt;/p&gt; &lt;p&gt;　　11. to paint(someone or oneself)into a corner：to trap oneself or someone; to be in trouble(使自己或某人陷入困境，应该注意的是即使主语是复数形式，corner仍然用单数)&lt;/p&gt; &lt;p&gt;　　Don't try to paint yourself into a corner.&lt;/p&gt; &lt;p&gt;　　不要让自己身陷困境，无法脱身。&lt;/p&gt; &lt;p&gt;　　After a heated debate with his boss， Mr. Chen has painted himself into a corner.&lt;/p&gt; &lt;p&gt;　　和老板激烈的争辩之后，陈先生处境十分不妙。&lt;/p&gt; &lt;p&gt;　　12. to ask (someone) for (one's) hand：to ask girl's parents for marriage approval(指男人请求女方家长应允将女儿嫁给他，这里的"someone"是指女方的家长，"one"则是指要求婚的对象，hand只能用单数形 式)&lt;/p&gt; &lt;p&gt;　　Mr. Su asked me for my daughter's hand.&lt;/p&gt; &lt;p&gt;　　苏先生到我家来向我女儿提亲。&lt;/p&gt; &lt;p&gt;　　He has asked her parents for their daughter's hand.&lt;/p&gt; &lt;p&gt;　　他请求她的父母应允他们的婚事。&lt;/p&gt; &lt;p&gt;　　13. to move onward and upward：to be promoted;from good to better situation(情况得以改善，或往更好的情?r发展)&lt;/p&gt; &lt;p&gt;　　He hopes to move onward and upward with his current company.&lt;/p&gt; &lt;p&gt;　　他希望能在现在就职的公司里顺利发展，步步高升。&lt;/p&gt; &lt;p&gt;　　Many young couples try to move onward and upward during their marriage.&lt;/p&gt; &lt;p&gt;　　许多年轻夫妇都希望能够婚姻美满幸福。&lt;/p&gt; &lt;p&gt;　　14. to call a spade a spade：to be honest， blunt or frank(直言不讳，有啥说啥)&lt;/p&gt; &lt;p&gt;　　My wife always calls a spade a spade about her work situation.&lt;/p&gt; &lt;p&gt;　　我妻子对别人谈起她的工作时，总是直言不讳。&lt;/p&gt; &lt;p&gt;　　Calling a spade a spade on foreign affairs sometimes seems difficult for diplomats.&lt;/p&gt; &lt;p&gt;　　外交官在处理外交事务的时候很难做到直言不讳。&lt;/p&gt; &lt;p&gt;　　15. to play cat and mouse：to play games with aggressive and passive attitude&lt;/p&gt; &lt;p&gt;　　玩猫戏老鼠的把戏，欲擒故纵&lt;/p&gt; &lt;p&gt;　　In business negotiations， there are always cat-and-mouse games.&lt;/p&gt; &lt;p&gt;　　在商业谈判中，常会有一些猫戏老鼠的把戏。&lt;/p&gt; &lt;p&gt;　　The police have played cat and mouse with the murderer.&lt;/p&gt; &lt;p&gt;　　警察对凶犯采用的是欲擒故纵的策略。&lt;/p&gt; &lt;p&gt;　　16. to go on the dole：(of the unemployed) to live on public welfare(失业人员依靠政府救济金生活。)&lt;/p&gt; &lt;p&gt;　　Thousands of Americans are out of jobs and may go on the dole.&lt;/p&gt; &lt;p&gt;　　美国成千上万的失业者靠领取政局救济金生活。&lt;/p&gt; &lt;p&gt;　　Some people have gone on the dole for years.&lt;/p&gt; &lt;p&gt;　　有些人多年来就是靠政府救济生活的。&lt;/p&gt; &lt;p&gt;　　17. to be in the hot seat：to be under lots of pressure or in a difficult position(处于困境，面对很多压力)&lt;/p&gt; &lt;p&gt;　　He has resigned from his job because he has been in the hot seat for years.&lt;/p&gt; &lt;p&gt;　　由于不堪多年的工作压力，他终于辞职了。&lt;/p&gt; &lt;p&gt;　　When testifies before Congress， he will be in the hot seat.&lt;/p&gt; &lt;p&gt;　　在国会作证的时候，他将面临巨大的压力。&lt;/p&gt; &lt;p&gt;　　18. to make waves：to make trouble(惹是生非，与"rock the boat"意思相近)&lt;/p&gt; &lt;p&gt;　　Many politicians like to make waves in order to be kept in the media.&lt;/p&gt; &lt;p&gt;　　许多政客为了能在媒体上路脸儿而不惜哗众取宠。&lt;/p&gt; &lt;p&gt;　　Teenagers tend to make waves with their parents and teachers.&lt;/p&gt; &lt;p&gt;　　一些青少年总是会给父母和老师惹麻烦。&lt;/p&gt; &lt;p&gt;　　19. to keep (one's)nose clean：to keep away from trouble(远离是非，少惹麻烦)&lt;/p&gt; &lt;p&gt;　　The newly released inmates are trying to keep their noses clean.&lt;/p&gt; &lt;p&gt;　　刚刚获释的犯人总是尽量少惹是非。&lt;/p&gt; &lt;p&gt;　　A law-abiding person needs to keep his (her) nose clean.&lt;/p&gt; &lt;p&gt;　　奉公守法的人应该避免制造麻烦。&lt;/p&gt; &lt;p&gt;　　20. to drive (someone) up the wall：to annoy or upset someone(惹人生气或者不高兴)&lt;/p&gt; &lt;p&gt;　　The boy is driving his mother up the wall because of his ill behavior.&lt;/p&gt; &lt;p&gt;　　这个不听话的孩子让他妈妈大为头痛。&lt;/p&gt; &lt;p&gt;　　If you ask too many questions， you may drive your boss up the wall.&lt;/p&gt; &lt;p&gt;　　假如你的问题太多也会让你的老板很反感。&lt;/p&gt; &lt;p&gt;　　21. to write(someone or something)off：to throw away or to discard(抛弃或者丢弃);to deduct a business loss(在经商失败时，也用于报销、注销或扣除损失的数额中)&lt;/p&gt; &lt;p&gt;　　After a hot argument， she wrote off her boyfriend.&lt;/p&gt; &lt;p&gt;　　她和男朋友大吵了一架之后，就把他甩了。&lt;/p&gt; &lt;p&gt;　　He will write off the charitable contributions from his income taxes.&lt;/p&gt; &lt;p&gt;　　他从所得税中扣除了慈善募捐的金额。&lt;/p&gt; &lt;p&gt;　　22. to take up with (someone)：to date someone or to fall in love with someone(对某人产生兴趣，或与某人开始亲密交往)&lt;/p&gt; &lt;p&gt;　　After he met her at the bar， he took up with her.&lt;/p&gt; &lt;p&gt;　　自从在酒吧见过一面之后，他对她产生了兴趣。&lt;/p&gt; &lt;p&gt;　　As she is such a pretty woman， many men would like to take up with her.&lt;/p&gt; &lt;p&gt;　　像她这么漂亮的女人，许多男人都对她有兴趣。&lt;/p&gt; &lt;p&gt;　　24. to pave the way to (or for)：to make the path or to lay a groundwork of something(为......铺平道路或为......做好准备)&lt;/p&gt; &lt;p&gt;　　A good education will pave the way to finding a decent job.&lt;/p&gt; &lt;p&gt;　　好的教育是好的工作的基础。&lt;/p&gt; &lt;p&gt;　　Early space exploration has paved the way for the current space station.&lt;/p&gt; &lt;p&gt;　　早期的太空探索为如今的太空站建设奠定了基础。&lt;/p&gt; &lt;p&gt;　　25. to paint the town red：to enjoy oneself; to have a good time(尽情享受)&lt;/p&gt; &lt;p&gt;　　He is going out tonight to paint the town red.&lt;/p&gt; &lt;p&gt;　　他今天晚上要玩个痛快。&lt;/p&gt; &lt;p&gt;　　Miss Chen really painted the town red last week with her friends.&lt;/p&gt; &lt;p&gt;　　陈小姐上周和朋友玩得很尽兴。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5529622921069232356?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5529622921069232356/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5529622921069232356' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5529622921069232356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5529622921069232356'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/06/blog-post.html' title='常用的英语单词缩写及常用口语表达'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4998555227522171685</id><published>2008-04-18T17:08:00.003+08:00</published><updated>2008-04-18T17:24:52.387+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='eix'/><category scheme='http://www.blogger.com/atom/ns#' term='equery'/><category scheme='http://www.blogger.com/atom/ns#' term='euse'/><title type='text'>gentoo 技巧</title><content type='html'>使用 gentoo 一段时间了, 一些比较有用的命令总结在这里:&lt;br /&gt;&lt;br /&gt;ufed - 修改 USE&lt;br /&gt;qlist - 列出包中文件&lt;br /&gt;equery - 查询已安装的包或包中包含的文件等&lt;br /&gt;eix - 可代替 emerge 更新查询,速度快&lt;br /&gt;euse - 命令行式的 USE 编辑器&lt;br /&gt;emerge -fuDv world - 更新整个系统安装的包,但仅下载不编译&lt;br /&gt;emerge -avuDN world  - 更新整个系统安装的包,下载并编译&lt;br /&gt;emerge -p --depclean - 删除未列入 world 中的包或垃圾文件&lt;br /&gt;revdep-rebuild - 重新编译依赖&lt;br /&gt;eselect profile list - 列出系统中所有的 profile 文件&lt;br /&gt;eselect profile set * - 设定系统 profile&lt;br /&gt;&lt;br /&gt;xdpyinfo | grep dimensions&lt;br /&gt; 1024 x 768&lt;br /&gt;xdpyinfo | grep resolution&lt;br /&gt; 116 x 116 ?&lt;br /&gt;&lt;br /&gt;history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10&lt;br /&gt; - 列出系统当前用户曾使用的命令及百分比&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4998555227522171685?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4998555227522171685/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4998555227522171685' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4998555227522171685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4998555227522171685'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/04/gentoo.html' title='gentoo 技巧'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6623572391804100629</id><published>2008-04-14T10:09:00.002+08:00</published><updated>2008-04-14T10:25:36.355+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='辞职'/><title type='text'>辞职了</title><content type='html'>在这家公司待了两年多了，现在的公司已经物是人非，是该离开的时候了。辞职申请已经交上去了，已经得到上面的答复，也已经找我谈话了，但去意已决。这周应该是我在这家公司待了最后一周了，这段时间比较轻松了，我正整理着电脑里面的有用的和没用的资料，有些文件好久都没动过了，都“长毛”了吧 :P&lt;br /&gt;昨天是周末，我去医院做了入职体检，能够当场得到结果的检查都正常，周二去拿另外两项检查结果，应该也没问题。&lt;br /&gt;下周就要去新公司上班了，好好努力，希望自己能更上一层楼！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6623572391804100629?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6623572391804100629/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6623572391804100629' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6623572391804100629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6623572391804100629'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/04/blog-post.html' title='辞职了'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6334331487711716483</id><published>2008-03-06T17:16:00.003+08:00</published><updated>2008-03-06T17:20:52.710+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curl'/><title type='text'>curl 实现表单提交</title><content type='html'>curl -D "/client/GK.txt" -d "spcode=608511&amp;amp;sppassword=sohu332416" "lu.blog.com:80/sp/login.do"&lt;br /&gt;&lt;br /&gt;-D   将JSESSIONID 等值放入 GK.txt 文件中&lt;br /&gt;&lt;br /&gt;curl -b "JSESSIONID=EC0AE12D30BA57B10AB68E558067B765;" -d "tonetype=0.5" "http://lu.blog.com/sp/UploadServlet?tonetype=0.5"&lt;br /&gt;&lt;br /&gt;-b 带入JSESSIONID&lt;br /&gt;-d 以POST方式提交&lt;br /&gt;&lt;br /&gt;curl -b "JSESSIONID=AAB5E9FBA659044518C09A18B2310271;" -F file1/childring_file/7/1/爱神厄洛斯的漫游.asf"  "lu.blog.com/sp/UploadServlet"&lt;br /&gt;&lt;br /&gt;-F 上传文件&lt;br /&gt;&lt;br /&gt;把产生的cookie保存在fee.cookie文件里&lt;br /&gt;curl -d "user=test&amp;amp;pass=111111&amp;amp;ip=192.168.1.1&amp;amp;type=2&amp;amp;type=1&amp;amp;action=%C1%AC%BD%D3%CD%F8%C2%E7" --cookie-jar fee.cookie 192.168.252.4/login.jsp&lt;br /&gt;&lt;br /&gt;读取上一步产生的session cookie即fee.cookie文件。共享上一步操作的session cookie值&lt;br /&gt;curl --cookie fee.cookie --referer -d "http://192.168.252.4/user/network/connect_action.jsp?ip=192.168.1.1&amp;amp;type=2"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6334331487711716483?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6334331487711716483/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6334331487711716483' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6334331487711716483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6334331487711716483'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/03/curl.html' title='curl 实现表单提交'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6711394287094598526</id><published>2008-02-25T10:28:00.002+08:00</published><updated>2008-02-25T10:40:55.176+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion svn'/><title type='text'>关于 subversion(svn)</title><content type='html'>简单讲一下 svn 从创建 repository 到 checkout 的步骤：&lt;br /&gt;&lt;p&gt;1) svnadmin create /home/dev/work/repository&lt;/p&gt;&lt;p&gt;2)修改 repository/conf 下配置文件&lt;br /&gt;passwd 文件:&lt;br /&gt;[users]&lt;br /&gt;dev = dev&lt;/p&gt;&lt;p&gt;svnserve.conf 文件:&lt;br /&gt;[general]&lt;br /&gt;anon-access = read&lt;br /&gt;auth-access = write&lt;br /&gt;password-db = passwd&lt;/p&gt;&lt;p&gt;3)启动服务&lt;br /&gt;   svnserve -d -r /home/dev/work/repository &lt;/p&gt;&lt;p&gt;4)导入工作拷贝&lt;br /&gt;   import . svn://localhost/mytest --username=dev --password=dev -m"Init mytest directory"&lt;/p&gt;&lt;p&gt;5) 后续工作&lt;/p&gt;&lt;p&gt;svn checkout svn://localhost/mytest  &lt;/p&gt;&lt;p&gt;svn add&lt;/p&gt;&lt;p&gt;svn commit -m""&lt;/p&gt;&lt;p&gt;svn ls svn://localhost&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6711394287094598526?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6711394287094598526/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6711394287094598526' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6711394287094598526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6711394287094598526'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/02/subversionsvn.html' title='关于 subversion(svn)'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8966901468566590216</id><published>2008-02-17T18:32:00.002+08:00</published><updated>2008-02-17T18:38:10.362+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debugfs'/><title type='text'>拯救被删的文件</title><content type='html'>Linux 下误删文件后，怎么恢复呢？可以参考以下步骤：&lt;br /&gt;&lt;ol type="1"&gt;&lt;span class="postbody"&gt;&lt;li&gt; 第一时间将要拯救的 ext2 分区 (比如我的是挂到 /mnt/entertain 的 /dev/hda9) 挂载为只读模式:&lt;br /&gt;&lt;table align="center" border="0" cellpadding="3" cellspacing="1" width="90%"&gt;&lt;tbody&gt;&lt;tr&gt;    &lt;td&gt;&lt;span class="genmed"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td class="code"&gt; # umount /mnt/entertain&lt;br /&gt;# mount /dev/hda9 /mnt/entertain -o ro&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="postbody"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; 运行 debugfs 里的 lsdel 获取最近被删的文件列表 (lsdel 命令运行会需要一点时间, 请耐心等等):&lt;br /&gt;&lt;table align="center" border="0" cellpadding="3" cellspacing="1" width="90%"&gt;&lt;tbody&gt;&lt;tr&gt;    &lt;td&gt;&lt;span class="genmed"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td class="code"&gt; # debugfs /dev/hda9&lt;br /&gt;debugfs 1.35 (28-Feb-2004)&lt;br /&gt;debugfs: lsdel&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="postbody"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; 根据 lsdel 给出的列表中的时间, 想想自己是在什么时候删的, 这样可以找到相应的被删文件的 inode, 例如我是在昨晚 (01 月 22 日) 8 点多删的那个电影, 于是在 lsdel 列表里找到对应的这几个记录:&lt;br /&gt;&lt;table align="center" border="0" cellpadding="3" cellspacing="1" width="90%"&gt;&lt;tbody&gt;&lt;tr&gt;    &lt;td&gt;&lt;span class="genmed"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td class="code"&gt; 311298   1000 100644   1136    1/   1 Sat Jan 22 20:24:50 2005&lt;br /&gt;311299   1000 100644     62    1/   1 Sat Jan 22 20:24:51 2005&lt;br /&gt;311300   1000 100644 730628096 178552/178552 Sat Jan 22 20:24:51 2005&lt;br /&gt;311297   1000  40755      0    1/   1 Sat Jan 22 20:24:52 2005&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="postbody"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; 使用 dump 命令恢复数据到另一分区. 很明显, 这几项记录就是被我删掉的那个电影 (包括它的文件夹, 它的两个文本信息文件, 它自己 (第三行, 大小为 730628096 那个)). 我只需要电影本身, 于是查到它的 inode 值 (第一列) 为 311300, 接着在 debugfs 的提示符里使用 dump 命令将它拯救到另一个分区里 (比如我的 /mnt/share/dump)&lt;br /&gt;&lt;table align="center" border="0" cellpadding="3" cellspacing="1" width="90%"&gt;&lt;tbody&gt;&lt;tr&gt;    &lt;td&gt;&lt;span class="genmed"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;   &lt;td class="code"&gt; # debugfs /dev/hda9&lt;br /&gt;debugfs 1.35 (28-Feb-2004)&lt;br /&gt;debugfs: lsdel&lt;br /&gt;debugfs: dump &lt;311300&gt; /mnt/share/dump/movie.avi&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="postbody"&gt;&lt;br /&gt;留心括起 inode 值 311300 的那俩尖括号 &lt;&gt;, 这是必须的, 否则 debugfs 会告诉你找不到文件.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt; 重复 dump &lt;span style="font-style: italic;"&gt;&lt;inode_number&gt;&lt;/span&gt; &lt;span style="font-style: italic;"&gt;/path/to/file&lt;/span&gt; 命令一个个恢复你还想拯救的文件 &lt;/li&gt;&lt;/span&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8966901468566590216?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8966901468566590216/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8966901468566590216' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8966901468566590216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8966901468566590216'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2008/02/blog-post.html' title='拯救被删的文件'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3663160672481288809</id><published>2007-11-05T11:55:00.000+08:00</published><updated>2007-11-05T12:50:01.040+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='搬家'/><title type='text'>搬家</title><content type='html'>周末搬家，一个字“累”。&lt;br /&gt;        前天下午开始收拾东西，看着堆满客厅的箱子、包，还有卧室里好几个棉被、两衣柜的衣服，还有厨房一大堆。。。头大！经常收拾一会儿就不由自主的停下来发呆，折腾到晚上1点支撑不住了就休息了。第二天早上9点多就起床了，吃了一点面包然后接着干，终于卧室的东西收拾差不多了，看看时间快12点了，于是出去吃午饭，接着马不停蹄地出去找车。&lt;br /&gt;        中间的辛苦就不提了。给我搬家的车是一辆小面包车，我觉得这车应该没问题，东西能装下，结果等车厢快塞满时，才意识到错了，房间里面还有一大堆东西咧，只好让司机再跑一趟，当然运费也要加咯。第二趟仍然是满满地一车，可见东西之多啊！最后一趟搬过去的时候已经快8点了，司机的家人打来好几个电话，估计这么晚不放心，我让司机先回去了，看着卸下来的一大堆的东西，再次头大(因为这次只能我一人搬了)，没办法，挽起袖子搬呗。。。到后来我干脆把毛衣脱了，穿着一件秋衣，可依旧大汗淋漓。。。&lt;br /&gt;        在这里要感谢房东，还有那位司机，耽误司机不少时间，另外他也帮着搬上搬下的。&lt;br /&gt;        本来三个房间(厨房、客厅、卧室)的东西挤到了一个房间，可以想象是多么“壮观”，好了，别发愣了，埋头收拾。。。&lt;br /&gt;        什么时候才能有自己的家。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3663160672481288809?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3663160672481288809/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3663160672481288809' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3663160672481288809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3663160672481288809'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/11/blog-post.html' title='搬家'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3740118248619703417</id><published>2007-11-01T11:09:00.000+08:00</published><updated>2007-11-01T11:14:39.757+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIX'/><category scheme='http://www.blogger.com/atom/ns#' term='netstat'/><title type='text'>AIX 下使用 netstat 命令查进程，同事试出来的</title><content type='html'>AIX 下 netstat -na 可以看到其他机器和本系统建立的连接情况,但是我想知道和本系统的那个进程建立的连接,如何看?在 linux 下可以用 netstat -nap 能看到,但是 AIX 不支持。&lt;br /&gt;1.netstat  -Ana grep 地址,记住第一列的值(例如71daa608)&lt;br /&gt;2.rmsock  71daa608  tcpcb,会显示进程号&lt;br /&gt;3.ps -efgrep 进程号&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3740118248619703417?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3740118248619703417/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3740118248619703417' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3740118248619703417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3740118248619703417'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/11/aix-netstat.html' title='AIX 下使用 netstat 命令查进程，同事试出来的'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4859386509655147990</id><published>2007-10-31T10:44:00.000+08:00</published><updated>2007-10-31T10:51:47.551+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vlc'/><title type='text'>视频音频采集传输和播放</title><content type='html'>采集端&lt;br /&gt;1)媒体服务器：spook&lt;&lt;a href="http://www.litech.org/spook/"&gt;http://www.litech.org/spook/&lt;/a&gt;&gt;， 主要工作是编译和安装，并设置spook.conf&lt;br /&gt;2)USB摄像头驱动：spca5xx&lt;&lt;a href="http://mxhaard.free.fr/download.html"&gt;http://mxhaard.free.fr/download.html&lt;/a&gt;&gt;， 主要是安装驱动&lt;br /&gt;需确认声卡录音和回放功能正常。通过gnomemeeting进行声音的测试，可以矫正音频上面的一些问题。&lt;br /&gt;&lt;br /&gt;监控端&lt;br /&gt;1)MPlayer，主要工作是加入 LIVE555 的支持。 VLC，主要工作是编译安装&lt;br /&gt;2)源码下载：&lt;br /&gt;&lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/&lt;/a&gt; 相关依赖软件包&lt;br /&gt;&lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/spca5xx-v4l1goodbye.tar.gz"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/spca5xx-v4l1goodbye.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/spook-20050207.tar.bz2"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/spook-20050207.tar.bz2&lt;/a&gt;&lt;br /&gt;&lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/live555-latest.tar.gz"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/live555-latest.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/vlc-0.8.6c-5.lvn8.src.rpm"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/vlc-0.8.6c-5.lvn8.src.rpm&lt;/a&gt;&lt;br /&gt;&lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/MPlayer-1.0rc2.tar.bz2"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/MPlayer-1.0rc2.tar.bz2&lt;/a&gt;&lt;br /&gt;3)最简步骤&lt;br /&gt;在采集端，安装摄像头驱动 spca5xx;tar;make; 复制 spca5xx.ko 到 /lib/modules/2.6.16..../kernel/driver/video/ 执行 depmod -a 连接 USB 摄像头 打开alsamixer，开启MIC的音量控制。 安装spook。tar;configure;make 修改配置文件，可参考 &lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/spook.conf"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/spook.conf&lt;/a&gt;&lt;br /&gt;启动 ./spook spook.conf 在监控端，安装 MPlayer， &lt;a href="ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/MPlayer-1.0rc2-1.i386.rpm"&gt;ftp://ccoss:ccoss@192.168.28.1/pub/jiangchanglong/spook-video-audio/MPlayer-1.0rc2-1.i386.rpm&lt;/a&gt;&lt;br /&gt;播放 rtsp://192.168.28.181:7070/webcam 也可以安装 vlc，编译过程需要很多依赖包。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4859386509655147990?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4859386509655147990/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4859386509655147990' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4859386509655147990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4859386509655147990'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/10/blog-post_31.html' title='视频音频采集传输和播放'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8489376912322641788</id><published>2007-10-29T16:31:00.000+08:00</published><updated>2007-10-29T16:38:38.200+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='_cdecl'/><category scheme='http://www.blogger.com/atom/ns#' term='_stdcall'/><title type='text'>_stdcall, _cdecl,_pascal  and _fastcall --- calling conventions</title><content type='html'>1.如果函数func是__cdecl(默认调用方式)，调用时情况如下  &lt;br /&gt; int   main()    &lt;br /&gt;{    &lt;br /&gt;  //参数从右到左压栈   &lt;br /&gt;  push   4   &lt;br /&gt;  push   3   &lt;br /&gt;  push   2   &lt;br /&gt;  push   1    &lt;br /&gt;  call   func    &lt;br /&gt;  add   esp  0x10   //调用者恢复堆栈指针esp，4个参数的大小是0x10(4x4)   &lt;br /&gt;}     &lt;br /&gt;  &lt;br /&gt;2.如果函数func是__stdcall，调用时情况如下    &lt;br /&gt;int   main()  &lt;br /&gt;{    &lt;br /&gt;  //参数从右到左压栈    &lt;br /&gt;  push   4    &lt;br /&gt;  push   3   &lt;br /&gt;  push   2    &lt;br /&gt;  push   1    &lt;br /&gt;  call   func                 &lt;br /&gt;  //恢复堆栈指针由被调用者func负责，方法是"ret   0x10"   &lt;br /&gt;}        &lt;br /&gt;&lt;br /&gt;3.如果函数func是__pascal，调用情况如下   &lt;br /&gt;int   main()   &lt;br /&gt;{    &lt;br /&gt;  //参数从左到右压栈   &lt;br /&gt; push   1    &lt;br /&gt;push   2   &lt;br /&gt; push   3   &lt;br /&gt; push   4   &lt;br /&gt; call   func   &lt;br /&gt; //恢复堆栈指针由被调用者func负责，方法是"ret   0x10"   &lt;br /&gt; }        &lt;br /&gt;&lt;br /&gt;3.如果函数func是__fastcall，调用情况如下  &lt;br /&gt;  int   main()    &lt;br /&gt;{   &lt;br /&gt;  //参数先用ecx,   edx,   eax传递，然后再压栈    &lt;br /&gt;  //不进栈    &lt;br /&gt;  //(不知为什么，帮助中写的是从左到右传递的，    &lt;br /&gt;  //是不是错了，还是BCB6和BCB5的不一样)   &lt;br /&gt;  push   4    &lt;br /&gt;  mov   ecx 3    &lt;br /&gt;  mov   edx 2    &lt;br /&gt;  mov   eax 1    &lt;br /&gt;  call   func    &lt;br /&gt;  //恢复堆栈指针由被调用者func负责，方法是"ret   0x04",   &lt;br /&gt;  //因为只进栈一个参数，其余用寄存器传递，所以用ret   0x04恢复    &lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8489376912322641788?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8489376912322641788/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8489376912322641788' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8489376912322641788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8489376912322641788'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/10/stdcall-cdeclpascal-and-fastcall.html' title='_stdcall, _cdecl,_pascal  and _fastcall --- calling conventions'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-175593297893452320</id><published>2007-10-27T17:47:00.000+08:00</published><updated>2007-10-26T17:52:20.686+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malloc'/><category scheme='http://www.blogger.com/atom/ns#' term='stack'/><category scheme='http://www.blogger.com/atom/ns#' term='heap'/><title type='text'>Linux 中程序运行时存储器映像</title><content type='html'>每个程序都有一个运行时存储器映像:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Xh8cy6ODEJk/RyG4ijOcshI/AAAAAAAAABk/aivMa0xT-Qs/s1600-h/o_ctest2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5125580754635239954" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_Xh8cy6ODEJk/RyG4ijOcshI/AAAAAAAAABk/aivMa0xT-Qs/s320/o_ctest2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_Xh8cy6ODEJk/RyG4XDOcsgI/AAAAAAAAABc/ocRBAJeMWHY/s1600-h/o_ctest2.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;一个典型的ELF可执行目标文件信息布局如下：&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_Xh8cy6ODEJk/RyG4CDOcsfI/AAAAAAAAABU/UiDOvMyZ8Qo/s1600-h/o_ctest1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5125580196289491442" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_Xh8cy6ODEJk/RyG4CDOcsfI/AAAAAAAAABU/UiDOvMyZ8Qo/s320/o_ctest1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-175593297893452320?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/175593297893452320/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=175593297893452320' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/175593297893452320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/175593297893452320'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/10/linux.html' title='Linux 中程序运行时存储器映像'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xh8cy6ODEJk/RyG4ijOcshI/AAAAAAAAABk/aivMa0xT-Qs/s72-c/o_ctest2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1223229701155855534</id><published>2007-10-26T14:55:00.000+08:00</published><updated>2007-10-26T15:03:24.914+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c、stack'/><title type='text'>在程序内部获得 call back trace</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;打印出程序运行时的堆栈情况：&lt;/p&gt;&lt;p&gt;#include &lt;execinfo.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;&lt;br /&gt;/* Obtain a backtrace and print it to stdout.&lt;br /&gt;*/void print_trace(void)&lt;br /&gt;{   &lt;br /&gt;  void *array[10];   &lt;br /&gt;  size_t size;&lt;br /&gt;  char **strings;   &lt;br /&gt;  size_t i;&lt;br /&gt;  size = backtrace(array, 10);   &lt;br /&gt;  strings = backtrace_symbols(array, size);&lt;br /&gt;  printf("Obtained %zd&lt;br /&gt;  stack frames.\n", size);&lt;br /&gt;  for (i = 0; i &lt; size; i++)      &lt;br /&gt;    printf("%s\n", strings[i]);&lt;br /&gt;    free(strings);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* A dummy function to make the backtrace more interesting. */&lt;br /&gt;void dummy_function(void)&lt;br /&gt;{   &lt;br /&gt;  print_trace();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{   &lt;br /&gt;  dummy_function();   &lt;br /&gt;  return 0;&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;gcc -rdynamic -o t t.c&lt;/p&gt;&lt;p&gt;注：-rdynamic （其实时传给ld的参数），否则可能不会打印出函数名称，而代之以偏移量。&lt;/p&gt;&lt;p&gt;参考：&lt;a href="http://www.delorie.com/gnu/docs/glibc/libc_665.html"&gt;http://www.delorie.com/gnu/docs/glibc/libc_665.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1223229701155855534?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1223229701155855534/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1223229701155855534' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1223229701155855534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1223229701155855534'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/10/call-back-trace.html' title='在程序内部获得 call back trace'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8676093265790562692</id><published>2007-10-25T19:42:00.000+08:00</published><updated>2007-10-26T09:51:52.433+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gcc、c、gdb'/><title type='text'>调用函数时，寄存器到底发生了那些变化？</title><content type='html'>linux x86 gcc3.2.3 AT&amp;amp;T格式的汇编&lt;br /&gt;&lt;br /&gt;代码如下：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;void&lt;br /&gt;fun()&lt;br /&gt;{&lt;br /&gt;int a = 'A';&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;int b;&lt;br /&gt;fun();&lt;br /&gt;&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;编译&lt;br /&gt;gcc -g -o t t.c&lt;br /&gt;&lt;br /&gt;开始调试&lt;br /&gt;[sanool@sanool ex2]$ gdb t&lt;br /&gt;GNU gdb Red Hat Linux (6.0post-0.20031117.6rh)&lt;br /&gt;Copyright 2003 Free Software Foundation, Inc.&lt;br /&gt;GDB is free software, covered by the GNU General Public License, and you are&lt;br /&gt;welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;Type "show copying" to see the conditions.&lt;br /&gt;There is absolutely no warranty for GDB. Type "show warranty" for details.&lt;br /&gt;This GDB was configured as "i386-redhat-linux-gnu"...(no debugging symbols found)...Using host libthread_db library "/lib/tls/libthread_db.so.1".&lt;br /&gt;&lt;br /&gt;(gdb) disas main&lt;br /&gt;Dump of assembler code for function main:&lt;br /&gt;0x08048323 &lt;main+0&gt;: push %ebp&lt;br /&gt;0x08048324 &lt;main+1&gt;: mov %esp,%ebp&lt;br /&gt;0x08048326 &lt;main+3&gt;: sub $0x8,%esp&lt;br /&gt;0x08048329 &lt;main+6&gt;: and $0xfffffff0,%esp&lt;br /&gt;0x0804832c &lt;main+9&gt;: mov $0x0,%eax&lt;br /&gt;0x08048331 &lt;main+14&gt;: sub %eax,%esp&lt;br /&gt;0x08048333 &lt;main+16&gt;: call 0x8048314 &lt;fun&gt;&lt;br /&gt;0x08048338 &lt;main+21&gt;: leave&lt;br /&gt;0x08048339 &lt;main+22&gt;: ret&lt;br /&gt;0x0804833a &lt;main+23&gt;: nop&lt;br /&gt;0x0804833b &lt;main+24&gt;: nop&lt;br /&gt;End of assembler dump.&lt;br /&gt;(gdb) disas fun&lt;br /&gt;Dump of assembler code for function fun:&lt;br /&gt;0x08048314 &lt;fun+0&gt;: push %ebp&lt;br /&gt;0x08048315 &lt;fun+1&gt;: mov %esp,%ebp&lt;br /&gt;0x08048317 &lt;fun+3&gt;: sub $0x4,%esp&lt;br /&gt;0x0804831a &lt;fun+6&gt;: movl $0x41,0xfffffffc(%ebp)&lt;br /&gt;0x08048321 &lt;fun+13&gt;: leave&lt;br /&gt;0x08048322 &lt;fun+14&gt;: ret&lt;br /&gt;End of assembler dump.&lt;br /&gt;&lt;br /&gt;解释如下：&lt;br /&gt;**当程序下一步执行 0x08048333 &lt;main+16&gt;: call 0x8048314 &lt;fun&gt;时&lt;br /&gt;esp = 0xbfffe660 （运行时）&lt;br /&gt;ebp = 0xbfffe668 （运行时）&lt;br /&gt;eip = 0x08048333&lt;br /&gt;&lt;br /&gt;**然后执行 call 0x8048314&lt;fun&gt; 也就是&lt;br /&gt;push %eip ( 相当于 sub $4 %esp 再 mov %eip %esp )&lt;br /&gt;movl $0x8048314, %eip&lt;br /&gt;&lt;br /&gt;则0xbfffe65c 处为 eip = 0x08048338&lt;br /&gt;且esp = 0xbfffe65c&lt;br /&gt;eip = 0x8048314&lt;br /&gt;ebp = 0xbfffe668&lt;br /&gt;&lt;br /&gt;**执行0x08048314 &lt;fun+0&gt;: push %ebp后&lt;br /&gt;esp = 0xbfffe658&lt;br /&gt;ebp = 0xbfffe668&lt;br /&gt;0xbfffe658处的值为 ebp = 0xbfffe668&lt;br /&gt;&lt;br /&gt;**继续0x08048315 &lt;fun+1&gt;: mov %esp,%ebp&lt;br /&gt;将esp的值赋值给ebp&lt;br /&gt;即 ebp = esp = 0xbfffe658&lt;br /&gt;&lt;br /&gt;**开始执行 0x08048321 &lt;fun+13&gt;: leave 前&lt;br /&gt;eip = 0x08048321&lt;br /&gt;ebp = 0xbfffe658&lt;br /&gt;esp = 0xbfffe654&lt;br /&gt;&lt;br /&gt;**开始执行 0x08048321 &lt;fun+13&gt;: leave 时&lt;br /&gt;即进行&lt;br /&gt;movl %ebp, %esp ( 即 esp = ebp = 0xbfffe658)&lt;br /&gt;pop %ebp ( 也就是 mov %esp,%ebp 再 add $4,%esp )&lt;br /&gt;&lt;br /&gt;此时 ebp = 0xbfffe668 回到了原函数的ebp值，&lt;br /&gt;&lt;br /&gt;**再执行 0x08048322 &lt;fun+14&gt;: ret&lt;br /&gt;即 pop %eip&lt;br /&gt;( 也就是 mov %esp,%eip 再 add $4,%esp )&lt;br /&gt;此时 eip = 0x08048338&lt;br /&gt;程序继续执行 main 中的 leave&lt;br /&gt;&lt;br /&gt;调用fun函数结束&lt;br /&gt;&lt;br /&gt;补充：&lt;br /&gt;i reg   //观察寄存器的值 (注意ebp esp eip)&lt;br /&gt;&lt;br /&gt;x/20x $esp   //查看内存中$esp(如0xbfffef50)后面的数据内容&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8676093265790562692?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8676093265790562692/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8676093265790562692' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8676093265790562692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8676093265790562692'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/10/blog-post_25.html' title='调用函数时，寄存器到底发生了那些变化？'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-673737640134972319</id><published>2007-10-15T15:49:00.000+08:00</published><updated>2007-10-15T15:53:58.374+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='大规模、并行计算、集群'/><title type='text'>大规模并行计算</title><content type='html'>http://code.google.com/edu 可获得华盛顿大学编写的所有课程资料，以及其他用于帮助学习这一前沿技术的工具和资源。&lt;br /&gt;如果想了解此类项目的意义，请观看系列&lt;a href="http://code.google.com/edu/content/submissions/mapreduce-minilecture/listing.html"&gt;讲座视频&lt;/a&gt;（共五部分，原是谷歌工程部实习生的学习资料），其中介绍了大规模集群计算的一些基本概念。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-673737640134972319?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/673737640134972319/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=673737640134972319' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/673737640134972319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/673737640134972319'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/10/blog-post.html' title='大规模并行计算'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3614925009260477465</id><published>2007-10-09T11:39:00.000+08:00</published><updated>2007-10-09T16:50:21.839+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cut、tr'/><title type='text'>cut、tr 等命令格式化字符串</title><content type='html'>CurreIP=$(wget http://freedns.afraid.org/dynamic/check.php -o /dev/null -O /dev/stdout | grep Detected | cut -d : -f 2 | cut -d '&lt;' -f 1 | tr -d " ")&lt;br /&gt;&lt;br /&gt;cat check.php :&lt;br /&gt;&lt;br /&gt;Detected IP : 210.73.65.34, 210.73.65.77&lt;br /&gt;HTTP_CLIENT_IP :&lt;br /&gt;HTTP_X_FORWARDED_FOR : 210.73.65.34, 210.73.65.77&lt;br /&gt;REMOTE_ADDR : 72.20.25.132&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3614925009260477465?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3614925009260477465/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3614925009260477465' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3614925009260477465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3614925009260477465'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/10/cuttr.html' title='cut、tr 等命令格式化字符串'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-2051429558204697248</id><published>2007-09-18T16:01:00.000+08:00</published><updated>2007-09-18T16:09:31.174+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ctags、cscope、vim'/><title type='text'>vim + cscope/ctags</title><content type='html'>生成符号索引文件: cscope -Rbkq&lt;br /&gt;这个命令会生成三个文件：cscope.out, cscope.in.out, cscope.po.out。&lt;br /&gt;上面所用到的命令参数，含义如下：&lt;br /&gt;&lt;br /&gt;-R: 在生成索引文件时，搜索子目录树中的代码&lt;br /&gt;-b: 只生成索引文件，不进入cscope的界面&lt;br /&gt;-k: 在生成索引文件时，不搜索/usr/include目录&lt;br /&gt;-q: 生成cscope.in.out和cscope.po.out文件，加快cscope的索引速度&lt;br /&gt;&lt;br /&gt;按照cscope手册上提供的方法，先产生一个文件列表，然后让cscope为这个列表中的每个文件都生成索引。&lt;br /&gt;为了方便使用，编写了下面的脚本来更新cscope和ctags的索引文件：&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;find . -name "*.h" -o -name "*.c" -o -name "*.cc" &gt; cscope.files&lt;br /&gt;cscope -bkq -i cscope.files&lt;br /&gt;ctags -R&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;这个脚本，首先使用find命令，查找当前目录及子目录中所有后缀名为".h", ".c"和".cc"的文件，并把查找结果重定向到文件cscope.files中，然后cscope根据cscope.files中的所有文件，生成符号索引文件。最后一条命令使用ctags命令，生成一个tags文件。&lt;br /&gt;&lt;br /&gt;cscope的主页在：http://cscope.sourceforge.net&lt;br /&gt;vim的主页：http://www.vim.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-2051429558204697248?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/2051429558204697248/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=2051429558204697248' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2051429558204697248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/2051429558204697248'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/09/vim-cscopectags.html' title='vim + cscope/ctags'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8575814989635585406</id><published>2007-09-12T14:38:00.000+08:00</published><updated>2007-09-12T14:42:48.184+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malloc'/><title type='text'>malloc(0) 的问题</title><content type='html'>&lt;strong&gt;&lt;br /&gt;char *p;&lt;br /&gt;p = (char *)malloc(0);&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;以上代码没有错误，但 p 的分配的空间大小是多少呢，不确定?&lt;br /&gt;至于为什么可以分配成功，看看 malloc 的说明就明白了：&lt;br /&gt;&lt;br /&gt;&lt;em&gt;malloc returns a void pointer to the allocated space,or null if there is insufficient memory available.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8575814989635585406?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8575814989635585406/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8575814989635585406' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8575814989635585406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8575814989635585406'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/09/malloc0.html' title='malloc(0) 的问题'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7579885564956661956</id><published>2007-09-07T08:45:00.000+08:00</published><updated>2007-09-07T08:51:38.784+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='领带'/><title type='text'>领带的几种打法</title><content type='html'>&lt;a href="http://primerlife.bloggerspaces.com/uploaded_images/1129031747572860_file-711986.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://primerlife.bloggerspaces.com/uploaded_images/1129031747572860_file-711982.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;呵呵，还不会呢，以后应该用的着。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7579885564956661956?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7579885564956661956/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7579885564956661956' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7579885564956661956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7579885564956661956'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/09/blog-post.html' title='领带的几种打法'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4178349997603388441</id><published>2007-09-06T10:17:00.000+08:00</published><updated>2007-09-06T10:30:24.065+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lspci'/><title type='text'>查看pci设备的方法?!</title><content type='html'>大家都知道可以使用 lspci 查看pci设备信息。PCI设备是其特定的ID号来标示的，包含vendor id, device id, subsystem等，这个ID是由一个组织统管并给各大硬件厂商分配。一般来说，一个精确的ID就唯一得确定了一种PCI设置，因此通过读取此ID就可以得知此设备究竟是什么东西。Linux发行版中的lspci工具就是做这个的。但由于发行版发行时间问题，系统自带的ID-设备对硬数据库可能比较陈旧，导致识别不出新的设备来，这是就会出现unknown device，如同上面我们看到的结果。遇到此类情况，解决方法是使用新的IDs数据库。对于Linux，有一个项目是构建公开的ID数据库，在这里：http://pciids.sourceforge.net/，可以在此网站直接下载其数据库http://pciids.sourceforge.net/pci.ids到本地，然后使用命令lspci  -i path-to-pci.ids 来指定使用下载到的ID数据库来鉴别设备。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4178349997603388441?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4178349997603388441/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4178349997603388441' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4178349997603388441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4178349997603388441'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/09/pci.html' title='查看pci设备的方法?!'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5457888193192834217</id><published>2007-08-27T17:57:00.000+08:00</published><updated>2007-08-27T18:05:11.562+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cat'/><category scheme='http://www.blogger.com/atom/ns#' term='sort'/><category scheme='http://www.blogger.com/atom/ns#' term='sed'/><title type='text'>汇总统计</title><content type='html'>1.汇总&lt;br /&gt;样本文件,这里暂时称为 file1，内容如下:&lt;br /&gt;a&lt;br /&gt;a&lt;br /&gt;b&lt;br /&gt;b&lt;br /&gt;a&lt;br /&gt;b&lt;br /&gt;c&lt;br /&gt;a&lt;br /&gt;d&lt;br /&gt;b&lt;br /&gt;b&lt;br /&gt;b&lt;br /&gt;d&lt;br /&gt;a&lt;br /&gt;c&lt;br /&gt;--------------------&lt;br /&gt;执行以下命令：&lt;br /&gt;cat file1 | sort  // 按照字母顺序排序&lt;br /&gt;cat file1 | sort | uniq // 按照字母顺序排序且去除重复项&lt;br /&gt;cat file1 | sort | uniq -c // 按照字母顺序排序且去除重复项，在每行前列出重复项的个数&lt;br /&gt;cat file1 | sort | uniq -c | sort -rn // 在每行前列出重复项的个数,按个数排序且去除重复项&lt;br /&gt;&lt;br /&gt;2.单词统计&lt;br /&gt;cat file3&lt;br /&gt;cat file3 | sed -e "s/ /\n/g"&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort | uniq -c&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort | uniq -c | sort -rn&lt;br /&gt;&lt;br /&gt;取头尾&lt;br /&gt;&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort | uniq -c | sort -rn | head&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort | uniq -c | sort -rn | head -n5&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort | uniq -c | sort -rn | tail&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort | uniq -c | sort -rn | tail -n5&lt;br /&gt;&lt;br /&gt;统计词(总数,不重复的个数)有好几种办法&lt;br /&gt;&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | sort | uniq | wc -l&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | wc -l&lt;br /&gt;&lt;br /&gt;cat file3 | wc&lt;br /&gt;cat file3 | wc | cut -d" " -f2&lt;br /&gt;cat file3 | wc -w&lt;br /&gt;cat file3 | sed -e "s/ /\n/g" | wc -l&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5457888193192834217?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5457888193192834217/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5457888193192834217' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5457888193192834217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5457888193192834217'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/08/blog-post.html' title='汇总统计'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7240966222118510564</id><published>2007-07-16T22:09:00.000+08:00</published><updated>2007-07-16T22:23:34.473+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian、VMware'/><title type='text'>在 Debian 下安装 VMware Workstation</title><content type='html'>前段时间在自己的本本上安装 VMware 时遇到了两个问题，找了不少资料好歹解决了，现在记录下来了。&lt;br /&gt;我本本的环境如下：&lt;br /&gt;dev@debian:~$ cat /etc/debian_version &lt;br /&gt;lenny/sid&lt;br /&gt;dev@debian:~$ uname -a&lt;br /&gt;Linux debian 2.6.18.4hzy #1 Sat Jun 30 21:28:21 CST 2007 i686 GNU/Linux&lt;br /&gt;&lt;br /&gt;VMware 安装文件：VMware-workstation-5.5.1-19175.tar.gz&lt;br /&gt;&lt;br /&gt;由于我自己编译的内核，在安装的时候总是提示内核版本不一致，无奈我只好在 /usr/src/linux/include/linux/version.h 中增加 #define UTS_RELEASE "2.6.18.4hzy"&lt;br /&gt;继续安装又提示 “error: conflicting types for 'poll_initwait'”&lt;br /&gt;到 http://ftp.cvut.cz/vmware/ 下载最新的 patch 并安装就 Ok 了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7240966222118510564?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7240966222118510564/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7240966222118510564' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7240966222118510564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7240966222118510564'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/07/debian-vmware-workstation.html' title='在 Debian 下安装 VMware Workstation'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1153193970841085373</id><published>2007-07-14T23:50:00.000+08:00</published><updated>2007-07-15T00:04:50.178+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tapioca、gtalk'/><title type='text'>Tapioca - Gtalk for Linux</title><content type='html'>New release of &lt;a href="http://tapioca-voip.sourceforge.net/wiki/index.php/Tapioca"&gt;Tapioca&lt;/a&gt;, VoIP Linux client, fully supports GTalk voice features, thanks to libjingle library released by Google. One can wonder what this will bring in the future, together with Skype almost abandoning the Linux client and that in many parts of the world people accustomed to Linux are the ones who recommend software...&lt;br /&gt;这是 tapioca 的 &lt;a href="http://tapioca-voip.sourceforge.net/wiki/index.php/Architecture_Overview"&gt;Architecture Overview&lt;/a&gt;，其中 Gtalk 的语音支持主要靠 &lt;a href="http://code.google.com/apis/talk/libjingle/index.html"&gt;libjingle&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1153193970841085373?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1153193970841085373/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1153193970841085373' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1153193970841085373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1153193970841085373'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/07/tapioca-gtalk-for-linux.html' title='Tapioca - Gtalk for Linux'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5488512480038503712</id><published>2007-07-13T09:21:00.000+08:00</published><updated>2007-07-13T09:24:07.937+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thead pool、负载均衡'/><title type='text'>linux 线程池和负载均衡</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5488512480038503712?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5488512480038503712/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5488512480038503712' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5488512480038503712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5488512480038503712'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/07/linux.html' title='linux 线程池和负载均衡'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7620157763622630540</id><published>2007-07-11T09:28:00.000+08:00</published><updated>2007-07-11T10:18:25.678+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RedHat、Oracle9i'/><title type='text'>在RedHat8.0上安装Oracle9i数据库</title><content type='html'>1.安装好RedHat8.0操作系统，确保安装了以下的RPM开发包&lt;br /&gt;gcc&lt;br /&gt;cpp&lt;br /&gt;glibc-devel&lt;br /&gt;compat-libstdc++&lt;br /&gt;glibc-kernheaders&lt;br /&gt;binutils&lt;br /&gt;可以使用命令来查看是否已安装了这些包&lt;br /&gt;rpm –q gcc cpp compat-libstdc++ glibc-devel glibc-kernheaders binutils&lt;br /&gt;&lt;br /&gt;2.从Oracle官方网站下载Oracle9i安装文件并使用如下命令解包&lt;br /&gt;(ftp://ftp.lib.tsinghua.edu.cn/)&lt;br /&gt;zcat lnx_920_disk1.cpio.gz | cpio –idmv&lt;br /&gt;zcat lnx_920_disk2.cpio.gz | cpio –idmv&lt;br /&gt;zcat lnx_920_disk3.cpio.gz | cpio –idmv&lt;br /&gt;然后会有Disk1 Disk2 Disk3三个子目录。&lt;br /&gt;&lt;br /&gt;3.设置内核参数&lt;br /&gt;echo `expr 1024 \* 1024 \* 512` &gt; /proc/sys/kernel/shmmax，对于shmmax文件的修改，系统重新启动后会复位。可以通过修改 /etc/sysctl.conf 使更改永久化&lt;br /&gt;编辑/etc/sysctl.conf&lt;br /&gt;kernel.shmmax=536870912&lt;br /&gt;kernel.shmmax的计算方法为：kernel.shmmax = 1024*1024*RAM(M)/2 (至少)&lt;br /&gt;&lt;br /&gt;接下来，打开/etc/security/limits.conf文件，将下列数据添加到 limits.conf的末尾并保存：&lt;br /&gt;oracle soft nofile 65536&lt;br /&gt;oracle hard nofile 65536&lt;br /&gt;oracle soft nproc 16384&lt;br /&gt;oracle hard nproc 16384&lt;br /&gt;&lt;br /&gt;这是设置Oracle对文件的要求。&lt;br /&gt;&lt;br /&gt;4.创建Oracle用户帐号和安装目录&lt;br /&gt;在shell下,作为root&lt;br /&gt;&lt;br /&gt;groupadd dba&lt;br /&gt;groupadd oinstall&lt;br /&gt;useradd –g oinstall –G dba oracle&lt;br /&gt;passwd oracle&lt;br /&gt;&lt;br /&gt;mkdir /opt/oracle&lt;br /&gt;mkdir /opt/oracle/product&lt;br /&gt;mkdir /opt/oracle/product/9.2.0&lt;br /&gt;chown –R oracle.oinstall /opt/oracle&lt;br /&gt;mkdir /var/oracle&lt;br /&gt;chown oracle.dba /var/opt/oracle&lt;br /&gt;chmod 755 /var/opt/oracle&lt;br /&gt;&lt;br /&gt;5.设置环境变量&lt;br /&gt;编辑/home/oracle/.bash_profile文件，添加下列行&lt;br /&gt;&lt;br /&gt;export ORACLE_BASE=/opt/oracle&lt;br /&gt;export ORACLE_HOME=$ORACLE_BASE/product/9.2.0&lt;br /&gt;export LD_ASSUME_KERNEL=2.4.2&lt;br /&gt;export ORACLE_SID=ora9i&lt;br /&gt;export ORACLE_TERM=xterm&lt;br /&gt;$ORACLE_HOME/network/admin&lt;br /&gt;export NLS_LANG=AMERICAN_AMERICAN.ZHS16GBK&lt;br /&gt;export ORA_NLS33=$ORACLE_HOME/ocommon/nls/asmin/data&lt;br /&gt;LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib&lt;br /&gt;LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib&lt;br /&gt;export LD_LIBRARY_PATH&lt;br /&gt;&lt;br /&gt;export PATH=$PATH:$ORACLE_HOME/bin&lt;br /&gt;&lt;br /&gt;CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib&lt;br /&gt;CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib&lt;br /&gt;export CLASSPATH&lt;br /&gt;&lt;br /&gt;6.安装&lt;br /&gt;进入Disk1目录&lt;br /&gt;./runInstaller&lt;br /&gt;当link进行到61%时出现一个关于ins_oemagent错误，选择ignore，安装完后修复&lt;br /&gt;当link进行到84%时出现一个关于ins_ctx错误，编辑$ORACLE_HOME/ctx/lib/env_ctx.mk文件，把$(LDLIBFLAG)dl加到以下位置&lt;br /&gt;INSO_LINK=-L$(CTXLIB)$ (LDLIBFLAG)m $(LDLIBFLAG)dl处。&lt;br /&gt;安装完成&lt;br /&gt;&lt;br /&gt;修复第一个错误&lt;br /&gt;在shell下，oracle用户&lt;br /&gt;cd $ORACLE_HOME/network/lib&lt;br /&gt;make –f ins_client.mk install&lt;br /&gt;编辑$ORACLE_HOME/ctx/lib/ins_ctx文件&lt;br /&gt;13—14行处&lt;br /&gt;$(LINK) $(CTXHXOBJ) $(INSO_LINK)&lt;br /&gt;为&lt;br /&gt;$(LINK) –ldl $(CTXHXOBJ) $(INSO_LINK)&lt;br /&gt;make -f ins_client.mk install&lt;br /&gt;&lt;br /&gt;7.启动数据库、监听程序、web server&lt;br /&gt;启动数据库&lt;br /&gt;Sqlplus “ / as sysdba”&lt;br /&gt;SQL&gt;startup&lt;br /&gt;&lt;br /&gt;启动监听程序&lt;br /&gt;lsnrctl&lt;br /&gt;&lt;br /&gt;启动web server&lt;br /&gt;cd $ORACLE_HOME/Apache/Apache/bin&lt;br /&gt;./startJServ.sh&lt;br /&gt;&lt;br /&gt;8.手工建库&lt;br /&gt;先写个initcihz.ora ，放到dbs，如果你的sid是cihz的话&lt;br /&gt;启动instance：&lt;br /&gt;SQL&gt; startup nomount&lt;br /&gt;ORACLE instance started.&lt;br /&gt;&lt;br /&gt;Total System Global Area 70062220 bytes&lt;br /&gt;Fixed Size 450700 bytes&lt;br /&gt;Variable Size 62914560 bytes&lt;br /&gt;Database Buffers 6553600 bytes&lt;br /&gt;Redo Buffers 143360 bytes&lt;br /&gt;SQL&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt; CREATE DATABASE cihz&lt;br /&gt;USER SYS IDENTIFIED BY cihz&lt;br /&gt;USER SYSTEM IDENTIFIED BY cihz&lt;br /&gt;LOGFILE GROUP 1 ('/opt/oracle/oradata/cihz/redo01a.log','/opt/oracle/oradata/cihz/redo01b.log') SIZE 5M,&lt;br /&gt;GROUP 2 ('/opt/oracle/oradata/cihz/redo02a.log','/opt/oracle/oradata/cihz/redo02b.log') SIZE 5M,&lt;br /&gt;GROUP 3 ('/opt/oracle/oradata/cihz/redo03a.log','/opt/oracle/oradata/cihz/redo03b.log') SIZE 5M&lt;br /&gt;MAXLOGFILES 15&lt;br /&gt;MAXLOGHISTORY 10&lt;br /&gt;MAXDATAFILES 1024&lt;br /&gt;MAXINSTANCES 255&lt;br /&gt;CHARACTER SET ZHS16GBK&lt;br /&gt;DATAFILE '/opt/oracle/oradata/cihz/system01.dbf' SIZE 500M&lt;br /&gt;EXTENT MANAGEMENT LOCAL&lt;br /&gt;DEFAULT TEMPORARY TABLESPACE temp&lt;br /&gt;TEMPFILE '/opt/oracle/oradata/cihz/temp01.dbf'&lt;br /&gt;SIZE 500M REUSE&lt;br /&gt;UNDO TABLESPACE undotbs&lt;br /&gt;DATAFILE '/opt/oracle/oradata/cihz/undo01.dbf'&lt;br /&gt;SIZE 500M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED;&lt;br /&gt;2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE DATABASE cihz&lt;br /&gt;*&lt;br /&gt;ERROR at line 1:&lt;br /&gt;ORA-30014: operation only supported in Automatic Undo Management mode&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;出错了，在init里增加如下：&lt;br /&gt;&lt;br /&gt;UNDO_MANAGEMENT=AUTO&lt;br /&gt;UNDO_TABLESPACE=undotbs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt; shutdown&lt;br /&gt;ORA-01507: database not mounted&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ORACLE instance shut down.&lt;br /&gt;SQL&gt; startup nomount&lt;br /&gt;ORACLE instance started.&lt;br /&gt;&lt;br /&gt;Total System Global Area 70062220 bytes&lt;br /&gt;Fixed Size 450700 bytes&lt;br /&gt;Variable Size 62914560 bytes&lt;br /&gt;Database Buffers 6553600 bytes&lt;br /&gt;Redo Buffers 143360 bytes&lt;br /&gt;SQL&gt; CREATE DATABASE cihz&lt;br /&gt;USER SYS IDENTIFIED BY cihz&lt;br /&gt;USER SYSTEM IDENTIFIED BY cihz&lt;br /&gt;LOGFILE GROUP 1 ('/opt/oracle/oradata/cihz/redo01a.log','/opt/oracle/oradata/cihz/redo01b.log') SIZE 5M,&lt;br /&gt;GROUP 2 ('/opt/oracle/oradata/cihz/redo02a.log','/opt/oracle/oradata/cihz/redo02b.log') SIZE 5M,&lt;br /&gt;GROUP 3 ('/opt/oracle/oradata/cihz/redo03a.log','/opt/oracle/oradata/cihz/redo03b.log') SIZE 5M&lt;br /&gt;MAXLOGFILES 15&lt;br /&gt;MAXLOGHISTORY 10&lt;br /&gt;MAXDATAFILES 1024&lt;br /&gt;MAXINSTANCES 255&lt;br /&gt;CHARACTER SET ZHS16GBK&lt;br /&gt;DATAFILE '/opt/oracle/oradata/cihz/system01.dbf' SIZE 500M&lt;br /&gt;EXTENT MANAGEMENT LOCAL&lt;br /&gt;DEFAULT TEMPORARY TABLESPACE temp&lt;br /&gt;TEMPFILE '/opt/oracle/oradata/cihz/temp01.dbf'&lt;br /&gt;SIZE 500M REUSE&lt;br /&gt;UNDO TABLESPACE undotbs&lt;br /&gt;DATAFILE '/opt/oracle/oradata/cihz/undo01.dbf'&lt;br /&gt;SIZE 500M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED;&lt;br /&gt;2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE DATABASE cihz&lt;br /&gt;*&lt;br /&gt;ERROR at line 1:&lt;br /&gt;ORA-01213: MAXINSTANCES may not exceed 63&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;*&lt;br /&gt;ERROR at line 1:&lt;br /&gt;ORA-01501: CREATE DATABASE failed&lt;br /&gt;ORA-01222: MAXINSTANCES of 63 requires MAXLOGFILES be at least 126, not 15&lt;br /&gt;&lt;br /&gt;按照错误提示修改过来就行了。&lt;br /&gt;&lt;br /&gt;建立其他表空间：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLESPACE users LOGGING&lt;br /&gt;DATAFILE '/opt/oracle/oradata/cihz/users01.dbf'&lt;br /&gt;SIZE 100M&lt;br /&gt;EXTENT MANAGEMENT LOCAL;&lt;br /&gt;&lt;br /&gt;CREATE TABLESPACE tools LOGGING&lt;br /&gt;DATAFILE '/opt/oracle/oradata/cihz/tools01.dbf'&lt;br /&gt;SIZE 100M&lt;br /&gt;EXTENT MANAGEMENT LOCAL;&lt;br /&gt;&lt;br /&gt;接下来的数据字典：&lt;br /&gt;@/opt/oracle/product/9.2.0.1/rdbms/admin/catalog.sql&lt;br /&gt;@/opt/oracle/product/9.2.0.1/rdbms/admin/catproc.sql&lt;br /&gt;&lt;br /&gt;9.测试&lt;br /&gt;&lt;br /&gt;CREATE TABLESPACE cihz&lt;br /&gt;DATAFILE '/opt/oracle/oradata/cihz/cihz01.dbf'&lt;br /&gt;SIZE 500M ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;create user cihz identified by cihz&lt;br /&gt;default tablespace cihz&lt;br /&gt;TEMPORARY TABLESPACE temp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt; conn cihz/cihz&lt;br /&gt;ERROR:&lt;br /&gt;ORA-01045: user CIHZ lacks CREATE SESSION privilege; logon denied&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Warning: You are no longer connected to ORACLE.&lt;br /&gt;SQL&gt; conn system/cihz&lt;br /&gt;Connected.&lt;br /&gt;SQL&gt; grant connect ,resource to cihz;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&gt; conn cihz/cihz&lt;br /&gt;Error accessing PRODUCT_USER_PROFILE&lt;br /&gt;Warning: Product user profile information not loaded!&lt;br /&gt;You may need to run PUPBLD.SQL as SYSTEM&lt;br /&gt;Connected.&lt;br /&gt;SQL&gt;&lt;br /&gt;&lt;br /&gt;SQL&gt; conn system/cihz&lt;br /&gt;Connected.&lt;br /&gt;SQL&gt; @/opt/oracle/product/9.2.0.1/sqlplus/admin/pupbld.sql&lt;br /&gt;DROP SYNONYM PRODUCT_USER_PROFILE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Synonym created.&lt;br /&gt;&lt;br /&gt;SQL&gt; conn cihz/cihz&lt;br /&gt;Connected.&lt;br /&gt;SQL&gt; create table test(&lt;br /&gt;2 a number,&lt;br /&gt;3 b varchar2(20),&lt;br /&gt;4 c blob&lt;br /&gt;5 );&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into test (a,b)values (2,'asf');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;注：&lt;br /&gt;1)如果是用光盘安装，不要进入Disk1目录再执行installer，最好是用/Disk1/installer &amp;，否则当提示要换盘的时候会因为你有个终端窗口处于此目录下而不能umount光驱。&lt;br /&gt;2)swap分区要尽量大点，以免到了创建数据库阶段的时候，出现“out of momery”的错误。&lt;br /&gt;&lt;br /&gt;参考文档：&lt;br /&gt;http://www.puschitz.com/&lt;br /&gt;http://www.eygle.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7620157763622630540?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7620157763622630540/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7620157763622630540' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7620157763622630540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7620157763622630540'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/07/redhat90oracle9i.html' title='在RedHat8.0上安装Oracle9i数据库'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6778485178282930356</id><published>2007-07-10T15:00:00.000+08:00</published><updated>2007-07-10T15:00:50.112+08:00</updated><title type='text'>Google 黑板报 -- Google 中国的博客网志: 数学之美 系列一 -- 统计语言模型</title><content type='html'>&lt;a href="http://googlechinablog.com/2006/04/blog-post.html"&gt;Google 黑板报 -- Google 中国的博客网志: 数学之美 系列一 -- 统计语言模型&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总共有二十一个系列，讲的很清楚，让我更加惊叹于数学的神奇啦:P 希望抽空看完。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6778485178282930356?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://googlechinablog.com/2006/04/blog-post.html' title='Google 黑板报 -- Google 中国的博客网志: 数学之美 系列一 -- 统计语言模型'/><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6778485178282930356/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6778485178282930356' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6778485178282930356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6778485178282930356'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/07/google-google.html' title='Google 黑板报 -- Google 中国的博客网志: 数学之美 系列一 -- 统计语言模型'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6669631093533294337</id><published>2007-07-09T16:38:00.000+08:00</published><updated>2007-07-09T16:39:32.838+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='水木、GNOME 、solaris'/><title type='text'></title><content type='html'>我在水木上看到“SUN 公司 GNOME 技术讲座”的帖子，于是发信给公司的一位同事，又约好另一位同事，然后决定一同前往。于6.27号下午三人风雨兼程地赶到了清华的 FIT 楼，由于开始找错了路，在大雨中走了3分钟才到达目的地，同事戏称为 FIT 楼为 Faint 楼 :)&lt;br /&gt;&lt;br /&gt;讲座是 SUN 工程研究院的组织的，主讲人： &lt;a href="http://blogs.sun.com/harry/category/About+Me"&gt;Harry&lt;/a&gt; 和 Tim，议题1： GNOME Destkop Development Platform Overview，介绍了 GNOME 整个构架中的各个部分。议题2： HAL &amp; D-BUS 介绍了 HAL 和 D-BUS 及其在桌面系统中的应用。 Open solaris 系统中，HAL 的下一层叫 DevFsAdm，不像 Linux 中是 udev/hotplug 等，因为他们各自的内核不同。&lt;br /&gt;&lt;br /&gt;整个讲座只是一个概要性的介绍，并无深入到具体的细节。&lt;br /&gt;&lt;br /&gt;了解到 SUN 在 GNOME community 中是做了并正在做很多贡献的，比如 Accessibility 技术（ ATK/Gail/Orca），GDM 都是 SUN 的工程师在开发和维护的，当然，在其它很多 GNOME 的组件中他们也贡献了很多 patch 等，至少我在 Eovlution 的某些版本中就看到了来自 SUN 的 patch 记录。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6669631093533294337?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6669631093533294337/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6669631093533294337' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6669631093533294337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6669631093533294337'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/07/sun-gnome-fit-3-fit-faint-sun-harry.html' title=''/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4760481006214914249</id><published>2007-06-29T16:50:00.000+08:00</published><updated>2007-06-29T17:18:56.999+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SELinux、内核'/><title type='text'>内部讲座</title><content type='html'>今天下午听了两位同事的讲座，两个主题：一、&lt;a href="http://www.nsa.gov/selinux/"&gt;SELinux&lt;/a&gt;，工作原理；二、内核相关知识(主要包括进程调度，内存管理，网卡工作原理等)，收获挺多的，以后再看相关的文档时，会比较清楚了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4760481006214914249?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4760481006214914249/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4760481006214914249' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4760481006214914249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4760481006214914249'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/06/blog-post_29.html' title='内部讲座'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-340556241043627398</id><published>2007-06-29T09:32:00.000+08:00</published><updated>2007-06-29T09:42:02.987+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian、Linux、dynamic tick'/><title type='text'>PowerTop</title><content type='html'>&lt;a href="http://www.linuxpowertop.org/"&gt;PowerTop&lt;/a&gt;可以测出是哪些程序常常把 CPU 从睡眠中唤醒，只要有办法去掉这些 timer，搭配 linux 2.6.21 中的新特性 dynamic tick，可以让电脑在不工作的时候可以好好休息，延长工作时间。&lt;br /&gt;在 debian/sid 中只需要&lt;br /&gt;apt-get install powertop&lt;br /&gt;就可以安装最新版的 &lt;a href="http://www.linuxpowertop.org/"&gt;PowerTop&lt;/a&gt;，但是要真正实用的分析功能，还需要把 kernel 中的 debug 功能打开&lt;br /&gt;&lt;br /&gt;Kernel hacking  ---&gt;&lt;br /&gt;    [*] Kernel debugging&lt;br /&gt;        [*] Collect kernel timers statistics&lt;br /&gt;&lt;br /&gt;根据日志上的记录，如 firefox, liferea 等可以在 powertop 网站上的 &lt;a href="http://www.linuxpowertop.org/known.php"&gt;Tips and Tricks &lt;/a&gt;找到记录，也有记录一些解決的方法或是 patch...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-340556241043627398?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/340556241043627398/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=340556241043627398' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/340556241043627398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/340556241043627398'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/06/powertop.html' title='PowerTop'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7818460120459779169</id><published>2007-06-29T09:28:00.000+08:00</published><updated>2007-06-29T09:32:01.405+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DetaolB、linux、floppy'/><title type='text'>小于1.44MB的linux发行版 - DetaolB</title><content type='html'>&lt;a href="http://detaolb.sourceforge.net/"&gt;DetaolB&lt;/a&gt; aimed to be a "much-less-than-a-floppy" x86 linux live distro.&lt;br /&gt;居然能这么小，还有编译环境，有空要试试。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7818460120459779169?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7818460120459779169/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7818460120459779169' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7818460120459779169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7818460120459779169'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/06/144mblinux-detaolb.html' title='小于1.44MB的linux发行版 - DetaolB'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3705489818372090930</id><published>2007-06-28T17:03:00.000+08:00</published><updated>2007-06-28T17:07:03.875+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gaim插件、GStreamer插件'/><title type='text'>插件开发</title><content type='html'>1)GStreamer插件开发&lt;br /&gt;2)gaim插件开发&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3705489818372090930?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3705489818372090930/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3705489818372090930' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3705489818372090930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3705489818372090930'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/06/blog-post_28.html' title='插件开发'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-466707841002853811</id><published>2007-06-22T17:30:00.000+08:00</published><updated>2007-06-22T17:32:13.032+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='内核、System.map、nm、kallsyms'/><title type='text'>获得内核例程的地址</title><content type='html'>在注册过程中，您还需要指定插入探测器的内核例程的地址。使用这些方法中的任意一个来获得内核例程的地址： &lt;br /&gt;1)从 System.map 文件直接得到地址。 &lt;br /&gt;例如，要得到 do_fork 的地址，可以在命令行执行 $grep do_fork /usr/src/linux/System.map 。 &lt;br /&gt;2)使用 nm 命令。 &lt;br /&gt;$nm vmlinuz |grep do_fork &lt;br /&gt;3)从 /proc/kallsyms 文件获得地址。 &lt;br /&gt;$cat /proc/kallsyms |grep do_fork&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-466707841002853811?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/466707841002853811/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=466707841002853811' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/466707841002853811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/466707841002853811'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/06/blog-post.html' title='获得内核例程的地址'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-7817289552355302788</id><published>2007-06-22T16:44:00.000+08:00</published><updated>2007-06-22T16:51:51.091+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='炒股，访问blogspot.com'/><title type='text'>汇报近况 呵呵</title><content type='html'>最近忙于项目，另外blogspot.com也上不了，就一只没更新了。&lt;br /&gt;今天活干的差不多了，从网上看到这个访问的方法：Pkblogs.com/用户名或Inblogs.net/用户名访问&lt;br /&gt;试了试，还行，终于又上来了 :)&lt;br /&gt;我现在开始炒股了，但上班炒股不太方便，有小一点的炒股软件就好了&lt;br /&gt;另外，婚后的生活挺幸福的&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-7817289552355302788?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/7817289552355302788/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=7817289552355302788' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7817289552355302788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/7817289552355302788'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/06/blogspot.html' title='汇报近况 呵呵'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5039825740855234031</id><published>2007-03-12T11:54:00.000+08:00</published><updated>2007-03-13T15:14:39.306+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='emerge'/><title type='text'>From stage1 install,that's that.</title><content type='html'>使用 live cd 2006.1 启动机器,输入 gentoo nox 进入系统&lt;br /&gt;&lt;br /&gt;hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hdb (启动DMA)&lt;br /&gt;&lt;br /&gt;/dev/hda1 /boot +32M&lt;br /&gt;/dev/hda2 swap  +512M&lt;br /&gt;/dev/hda3 /     +15360M&lt;br /&gt;/dev/hda4 /home xxxM&lt;br /&gt;&lt;br /&gt;mke2fs /dev/hda1&lt;br /&gt;mke2fs -j /dev/hda3&lt;br /&gt;mke2fs -j /dev/hda4&lt;br /&gt; &lt;br /&gt;mkswap /dev/hda2&lt;br /&gt;swapon /dev/hda2&lt;br /&gt; &lt;br /&gt;mount /dev/hda3 /mnt/gentoo&lt;br /&gt;mkdir /mnt/gentoo/boot&lt;br /&gt;mount /dev/hda1 /mnt/gentoo/boot&lt;br /&gt;cd /mnt/gentoo&lt;br /&gt;tar -xvjpf stage?-*.tar.bz2 (从U盘copy?)&lt;br /&gt;&lt;br /&gt;tar -xvjf /mnt/cdrom/gentoo/snapshot/portage-xxx.tar.bz2 -C /mnt/gentoo/usr&lt;br /&gt;&lt;br /&gt;mount /dev/hda4 /mnt/gentoo/home&lt;br /&gt;mount -t proc none /mnt/gentoo/proc&lt;br /&gt;&lt;br /&gt;配置 make.conf&lt;br /&gt;CFLAGS="-march=pentium-m -O2 -pipe -fomit-frame-pointer"&lt;br /&gt;CXXFLAGS="$ -fvisibility-inlines-hidden"&lt;br /&gt;LDFLAGS="-Wl,-O1"&lt;br /&gt;USE="nptl nptlonly -qt -kde -doc nls cjk" (nptl是一个LinuxThreads的替代品，使您机器的性能上一个台阶，在编译glibc时将用到。相关测试结果和讨论可以去BIM的developer论坛看看。“nptlonly”是最合适的，可以处理掉glibc多余的编译，缩短编译时间)&lt;br /&gt;GENTOO_MIRRORS="ftp://linux.ntcu.net/dists/gentoo/ http://www.zentek-international.com/mirrors/gentoo/ http://gentoo.ccccom.com http://mirror.tucdemonic.org/gentoo/ http://gentoo.gg3.net http://gentoo.math.bme.hu  "&lt;br /&gt;SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"&lt;br /&gt;MAKEOPTS="-j2"&lt;br /&gt;FEATURES="sandbox ccache distlocks"&lt;br /&gt;CCACHE_SIZE="512M"&lt;br /&gt;&lt;br /&gt;cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf&lt;br /&gt;chroot /mnt/gentoo /bin/bash&lt;br /&gt;env-update &amp;&amp; source /etc/profile&lt;br /&gt;&lt;br /&gt;注: 安装过程中随时可以在一些步骤中中断, 任何时候需要重新继续之前的步骤, 只需重复如下动作:&lt;br /&gt;挂载各个分区 (如第一部份准备工作中的挂载分区步骤)&lt;br /&gt;重新执行如上的 chroot 命令与 env-update 命令&lt;br /&gt;继续你之前中断的步骤&lt;br /&gt;&lt;br /&gt;emerge sync&lt;br /&gt;&lt;br /&gt;echo "sys-libs/glibc userlocales" &gt;&gt; /etc/portage/package.use&lt;br /&gt;&lt;br /&gt;nano -w /etc/locales.build ::&lt;br /&gt;en_US.UTF-8/UTF-8&lt;br /&gt;en_US/ISO-8859-1&lt;br /&gt;zh_CN.GB18030/GB18030&lt;br /&gt;zh_CN.GBK/GBK&lt;br /&gt;zh_CN.UTF-8/UTF-8&lt;br /&gt;zh_CN/GB2312&lt;br /&gt;&lt;br /&gt;cd /usr/portage&lt;br /&gt;scripts/bootstrap.sh&lt;br /&gt;&lt;br /&gt;emerge --nodeps gdbm libperl perl&lt;br /&gt;&lt;br /&gt;emerge -e system&lt;br /&gt;&lt;br /&gt;ln -sf /usr/share/zoneinfo/Asia/Beijing /etc/localtime&lt;br /&gt;date&lt;br /&gt;hwclock --show&lt;br /&gt;hwclock --hctosys&lt;br /&gt;nano -w /etc/conf.d/clock&lt;br /&gt;(将 CLOCK="UTC" 改成 CLOCK="local")&lt;br /&gt;&lt;br /&gt;(&lt;br /&gt;我们应该在装完内核配置完用户等步骤完成之后, 系统重启了, 才执行下面两个命令来更改系统时间&lt;br /&gt;# date 120610092004&lt;br /&gt;# hwclock --systohc&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;emerge gentoo-sources&lt;br /&gt;cd /usr/src/linux&lt;br /&gt;make menuconfig&lt;br /&gt;make &amp;&amp; make modules_install&lt;br /&gt;cp -i arch/i386/boot/bzImage /boot/kernel-2.6.10 (你喜欢叫它啥名字都可以, 到时在 grub.conf 中配置好就行)&lt;br /&gt;cp -i System.map /boot/System.map-2.6.10&lt;br /&gt;&lt;br /&gt;emerge udev&lt;br /&gt;emerge hotplug &amp;&amp; rc-update add hotplug default&lt;br /&gt;emerge coldplug &amp;&amp; rc-update add coldplug default&lt;br /&gt;emerge alsa-utils&lt;br /&gt;nano -w /etc/modules.d/alsa (编辑 alsa 配置以让内核加载针对你的网卡的驱动)&lt;br /&gt;modules-update&lt;br /&gt;rc-update add alsasound boot&lt;br /&gt;emerge nvidia-kernel (装显卡驱动,ati ???)&lt;br /&gt;&lt;br /&gt;/etc/fstab :&lt;br /&gt;/dev/hda1           /boot       ext2         noauto,noatime       1 1&lt;br /&gt;/dev/hda3           /           ext3          noatime           0 1&lt;br /&gt;/dev/hda2           none        swap         sw               0 0&lt;br /&gt;/dev/hda4           /home       ext3         noatime           0 2&lt;br /&gt;proc             /proc       proc         defaults           0 0&lt;br /&gt;shm              /dev/shm     tmpfs       defaults           0 0&lt;br /&gt;&lt;br /&gt;nano -w /etc/conf.d/hostname (设置 HOSTNAME 变量, 例如我的 hzy)&lt;br /&gt;nano -w /etc/conf.d/domainname (设置 DNSDOMAIN 变量, 例如我的 gentoo.com - 瞎叫的, 这域名不存在哦)&lt;br /&gt;&lt;br /&gt;nano -w /etc/hosts :&lt;br /&gt;127.0.0.1     hzy.gentoo.com     hzy localhost&lt;br /&gt;&lt;br /&gt;emerge grub&lt;br /&gt;grub&lt;br /&gt;nano -w /boot/grub/grub.conf :&lt;br /&gt;default 0&lt;br /&gt;timeout 10&lt;br /&gt;&lt;br /&gt;title=Gentoo Linux 2004.3 (2.6.10-morph15-r1)&lt;br /&gt;root (hd0,0)&lt;br /&gt;kernel /boot/kernel-2.6.10 ro root=/dev/hda3 &lt;br /&gt;&lt;br /&gt;emerge syslog-ng &amp;&amp; rc-update add syslog-ng default&lt;br /&gt;emerge vixie-cron &amp;&amp; rc-update add vixie-cron default&lt;br /&gt;&lt;br /&gt;passwd&lt;br /&gt;useradd zy -m -G users,wheel,portage,audio,games -s /bin/bash&lt;br /&gt;passwd zy&lt;br /&gt;&lt;br /&gt;emerge splashutils&lt;br /&gt;splash_geninitramfs -v -g /boot/fbsplash-emergence-1024x768 -r 1024x768 emergence&lt;br /&gt;nano -w /boot/grub/grub.conf :&lt;br /&gt;default 0&lt;br /&gt;timeout 30&lt;br /&gt;splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz&lt;br /&gt;&lt;br /&gt;title=Gentoo Linux 2004.3 (2.6.10-morph15-r1)&lt;br /&gt;    root (hd0,0)&lt;br /&gt;    kernel /2.6.10-morph15-r1 root=/dev/hda3 video=vesafb:ywrap,mtrr,1024x768-32@85 splash=silent,theme:emergence&lt;br /&gt;    initrd (hd0,0)/fbsplash-emergence-1024x768&lt;br /&gt;&lt;br /&gt;exit (退回 LiveCD 提供的环境)&lt;br /&gt;cd /&lt;br /&gt;umount /mnt/gentoo/proc /mnt/gentoo/boot /mnt/gentoo/home /mnt/gentoo&lt;br /&gt;reboot&lt;br /&gt;&lt;br /&gt;emerge -pv xorg-x11&lt;br /&gt;&lt;br /&gt;emerge xorg-x11&lt;br /&gt;&lt;br /&gt;装显卡的 glx 支持 (以 nvidia 为例):&lt;br /&gt;emerge nvidia-glx&lt;br /&gt;&lt;br /&gt;配置 X:&lt;br /&gt;xorgcfg&lt;br /&gt;&lt;br /&gt;startx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5039825740855234031?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5039825740855234031/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5039825740855234031' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5039825740855234031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5039825740855234031'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/from-stage1.html' title='From stage1 install,that&apos;s that.'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5665646333685277908</id><published>2007-03-07T14:10:00.000+08:00</published><updated>2007-03-07T16:45:47.798+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USB，内核'/><category scheme='http://www.blogger.com/atom/ns#' term='HID'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>内核开发</title><content type='html'>最近的工作要涉足内核开发了，主要是关于 HID Simple interface，设计实现一个 HID 逻辑总线，其下可以支持 USB 和蓝牙的 HID 设备。需要看的文档好多啊！感冒还没好呢:( 头一直晕晕的，上来写写 blog，希望感冒快点好起来~&lt;br /&gt;&lt;br /&gt;补充资料：&lt;br /&gt;emerge  dev-util/git&lt;br /&gt;(之前安装 python 时需要使用 export USE="tk")&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;获得最新的内核源代码树&lt;/span&gt;&lt;br /&gt;git-clone  git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;更新本地 Git 仓库&lt;/span&gt;&lt;br /&gt;$ cd linux-2.6&lt;br /&gt;$ git-pull git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;从仓库中导出文件&lt;/span&gt;&lt;br /&gt;$ git-checkout&lt;br /&gt;如果您希望覆盖本地修改，可以使用 -f 选项导出文件，这样就可以将您带回到一个干净的状态：&lt;br /&gt;$ git-checkout -f&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;编辑文件然后提交&lt;/span&gt;&lt;br /&gt;vi Documentation/ManagementStyle&lt;br /&gt;git-commit Documentation/ManagementStyle&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;添加或删除文件&lt;/span&gt;&lt;br /&gt;$ git-add Documentation/Sandwiches&lt;br /&gt;$ git-commit Documentation/Sandwiches&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Git 来管理本地仓库&lt;/span&gt;&lt;br /&gt;$ tar -zxvf release.tar.gz&lt;br /&gt;$ cd release&lt;br /&gt;$ git init-db&lt;br /&gt;&lt;br /&gt;$ git add .&lt;br /&gt;&lt;br /&gt;$ git commit -a&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5665646333685277908?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5665646333685277908/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5665646333685277908' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5665646333685277908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5665646333685277908'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/blog-post_07.html' title='内核开发'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6837557788015043022</id><published>2007-03-07T14:07:00.000+08:00</published><updated>2007-03-07T14:09:57.973+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gettext'/><category scheme='http://www.blogger.com/atom/ns#' term='po'/><category scheme='http://www.blogger.com/atom/ns#' term='po4a'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='emerge'/><title type='text'>使用 po 文件翻译 GuideXML[转载]</title><content type='html'>Date: 2007-01-28&lt;br /&gt;Version: 1.0&lt;br /&gt;Authors: 张乐&lt;br /&gt;Licence: 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆 License&lt;br /&gt;&lt;br /&gt;内容&lt;br /&gt;&lt;br /&gt;    * 背景知识&lt;br /&gt;          。po文件简介&lt;br /&gt;          。po文件格式解析&lt;br /&gt;          。po文件翻译的好处&lt;br /&gt;    * 准备工作&lt;br /&gt;          。po4a&lt;br /&gt;          。文本编辑器&lt;br /&gt;    * 推荐翻译模式&lt;br /&gt;          。翻译全新的文件&lt;br /&gt;          。利用旧版的已翻译文件翻译新文件&lt;br /&gt;&lt;br /&gt;背景知识&lt;br /&gt;po文件简介&lt;br /&gt;&lt;br /&gt;po文件本来是用来翻译程序源代码里的字符串的。先来稍微解释一下它本来的用途，需要一点点C语言的基础才能完全理解。如果理解有困难 ，可以忽略这段内容，不会对我们使用po来翻译造成任何影响。&lt;br /&gt;&lt;br /&gt;目前大部分自由软件实现国际化使用的是gettext。国际化就是让程序可以使用多国语言来显示程序里的字符串。程序里一般都有很多字符串，菜单名也好，错误信息也好，都是字符串。假设字符串为string，非国际化的程序里都是直接写"string"。如果用了gettext来实现国际化的话，就要写成gettext("string")。有时也会看到_("string")，那实际上也是gettext，只不过通过宏的定义把 gettext改头换面了。这个string就是msgid。然后使用xgettext来从程序源代码文件产生po文件。然后交给专门的翻译人员来翻译 po。翻译人员根本不需要懂编程。翻译完毕后，使用msgfmt来把po转化成mo文件，并安装到系统里合适的位置。程序运行时，到底显示什么字符串就是由gettext 函数来决定的了。主要有两个决定因素，一个是系统的locale及相关环境变量（LANGUAGE，LC_ALL，LC_MESSAGES和LANG），一个是相关的mo文件。具体可以看我的这篇 文章 。&lt;br /&gt;&lt;br /&gt;随着程序版本的升级，程序里的字符串的数量和内容都会发生变化，但变化不会很大，以前翻译过的po里大部分msgid都能被重复利用。所以维护po的翻译人员在每次得到从新的程序源代码产生的po时，都用msgmerge来根据旧的已翻译过的po来先处理一下新的未翻译的po。处理过后，大部分情况下新po就翻译的差不多了。翻译人员的工作量被大幅度减轻了。&lt;br /&gt;po文件格式解析&lt;br /&gt;&lt;br /&gt;po文件都是由一对对的msgid和msgstr组成的。msgid就是原文。msgstr就是译文。原文译文相互对照，所以非常适于翻译。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;msgid "Flash Player 9 released"&lt;br /&gt;msgstr ""&lt;br /&gt;&lt;br /&gt;有的msgid前面一行有fuzzy的字样。这说明，第一这个po是被msgmerge处理过的；第二，已翻译的po里没有和这个msgid完全等同的 msgid，只有非常相似的。这种情况下，msgmerge仍然会用那个相似的msgid来翻译此msgid。不过会给这个msgid标记为fuzzy，表示翻译人员仍然要翻译这 个msgid，并在翻译后去掉上面带fuzzy的这一行。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#, fuzzy&lt;br /&gt;msgid "Gentoo Linux PPC Handbook"&lt;br /&gt;msgstr "Gentoo Linux Alpha手册"&lt;br /&gt;&lt;br /&gt;po文件翻译的好处&lt;br /&gt;&lt;br /&gt;   1. 原文译文相互对照，适于翻译&lt;br /&gt;   2. 一篇文章里同一个msgid不管出现多少次，都只需要翻译一次&lt;br /&gt;   3. 旧有的已翻译过的po，可以重复利用，不必再次翻译，且利于统一风格&lt;br /&gt;   4. 有非常好的翻译工具，熟练使用后可大幅度提高工作效率&lt;br /&gt;&lt;br /&gt;准备工作&lt;br /&gt;po4a&lt;br /&gt;&lt;br /&gt;为了使用po来翻译，显然我们需要能够把xml转成po的工具。这里我们选用po4a。有两个原因：&lt;br /&gt;&lt;br /&gt;    * po4a可支持GuideXML，也就是gentoo文档专有格式&lt;br /&gt;    * po4a可以根据原来的xml文档和与之对应的已经翻译过的xml文档生成po。这个功能非常有用，随后即可看到。&lt;br /&gt;&lt;br /&gt;安装po4a&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;emerge po4a&lt;br /&gt;&lt;br /&gt;掌握po4a的三个命令&lt;br /&gt;&lt;br /&gt;    1. 从xml产生未翻译po&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    po4a-gettextize -f guide -m orig.xml &gt; untrans.po&lt;br /&gt;&lt;br /&gt;    2. 从旧的xml原文和译文产生已经翻译过的po&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    po4a-gettextize -f guide -m orig.xml -l trans.xml &gt; trans.po&lt;br /&gt;&lt;br /&gt;    3. 用已经翻译过的po和xml原文来产生xml译文&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    po4a-translate -f guide -m orig.xml -p trans.po -k 1 &gt; trans.xml&lt;br /&gt;&lt;br /&gt;文本编辑器&lt;br /&gt;&lt;br /&gt;最好的翻译po的工具，无疑是po模式的emacs。当然任何其他的文本编辑器都行，但是效率上绝对比不过po模式的emacs。这里我推荐使用emacs 23。这个版本支持xft。它所需要的keyword是~x86或~amd64。&lt;br /&gt;&lt;br /&gt;   1. 安装emacs-cvs和gettext&lt;br /&gt;&lt;br /&gt;echo app-editors/emacs-cvs &gt;&gt; /etc/portage/package.unmask&lt;br /&gt;echo "app-editors/emacs-cvs gtk xft toolkit-scroll-bars" &gt;&gt; /etc/portage/package.use&lt;br /&gt;echo "sys-devel/gettext emacs" &gt;&gt; /etc/portage/package.use&lt;br /&gt;emerge =emacs-cvs-23.0.0-r1 gettext dejavu&lt;br /&gt;&lt;br /&gt;   1. 配置字体&lt;br /&gt;&lt;br /&gt;    * 指定xft为FontBackend，在~/.Xdefaults中加入&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Emacs.FontBackend: xft&lt;br /&gt;&lt;br /&gt;    * 用下列命令启动&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;emacs --enable-font-backend -fn "Dejavu Sans Mono-12"&lt;br /&gt;&lt;br /&gt;   1. 基本使用&lt;br /&gt;&lt;br /&gt;    * 用emacs 打开po文件，即自动进入po模式。菜单栏里有一个名叫PO的菜单，里面有当前模式下可以使用的所有快捷键。po模式下不可直接编辑文件内容。可先把光标移到要编辑的msgid上。使用po的快捷键（比如f或u）来移动，移动的单位就是msgid，速度很快。移动到目的地，然后按回车，即可翻译该msgid。这时整个窗口一分为二。上面可显示msgid，下面翻译。在翻译区域进行翻译时，操作方式就和普通模式下的emacs一样。也就是说你可以把它当作Windows记事本来用。唯一不同的是，在结束翻译后，要按住Ctrl，然后按两次c，以保存这一条翻译结果。然后再按f或u来处理fuzzy的和未翻译的msgid。注意在翻译完fuzzy的msgid后要按tab，来删除fuzzy标记。当不管按f还是u，光标都不再移动的时候，就表示整个po翻译完了。&lt;br /&gt;    * 常用快捷键：&lt;br /&gt;          。n 移动到下一个msgid&lt;br /&gt;          。p 移动到上一个msgid&lt;br /&gt;          。f 移动到下一个fuzzy msgid&lt;br /&gt;          。F 移动到上一个fuzzy msgid&lt;br /&gt;          。u 移动到下一个未翻译msgid&lt;br /&gt;          。U 移动到上一个未翻译msgid&lt;br /&gt;          。tab 删除本msgid的fuzzy标记&lt;br /&gt;&lt;br /&gt;推荐翻译模式&lt;br /&gt;翻译全新的文件&lt;br /&gt;&lt;br /&gt;假设这个文件叫orig.xml，下同&lt;br /&gt;&lt;br /&gt;    * po4a-gettextize -f guide -m orig.xml &gt; output.po&lt;br /&gt;    * 用文本编辑器翻译output.po&lt;br /&gt;    * po4a-translate -f guide -m orig.xml -p output.po -k 1 &gt; trans.xml&lt;br /&gt;&lt;br /&gt;利用旧版的已翻译文件翻译新文件&lt;br /&gt;&lt;br /&gt;假设旧版文件叫old.xml，旧版已翻译文件叫old-trans.xml，新文件叫new.xml&lt;br /&gt;&lt;br /&gt;    * po4a-gettextize -f guide -m old.xml -l old-trans.xml &gt; old-trans.po&lt;br /&gt;    * po4a-gettextize -f guide -m new.xml &gt; new.po&lt;br /&gt;    * msgmerge old-trans.po new.po &gt; new-trans.po&lt;br /&gt;    * 用文本编辑器翻译news-trans.po&lt;br /&gt;    * po4a-translate -f guide -m new.xml -p new-trans.po -k 1 &gt; new-trans.xml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6837557788015043022?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6837557788015043022/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6837557788015043022' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6837557788015043022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6837557788015043022'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/po-guidexml.html' title='使用 po 文件翻译 GuideXML[转载]'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6319413240559290733</id><published>2007-03-06T14:46:00.000+08:00</published><updated>2007-03-06T14:58:22.093+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='感冒'/><category scheme='http://www.blogger.com/atom/ns#' term='发烧'/><category scheme='http://www.blogger.com/atom/ns#' term='北京'/><category scheme='http://www.blogger.com/atom/ns#' term='风'/><title type='text'>天气恶劣，这个月注定痛苦，好好照顾自己啦</title><content type='html'>接连几天刮风，气温骤降，何时才能彻底摆脱病魔？&lt;br /&gt;3.3 上周六早上出去下着小雨，气温也比较低了，但心里挺高兴的，北京终于又下雨了啊！丝毫没有意识到病魔已经向我靠近。晚上回去时，天气更糟糕，刮大风，雨也下的急，好不容易到宿舍了，但身体也终于顶不住了 --- 感冒了! 感冒?这算得了什么?我也这么想得。明天还有事情，要过去帮忙，于是早些睡觉吧(也是11点多了)。虽然之前看了天气预报，说晚上会下雪呢，但早上起来看到窗外的积雪，天空中飘着雪花，很是兴奋，对还在睡觉的哥哥大声说：“下雪了，白茫茫一片......” 意识到自己的感冒不仅没好，反而喉咙开始不舒服了，洗漱完毕后吃了点消炎药，拿着咽喉含片，打着雨伞就出门了，外面好冷啊！风似乎刮得比昨晚更加猛烈了，看到路上有的指示牌被吹倒在地上，而我手里打着的伞已经不是为了遮雪而是纯粹为了挡风了......等我到了她那边以后，已经被冻的鼻涕直流，而这时的我并没有太在意。看她已经忙起来了，于是我尽量找一些小活干，比如削土豆之类的。她的同事路路续续来了，于是开始吃吃喝喝聊聊......&lt;br /&gt;吃完饭商定去麦乐迪K歌，于是乘车1个小时赶往魏公村。事后我想如果我不去的话就没现在这么难受了。K歌完后一起聚餐，然后各自回家。到家后我就快崩溃了，吃了退烧药就躺在床上。一晚上没睡好，出了好多汗。好在第二天醒来感觉好多了，头不烫了，但是喉咙疼痛却更加严重了，声音也变了，于是又吃了消炎药，并带上一盒急急忙忙就出门上班去了。怎么还是这么大的风啊！本来我感觉好点了，但还是比较虚弱，经这大风再一刮，唉，到公司的时候又开始难受了。中午一点胃口都没有，但想想身体这么弱还是吃点东西为好，于是到超市买了点面包和一杯酸奶，午饭算是打发掉了。下班了，好难受，肚子感觉空空的，但就是没胃口，另外脑袋也有点痛，喉咙依旧，还流鼻涕(幸亏随着带着纸巾)，公交车上人挤人，当时真想躺在前面那人的后背上，或者靠在后面人的身上......&lt;br /&gt;下车后先去附近的药店买了盒感冒药(宿舍已经没有合适的药了)，到宿舍后，哥没在，于是我把那盒在火车上没吃的方便面煮煮吃了。那感冒药效果还不错，睡了一觉，今天起床感觉喉咙好多了。出门才知道可外面的风丝毫没有减弱 :( &lt;br /&gt;在公交车上面头晕乎乎的，想吐......再一次感受到自己身体的虚弱！&lt;br /&gt;到中午了，觉得眼睛非常难受，很奇怪，于是到卫生间的镜子前一看，乖乖，双眼布满了血丝！感冒才稍微好点呢，怎么又.......我无语了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;从百度知道查的：&lt;br /&gt;眼睛过度疲劳或感染，血管还会破裂，造成出血。&lt;br /&gt;&lt;br /&gt;.睡眠充足有助于滋润眼睛，减少眼睛的血丝&lt;br /&gt;.以冷毛巾敷眼部，可收缩血管，滋润眼睛&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6319413240559290733?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6319413240559290733/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6319413240559290733' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6319413240559290733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6319413240559290733'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/blog-post.html' title='天气恶劣，这个月注定痛苦，好好照顾自己啦'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-174964828417234817</id><published>2007-03-05T17:51:00.000+08:00</published><updated>2007-03-05T18:20:40.139+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T42'/><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='ibm'/><category scheme='http://www.blogger.com/atom/ns#' term='make.conf'/><title type='text'>gentoo on ibm T42&lt;参考&gt;</title><content type='html'>/etc/make.conf :&lt;br /&gt;  CFLAGS="-O2 -march=i686 -pipe"&lt;br /&gt;  CHOST="i686-pc-linux-gnu"&lt;br /&gt;  CXXFLAGS="${CFLAGS}"&lt;br /&gt;  DISTCC_HOSTS="localhost "&lt;br /&gt;  FEATURES="distcc"&lt;br /&gt;  LDFLAGS="-Wl,-O2"&lt;br /&gt;  MAKEOPTS="-j2"&lt;br /&gt;  SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"&lt;br /&gt;  GENTOO_MIRRORS="ftp://ftp.kaist.ac.kr/gentoo/   http://gentoo.mirrors.easynews.com/linux/gentoo/ http://ftp.kaist.ac.kr/pub/gentoo/"&lt;br /&gt;&lt;br /&gt;===============================&lt;br /&gt;配置 hdparm 可以让你安装快 1.5 倍&lt;br /&gt;/etc/conf.d/hdparm :&lt;br /&gt;  disc0_args="-d1 -X66"&lt;br /&gt;  cdrom0_args="-d1"&lt;br /&gt;&lt;br /&gt;加入服务 :&lt;br /&gt;rc-update add hdparm default&lt;br /&gt;使得开机后自动启动 : &lt;br /&gt;/etc/init.d/hdparm start&lt;br /&gt;&lt;br /&gt;===============================&lt;br /&gt;Kernel config:&lt;br /&gt;比较特別的设定&lt;br /&gt; Code maturity level options :&lt;br /&gt; [*] Prompt for development and/or incomplete code/drivers&lt;br /&gt;&lt;br /&gt;(Pentium-4) Processor family&lt;br /&gt; &lt;*&gt; /dev/cpu/microcode - Intel IA32 CPU microcode support&lt;br /&gt; [ ] Math emulation   // 去掉&lt;br /&gt; [*] MTRR (Memory Type Range Register) support&lt;br /&gt; [ ] Symmetric multi-processing support // 这个一定要去掉&lt;br /&gt; [*] Local APIC support on uniprocessors&lt;br /&gt; [*] IO-APIC support on uniprocessors&lt;br /&gt;&lt;br /&gt; [*] Power Management support&lt;br /&gt; &lt;*&gt;   Advanced Power Management BIOS support&lt;br /&gt; [*]     Allow interrupts during APM BIOS calls  // IBM thinkpad 要用&lt;br /&gt;[*] ACPI Support&lt;br /&gt;&lt;*&gt;   AC Adapter&lt;br /&gt;&lt;*&gt;   Battery&lt;br /&gt;&lt;br /&gt;&lt;*&gt; IEEE 1394 (FireWire) support (EXPERIMENTAL)&lt;br /&gt;&lt;*&gt;   Texas Instruments PCILynx support&lt;br /&gt; &lt;*&gt;   OHCI-1394 support&lt;br /&gt;&lt;br /&gt; Network device support  ---&gt;&lt;br /&gt;&lt;*&gt;     EtherExpressPro/100 support (eepro100, original Becker driver&lt;br /&gt; Input core support  ---&gt;  全选&lt;br /&gt;&lt;br /&gt; Character devices  ---&gt;   I2C 要选，不然 IEEE 1394 不能 work&lt;br /&gt; &lt;*&gt; I2C support&lt;br /&gt; &lt;*&gt; I2C bit-banging interfaces&lt;br /&gt; &lt;*&gt; I2C device interface&lt;br /&gt; &lt;*&gt; I2C /proc interface (required for hardware sensors)&lt;br /&gt;&lt;br /&gt;[ ] Unix98 PTY support // 去掉&lt;br /&gt;&lt;br /&gt;&lt;*&gt; Mouse Support (not serial and bus mice)&lt;br /&gt;[*]   PS/2 mouse (aka "auxiliary device") support&lt;br /&gt;&lt;br /&gt; File systems  ---&gt; // 看你用了那个&lt;br /&gt;&lt;*&gt; Ext3 journalling file system support&lt;br /&gt;&lt; &gt; NTFS file system support (read only)&lt;br /&gt;[*] /proc file system support&lt;br /&gt;[*] /dev file system support (EXPERIMENTAL)&lt;br /&gt;[*]   Automatically mount at boot&lt;br /&gt;&lt;*&gt; Second extended fs support&lt;br /&gt;/pty98 不可以選&lt;br /&gt;&lt;br /&gt;&lt;M&gt; Sound card support // sound 我只选这个，其他的我用 alsa&lt;br /&gt;&lt;br /&gt; USB support  ---&gt;&lt;br /&gt;&lt;*&gt; Support for USB&lt;br /&gt;[*]   Preliminary USB device filesystem&lt;br /&gt;&lt;*&gt;   EHCI HCD (USB 2.0) support (EXPERIMENTAL)&lt;br /&gt;&lt;*&gt;   UHCI Alternate Driver (JE) support&lt;br /&gt;&lt;*&gt;   OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support&lt;br /&gt;&lt;*&gt;   USB Human Interface Device (full HID) support&lt;br /&gt;[*]     HID input layer support&lt;br /&gt;&lt;br /&gt;bluetooth // up to you&lt;br /&gt;&lt;br /&gt;save config 之後&lt;br /&gt;make dep bzImage modules modules_install&lt;br /&gt;&lt;br /&gt;===============================&lt;br /&gt;env ALSA_CARD="intel8x0" emerge alsa-driver&lt;br /&gt;&lt;br /&gt;在 make alsa_driver 的同時，你可以把 boot loader 裝好&lt;br /&gt;cd /usr/src/linux&lt;br /&gt;cp System.map /boot&lt;br /&gt;cp arch/i386/boot/bzImage /boot&lt;br /&gt;&lt;br /&gt;===============================&lt;br /&gt;http://www.gentoo.org/&lt;br /&gt;http://www.linux-laptop.net/&lt;br /&gt;http://furius.ca/techdoc/misc/thinkpad.html (T42)&lt;br /&gt;http://www.y3m.net/docs/gentoo-on-t42/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-174964828417234817?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/174964828417234817/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=174964828417234817' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/174964828417234817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/174964828417234817'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/gentoo-on-ibm-t42.html' title='gentoo on ibm T42&lt;参考&gt;'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-4339541743225699437</id><published>2007-03-05T10:35:00.000+08:00</published><updated>2007-03-05T10:42:17.069+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='commands'/><title type='text'>转载自bashcurescancer.com: 10 Linux commands you've never used</title><content type='html'>http://bashcurescancer.com/10-linux-commands-youve-never-used.html&lt;br /&gt;&lt;br /&gt;   1. pgrep：比如，你可以使用 pgrep -u root 来代替 ps -ef | egrep '^root ' | awk '{print $2}'，以便抓取属于 root 的 PID。&lt;br /&gt;   2. pstree：我觉得这个命令很酷，它可以直接列出进程树，或者换句话说是按照树状结构来列出进程。&lt;br /&gt;   3. bc：这个命令在我的系统中没有找到，可能需要安装。这是用来执行计算的一个命令，如使用它来开平方根。&lt;br /&gt;   4. split：这是一个很有用的命令，它可以将一个大文件分割成几个小的部分。比如：split -b 2m largefile LF_ 会将 largefile 分割成带有 LF 文件名前缀且大小为 2 MB 的小文件。&lt;br /&gt;   5. nl：能够显示行号的命令。在阅读脚本或代码时，这个命令应该非常有用。如：nl wireless.h | head。&lt;br /&gt;   6. mkfifo：作者说这是他最喜欢的命令。该命令使得其他命令能够通过一个命名的管道进行通信。嗯，听起来有点空洞。举例说明，先创建一个管道并写入内容：&lt;br /&gt;&lt;br /&gt;      mkfifo ive-been-piped&lt;br /&gt;      ls -al split/* | head &gt; ive-been-piped&lt;br /&gt;&lt;br /&gt;      然后就可以读取了：head ive-been-piped。&lt;br /&gt;   7. ldd：其作用是输出指定文件依赖的动态链接库。比如，通过 ldd /usr/java/jre1.5.0_11/bin/java 可以了解哪些线程库链接到了 java 依赖（动态链接）了哪些库。（感谢 NetSnail 的指正。）&lt;br /&gt;   8. col：可以将 man 手册页保存为无格式的文本文件。如：&lt;br /&gt;&lt;br /&gt;      PAGER=cat&lt;br /&gt;      man less | col -b &gt; less.txt&lt;br /&gt;   9. xmlwf：能够检测 XML 文档是否良好。比如：&lt;br /&gt;&lt;br /&gt;      curl -s 'http://bashcurescancer.com' &gt; bcc.html&lt;br /&gt;      xmlwf bcc.html&lt;br /&gt;      perl -i -pe 's@&lt;br/&gt;@&lt;br&gt;@g' bcc.html&lt;br /&gt;      xmlwf bcc.html&lt;br /&gt;      bcc.html:104:2: mismatched tag&lt;br /&gt;  10. lsof：列出打开的文件。如：通过 lsof | grep TCP 可以找到打开的端口。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-4339541743225699437?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/4339541743225699437/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=4339541743225699437' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4339541743225699437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/4339541743225699437'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/bashcurescancercom-10-linux-commands.html' title='转载自bashcurescancer.com: 10 Linux commands you&apos;ve never used'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-1845972618435963688</id><published>2007-03-02T10:59:00.000+08:00</published><updated>2007-03-02T11:02:58.994+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='panoramio、Google Earth'/><title type='text'>在 panoramio 分享照片</title><content type='html'>&lt;a href="http://www.panoramio.com/user/231030"&gt;我的照片地址 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;panoramio 界面简单，使用方便，速度也不错，另外与 Google Earth 结合......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-1845972618435963688?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/1845972618435963688/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=1845972618435963688' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1845972618435963688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/1845972618435963688'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/panoramio.html' title='在 panoramio 分享照片'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-8435485900203692648</id><published>2007-03-01T18:18:00.000+08:00</published><updated>2007-03-01T18:24:21.441+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MoinMoin'/><title type='text'>MoinMoin 升级</title><content type='html'>MoinMoin 新版本 1.5.7 发布有段时间了，现在考虑对公司原系统升级&lt;br /&gt;&lt;br /&gt;以下供参考，等成功升级后再来补充&lt;br /&gt;首先备份好/usr/lib/python2.3/site- packages/MoinMoin目录和/usr/share/moin目录。接着删除这两个目录和实例目录下的underlay目录，安装新版本的 moinmoin系统。最后把/usr/share/moin/underlay目录拷贝到实例目录，修改该目录的访问权限。升级完成要重启服务器。注意，如果你修改了/usr/lib/python2.3/site-packages/MoinMoin目录和/usr/share/moin目录下文件的内容，升级完成后要重新修改或用旧文件覆盖。&lt;br /&gt;&lt;br /&gt;MoinMoin里叫Plugin，有Macro(宏)、Parser(解析器)、Action(操作)、Formatter(格式化工具)、Theme(主题)等，系统级的插件存放在/usr/lib/python2.3/site-packages/MoinMoin/目录下，用户级的插件存放在实例的data/plugin目录下。&lt;br /&gt;http://moinmoin.wikiwikiweb.de/ParserMarket&lt;br /&gt;http://moinmoin.wikiwikiweb.de/ActionMarket#head-f6975b5db3bf67065adf993a440bbaaac3768d04&lt;br /&gt;http://moinmoin.wikiwikiweb.de/MacroMarket&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-8435485900203692648?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/8435485900203692648/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=8435485900203692648' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8435485900203692648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/8435485900203692648'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/03/moinmoin.html' title='MoinMoin 升级'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5876444008086631724</id><published>2007-02-08T18:29:00.000+08:00</published><updated>2007-02-07T18:02:18.366+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='procmail'/><category scheme='http://www.blogger.com/atom/ns#' term='mutt'/><category scheme='http://www.blogger.com/atom/ns#' term='msmtp'/><category scheme='http://www.blogger.com/atom/ns#' term='fetchmail'/><title type='text'>mutt + fetchmail + msmtp + procmail</title><content type='html'>1)下载安装 msmtp,fetchmail,mutt&lt;br /&gt;http://www.mutt.org/download.html&lt;br /&gt;http://fetchmail.berlios.de/&lt;br /&gt;http://msmtp.sourceforge.net/&lt;br /&gt;&lt;br /&gt;2)配置&lt;br /&gt;搞了大半天，终于收发信正常了。参考以下操作：&lt;br /&gt;mkdir ~/Mail&lt;br /&gt;mkdir -p ~/Mail/inbox&lt;br /&gt;&lt;br /&gt;touch .msmtprc&lt;br /&gt;chmod 600 .msmtprc&lt;br /&gt;&lt;br /&gt;touch .fetchmailrc&lt;br /&gt;chmod 600 .fetchmailrc&lt;br /&gt;&lt;br /&gt;另外还需要 .muttrc、.procmailrc、.signature，我已打包 :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5876444008086631724?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5876444008086631724/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5876444008086631724' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5876444008086631724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5876444008086631724'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/02/mutt-fetchmail-msmtp-procmail.html' title='mutt + fetchmail + msmtp + procmail'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3016140017510259410</id><published>2007-02-07T18:01:00.000+08:00</published><updated>2007-02-07T18:02:18.512+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gnu fun'/><title type='text'>Laugh along with GNU</title><content type='html'>http://www.gnu.org/fun/&lt;br /&gt;&lt;br /&gt;This is a web page designed to provide some laughs to the working hackers. &lt;br /&gt;It contains software, documentation, music, poems, etc. submitted by GNU users and collected by GNU contributers over the years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3016140017510259410?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3016140017510259410/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3016140017510259410' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3016140017510259410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3016140017510259410'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/02/laugh-along-with-gnu.html' title='Laugh along with GNU'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-5626803922331683172</id><published>2007-02-05T11:00:00.000+08:00</published><updated>2007-02-05T19:08:42.021+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GTKFB'/><title type='text'>整合 GtkFB + xfce4 desktop + scim IME</title><content type='html'>这是最近的工作任务，需要在 GTKFB 下运行 xfce4 桌面系统，最好想办法让 scim 中文输入法也能使用。&lt;br /&gt;    主要参考 &lt;br /&gt;http://www.directfb.org/wiki/index.php/Projects:GTK_on_DirectFB&lt;br /&gt;http://www.directfb.org/wiki/index.php/Xfce4_panel_on_DFB&lt;br /&gt;&lt;br /&gt;    现在还没开始编译，国外网站下载速度太慢了 :(&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GtkFB&lt;/span&gt;&lt;br /&gt;    自从 Qt 推出了 Embedded 版本之后，虽然 GTK+ 并非商业公司所发展，但也加紧脚步推出了 GtkFB 项目，这个项目的宗旨当然也是要替 Embedded 系統提出一套基于 GTK+ 的 GUI 解决方案。&lt;br /&gt;&lt;br /&gt;    与 Qt / Embedded 类似的作法，GtkFB 也跳过 X 层直接与 FrameBuffer 沟通，因此也具有 Qt / Embedded 的一些优点，不过毕竟不是商业软件，发展的速度上较为缓慢。&lt;br /&gt;    特色&lt;br /&gt;     o 不需 X Server 直接与 FrameBuffer 交互&lt;br /&gt;     o API 与 Desktop 版相容。&lt;br /&gt;     o 采用 LGPL 授权方式&lt;br /&gt;     o 体积小&lt;br /&gt;&lt;br /&gt;2007-1-30  下午4:19 &lt;以后慢慢补充&gt;&lt;br /&gt;&lt;br /&gt;＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&lt;br /&gt;有一定进展了！&lt;br /&gt;&lt;br /&gt;在我们的系统上面编译最终都通过了，但比较麻烦，可以在终端下面运行 vte 等。现在决定在 debian 下面重新编译 GTK-DFB。&lt;br /&gt;&lt;br /&gt;今天编译 2.6.19 的内核，为了以后编译 GTK-DFB，切记需要打开 framebuffer(选择 Y 即 built in)。我开始选择了 M，启动参数加 vga=788，console 打不开。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-5626803922331683172?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/5626803922331683172/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=5626803922331683172' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5626803922331683172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/5626803922331683172'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/gtkfb-xfce4-desktop-scim-ime.html' title='整合 GtkFB + xfce4 desktop + scim IME'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6013369513661234165</id><published>2007-02-01T11:11:00.000+08:00</published><updated>2007-02-01T11:12:44.724+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ISO安装LINUX'/><title type='text'>从硬盘ISO安装linux</title><content type='html'>1.mount -t iso9660 -o loop BabyRC3-i386-disc.iso /misc/ &lt;br /&gt;&lt;br /&gt;cp /misc/isolinux/initrd.img /boot/&lt;br /&gt;cp /misc/isolinux/vmlinuz /boot/&lt;br /&gt;&lt;br /&gt;2.修改/etc/grub.conf&lt;br /&gt;title Co_Create RC3 9-22&lt;br /&gt;        root        (hd0,5)&lt;br /&gt;        kernel      /boot/vmlinuz-2.6.15-23-386 root=/dev/hda6 ro quiet splash&lt;br /&gt;        initrd      /boot/initrd.img-2.6.15-23-386&lt;br /&gt;        savedefault&lt;br /&gt;        boot&lt;br /&gt;&lt;br /&gt;修改为:&lt;br /&gt;title Co_Create RC3 9-22&lt;br /&gt;        root        (hd0,5)&lt;br /&gt;        kernel      /boot/vmlinuz&lt;br /&gt;        initrd      /boot/initrd.img&lt;br /&gt;3.reboot，选择iso所在的位置，安装前确认不安装引导信息到mbr&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6013369513661234165?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6013369513661234165/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6013369513661234165' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6013369513661234165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6013369513661234165'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/02/isolinux.html' title='从硬盘ISO安装linux'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-6542578157774870820</id><published>2007-01-29T16:48:00.000+08:00</published><updated>2007-01-29T17:35:09.957+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jscookMenu'/><title type='text'>网页中添加三层菜单</title><content type='html'>gf 的项目中需要用到三层菜单，总结如下：&lt;br /&gt;&lt;br /&gt;Renders a Javascript Menu based on the excellent JSCookMenu  by Heng Yuan(http://www.cs.ucla.edu/~heng/JSCookMenu), the nested NavigationMenuItem(s) are rendered as Javascript Menu.&lt;br /&gt;&lt;br /&gt;If you want to use jscookMenu in your application, you will have to:&lt;br /&gt; * Add jscookmenu directory containing css and scripting code to your web directory (you can find it in the examples application).&lt;br /&gt; * Add scripts and stylesheets for the theme you would like to use to html-header (see also inc/header.inc in the examples application)&lt;br /&gt; * Put the tomahawk.jar in your WEB-INF/lib directory (or in the classpath of your application server.)&lt;br /&gt; * Add the following to your JSP page in order to use one of the MyFaces custom components:&lt;br /&gt;&amp;lt;%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %&amp;gt;&lt;br /&gt;&lt;br /&gt;Well,the syntax of  jscookMenu is as follows:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;t:jscookMenu [ user-role-support-attributes ]&lt;br /&gt;                 [layout="values {hbr, hbl, hur, hul, vbr, vbl, vur, vul}"]&lt;br /&gt;                 [theme="values {ThemeIE, ThemeMiniBlack, ThemeOffice, ThemePanel}"]&lt;br /&gt;    Nested &amp;lt;t:navigationMenuItem&amp;gt; or &amp;lt;t:navigationMenuItems&amp;gt; tags (menu items)&lt;br /&gt;&amp;lt;/t:jscookMenu&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;不同的 theme (效果)可以到这里查看 http://jscook.yuanheng.org/JSCookMenu/ThemeMiniBlack.html&lt;br /&gt;&lt;br /&gt;例子：&lt;br /&gt;The code in my menu.jsp is as follows:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%&amp;gt;&lt;br /&gt;&amp;lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&amp;gt;&lt;br /&gt;&amp;lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;x:jscookMenu layout="vbr" theme="ThemeECCGroup" rendered="#{MenuBean.hasMenu}"&amp;gt;&lt;br /&gt;  &amp;lt;x:navigationMenuItems value="#{MenuBean.menu}" /&amp;gt;&lt;br /&gt;&amp;lt;/x:jscookMenu&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The code in my backing bean is as follows: (this will eventually be generated from the database)&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Package that this class belongs to.&lt;br /&gt;*/&lt;br /&gt;package uk.co.eccgroup.controller.action;&lt;br /&gt; &lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt; &lt;br /&gt;import javax.faces.context.FacesContext;&lt;br /&gt; &lt;br /&gt;import org.apache.myfaces.custom.navmenu.NavigationMenuItem;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt; &lt;br /&gt;/**&lt;br /&gt; * MenuBean backing bean for application menus&lt;br /&gt; */&lt;br /&gt;public class MenuBean&lt;br /&gt;{&lt;br /&gt;  private static final Logger logger = Logger.getLogger(MenuBean.class);&lt;br /&gt; &lt;br /&gt;  public List&amp;lt;NavigationMenuItem&amp;gt; getContextMenu()&lt;br /&gt; {&lt;br /&gt;   //Get view id&lt;br /&gt;  String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();&lt;br /&gt;  logger.debug("view id: " + viewId);&lt;br /&gt;       &lt;br /&gt;  //Menu&lt;br /&gt;  List&amp;lt;NavigationMenuItem&amp;gt; contextMenu = null;&lt;br /&gt;  &lt;br /&gt;  if(viewId.equals("/home.jsp"))&lt;br /&gt;  {&lt;br /&gt;   //Context Menu&lt;br /&gt;   contextMenu = new ArrayList&amp;lt;NavigationMenuItem&amp;gt;();&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Application Development", "nav_services_applicationdevelopment", null, false));&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Consultancy Services", "nav_services_consultancy", null, false));&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Recruitment Services", "nav_services_recruitment", null, false));&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Contact Us", "nav_contact", null, false));&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if(&lt;br /&gt;      viewId.equals("/applicationdevelopment.jsp")&lt;br /&gt;    || viewId.equals("/recruitment.jsp")&lt;br /&gt;   )&lt;br /&gt;  {&lt;br /&gt;   contextMenu = new ArrayList&amp;lt;NavigationMenuItem&amp;gt;();&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Price Guide", "nav_price", null, false));&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Contact Us", "nav_contact", null, false));&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if(viewId.equals("/consultancy.jsp"))&lt;br /&gt;  {&lt;br /&gt;   contextMenu = new ArrayList&amp;lt;NavigationMenuItem&amp;gt;();&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Our Consultants", "nav_consultants", null, false));&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Price Guide", "nav_price", null, false));&lt;br /&gt;   contextMenu.add(new NavigationMenuItem("Contact Us", "nav_contact", null, false));&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  //Return menu&lt;br /&gt;  return contextMenu;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public boolean getHasContextMenu()&lt;br /&gt; {&lt;br /&gt;   boolean hasMenu = false;&lt;br /&gt;  &lt;br /&gt;  List&amp;lt;NavigationMenuItem&amp;gt; contextMenu = getContextMenu();&lt;br /&gt;  &lt;br /&gt;  if(contextMenu != null)&lt;br /&gt;   hasMenu = true;&lt;br /&gt;   &lt;br /&gt;  return hasMenu;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public boolean getHasMenu()&lt;br /&gt; {&lt;br /&gt;   return true;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public List&amp;lt;NavigationMenuItem&amp;gt; getMenu()&lt;br /&gt;  {&lt;br /&gt;   //Main Menu&lt;br /&gt;  List&amp;lt;NavigationMenuItem&amp;gt; menu = new ArrayList&amp;lt;NavigationMenuItem&amp;gt;();&lt;br /&gt;  menu.add(new NavigationMenuItem("Home", "nav_home", null, false));&lt;br /&gt;  menu.add(new NavigationMenuItem("Our Consultants", "nav_consultants", null, false));&lt;br /&gt;  menu.add(new NavigationMenuItem("Services", "nav_services", null, false));&lt;br /&gt;  //menu.add(new NavigationMenuItem("Documents", "nav_documents", null, false));&lt;br /&gt;  menu.add(new NavigationMenuItem("Price Guide", "nav_price", null, false));&lt;br /&gt;  //menu.add(new NavigationMenuItem("Web Log", "nav_weblog", null, false));&lt;br /&gt;  menu.add(new NavigationMenuItem("Contact Us", "nav_contact", null, false));&lt;br /&gt;  &lt;br /&gt;  //Services Sub Menu&lt;br /&gt;  List&amp;lt;NavigationMenuItem&amp;gt; services = new ArrayList&amp;lt;NavigationMenuItem&amp;gt;();&lt;br /&gt;  services.add(new NavigationMenuItem("Application Development", "nav_services_applicationdevelopment", null, false));&lt;br /&gt;  services.add(new NavigationMenuItem("Consultancy", "nav_services_consultancy", null, false));&lt;br /&gt;  services.add(new NavigationMenuItem("Recruitment Services", "nav_services_recruitment", null, false));&lt;br /&gt;  &lt;br /&gt;  //Documents Sub Menu&lt;br /&gt;  List&amp;lt;NavigationMenuItem&amp;gt; documents = new ArrayList&amp;lt;NavigationMenuItem&amp;gt;();&lt;br /&gt;   documents.add(new NavigationMenuItem("AJAX", "nav_documents_ajax", null, false));&lt;br /&gt;   documents.add(new NavigationMenuItem("EJB", "nav_documents_ejb", null, false));&lt;br /&gt;   documents.add(new NavigationMenuItem("Hibernate", "nav_documents_hibernate", null, false));&lt;br /&gt;   documents.add(new NavigationMenuItem("JBoss", "nav_documents_jboss", null, false));&lt;br /&gt;   documents.add(new NavigationMenuItem("JSF", "nav_documents_jsf", null, false));&lt;br /&gt;    &lt;br /&gt;  //Add services to main menu&lt;br /&gt;  NavigationMenuItem[] servicesArray = services.toArray(new NavigationMenuItem[0]);&lt;br /&gt;  menu.get(2).setNavigationMenuItems(servicesArray);&lt;br /&gt;  &lt;br /&gt;  //Add documents to main menu&lt;br /&gt;  NavigationMenuItem[] documentsArray = documents.toArray(new NavigationMenuItem[0]);&lt;br /&gt;  //menu.get(3).setNavigationMenuItems(documentsArray);&lt;br /&gt;  &lt;br /&gt;  //Return menu&lt;br /&gt;  return menu;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  public void setContextMenu(List&amp;lt;NavigationMenuItem&amp;gt; contextMenu)&lt;br /&gt; {&lt;br /&gt;  //Do nothing&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public void setHasContextMenu(boolean hasContextMenu)&lt;br /&gt;  {&lt;br /&gt;   //Do nothing&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt; public void setHasMenu(boolean hasMenu)&lt;br /&gt;  {&lt;br /&gt;   //Do nothing&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  public void setMenu(List&amp;lt;NavigationMenuItem&amp;gt; menu)&lt;br /&gt; {&lt;br /&gt;  //Do nothing&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-6542578157774870820?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/6542578157774870820/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=6542578157774870820' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6542578157774870820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/6542578157774870820'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/blog-post_29.html' title='网页中添加三层菜单'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-3850727387794989201</id><published>2007-01-24T18:04:00.000+08:00</published><updated>2007-01-24T18:08:51.089+08:00</updated><title type='text'>debian 下安装中文字体及 startx 问题</title><content type='html'>1) debian 下安装中文字体&lt;br /&gt;apt-get install ttf-arphic-bkai00mp ttf-arphic-bsmi00lp ttf-arphic-gbsn00lp ttf-arphic-gbsn00lp&lt;br /&gt;在/etc/apt/sources.list中加上：&lt;br /&gt;deb &lt;a href="ftp://debian.linux.org.tw/pub/apt"&gt;ftp://debian.linux.org.tw/pub/apt&lt;/a&gt; unstable main&lt;br /&gt;deb &lt;a href="http://apt.debian.org.tw/"&gt;http://apt.debian.org.tw/&lt;/a&gt; unstable main&lt;br /&gt;然后运行apt-get updateapt-get install ttf-arphic-newsung xfonts-wqy&lt;br /&gt;这样就安装好了Firefly和文泉驿字体了&lt;br /&gt;dpkg-reconfigure fontconfig 进行配置&lt;br /&gt;&lt;br /&gt;2) startx 启动报错&lt;br /&gt;我執行dpkg-reconfigure xserver-xfree86 (或dpkg-reconfigure xserver-xorg，根据你安装的xserver)后驱动， 再把Bus ID改成PCI:0:12:0後， 就可以了。 (dpkp-reconfigure xserver-xfree86BUSID输入PCI:01:0:00)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-3850727387794989201?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/3850727387794989201/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=3850727387794989201' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3850727387794989201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/3850727387794989201'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/debian-startx.html' title='debian 下安装中文字体及 startx 问题'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-116960394416494775</id><published>2007-01-24T09:57:00.000+08:00</published><updated>2007-01-24T09:59:05.920+08:00</updated><title type='text'>唐僧的家书(转载)</title><content type='html'>唐僧的家书 &lt;br /&gt;        亲爱的悟空，我这封信写的很慢，因为知道你看字不快。我们已经搬家了，不过地址没改，因为搬家的时候把门牌带来了。这礼拜下两次雨，第一次下3天，第二次下4天。昨天我们去买比撒，店员问我要切成8片还是12片，我说8片就成了，12片吃不完。我给你寄去件外套，怕邮寄时超重，把扣子剪下来放口袋里了。嫦娥生了，因为不知道是男是女，所以不知道你是该当舅舅还是阿姨。最后告诉你本来想给你寄钱。可是信封已经封上了……   元旦快到了,别忘了给孩子们讲讲很久很久很久以前的事：那时候天还是蓝的，水也是绿的，庄稼是长在地里的，猪肉是可以放心吃的，耗子还是怕猫的，法庭是讲理的，结婚是先谈恋爱的，理发店是只管理发的，药是可以治病的，医生是救死扶伤的，拍电影是不需要陪导演睡觉的，照相是要穿衣服的，欠钱是要还的，孩子的爸爸是明确的，学校是不图挣钱的，白痴是不能当教授的，卖狗肉是不能挂羊头的，结婚了是不能泡MM的，买东西是要付钱的&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-116960394416494775?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/116960394416494775/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=116960394416494775' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116960394416494775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116960394416494775'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/blog-post_24.html' title='唐僧的家书(转载)'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-116851183597487032</id><published>2007-01-19T06:36:00.000+08:00</published><updated>2007-01-20T17:55:39.026+08:00</updated><title type='text'>今天晚上要看的</title><content type='html'>java help&lt;br /&gt;http://www.ibm.com/developerworks/cn/java/j-javahelp2/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-116851183597487032?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/116851183597487032/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=116851183597487032' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116851183597487032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116851183597487032'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/blog-post_19.html' title='今天晚上要看的'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-116849550732442102</id><published>2007-01-11T14:04:00.000+08:00</published><updated>2007-01-11T14:05:07.533+08:00</updated><title type='text'>以后要多做算法题</title><content type='html'>http://acm.zju.edu.cn/&lt;br /&gt;&lt;br /&gt;加油～&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-116849550732442102?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/116849550732442102/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=116849550732442102' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116849550732442102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116849550732442102'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/blog-post_116849550732442102.html' title='以后要多做算法题'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-116849237416970249</id><published>2007-01-11T13:11:00.000+08:00</published><updated>2007-01-11T13:12:54.446+08:00</updated><title type='text'>电脑族的健康菜单</title><content type='html'>电脑族的健康菜单&lt;br /&gt;&lt;br /&gt;　　每天至少8小时与电脑为伍吗？你经常熬夜，并用“垃圾食物”果腹吗？你有眼睛疲劳、腰酸背痛等等症状吗？如果答案肯定，那么你就应该特别关注了。及时补充营养，调整饮食菜单。其中健脑、护眼、补钙这三大方面是最关键的。&lt;br /&gt;&lt;br /&gt;　 &lt;strong&gt;健脑元素 &lt;/strong&gt;&lt;br /&gt;　 &lt;br /&gt;　 脂肪类：代表性食物有坚果、芝麻、自然状态下饲养的动物等。&lt;br /&gt;　 蛋白质：代表性食物有瘦肉、鸡蛋、鱼类等。&lt;br /&gt;　 碳水化合物：代表性食物有杂粮、糙米、红糖、糕点等。&lt;br /&gt;　 维生素C：代表性食物有鲜果类、黄绿色蔬菜等。&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;B族维生素&lt;/strong&gt;&lt;br /&gt;    包括维生素B1、维生素B2、叶酸等，代表性食物有香菇、野菜等。坚果含有大量的蛋白质、不饱和脂肪酸、卵磷脂、无机盐和维生素，经常食用，对改善脑营养供给很有益处。 &lt;br /&gt;&lt;br /&gt;　　香菇、鸡蛋、鱼类、黄花菜、洋葱、小米、龙眼、柚子&lt;br /&gt;&lt;br /&gt;　  &lt;strong&gt;护眼元素&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;　　维生素A和β-胡萝卜素有助于补肝明目，缓解眼睛疲劳。维生素A主要存在于各种动物的肝脏、鱼肝油、蛋黄中。植物性食物只能提供维生素A原。β-胡萝卜素主要存在于胡萝卜、西红柿、波菜、韭菜、杏、红薯等绿黄色蔬果中。 &lt;br /&gt;&lt;br /&gt;　　维生素C、胡萝卜、菠菜、西红柿、韭菜、枸杞子、青椒、杏、枣&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;钙的重要性&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;　　钙是人体生命活动的调节剂，是人体生命之源。在维持人体循环、呼吸、神经、内分泌、消化、血液、肌肉、骨骼、泌尿、免疫等各系统正常生理功能中起重要调节作用。人体没有任何系统的功能于钙无关，钙代谢平衡对于维持生命和健康起到至关重要的作用。 &lt;br /&gt;&lt;br /&gt;　　牛奶、海米、油菜、黑芝麻、黄豆、西兰花、芹菜、紫菜。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-116849237416970249?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/116849237416970249/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=116849237416970249' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116849237416970249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116849237416970249'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/blog-post_11.html' title='电脑族的健康菜单'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-116790568708865403</id><published>2007-01-08T10:54:00.000+08:00</published><updated>2007-01-08T11:53:03.390+08:00</updated><title type='text'>自己的服务器</title><content type='html'>最近想把闲置的机器利用起来，做成 ftp、web 等功能的服务器，首先需要解决不少问题呢，先记下来：&lt;br /&gt;1. 分区&lt;br /&gt;2. ssh,ftp 权限控制&lt;br /&gt;3. ADSL&lt;br /&gt;4. 防火墙&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;解决方案：&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. 分区 &lt;br /&gt;硬盘80G，内存512M&lt;br /&gt;/boot 128M&lt;br /&gt;/var  50G 尽量分配大一&lt;br /&gt;/     20G&lt;br /&gt;swap  1G  内存的两倍&lt;br /&gt;&lt;br /&gt;2. ssh,ftp 权限控制&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. ADSL 拨号&lt;br /&gt;&lt;br /&gt;4. 防火墙&lt;br /&gt;&lt;br /&gt;5. 代理 Squid&lt;br /&gt;&lt;br /&gt;6. 网络结构&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-116790568708865403?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/116790568708865403/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=116790568708865403' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116790568708865403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116790568708865403'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2007/01/blog-post.html' title='自己的服务器'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23853951.post-116585414607940974</id><published>2006-12-31T00:21:00.000+08:00</published><updated>2006-12-31T11:32:10.176+08:00</updated><title type='text'>架设 wiki -- MoinMoin server</title><content type='html'>简介&lt;br /&gt;&lt;br /&gt;    *&lt;br /&gt;      MoinMoin 是用 Python 语言写的一个开源的 WiKi 引擎，基于 GNU GPL 协议发布。MoinMoin 的软件架构很灵活，通过 Python 能很容易进行功能扩展，现在已开发出大量的 Extensions。MoinMoin 不使用后台数据库存放数据，而是以文本的形式存放在服务器目录中。&lt;br /&gt;    *&lt;br /&gt;      MoinMoin 不带 Web 服务器，需与 Web 服务器配合才能进行 WiKi 页面的发布。MoinMoin 支持的 Web 服务器有Apache + CGI、Apache + FastCgi、Apache + Mod_Python、IIS 等。dot1 上面 MoinMoin 采用 Apache + CGI 方式。 &lt;br /&gt;&lt;br /&gt;准备工作&lt;br /&gt;&lt;br /&gt;    * 1.保证 Apache、python 已安装并能正常工作；&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      2.下载最新版 moin-1.5.6, http://moinmoin.wikiwikiweb.de/MoinMoinDownload &lt;br /&gt;&lt;br /&gt;安装配置&lt;br /&gt;&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      安装 MoinMoin&lt;br /&gt;    * tar zxvf moin-1.5.6.tar.gz&lt;br /&gt;    * cd moin-1.5.6&lt;br /&gt;    * python -v setup.py install&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      默认安装在 /usr/share/moin 目录下面，该目录存放 MoinMoin 系统的模板，内容大致有以下几类：&lt;br /&gt;          o&lt;br /&gt;&lt;br /&gt;            /usr/share/moin/data 目录存放 WiKi pages,users,plugin,cache 等&lt;br /&gt;          o&lt;br /&gt;&lt;br /&gt;            /usr/share/moin/underlay 目录存放默认的 WiKi pages，有多种语言版本的帮助文档、默认页面文档等&lt;br /&gt;          o /usr/share/moin/htdocs 目录存放网页元素，如图片、主题风格等&lt;br /&gt;          o /usr/share/moin/server 目录存放服务器启动脚本示例&lt;br /&gt;          o /usr/share/moin/config目录存放配置文件示例 &lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      通过拷贝模板目录中的文件，就可生成不同的 WiKi 实例。MoinMoin 的软件升级也很简单，只需用新版的模板文件下覆盖旧文就可以了。&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      创建 MoinMoin 实例&lt;br /&gt;    * 在服务器上创建一个目录用于存放实例，目录名不能是 wiki，它已被系统保留使用，这里我们使用 ccosswiki ，并从模板目录拷贝实例所需文件，如下：&lt;br /&gt;          o cd /var/www&lt;br /&gt;          o mkdir ccosswiki&lt;br /&gt;          o cp -rf /usr/share/moin/data ccosswiki&lt;br /&gt;          o cp -rf /usr/share/moin/underlay ccosswiki&lt;br /&gt;          o cp /usr/share/moin/config/wikiconfig.py ccosswiki &lt;br /&gt;    * 设置实例目录权限&lt;br /&gt;    * chown -R apache.apache ccosswiki&lt;br /&gt;    * chmod -R ug+rw ccosswiki&lt;br /&gt;    * chmod -R o-rwx ccosswiki&lt;br /&gt;    * 配置 Apache + CGI 方式&lt;br /&gt;    * 1.cp /usr/share/moin/server/moin.cgi /var/www/ccosswiki&lt;br /&gt;    * 2.修改 moin.cgi 中 sys.path.insert() 路径，如下：&lt;br /&gt;          o sys.path.insert(0, '/var/www/ccosswiki/') &lt;br /&gt;    * 3.配置 wikiconfig.py &lt;br /&gt;&lt;br /&gt;# -*- coding: utf-8 -*-               #使用UTF-8编码&lt;br /&gt;# IMPORTANT! This encoding (charset) setting MUST be correct! If you live in a&lt;br /&gt;# western country and you don't know that you use utf-8, you probably want to&lt;br /&gt;# use iso-8859-1 (or some other iso charset). If you use utf-8 (a Unicode&lt;br /&gt;# encoding) you MUST use: coding: utf-8&lt;br /&gt;# That setting must match the encoding your editor uses when you modify the&lt;br /&gt;# settings below. If it does not, special non-ASCII chars will be wrong.&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;    MoinMoin - Configuration for a single wiki&lt;br /&gt;&lt;br /&gt;    If you run a single wiki only, you can omit the farmconfig.py config&lt;br /&gt;    file and just use wikiconfig.py - it will be used for every request&lt;br /&gt;    we get in that case.&lt;br /&gt;&lt;br /&gt;    Note that there are more config options than you'll find in&lt;br /&gt;    the version of this file that is installed by default; see&lt;br /&gt;    the module MoinMoin.multiconfig for a full list of names and their&lt;br /&gt;    default values.&lt;br /&gt;&lt;br /&gt;    Also, the URL http://moinmoin.wikiwikiweb.de/HelpOnConfiguration has&lt;br /&gt;    a list of config options.&lt;br /&gt;&lt;br /&gt;    ** Please do not use this file for a wiki farm. Use the sample file&lt;br /&gt;    from the wikifarm directory instead! **&lt;br /&gt;&lt;br /&gt;    @copyright: 2000-2005 by Juergen Hermann &lt;jh@web.de&gt;&lt;br /&gt;    @license: GNU GPL, see COPYING for details.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;from MoinMoin.multiconfig import DefaultConfig&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Config(DefaultConfig):&lt;br /&gt;&lt;br /&gt;    # Wiki identity ----------------------------------------------------&lt;br /&gt;&lt;br /&gt;    # Site name, used by default for wiki name-logo [Unicode]&lt;br /&gt;    sitename = u'CCOSS Wiki'             #你的WiKi网站的名称&lt;br /&gt;&lt;br /&gt;    # Wiki logo. You can use an image, text or both. [Unicode]&lt;br /&gt;    # For no logo or text, use '' - the default is to show the sitename.&lt;br /&gt;    # See also url_prefix setting below!&lt;br /&gt;    logo_string = u'&lt;img src="/wiki/common/ccosslogo.png" alt="MoinMoin Logo"&gt;'    #网站Logo&lt;br /&gt;&lt;br /&gt;    # name of entry page / front page [Unicode], choose one of those:&lt;br /&gt;&lt;br /&gt;    # a) if most wiki content is in a single language&lt;br /&gt;    #page_front_page = u"MyStartingPage"&lt;br /&gt;&lt;br /&gt;    # b) if wiki content is maintained in many languages&lt;br /&gt;    page_front_page = u"FrontPage"                #启用首页&lt;br /&gt;&lt;br /&gt;    # The interwiki name used in interwiki links&lt;br /&gt;    #interwikiname = 'UntitledWiki'&lt;br /&gt;    # Show the interwiki name (and link it to page_front_page) in the Theme,&lt;br /&gt;    # nice for farm setups or when your logo does not show the wiki's name.&lt;br /&gt;    #show_interwiki = 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    # Critical setup  ---------------------------------------------------&lt;br /&gt;&lt;br /&gt;    # Misconfiguration here will render your wiki unusable. Check that&lt;br /&gt;    # all directories are accessible by the web server or moin server.&lt;br /&gt;&lt;br /&gt;    # If you encounter problems, try to set data_dir and data_underlay_dir&lt;br /&gt;    # to absolute paths.&lt;br /&gt;&lt;br /&gt;    # Where your mutable wiki pages are. You want to make regular&lt;br /&gt;    # backups of this directory.&lt;br /&gt;    data_dir = '/root/mywiki/data/'                #设置data目录路径，要用绝对路径&lt;br /&gt;&lt;br /&gt;    # Where read-only system and help page are. You might want to share&lt;br /&gt;    # this directory between several wikis. When you update MoinMoin,&lt;br /&gt;    # you can safely replace the underlay directory with a new one. This&lt;br /&gt;    # directory is part of MoinMoin distribution, you don't have to&lt;br /&gt;    # backup it.&lt;br /&gt;    data_underlay_dir = '/root/mywiki/underlay/'   #设置underlay目录路径，要用绝对路径&lt;br /&gt;&lt;br /&gt;    # This must be '/wiki' for twisted and standalone. For CGI, it should&lt;br /&gt;    # match your Apache Alias setting.&lt;br /&gt;    url_prefix = '/wiki'                           &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    # Security ----------------------------------------------------------&lt;br /&gt;&lt;br /&gt;    # This is checked by some rather critical and potentially harmful actions,&lt;br /&gt;    # like despam or PackageInstaller action:&lt;br /&gt;    superuser = [u"root", ]                                         #设置超级用户&lt;br /&gt;&lt;br /&gt;    # IMPORTANT: grant yourself admin rights! replace YourName with&lt;br /&gt;    # your user name. See HelpOnAccessControlLists for more help.&lt;br /&gt;    # All acl_rights_xxx options must use unicode [Unicode]&lt;br /&gt;    acl_rights_before = u"YourName:read,write,delete,revert,admin"   #设置管理权限&lt;br /&gt;&lt;br /&gt;    # Link spam protection for public wikis (Uncomment to enable)&lt;br /&gt;    # Needs a reliable internet connection.&lt;br /&gt;    #from MoinMoin.util.antispam import SecurityPolicy&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    # Mail --------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;    # Configure to enable subscribing to pages (disabled by default)&lt;br /&gt;    # or sending forgotten passwords.&lt;br /&gt;&lt;br /&gt;    # SMTP server, e.g. "mail.provider.com" (None to disable mail)&lt;br /&gt;    mail_smarthost = "192.168.28.200"                  #使用21cn的smtp服务器发送邮件&lt;br /&gt;&lt;br /&gt;    # The return address, e.g u"Jürgen Wiki &lt;noreply@mywiki.org&gt;" [Unicode]&lt;br /&gt;    mail_from = u"hongzhiyi&lt;hongzhiyi@ccoss.com.cn&gt;"   #发送者&lt;br /&gt;&lt;br /&gt;    # "user pwd" if you need to use SMTP AUTH&lt;br /&gt;    mail_login = "hongzhiyi 123456"                    #SMTP服务器验证，以"user password"格式填写&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    # User interface ----------------------------------------------------&lt;br /&gt;&lt;br /&gt;    # Add your wikis important pages at the end. It is not recommended to&lt;br /&gt;    # remove the default links.  Leave room for user links - don't use&lt;br /&gt;    # more than 6 short items.&lt;br /&gt;    # You MUST use Unicode strings here, but you need not use localized&lt;br /&gt;    # page names for system and help pages, those will be used automatically&lt;br /&gt;    # according to the user selected language. [Unicode]&lt;br /&gt;    navi_bar = [                                        #设置导航栏&lt;br /&gt;        # If you want to show your page_front_page here:&lt;br /&gt;        u'%(page_front_page)s',&lt;br /&gt;        u'RecentChanges',&lt;br /&gt;        u'FindPage',&lt;br /&gt;        u'HelpContents',&lt;br /&gt;    ]&lt;br /&gt;&lt;br /&gt;    # The default theme anonymous or new users get&lt;br /&gt;    theme_default = 'modern'                            #设置网页主题峁&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    # Language options --------------------------------------------------&lt;br /&gt;&lt;br /&gt;    # See http://moinmoin.wikiwikiweb.de/ConfigMarket for configuration in&lt;br /&gt;    # YOUR language that other people contributed.&lt;br /&gt;&lt;br /&gt;    # The main wiki language, set the direction of the wiki pages&lt;br /&gt;    language_default = 'zh'                             #设置默认语言&lt;br /&gt;&lt;br /&gt;    # You must use Unicode strings here [Unicode]&lt;br /&gt;    page_category_regex = u'^Category[A-Z]'&lt;br /&gt;    page_dict_regex = u'[a-z]Dict$'&lt;br /&gt;    page_form_regex = u'[a-z]Form$'&lt;br /&gt;    page_group_regex = u'[a-z]Group$'&lt;br /&gt;    page_template_regex = u'[a-z]Template$'&lt;br /&gt;&lt;br /&gt;    # Content options ---------------------------------------------------&lt;br /&gt;&lt;br /&gt;    # Show users hostnames in RecentChanges&lt;br /&gt;    show_hosts = 1&lt;br /&gt;&lt;br /&gt;    # Enable graphical charts, requires gdchart.&lt;br /&gt;    #chart_options = {'width': 600, 'height': 300}&lt;br /&gt;&lt;br /&gt;    * 4.配置 Apache2&lt;br /&gt;    * 在 /etc/httpd/conf.d/ 下新增 moinmoin.conf，添加如下内容： &lt;br /&gt;&lt;br /&gt;Alias /wiki/ "/usr/share/moin/htdocs/"&lt;br /&gt;&lt;Directory "/usr/share/moin/htdocs/"&gt;&lt;br /&gt;     Order deny,allow&lt;br /&gt;     Allow from all&lt;br /&gt;&lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;ScriptAlias /ccosswiki "/var/www/ccosswiki/moin.cgi"&lt;br /&gt;&lt;Directory "/var/www/ccosswiki"&gt;&lt;br /&gt;     Order deny,allow&lt;br /&gt;     Allow from all&lt;br /&gt;&lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;    * 重启 Apache 并测试 Wiki&lt;br /&gt;    * 1./etc/init.d/httpd reload&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      2.在浏览器中输入 http://192.168.28.1/ccosswiki&lt;br /&gt;    * 安装中文语言包&lt;br /&gt;    * 测试成功后，添加新用户，输入 root 用户名(在 wikiconfig.py 设置的超级用户)，然后以 root 身份登录，输入以下网址：&lt;br /&gt;          o&lt;br /&gt;&lt;br /&gt;            http://192.168.28.1/ccosswiki/SystemPagesSetup&lt;br /&gt;          o&lt;br /&gt;&lt;br /&gt;            如果你没有管理权限，访问该页面时在语言包前面是不会显示安装按钮的。 &lt;br /&gt;&lt;br /&gt;相关配置&lt;br /&gt;&lt;br /&gt;    * 设置时区&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      除了手动更改外，我没找到好的办法 :(&lt;br /&gt;    * 具体操作：在“用户设置”、“时区”中修改“您的当地时间是”为+8的时间，比如 2006-12-13 14:36:54 [+08:00]&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      PS.刚试了几个采用 MoinMoin 的中文 Wiki 也有这个问题。&lt;br /&gt;    * 其它设置 &lt;br /&gt;&lt;br /&gt;补充&lt;br /&gt;&lt;br /&gt;    * 采用 Apache + Mod_Python 方式&lt;br /&gt;    * 这种方式能获得更高的性能，配置也不复杂，至少在我自己的机器上面很轻松搞定&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      1.安装 Mod_Python，目前最新版本为3.2.10，下载地址：http://www.modpython.org，安装过程如下：&lt;br /&gt;          o tar zxvf mod_python-3.2.10.tgz&lt;br /&gt;          o cd mod_python-3.2.10&lt;br /&gt;          o&lt;br /&gt;&lt;br /&gt;            ./configure --with-apxs=/opt/apache2/bin/apxs 由于我机器上的apache没有安装在默认路径，故需要指定 apxs 的路径&lt;br /&gt;          o&lt;br /&gt;&lt;br /&gt;            make &amp;&amp; make install 默认安装在 apache/modules 目录下 &lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      2.配置 /etc/httpd/conf.d/python.conf，添加 LoadModule python_module modules/mod_python.so&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      这时可以重启 apache 看能否正确装载 Mod_Python&lt;br /&gt;    * 3.检查 wikiconfig.py 中 data_dir 和 data_underlay_dir 路径是否正确&lt;br /&gt;    *&lt;br /&gt;&lt;br /&gt;      4.修改 /etc/httpd/conf.d/moinmoin.conf，注释 ScriptAlias ： &lt;br /&gt;&lt;br /&gt;   #ScriptAlias /mywiki "/var/www/moin/mywiki/moin.cgi"&lt;br /&gt;&lt;br /&gt;    * 并增加 &lt;br /&gt;&lt;br /&gt; &lt;Location /mywiki&gt;&lt;br /&gt;    SetHandler python-program&lt;br /&gt;    # Add the path of your wiki directory&lt;br /&gt;    PythonPath "['/var/www/moin/mywiki'] + sys.path"&lt;br /&gt;    PythonHandler MoinMoin.request::RequestModPy.run&lt;br /&gt; &lt;/Location&gt;&lt;br /&gt;&lt;br /&gt;    * 5.重启 apache 测试 &lt;br /&gt;&lt;br /&gt;权限&lt;br /&gt;&lt;br /&gt;1.成为管理员:&lt;br /&gt;在配置文件wikiconfig.py中加入如下一行:&lt;br /&gt;&lt;br /&gt;    acl_rights_default = u'+admin:admin,delete Known:read,write,revert All:read'&lt;br /&gt;&lt;br /&gt;这样非注册用户仅有阅读权限，注册用户(Known指已经注册的用户)可读写;admin拥有管理员权限并且可删除、重命名.简言之,拥有admin权限的就是管理员.&lt;br /&gt;2.建立群组:&lt;br /&gt;假设我们要建立一个名为TrustedGroup的可信赖的组(注意:一个组名应该就是一个WikiName(wiki名),即以首字母大写的两个(或以上)单词组成一个词(单词之间无空格),如TrustedGroup)&lt;br /&gt;1)进入FindPage,建立一个名为TrustedGroup的wiki page&lt;br /&gt;2)编辑TrustedGroup,所有的组员名单以列表方式给出,比如:&lt;br /&gt;&lt;br /&gt;    * hitgnu&lt;br /&gt;    * jeffrey&lt;br /&gt;&lt;br /&gt;由于此页面会影响到访问权限的管理,应该设置其权限于仅允许管理员读写,其他的用户应该对其无任何权限,故而此页的最后内容应该类似如下的方式:&lt;br /&gt;&lt;br /&gt;    #acl +admin:write,read All:&lt;br /&gt;     * hitgnu&lt;br /&gt;     * jeffrey&lt;br /&gt;&lt;br /&gt;3.关键页面授权特定用户组访问:&lt;br /&gt;建立了用户组之后,我们可以指定某个页面授权特定组的特殊权限,只需在该页面添加类似如下的内容:&lt;br /&gt;&lt;br /&gt;    #acl +admin:read,write,revert,delete TrustedGroup:read,write,revert All:&lt;br /&gt;&lt;br /&gt;这样,仅仅管理员和特定的组成员可以看到并可以编辑该页面的内容,有效地保护该页面包含的敏感内容.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23853951-116585414607940974?l=primerlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://primerlife.blogspot.com/feeds/116585414607940974/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23853951&amp;postID=116585414607940974' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116585414607940974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23853951/posts/default/116585414607940974'/><link rel='alternate' type='text/html' href='http://primerlife.blogspot.com/2006/12/wiki-moinmoin-server.html' title='架设 wiki -- MoinMoin server'/><author><name>HongZhiYi</name><uri>http://www.blogger.com/profile/14968831711127428579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_Xh8cy6ODEJk/SRUm3O9xLcI/AAAAAAAAAYI/xF9cDypRz_c/S220/060726223449.jpg'/></author><thr:total>1</thr:total></entry></feed>
