<?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-6655852</id><updated>2012-01-24T00:23:32.382-08:00</updated><category term='linux'/><category term='hack'/><category term='fork.c'/><category term='szlug'/><category term='gentoo'/><category term='initramfs'/><category term='paste'/><category term='system load'/><category term='smu'/><category term='curl'/><category term='bash'/><category term='undocumented'/><category term='ols2008'/><category term='donate blood'/><category term='ptrace'/><category term='git'/><category term='syscall'/><category term='gentoo linux'/><category term='getopt'/><category term='kernel'/><category term='keyboard'/><category term='linuxfest'/><category term='vim'/><category term='ubuntu'/><category term='ols'/><category term='google'/><category term='uganda'/><title type='text'>A Kernel Newbie's Startting Point</title><subtitle type='html'>Just a Kernel Newbie.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.crquan.info/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6655852.post-1989993429381443550</id><published>2012-01-24T00:00:00.000-08:00</published><updated>2012-01-24T00:00:09.073-08:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/szlug/msg/dbe8181a59335f1f"&gt;http://groups.google.com/group/szlug/msg/dbe8181a59335f1f&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.facebook.com/LAArboretum"&gt;http://www.facebook.com/LAArboretum&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.chineseinla.com/f/page_viewtopic/t_613.html"&gt;http://www.chineseinla.com/f/page_viewtopic/t_613.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-1989993429381443550?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/1989993429381443550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=1989993429381443550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/1989993429381443550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/1989993429381443550'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2012/01/httpgroups.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-8054226816817793454</id><published>2011-09-28T21:53:00.000-07:00</published><updated>2012-01-09T23:06:38.343-08:00</updated><title type='text'></title><content type='html'>爷爷走得很突然。&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;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/6655852-8054226816817793454?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/8054226816817793454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=8054226816817793454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8054226816817793454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8054226816817793454'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/09/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total><georss:featurename>950 S Main St, Milpitas, CA 95035, USA</georss:featurename><georss:point>37.417799 -121.903067</georss:point><georss:box>37.4162225 -121.90553449999999 37.4193755 -121.9005995</georss:box></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-6555984141301535211</id><published>2011-09-14T16:33:00.000-07:00</published><updated>2012-01-01T09:10:23.823-08:00</updated><title type='text'></title><content type='html'>run MegaCli under Linux kernel 3.0 with LD_PRELOAD a fake uname&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;the MegaCli tool seems doesn't recognize the kernel 3.0; even the latest&amp;nbsp;8.02.16_MegaCLI&lt;br /&gt;&lt;a href="http://www.lsi.com/products/storagecomponents/Pages/MegaRAIDSAS9240-8i.aspx#misc"&gt;http://www.lsi.com/products/storagecomponents/Pages/MegaRAIDSAS9240-8i.aspx#misc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since&amp;nbsp;lsi only provides its binary, we cannot know what is lsi internally doing, what we can do is only to strace it,&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Gentoo-11 tmp # env -i strace -v -e execve,open,ioctl,uname ./opt/MegaRAID/MegaCli/MegaCli64 -adpCount&lt;br /&gt;execve("./opt/MegaRAID/MegaCli/MegaCli64", ["./opt/MegaRAID/MegaCli/MegaCli64", "-adpCount"], []) = 0&lt;br /&gt;open("/etc/ld.so.cache", O_RDONLY)      = 3&lt;br /&gt;open("/lib64/libpthread.so.0", O_RDONLY) = 3&lt;br /&gt;open("/lib64/libncurses.so.5", O_RDONLY) = 3&lt;br /&gt;open("/lib64/libdl.so.2", O_RDONLY)     = 3&lt;br /&gt;open("/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/libstdc++.so.6", O_RDONLY) = 3&lt;br /&gt;open("/lib64/libm.so.6", O_RDONLY)      = 3&lt;br /&gt;open("/lib64/libgcc_s.so.1", O_RDONLY)  = 3&lt;br /&gt;open("/lib64/libc.so.6", O_RDONLY)      = 3&lt;br /&gt;                                     &lt;br /&gt;open("/proc/devices", O_RDONLY)         = 3&lt;br /&gt;open("/dev/megaraid_sas_ioctl_node", O_RDONLY) = 3&lt;br /&gt;open("/proc/devices", O_RDONLY)         = 4&lt;br /&gt;uname({sysname="Linux", nodename="Gentoo-11", release="3.0.0-gentoo-r1", version="#1 SMP Mon Aug 1 02:33:28 UTC 2011", machine="x86_64"}) = 0&lt;br /&gt;open("/proc/scsi/megaraid_sas/hba_map/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)&lt;br /&gt;open("/proc/scsi/megasr/hba_map/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)&lt;br /&gt;ioctl(3, MCE_GET_RECORD_LEN or MEMGETINFO or MFB_SET_CHROMA_KEY or MTRRIOC32_SET_ENTRY or MTRRIOC_SET_ENTRY, 0x790880) = -1 ENODEV (No such device)&lt;br /&gt;&lt;br /&gt;Controller Count: 0.&lt;br /&gt;open("MegaSAS.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4&lt;br /&gt;&lt;br /&gt;Exit Code: 0x00&lt;br /&gt;open("MegaSAS.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;we found it tried a uname to get system info, then try to read the driver's proc file "/proc/scsi/megaraid_sas/hba_map/", but the current system has megaraid_sas driver but doesn't provide that proc file; through searching online I found that proc file was provided by a megaraid legacy driver in Linux-2.4 kernel, so&amp;nbsp;the problem is probably here, the MegaCli doesn't recognize the kernel release&amp;nbsp;"3.0.0-gentoo-r1" from uname system call, and judged it as Linux-2.4; dam it;&lt;br /&gt;&lt;br /&gt;What I clearly remember is several months ago in last Gentoo-11.1 livedvd (surely with linux kernel 2.6) the MegaCli was still working, so the following is how can we fool MegaCli's uname system call as Linux kernel 2.6?&lt;br /&gt;&lt;br /&gt;The answer is to fake a uname syscall via LD_PRELOAD;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Gentoo-11 tmp # cat fake-uname.c&lt;br /&gt;#define _GNU_SOURCE&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/syscall.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/utsname.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int uname(struct utsname *buf)&lt;br /&gt;{&lt;br /&gt; int ret;&lt;br /&gt;&lt;br /&gt; ret = syscall(SYS_uname, buf);&lt;br /&gt;&lt;br /&gt; printf("uname release: \"%s\"\n", buf-&amp;gt;release);&lt;br /&gt; strcpy(buf-&amp;gt;release, "2.6.40");&lt;br /&gt; printf("uname release set to: \"%s\"\n", buf-&amp;gt;release);&lt;br /&gt; printf("uname version: \"%s\"\n", buf-&amp;gt;version);&lt;br /&gt;&lt;br /&gt; return ret;&lt;br /&gt;}&lt;/string.h&gt;&lt;/stdio.h&gt;&lt;/sys&gt;&lt;/sys&gt;&lt;/sys&gt;&lt;/unistd.h&gt;&lt;/pre&gt;&lt;br /&gt;Save it as fake-uname.c, and compile it with&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Gentoo-11 tmp # gcc -Wall -fPIC -c fake-uname.c&lt;br /&gt;Gentoo-11 tmp # gcc -Wall -shared -o libfake-uname.so fake-uname.o&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we get libfake-uname.so, use LD_PRELOAD=./libfake-uname.so to preload it, over uname from glibc:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Gentoo-11 tmp # LD_PRELOAD=./libfake-uname.so LD_LIBRARY_PATH=./opt/lsi/3rdpartylibs/x86_64 ./opt/MegaRAID/MegaCli/MegaCli64 -adpCount&lt;br /&gt;                                     &lt;br /&gt;uname release: "3.0.0-gentoo-r1"&lt;br /&gt;uname release set to: "2.6.40"&lt;br /&gt;uname version: "#1 SMP Mon Aug 1 02:33:28 UTC 2011"&lt;br /&gt;&lt;br /&gt;Controller Count: 1.&lt;br /&gt;&lt;br /&gt;Exit Code: 0x01&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Found the controller!And the strace log:&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;open("/lib64/libc.so.6", O_RDONLY)      = 3&lt;br /&gt;                                     &lt;br /&gt;open("/proc/devices", O_RDONLY)         = 3&lt;br /&gt;open("/dev/megaraid_sas_ioctl_node", O_RDONLY) = 3&lt;br /&gt;open("/proc/devices", O_RDONLY)         = 4&lt;br /&gt;uname({sysname="Linux", nodename="Gentoo-11", release="3.0.0-gentoo-r1", version="#1 SMP Mon Aug 1 02:33:28 UTC 2011", machine="x86_64"}) = 0&lt;br /&gt;uname release: "3.0.0-gentoo-r1"&lt;br /&gt;uname release set to: "2.6.40"&lt;br /&gt;uname version: "#1 SMP Mon Aug 1 02:33:28 UTC 2011"&lt;br /&gt;open("./opt/lsi/3rdpartylibs/x86_64/tls/x86_64/libsysfs.so.2.0.2", O_RDONLY) = -1 ENOENT (No such file or directory)&lt;br /&gt;open("./opt/lsi/3rdpartylibs/x86_64/tls/libsysfs.so.2.0.2", O_RDONLY) = -1 ENOENT (No such file or directory)&lt;br /&gt;open("./opt/lsi/3rdpartylibs/x86_64/x86_64/libsysfs.so.2.0.2", O_RDONLY) = -1 ENOENT (No such file or directory)&lt;br /&gt;open("./opt/lsi/3rdpartylibs/x86_64/libsysfs.so.2.0.2", O_RDONLY) = 4&lt;br /&gt;open("/sys/class/scsi_host", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 4&lt;br /&gt;open("/sys/class/scsi_host", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 4&lt;br /&gt;open("/sys/devices/pci0000:00/0000:00:1f.2/host0/scsi_host/host0/proc_name", O_RDONLY) = 4&lt;br /&gt;open("/sys/devices/pci0000:00/0000:00:1f.2/host1/scsi_host/host1/proc_name", O_RDONLY) = 4&lt;br /&gt;open("/sys/devices/pci0000:00/0000:00:1f.2/host2/scsi_host/host2/proc_name", O_RDONLY) = 4&lt;br /&gt;open("/sys/devices/pci0000:00/0000:00:1f.2/host3/scsi_host/host3/proc_name", O_RDONLY) = 4&lt;br /&gt;open("/sys/devices/pci0000:00/0000:00:1f.1/host4/scsi_host/host4/proc_name", O_RDONLY) = 4&lt;br /&gt;open("/sys/devices/pci0000:00/0000:00:1f.1/host5/scsi_host/host5/proc_name", O_RDONLY) = 4&lt;br /&gt;open("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host7/scsi_host/host7/proc_name", O_RDONLY) = 4&lt;br /&gt;ioctl(3, MCE_GET_RECORD_LEN or MEMGETINFO or MFB_SET_CHROMA_KEY or MTRRIOC32_SET_ENTRY or MTRRIOC_SET_ENTRY, 0x790420) = 0&lt;br /&gt;&lt;br /&gt;Controller Count: 1.&lt;br /&gt;open("MegaSAS.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4&lt;br /&gt;&lt;br /&gt;Exit Code: 0x01&lt;br /&gt;open("MegaSAS.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4&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/6655852-6555984141301535211?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/6555984141301535211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=6555984141301535211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6555984141301535211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6555984141301535211'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/09/run-megacli-under-linux-kernel-3.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-424959487785272828</id><published>2011-08-29T23:59:00.000-07:00</published><updated>2011-08-30T08:17:41.164-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><title type='text'></title><content type='html'>&lt;a href="http://www.linuxpicnic.org/twiki/bin/view/Picnix20/"&gt;http://www.linuxpicnic.org/twiki/bin/view/Picnix20/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Picn*x 20 - The Linux 20th Anniversary Picnic 简单回顾&lt;br /&gt;&lt;br /&gt;硅谷地区一年一度的 Linux 周年纪念日野餐活动照例在 &lt;a href="http://www.sunnyvale.ca.gov/Departments/CommunityServices/Parks/BaylandsPark.aspx"&gt;Sunnyvale Baylands Park&lt;/a&gt;.举办，上周六8月27日上午11点到下午4点；这个活动自2001年的Linux十周年纪念开始到现在已经是第十个年头了；地点所在公园其实是沿着 SF Bay 从 Palo Alto, Mountain View, Sunnyvale, Santa Clara, 到 Milpitas 很长的海湾公园的其中一段，刚好这一段在 Sunnyvale 而已；公园的网站上有写明禁止宠物入内，主要是保护海湾公园的珍稀动植物，号召 Commute 拼车或乘公交前往，我就乘坐VTA轨道线到Crossman车站并下车步行了二十分钟到达；&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xIdlIZgvRfM/Tlx6kpz09ZI/AAAAAAAABoM/Gh2vMR6bMKE/s1600/DSC_0059.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-xIdlIZgvRfM/Tlx6kpz09ZI/AAAAAAAABoM/Gh2vMR6bMKE/s320/DSC_0059.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;这里是VTA轨道线Crossman车站、硅谷一带到处都是知名公司、这里背后是NetApp&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2dFwAOw4evA/Tlx3_brS7OI/AAAAAAAABnQ/Ok9ePfCbBGM/s1600/DSC_0019.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-2dFwAOw4evA/Tlx3_brS7OI/AAAAAAAABnQ/Ok9ePfCbBGM/s320/DSC_0019.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;路过NetApp的超小型四座送货车&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vJ_r6ynFZOU/Tlx4QGbq3mI/AAAAAAAABnU/XGnLXEWyCOA/s1600/DSC_0022.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-vJ_r6ynFZOU/Tlx4QGbq3mI/AAAAAAAABnU/XGnLXEWyCOA/s320/DSC_0022.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;到达了会场，远观真是声势浩大，有上百人吧&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-C2bnaZGCtQY/Tlx4iPIGPuI/AAAAAAAABnY/-FDQWijvUXM/s1600/DSC_0029.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-C2bnaZGCtQY/Tlx4iPIGPuI/AAAAAAAABnY/-FDQWijvUXM/s320/DSC_0029.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;登记后每人贴上贴纸姓名便于聊天时互相可以知道姓名；近观看到很多都是Family一同前来的，甚至还带着刚出生的Baby就放在桌子上玩&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-GPhAf12_2H4/Tlx4sNzfbmI/AAAAAAAABnc/z3X8aSYx4XA/s1600/DSC_0024.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-GPhAf12_2H4/Tlx4sNzfbmI/AAAAAAAABnc/z3X8aSYx4XA/s320/DSC_0024.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Fedora组的OLPC、上面是Fedora15的Sugar界面；和手摇发电机、背后还有一块是太阳能电池板，能在野外有日光的情况下给电脑充电&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4QXYDnRC49I/Tlx4w57co0I/AAAAAAAABng/xe6Ddb6e7B0/s1600/DSC_0027.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-4QXYDnRC49I/Tlx4w57co0I/AAAAAAAABng/xe6Ddb6e7B0/s320/DSC_0027.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ubuntu组的情况在哪里都是人最多的、不过这次我都没有时间去近观&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-T1yGtlnXzxM/Tlx5DkjfTPI/AAAAAAAABnk/jP6VSXakeEc/s1600/DSC_0033.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-T1yGtlnXzxM/Tlx5DkjfTPI/AAAAAAAABnk/jP6VSXakeEc/s320/DSC_0033.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;左边是家长带着他的小孩前来学习OLPC；&lt;br /&gt;背后的白帽大叔是SFLUG的活跃成员，他们城区的活动比较多；&lt;br /&gt;我在里面问到什么时候会用上 Wayland Default; 以及 Multi Pointer 特性有没有；&lt;br /&gt;好像人们普遍误区把&amp;nbsp;Multi Pointer 理解成 Multi Mouse 支持了，我仔细解释了一下现有的 Linux 桌面上插多个 Mouse 还是只能控制同一个 Cursor; 而真正的 Multi Pointer 是指屏幕上会出现多个 Cursor, 每个 Mouse 分别控制一个；虽然这个概念很早就有了，在Xorg上也有人在实做，但我不知道进行到什么进度了&lt;br /&gt;会场有人也是第一次听到这个吓了一跳，这能干什么呀？为什么需要多个 Cursor ?&lt;br /&gt;我举例说多人在用多个鼠标在同一个电脑上玩游戏，应该是 More fun&lt;br /&gt;&lt;br /&gt;和白帽大叔聊了比较多、他说到十天后他会再次起程前往 非洲 Tanzania 内罗毕 进行下一期三个月的Volunteering&lt;br /&gt;我说 Vim Author 有一段提到 Uganda 的情况，确实需要很多的志愿者&lt;br /&gt;&lt;br /&gt;(在vim里面可以 :help iccf)&lt;br /&gt;&lt;br /&gt;还有最近看过的2007年电影 Hotel Rwanda, 描述1994年的 Rwanda Genocide&lt;br /&gt;大叔说他一直在 freenode #vim channel 里面，回答了人们关于Uganda的很多问题&lt;br /&gt;佩服！&lt;br /&gt;&lt;br /&gt;对了，硅谷的人一般都叫城区就是SF，才算City, 只有City里面才有点像样的高楼; 而硅谷这边MV, Sunnyvale, &amp;nbsp;... 什么的都是一排排小平房、最多就两三层，公司楼说好听也叫做写字楼，但其实都叫厂房&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6qXjZNXxLNI/Tlx5E6lHlUI/AAAAAAAABno/ZMSMzLRp4Fk/s1600/DSC_0034.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-6qXjZNXxLNI/Tlx5E6lHlUI/AAAAAAAABno/ZMSMzLRp4Fk/s320/DSC_0034.jpg" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;这个其实说的是 Twiki 的 web app, &amp;nbsp;与LEGO好像没有看到&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-G1LAXeCEKZI/Tlx5Jdb_OFI/AAAAAAAABns/O12ZmeC9KbY/s1600/DSC_0035.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-G1LAXeCEKZI/Tlx5Jdb_OFI/AAAAAAAABns/O12ZmeC9KbY/s320/DSC_0035.jpg" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;SVWUX 组部署完成的室外 Wifi &amp;nbsp;Repeater; &amp;nbsp;作为Wifi热点提供给大家Wifi上网&lt;br /&gt;这里的Wifi流量是通过这个 Repeater 转发到周围山上的多个Wifi接收机再到 Internet 的&lt;br /&gt;我在现场用Android试过了此Wifi发送图片Twitter速度不错！&lt;br /&gt;现场还有另外的人使用自己的3G数据卡将自己的Linux笔记本设置成Router，再通过无线路由器给大家提供冗余的Wifi 热点，很不错&lt;br /&gt;现场得益于公园良好的环境、设施，电源、水源、烧烤场都是免费使用，有洗手间，作为固定设施的很多桌子底下都是电源插座&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mFRnSGRlv7g/Tlx5QEmxqgI/AAAAAAAABnw/rWjbogQZJPk/s1600/DSC_0038.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-mFRnSGRlv7g/Tlx5QEmxqgI/AAAAAAAABnw/rWjbogQZJPk/s320/DSC_0038.jpg" width="180" /&gt;&lt;/a&gt; - &lt;a href="http://1.bp.blogspot.com/-ThGcCsSIUL8/Tlx5RWAVAAI/AAAAAAAABn0/-0un2CIoKyc/s1600/DSC_0039.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-ThGcCsSIUL8/Tlx5RWAVAAI/AAAAAAAABn0/-0un2CIoKyc/s320/DSC_0039.jpg" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; text-align: center;"&gt;生态环境真不错，还长出了大蘑菇、想起了老家的群山哪&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mH7mWsaQ1HY/Tlx5d3PfaPI/AAAAAAAABn8/tyvv2iWWEDM/s1600/DSC_0041.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-mH7mWsaQ1HY/Tlx5d3PfaPI/AAAAAAAABn8/tyvv2iWWEDM/s320/DSC_0041.jpg" width="320" /&gt;&lt;/a&gt; - &lt;a href="http://1.bp.blogspot.com/-cqbMOWZ7bFM/Tlx5cUMHqOI/AAAAAAAABn4/iquP_ywKNgA/s1600/DSC_0040.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-cqbMOWZ7bFM/Tlx5cUMHqOI/AAAAAAAABn4/iquP_ywKNgA/s320/DSC_0040.jpg" width="180" /&gt;&lt;/a&gt; - &lt;a href="http://4.bp.blogspot.com/-sBxbT0i9y0c/Tlx5gFlMj5I/AAAAAAAABoA/QZmpYLkeKg8/s1600/DSC_0043.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-sBxbT0i9y0c/Tlx5gFlMj5I/AAAAAAAABoA/QZmpYLkeKg8/s320/DSC_0043.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;玩 Amateur Radio 业余无线电的一组人、或者又叫做 HAM 火腿族&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nToK9tbHwOU/Tlx5yLFVscI/AAAAAAAABoE/8-DQDkZHi84/s1600/DSC_0045.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-nToK9tbHwOU/Tlx5yLFVscI/AAAAAAAABoE/8-DQDkZHi84/s320/DSC_0045.jpg" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;美少女、和父亲一块儿来都是 RedHat Volunteer (T-shirt) ; &amp;nbsp;健谈，谈到其父亲德国裔、母亲来自南美Columbia; &amp;nbsp;乐于分享自己的暑期项目住在 Costa Rica / Panama 火山 Hotel 的情形，期盼着 Christmas 假期可以去(另一个南美国度) 第一次见到&amp;nbsp;Grandmother、团聚；父亲向大家介绍她13岁、人多的时候还会 Camera Shy&lt;br /&gt;其父亲会多国语言，甚至包括 Chinese Mandarin, 和我直接中文对话了一会儿&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://4.bp.blogspot.com/-7Xg2UPhFNo8/Tlx6dV82PPI/AAAAAAAABoI/XSb-nq8LqVc/s1600/DSC_0047.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RedHat Volunteer RedHat Volunteer&lt;br /&gt;&lt;br /&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-7Xg2UPhFNo8/Tlx6dV82PPI/AAAAAAAABoI/XSb-nq8LqVc/s320/DSC_0047.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&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/6655852-424959487785272828?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/424959487785272828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=424959487785272828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/424959487785272828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/424959487785272828'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/08/httpwww.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-xIdlIZgvRfM/Tlx6kpz09ZI/AAAAAAAABoM/Gh2vMR6bMKE/s72-c/DSC_0059.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-4643756640275718713</id><published>2011-08-19T18:36:00.000-07:00</published><updated>2011-08-24T15:57:01.787-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='initramfs'/><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><category scheme='http://www.blogger.com/atom/ns#' term='system load'/><title type='text'></title><content type='html'>Step 2:&amp;nbsp;boot livedvd-amd64-multilib-11.2.iso from hard disk (with grub2)&lt;br /&gt;&lt;br /&gt;After a few days experience of the gentoo livedvd run from usb, I think the usb drive should be saved for some other important data; I decided to copy the iso and run it from hard disk; usually a hard disk has large enough space, people could just copy all files inside /image.squashfs to a local partition, like the way on gentoo-wiki, but this computer assigned to me has a SSD drive default, has only 120G, furthermore, it's already partitioned long time ago, I don't have more space to back up all data on it and don't want to risk re-partition it; so I'd still like the way of loop mount iso on the fly, for saving disk space;&lt;br /&gt;&lt;a href="http://www.gentoo-wiki.info/HOWTO_Lightning_fast_install_from_LiveCD"&gt;http://www.gentoo-wiki.info/HOWTO_Lightning_fast_install_from_LiveCD&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/dev/sda3 &amp;nbsp; &amp;nbsp; &amp;nbsp; 240277504 &amp;nbsp; 250068991 &amp;nbsp; &amp;nbsp; 4895744 &amp;nbsp; 83 &amp;nbsp;Linux&lt;br /&gt;/dev/sda5 &amp;nbsp; &amp;nbsp; &amp;nbsp; 129341440 &amp;nbsp; 132855807 &amp;nbsp; &amp;nbsp; 1757184 &amp;nbsp; 82 &amp;nbsp;Linux swap / Solaris&lt;br /&gt;/dev/sda6 &amp;nbsp; &amp;nbsp; &amp;nbsp; 132857856 &amp;nbsp; 152387583 &amp;nbsp; &amp;nbsp; 9764864 &amp;nbsp; 83 &amp;nbsp;Linux LABEL=UBUNTU&lt;br /&gt;/dev/sda7 &amp;nbsp; &amp;nbsp; &amp;nbsp; 152389632 &amp;nbsp; 210980863 &amp;nbsp; &amp;nbsp;29295616 &amp;nbsp; 83 &amp;nbsp;Linux LABEL=HOME&lt;br /&gt;/dev/sda8 &amp;nbsp; &amp;nbsp; &amp;nbsp; 210982912 &amp;nbsp; 211372031 &amp;nbsp; &amp;nbsp; &amp;nbsp;194560 &amp;nbsp; 83 &amp;nbsp;Linux LABEL=DEBIAN&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;br /&gt;The ubuntu partition already has grub2 default installed and home partition has a lot of remaining space, so I mkdir /gentoo under /home, put&amp;nbsp;livedvd-amd64-multilib-11.2.iso there, rename or hardlink a short name gentoo.iso there; extract kernel/initramfs from the iso and put into /boot of the ubuntu partition, create a new entry there and no need to install another grub;&lt;br /&gt;&lt;br /&gt;Notice that grub2 (version 1.9*) has slightly different syntax with grub1 (version 0.9*):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;disk partition order, counter from 1, same as Linux partitions;&lt;/li&gt;&lt;li&gt;better not to change (append entries) in grub.cfg directly, use /boot/grub/custom.cfg instead; because every time later ubuntu upgrade or install new kernels would call update-grub2 that would overwrite grub.cfg; you could change /etc/grub/40_custom (that support script smart calculation) or /boot/grub/custom.cfg on that ubuntu partition; here I use custom.cfg;&lt;/li&gt;&lt;/ol&gt;&lt;pre&gt;Gentoo-11 ~ # cat /mnt/sda6/boot/grub/custom.cfg&lt;br /&gt;menuentry "Gentoo11-Live Linux-3.0.0 (on /dev/sda7 {gentoo/gentoo.iso})" {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;linux (hd0,6)/boot/gentoo/gentoo aufs_mem=2G cdroot=/dev/sda7 cdroot_type=ext4 isoboot=gentoo/gentoo.iso vga=791 splash=silent,theme:livecd-10 console=tty1 quiet nodetect doload=ahci dox&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;initrd (hd0,7)/gentoo/gentoo-initramfs.gz&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Compared to previous menuentry in syslinux.cfg, here I removed some unused parameters (like "root=/dev/ram0 init=/linuxrc" because that is the default, I think I should recommend the Gentoo-Ten team to remove that, but not sure if any other computer need it, at least my computer doesn't need it, it could boot, as granted; the only useful parameters here are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; aufs_mem=2G, it means how large of tmpfs layered on top of squashfs by aufs; default it's 420M tmpfs, enough if you don't modify/install too many applications in live mode;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; cdroot=/dev/sda7, specify a parameter saves parsing during booting; specify&amp;nbsp;cdroot_type the same way;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; isoboot=gentoo/gentoo.iso, you need to specify where do you save that iso inside that partition; it's required;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; nodetect doload=ahci dox; depends on if you know your hardware, if no idea, autodetect is best, but I know my hardware, specifying it could save booting time;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;The default gentoo kernel/initramfs should work this way I thought originally, but it doesn't, I have to look at the init script and change it a little, here is the diff: &lt;a href="http://paste.pocoo.org/show/460334/"&gt;http://paste.pocoo.org/show/460334/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;the initramfs is just cpio (newc format) + gz; extract and reconstruct in this way;&lt;br /&gt;&lt;pre&gt;$ mkdir -vp gentoo-initramfs&lt;br /&gt;$ zcat gentoo.igz |(cd gentoo-initramfs; cpio -d -i)&lt;br /&gt;$ emacs -nw gentoo-initramfs/...; modify /init and /etc/init.scripts&lt;br /&gt;$ (cd gentoo-initramfs/; find |cpio -H newc -o) |gzip -v9 &amp;gt;gentoo-initramfs.gz&lt;/pre&gt;Or&lt;br /&gt;&lt;pre&gt;$ (cd gentoo-initramfs/; find |cpio -H newc -o) |xz -v9 &amp;gt;gentoo-initramfs.xz&lt;br /&gt;Gentoo-11 ~ # (cd /home/gentoo/; ls -lh gentoo-initramfs.*)&lt;br /&gt;-rw-r--r-- 1 root root 9.8M Aug 16 02:25 gentoo-initramfs.gz&lt;br /&gt;-rw-r--r-- 1 root root 7.5M Aug 15 17:50 gentoo-initramfs.xz&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;The latest xz (aka. lzma2) could save 20% over "gzip -v9";&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update: use "xz --check=crc32" instead, because some latest xz support "none,crc32,crc64,sha256" or more types of integrity check, default as crc64; the kernel xz dec is "xz embedded" that only support "none or crc32", &amp;nbsp;kernel may report XZ_OPTIONS_ERROR, you could use "xz -vl ..." to check it, read Documentation/xz.txt for more;&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;/usr/src/linux-3.0-gentoo-r1/lib/decompress_unxz.c:&lt;br /&gt;-=--:%%--F1  decompress_unxz.c   92% L364   (C/l Abbrev)&lt;br /&gt;&lt;br /&gt;        case XZ_OPTIONS_ERROR:&lt;br /&gt;                error("Input was encoded with settings that are not "&lt;br /&gt;                                "supported by this XZ decoder");&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;# (cd gentoo-initramfs/; find |cpio -H newc -o) |xz --check=crc32 -v9 &amp;gt;../gentoo-initramfs.xz&lt;/pre&gt;&lt;br /&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/6655852-4643756640275718713?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/4643756640275718713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=4643756640275718713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4643756640275718713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4643756640275718713'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/08/step-2-livedvd-amd64-multilib-11.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7519680409185763623</id><published>2011-08-18T11:35:00.000-07:00</published><updated>2011-08-18T11:35:48.184-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><title type='text'></title><content type='html'>Step 1: boot&amp;nbsp;livedvd-amd64-multilib-11.2.iso from a usbstick (without wiping all data)&lt;br /&gt;Gentoo Linux releases 11.2 LiveDVD: run the iso from hard disk (hack on initramfs)&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Recently&amp;nbsp;Gentoo&amp;nbsp;LiveDVD&amp;nbsp;11.2 was released on Aug 7, I'd like to try it but don't want to waste a blank DVD; the first thing I think is to run it on a usb; the only usb stick I have important data, don't want to try the dd way ("dd if=image.iso of=/dev/sdb") &amp;nbsp;in faq which will wipe out all data, looking up some documentation on its default isolinux/syslinux, finally I got this way working:&lt;br /&gt;&lt;br /&gt;1) mount loop that&amp;nbsp;livedvd-amd64-multilib-11.2.iso; mkdir /gentoo on the usb stick, copy all files inside the iso into that /gentoo;&lt;br /&gt;2) rename its isolinux/ to syslinux/, and isolinux.cfg to syslinux.cfg; yes! thanks to&amp;nbsp;syslinux.zytor.com great work, they're sharing the same configuration file syntax, what you need to do is just rename;&lt;br /&gt;3) since we copied all the files from rootdir of cdrom to /gentoo of another disk(usb), the syslinux.cfg need to be adjusted; find out the "label gentoo-x86_64", change it to this;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;label gentoo-x86_64&lt;br /&gt;&amp;nbsp; MENU LABEL Gentoo ^x86_64&lt;br /&gt;&amp;nbsp; kernel ../boot/gentoo&lt;br /&gt;&amp;nbsp; append root=/dev/ram0 init=/linuxrc dokeymap aufs looptype=squashfs loop=/gentoo/image.squashfs cdroot initrd=../boot/gentoo.igz vga=791 splash=silent,theme:livecd-10 console=tty1 quiet subdir=gentoo&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;the "kernel" "initrd=" parameters was parsed by syslinux so it support "../" style relative path, so you could move the whole "/gentoo" to any name, under any path; but the "loop=" and some otherwhere was read by code inside the initramfs (here it's ../boot/gentoo.igz), there some hard code doesn't support&amp;nbsp;relative path, so you must write its full absolute path, prepend "/gentoo" to&amp;nbsp;image.squashfs, and append "subdir=gentoo";&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;for other label entries if you want to use, you could change the same way;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4) install syslinux bootsector to that usb stick (/dev/sdb has only one vfat partition):&lt;br /&gt;&amp;nbsp; syslinux -d /gentoo/syslinux /dev/sdb1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then you could boot it with this usb: find out&amp;nbsp;label gentoo-x86_64 and boot it into LiveDVD 11.2;&lt;/div&gt;&lt;div&gt;The 2.8G iso file has packaged with linux kernel 3.0.0 and most a dozen of major and minor WM Environment (gnome3/kde4/xfce/lxde/windowmaker/openbox/fluxbox/awesome/xmbc/...), and all applications on each WM; just try and found which is your favorite?&amp;nbsp;all the latest software;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gentoo.org/news/20110807-livedvd.xml"&gt;http://www.gentoo.org/news/20110807-livedvd.xml&lt;/a&gt;&lt;br /&gt;&lt;a href="http://syslinux.zytor.com/wiki/index.php/SYSLINUX"&gt;http://syslinux.zytor.com/wiki/index.php/SYSLINUX&lt;/a&gt;&lt;br /&gt;&lt;a href="http://paste.pocoo.org/show/460334/"&gt;http://paste.pocoo.org/show/460334/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gentoo.org/proj/en/pr/releases/10.0/faq.xml"&gt;http://www.gentoo.org/proj/en/pr/releases/10.0/faq.xml&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mirrors.kernel.org/gentoo/releases/amd64/11.2/"&gt;http://mirrors.kernel.org/gentoo/releases/amd64/11.2/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;livedvd-amd64-multilib-11.2.iso &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;06-Aug-2011 07:12 &amp;nbsp;2.8G &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-7519680409185763623?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7519680409185763623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7519680409185763623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7519680409185763623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7519680409185763623'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/08/step-1-boot-from-usbstick-without.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-3209899636296155883</id><published>2011-05-29T01:05:00.002-07:00</published><updated>2011-05-29T01:08:59.338-07:00</updated><title type='text'></title><content type='html'>从NAS端往下复制3GB文件，提示需要1hr, 计算一下速度是870KB/s; 这个可能是802.11a/b/g无线路由的问题，取网线来与路由器直连接，发现这个2009旧版DLink买的时候还是百兆Ethernet, 重新复制文件时提示需要20分钟，还是有点慢，计算速度是2600KB/s, 离百兆性能的极限11MB/s还差得远，常见8~9MB/s文件传输是没问题的；其实发现10年往后买的电脑的Ethernet都缺省是千兆了，NAS上的Ethernet也是千兆，而且是双网口，不如把空闲口与电脑的Ethernet直连；之后是网线有问题，反复auto-negotiation都显示100Mbit/s连接，换了一根质量好的 Ethernet Cable, 连接灯亮后花了约10秒neogotiation之后提示1000Mbit/s连接，再次复制文件提示3分钟。这个速度是18MB/s约是百兆性能的两倍，但离千兆的性能极限110MB/s还差得远哪&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-wEsQ3REMf4E/TeH-HVDdfiI/AAAAAAAABeE/Ag0c5sdolUA/s1600/copy-files-ge.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-wEsQ3REMf4E/TeH-HVDdfiI/AAAAAAAABeE/Ag0c5sdolUA/s1600/copy-files-ge.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Copy files&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6gJbbI7Mfmw/TeH-MsTE42I/AAAAAAAABeI/rEpogTFRl_Y/s1600/dstat-copy-files-ge.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="153" src="http://4.bp.blogspot.com/-6gJbbI7Mfmw/TeH-MsTE42I/AAAAAAAABeI/rEpogTFRl_Y/s640/dstat-copy-files-ge.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"dstat -vn -N eth0,wlan0"&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-3209899636296155883?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/3209899636296155883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=3209899636296155883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3209899636296155883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3209899636296155883'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/05/nas3gb1hr-870kbs-802.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-wEsQ3REMf4E/TeH-HVDdfiI/AAAAAAAABeE/Ag0c5sdolUA/s72-c/copy-files-ge.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5909487335034087746</id><published>2011-04-23T14:46:00.002-07:00</published><updated>2011-04-23T14:51:48.267-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><title type='text'></title><content type='html'>grub2 default menu entry&lt;br /&gt;&lt;br /&gt;Under Debian or Ubuntu: edit /etc/default/grub, add or uncomment these two lines&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GRUB_DEFAULT=saved&lt;br /&gt;GRUB_SAVEDEFAULT=true&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And, run update-grub again;&lt;br /&gt;&lt;br /&gt;If you want more customized menu entries, you could add them under /etc/grub.d/40_custom, you also need to run update-grub manually; this file would get updated into /boot/grub/grub.cfg automatically in future when you got kernel updates;&lt;br /&gt;&lt;br /&gt;Or you could use /boot/grub/custom.cfg directly (if not exist, create it); in this file you don't need to run update-grub; (if you want to know why, read /etc/grub.d/41_custom)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5909487335034087746?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5909487335034087746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5909487335034087746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5909487335034087746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5909487335034087746'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/04/grub2-default-menu-entry-under-debian.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-785300920075809081</id><published>2011-01-24T17:43:00.002-08:00</published><updated>2011-01-24T17:52:38.320-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><category scheme='http://www.blogger.com/atom/ns#' term='donate blood'/><title type='text'></title><content type='html'>献血。经历了国内2010年下半年持续至今的血荒、相关原因就不说了，国内很多人都已经分析了原因，制度是最大的原因，我家2009年有病人在黄石医院就亲有体会、拿了献血证想去兑现免费等量用血是何其难，最后还是直接交钱，拿钱最快了。并且身边朋友有一个反例是自90年代在深圳打工期间献血后身体素质下降，这也许是当年卫生条件不够造成的感染呢，无法考证。&lt;br /&gt;&lt;br /&gt;2010年在新加坡，亲身经历过新加坡的号召献血，不过新加坡的华文称为"捐血"，用词不一样，但英文都是 Donate Blood, 但&lt;a href="http://www.sgwritings.com/bbs/viewthread.php?tid=49673"&gt;那次&lt;/a&gt;因为有事务太多没有去现场，但这个过程了解到他们是真正的义务献血，没有献血证，完全凭自愿，当然献血后的点心补充营养是不会少的。网上搜索到的一篇出自黄冈中心血站的 "&lt;span class="Apple-style-span" style="border-collapse: collapse; color: navy; font-family: 黑体;"&gt;新加坡捐血见闻&lt;/span&gt;"&amp;nbsp;&lt;a href="http://www.hbhgxz.cn/News_View.asp?NewsID=236"&gt;http://www.hbhgxz.cn/News_View.asp?NewsID=236&lt;/a&gt;&amp;nbsp;与我当时在那边本地报纸描写的差不多；&lt;br /&gt;&lt;br /&gt;这次2011来到美国，刚开始上班两三周不多久，收到HR发的献血通知，这次是Stanford大学血液中心，斯坦福大学呢，采血卫生条件这样的基本问题应该是没得说，何况这次是安排移动献血车到公司门口停驻, BloodMobile, 一定要去一次。中午早早地吃过饭去，12点半准时到达，看到各位大叔大姐，献血之后在享受美味点心哪。我来到后面开始排队填表，等到我了，我觉得还是有点紧张、说我自己有点偏瘦，第一次献血能不能少点？ "Can I donate less than normal?" 负责填表检查的大叔也看出我的紧张了，说没问题，又问我来美国多久了，我说刚满一个月，呵呵，大家都在善意地笑，大叔很严肃地继续问我来自哪里，我说 "China citizen, but coming from Singapore", 他说 Singapore 没问题，但是 China, 最后一次离开是什么时间，我如实回答后大叔说抱歉现在你还不能献血。最后有一位阿姨出来详细地解释 China 有一种(奇怪的)血液病，这个单词太专业了我没太听懂，说这种血液病在短期内无法检测出来，只能请我等离开China满三年后才能献血，也就是2012年。最后只能表示遗憾，友好地合影。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_fMgaoW35LIQ/TT4VQ1DEAzI/AAAAAAAABZ4/sDrkTFdzNUU/s1600/IMAG1397.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_fMgaoW35LIQ/TT4VQ1DEAzI/AAAAAAAABZ4/sDrkTFdzNUU/s320/IMAG1397.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_fMgaoW35LIQ/TT4VRSvxS9I/AAAAAAAABaA/pMQtsARRA9w/s1600/IMAG1400.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_fMgaoW35LIQ/TT4VRSvxS9I/AAAAAAAABaA/pMQtsARRA9w/s320/IMAG1400.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://bloodcenter.stanford.edu/"&gt;http://bloodcenter.stanford.edu/&lt;/a&gt;&amp;nbsp;这就是斯坦福大学采血中心的移动献血车、今天来到公司门口&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-785300920075809081?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/785300920075809081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=785300920075809081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/785300920075809081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/785300920075809081'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/01/2010200990-2010-donate-blood-httpwww.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fMgaoW35LIQ/TT4VQ1DEAzI/AAAAAAAABZ4/sDrkTFdzNUU/s72-c/IMAG1397.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-8300082857759303260</id><published>2011-01-04T10:12:00.002-08:00</published><updated>2011-01-04T10:12:43.977-08:00</updated><title type='text'></title><content type='html'>Zoom Quiet - 上海-&gt;新加坡-&gt;USA 标准的越狱路径哪！ 尽早整理个攻略出来吧...Jan 3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-8300082857759303260?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/8300082857759303260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=8300082857759303260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8300082857759303260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8300082857759303260'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2011/01/zoom-quiet-usa.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5478637302966992291</id><published>2010-10-10T09:58:00.005-07:00</published><updated>2010-10-24T03:11:31.025-07:00</updated><title type='text'></title><content type='html'>1 day in sentosa (圣淘沙一日游)&lt;br /&gt;&lt;br /&gt;其实只是第二次到圣淘沙岛，回首在新加坡的一年&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" height="100" src="http://3.bp.blogspot.com/_fMgaoW35LIQ/TLn11Hx4K2I/AAAAAAAABQ4/eezLkxibBEM/s400/DSC03563.JPG" style="margin-left: auto; margin-right: auto;" width="400" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Siloso Beach - Sentosa - Singapore - 2010.10&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?msa=0&amp;msid=105298793791263190834.000493597bf5101509d74&amp;t=h&amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5478637302966992291?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5478637302966992291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5478637302966992291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5478637302966992291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5478637302966992291'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/10/1-day-in-sentosa.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fMgaoW35LIQ/TLn11Hx4K2I/AAAAAAAABQ4/eezLkxibBEM/s72-c/DSC03563.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2436693356168499169</id><published>2010-08-17T07:19:00.003-07:00</published><updated>2010-08-17T07:30:00.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><title type='text'></title><content type='html'>编译无需initrd能自启动之Linux内核：要点&lt;br /&gt;&lt;br /&gt;使用 initrd (or initramfs) 固然有很多优点，但无可置疑地拖慢了启动速度，这方面编译内核的文档虽多，但我发现还是有不少人因曾经编译失败不能启动的体验而被吓住了，或者因保守起见编译了太多本机不需要的驱动程序，这样拖慢了编译内核的速度 (而且不管是模块形式还是内核形式，都是要么浪费了硬盘空间、要么就浪费了内存)；&lt;br /&gt;这方面记录几个要点，保证所生成的内核一定能够自启动。如果还不能启动请联系我。&lt;br /&gt;&lt;br /&gt;1. 硬盘驱动程序 (或曰主板驱动?)&lt;br /&gt;怎样找到正确的硬盘驱动程序？有人的经验谈是确保选中 ahci, 其实这只是一种流行的选择，当然不能代表所有。发现正确驱动程序的方法是顺着 sysfs 找，这里面提供了非常丰富的信息：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ ls -lU /sys/block/sda&lt;br /&gt;lrwxrwxrwx 1 root root 0 2010-08-17 21:03 /sys/block/sda -&amp;gt; ../devices/pci0000:00/0000:00:14.1/host4/target4:0:0/4:0:0:0/block/sda&lt;br /&gt;发现了它在 /devices 下的真正节点是 "/devices/pci0000:00/0000:00:14.1" (而不在 host4 下，想想), 这时再一次访问&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ ls -lU /sys/devices/pci0000:00/0000:00:14.1&lt;br /&gt;其下 driver -&amp;gt; ../../../bus/pci/drivers/pata_atiixp 因此，此机器上正确的驱动程序是 pata_atiixp,&lt;br /&gt;&amp;nbsp; 找到了正确的驱动程序之后还有一个任务是在 menuconfig 阶段如何找到其对应哪一个菜单项？这个需要在源代码中搜索：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ find drivers/ -name Makefile |xargs grep -nw pata_atiixp&lt;br /&gt;drivers/ata/Makefile:28:obj-$(CONFIG_PATA_ATIIXP)&amp;nbsp;&amp;nbsp;&amp;nbsp; += pata_atiixp.o&lt;br /&gt;&amp;nbsp; 不知道在内核哪个子目录的话就在根目录 find, 一般来说大概知道是在 drivers/ 子目录，省点时间， 搜索所有 Makefile 将结果传给 xargs grep -nw 搜索单词 pata_atiixp, 得到唯一的一个结果 是 CONFIG_PATA_ATIIXP, 这个也许你猜到了结果其实就是小写变大写，但实际中有很多驱动的模块名称与 CONFIG 配置项名称是不一样的。所以 find 搜索能保证一定能找到了 menuconfig 配置项；&lt;br /&gt;&amp;nbsp; 最后一步就是在 menuconfig 过程中，使用 "/" 键，调出搜索界面，输入 PATA_ATIIXP 搜索之，一般来说，就找到了准确的 pata_atiixp 驱动所在菜单项的位置。把它设置为内联编译 (inlined compiling)就可以了。&lt;br /&gt;以当前硬件流行驱动一般都是SATA或者PATA，都在 Device Drivers \ SerialATA and Parallel ATA 目录，而且一般来说一个机器只需要一个此类驱动就足够了 (同时使用两种SATA硬件的还没见过)，因此选上 pata_atiixp 之后, 其它选项皆禁用之。&lt;br /&gt;2. 根文件系统&lt;br /&gt;&amp;nbsp; 大概调查一下 (df -Th), 判断一下 根文件系统的类型，是 ext4 还是 btrfs, 与上同理，也把它设置为内联编译。为了常用U盘可以加上FAT支持，其它文件系统皆禁用之。&lt;br /&gt;(注意不要选内核NTFS, 真正要读写NTFS分区可以使用 ntfs-3g 项目全用户层 code 解决)&lt;br /&gt;&lt;br /&gt;有了这两点根本上就足够自启动了，以此为出发也可以继续把网卡驱动找出来，&lt;br /&gt;3. 从 /sys/class/net/... 出发，找到 eth0 的真正驱动程序，在源代码搜索 Makefile 找到配置项名称，在 menuconfig 找到菜单项，设为内联编译；其它无关网卡驱动皆清除之。&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/6655852-2436693356168499169?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2436693356168499169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2436693356168499169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2436693356168499169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2436693356168499169'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/08/initrdlinux-initrd-or-initramfs-1.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-3909578433230012413</id><published>2010-08-07T04:13:00.002-07:00</published><updated>2010-08-07T04:23:00.376-07:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;Latest Tweet:&lt;/strong&gt; &lt;a class="tweet-url web" href="http://twitgoo.com/1gm3yp" rel="nofollow" target="_blank"&gt;http://twitgoo.com/1gm3yp&lt;/a&gt;  L: &lt;a class="tweet-url web" href="http://is.gd/e7hZJ" rel="nofollow" target="_blank"&gt;http://is.gd/e7hZJ&lt;/a&gt;  Bencoolen Link N 1°18' 0'' / E  103°51' 0''  萌古连商业中心 &amp;amp; 福禄寺 四面佛&lt;br /&gt;&lt;br /&gt;新加坡：宗教的和平相处&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://i34.twitgoo.com/dnkf1c.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://i34.twitgoo.com/dnkf1c.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;福禄寺 四面佛&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_SSUugD08MkQ/TF053JmW7ZI/AAAAAAAAACc/2-wu6145UGI/IMAG0293.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://lh4.ggpht.com/_SSUugD08MkQ/TF053JmW7ZI/AAAAAAAAACc/2-wu6145UGI/IMAG0293.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;印度庙 Sri Krishnan Temple 正在举行大型庆祝140周年活动，对面观音堂佛祖庙固自门庭若市&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_SSUugD08MkQ/TF05qUTD4UI/AAAAAAAAACY/1sjiTNfU474/s1600/IMAG0294.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_SSUugD08MkQ/TF05qUTD4UI/AAAAAAAAACY/1sjiTNfU474/s320/IMAG0294.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;此外，市区还有基督教(圣公会、卫理公会感恩堂、长老会、天主堂等若干分支)、马来回教、犹太教堂若干。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-3909578433230012413?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/3909578433230012413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=3909578433230012413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3909578433230012413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3909578433230012413'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/08/sri-krishnan-temple-140.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_SSUugD08MkQ/TF053JmW7ZI/AAAAAAAAACc/2-wu6145UGI/s72-c/IMAG0293.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7019650765717169044</id><published>2010-07-22T00:19:00.000-07:00</published><updated>2010-07-22T00:19:58.130-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><title type='text'></title><content type='html'>见到了 Dawn Song 和 周杰伦&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tektalk.org/2008/04/21/海外学人–宋晓东（dawn-song）/"&gt;http://www.tektalk.org/2008/04/21/海外学人–宋晓东（dawn-song）/&lt;/a&gt;&lt;br /&gt;&lt;ol class="commentlist"&gt;&lt;li class="alt" id="comment-22386"&gt;&lt;b&gt;crquan&lt;/b&gt; 于 2010-07-21 4:52 pm &lt;div class="commenttext"&gt;今天到新加坡国大NUS算是亲眼见识了 Dawn Song 之 aggressive,  语速、以及思维转换之快皆非常人所能及也，在1个小时的Seminar里讲了三个普通Seminar的内容,其在UCBerkeley的最新研究是  webblaze, 在Web安全领域的最新Symbolic应用；并且相关 paper 又是其一贯的对security领域四大TOP1会议(IEEE S&amp;amp;P,  Usenix security, ACM CCS, NDSS)皆灌水之&lt;br /&gt;&lt;a href="http://webblaze.cs.berkeley.edu/" onclick="javascript:pageTracker._trackPageview('/outbound/comment/webblaze.cs.berkeley.edu');" rel="nofollow"&gt;http://webblaze.cs.berkeley.edu/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;晚餐在 Bugis 才吃过, 得闻前方有一新加坡闻名小吃街，步行至与 Beach Road 有一条 Link 小径，两旁都是古式三层复式楼；只闻海南鸡饭、以及麻辣飘香、港汇茶点，食客都热情到自己帮忙把店家的桌子往外搬到行人街道，尚有余而不得座者；行间忽见不远处 Bugis 广场有排队长龙, 怕是又有什么大人物吧！走近看，竟然才知是周杰伦，排队者每人皆持两本唱片，黑皮不见其名，排队者约有上千人，等待上台亲笔签名；远处舞台之上有某人伏笔挥持；颇有神采；待良久，竟不能得见全貌；&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-7019650765717169044?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7019650765717169044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7019650765717169044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7019650765717169044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7019650765717169044'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/07/dawn-song-httpwww.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5175146075555046300</id><published>2010-07-04T05:40:00.004-07:00</published><updated>2010-07-04T06:46:23.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><title type='text'></title><content type='html'>&lt;b&gt;Latest Tweet:&lt;/b&gt; &lt;a class="tweet-url web" href="http://www.nudt.edu.cn/summerschool/chn/recruitinfo.html" rel="nofollow" target="_blank"&gt;http://www.nudt.edu.cn/summerschool/chn/recruitinfo.html&lt;/a&gt;   今闻母校国防科大开设“天河计划”研究生国际暑期班(7月19日至8月6日)，招生正式七十人、旁听四十人、由国际知名教授、全英文授课、云计算及无线前沿技术、费用全免、西部地区学校正式学员报销往返硬座火车票。报名截止7月10日。&lt;br /&gt;&lt;br /&gt;&lt;span lang="EN-US" style="font-size: 10.5pt;"&gt;1.&lt;/span&gt;&lt;span style="font-size: 10.5pt;"&gt;课程教学：（每门课程为&lt;span lang="EN-US"&gt;1&lt;/span&gt;个学分）&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1).&lt;/span&gt;&lt;span lang="EN-US" style="color: black;"&gt;云计算和虚拟化技术（Prof. Kai Hwang）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2).无线和移动网络（Prof.  WEI WAYNE LI）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3).高级软件工程（Prof. Haibin Zhu ）&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;找到了三位教授的背景分别是：&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1). Prof. Kai Hwang&lt;br /&gt;毕业于1972年、加州大学伯克利分校博士、现任南加州大学教授、主研并行计算方向&lt;br /&gt;Ph.D. in Electrical Engineering and Computer Science, 1972, UC,  Berkeley, Berkeley, CA.&amp;nbsp; http://ee.usc.edu/faculty_staff/faculty_directory/hwang.htm&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2). Prof.  WEI WAYNE LI&lt;br /&gt;南德州大学计算机系教授，主研无线自适应网络方向；&lt;br /&gt;http://engineering.tsu.edu/~wli/&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3).Prof. Haibin Zhu&lt;br /&gt;加拿大尼普森大学计算机系教授，主研软件工程、人机交互；&lt;br /&gt;http://www.nipissingu.ca/faculty/haibinz/&lt;br /&gt;&lt;br /&gt;大学所需要的，正是这种不为名、不为利、的教学和科研精神；多一些踏实的研究、少一些银河麒麟般闹剧；希望母校夙愿“建设世界一流大学”有朝一日能够实现！&lt;br /&gt;&lt;br /&gt;(同感于1help1@tektalk, 如能开放视频，做成类似于 MIT-Open-Web-Course, 就更精彩了！)&lt;br /&gt;http://www.tektalk.org/2010/07/03/天河计划/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5175146075555046300?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5175146075555046300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5175146075555046300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5175146075555046300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5175146075555046300'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/07/latest-tweet-httpwww.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7991742342870987060</id><published>2010-06-29T00:18:00.000-07:00</published><updated>2010-06-29T00:18:30.602-07:00</updated><title type='text'></title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="320" src="http://lh5.ggpht.com/_fMgaoW35LIQ/TCmdCbNGItI/AAAAAAAABKQ/ttXH8reu4AE/IMAG0074.jpg" width="240" /&gt;&lt;img border="0" src="http://lh4.ggpht.com/_fMgaoW35LIQ/TCmdC96DydI/AAAAAAAABKY/pI4_Qduutqs/s320/IMAG0075.jpg" /&gt;&lt;br /&gt;Unwired 2010, 05-27, SMU Administration Building, Conference Hall&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-7991742342870987060?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7991742342870987060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7991742342870987060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7991742342870987060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7991742342870987060'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/06/unwired-2010-05-27-smu-administration.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_fMgaoW35LIQ/TCmdCbNGItI/AAAAAAAABKQ/ttXH8reu4AE/s72-c/IMAG0074.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-4396188285001850640</id><published>2010-06-15T10:25:00.000-07:00</published><updated>2010-06-15T10:25:14.825-07:00</updated><title type='text'></title><content type='html'>File: make.info,  Node: Double-Colon,  Next: Automatic Prerequisites,  Prev: Static Pattern,  Up: Rules&lt;br /&gt;&lt;br /&gt;4.13 Double-Colon Rules&lt;br /&gt;=======================&lt;br /&gt;&lt;br /&gt;"Double-colon" rules are rules written with `::' instead of `:' after&lt;br /&gt;the target names.  They are handled differently from ordinary rules&lt;br /&gt;when the same target appears in more than one rule.&lt;br /&gt;&lt;br /&gt;   When a target appears in multiple rules, all the rules must be the&lt;br /&gt;same type: all ordinary, or all double-colon.  If they are&lt;br /&gt;double-colon, each of them is independent of the others.  Each&lt;br /&gt;double-colon rule's commands are executed if the target is older than&lt;br /&gt;any prerequisites of that rule.  If there are no prerequisites for that&lt;br /&gt;rule, its commands are always executed (even if the target already&lt;br /&gt;exists).  This can result in executing none, any, or all of the&lt;br /&gt;double-colon rules.&lt;br /&gt;&lt;br /&gt;   Double-colon rules with the same target are in fact completely&lt;br /&gt;separate from one another.  Each double-colon rule is processed&lt;br /&gt;individually, just as rules with different targets are processed.&lt;br /&gt;&lt;br /&gt;   The double-colon rules for a target are executed in the order they&lt;br /&gt;appear in the makefile.  However, the cases where double-colon rules&lt;br /&gt;really make sense are those where the order of executing the commands&lt;br /&gt;would not matter.&lt;br /&gt;&lt;br /&gt;   Double-colon rules are somewhat obscure and not often very useful;&lt;br /&gt;they provide a mechanism for cases in which the method used to update a&lt;br /&gt;target differs depending on which prerequisite files caused the update,&lt;br /&gt;and such cases are rare.&lt;br /&gt;&lt;br /&gt;   Each double-colon rule should specify commands; if it does not, an&lt;br /&gt;implicit rule will be used if one applies.  *Note Using Implicit Rules:&lt;br /&gt;Implicit Rules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--zz-Info：(make.info.gz)Double-Colon，36 行 --All-- 子文件：make.info-1.gz-----------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-4396188285001850640?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/4396188285001850640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=4396188285001850640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4396188285001850640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4396188285001850640'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/06/file-make.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5074886818974948958</id><published>2010-05-10T23:22:00.000-07:00</published><updated>2010-05-10T23:22:41.593-07:00</updated><title type='text'></title><content type='html'>&lt;h1&gt;JVM, Longene in Linux Kernel [Was Re: 为什么不把JVM加入Kernel呢？(Why not add JVM into Kernel)]&lt;/h1&gt;&lt;b&gt;Cheng Renquan&lt;/b&gt; &lt;br /&gt;&lt;a href="mailto:linux-kernel%40zh-kernel.org?Subject=Re%3A%20%3D%3FUTF-8%3FB%3FSlZNLCBMb25nZW5lIGluIExpbnV4IEtlcm5lbCBbV2FzIFJlOiDkuLrku4DkuYjkuI0%3D%3F%3D%0A%09%3D%3FUTF-8%3FB%3F5oqKSlZN5Yqg5YWlS2VybmVs5ZGi77yfKFdoeSBub3QgYWRkIEpWTSBpbnRvIEtlcm5lbCld%3F%3D&amp;amp;In-Reply-To=%3CAANLkTinkGJ_YLJQDwzhIWivElbuRQoiy9__EpGHIq7ZN%40mail.gmail.com%3E" title="JVM, Longene in Linux Kernel [Was Re: 为什么不把JVM加入Kernel呢？(Why not add JVM into Kernel)]"&gt;crquan在gmail.com&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;星期二 五月 11 14:17:48 CST 2010&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;上一条消息 &lt;a href="http://www.blogger.com/014525.html"&gt;如何在内核中添加kdb？&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;b&gt;信息排序方式:&lt;/b&gt; &lt;br /&gt;&lt;a href="http://www.blogger.com/date.html#14526"&gt;[ 日期 ]&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/thread.html#14526"&gt;[ 线索 ]&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/subject.html#14526"&gt;[ 主题 ]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/author.html#14526"&gt;[ 作者 ]&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre&gt;2010/5/7 Liang Guo &amp;lt;&lt;a href="http://zh-kernel.org/mailman/listinfo/linux-kernel"&gt;bluestonechina at gmail.com&lt;/a&gt;&amp;gt;:&lt;br /&gt;&amp;gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&amp;gt;&lt;i&gt; 在 2010年5月7日 下午4:47，Avanpak &amp;lt;&lt;a href="http://zh-kernel.org/mailman/listinfo/linux-kernel"&gt;slevin.van at gmail.com&lt;/a&gt;&amp;gt;写道：&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&amp;gt;&amp;gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&amp;gt;&amp;gt;&lt;i&gt; Linux下有很多Java应用，如openoffice，&lt;br /&gt;&lt;/i&gt;&amp;gt;&amp;gt;&lt;i&gt; 为什么不把JVM加入Kernel，让这些应用跑起来更顺畅呢？&lt;br /&gt;&lt;/i&gt;&amp;gt;&amp;gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&amp;gt;&amp;gt;&lt;i&gt; There're many Java applications on Linux, such as openoffice.&lt;br /&gt;&lt;/i&gt;&amp;gt;&amp;gt;&lt;i&gt; Why not add JVM into Kernel, and let them run better.&lt;br /&gt;&lt;/i&gt;&amp;gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&amp;gt;&lt;i&gt; Why do you think JVM in kernel space is better in user space ?&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;我个人觉得：除了法律、GPL的要求之外，没有什么技术上的理由说 JVM 不可以放进内核，&lt;br /&gt;&lt;br /&gt;我想真正唯一的理由是：谁去做它？ 谁有能力、有需求的人士不妨可以去尝试，&lt;br /&gt;但当前有没有谁想去接上这个活儿，这是个问题，&lt;br /&gt;&lt;br /&gt;当时 03,04 年我们还在 linuxsir 的内核区讨论 “把 XWindow 移进内核让它像&lt;br /&gt;运行Windows图形一样快, 如何？”, 支持和反对者辩论了很久，支持者认为会提高性能&lt;br /&gt;让Linux图形和Windows一样快，反对者认为会引入BUG让Linux像Windows一样不稳定，&lt;br /&gt;经常崩溃；这样的辩论在各 Linux 社区都时常可见，但都没什么结果，因为没有人真正&lt;br /&gt;去做，全部都是空谈没有意义，&lt;br /&gt;&lt;a href="http://www.linuxsir.org/bbs/thread147361-1.html"&gt;http://www.linuxsir.org/bbs/thread147361-1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我们当时确实没有能力去实现 内核态XWindow 这么一件大工程，现在来看，内核模式设定&lt;br /&gt; KMS 可以被 内核接受，被各Linux发行版引用，其本质就是把一部分 XWindow代码移进了&lt;br /&gt;内核态运行 (Xorg 的显卡驱动的一部分，), 证实了这个方向确实是可行的，&lt;br /&gt;&lt;br /&gt;@Avanpak, 你说的内核态JVM是目的让 内核态直接能运行 Java应用程序的class 文件？&lt;br /&gt;这样以后运行 Eclipse 确实应该快些，&lt;br /&gt;&lt;br /&gt;位于 杭州 - 浙大网新 - 毛德操老师引领的 Longene 项目与此目的倒是有些类似，&lt;br /&gt;让 Linux内核直接运行Windows的PE格式exe可执行程序，&lt;br /&gt;&lt;a href="http://www.longene.org/"&gt;http://www.longene.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;初期版本的方案是内核模式的wine, 但0.3版以后实现有改变？其git仓库还是没变化，Jack能否发布点文档？&lt;br /&gt;&lt;br /&gt;"longene-0.3初步定于5月底发布，新版本将去除wineserver，所有功能在内核模块中完成。敬请期待！"&lt;br /&gt;"整体移植wineserver至模块中，所有发往wineserver的请求通过系统调用方式直接进入内核，&lt;br /&gt;在wine中去掉wineserver进程。移植完成后，预计完成后性能会有较大地提高。"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.longene.org/newslist.php"&gt;http://www.longene.org/newslist.php&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.longene.org/forum/viewtopic.php?f=2&amp;amp;t=4159"&gt;http://www.longene.org/forum/viewtopic.php?f=2&amp;amp;t=4159&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.longene.org/gitweb/?p=unifiedkernel.git"&gt;http://www.longene.org/gitweb/?p=unifiedkernel.git&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;回到 JVM 和 Logene 问题本身，技术上没有什么不可以做的，有了需求，有了 motivation,&lt;br /&gt;还要有人坚持不懈把它做出来才行，Avanpak 您愿意开始 内核JVM 工作吗？&lt;br /&gt;&lt;br /&gt;&amp;gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&amp;gt;&lt;i&gt; --&lt;br /&gt;&lt;/i&gt;&amp;gt;&lt;i&gt; Liang Guo&lt;br /&gt;&lt;/i&gt;&amp;gt;&lt;i&gt; &lt;a href="http://bluestone.cublog.cn/"&gt;http://bluestone.cublog.cn&lt;/a&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;--&lt;br /&gt;Cheng Renquan&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;上一条消息 &lt;a href="http://www.blogger.com/014525.html"&gt;如何在内核中添加kdb？&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;b&gt;信息排序方式:&lt;/b&gt; &lt;br /&gt;&lt;a href="http://www.blogger.com/date.html#14526"&gt;[ 日期 ]&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/thread.html#14526"&gt;[ 线索 ]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/subject.html#14526"&gt;[ 主题 ]&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/author.html#14526"&gt;[ 作者 ]&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr /&gt;&lt;a href="http://zh-kernel.org/mailman/listinfo/linux-kernel"&gt;关于邮件列表 Linux-kernel 的更多信息&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;From http://zh-kernel.org/pipermail/linux-kernel/2010-May/014526.html, http://groups.google.com.sg/group/szlug/msg/928bf660dd5b3f3a&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5074886818974948958?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5074886818974948958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5074886818974948958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5074886818974948958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5074886818974948958'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/05/jvm-longene-in-linux-kernel-was-re.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5875089076977747592</id><published>2010-03-30T07:47:00.003-07:00</published><updated>2010-03-30T07:48:25.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'></title><content type='html'>&lt;center&gt;&lt;iframe src="http://docs.google.com/present/embed?id=dc26wv69_121cp9nfmd4" frameborder="0" width="410" height="342"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5875089076977747592?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5875089076977747592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5875089076977747592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5875089076977747592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5875089076977747592'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/03/blog-post_30.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-259328062579107987</id><published>2010-03-08T15:57:00.002-08:00</published><updated>2010-03-08T15:59:48.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linuxfest'/><title type='text'></title><content type='html'>&lt;center&gt;&lt;a href="http://www.southeastlinuxfest.org/"&gt;&lt;img src="http://www.southeastlinuxfest.org/sites/www.southeastlinuxfest.org/images/self_banner_392x72.png" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-259328062579107987?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/259328062579107987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=259328062579107987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/259328062579107987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/259328062579107987'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/03/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-111593887340892897</id><published>2010-03-05T07:15:00.003-08:00</published><updated>2010-03-05T07:18:44.782-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fork.c'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'></title><content type='html'>&lt;pre&gt;suseuser@linux-2.6.33-uk&amp;gt; PAGER= git log --no-merges --pretty="%h %s" v2.6.30..v2.6.33 -- kernel/fork.c&lt;br /&gt;fabf318 sched: Fix fork vs hotplug vs cpuset namespaces&lt;br /&gt;9cd80bb do_wait() optimization: do not place sub-threads on task_struct-&amp;gt;children list&lt;br /&gt;6580807 ptrace: copy_process() should disable stepping&lt;br /&gt;569b846 memcg: coalesce uncharge during unmap/truncate&lt;br /&gt;1d61548 sched: Convert pi_lock to raw_spinlock&lt;br /&gt;b69f229 block: Fix io_context leak after failure of clone with CLONE_IO&lt;br /&gt;0cf55e1 sched, cputime: Introduce thread_group_times()&lt;br /&gt;d99ca3b sched, cputime: Cleanups related to task_times()&lt;br /&gt;8e7cac7 core: Fix user return notifier on fork()&lt;br /&gt;1d51075 Correct nr_processes() when CPUs have been unplugged&lt;br /&gt;322a2c1 futex: Move exit_pi_state() call to release_mm()&lt;br /&gt;fc6b177 futex: Nullify robust lists after cleanup&lt;br /&gt;801460d task_struct cleanup: move binfmt field to mm_struct&lt;br /&gt;858f099 aio: ifdef fields in mm_struct&lt;br /&gt;123be07 fork(): disable CLONE_PARENT for init&lt;br /&gt;d899bf7 procfs: provide stack information for threads&lt;br /&gt;1f10206 getrusage: fill ru_maxrss value&lt;br /&gt;28b83c5 oom: move oom_adj value from task_struct to signal_struct&lt;br /&gt;1c2fb7a ksm: fix deadlock with munlock in exit_mmap&lt;br /&gt;9ba6929 ksm: fix oom deadlock&lt;br /&gt;f8af4da ksm: the mm interface to ksm&lt;br /&gt;c6a7f57 mm: oom analysis: Show kernel stack usage in /proc/meminfo and OOM log output&lt;br /&gt;cdd6c48 perf: Do the big rename: Performance Counters -&amp;gt; Performance Events&lt;br /&gt;e0e8173 CRED: Add some configurable debugging [try #6]&lt;br /&gt;4ab6c08 clone(): fix race between copy_process() and de_thread()&lt;br /&gt;f41d911 rcu: Merge preemptable-RCU functionality into hierarchical RCU&lt;br /&gt;0753ba0 mm: revert "oom: move oom_adj value"&lt;br /&gt;9c8a822 execve: must clear current-&amp;gt;clear_child_tid&lt;br /&gt;42c4ab4 itimers: Merge ITIMER_VIRT and ITIMER_PROF&lt;br /&gt;9f498cc perf_counter: Full task tracing&lt;br /&gt;933b787 mm: copy over oom_adj value at fork time&lt;br /&gt;ed900c0 perf_counter: Log vfork as a fork event&lt;br /&gt;b43f3cb headers: mnt_namespace.h redux&lt;br /&gt;72a1de3 copy_process(): remove the unneeded clear_tsk_thread_flag(TIF_SIGPENDING)&lt;br /&gt;2dff440 kmemcheck: add mm functions&lt;br /&gt;60313eb perf_counter: Add fork event&lt;br /&gt;226f62f perf_counter: Add a comm hook for pure fork()s&lt;br /&gt;f7e8b61 function-graph: move initialization of new tasks up in fork&lt;br /&gt;bbbee90 perf_counter: Ammend cleanup in fork() fail&lt;br /&gt;6ab423e perf_counter: Propagate inheritance failures down the fork() path&lt;br /&gt;e4cbb4e perf_counter: Move child perfcounter init to after scheduler init&lt;br /&gt;a63eaf3 perf_counter: Dynamically allocate tasks' perf_counter_context struct&lt;br /&gt;ad8d75f tracing/events: move trace point headers into include/trace/events&lt;br /&gt;a8d154b tracing: create automated trace defines&lt;br /&gt;0f48140 x86, ptrace: add bts context unconditionally&lt;br /&gt;0793a61 performance counters: core code&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-111593887340892897?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/111593887340892897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=111593887340892897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/111593887340892897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/111593887340892897'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/03/suseuserlinux-orm5srclinux-treeslinux-2.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-8523817864075584999</id><published>2010-03-02T19:56:00.000-08:00</published><updated>2010-03-02T19:56:12.295-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'></title><content type='html'>关于缓冲区溢出， &lt;a class="titlink" href="http://hi.baidu.com/featherain" title="Featherain的空间 http://hi.baidu.com/featherain"&gt;lostyard&lt;/a&gt; 同学有一篇报道 gcc-4.4.1 上的&lt;a href="http://hi.baidu.com/featherain/blog/item/99207b4ede9b2cf3d62afc1e.html"&gt;最新进展&lt;/a&gt;， 就是 gcc 会产生 %gs:0x14 校验代码，新的攻击代码必须能注意到它的存在并合适绕过它才行，&lt;br /&gt;&lt;br /&gt;检查了一下 gcc 手册，发现它是 -fstack-protector 生成的，这个 feature 手册上描述是在 -O1,2,... 各优化级别之外的，可能还有 bug 的额外优化选项， gentoo 上的 gcc 编译器也是遵照这个实现，不知 Ubuntu 为什么把它变成了缺省的，就是默认 enable 这个选项。&lt;br /&gt;&lt;br /&gt;这个选项的原理就是在栈上额外分配 0,4,8,12,16 字节内存，使用 %gs:0x14 进行赋值，在函数结束时检查所赋值是否还存在，如果变化了说明栈可能遭受了溢出攻击，运行它会提示 "stack smashing"&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ ./a.out&lt;br /&gt;0xffe80358, ffe80374&lt;br /&gt;0xffe80354, 0&lt;br /&gt;*** stack smashing detected ***: ./a.out terminated&lt;br /&gt;======= Backtrace: =========&lt;br /&gt;/lib32/libc.so.6(__fortify_fail+0x48)[0xf76dd228]&lt;br /&gt;/lib32/libc.so.6(__fortify_fail+0x0)[0xf76dd1e0]&lt;br /&gt;./a.out[0x80484fd]&lt;br /&gt;[0x41414141]&lt;br /&gt;======= Memory map: ========&lt;br /&gt;08048000-08049000 r-xp 00000000 08:09 130818                             /home/gektop/tmp/test/a.out&lt;br /&gt;08049000-0804a000 r--p 00000000 08:09 130818                             /home/gektop/tmp/test/a.out&lt;br /&gt;0804a000-0804b000 rw-p 00001000 08:09 130818                             /home/gektop/tmp/test/a.out&lt;br /&gt;085d1000-085f2000 rw-p 00000000 00:00 0                                  [heap]&lt;br /&gt;f75f6000-f75f7000 rw-p 00000000 00:00 0 &lt;br /&gt;f75f7000-f7734000 r-xp 00000000 08:0a 5808                               /lib32/libc-2.9.so&lt;br /&gt;f7734000-f7736000 r--p 0013d000 08:0a 5808                               /lib32/libc-2.9.so&lt;br /&gt;f7736000-f7737000 rw-p 0013f000 08:0a 5808                               /lib32/libc-2.9.so&lt;br /&gt;f7737000-f773a000 rw-p 00000000 00:00 0 &lt;br /&gt;f773e000-f774a000 r-xp 00000000 08:0a 5784                               /lib32/libgcc_s.so.1&lt;br /&gt;f774a000-f774b000 r--p 0000b000 08:0a 5784                               /lib32/libgcc_s.so.1&lt;br /&gt;f774b000-f774c000 rw-p 0000c000 08:0a 5784                               /lib32/libgcc_s.so.1&lt;br /&gt;f774c000-f774e000 rw-p 00000000 00:00 0 &lt;br /&gt;f774e000-f774f000 r-xp 00000000 00:00 0                                  [vdso]&lt;br /&gt;f774f000-f776b000 r-xp 00000000 08:0a 5810                               /lib32/ld-2.9.so&lt;br /&gt;f776b000-f776c000 r--p 0001c000 08:0a 5810                               /lib32/ld-2.9.so&lt;br /&gt;f776c000-f776d000 rw-p 0001d000 08:0a 5810                               /lib32/ld-2.9.so&lt;br /&gt;ffe6d000-ffe82000 rw-p 00000000 00:00 0                                  [stack]&lt;br /&gt;Aborted&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;只要能理解它的原理就可以了，演示的时候可以为了减少无关干扰项，可以使用 -fno-stack-protector 把它关闭。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-8523817864075584999?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/8523817864075584999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=8523817864075584999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8523817864075584999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8523817864075584999'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/03/lostyard-gcc-4.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2195926689150598664</id><published>2010-02-18T09:47:00.002-08:00</published><updated>2010-02-18T09:47:50.378-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://fsfe.org/campaigns/valentine-2010/valentine-2010.html"&gt;&lt;img src="http://fsfe.org/campaigns/valentine-2010/vd-i-love-fs-468x60.png" style="border: 0 !important;" alt="I love Free Software!"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-2195926689150598664?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2195926689150598664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2195926689150598664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2195926689150598664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2195926689150598664'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/02/i-love-free-software.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2889756254236776495</id><published>2010-02-07T09:31:00.001-08:00</published><updated>2010-02-07T21:21:52.768-08:00</updated><title type='text'></title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_fMgaoW35LIQ/S274veCZmzI/AAAAAAAAA-g/qs0kb5h8X6E/s1600-h/Seminar-6-2-10c.png" imageanchor="1" style="margin: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_fMgaoW35LIQ/S274veCZmzI/AAAAAAAAA-g/qs0kb5h8X6E/s400/Seminar-6-2-10c.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-2889756254236776495?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2889756254236776495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2889756254236776495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2889756254236776495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2889756254236776495'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/02/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fMgaoW35LIQ/S274veCZmzI/AAAAAAAAA-g/qs0kb5h8X6E/s72-c/Seminar-6-2-10c.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-4743310477942651454</id><published>2010-01-28T21:40:00.005-08:00</published><updated>2010-01-28T21:45:54.971-08:00</updated><title type='text'>www.sun.com: 301 Moved Permanently</title><content type='html'>&lt;code&gt;$ curl -v www.sun.com&lt;br /&gt;* About to connect() to www.sun.com port 80 (#0)&lt;br /&gt;*   Trying 72.5.124.61... connected&lt;br /&gt;* Connected to www.sun.com (72.5.124.61) port 80 (#0)&lt;br /&gt;&amp;gt; GET / HTTP/1.1&lt;br /&gt;&amp;gt; User-Agent: curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.12.4.5 zlib/1.2.3 libidn/1.9 libssh2/1.2&lt;br /&gt;&amp;gt; Host: www.sun.com&lt;br /&gt;&amp;gt; Accept: */*&lt;br /&gt;&amp;gt; &lt;br /&gt;&amp;lt; HTTP/1.1 301 Moved Permanently&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt; Server: Sun-Java-System-Web-Server/7.0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt; Date: Fri, 29 Jan 2010 05:38:56 GMT&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt; P3p: policyref="http://www.sun.com/p3p/Sun_P3P_Policy.xml", CP="CAO DSP COR CUR ADMa DEVa TAIa PSAa PSDa CONi TELi OUR  SAMi PUBi IND PHY ONL PUR COM NAV INT DEM CNT STA POL PRE GOV"&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt; Location: http://www.oracle.com&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt; Content-length: 0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt; Connection: Keep-Alive&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt; Age: 0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;* Connection #0 to host www.sun.com left intact&lt;/code&gt;&lt;br /&gt;&lt;code&gt;* Closing connection #0  &lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-4743310477942651454?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/4743310477942651454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=4743310477942651454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4743310477942651454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4743310477942651454'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/01/curl-v-www.html' title='www.sun.com: 301 Moved Permanently'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7790059444314636816</id><published>2010-01-12T05:26:00.000-08:00</published><updated>2010-01-12T05:26:15.498-08:00</updated><title type='text'>南洋随笔录之一: 纪念碑</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_fMgaoW35LIQ/S0xrVWk6rsI/AAAAAAAAA7Y/7sbTTiMWvwY/s1600-h/IMAG0125.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_fMgaoW35LIQ/S0xrVWk6rsI/AAAAAAAAA7Y/7sbTTiMWvwY/s320/IMAG0125.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;日本占据时期死难人民纪念碑&lt;br /&gt;&lt;br /&gt;&amp;nbsp;http://www.sccci.org.sg/index.cfm?GPID=1189&lt;br /&gt;&lt;br /&gt;&amp;nbsp;位于市政厅(CityHall)与繁荣的现代商业城SuntecCity之间,是一片小型的广场,喷泉假山之间,中央便是这座庄严肃穆的纪念碑,碑文纪录相对简单,谨以此纪念日军占领期间死亡的新加坡人民;石碑正中呈四柱型,分别有中,英,马来,印度(Tamil)四种文字碑文,代表共同生活在这里的三个主要种族和使用的四种语言.暮色中石碑直指擎天,苍劲雄浑.与周围翠柏交相辉映.&lt;br /&gt;&lt;br /&gt;其时1942年2月15日，日本攻陷新加坡，随后3年半至45年8月无条件投降，不完全统计有5万名新加坡华人遭杀害。日本占领时期死难人民纪念碑于1967年2月15日落成。此后，新加坡每年都要在纪念碑旁举行悼念活动。这里没有人民英雄纪念碑,本来没有英雄,战争所带来的,唯有苦难.&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/6655852-7790059444314636816?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7790059444314636816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7790059444314636816' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7790059444314636816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7790059444314636816'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/01/blog-post.html' title='南洋随笔录之一: 纪念碑'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fMgaoW35LIQ/S0xrVWk6rsI/AAAAAAAAA7Y/7sbTTiMWvwY/s72-c/IMAG0125.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5724130199641986502</id><published>2010-01-08T10:01:00.001-08:00</published><updated>2010-01-08T10:04:03.984-08:00</updated><title type='text'>Samsung Developer Night</title><content type='html'>Samsung Developer Night, tonight, was really more like a social event, while some people there may be real developers, I've chatted with some of them, really exciting technology;&lt;br /&gt;&lt;br /&gt;The first session is about SAMSUNG's own app store, while with this business model, I can say nothing about it, apple iphone has done it successfully, that does not mean every one can copy this model, SAMSUNG as a role of independent mobile phone producer, who can&amp;nbsp; predict its success, I have a lot of doubt, but inappropriate in event like this, especially sponsorred by samsung, i have enjoyed good drinks and a fairly good dinner here, so let's just skip this;&lt;br /&gt;&lt;br /&gt;Our real focus is on the samsung's new smartphone os project, Bada system, as illustrated in speaker's slides, Bada has its own kernel (maybe linux or other real-time kernel?), and its own graphical interface(maybe recently sponsored project, enlightenment, or e17 ?), after the topics speach, I asked questions with samsung staff, got positive replies, so it's true; I recall the Linux-based mobile/netbook project, there are already Linux Mortorola, Android by Google, Moblin by Intel, Mameo by Nokia, and alread cancelled OpenMoko project, hope there will be more and more linux based mobile os, everyone has the potential development power can hold such a system, samsung is just one of them, almost all pre-existing samsung smartphone are win based, some other symbian, some other Android, it just want more control on source os level software, but unfortunately it's still controlled by others, so it's the intention of Bad;&lt;br /&gt;&lt;br /&gt;Documents showed that first real Bada would be coming in Mobile World Congress 2010, Bacelona, who cares?&lt;br /&gt;&lt;br /&gt;Some friend just heard this named it's bad a thing, pronounces badly, but in fact, accroding to its official explaination, Bada means ocean in Korean, which we know little about, right? So it's just a name, let's keep interests on what can be done through Bada;&lt;br /&gt;&lt;br /&gt;http://www.e27.sg/2010/01/04/samsung-developer-night/&lt;br /&gt;http://www.linux-magazine.com/Online/News/Samsung-Sponsors-Enlightenment-Development-New-Light-for-E17/&lt;br /&gt;http://www.bada.com/developer/day/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5724130199641986502?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5724130199641986502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5724130199641986502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5724130199641986502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5724130199641986502'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/01/samsung-developer-night.html' title='Samsung Developer Night'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5734220933852133989</id><published>2010-01-06T21:06:00.002-08:00</published><updated>2010-01-06T21:08:43.321-08:00</updated><title type='text'></title><content type='html'>阅读内核：二叉搜索算法中一个常见的被很多人忽略的BUG&lt;br /&gt;对于已排序对象的查找，二叉搜索算法是一个常见的优化算法，时间复杂度是 O(log(n)),&lt;br /&gt;在 Linux 内核中关于符号表的运算中有对它的一个引用；在阅读这个文件的 git 历史中，&lt;br /&gt;有一个变更看起来很让人费解：&lt;br /&gt;$ PAGER= git show -p --stat 2fc9c4e18&lt;br /&gt;commit 2fc9c4e18f94431e7eb77d97edb2a995b46fba55&lt;br /&gt;Author:     Vegard Nossum &amp;lt;&lt;a href="mailto:vegard.nossum@gmail.com"&gt;vegard.nossum@gmail.com&lt;/a&gt;&amp;gt;&lt;br /&gt;AuthorDate: Fri Jul 25 01:45:34 2008 -0700&lt;br /&gt;Commit:     Linus Torvalds &amp;lt;&lt;a href="mailto:torvalds@linux-foundation.org"&gt;torvalds@linux-foundation.org&lt;/a&gt;&amp;gt;&lt;br /&gt;CommitDate: Fri Jul 25 10:53:27 2008 -0700&lt;br /&gt;kallsyms: fix potential overflow in binary search&lt;br /&gt;This will probably never trigger... but it won't hurt to be careful.&lt;br /&gt;&lt;a href="http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html"&gt;http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html&lt;/a&gt;&lt;br /&gt;Signed-off-by: Vegard Nossum &amp;lt;&lt;a href="mailto:vegard.nossum@gmail.com"&gt;vegard.nossum@gmail.com&lt;/a&gt;&amp;gt;&lt;br /&gt;Cc: Joshua Bloch &amp;lt;&lt;a href="mailto:jjb@google.com"&gt;jjb@google.com&lt;/a&gt;&amp;gt;&lt;br /&gt;Signed-off-by: Andrew Morton &amp;lt;&lt;a href="mailto:akpm@linux-foundation.org"&gt;akpm@linux-foundation.org&lt;/a&gt;&amp;gt;&lt;br /&gt;Signed-off-by: Linus Torvalds &amp;lt;&lt;a href="mailto:torvalds@linux-foundation.org"&gt;torvalds@linux-foundation.org&lt;/a&gt;&amp;gt;&lt;br /&gt;---&lt;br /&gt;kernel/kallsyms.c |    2 +-&lt;br /&gt;1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c&lt;br /&gt;index 6fc0040..38fc10a 100644&lt;br /&gt;--- a/kernel/kallsyms.c&lt;br /&gt;+++ b/kernel/kallsyms.c&lt;br /&gt;@@ -176,7 +176,7 @@ static unsigned long get_symbol_pos(unsigned long addr,&lt;br /&gt;high = kallsyms_num_syms;&lt;br /&gt;while (high - low &amp;gt; 1) {&lt;br /&gt;-  mid = (low + high) / 2;&lt;br /&gt;+  mid = low + (high - low) / 2;&lt;br /&gt;if (kallsyms_addresses[mid] &amp;lt;= addr)&lt;br /&gt;low = mid;&lt;br /&gt;else&lt;br /&gt;这个 patch 中其实只有一行修改，就是对 get_symbol_pos 函数计算 mid 值的一次小小的修改，&lt;br /&gt;可是，怎么看都不明白： 修改前后的两个算式 "(low + high) / 2" 与 "low + (high - low) / 2" 不是一样的么？&lt;br /&gt;其作者给出 &lt;a href="http://googleresearch.blogspot.com/"&gt;http://googleresearch.blogspot.com&lt;/a&gt; 上的一个链接，只有真正看过了才知道：&lt;br /&gt;对于数学表达上看起来一样的式子在工程实践中有很大不同：&lt;br /&gt;1) 数学是完美的符号表达；&lt;br /&gt;2) 工程是要考虑计算机的实现构造：&lt;br /&gt;当 (low+ligh) 超出了 signed int 的最大值 (2(^31) -1) 时，会变为负数，再接下来的下标引用中便会下溢出；&lt;br /&gt;解决方法是修改为 "low + (high - low) / 2" 之类，或者先作无符号整数的强制转换：&lt;br /&gt;6:             mid = ((unsigned int)low + (unsigned int)high)) &amp;gt;&amp;gt; 1;&lt;br /&gt;在 Java 中有一个 &amp;gt;&amp;gt;&amp;gt; 是针对无符号数的运算符，可以写得更简便：&lt;br /&gt;&lt;pre&gt;6:             int mid = (low + high) &amp;gt;&amp;gt;&amp;gt; 1;&lt;/pre&gt;推荐阅读 作者给出的 blogspot 原文，其中提到作者自己的一个小故事: CMU 教授在1堂课上让每个人写出&lt;br /&gt;二叉搜索的实现，如其所料，大部分人写的实现都有这个整数溢出问题。&lt;br /&gt;-- &lt;br /&gt;Cheng Renquan (程任全), from Singapore&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5734220933852133989?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5734220933852133989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5734220933852133989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5734220933852133989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5734220933852133989'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2010/01/bug.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-3056082946729717893</id><published>2009-12-23T07:20:00.000-08:00</published><updated>2009-12-23T07:20:42.333-08:00</updated><title type='text'></title><content type='html'>compare the evolution of hard irq implementation, you will find that hard irq numbers has shifted from 0x20~0x2f to 0x30~0x3f, but why someone need this change?&lt;br /&gt;&lt;br /&gt;http://lxr.linux.no/#linux+v2.6.26/include/asm-x86/mach-default/irq_vectors.h&lt;br /&gt;http://lxr.linux.no/#linux+v2.6.32/arch/x86/include/asm/irq_vectors.h&lt;br /&gt;&lt;br /&gt;from oldlinux such as v0.11, as analyzed version as Doctor Zhao Jiong did, an old version just use it for the hardware limit, in the old 8259 interrupt controller days, the hardware 8259 is cascaded by 2 chips, and its real capability is only to handle 8 hard interrupt, by cascading style of implementation, there's another number is occupied by cascade, so there's only 7+8 = 15 interrupt numbers, every PC operating systems just re-program the 8259 IC, except for the intact PC standard, its 0x8~0xf for the first, and 0x78~0x7f for the second cascaded one, that can work well under 8086 Intel real mode, the DOS operating system keep it unchanged, and use int 0x21 as the system call service, then Linux re-program it as in the protected programming mode, for CPU internal usage, it reserved 0x0~0x1f 32 interrupt numbers; for the sake of x86 instruction encoding style, "int 0x80" is encoded as "0xcd 0x80", the interrupt number is just occupying one byte, so the CPU hardware limit is 256 int numbers, minus 32 reserved for CPU internal usage, it's 224 left, also as stated in the v2.6.26 irq_vectors.h comments said; Linux just use 0x80 as the system call interface, and shift/re-program 8259 to 0x20~0x27 and 0x28~0x2f; so the other range 0x30~0x7f, and 0x81~0xff are all unused; SMP architect is still strange, it generates special interrupts btween 0xee~0xff (238 ... 255); according to some recent secret unleashed, microsoft windows utilized 0x2e as the interrupt number, so the Linux int numbers changes just kept an reserved space for the unified kernel project; maybe it should be merged into mainstream someday;&lt;br /&gt;&lt;br /&gt;&lt;pre class="done" id="42/b9/78f2844fe21c6d7f9312415dccdc23b4b88e_3/0"&gt;&lt;a class="line" href="http://lxr.linux.no/linux+*/arch/x86/include/asm/irq_vectors.h#L15" id="L15" name="L15"&gt;  15&lt;/a&gt;&lt;span class="comment"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;a class="line" href="http://lxr.linux.no/linux+*/arch/x86/include/asm/irq_vectors.h#L16" id="L16" name="L16"&gt;  16&lt;/a&gt;&lt;span class="comment"&gt; *  Vectors   0 ...  31 : system traps and exceptions - hardcoded events&lt;/span&gt;&lt;br /&gt;&lt;a class="line" href="http://lxr.linux.no/linux+*/arch/x86/include/asm/irq_vectors.h#L17" id="L17" name="L17"&gt;  17&lt;/a&gt;&lt;span class="comment"&gt; *  Vectors  32 ... 127 : device interrupts&lt;/span&gt;&lt;br /&gt;&lt;a class="line" href="http://lxr.linux.no/linux+*/arch/x86/include/asm/irq_vectors.h#L18" id="L18" name="L18"&gt;  18&lt;/a&gt;&lt;span class="comment"&gt; *  Vector  128         : legacy int80 syscall interface&lt;/span&gt;&lt;br /&gt;&lt;a class="line" href="http://lxr.linux.no/linux+*/arch/x86/include/asm/irq_vectors.h#L19" id="L19" name="L19"&gt;  19&lt;/a&gt;&lt;span class="comment"&gt; *  Vectors 129 ... 237 : device interrupts&lt;/span&gt;&lt;br /&gt;&lt;a class="line" href="http://lxr.linux.no/linux+*/arch/x86/include/asm/irq_vectors.h#L20" id="L20" name="L20"&gt;  20&lt;/a&gt;&lt;span class="comment"&gt; *  Vectors 238 ... 255 : special interrupts&lt;/span&gt;&lt;br /&gt;&lt;a class="line" href="http://lxr.linux.no/linux+*/arch/x86/include/asm/irq_vectors.h#L21" id="L21" name="L21"&gt;  21&lt;/a&gt;&lt;span class="comment"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;http://www.oldlinux.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-3056082946729717893?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/3056082946729717893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=3056082946729717893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3056082946729717893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3056082946729717893'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/12/compare-evolution-of-hard-irq.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2491715716511324721</id><published>2009-12-16T04:15:00.000-08:00</published><updated>2009-12-16T04:15:58.547-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smu'/><title type='text'></title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_fMgaoW35LIQ/SyheCHaoiKI/AAAAAAAAA48/QxhUfIrZdmc/s1600/IMAG0010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_fMgaoW35LIQ/SyheCHaoiKI/AAAAAAAAA48/QxhUfIrZdmc/s320/IMAG0010.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-2491715716511324721?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2491715716511324721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2491715716511324721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2491715716511324721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2491715716511324721'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/12/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_fMgaoW35LIQ/SyheCHaoiKI/AAAAAAAAA48/QxhUfIrZdmc/s72-c/IMAG0010.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-4330315458295797532</id><published>2009-11-18T06:07:00.000-08:00</published><updated>2009-11-18T06:07:31.094-08:00</updated><title type='text'></title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_fMgaoW35LIQ/SwP_QBnNXaI/AAAAAAAAAzc/9brDVnehr4k/s1600/Image_00005.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_fMgaoW35LIQ/SwP_QBnNXaI/AAAAAAAAAzc/9brDVnehr4k/s320/Image_00005.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt; &lt;br /&gt;刻录完毕 Fedora-12-x86_64-DVD.iso 没有标准蓝色笔, 改用红色笔写上标签&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-4330315458295797532?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/4330315458295797532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=4330315458295797532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4330315458295797532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4330315458295797532'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/11/fedora-12-x8664-dvd.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fMgaoW35LIQ/SwP_QBnNXaI/AAAAAAAAAzc/9brDVnehr4k/s72-c/Image_00005.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-3482717947628051251</id><published>2009-11-17T20:46:00.006-08:00</published><updated>2009-11-19T22:35:04.063-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='szlug'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'></title><content type='html'>发现故事于近期 LinuxWeeklyNews 之 Quotes of the week (语录) 环节：&lt;br /&gt;&lt;a href="http://lwn.net/Articles/359270/"&gt;http://lwn.net/Articles/359270/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The fact is, maintainership does _not_ mean ownership. It means that&lt;br /&gt;you should be _responsible_ for the code, and you get credit for it,&lt;br /&gt;but if problems happen you do NOT "own" it. Not at all.&lt;br /&gt;If you don't understand that, you shouldn't be a maintainer.&lt;br /&gt;-- Linus Torvalds&lt;br /&gt;事实是，维护不是意味着你拥有这部分代码；而是你要对它负责任，你从中获得荣誉和别人的称赞；而当问题发生时，你并不承担错误；完全不是；&lt;br /&gt;&lt;br /&gt;可以进一步这封邮件的全文：&lt;br /&gt;&lt;a href="http://lwn.net/Articles/360156/"&gt;http://lwn.net/Articles/360156/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;这封出自 Linus 的邮件第一句话就是 "You're full of sh*t." (你就是一坨屎) ...&lt;br /&gt;&lt;br /&gt;如果你再有时间和兴趣，还可以进一步阅读讨论线索之全文，以了解整个事件之来龙去脉：&lt;br /&gt;&lt;a href="http://thread.gmane.org/gmane.linux.kernel/908831/focus=41872"&gt;http://thread.gmane.org/gmane.linux.kernel/908831/focus=41872&lt;/a&gt;&lt;br /&gt;邮件线索原始标题： "请考虑重置 commit 7d930bc" (即反转 commit 7d930bc 的所有修改)&lt;br /&gt;1) Dmitry Torokhov 报告 2.6.32-rc5 中 cfg80211 (也就是 wireless 部分) 出现 Kernel Oops, 经过一番艰苦 git bisect 之后，发现引起问题的原因在于 commit 7d930bc, 重置这号 commit 之后可以解决；可见这确实是一个邪恶的 commit, 而且 git show 显示它引入于 2.6.32-rc5 之后；&lt;br /&gt;2) David Miller (net-2.6 总管) 说在我的 net-2.6.git 树已修正了，稍晚会推送给 Linus;&lt;br /&gt;3) 这时 Marcel Holtmann 忽然说了句 这个事件是这样解决了，但类似事件我们是不是可以改进下工作流，更多考虑下 最直接那个 MAINTAINER 的看法？ (Wireless 的 cfg80211 和 nl80211 接口部分维护人是 Johannes Berg)  让他能有个说句话的机会，而不是直接跳过去了？&lt;br /&gt;4) Johannes Berg 说话了，"唉，类似问题困扰已久" 指的是工作流上，当问题发生时，人们都直接找 Linus 或其它几位顶级 MAINTAINER 要求重置了那个出问题的 commit, 甚至也不通知一下 那个 commit 的原始作者和我们这些底层的  MAINTAINER, 导致我们反而后知后觉，后面 merging 过程中麻烦多多；所以能不能先发给我们，以标题类似于 "发现问题于 某  commit, 我们看怎么解决？"&lt;br /&gt;5) Dmitry Torokhov: 我不明白问题出在哪里，我都已经抄送给 wireless 邮件列表了，我觉得在 -rc5 之后我们要迅速地解决问题&lt;br /&gt;6) Johannes Berg: 我不反对要迅速解决问题，你当然可以直接发给Linus要求直接revert，我只是说能不能先发给MAINTAINER(也就是我了)，我们有了更好的办法再汇报给Linus不晚哪，因为有时候  仅仅一个 revert 是不够的，因为原来那个 commit 肯定也是解决了某事情，如果我们直接 revert  可能会导致更糟糕的事情；这种工作流显得更为友好；而不是只被列在Cc里面，好像MAINTAINER的意见只是第二位的；&lt;br /&gt;7) Dmitry Torokhov: 是说 To: 和Cc: 差别待遇吗？好了好了，下次我把你们全列在 To: 里面好吧&lt;br /&gt;8) Marcel Holtmann: 近期我也发现有这种趋势：人们就不管三七二十一，上来就要示 revert, 然后才考虑解决真正的解决问题；&lt;br /&gt;9) Linus 发火了： "你就是一坨屎" BUG 终究是BUG 就要被 revert 掉；那些在 merge window (rc2) 之后还引入 BUG 的人们应该被钉在耻辱柱上；一个 commit 引入的问题比它修正的要多，你说我们是不是就该要 revert 它？&lt;br /&gt;10) Andrew Morton: subsystem maintainers 通常都很不靠谱&lt;br /&gt;11) David Miller: To Andrew: 这很 平常 (common), 但不是普遍的 (universal)&lt;br /&gt;12) Andrew Morton: David, 顺便把这几个 patch 从 -mm 树给接过去？&lt;br /&gt;13) David Miller: 没问题，已应用至 net-2.6 树；其中有个 isdn-eicon-return-on-error.patch 又在用自动格式化工具玩大便 (holy crap someone run that driver through some auto-formatting tool!)&lt;br /&gt;14) Linus Torvalds: 坦率地说，我还是对这个bug是非常的不满意：1) 它是 -rc5 之后引入的 2) 它被多人 bisect 出来，这浪费了多少人的时间？ 3) 此 commit 的原始作者(Johannes Berg) 在被告知了 具体哪一个  commit 导致的问题却还想从报告者那里等待更多的信息(你都已经被通知这号commit有问题了，你就不能自己搞定吗？)；&lt;br /&gt;15) Marcel Holtmann: 当然是需要修正，但盲目地 revert 可能导致其它副作用； And to be honest, Johannes Berg 在解决 wireless 问题上还是很积极的；&lt;br /&gt;16) Linus Torvalds: 每个人都知道出一问题要修正它；但真正的问题是"我们要最快地修正它" revert 就是最快的办法  我等不及 subsystem maintainer 来修正它；(To Marcel)你别光说讨好的漂亮话了；你错了，你应该感谢 Dmitry  ，请求原谅浪费了他的时间；&lt;br /&gt;17) Marcel Holtmann: 其实四天前我的邮箱就有了 Johannes 发过来的 解决办法的 patch 了，你的意思是要我当时就 越过 MAINTAINER (Johannes and David Miller) 直接把它发送给你？&lt;br /&gt;18) Linus Torvalds:  你要我们的用户再多等一天还是再多等五天？ 在 -rc5 之后出现的问题我们要在最快的时间把它修正，即使不是最优的结果，但我们的测试用户有多少时间给我们浪费的？ 我们要做的就是 "Deal with it", And yes, 有时候 "Dealing with it" 就意味着必要时绕过维护者。 最差的情况下 我们有这样一个严格的管道在必要时 让用户不必在 MAINTAINER 路上等待太多时间&lt;br /&gt;19) Marcel Holtmann: 我也同意。但是公平说，这个 bug 并不是影响着所有人 ...&lt;br /&gt;20) Linus Torvalds: 不是的，你又错了。我是被动卷入这个线索的，其实看一眼那个 commit 就知道那个 memcpy 就有 NULL pointer dereference 问题。有人撞上了这个 problem 这就够了&lt;br /&gt;21) Ingo Molnar 插入： 列举 Johannes 前两天的一封回复邮件，以说明其(Johannes)回复是 无用的， 不负责任的 (Unhelpful, defensive, in denial.) 你的 "hey, nothing happened, we fixed it after all" 表示你对此的无知，此类可避免的事故在将来还会重演&lt;br /&gt;22) Marcel Holtmann: 谁这么说话了？那不是我说的好不好？&lt;br /&gt;23) Ingo Molnar: 没在说你。是说上面写那个邮件的那个人，上面已 quote (就是 Johannes 写的) 部分&lt;br /&gt;24) ... 有时候BUG比较复杂，1天还搞不定；这就证明了你是不够 responsive; 接着讨论要做到什么样才能叫做 responsive, 多少时间响应？ ...&lt;br /&gt;25) Linus Torvalds: 拜托，两天看起来是不多，但我们的 merge window 关闭已有5个星期了，我们马上就要发布 (2.6.32) 了&lt;br /&gt;&lt;br /&gt;Linus 对 Kernel 还是相当严格，顺便也提到 Mailing list 这个 "Immediate but asynchronous" 交流方式的优点，&lt;br /&gt;&lt;br /&gt;顺便 David Miller 提到有人还在玩 auto-formatting tool 提交补丁，这种在刚开始入门时尚可，入门久了，再玩就没什么意思了，还会引起人家反感，请看这里的二楼评论；&lt;br /&gt;&lt;a href="http://roclinux.cn/?p=1440"&gt;http://roclinux.cn/?p=1440&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;BTW, 近期发现 有人 做的 KernelPodcast 不错，以语音的方式为大家播报最近 Kernel 进展和人物事件， 可以同时 作为内核 学习 和 英语 学习材料：只是希望可以持久下去， 这样的工作除了 LWN 可以作为全职以外，一般人恐怕很难持续下去：&lt;br /&gt;&lt;a href="http://www.kernelpodcast.org/feed/"&gt;http://www.kernelpodcast.org/feed/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-3482717947628051251?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/3482717947628051251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=3482717947628051251' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3482717947628051251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3482717947628051251'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/11/kernel.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-6275471404553541795</id><published>2009-11-13T00:37:00.001-08:00</published><updated>2009-11-13T00:37:14.707-08:00</updated><title type='text'>Open source participation in Asia be encouraged</title><content type='html'>This week, I&amp;#39;ve attended two open source related events here in&lt;br&gt;Singapore, they are Professors&amp;#39; Open Source Summer Experience&lt;br&gt;asia-pacific sponsored by Redhat, and Singapore Ruby Brigade (SRB),&lt;br&gt;that gathering location near Boat Quay is also wego&amp;#39;s working offices;&lt;p&gt;&lt;a href="http://teachingopensource.org/index.php/POSSE_APAC"&gt;http://teachingopensource.org/index.php/POSSE_APAC&lt;/a&gt;&lt;br&gt;&lt;a href="http://singaporerubybrigade.pbworks.com/"&gt;http://singaporerubybrigade.pbworks.com/&lt;/a&gt;&lt;p&gt;The SRB was apparently more technical-centric and a good event for&lt;br&gt;hackers and real developers like me; some speaker talked about the&lt;br&gt;ruby rails cucumber, its new Behavior Driven Development (BDD), and&lt;br&gt;everyday git working flow, someone still think subversion is better,&lt;br&gt;but have a consensus that CVS is horrible, and outdated. After that&lt;br&gt;event, we all also had another meal of refreshments and walked&lt;br&gt;alongside the bank of Singapore river, talking more about ruby and&lt;br&gt;open source, their application status in Singapore and in the whole&lt;br&gt;south-east Asia; and, there were some students from &lt;a href="http://linuxnus.org"&gt;linuxnus.org&lt;/a&gt;,&lt;br&gt;certainly linux is also another topic of discussion. Comparing to&lt;br&gt;China, open source and linux adoption here is also very limited, the&lt;br&gt;open source guys circle here is also small, one of them told me, &amp;quot;I&lt;br&gt;almost know every linux people here;&amp;quot; so you can imagine how large it&lt;br&gt;is. We supposed kinds of scenarios for firms&amp;#39; linux adoption, but&lt;br&gt;maybe the significant factor here is decision-maker&amp;#39;s thoughts, who&lt;br&gt;knew them? From the long queue outside the M$&amp;#39;s shop for its new&lt;br&gt;production arrival last month, in my opinion they were just wasting&lt;br&gt;money; and from this perspective we know that open source here in sg,&lt;br&gt;in southeast-asia, the whole asia, still has a long way to go. Or we&lt;br&gt;can express the future in our optimistic way: &amp;quot;Open source here is&lt;br&gt;very promising, and has more tremendous potential&amp;quot;.&lt;p&gt;But what a pity, my digital camera is broken several months ago when&lt;br&gt;still in China, I didn&amp;#39;t take any photos for these wonderful events.&lt;br&gt;Besides when in the Riverside Point, the photographer staff of redhat&lt;br&gt;had taken many photo for all teachers form all corners of Asia, maybe&lt;br&gt;we can watch them several days later. And another camera for myself is&lt;br&gt;also critical, I shouldn&amp;#39;t miss any important following days, but&lt;br&gt;separate camera with 1200M better or just a smart phone (5M+ pixels)?&lt;br&gt;who knows, still in consideration.&lt;p&gt;Maybe in the end, you need more introductions about these two kind of companies,&lt;br&gt;You don&amp;#39;t know redhat? That&amp;#39;s unplausible;&lt;br&gt;You don&amp;#39;t know wego? Maybe, it&amp;#39;s a travel search engine, enjoy your&lt;br&gt;good experience with it (&lt;a href="http://wego.com"&gt;wego.com&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-6275471404553541795?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/6275471404553541795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=6275471404553541795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6275471404553541795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6275471404553541795'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/11/open-source-participation-in-asia-be.html' title='Open source participation in Asia be encouraged'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2922031832531718838</id><published>2009-11-05T03:11:00.001-08:00</published><updated>2009-11-05T03:11:06.556-08:00</updated><title type='text'>test blogger from with email </title><content type='html'>-- &lt;br&gt;Cheng Renquan (程任全), from Singapore&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-2922031832531718838?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2922031832531718838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2922031832531718838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2922031832531718838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2922031832531718838'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/11/test-blogger-from-with-email.html' title='test blogger from with email &lt;crquan.kernel@blogger.com&gt;'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-6574946970928878361</id><published>2009-11-01T00:51:00.000-07:00</published><updated>2009-11-01T00:51:57.143-07:00</updated><title type='text'></title><content type='html'>http://lwn.net/Articles/357451/&lt;br /&gt;&lt;br /&gt;Welcome back of Con Kolivas &lt;kernel@kolivas.org&gt;, originally another aggressive linux kernel hacker,&lt;br /&gt;&lt;/kernel@kolivas.org&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-6574946970928878361?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/6574946970928878361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=6574946970928878361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6574946970928878361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6574946970928878361'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/11/httplwn.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5263875596871412633</id><published>2009-05-13T18:24:00.002-07:00</published><updated>2009-05-13T18:31:22.920-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.linuxaudio.org/files/logo/dark_on_bright/lao_banner_06_trans_w400.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 72px;" src="http://www.linuxaudio.org/files/logo/dark_on_bright/lao_banner_06_trans_w400.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt; * 2009 La Casa della Musica, Parma, Italy - &lt;a title="LAC 2009 Website" href="http://lac.linuxaudio.org/2009/"&gt;Website&lt;/a&gt;, &lt;a href="http://lad.linuxaudio.org/events/2009_cdm"&gt;A/V Streams &amp;amp; Slides&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;LAC (Linux Audio Conference) is held annually and this year it was in Italy in April, and from its &lt;a href="http://lad.linuxaudio.org/events/2009_cdm/"&gt;papers and slides&lt;/a&gt;, it can be observed that frugal may be the next right direction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5263875596871412633?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5263875596871412633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5263875596871412633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5263875596871412633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5263875596871412633'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/05/2009-la-casa-della-musica-parma-italy.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-46414833275895330</id><published>2009-05-10T05:43:00.006-07:00</published><updated>2009-05-10T06:10:06.879-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo linux'/><title type='text'></title><content type='html'>之前写过一篇 Blog&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://crquan.blogspot.com/2008/11/intrepid-ibex-ubuntu-810.html"&gt;你知道 Intrepid Ibex (勇敢的巨角羊) 操作系统 (Ubuntu 8.10) 吗？&lt;/a&gt;&lt;/h3&gt;&lt;/li&gt;&lt;/ul&gt;在&lt;a href="https://wiki.ubuntu.com/DevelopmentCodeNames"&gt;这里&lt;/a&gt;，能找到这个系列又多了一个&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Karmic Koala (命运的树袋熊) 9.10 Released in October 2009&lt;/li&gt;&lt;/ol&gt;最近又发现了一系列有意思的名字，就是 Linux 内核的发布代号：&lt;br /&gt;&lt;br /&gt;这个代号隐藏于 每一内核发布的 Makefile 文件中，第5行是&lt;br /&gt;&lt;br /&gt;&lt;code&gt;git show v2.6.30-rc5:Makefile |head -n5&lt;br /&gt;VERSION = 2&lt;br /&gt;PATCHLEVEL = 6&lt;br /&gt;SUBLEVEL = 30&lt;br /&gt;EXTRAVERSION = -rc5&lt;br /&gt;NAME = Vindictive Armadillo&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;其中 Vindictive Armadillo (怀恨的犰狳) 就是了。&lt;br /&gt;&lt;br /&gt;倒推过来是&lt;br /&gt;&lt;ol&gt;&lt;li&gt;v2.6.30 Vindictive Armadillo (怀恨的犰狳) (Not Released Yet)&lt;/li&gt;&lt;li&gt;v2.6.29 Temporary Tasmanian Devil (临时的 Tasmanian 恶魔)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;v2.6.28 Erotic Pickled Herring ()&lt;br /&gt;&lt;/li&gt;&lt;li&gt;v2.6.27 Rotary Wombat ()&lt;br /&gt;&lt;/li&gt;&lt;li&gt;v2.6.26 Rotary Wombat&lt;/li&gt;&lt;li&gt;v2.6.25 Funky Weasel is Jiggy wit it&lt;/li&gt;&lt;li&gt;v2.6.24 Arr Matey! A Hairy Bilge Rat!&lt;/li&gt;&lt;li&gt;v2.6.23 Arr Matey! A Hairy Bilge Rat!&lt;/li&gt;&lt;li&gt;v2.6.22 Holy Dancing Manatees, Batman!&lt;/li&gt;&lt;li&gt;v2.6.21 Nocturnal Monster Puppy&lt;/li&gt;&lt;li&gt;v2.6.20 Homicidal Dwarf Hamster&lt;/li&gt;&lt;li&gt;v2.6.19 Avast! A bilge rat!&lt;/li&gt;&lt;li&gt;v2.6.18 Avast! A bilge rat!&lt;/li&gt;&lt;li&gt;v2.6.17 Crazed Snow-Weasel&lt;/li&gt;&lt;li&gt;v2.6.16 Sliding Snow Leopard&lt;/li&gt;&lt;li&gt;v2.6.15 Sliding Snow Leopard&lt;/li&gt;&lt;li&gt;v2.6.14 Affluent Albatross&lt;/li&gt;&lt;li&gt;v2.6.13 Woozy Numbat&lt;/li&gt;&lt;li&gt;v2.6.12 Woozy Numbat&lt;/li&gt;&lt;li&gt;v2.6.11 Woozy Numbat&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-46414833275895330?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/46414833275895330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=46414833275895330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/46414833275895330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/46414833275895330'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/05/blog-intrepid-ibex-ubuntu-8.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-1683944363358375907</id><published>2009-05-07T19:11:00.002-07:00</published><updated>2009-05-07T19:17:51.773-07:00</updated><title type='text'></title><content type='html'>&lt;p&gt;A simple way with curl to post code snippet to ubuntu paste:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;$ curl -v -d 'poster=chengrq&amp;syntax=python' --data-urlencode 'content@/home/gektop/bin/diff-filter' http://paste.ubuntu.com&lt;br /&gt;* About to connect() to paste.ubuntu.com port 80 (#0)&lt;br /&gt;*   Trying 91.189.90.174... connected&lt;br /&gt;* Connected to paste.ubuntu.com (91.189.90.174) port 80 (#0)&lt;br /&gt;&gt; POST / HTTP/1.1&lt;br /&gt;&gt; User-Agent: curl/7.18.2 (x86_64-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8j zlib/1.2.3&lt;br /&gt;&gt; Host: paste.ubuntu.com&lt;br /&gt;&gt; Accept: */*&lt;br /&gt;&gt; Content-Length: 3002&lt;br /&gt;&gt; Content-Type: application/x-www-form-urlencoded&lt;br /&gt;&gt; Expect: 100-continue&lt;br /&gt;&gt; &lt;br /&gt;&lt; HTTP/1.1 100 Continue&lt;br /&gt;&lt; HTTP/1.1 302 Found&lt;br /&gt;&lt; Date: Fri, 08 May 2009 01:29:08 GMT&lt;br /&gt;&lt; Server: Apache/2.2.8 (Ubuntu) mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8&lt;br /&gt;&lt; Location: /166435/&lt;br /&gt;&lt; Content-Length: 0&lt;br /&gt;&lt; Content-Type: text/html; charset=utf-8&lt;br /&gt;&lt; &lt;br /&gt;* Connection #0 to host paste.ubuntu.com left intact&lt;br /&gt;* Closing connection #0&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-1683944363358375907?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/1683944363358375907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=1683944363358375907' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/1683944363358375907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/1683944363358375907'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/05/simple-way-with-curl-to-post-code.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-8619903112796388969</id><published>2009-05-07T18:31:00.004-07:00</published><updated>2009-05-07T18:51:49.391-07:00</updated><title type='text'></title><content type='html'>&lt;p&gt;I need a diff (or patch) manipulation utility, but unfortunately I have not found one, then I wrote one, of course, it's in Python.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/python&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Usage: diff-filter [-v] path1 path2 ...&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;#                    &amp;lt;INPUT &amp;gt;OUTPUT&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Usage: &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt; [-v] path1 path2 ... &amp;lt;INPUT&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; \&lt;br /&gt;            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# some global variables&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;inChunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;strip&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;span class="nb"&gt;buffer&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;invert&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# to invert the filter&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;-v&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="n"&gt;invert&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# the main filter&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readline&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;break&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;--- &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; \&lt;br /&gt;            &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;diff&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; \&lt;br /&gt;            &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Binary&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; \&lt;br /&gt;            &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Index&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="n"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;br /&gt;        &lt;span class="n"&gt;inChunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;diff&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; \&lt;br /&gt;            &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Binary&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; \&lt;br /&gt;            &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Index&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span class="nb"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;br /&gt;            &lt;span class="k"&gt;continue&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span class="n"&gt;slash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;slash&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]:&lt;/span&gt;&lt;br /&gt;                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;span class="n"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;br /&gt;                    &lt;span class="k"&gt;break&lt;/span&gt;&lt;br /&gt;            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;                &lt;span class="n"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span class="n"&gt;matched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;matched&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;matched&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span class="nb"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;inChunk&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;matched&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nb"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span class="nb"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It also can be reached by the ubuntu paste service:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;http://paste.ubuntu.com/166435/&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Application field: if you have a big diff generated by "diff -R", and want to split it according to some seperate path or components, you can use this. Happy hacking!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-8619903112796388969?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/8619903112796388969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=8619903112796388969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8619903112796388969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/8619903112796388969'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/05/i-need-diff-or-patch-manipulation.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-281628495709285645</id><published>2009-03-29T23:42:00.003-07:00</published><updated>2009-03-29T23:46:20.013-07:00</updated><title type='text'>Albert H. Einstein</title><content type='html'>&lt;blockquote&gt;When I was a fairly precious young man, the nothingness of the hopes and strivings that chases most men restlessly through life came to my consciousness with considerable vitality.&lt;br /&gt;Moreover I soon discovered the cruelty of that chase, which in those years was much more carefully covered up by hypocrisy and glitterings words than is the case today.&lt;br /&gt;By the mere existence of the stomach everyone was condemned to participate in that chase.&lt;/blockquote&gt;&lt;br /&gt;To the great Albert.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-281628495709285645?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/281628495709285645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=281628495709285645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/281628495709285645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/281628495709285645'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/03/albert-h-einstein.html' title='Albert H. Einstein'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-9113961810022938392</id><published>2009-01-19T20:14:00.006-08:00</published><updated>2009-01-19T21:04:01.980-08:00</updated><title type='text'>登记 gnupg 公钥</title><content type='html'>PGP/GPG 公钥和私钥对是很多场合都要求的认证机制，&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;PGP/GPG public key (&lt;b&gt;not an SSH key&lt;/b&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;既然如此，那就做一个吧：&lt;br /&gt;&lt;br /&gt;安装一个最新版本的 gnupg:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ emerge =app-crypt/gnupg-2.0.9-r1&lt;br /&gt;$ gpg --gen-key&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;此过程一系列问题，姓名、电邮、Comment，最后生成的ID的形式是：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;"Name (Comment) &lt;email&gt;"&lt;/email&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;做好了之后，就传到服务器上去吧，当然传送的是公钥了，私钥是不以任何方式泄漏的；&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ gpg --list-keys&lt;br /&gt;$ gpg --export --armor&lt;br /&gt;$ gpg --keyserver hkp://keys.gnupg.net --keyserver-options debug --send-keys f9b0925b&lt;br /&gt;$ gpg --keyserver hkp://keys.gnupg.net --keyserver-options debug --send-keys f9b0925b&lt;br /&gt;gpg: sending key F9B0925B to hkp server keys.gnupg.net&lt;br /&gt;gpgkeys: curl version = libcurl/7.18.2 OpenSSL/0.9.8j zlib/1.2.3&lt;br /&gt;* About to connect() to keys.gnupg.net port 11371 (#0)&lt;br /&gt;*   Trying 86.59.21.34... * Timeout&lt;br /&gt;*   Trying 129.128.98.22... * connected&lt;br /&gt;* Connected to keys.gnupg.net (129.128.98.22) port 11371 (#0)&lt;br /&gt;&gt; POST /pks/add HTTP/1.1&lt;br /&gt;Host: keys.gnupg.net:11371&lt;br /&gt;Accept: */*&lt;br /&gt;Content-Length: 1956&lt;br /&gt;Content-Type: application/x-www-form-urlencoded&lt;br /&gt;Expect: 100-continue&lt;br /&gt;&lt;br /&gt;* HTTP 1.0, assume close after body&lt;br /&gt;&amp;lt; HTTP/1.0 200 OK&lt;br /&gt;&amp;lt; Server: sks_www/1.0.10&lt;br /&gt;&amp;lt; Content-type: text/html; charset=UTF-8&lt;br /&gt;&amp;lt;&lt;br /&gt;* Closing connection #0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;http://www.kernel.org/faq/#account&lt;br /&gt;&lt;br /&gt;缺省传送的是 hkp://keys.gnupg.net 服务器，在 ~/.gnupg/gpg.conf 文件中，也提示了其它传送方式，包括发送邮件的形式；因为上面这样的传送有时会失败，如 "86.59.21.34... * Timeout" 。&lt;br /&gt;&lt;br /&gt;这个 hkp 访问协议从上面的传送过程也可以看出来，实际上就是一个在非标准端口运行的 http 服务器，提交的过程实际就是 http 表单的提交，既然知道了它在使用 11371 端口号，当然也可以使用浏览器来访问了，如：&lt;br /&gt;&lt;br /&gt;http://keys.gnupg.net:11371/pks/lookup?search=0xf9b0925b&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fMgaoW35LIQ/SXVXY2-Ea8I/AAAAAAAAAmU/SfJxDgVVg8w/s1600-h/keys-0xf9b0925b-keys.gnupg.net-11371-keys.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 158px;" src="http://3.bp.blogspot.com/_fMgaoW35LIQ/SXVXY2-Ea8I/AAAAAAAAAmU/SfJxDgVVg8w/s320/keys-0xf9b0925b-keys.gnupg.net-11371-keys.png" alt="" id="BLOGGER_PHOTO_ID_5293233021628214210" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-9113961810022938392?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/9113961810022938392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=9113961810022938392' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/9113961810022938392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/9113961810022938392'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/01/gnupg.html' title='登记 gnupg 公钥'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fMgaoW35LIQ/SXVXY2-Ea8I/AAAAAAAAAmU/SfJxDgVVg8w/s72-c/keys-0xf9b0925b-keys.gnupg.net-11371-keys.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7230574832695120395</id><published>2009-01-18T20:10:00.000-08:00</published><updated>2009-01-18T20:11:27.263-08:00</updated><title type='text'>2098, "Hello, World!"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fMgaoW35LIQ/SXP9RzGJZYI/AAAAAAAAAmM/XzSs4Zjh8sM/s1600-h/2098-hello-world.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 284px; height: 320px;" src="http://2.bp.blogspot.com/_fMgaoW35LIQ/SXP9RzGJZYI/AAAAAAAAAmM/XzSs4Zjh8sM/s320/2098-hello-world.png" alt="" id="BLOGGER_PHOTO_ID_5292852469306058114" border="0" /&gt;&lt;/a&gt;2098-hello-world.png&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-7230574832695120395?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7230574832695120395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7230574832695120395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7230574832695120395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7230574832695120395'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/01/2098-hello-world.html' title='2098, &quot;Hello, World!&quot;'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fMgaoW35LIQ/SXP9RzGJZYI/AAAAAAAAAmM/XzSs4Zjh8sM/s72-c/2098-hello-world.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-4255776311735430077</id><published>2009-01-10T00:36:00.003-08:00</published><updated>2009-01-10T01:52:42.615-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'>黄油文件系统(Btrfs)与南瓜文件系统(Squashfs)</title><content type='html'>黄油文件系统(Btrfs)是Linux下一代文件系统，具有很多先进的文件系统特性，在2008年9月份的内核峰会上已讨论决定在2.6.29合并入主流内核，现在正是2.6.29的rc开放时期(为期两周)，linus在昨天刚刚把它合并进去了～&lt;br /&gt;&lt;br /&gt;http://lkml.org/lkml/2008/12/31/85&lt;br /&gt;&lt;br /&gt;使用Btrfs的方法详见wiki站点：&lt;br /&gt;&lt;br /&gt;http://btrfs.wiki.kernel.org/index.php/Main_Page&lt;br /&gt;&lt;br /&gt;可以这么评价吧：&lt;br /&gt;1. Solaris曾经有最后两根救命稻草是DTrace探测工具和ZFS文件系统，现在在Linux上有了带utrace内核的Systemtap和Btrfs文件系统，Solaris操作系统再也没有任何优势了，&lt;br /&gt;&lt;br /&gt;另外，在这个页面还包含了很多Btrfs的许多创意想法，有已实现和正在实现的，包括在文件系统层次的RAID5,6:&lt;br /&gt;&lt;br /&gt;http://btrfs.wiki.kernel.org/index.php/Project_ideas&lt;br /&gt;&lt;br /&gt;南瓜文件系统(Squashfs)可能就更熟悉了，它采用gzip或lamz(更高压缩率)来制作只读的映像文件，常见于各发行版的LiveCD光盘中，也在今天早上(UTC时间1月9日凌晨)刚刚合并入主流内核(linus的mainstream内核)&lt;br /&gt;&lt;br /&gt;http://marc.info/?l=linux-kernel&amp;m=123153961726343&amp;w=2&lt;br /&gt;&lt;br /&gt;关于Squashfs的合并之路，倒不是一帆风顺的：&lt;br /&gt;1. 其作者 Phillip Lougher &lt;phillip@lougher.demon.co.uk&gt; 在这个线索中提到，在过去的数个月(据我观察有两三年了)中，他不停地接到用户的抱怨说为什么Squashfs停止了开发，于是在六个月前， Phillip 辞掉工作，专职为 Squashfs 开发，直到前不久，在与 Andrew Morton 的一次讨论中， Andrew 觉得可以合并进入 linux-next-for-2.6.31 的分支，但这个过程仍然很漫长，(根据3个月的规则，还至少需要七八个月)。 Phillip 已经6个月没有工作，对此已尽乎绝望，希望能尽快合并入主流，可以重新去找份工作，挣点钱。&lt;br /&gt;2. 接下来的回复中，有两种观点；一种常规的观点是文件系统不是一般的驱动程序，是不能贸然合并的，这是传统的观点； Andrew 也是基于此观点认为 Squashfs 还需要在 linux-next 中观察个半年。反对的观点来自 Alan Cox ，说很多发行版的 LiveCD 已经在用 Squashfs 很多年了，还有什么样的大规模测试比这更能说明问题？&lt;br /&gt;3. 终于， Andrew 同意现在就合并吧！我们终于有了一个以蔬菜命名的文件系统了～&lt;br /&gt;4. 调侃继续：&lt;br /&gt;   蔬菜总比 FAT (肥胖) 好吧～&lt;br /&gt;   我喜欢南瓜(Squash)胜过于黄油(Butter)~&lt;br /&gt;&lt;br /&gt;http://thread.gmane.org/gmane.linux.file-systems/28733/focus=28881&lt;br /&gt;&lt;br /&gt;http://marc.info/?l=linux-kernel&amp;m=123153961726343&amp;w=2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-4255776311735430077?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/4255776311735430077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=4255776311735430077' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4255776311735430077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4255776311735430077'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/01/btrfssquashfs.html' title='黄油文件系统(Btrfs)与南瓜文件系统(Squashfs)'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2498958476204921283</id><published>2009-01-01T00:09:00.015-08:00</published><updated>2009-01-01T03:19:37.971-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='uganda'/><title type='text'>Vim, Bram Moolenaar, 乌干达</title><content type='html'>From: /usr/share/vim/vim72/doc/uganda.txt&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Kibaale Children's Centre  *kcc* *Kibaale*  *charity*&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Kibaale(乌干达地名)儿童中心位于非洲东部、靠近Tanzania(坦桑尼亚)，在乌干达南部的一个小镇Kibaale。这个地区以Rakai区而闻名。居民大多是农民。尽管人们很穷，食物仍然是足够的。但是这个地区正承受着比世界上任何地方都更严重的AIDS灾难。也有人说它就是起源于这里。据统计有10~30%的乌干达人受到了HIV的感染。因为父母死亡，那里有很多孤儿。在这个地区有大约6万名儿童失去了一位或两位双亲，尽管总人口只有35万。并且这个数字还在持续增长。&lt;br /&gt;&lt;br /&gt;这些儿童需要很多帮助。KCC正在努力工作以提供对食物、医疗和教育的需求。食物和医疗是为了让他们保持健康，教育是让他们将来能够自己照顾自己。KCC以基督的名义工作，但援助是提供给任何宗教的儿童。&lt;br /&gt;&lt;br /&gt;解决这个地区问题的关键在于教育。这在过去的 Idi Amin 总统在位的数年以及接下来的内战中一直被忽略着。现在政府又重新稳定了，儿童和父母们都必须学习怎样照顾他们自己和怎样避免被感染。那里也为病人和饥饿的人们提供帮助，但它的主要目的是教会人们如何避免生病和怎样种植健康的食物。&lt;br /&gt;&lt;br /&gt;大部分孤儿都住在大家庭里。由叔叔或大一点的姐姐来照顾。因为这样的家庭很大，而收入很低，对一个孤儿来说能得到健康的食物就已经很幸运了。而衣服、医疗和教育是已经超出他们能力所能及的。为了帮助这些有需要的孩子们，我们设置了一个专项赞助计划。可以经济上收养一个小孩。仅仅数美元每月就可以让KCC维持对这个小孩所采取的必要措施，就是保持健康和上学，其它对这个孤儿和支持他的家庭所必需的将由KCC来完成。&lt;br /&gt;&lt;br /&gt;在直接帮助这名孤儿的同时，他们成长的环境也需要改善。KCC帮助当地学校提高他们的教学方法。在这个中心有一个示范学校来做教师培训。在那里培训保健员，宣传卫生教育，并且鼓励家庭建立好的厕所。我(Bram)帮助建立了一个水泥板生产基地。这些水泥板用于建造好的厕所，并且都以低于成本价出售。&lt;br /&gt;&lt;br /&gt;这个项目还包括一个小的疹所，给孩子和他们的家庭提供医疗帮助。当有需要时，还提供到医院的交通。免疫计划也在实施，以应对传染病的发生(这里麻疹和霍乱一直是个问题)。&lt;br /&gt;&lt;br /&gt;1994至1995年夏天我花了一整年时间在这个中心，以志愿者的身份工作。我帮助扩展这个中心，和在城市供水方面工作。我了解到KCC所提供的帮助确实有作用。当我回到荷兰时，我想要继续支持KCC。为了这个，我正在募捐基金和组织赞助计划。请考虑以下可能：&lt;br /&gt;&lt;br /&gt;1. 赞助一名小孩上小学，17欧元每月(或更多)&lt;br /&gt;2. 赞助一名小孩上中学，25欧元每月(或更多)&lt;br /&gt;3. 赞助一个疹所，任何数额每月或每季度&lt;br /&gt;4. 单笔捐款&lt;br /&gt;&lt;br /&gt;相比于其它儿童赞助组织来说，这此数额都是很低的。这是因为这些钱都是直接到这个中心去了。机构本身的运作费用保持在低于5%。这是个小机构并且依赖于志愿者来运作，因此是可以做到的。如果你想赞助一名小孩，你应该想好需要至少保持一年。&lt;br /&gt;&lt;br /&gt;怎样知道你的钱花在了正确的地方呢？首先，你可以得到我作为VIM的作者的个人保证。我信任在这个中心工作的人们，我在私下里了解这里的每一个人。更进一步说，这个中心也被 World Vision, Save the Child Fund 和 International Child Fund 这些组织所共同赞助和监管。我们大约每年对这个中心进行造访和检查一次进度(使用我们自己的钱)。我个人在 1996, 1998, 2000, 2001, 和 2003 年都分别访问过这个中心。访问报告都在ICCF的网站上有。&lt;br /&gt;&lt;br /&gt;如果你有更多的疑问，请发电邮给我： &lt;bram@vim.org&gt;&lt;br /&gt;&lt;br /&gt;这个中心的地址是：&lt;br /&gt;&lt;br /&gt;   Kibaale Children's Centre&lt;br /&gt;   p.o. box 1658&lt;br /&gt;   Masaka, Uganda, East Africa&lt;br /&gt;&lt;br /&gt;汇款方法：&lt;br /&gt;&lt;br /&gt;USA: ...&lt;br /&gt;&lt;br /&gt;Canada: ...&lt;br /&gt;&lt;br /&gt;Holland: ...&lt;br /&gt;&lt;br /&gt;Germany: ...&lt;br /&gt;&lt;br /&gt;World: ...&lt;br /&gt;&lt;br /&gt;Europe: ...&lt;br /&gt;&lt;br /&gt;Credit Card: 请使用PayPal汇款至 ...&lt;br /&gt;Others: 请汇款至这个银行帐号， ... 请以欧元或美元的形式电汇或邮寄支票，最小额度是70美元，(我的银行帐号不能接受小于70美元的外国支票，致歉)&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;http://vim.cybermirror.org/runtime/doc/uganda.txt&lt;br /&gt;&lt;br /&gt;http://www.vim.org/htmldoc/uganda.html&lt;/bram@vim.org&gt;&lt;br /&gt;&lt;br /&gt;Google地图搜索KCC所在位置(东非)：&lt;br /&gt;&lt;br /&gt;http://maps.google.com/?q=Masaka,+Uganda,+East+Africa&lt;br /&gt;&lt;br /&gt;荷兰ICCF组织网站，&lt;br /&gt;&lt;br /&gt;http://iccf-holland.org/&lt;br /&gt;&lt;br /&gt;上有每年财务报告都可以下载，最近一期是2007年的：&lt;br /&gt;&lt;br /&gt;The financial report for 2007 is available (PDF).&lt;br /&gt;&lt;br /&gt;http://iccf-holland.org/jaar2007.pdf&lt;br /&gt;&lt;br /&gt;2007年中所有捐款总额是47,688欧元，其中持续赞助是20,802欧元，单笔捐款26,633欧元，利息253。&lt;br /&gt;&lt;br /&gt;2007年的花费中只有0.4%是用于管理和运作费用。在2006年的费用比较高是因为花在了一个合法的程序以把 iccf.nl 域名要回来。2007的主要费用花在银行取出外国支票上。&lt;br /&gt;&lt;br /&gt;这份文件中还提到了，从2001至2007年，捐款收入在稳步增长，从2001年的2万多至2007年的接近5万欧元。&lt;br /&gt;&lt;br /&gt;基金是以每次大笔的形式直接转往乌干达，这样以减少银行手续费。&lt;br /&gt;&lt;br /&gt;在2008年1月份有91名儿童被赞助收养。比前一年多了6名。捐款的月收入是大约1300欧元。还有很多赞助者是每年支付的。希望在2008年至少能收到同样多的捐款。&lt;br /&gt;&lt;br /&gt;而单笔捐款是完全偶然的，也无法预知2008年的情况。&lt;br /&gt;&lt;br /&gt;此财务报告由 Adiswil 制作于 2008-02-16 。&lt;br /&gt;&lt;br /&gt;KCF has made a newsletter with various information: fall2007.pdf (PDF) &lt;br /&gt;&lt;br /&gt;http://iccf-holland.org/newsletter/fall2007.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-2498958476204921283?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2498958476204921283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2498958476204921283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2498958476204921283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2498958476204921283'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2009/01/vim-bram-moolenaar.html' title='Vim, Bram Moolenaar, 乌干达'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-1800362040569440460</id><published>2008-12-12T00:32:00.000-08:00</published><updated>2008-12-12T00:33:39.645-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ols2008'/><category scheme='http://www.blogger.com/atom/ns#' term='ols'/><title type='text'>和平、友爱与火箭！ (HP首席技术专家的基于ARM板的开源飞行高度记录软件开发实记) (From: OLS2008论文集)</title><content type='html'>&lt;div style="padding-left: 20px; text-indent: -16px;"&gt;Subject: &lt;b&gt;和平、友爱与火箭！ (HP首席技术专家的基于ARM板的开源飞行高度记录软件开发实记) (From: OLS2008论文集)&lt;/b&gt;&lt;/div&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;&lt;br /&gt;&lt;a target="_blank" rel="nofollow" href="http://ols.fedoraproject.org/OLS/Reprints-2008/"&gt;http://ols.fedoraproject.org/OLS/Reprints-2008/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;Bdale Garbee    Peace, Love, and Rockets!&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;&lt;a target="_blank" rel="nofollow" href="http://ols.fedoraproject.org/OLS/Reprints-2008/garbee-reprint.pdf"&gt;http://ols.fedoraproject.org/OLS/Reprints-2008/garbee-reprint.pdf&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;作者 Bdale Garbee 是 HP 的开源和Linux首席技术专家，同时是一位模型火箭飞行爱好者，&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;他和他的儿子很喜欢制作和飞行各种各样的模型火箭，但是当他们想要一款电子高度计用于探测火箭实飞高度时，却发现市面上现有的产品都是功能很有限，且依赖于专有&lt;wbr&gt;的软件来配置和解析出数据，这个令人很不爽！&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;这篇论文描述了他们如何制作开放的硬件和软件来满足自己对于高度的好奇心，现场演示文件中包含有更详细的更强动力的火箭设计计划，并包含了照片和视频材料。&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;这些材料应该是任何对开放的小型嵌入式设备好奇的人们都感兴趣的。&lt;br /&gt;硬件是基于ARM的，以 "TAPR Open Hardware" 协议开放，&lt;br /&gt;并且完全是基于开源的设计工具实现的。&lt;br /&gt;软件是以GNU工具链和很多开源库在 FreeRTOS 上实现的。&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="fixed_width"  style="font-family:Courier, Monospaced;"&gt;有兴趣的同学们可以读这篇论文。 &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-1800362040569440460?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/1800362040569440460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=1800362040569440460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/1800362040569440460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/1800362040569440460'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/12/hparm-from-ols2008.html' title='和平、友爱与火箭！ (HP首席技术专家的基于ARM板的开源飞行高度记录软件开发实记) (From: OLS2008论文集)'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-118828884213811755</id><published>2008-11-13T22:49:00.003-08:00</published><updated>2008-11-14T00:59:20.656-08:00</updated><title type='text'>你知道 Intrepid Ibex (勇敢的巨角羊) 操作系统 (Ubuntu 8.10) 吗？</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://brainstorm.ubuntu.com/modules/qawebsite/images/logo/idea-logo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 445px; height: 75px;" src="http://brainstorm.ubuntu.com/modules/qawebsite/images/logo/idea-logo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"勇敢的巨角羊"这个名字很有意思，看一下最近一系列Ubuntu发行用过的名字：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Intrepid Ibex (勇敢的巨角羊) (Ubuntu 8.10)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hardy Heron (坚忍的苍鹭) (Ubuntu 8.04)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Gusty Gibbon (强风中的长臂猿) (Ubuntu 7.10)&lt;/li&gt;&lt;li&gt;Feisty Fawn (精神饱满的幼鹿) (Ubuntu 7.04)&lt;/li&gt;&lt;li&gt;Edgy Eft (急躁不安的小蜥蜴) (Ubuntu 6.10)&lt;/li&gt;&lt;li&gt;Dapper Drake (衣冠楚楚的公鸭) (Ubuntu 6.06)&lt;/li&gt;&lt;li&gt;Breezy Badger (微风下的獾) (Ubuntu 5.10)&lt;/li&gt;&lt;li&gt;Hoary HedgeHog (灰白的刺猬) (Ubuntu 5.04)&lt;/li&gt;&lt;li&gt;Warty Warthog (长疣的非洲野猪) (Ubuntu 4.10)&lt;/li&gt;&lt;/ol&gt;再看下一个半年的发行名称&lt;ol&gt;&lt;li&gt;Jaunty Jackalope (轻松愉悦的狐狼?) (Ubuntu 9.04?)&lt;/li&gt;&lt;/ol&gt;注意这些名字都有一个"形容词定语＋动物名词" (Adjective Animal) 的定式；这个命名模式起源于Mark与 Robert Collins 在关于 Sydney 的一个名为 Funky Ferry (渡口) 的一个 joke 时的对话，"那么，我们要多久才发行第一个版本呢？还有点晕，最多六个月吧。六个月？那不足以做出一个精良的系统啊。那我们先做一个"长疣猪"的发行吧。"&lt;br /&gt;&lt;br /&gt;所有发行代号(CodeName)都可以在这个wiki页面查到：&lt;br /&gt;&lt;br /&gt;https://wiki.ubuntu.com/DevelopmentCodeNames&lt;br /&gt;&lt;br /&gt;另外，有个神秘的版本 Grumpy Groundhog (性情暴躁的土拨鼠) 一直存在于Ubuntu开发人员的心中，其实它本来很有可能作为第一个发行的命名，但它在第一次投票中落选了；并由此带来了更为长久的生命力，因为 Grumpy Groundhog 被作为了永远的 unstable (类似于debian的sid)&lt;br /&gt; &lt;br /&gt;另外， Ubuntu 9.10 发行的 CodeName 也正在征集中，从这个帖子来看，很有可能的结果是 Killer Komodo (杀手级巨蜥) 因为这个名字符合命名模式中的下一个起始字母K，现在很受欢迎&lt;br /&gt;&lt;br /&gt;http://ubuntuforums.org/showthread.php?t=915595&lt;br /&gt;&lt;br /&gt;当然，你永远都可以从 Ubuntu 创意集 (http://brainstorm.ubuntu.com) 提出自己的想法或者为你支持的想法投票， Ubuntu 开发者会从这里寻找最受欢迎的创意并去努力实现它。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-118828884213811755?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/118828884213811755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=118828884213811755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/118828884213811755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/118828884213811755'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/11/intrepid-ibex-ubuntu-810.html' title='你知道 Intrepid Ibex (勇敢的巨角羊) 操作系统 (Ubuntu 8.10) 吗？'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-636626512850425065</id><published>2008-10-25T13:07:00.002-07:00</published><updated>2008-10-25T13:18:01.601-07:00</updated><title type='text'>Talk some more about working efficiency on Terminal</title><content type='html'>Do you know how long compiling a kernel on different hardware with different configs will take?&lt;br /&gt;&lt;br /&gt;$ time make -C /usr/src/linux-2.6.27/ -j5&lt;br /&gt;&lt;br /&gt;1. that would take 25 minutes on my personal PC with 1 2.9GHz P4 and 512M RAM, 5400rpm IDE disk, a moderate configuration for desktop peripherals;&lt;br /&gt;2. that would take 10 minutes on a Dell 2950 Server, which has dual core 3.0Gx2, 2GB RAM, 7200rpm SATA disk, a minimal config for this type of hardware;&lt;br /&gt;3. that would take 5 minutes if distcc configured on 2 Dell 2950 machines, and compiled with "-j13";&lt;br /&gt;&lt;br /&gt;Do you know how long compiling a software package will take on different hardware?&lt;br /&gt;&lt;br /&gt;$ time { ./configure --prefix=/usr &amp;&amp; make; }&lt;br /&gt;&lt;br /&gt;and then:&lt;br /&gt;&lt;br /&gt;$ make install DESTDIR=$PWD/dest&lt;br /&gt;&lt;br /&gt;from LFS book, you could know the time in unit of SBU,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Use "time" to time it, anywhere the command will last longer than 1 second.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-636626512850425065?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/636626512850425065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=636626512850425065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/636626512850425065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/636626512850425065'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/10/talk-some-more-about-working-efficiency.html' title='Talk some more about working efficiency on Terminal'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-3303717431611677592</id><published>2008-10-18T02:04:00.006-07:00</published><updated>2008-10-18T02:48:06.792-07:00</updated><title type='text'>记录EndUserSummit上的三次全场爆笑</title><content type='html'>&lt;h3&gt;1、在开篇JimZemlin的 Welcome to the Summit 演讲中&lt;/h3&gt;Jim说到现在全球有很多企业在使用和关注Linux的发展，其中碰到很多问题，其实是EndUser与Developers之间缺乏足够的互相了解：对EndUser方面是不了解已经有了什么功能；对Developers方面的介绍是说："$700 billion lines of code every year" (每年产生7千亿行代码)，但不是每行都有效的，或者不知道哪一种是最好的，EndUser常常对此感到无所适从；&lt;br /&gt;&lt;br /&gt;七千亿啊，全场爆笑；&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2、在RicWheeler主持的FileSystem的Track中&lt;/h3&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fMgaoW35LIQ/SPmpuPFOr1I/AAAAAAAAAeY/WAA2YeYtXic/s1600-h/cimg1794.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_fMgaoW35LIQ/SPmpuPFOr1I/AAAAAAAAAeY/WAA2YeYtXic/s320/cimg1794.jpg" alt="" id="BLOGGER_PHOTO_ID_5258420651719307090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;他们在讲述Ext4和Btrfs(发音BetterFS)，但在这两个具体的文件系统之前，Ted谈到KernelPeople为Filesystem遇到的挑战的应对是设计了NGFS(NextGernerationFileSystem)的概念，针对块设备的变化，(SSD的出现，多设备应用等)，在NGFS中都有相应针对的设计，而ext4是当前NGFS的一个snapshot，BtrFS是最接近NGFS设计的一个；&lt;br /&gt;&lt;br /&gt;此时，我向ChirsMason(BtrFS的主要开发者也是维护者)提了一个问题，“Ted说ext4可以用在他的Laptop上，不知BtrFS是否可以用在Laptop上？”全场爆笑。Chirs回复说：“当然可以。在我的Laptop已经用了很久了；其实你提得对，我应该也这么宣布一下，这是一个很好的Marketing机会。”回头想想，我提的这个问题好弱的呀。&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;3、在Cocktail上&lt;/h3&gt;其实就是上面第一天的内容，看James和Jonathan还有两位银行界人士共四人的照片，后来我也加入进去谈话了，我问了James一些块设备方面的问题，后来James发现我不像是EndUser更像是Developer，问我知不知道LinuxPlumbersConference，我说我知道，我本来想参加那个会议的，但美国大使馆(USEmbassy)给签证的速度太慢了，导致我错过了那个会议，我的一个朋友(当时一个Google的人为我感到惋惜时说的)说它是"Such an enept bureaucracy"，James说“它从来都是 Such an enept bureaucracy”；&lt;br /&gt;&lt;br /&gt;"Such an enept bureaucracy"(一个无能的官僚机构)，全场爆笑啊。&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/6655852-3303717431611677592?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/3303717431611677592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=3303717431611677592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3303717431611677592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3303717431611677592'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/10/endusersummit_18.html' title='记录EndUserSummit上的三次全场爆笑'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fMgaoW35LIQ/SPmpuPFOr1I/AAAAAAAAAeY/WAA2YeYtXic/s72-c/cimg1794.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-6296765956548463938</id><published>2008-10-15T10:03:00.005-07:00</published><updated>2008-10-15T10:16:41.651-07:00</updated><title type='text'>十月,纽约的EndUserSummit(第二天)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fMgaoW35LIQ/SPYi6qNRLbI/AAAAAAAAAcU/8tA0arV0JVg/s1600-h/CIMG1862.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_fMgaoW35LIQ/SPYi6qNRLbI/AAAAAAAAAcU/8tA0arV0JVg/s320/CIMG1862.JPG" alt="" id="BLOGGER_PHOTO_ID_5257428006159330738" border="0" /&gt;&lt;/a&gt;第二天的内容更多,首先是主题演讲,Jonathan还是再一次给大家讲述内核社区的工作原理,&lt;br /&gt;&lt;br /&gt;这是会议现场,&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fMgaoW35LIQ/SPYj9h8bBhI/AAAAAAAAAck/U7c2U_tfTtM/s1600-h/CIMG1860.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_fMgaoW35LIQ/SPYj9h8bBhI/AAAAAAAAAck/U7c2U_tfTtM/s320/CIMG1860.JPG" alt="" id="BLOGGER_PHOTO_ID_5257429154992424466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;接下来都是同时进行的很多个Track,这部分我没有拍很多照片,因为我也在里面发言,忙着交流去了,大家直接看主办方的安排就知道有什么内容了,&lt;br /&gt;&lt;br /&gt;https://www.linuxfoundation.org/events/enduser/program&lt;br /&gt;&lt;br /&gt;这次问过主办方LinuxFoundation,会后会把相关的Presentation文件,和主办方的专业级相机拍的一些照片发布出来,请大家关注主办方的网站吧,&lt;br /&gt;&lt;br /&gt;http://www.linuxfoundation.org/&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/6655852-6296765956548463938?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/6296765956548463938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=6296765956548463938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6296765956548463938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6296765956548463938'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/10/endusersummit_16.html' title='十月,纽约的EndUserSummit(第二天)'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fMgaoW35LIQ/SPYi6qNRLbI/AAAAAAAAAcU/8tA0arV0JVg/s72-c/CIMG1862.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-940729129829632745</id><published>2008-10-13T23:53:00.005-07:00</published><updated>2008-10-14T00:40:45.565-07:00</updated><title type='text'>十月,纽约的EndUserSummit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fMgaoW35LIQ/SPRDWqMreKI/AAAAAAAAAcE/IoCWeiPaw6k/s1600-h/CIMG1770.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_fMgaoW35LIQ/SPRDWqMreKI/AAAAAAAAAcE/IoCWeiPaw6k/s320/CIMG1770.JPG" alt="" id="BLOGGER_PHOTO_ID_5256900721611864226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;九点,会议在DesmondTutuCenter如期举行,地点是在一个Refectory(餐厅),说是餐厅,我觉得更像一间教堂,&lt;br /&gt;&lt;br /&gt;第一个主题演讲的是LinuxFoundation的执行主席Zemlin讲述在Linux平台上,Developers与EndUsers缺少沟通,以至于开发者对用户需求不够了解,或者用户不了解最新开发的功能等,有必要举办一个开发者与EndUser沟通的会议,&lt;br /&gt;&lt;br /&gt;第二个主题演讲是Wikinomics的作者,讲述大规模协作如何改变了世界,&lt;br /&gt;&lt;br /&gt;接下来是一个Panel讨论,参与Panel的有FifthThird银行的CIO,美国航空的首席架师,纽约股票交易所的ChiefArchitect,还有AIG副总等人物一起来谈应用Linux的开始,以及应用过程所碰到的各种问题,希望Linux做到的哪些功能,等等,台下有一些Subsystem的维护者(也就是开发者)分别给出了回复;&lt;br /&gt;&lt;br /&gt;片刻休息之后,是三个主要Vendor(发行商)的总裁或副总来讨论作为Vendor如何协调Developers与EndUsers之间的关系,有Novell,Redhat,和Ubuntu,&lt;br /&gt;&lt;br /&gt;午餐后,另一个Panel讨论EndUser观点如何参与进Developers的开发流程,&lt;br /&gt;&lt;br /&gt;再一场是Ted讲述了你所不知道的ext3和最新的ext4的特性,ChirsMason讲述BtrFS,这个是最接近NGFS(NextGeneartionFS)概念的了,特性非常多,cool,预计在2.6.29进入mainline;&lt;br /&gt;&lt;br /&gt;接下来分为五个Track同时进行,我穿插去听了两个,FileSystem方面还是讨论各文件系统,有一个Administrator(作为EndUser)就说为什么现在的内核用dd将一个块设备上的ext3写到另一个块设备上就挂载不了了,他说记得以前的内核是可以的,Ted和Crhis和James一起回复了关于UUID的问题,&lt;br /&gt;&lt;br /&gt;PerformanceTuning的Track中讨论了UDP的延迟,内存资源的合理使用,内存管理的改进,等等,&lt;br /&gt;&lt;br /&gt;一小段总结之后到了5点,准时结束,到达附近一个公园举行露天的Cocktail酒会,大家一边喝点饮料吃点东西,一边在谈着Business或者Troubleshooting;我下午看了Rosedt的RT-linux的演示,太cool了,晚上继续听了一些关于RT-patches的改进,我问有什么Benefits,回复很简单,就是&lt;br /&gt;"Better User Experience",除了timer之外的每个IRQ都有单独的内核线程执行,实时的内核用起来就是非常流畅,桌面开上数百个应用程序也不会互相影响导致有停顿的现象,只要内存足够给这些应用程序;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fMgaoW35LIQ/SPRMcYv1tcI/AAAAAAAAAcM/MjyUGGZ-cTA/s1600-h/CIMG1807.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_fMgaoW35LIQ/SPRMcYv1tcI/AAAAAAAAAcM/MjyUGGZ-cTA/s320/CIMG1807.JPG" alt="" id="BLOGGER_PHOTO_ID_5256910715611362754" border="0" /&gt;&lt;/a&gt;JamesBottomley和JonathanCorbet与两位来自银行的人士在交流,你认出来了吗?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;不过太困了,不到7点结束,我就返回了.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-940729129829632745?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/940729129829632745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=940729129829632745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/940729129829632745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/940729129829632745'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/10/endusersummit.html' title='十月,纽约的EndUserSummit'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fMgaoW35LIQ/SPRDWqMreKI/AAAAAAAAAcE/IoCWeiPaw6k/s72-c/CIMG1770.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7114828055969946020</id><published>2008-09-30T20:43:00.003-07:00</published><updated>2008-09-30T21:23:26.246-07:00</updated><title type='text'>再说find action，提高终端下的工作效率</title><content type='html'>&lt;p&gt;再说find的action，是个很有用的工具，&lt;/p&gt;&lt;p&gt;对于查看目录下的所有文件，普通人常用的是ls，不带任何参数的ls，碰到有子目录的情况，就cd到子目录里面，进去只为敲个ls，再又cd回来，因为当前还是主要工作目录，需要查看哪个目录时就cd到哪儿去；进阶一点的人会用ls后接目录参数，可是ls还是只能列出一个目录，对于需要同时查看多个目录的情况可以用"ls -R"，可是它只列出了文件名，没有全路径，对于下一步的最大可能是cat或调用编辑器，有了全路径才是最有用的；&lt;/p&gt;&lt;p&gt;试试这个： "find -ls"&lt;/p&gt;&lt;p&gt;一次将目录下所有文件都以ls方式列表出来，可以是递归的方式看到所有文件的"ls -l"方式的结果，并且有了全路径，可以用鼠标双击全选中，再敲中键(就是鼠标滚轮)便会粘贴出来，C-A定位光标到达行首，加上个cat或者vim，阅读或者是编辑，一切操作都是连贯的；&lt;br /&gt;&lt;br /&gt;在Shell应用中，对/proc/sys/或/sys/下的查看常常既有列表还需要阅读变量内容，以前的做法是：&lt;br /&gt;&lt;br /&gt;find /proc/sys/vm -type f -ls -exec cat {} \;&lt;br /&gt;&lt;br /&gt;或者需要监视这个变量值的变化情况，加上个watch，每隔1s重读一次：&lt;br /&gt;&lt;br /&gt;watch -n1 'find /proc/sys/vm -type f -printf "%p\t" -exec cat {} \;'&lt;br /&gt;&lt;br /&gt;find是一个简单而强大的工具，绝不只是如名称一般只有"查找"文件的功用，它的参数有两个基本类型：&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;test是一个条件判断，如查按文件名查找使用"-name ..."；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;action是对找到的文件的一个动作，如缺省的-print是打印全路径名，-ls是模拟ls方式列表；&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;缺省的action只有ls,printf等，(printf另有强大的功能)，而-exec扩展方式可以后接程序执行，如上面的-exec cat读出文件内容，&lt;br /&gt;&lt;br /&gt;但是-exec cat实在太常用了，今日作了一个patch，在find-4.5.2上面加上-cat这个action，这样上面的监视命令就可以简化为：&lt;br /&gt;&lt;br /&gt;find /proc/sys/vm -cat&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="paste"&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/52714/plain/" class="pturl"&gt;Download as text&lt;/a&gt;&lt;br /&gt;&lt;div class="paste"&gt;&lt;br /&gt;&lt;table class="pastetable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;  1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;&lt;span class="special"&gt; 10&lt;/span&gt;&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;&lt;span class="special"&gt; 20&lt;/span&gt;&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;&lt;span class="special"&gt; 30&lt;/span&gt;&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;&lt;span class="special"&gt; 40&lt;/span&gt;&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;&lt;span class="special"&gt; 50&lt;/span&gt;&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;&lt;span class="special"&gt; 60&lt;/span&gt;&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;&lt;span class="special"&gt; 70&lt;/span&gt;&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;&lt;span class="special"&gt; 80&lt;/span&gt;&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;&lt;span class="special"&gt; 90&lt;/span&gt;&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;&lt;span class="special"&gt;100&lt;/span&gt;&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;&lt;span class="special"&gt;110&lt;/span&gt;&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;&lt;span class="special"&gt;120&lt;/span&gt;&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;&lt;span class="special"&gt;130&lt;/span&gt;&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;&lt;span class="special"&gt;140&lt;/span&gt;&lt;br /&gt;141&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="paste"&gt;&lt;pre&gt;&lt;span class="gd"&gt;---&lt;/span&gt;&lt;br /&gt;find/defs.h   |    1 +&lt;br /&gt;find/parser.c |   22 ++++++++++++++++++++++&lt;br /&gt;find/pred.c   |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;find/tree.c   |    1 +&lt;br /&gt;4 files changed, 76 insertions(+)&lt;br /&gt;&lt;br /&gt;&lt;span class="gh"&gt;Index: findutils-4.5.2/find/defs.h&lt;/span&gt;&lt;br /&gt;&lt;span class="gh"&gt;===================================================================&lt;/span&gt;&lt;br /&gt;&lt;span class="gd"&gt;--- findutils-4.5.2.orig/find/defs.h&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+++ findutils-4.5.2/find/defs.h&lt;/span&gt;&lt;br /&gt;&lt;span class="gu"&gt;@@ -411,6 +411,7 @@ PREDICATEFUNCTION pred_cnewer;&lt;/span&gt;&lt;br /&gt;PREDICATEFUNCTION pred_comma;&lt;br /&gt;PREDICATEFUNCTION pred_ctime;&lt;br /&gt;PREDICATEFUNCTION pred_delete;&lt;br /&gt;&lt;span class="gi"&gt;+PREDICATEFUNCTION pred_cat;&lt;/span&gt;&lt;br /&gt;PREDICATEFUNCTION pred_empty;&lt;br /&gt;PREDICATEFUNCTION pred_exec;&lt;br /&gt;PREDICATEFUNCTION pred_execdir;&lt;br /&gt;&lt;span class="gh"&gt;Index: findutils-4.5.2/find/parser.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gh"&gt;===================================================================&lt;/span&gt;&lt;br /&gt;&lt;span class="gd"&gt;--- findutils-4.5.2.orig/find/parser.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+++ findutils-4.5.2/find/parser.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gu"&gt;@@ -91,6 +91,7 @@ static boolean parse_cnewer        PARAM&lt;/span&gt;&lt;br /&gt;static boolean parse_comma         PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));&lt;br /&gt;static boolean parse_daystart      PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));&lt;br /&gt;static boolean parse_delete        PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));&lt;br /&gt;&lt;span class="gi"&gt;+static boolean parse_cat           PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));&lt;/span&gt;&lt;br /&gt;static boolean parse_d             PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));&lt;br /&gt;static boolean parse_depth         PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));&lt;br /&gt;static boolean parse_empty         PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));&lt;br /&gt;&lt;span class="gu"&gt;@@ -253,6 +254,7 @@ static struct parser_table const parse_t&lt;/span&gt;&lt;br /&gt;{ARG_TEST,       "ctime",                  parse_time, pred_ctime}, /* POSIX */&lt;br /&gt;PARSE_POSOPT     ("daystart",              daystart),      /* GNU */&lt;br /&gt;PARSE_ACTION     ("delete",                delete), /* GNU, Mac OS, FreeBSD */&lt;br /&gt;&lt;span class="gi"&gt;+  PARSE_ACTION     ("cat",                   cat), /* GNU */&lt;/span&gt;&lt;br /&gt;PARSE_OPTION     ("d",                     d), /* Mac OS X, FreeBSD, NetBSD, OpenBSD, but deprecated  in favour of -depth */&lt;br /&gt;PARSE_OPTION     ("depth",                 depth), /* POSIX */&lt;br /&gt;PARSE_TEST       ("empty",                 empty),      /* GNU */&lt;br /&gt;&lt;span class="gu"&gt;@@ -801,6 +803,26 @@ parse_delete (const struct parser_table*&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;static boolean&lt;br /&gt;&lt;span class="gi"&gt;+parse_cat (const struct parser_table* entry, char *argv[], int *arg_ptr)&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+{&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  struct predicate *our_pred;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  (void) argv;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  (void) arg_ptr;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  our_pred = insert_primary (entry);&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  our_pred-&gt;side_effects = our_pred-&gt;no_default_print = true;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  our_pred-&gt;need_stat = our_pred-&gt;need_type = false;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  our_pred-&gt;est_success_rate = 1.0f;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  open_stdout(&amp;amp;our_pred-&gt;args.printf_vec);&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#ifdef DEBUG&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  fprintf(stderr, "%s(%s:%d) called.\n", __func__, __FILE__, __LINE__);&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#endif&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  return true;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+}&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+static boolean&lt;/span&gt;&lt;br /&gt;parse_depth (const struct parser_table* entry, char **argv, int *arg_ptr)&lt;br /&gt;{&lt;br /&gt;(void) entry;&lt;br /&gt;&lt;span class="gh"&gt;Index: findutils-4.5.2/find/pred.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gh"&gt;===================================================================&lt;/span&gt;&lt;br /&gt;&lt;span class="gd"&gt;--- findutils-4.5.2.orig/find/pred.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+++ findutils-4.5.2/find/pred.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gu"&gt;@@ -445,6 +445,58 @@ pred_delete (const char *pathname, struc&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;boolean&lt;br /&gt;&lt;span class="gi"&gt;+pred_cat (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+{&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  FILE * stream = pred_ptr-&gt;args.printf_vec.stream;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  FILE * input_stream;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  char buf[BUFSIZ];&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  int fd;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  size_t read_len;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  (void) pred_ptr;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  (void) stat_buf;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#ifdef DEBUG&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  fprintf(stderr, "%s(%s:%d) called.\n", __func__, __FILE__, __LINE__);&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#endif&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  if ((fd = openat(state.cwd_dir_fd, state.rel_pathname, O_RDONLY&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#if defined O_LARGEFILE&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      |O_LARGEFILE&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#endif&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+     )) &lt;&gt;&lt;br /&gt;&lt;span class="gi"&gt;+    {&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      error (0, errno, "%s", safely_quote_err_filename(0, pathname));&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      state.exit_status = 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      return false;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+    }&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  input_stream = fdopen(fd, "r");&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  if (input_stream == NULL)&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+    {&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      error (0, errno, "%s", safely_quote_err_filename(0, pathname));&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      state.exit_status = 1;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      return false;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+    }&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  while ((read_len = fread(buf, 1, sizeof buf, input_stream)) &gt; 0)&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+    {&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#ifdef DEBUG&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      fprintf(stderr, "%s(%s:%d): read_len = %d, stream = %p\n",&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+   __func__, __FILE__, __LINE__, read_len, stream);&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#endif&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      fwrite(buf, 1, read_len, stream);&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+      if (read_len &lt;&gt;&lt;br /&gt;&lt;span class="gi"&gt;+ break;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+    }&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  fclose(input_stream);&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+  return true;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+}&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+boolean&lt;/span&gt;&lt;br /&gt;pred_empty (const char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)&lt;br /&gt;{&lt;br /&gt;(void) pathname;&lt;br /&gt;&lt;span class="gh"&gt;Index: findutils-4.5.2/find/tree.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gh"&gt;===================================================================&lt;/span&gt;&lt;br /&gt;&lt;span class="gd"&gt;--- findutils-4.5.2.orig/find/tree.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+++ findutils-4.5.2/find/tree.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gu"&gt;@@ -906,6 +906,7 @@ static struct pred_cost_lookup costlooku&lt;/span&gt;&lt;br /&gt;{ pred_comma     ,  NeedsNothing,        },&lt;br /&gt;{ pred_ctime     ,  NeedsStatInfo,       },&lt;br /&gt;{ pred_delete    ,  NeedsSyncDiskHit     },&lt;br /&gt;&lt;span class="gi"&gt;+    { pred_cat       ,  NeedsNothing         },&lt;/span&gt;&lt;br /&gt;{ pred_empty     ,  NeedsStatInfo        },&lt;br /&gt;{ pred_exec      ,  NeedsEventualExec    },&lt;br /&gt;{ pred_execdir   ,  NeedsEventualExec    },&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/52714/plain/" class="pturl"&gt;Download as text&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;参看这个帖子&lt;a href="http://www.openbsdonly.org/viewtopic.php?f=16&amp;amp;t=14"&gt;来个实用的：查看文件链接&lt;/a&gt;，回复find命令的人是我：有人需要一些shell功能，想到了用python去写，想法不错，却没想到的是，那一段的python代码只对应了一行find命令。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-7114828055969946020?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7114828055969946020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7114828055969946020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7114828055969946020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7114828055969946020'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/10/find-action.html' title='再说find action，提高终端下的工作效率'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-5614755159733039775</id><published>2008-09-22T02:35:00.004-07:00</published><updated>2008-09-22T03:01:43.179-07:00</updated><title type='text'>KS2008与LPC2008刚结束</title><content type='html'>著名黑客GregKroahHartman在这个会上对Ubuntu幕后的Canonical公司的不贡献进行了猛烈的批评：&lt;br /&gt;&lt;br /&gt;Canonical的内核开发者在过去三年，从2.6.19到2.6.27-rc5之间，只向内核提交了约100个补丁！(与我在过去两年内做的差不多~)&lt;br /&gt;&lt;br /&gt;作为对比，Greg也同样列出了各大Distro的数据：&lt;br /&gt;&lt;br /&gt;RedHat排名第二，Novell排名第五，Mandriva是第45，Canonical是第81，&lt;br /&gt;&lt;br /&gt;而社区发行版中，Debian和Gentoo分别排名第41和第49，&lt;br /&gt;&lt;br /&gt;其实，早在上半年JonathonCorbet就以&lt;a href="http://lwn.net/Articles/294542/"&gt;LWN文章&lt;/a&gt;提出了对Canonical的批评，但这次Greg的这次更猛烈的批评则是第一次将问题的严重性推向聚光灯下：&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.heise-online.co.uk/open/Kernel-Log-The-second-day-of-Kernel-Summit-2008-criticism-of-Ubuntu-at-the-opening-of-the-Linux-Pl--/news/111571"&gt;Kernel Log: The second day of Kernel Summit 2008; criticism of Ubuntu at the opening of the Linux Plumbers Conference&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.kroah.com/log/linux/lpc_2008_keynote.html"&gt; &lt;div class="date"&gt;Linux Plumbers Conference 2008 Keynote&lt;/div&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;a href="http://www.kroah.com/log/linux/lpc_2008_keynote.html"&gt; &lt;/a&gt;  &lt;br /&gt;说到这个排名，可能有人对更为神秘的第一名感兴趣，那么，这个神秘的能够超越RedHat的第一名究竟是谁呢？&lt;br /&gt;&lt;br /&gt;那就是我们伟大的Amateurs(业余爱好者)！Kernel的发展自始至现在仍然保持着平民化的Amateurs为主导的发展！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-5614755159733039775?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/5614755159733039775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=5614755159733039775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5614755159733039775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/5614755159733039775'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/09/ks2008lpc2008.html' title='KS2008与LPC2008刚结束'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2799093923753227861</id><published>2008-09-02T10:58:00.003-07:00</published><updated>2008-09-02T11:41:51.715-07:00</updated><title type='text'>manually upgrade x11-drivers/nvidia-drivers</title><content type='html'>Upgrade kernel to v2.6.27-rc5,  x11-drivers/nvidia-drivers have not support so late kernel,&lt;br /&gt;&lt;br /&gt;So let's upgrade it manually:&lt;br /&gt;&lt;br /&gt;http://paste.ubuntu.com/42782/&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="gh"&gt;Index: NVIDIA-Linux-x86-173.14.12-pkg0/usr/src/nv/nv-linux.h&lt;/span&gt;&lt;br /&gt;&lt;span class="gh"&gt;===================================================================&lt;/span&gt;&lt;br /&gt;&lt;span class="gd"&gt;--- NVIDIA-Linux-x86-173.14.12-pkg0.orig/usr/src/nv/nv-linux.h&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+++ NVIDIA-Linux-x86-173.14.12-pkg0/usr/src/nv/nv-linux.h&lt;/span&gt;&lt;br /&gt;&lt;span class="gu"&gt;@@ -77,6 +77,7 @@&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#if !defined(KERNEL_2_4)&lt;br /&gt;#include &amp;lt;linux/sched.h&amp;gt;            /* suser(), capable() replacement   */&lt;br /&gt;&lt;span class="gi"&gt;+#include &amp;lt;linux/pid.h&amp;gt;              /* for find_pid  */&lt;/span&gt;&lt;br /&gt;#include &amp;lt;linux/moduleparam.h&amp;gt;      /* module_param()                   */&lt;br /&gt;#include &amp;lt;linux/smp_lock.h&amp;gt;         /* kernel_locked                    */&lt;br /&gt;#include &amp;lt;asm/tlbflush.h&amp;gt;           /* flush_tlb(), flush_tlb_all()     */&lt;br /&gt;&lt;br /&gt;&lt;span class="gu"&gt;@@ -104,7 +105,7 @@&lt;/span&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#include &amp;lt;linux/spinlock.h&amp;gt;&lt;br /&gt;&lt;span class="gd"&gt;-#include &amp;lt;asm/semaphore.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+#include &amp;lt;linux/semaphore.h&amp;gt;&lt;/span&gt;&lt;br /&gt;#include &amp;lt;linux/completion.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/highmem.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="gh"&gt;Index: NVIDIA-Linux-x86-173.14.12-pkg0/usr/src/nv/os-interface.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gh"&gt;===================================================================&lt;/span&gt;&lt;br /&gt;&lt;span class="gd"&gt;--- NVIDIA-Linux-x86-173.14.12-pkg0.orig/usr/src/nv/os-interface.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+++ NVIDIA-Linux-x86-173.14.12-pkg0/usr/src/nv/os-interface.c&lt;/span&gt;&lt;br /&gt;&lt;span class="gu"&gt;@@ -704,7 +704,7 @@ RM_STATUS NV_API_CALL os_kill_process(&lt;/span&gt;&lt;br /&gt;    U032 sig&lt;br /&gt;)&lt;br /&gt;{&lt;br /&gt;&lt;span class="gd"&gt;-    return kill_proc(pid, sig, 1) ? RM_ERR_OPERATING_SYSTEM : RM_OK;&lt;/span&gt;&lt;br /&gt;&lt;span class="gi"&gt;+    return kill_pid(find_vpid(pid), sig, 1) ? RM_ERR_OPERATING_SYSTEM : RM_OK;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*******************************************************************************/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;this patch also reflects some changes in 2.6.27:&lt;br /&gt;1. asm/semaphore.h =&gt; linux/semaphore.h stands a common implementation in all arch;&lt;br /&gt;2. kill_proc =&gt; kill_pid&lt;br /&gt;&lt;br /&gt;But there's still a problem haven't been resolved, it reports license issues in modpost phase:&lt;br /&gt;1. kill_pid is exported with EXPORT_SYMBOL_GPL, can be used only by GPL code;&lt;br /&gt;2. nvidia.ko is licensed with "NVIDIA", not GPL;&lt;br /&gt;&lt;br /&gt;# cd /var/tmp/portage/x11-drivers/nvidia-drivers-173.14.12/work/NVIDIA-Linux-x86-173.14.12-pkg0/usr/src/nv/&lt;br /&gt;&lt;br /&gt;# make -C /usr/src/linux-2.6.27-rc5/ M=$PWD modules&lt;br /&gt;&lt;br /&gt;the core functionality of nvidia.ko is hidden in nv-kernel.o, that's completely binary, there's no corespoding nv-kernel.c, results of `strings` told that the license is declared in this binary file;&lt;br /&gt;&lt;br /&gt;the last killer approach is hexeditor! use it to hexedit the string to "GPL\0", compiling well, insmod well, all runs OK!&lt;br /&gt;&lt;br /&gt;Hexediting is an ugly hack, hope my next machine can run toally under free operating system, no hidden binary anymore!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-2799093923753227861?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2799093923753227861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2799093923753227861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2799093923753227861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2799093923753227861'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/09/manually-upgrade-x11-driversnvidia.html' title='manually upgrade x11-drivers/nvidia-drivers'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-4396581062433870770</id><published>2008-08-29T11:07:00.007-07:00</published><updated>2008-08-29T12:55:24.075-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system load'/><title type='text'>monitor the system totally with dstat</title><content type='html'>You must have ever monitored the system with different tools:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"vmstat 2" to get a total system "proc,mem,swap,io,sys,cpu" load;&lt;/li&gt;&lt;li&gt;"iostat 2" to get all block devices with seperated I/O bandwidth data;&lt;/li&gt;&lt;li&gt;"ifstat 2" to get different network interfaces network activity;&lt;/li&gt;&lt;li&gt;"top" to get the most CPU-consuming processes;&lt;/li&gt;&lt;/ol&gt;Now you can do all these things within dstat:&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;gektop@tux ~ 0 $ dstat -M proc,cpu,mem,sys,page,net,disk,topcpu,topmem,topio,topbio 5&lt;br /&gt;---procs--- ----total-cpu-usage---- ------memory-usage----- ---system-- ---paging-- -net/total- -dsk/total- -most-expensive- -most-expensive- ----most-expensive---- ----most-expensive----&lt;br /&gt;run blk new|usr sys idl wai hiq siq| used  buff  cach  free| int   csw |  in   out | recv  send| read  writ|  cpu process   | memory process |     i/o process      |  block i/o process&lt;br /&gt;0   0   6| 39   9  37  14   0   1| 272M   25M  193M   12M| 760  2178 |   0    21B|   0     0 |5577k 1645k|firefox       10|firefox     125M|mount.ntfs-  10M:8223k|mount.ntfs-2699k: 736k&lt;br /&gt;3   0   8| 93   6   0   0   0   1| 252M   25M  189M   37M| 546   980 |   0     0 |3197B  564B| 109k  675k|firefox       15|firefox     125M|mount.ntfs- 771k:3056B|pdflush       0 :  82k&lt;br /&gt;3   0  71| 77  16   0   7   0   1| 257M   26M  191M   29M| 548  1247 |   0     0 |5445B  689B| 230k  544k|firefox       13|firefox     125M|mount.ntfs- 771k:3056B|pdflush       0 :  94k&lt;br /&gt;2   0  24| 85  14   0   1   0   0| 251M   26M  192M   33M| 550  1046 |   0     0 |1173B  418B|  50k  344k|firefox       12|firefox     125M|mount.ntfs- 771k:3056B|pdflush       0 :  85k&lt;br /&gt;2   0  25| 85  12   0   2   0   0| 275M   26M  194M 8044k| 517  1024 |   0     0 |1206B  448B| 104k  642k|cc1           22|firefox     125M|mount.ntfs- 771k:3056B|pdflush       0 :  47k&lt;br /&gt;2   0   9| 88   9   0   2   0   1| 278M   26M  193M 5568k| 558  1056 |   0     0 |1383B  615B| 110k  451k|cc1           26|firefox     125M|mount.ntfs- 771k:3056B|pdflush       0 :  51k&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;The meanings of "proc,cpu,mem,sys,page,net,disk,topcpu,topmem,topio,topbio" is obvious, it speaks for itself, the design of dstat is all modular, you can use many other modules than this:&lt;br /&gt;&lt;pre&gt;$ (cd /usr/share/dstat/; ls *.py)&lt;br /&gt;dstat_battery.py    dstat_gpfs.py           dstat_mysql5_com.py   dstat_mysql_keys.py  dstat_postfix.py   dstat_thermal.py  dstat_topoom.py  dstat_vzcpu.py&lt;br /&gt;dstat_cpufreq.py    dstat_helloworld.py     dstat_mysql5_conn.py  dstat_nfs3op.py      dstat.py           dstat_topbio.py   dstat_utmp.py    dstat_vzubc.py&lt;br /&gt;dstat_dbus.py       dstat_innodb_buffer.py  dstat_mysql5_io.py    dstat_nfs3.py        dstat_rpcd.py      dstat_topcpu.py   dstat_vmkhba.py  dstat_wifi.py&lt;br /&gt;dstat_freespace.py  dstat_innodb_io.py      dstat_mysql5_keys.py  dstat_nfsd3op.py     dstat_rpc.py       dstat_topio.py    dstat_vmkint.py&lt;br /&gt;dstat_gpfsop.py     dstat_innodb_ops.py     dstat_mysql_io.py     dstat_nfsd3.py       dstat_sendmail.py  dstat_topmem.py   dstat_vmknic.py&lt;/pre&gt;So with "dstat -M battery 5", you can get the most battery consuming components when hardware supports ACPI.&lt;br /&gt;&lt;br /&gt;Its module is just a simple py file with a simple class derived from dstat, so if there's no one fit for you, you can write your own dstat module.&lt;br /&gt;&lt;br /&gt;Note: only CLI-based utils discussed here, I know there are many GUI-based or graph-generating tools can do better graphics, but on ther server side, "&lt;pre&gt;&lt;blockquote&gt;Simple is better than complex.&lt;/blockquote&gt;"&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-4396581062433870770?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/4396581062433870770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=4396581062433870770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4396581062433870770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4396581062433870770'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/08/monitor-system-totally-with-dstat.html' title='monitor the system totally with dstat'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2396266255683996801</id><published>2008-08-09T02:45:00.002-07:00</published><updated>2008-08-09T02:51:41.442-07:00</updated><title type='text'>(setq cscope-do-not-update-database t)</title><content type='html'>if you use the kernel kbuild system `make mrproper cscope` with its cscope databases index files, use this to tell cscope not to update every time:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(setq cscope-do-not-update-database t)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-2396266255683996801?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2396266255683996801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2396266255683996801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2396266255683996801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2396266255683996801'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/08/setq-cscope-do-not-update-database-t.html' title='(setq cscope-do-not-update-database t)'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-6894151208852691724</id><published>2008-07-13T10:12:00.005-07:00</published><updated>2008-07-13T10:53:23.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><title type='text'>some most useful bash features</title><content type='html'>edit-and-execute-command (C-xC-e)&lt;br /&gt;            Invoke  an  editor  on  the current command line, and execute the result as shell com‐&lt;br /&gt;            mands.  Bash attempts to invoke $FCEDIT, $EDITOR, and emacs as  the  editor,  in  that&lt;br /&gt;            order.&lt;br /&gt;&lt;br /&gt;     insert-completions (M-*)&lt;br /&gt;            Insert all completions of the text before point that would have been generated by pos‐&lt;br /&gt;            sible-completions.&lt;br /&gt;&lt;br /&gt;     complete-into-braces (M-{)&lt;br /&gt;            Perform filename completion and insert  the  list  of  possible  completions  enclosed&lt;br /&gt;            within braces so the list is available to the shell (see Brace Expansion above).&lt;br /&gt;&lt;br /&gt;     insert-comment (M-#)&lt;br /&gt;            Without  a  numeric  argument,  the  value  of  the readline comment-begin variable is&lt;br /&gt;            inserted at the beginning of the current line.  If a  numeric  argument  is  supplied,&lt;br /&gt;            this  command acts as a toggle:  if the characters at the beginning of the line do not&lt;br /&gt;            match the value of comment-begin, the value is inserted, otherwise the  characters  in&lt;br /&gt;            comment-begin are deleted from the beginning of the line.  In either case, the line is&lt;br /&gt;            accepted as if a newline had been typed.  The default value  of  comment-begin  causes&lt;br /&gt;            this  command  to make the current line a shell comment.  If a numeric argument causes&lt;br /&gt;            the comment character to be removed, the line will be executed by the shell.&lt;br /&gt;&lt;br /&gt; Keyboard Macros&lt;br /&gt;     start-kbd-macro (C-x ()&lt;br /&gt;            Begin saving the characters typed into the current keyboard macro.&lt;br /&gt;     end-kbd-macro (C-x ))&lt;br /&gt;            Stop saving the characters typed into the current keyboard macro and store the defini‐&lt;br /&gt;            tion.&lt;br /&gt;     call-last-kbd-macro (C-x e)&lt;br /&gt;            Re-execute the last keyboard macro defined, by making  the  characters  in  the  macro&lt;br /&gt;            appear as if typed at the keyboard.&lt;br /&gt;&lt;br /&gt;     display-shell-version (C-x C-v)&lt;br /&gt;            Display version information about the current instance of bash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-6894151208852691724?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/6894151208852691724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=6894151208852691724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6894151208852691724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6894151208852691724'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/07/some-most-useful-bash-features.html' title='some most useful bash features'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-4609826510375149265</id><published>2008-07-11T19:25:00.011-07:00</published><updated>2008-07-13T11:28:10.487-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ptrace'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='syscall'/><title type='text'>HOWTO ptrace a multi-process programs?</title><content type='html'>&lt;blockquote&gt;HOWTO-ptrace-multi-process-programs?&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;&lt;dt&gt;References:&lt;/dt&gt;&lt;dd&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.linuxjournal.com/article/6100"&gt;Playing with ptrace, Part I (LinuxJournal)&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.linuxjournal.com/article/6210"&gt;Playing with ptrace, Part II (LinuxJournal)&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.linux.org.tw/%7Ejserv/archives/002027.html"&gt;以 ptrace 系統呼叫來追蹤/修改行程 (JservBlog)&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-4609826510375149265?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/4609826510375149265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=4609826510375149265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4609826510375149265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/4609826510375149265'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/07/howto-ptrace-multi-process-programs.html' title='HOWTO ptrace a multi-process programs?'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7814252606515527558</id><published>2008-07-11T11:14:00.003-07:00</published><updated>2008-07-11T11:19:22.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curl'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='paste'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>one line curl paste</title><content type='html'>&lt;p&gt;Recently an utility named wgetpaste run into my field, but after coming across it, I found it was really a shell script, it just organizes arguments and transfer to wget, in use of post mode of wget,&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ head -n1 /usr/bin/wgetpaste&lt;br /&gt;#!/bin/sh&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In fact, I found that curl is better at this job, when I post some code to a paste service, just one curl command is enough:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ curl -d poster=chengrq -d syntax=c --data-urlencoded content@file.c \&lt;br /&gt;  http://paste.ubuntu.com&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And, if you would like to read from a pipe other than a file, you could use '-' to replace the filename, it always did like what you think of that!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;BTW, ubuntu did a good job on the paste service, supporting many syntax highting.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-7814252606515527558?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7814252606515527558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7814252606515527558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7814252606515527558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7814252606515527558'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/07/one-line-curl-paste.html' title='one line curl paste'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-2142019063818081857</id><published>2008-07-11T03:39:00.009-07:00</published><updated>2008-07-11T10:42:32.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='getopt'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='undocumented'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>undocumented getopt</title><content type='html'>&lt;p&gt;首先说说getopt的规则用法，查看相关手册：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;$ man 3 getopt:&lt;br /&gt;&lt;br /&gt;&lt;div class="paste"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;getopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;br /&gt;          &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;optstring&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;optarg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opterr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;optopt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="cp"&gt;#define _GNU_SOURCE&lt;/span&gt;&lt;br /&gt;&lt;span class="cp"&gt;#include &amp;lt;getopt.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;getopt_long&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;br /&gt;          &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;optstring&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;          &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;option&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;longopts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;longindex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;getopt_long_only&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;br /&gt;          &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;optstring&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;          &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;option&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;longopts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;longindex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;这一段是说只需要包含了unistd.h头文件就可以使用getopt了，它的函数原型使用argc,argv,optstring这三个参数；而如果需要使用GNU的扩展函数getopt_long，则还需要包含头文件getopt.h，并且在头文件之前定义_GNU_SOURCE宏，可以在C源文件中包含getopt.h之前直接define，而我一般是在Makefile里面写在CFLAGS上直接传参数给gcc；&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;于是具体的编译命令是&lt;pre&gt;gcc -Wall -D_GNU_SOURCE filename.c&lt;/pre&gt;这样如果大型项目使用了多个C文件则不必在每一个C文件中都写上&lt;em&gt;define _GNU_SOURCE&lt;/em&gt;，只在Makefile写一次，减少了总体字节数。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;将其中的例子取出来测试：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="paste"&gt;&lt;br /&gt;&lt;a class="pturl" href="http://paste.ubuntu.com/26565/plain/"&gt;Download as text&lt;/a&gt;&lt;br /&gt;&lt;div class="paste"&gt;&lt;br /&gt;&lt;table class="pastetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt; 1&lt;br /&gt; 2&lt;br /&gt; 3&lt;br /&gt; 4&lt;br /&gt; 5&lt;br /&gt; 6&lt;br /&gt; 7&lt;br /&gt; 8&lt;br /&gt; 9&lt;br /&gt;&lt;span class="special"&gt;10&lt;/span&gt;&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;&lt;span class="special"&gt;20&lt;/span&gt;&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;&lt;span class="special"&gt;30&lt;/span&gt;&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;&lt;span class="special"&gt;40&lt;/span&gt;&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="paste"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="cp"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="cp"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;nsecs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tfnd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="n"&gt;nsecs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="n"&gt;tfnd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;nt:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;n&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;t&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;nsecs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;atoi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;optarg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;tfnd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c"&gt;/* ? */&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Usage: %s [-t nsecs] [-n] name&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;      &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span class="p"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;flags=%d; tfnd=%d; optind=%d, nsecs=%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;          &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tfnd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nsecs&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Expected argument after options&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;name argument = %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;optind&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="c"&gt;/* Other code omitted */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EXIT_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a class="pturl" href="http://paste.ubuntu.com/26565/plain/"&gt;Download as text&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;编译和运行：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="paste"&gt;&lt;pre&gt;$ gcc -Wall opt1.c&lt;br /&gt;$ ./a.out -t 3 -n arg1 -t 4 arg2&lt;br /&gt;flags=1; tfnd=1; optind=6, nsecs=4&lt;br /&gt;name argument = arg1&lt;br /&gt;name argument = arg2&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;可见：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;同一个参数指定多项时以最后一项指定生效，(-t4覆盖了-t3选项值);&lt;/li&gt;&lt;br /&gt;&lt;li&gt;最后多作的参数可以使用optind索引开始访问，getopt在调用过程中对argv字符串数组进行了permute，把所有非option的argument都移到最后去了；&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;那么如果需要一个非option的argument参数并且是以"-"开头的，怎么输入？&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;manual附带提到了一点，可以使用"--"来关闭option扫描：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="paste"&gt;&lt;pre&gt;$ ./a.out -t 3 -n arg1 -t 4 arg2 -- -t 6 --new null&lt;br /&gt;flags=1; tfnd=1; optind=7, nsecs=4&lt;br /&gt;name argument = arg1&lt;br /&gt;name argument = arg2&lt;br /&gt;name argument = -t&lt;br /&gt;name argument = 6&lt;br /&gt;name argument = --new&lt;br /&gt;name argument = null&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;在这次运行中，"-t 6"已经不被看作是option，而是作为多余的argument交给了程序。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;然后来说说optarg,optind,optopt,opterr的用途：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;optarg作为后接":"字符的option对应所需要的参数；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;optind是getopt处理完成(返回EOF表示完成)之后argument的位置，罽getopt只对argv数组重排序，不改变argc的大小，因此从optind到argc循环便可得所有非option参数；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;optopt和opterr都是用于处理用户输入未定义的option字符的情况，此时getopt返回'?'字符，将用户输入的真实的option放在optopt，并且自动向stderr打印一条错误消息，如"invalid option -- h"，如果不想要这个错误提示可以预先设置opterr为0可关闭这个错误提示；&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;手册中还详细介绍了optstring的用法：&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;单个的字符是开关量；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;单个字符后接":"则意味着需要参数，在getopt调用后这个参数会被放入optarg这个全局量中；&lt;/ll&gt;&lt;br /&gt;&lt;li&gt;如果接上两个冒号"::"，则意味着参数是可选的，如"f::"对应输入"-ffoo"时，optarg获得"foo"，而"-f foo"则optarg获得NULL，"foo"被计入argument部分；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;如果optstring以"+"开头，则getopt停止于第一个非option处，如"-t 3 -n arg1 -t 4 arg2"会停止于"arg1"处将从它开始的"arg1 -t 4 arg2"都自动作为argument；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;如果optstring以"-"开头，则getopt会将所有非option项(即argument)都以optiont为1处理(注意是数字1不是字符'1')，将其argument作为optarg；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;optstring中在前缀"+"或"-"后的第一个字符如果是':'冒号，则对未识别的option字符返回':'冒号而不是'?'，参见optopt和opterr描述；&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;以上部分都是手册里面提到过的正常的使用getopt，下面是一段在实用过程中发现的getopt的undocumented特性：&lt;/p&gt;&lt;br /&gt;&lt;p&gt;有一个程序需要对getopt作多次循环调用：&lt;br/&gt;&lt;br /&gt;一般的getopt对argc,argv调用返回了所有参数后，在最后一次返回EOF表示argv数组已处理完，这里我将它称为一轮getopt循环调用；&lt;br/&gt;&lt;br /&gt;多次循环调用指的定在一次循环调用之后如何在程序里继续使用getopt处理其它的argc,argv？&lt;/p&gt;&lt;br /&gt;&lt;p&gt;可能有人说，对新的argc,argv直接调用getopt就是了，～～～，其实不然：&lt;br/&gt;&lt;br /&gt;&lt;span&gt;getopt能够循环调用的原理是它在内部使用了静态变量，保存了对argc,argv操作的状态，当第一轮getopt处理完时，这些内部的静态变量已记录处理到argc,argv到最后；因此如果直接使用getopt对新的argc,argv组进入调用时，会发现其根本不工作，直接返回EOF；&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;于是有必要对getopt的内部原理作一番研究，已知它是标准C库提供的函数，于是找到glibc：&lt;pre&gt;apt-get source glibc&lt;/pre&gt;或者&lt;pre&gt;ebuild /usr/portage/sys-libs/glibc/glibc-x.x.ebuild unpack&lt;/pre&gt;取得源代码，找到实现这个库函数的posix/getopt.c文件，这里将它上传到了&lt;a href="http://paste.ubuntu.com/26641/"&gt;paste&lt;/a&gt;，分析其中初始化这些静态变量可以发现规律是：&lt;br/&gt;&lt;br /&gt;它会根据optind的值进行初始化(406行，1133行)；&lt;br/&gt;&lt;br /&gt;调用顺序及相关数据结构是：&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;static struct _getopt_data getopt_data;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;getopt (int argc, char *const *argv, const char *optstring)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;_getopt_internal (int argc, char *const *argv, const char *optstring,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  getopt_data.optind = optind;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; _getopt_internal_r (int argc, char *const *argv, const char *optstring,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  if (d-&amp;gt;optind == 0 || !d-&amp;gt;__initialized)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;      optstring = _getopt_initialize (argc, argv, optstring, d);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;至此可知在d-&amp;gt;optind为0或者d-&amp;gt;__initialized为假的情况下会调用_getopt_initialize重新初始化；而调用_getopt_internal_r传入的d指针参数始终是&amp;getopt_data，这是一个模块级全局变量(即static全局变量)，在C库的此文件之外不可见，因此无法以直接的getopt_data.optind方式设置它；但从前面的调用路径可知d-&amp;gt;optind每次都从全局变量optind初始化；因此我们可以设置optind为0然后再调用getopt让传入的d-&amp;gt;optind为0使_getopt_initialize再一次被调用，让它从新初始化getopt所使用的内部静态变量(即getopt_data)，达到可以重新一轮调用getopt的目的；&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;于是程序中，需要新一轮调用getopt之前作一次&lt;pre&gt;optind=0;&lt;/pre&gt;的设置，于是getopt继续工作！&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;总结起来：&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;getopt(3)手册中中提到了optarg,optind,optopt的输出(out类型参数)作用，即对用户程序是只读的，在getopt调用之后从它们可以读到一些信息；而opterr是只写(in类型参数)的，须在getopt调用之前进行设置为0或1，getopt函数实现中不改变opterr，而只根据opterr值有一些不同的行为；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;通过对C库中的getopt函数实现的阅读可以了解到：optind还可以作为输入(in类型)参数，在getopt调用之前将optind置0可以使得getopt函数内部重新初始化；&lt;/li&gt;&lt;br /&gt;&lt;li&gt;getopt.c:114行对optind的注释中提到"zero means the first call"，而手册(manual)中未提到optind的in参数功能。&lt;/li&gt;&lt;br /&gt;&lt;/ol&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/6655852-2142019063818081857?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/2142019063818081857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=2142019063818081857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2142019063818081857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/2142019063818081857'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/07/undocumented-getopt.html' title='undocumented getopt'/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-6911620638823543989</id><published>2008-03-29T05:23:00.000-07:00</published><updated>2008-03-29T05:46:54.231-07:00</updated><title type='text'></title><content type='html'>I'm back again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-6911620638823543989?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/6911620638823543989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=6911620638823543989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6911620638823543989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6911620638823543989'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2008/03/im-back-again.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-7216697085424085040</id><published>2007-03-21T05:33:00.000-07:00</published><updated>2007-03-21T05:35:16.698-07:00</updated><title type='text'></title><content type='html'>&lt;pre&gt;&lt;br /&gt;  var d = {&lt;br /&gt;    pre: 'file',&lt;br /&gt;    exit: function() {&lt;br /&gt;      return false;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  for (i in d) {&lt;br /&gt;    document.writeln("attr:" + i + d[i]);&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/6655852-7216697085424085040?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/7216697085424085040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=7216697085424085040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7216697085424085040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/7216697085424085040'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2007/03/var-d-pre-file-exit-function-return.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-6149186774735593904</id><published>2007-03-21T05:30:00.000-07:00</published><updated>2007-03-21T05:33:11.695-07:00</updated><title type='text'></title><content type='html'>疏影横斜水清浅，暗香浮动月黄昏。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-6149186774735593904?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/6149186774735593904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=6149186774735593904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6149186774735593904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/6149186774735593904'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2007/03/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-3770157576233747038</id><published>2007-02-10T12:27:00.001-08:00</published><updated>2007-02-10T12:24:05.754-08:00</updated><title type='text'></title><content type='html'>为什么没有？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-3770157576233747038?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/3770157576233747038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=3770157576233747038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3770157576233747038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/3770157576233747038'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2007/02/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-117113879737808574</id><published>2007-02-10T12:15:00.000-08:00</published><updated>2007-02-10T12:19:57.390-08:00</updated><title type='text'></title><content type='html'>the pros and cons of Shanghai&lt;br /&gt;&lt;br /&gt;i lived in a long term in Shanghai, but there are many faults.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-117113879737808574?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/117113879737808574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=117113879737808574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/117113879737808574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/117113879737808574'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2007/02/pros-and-cons-of-shanghai-i-lived-in.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-115901108151873965</id><published>2006-09-23T04:29:00.000-07:00</published><updated>2006-09-23T04:31:47.773-07:00</updated><title type='text'></title><content type='html'>&lt;span style="font-weight:bold;"&gt;测试&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;测试&lt;/span&gt;&lt;br /&gt;测试&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-115901108151873965?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/115901108151873965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=115901108151873965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/115901108151873965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/115901108151873965'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2006/09/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-115529280423500017</id><published>2006-08-11T03:40:00.000-07:00</published><updated>2006-08-11T03:40:04.290-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.bsdlife.org/wiki/index.php/Arch_%E5%BA%94%E7%94%A8%E7%A4%BA%E4%BE%8B"&gt;Arch 应用示例 - Wiki.bsdlife.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-115529280423500017?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/115529280423500017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=115529280423500017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/115529280423500017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/115529280423500017'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2006/08/arch-wiki.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-113462321868365844</id><published>2005-12-14T21:06:00.000-08:00</published><updated>2005-12-14T21:06:58.686-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/4231/370/640/1-0-img41.jpg"&gt;&lt;img style="CLEAR: all; FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4231/370/320/1-0-img41.jpg" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href='http://picasa.google.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-113462321868365844?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/113462321868365844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=113462321868365844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/113462321868365844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/113462321868365844'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2005/12/blog-post_14.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-113427480174749817</id><published>2005-12-10T20:19:00.000-08:00</published><updated>2005-12-10T20:20:01.753-08:00</updated><title type='text'></title><content type='html'>上海聚会&lt;a href="http://photos1.blogger.com/blogger/4231/370/640/IMG_7389.jpg"&gt;&lt;img style="CLEAR: all; FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4231/370/320/IMG_7389.jpg" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href='http://picasa.google.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-113427480174749817?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/113427480174749817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=113427480174749817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/113427480174749817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/113427480174749817'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2005/12/blog-post_10.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-113427297431392251</id><published>2005-12-10T19:48:00.000-08:00</published><updated>2005-12-10T19:49:34.313-08:00</updated><title type='text'></title><content type='html'>人生自古谁无死，留取丹心照汗青。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-113427297431392251?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/113427297431392251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=113427297431392251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/113427297431392251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/113427297431392251'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2005/12/blog-post.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-107994145603866848</id><published>2004-03-21T23:43:00.000-08:00</published><updated>2008-07-10T19:00:55.141-07:00</updated><title type='text'></title><content type='html'>Created with something, a simple test!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-107994145603866848?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/107994145603866848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=107994145603866848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/107994145603866848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/107994145603866848'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2004/03/created-with-something-simple-test.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6655852.post-107994219711953024</id><published>2004-03-04T23:56:00.000-08:00</published><updated>2008-07-10T19:00:55.148-07:00</updated><title type='text'></title><content type='html'>It was the web page.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6655852-107994219711953024?l=blog.crquan.info' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.crquan.info/feeds/107994219711953024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6655852&amp;postID=107994219711953024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/107994219711953024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6655852/posts/default/107994219711953024'/><link rel='alternate' type='text/html' href='http://blog.crquan.info/2004/03/it-was-web-page.html' title=''/><author><name>Denis ChengRq</name><uri>http://www.blogger.com/profile/12881205487826302893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_fMgaoW35LIQ/SHgTNRc3QHI/AAAAAAAAAUg/U7WxzXibSo8/s1600-R/rms-icon.jpg'/></author><thr:total>0</thr:total></entry></feed>
