<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkUARnkzfCp7ImA9WhRaFE4.&quot;"><id>tag:blogger.com,1999:blog-8203140</id><updated>2012-02-16T15:17:27.784-08:00</updated><category term="随机算法" /><category term="rsync" /><category term="Indefero" /><category term="Coupon Collector" /><category term="C" /><category term="Probability" /><category term="String" /><category term="Kernel" /><category term="tbb" /><category term="Windows" /><category term="Wine" /><category term="Thrift" /><category term="colordiff" /><category term="Mathematica" /><category term="svn ignore" /><category term="iBus" /><category term="awk" /><category term="ppa" /><category term="PXE" /><category term="Yaml" /><category term="git" /><category term="Ansi Code" /><category term="Object-C" /><category term="Mac" /><category term="Quine" /><category term="中文" /><category term="minicom" /><category term="aspell" /><category term="数学" /><category term="ML" /><category term="wget" /><category term="Threading" /><category term="PDF" /><category term="Javascript" /><category term="Thunderbird" /><category term="硬币" /><category term="apt" /><category term="Foxmail" /><category term="diff" /><category term="Latex" /><category term="Proxy Server" /><category term="Json" /><category term="Firefox" /><category term="Pylab" /><category term="gedit" /><category term="Cantor Paring" /><category term="FUSE" /><category term="Lambda" /><category term="输入法" /><category term="Network Measurement" /><category term="TeX" /><category term="Qt" /><category term="network" /><category term="Ballot Problem" /><category term="MenuFont" /><category term="可变长参数" /><category term="encfs" /><category term="Intel" /><category term="svn" /><category term="gnuplot" /><category term="node.js" /><category term="Python" /><category term="cheating sheet" /><category term="Mame" /><category term="MapReduce" /><category term="home brew" /><category term="VirtualBox" /><category term="locale" /><category term="IRQ" /><category term="Timeout" /><category term="Prefetch" /><category term="Firefox Extension" /><category term="Y-Combinator" /><category term="gnome" /><category term="Type System" /><category term="C++" /><category term="Data Structure" /><category term="Shell" /><category term="pthread" /><category term="Makefile" /><category term="rubber" /><category term="CPU" /><category term="Chrome" /><category term="Xetex" /><category term="Hadoop" /><category term="Currying" /><category term="texmf tree" /><category term="port" /><category term="cmd" /><category term="算法" /><category term="Filesystem" /><category term="iPython" /><category term="driver" /><category term="debug" /><category term="screen" /><category term="emacs" /><category term="vi" /><category term="gdb" /><category term="杂" /><category term="OProfile" /><category term="PyQt" /><category term="MacOS" /><category term="Library" /><category term="ssh" /><category term="lisp" /><category term="Asymptote" /><category term="Java" /><category term="Search" /><category term="font" /><category term="字体" /><category term="组合数学" /><category term="windbg" /><category term="Squid" /><category term="perf" /><category term="eps" /><category term="gprof" /><category term="Linux" /><category term="环境变量" /><category term="SSD" /><category term="zsh" /><category term="Fireofx" /><category term="Cocoa" /><category term="Subprocess" /><category term="gcc" /><category term="CJK" /><category term="Ubuntu" /><category term="fstable" /><category term="gmail" /><category term="概率" /><category term="TRIM" /><title>Kids Return</title><subtitle type="html">所有内容未经说明都是原创。注明出处后欢迎转载。</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://apc999.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>155</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/KidsReturn" /><feedburner:info uri="kidsreturn" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DkMARnwyfSp7ImA9WhRbEUs.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-3570139160788423035</id><published>2012-02-01T22:01:00.000-08:00</published><updated>2012-02-01T22:34:07.295-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-01T22:34:07.295-08:00</app:edited><title>BCD</title><content type="html">You can change your BCD configuration (parameters used by bootmgr, boot applications, and winload) by BCDedit in command line or editing the registry (if not changeable by BCDedit)&lt;br /&gt;
&lt;br /&gt;
1 Show all entries in a BCD store
&lt;br /&gt;
&lt;pre class="code"&gt;bcdedit -enum all&lt;/pre&gt;
&lt;br /&gt;
2 Enable debug
&lt;br /&gt;
&lt;pre class="code"&gt;bcdedit -bootdebug {bootmgr} on  //enable debugging of Windows Boot Manager
bcdedit -bootdebug on            //enable debugging of boot loader
Bcdedit -debug on                //enable debugging of operating system&lt;/pre&gt;
&lt;br /&gt;
3 Enable bootlog (cause windows to write a log of the boot to %SystemRoot%\Ntbtlog.txt
In your VM, edit registry (HKLV\System\CurrentControlSet\Control\)
Change value of "SystemStartOptions"

4 Turn off driver verification
&lt;br /&gt;
&lt;pre class="code"&gt;bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING ON&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
configure for other BCD files&lt;br /&gt;
&lt;br /&gt;
(1) check the &lt;guid&gt; for "Windows Boot Loader"
&lt;/guid&gt;&lt;br /&gt;
&lt;pre class="code"&gt;bcdedit /store c:\winpe_amd64\ISO\boot\BCD -enum all&lt;/pre&gt;
(2) turn the debug option on (see output in WinDbg), &lt;guid&gt; is sth like {7619dcc8-fafe-11d9-b411-000476eba25f} in your "Windows Boot Loader" session
&lt;/guid&gt;&lt;br /&gt;
&lt;pre class="code"&gt;bcdedit /store c:\winpe_amd64\ISO\boot\BCD -set &lt;guid&gt; debug on&lt;/guid&gt;&lt;/pre&gt;
(3) turn the bootdebug option on (break in WinDbg during boot), &lt;guid&gt; is sth like {7619dcc8-fafe-11d9-b411-000476eba25f} in your "Windows Boot Loader" session
&lt;pre class="code"&gt;bcdedit /store c:\winpe_amd64\ISO\boot\BCD -set &lt;guid&gt; bootdebug on&lt;/guid&gt;&lt;/pre&gt;


Boot Options in Windows Vista and Later： http://msdn.microsoft.com/en-us/library/windows/hardware/ff542273(v=vs.85).aspx
BCD Boot Options Reference： http://msdn.microsoft.com/en-us/library/windows/hardware/ff542205(v=vs.85).aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-3570139160788423035?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8x69Rc91AVVZan4B-cba36YJQT0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8x69Rc91AVVZan4B-cba36YJQT0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8x69Rc91AVVZan4B-cba36YJQT0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8x69Rc91AVVZan4B-cba36YJQT0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/nSm-dsUec5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/3570139160788423035/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=3570139160788423035" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3570139160788423035?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3570139160788423035?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/nSm-dsUec5Q/bcd.html" title="BCD" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2012/02/bcd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MBQX89eCp7ImA9WhRbEE8.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-853202656761279266</id><published>2012-01-31T06:50:00.001-08:00</published><updated>2012-01-31T06:50:50.160-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T06:50:50.160-08:00</app:edited><title>MDL notes</title><content type="html">two very good references:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/windows/hardware/gg463193"&gt;http://msdn.microsoft.com/en-us/windows/hardware/gg463193&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.haogongju.net/art/1156109"&gt;http://www.haogongju.net/art/1156109&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-853202656761279266?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k_f13N5JpbJR1J1qy2Sw_oqy4Zo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k_f13N5JpbJR1J1qy2Sw_oqy4Zo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k_f13N5JpbJR1J1qy2Sw_oqy4Zo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k_f13N5JpbJR1J1qy2Sw_oqy4Zo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/MGTdltZKXf4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/853202656761279266/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=853202656761279266" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/853202656761279266?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/853202656761279266?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/MGTdltZKXf4/mdl-notes.html" title="MDL notes" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2012/01/mdl-notes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGRnszeip7ImA9WhRbEUs.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-983318878069242863</id><published>2012-01-29T14:17:00.000-08:00</published><updated>2012-02-01T22:02:07.582-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-01T22:02:07.582-08:00</app:edited><title>WinSock Kernel</title><content type="html">Winsock Kernel

http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx

Sample code:

http://www.rohitab.com/discuss/topic/37876-winsock-kernel/
http://hi.baidu.com/kernelkit/blog/item/e8a93060e1ad6a41eaf8f856.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-983318878069242863?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wfOVTIaZXtncCU3P6FYUnVDa9Oc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wfOVTIaZXtncCU3P6FYUnVDa9Oc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wfOVTIaZXtncCU3P6FYUnVDa9Oc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wfOVTIaZXtncCU3P6FYUnVDa9Oc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/anba37nTeHo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/983318878069242863/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=983318878069242863" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/983318878069242863?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/983318878069242863?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/anba37nTeHo/winsock-kernel.html" title="WinSock Kernel" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2012/01/winsock-kernel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8GRXw5eSp7ImA9WhRWFUo.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-8099760739993459383</id><published>2012-01-02T22:07:00.000-08:00</published><updated>2012-01-02T22:07:04.221-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T22:07:04.221-08:00</app:edited><title>[Linux]静态库,动态库</title><content type="html">.o, .a, .so 这些的区别&lt;br /&gt;
&lt;a href="http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html"&gt;Static, Shared Dynamic and Loadable Linux Libraries&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html"&gt;Shared libraries and static libraries&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.adp-gmbh.ch/cpp/gcc/create_lib.html"&gt;Creating a shared and static library with the gnu compiler [gcc]&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;创建静态库(.a)&lt;/b&gt;&lt;br /&gt;
比如为了把foo1.o, foo2.o这两个obj文件打包成一个静态库叫做foo.a
&lt;br /&gt;
&lt;pre class="code"&gt;$ gcc -Wall -c foo1.c foo2.c
$ ar -cvq libfoo.a foo1.o foo2.o&lt;/pre&gt;
&lt;b&gt;创建动态库(.so)&lt;/b&gt;&lt;br /&gt;
首先用-fPIC选项告诉gcc生成position independant code的.o文件
&lt;br /&gt;
&lt;pre class="code"&gt;$ gcc -Wall &lt;b&gt;-fPIC&lt;/b&gt; -c foo1.c foo2.c&lt;/pre&gt;
接着使用-shared选项生成.so文件
&lt;br /&gt;
&lt;pre class="code"&gt;$ gcc &lt;b&gt;-shared&lt;/b&gt; -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0.1  foo1.o foo2.o&lt;/pre&gt;
&lt;b&gt;使用库(.a,.so)&lt;/b&gt;&lt;br /&gt;
假设生成的libfoo.a或者libfoo.so都在/path/to/libfoo这个路径下,可以通过"-L/path/to/libfoo"这个选项告诉gcc去这个路径下去寻找需要的库.此外再通过-lfoo这个选项告诉gcc去寻找libfoo.a或者libfoo.so. 
&lt;br /&gt;
&lt;pre class="code"&gt;$ gcc -Wall &lt;b&gt;-L/path/to/libfoo&lt;/b&gt; your-program.c &lt;b&gt;-lfoo&lt;/b&gt; -o your-program&lt;/pre&gt;
默认情况下/usr/lib, /usr/local/lib这个几个路径一般会被首先查找.如果需要gcc去其他默认路径下查找(比如/path/to/libfoo),也可以通过把/path/to/libfoo添加LD_LIBRARY_PATH环境变量中&lt;br /&gt;
&lt;b&gt;强制使用静态库(.a)&lt;/b&gt;&lt;br /&gt;
如果在/path/to/libfoo下同时存在libfoo.a和libfoo.so, libfoo.so会被优先使用.可以用-static选项强制gcc避免使用动态库
&lt;br /&gt;
&lt;pre class="code"&gt;$ gcc -Wall &lt;b&gt;-static&lt;/b&gt; -L/path/to/libfoo your-program.c -lfoo -o your-program&lt;/pre&gt;
&lt;b&gt;libtool&lt;/b&gt;&lt;br /&gt;
configure关于静态动态库的参数&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;--enable-shared: 编译动态库(默认为yes)&lt;/li&gt;
&lt;li&gt;--enable-static: 编译静态库(默认为no)&lt;/li&gt;
&lt;/ul&gt;
有时"--enable-static"会以尝试静态的方式编译所有dependent的库，产生undefined reference这样的错误.
&lt;br /&gt;
&lt;pre class="code"&gt;$ ./configure --enable-static
warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_free':
(.text+0x4f): undefined reference to `inflateEnd'&lt;/pre&gt;
可以以--enable-static=libfoo这样的方式指定gcc只以static的方式编译libfoo.其他依赖的库还是以默认的shared方式编译(http://sourceware.org/autobook/autobook/autobook_85.html)
&lt;br /&gt;
&lt;pre class="code"&gt;$ ./configure --enable-static=libfoo&lt;/pre&gt;
libtool在link模式下有选项:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;-shared&lt;/li&gt;
&lt;li&gt;-static&lt;/li&gt;
&lt;li&gt;-all-static&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-8099760739993459383?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Gn49xEh_F4bHfwWK2yulsBMgy8Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gn49xEh_F4bHfwWK2yulsBMgy8Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Gn49xEh_F4bHfwWK2yulsBMgy8Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gn49xEh_F4bHfwWK2yulsBMgy8Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/57qxYpW6SPc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/8099760739993459383/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=8099760739993459383" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8099760739993459383?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8099760739993459383?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/57qxYpW6SPc/linux.html" title="[Linux]静态库,动态库" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2012/01/linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcAQn09eip7ImA9WhRWE0g.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-8413844072040438275</id><published>2011-12-29T13:36:00.000-08:00</published><updated>2011-12-31T10:44:03.362-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-31T10:44:03.362-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vi" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="encfs" /><category scheme="http://www.blogger.com/atom/ns#" term="FUSE" /><title>[Linux/Mac]给一个文件/目录加密</title><content type="html">如果你像我一样越来越依赖类似Dropbox这样的云端存储工具来同步几台不同的机器上的数据，同时又担心放上去了重要的文件可能会被偷窥或者担心泄露，那么你可以考虑像我一样，加密你在Dropbox上的文件以及目录。这样你既可以享受Dropbox带来的自动同步的好处，又减小对Dropbox安全性的依赖.
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;使用encfs加密目录&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;b&gt;Step0: 安装encfs：&lt;/b&gt;&lt;br /&gt;
在Ubuntu上
&lt;br /&gt;
&lt;pre class="code"&gt;$ sudo apt-get install encfs&lt;/pre&gt;
在Mac上如果你使用home brew(推荐！）
&lt;br /&gt;
&lt;pre class="code"&gt;$ brew install encfs&lt;/pre&gt;
或者还在使用古老的mac port
&lt;br /&gt;
&lt;pre class="code"&gt;$ sudo port install encfs&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Step1: 使用encfs：&lt;/b&gt;&lt;br /&gt;
首先建立一个叫&lt;span class="inline_code"&gt;~/Dropbox/Encrypted&lt;/span&gt;的目录。这个目录暂时还没有任何数据，但是以后你的加密过的数据和文件就会存放在这里。由于这个目录在Dropbox下，所以它会被自动同步到你的各个机器上。&lt;br /&gt;
然后再建立一个叫&lt;span class="inline_code"&gt;~/ToBeEncrypted&lt;/span&gt;的目录。这个目录将会作为一个mount point。&lt;br /&gt;
将Encrypted通过encfs而mount到ToBeEncrypted:&lt;br /&gt;
&lt;pre class="code"&gt;$ encfs ~/Dropbox/Encrypted ~/ToBeEncrypted
Creating new encrypted volume.
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?&amp;gt; p&lt;/pre&gt;
这里选择p 然后输入密码。这样你就创建了一个用此密码加密的volume，并且mount在了~/ToBeEncrypted这里

&lt;br /&gt;
&lt;b&gt;Step2: 把你需要加密的数据(文件或者目录都可以)copy或者move到~/ToBeEncrypted目录下：&lt;/b&gt;&lt;br /&gt;
比如我们要把一个叫MyTopSecret.txt的文件放入加密后的目录
&lt;br /&gt;
&lt;pre class="code"&gt;$ mv MyTopSecret.txt ~/ToBeEncrypted&lt;/pre&gt;
你会看见在~/Dropbox/Encrypted这个目录下，也会出现一个文件，但是是被加密过后的。

&lt;br /&gt;
&lt;b&gt;Step3: 拷贝完毕后，unmount含有未加密数据的目录&lt;/b&gt;&lt;br /&gt;
&lt;pre class="code"&gt;$ fusermount -u ~/ToBeEncrypted&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Step4: 再次mount加密过的目录&lt;/b&gt;&lt;br /&gt;
&lt;pre class="code"&gt;$ encfs ~/Dropbox/Encrypted ~/ToBeEncrypted&lt;/pre&gt;
输入密码后，那些加密过的文件就会再次以加密前的模样出现再~/ToBeEncrypted这里

&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;使用vi加密单个文件&lt;/b&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;hr /&gt;
在encfs的基础上，你还可以再用vim给文件设置一层密码
&lt;br /&gt;
加密码&lt;br /&gt;
&lt;pre class="code"&gt;$ vim -x filename&lt;/pre&gt;
更换密码:&lt;br /&gt;
&lt;pre class="code"&gt;$ vim +X filename&lt;/pre&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Ref&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href="http://www.cs.arizona.edu/computing/utilities/linux-encryption.html"&gt;File Encryption in Linux&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-8413844072040438275?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RysxUEQ80LA0j-hNQ6qIcGP5l_I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RysxUEQ80LA0j-hNQ6qIcGP5l_I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RysxUEQ80LA0j-hNQ6qIcGP5l_I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RysxUEQ80LA0j-hNQ6qIcGP5l_I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/hrs5ZE9rvp0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/8413844072040438275/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=8413844072040438275" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8413844072040438275?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8413844072040438275?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/hrs5ZE9rvp0/linuxmac.html" title="[Linux/Mac]给一个文件/目录加密" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/12/linuxmac.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QEQ3Y-eip7ImA9WhRQGUU.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-2095330638735472379</id><published>2011-12-15T12:35:00.000-08:00</published><updated>2011-12-15T12:35:02.852-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-15T12:35:02.852-08:00</app:edited><title>SSE 占坑贴</title><content type="html">Ref:&lt;br /&gt;
&lt;a href="http://www.songho.ca/misc/sse/sse.html"&gt;SSE (Streaming SIMD Extentions)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-2095330638735472379?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jyvurDFk4bcqmXxQ66O1STIm-qg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jyvurDFk4bcqmXxQ66O1STIm-qg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jyvurDFk4bcqmXxQ66O1STIm-qg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jyvurDFk4bcqmXxQ66O1STIm-qg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/Uvh1ohucGiI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/2095330638735472379/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=2095330638735472379" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/2095330638735472379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/2095330638735472379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/Uvh1ohucGiI/sse.html" title="SSE 占坑贴" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/12/sse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcBQnkzeyp7ImA9WhRWEEQ.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-5090174601881708490</id><published>2011-12-03T14:12:00.001-08:00</published><updated>2011-12-28T09:24:13.783-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T09:24:13.783-08:00</app:edited><title>[占坑贴]  Scala笔记</title><content type="html">&lt;span style="font-size: large;"&gt;&lt;b&gt;尽量简单的说,啥是Scala&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
在某种意义上,Scala是一种与Java平行的语言.它的源代码被编译成Java的bytecode,运行于Java虚拟机之上.正因为在JVM级是兼容的，Scala里可以调用Java的库. 这是用Scala写的HelloWorld程序
&lt;pre class="code"&gt;object HelloWorld extends App {
   println("Hello, world!")
}&lt;/pre&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;那Scala和Java比有啥不一样的地方?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
Scala这个语言的设计初衷是融合面向对象(OO)的设计思想(以C++,Java,Object C为代表)和函数式编程(functional programming)的思想(以Lisp,Haskell,ML为代表). Scala的设计优美的融合了这两种截然不同的风格.以quick sort为例，大家可以看一下Scala如何分别用普通的C风格和Haskell风格来实现:
&lt;br /&gt;
&lt;pre class="code"&gt;def sort(xs: Array[Int]) {
  def swap(i: Int, j: Int) {
    val t = xs(i); xs(i) = xs(j); xs(j) = t
  }
  def sort1(l: Int, r: Int) {
    val pivot = xs((l + r) / 2)
    var i = l; var j = r
    while (i &amp;lt;= j) {
    while (xs(i) &amp;lt; pivot) i += 1
    while (xs(j) &amp;gt; pivot) j -= 1
    if (i &amp;lt;= j) {
      swap(i, j)
      i += 1
      j -= 1
    }
  }
  if (l &amp;lt; j) sort1(l, j)
  if (j &amp;lt; r) sort1(i, r)
}
sort1(0, xs.length - 1)
}&lt;/pre&gt;
或者像Haskell那样写的:
&lt;br /&gt;
&lt;pre class="code"&gt;def sort(xs: Array[Int]): Array[Int] = {
  if (xs.length &amp;lt;= 1) xs
  else {
    val pivot = xs(xs.length / 2)
    Array.concat(
      sort(xs filter (pivot &amp;gt;)),
      xs filter (pivot ==),
      sort(xs filter (pivot &amp;lt;)))
  }
}&lt;/pre&gt;
&lt;br/&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;支持Functional Programming有啥好处呢？&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
Functional programming language有着简洁，强大的表达能力，容易帮你写出bug-free的代码.另外在并行性上也有着优势。
比如在传说中那间以青年导师李开复老师为校长的CS四大牛校之一的CMU，大一新生首先学习Functional programming而不是传统的面向对象&lt;br /&gt;
具体到Scala,它支持如下几个Functional Programming的特性:
&lt;ul&gt;
&lt;li&gt;higher-order function(高阶函数)&lt;/li&gt;
&lt;li&gt;anonymous function(匿名函数)&lt;/li&gt;
&lt;li&gt;nested function()&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Currying"&gt;curry(柯里化)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
而有了对这几个特性的支持，Scala可以宣布自己支持First-class function。也就是说，函数是first-class citizen。注意这四个特性在Java中是不被支持的。
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;啥是Higher-order function&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
其定义是说函数本身可以作为其他函数的参数，或者返回值，或者赋值给一个变量。总而言之.&lt;br /&gt;
如果一个函数的参数可以为其他函数,那么这个函数被成为Higher-order function(高阶函数). C和Python都支持Higher-order function,但是Java本身是不支持的.一个Python的例子:
&lt;br /&gt;
&lt;pre class="code"&gt;def f(x):
    return x + 3
 
def g(function, x):
    return function(x) * function(x)
 
print g(f, 7)&lt;/pre&gt;
分别用Java和Scala来完成Wordcount这个经典的MapReduce应用：
http://www.scala-blogs.org/2008/09/scalable-language-and-scalable.html
我们可以看到Scala的代码比Java的代码简介许多.
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;参考&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
Scala的官方网站: &lt;a href="http://www.scala-lang.org/"&gt;http://www.scala-lang.org/&lt;/a&gt;&lt;br /&gt;
一个不错的scala学习网站: &lt;a href="http://www.simplyscala.com/"&gt;http://www.simplyscala.com/&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.scala-lang.org/docu/files/ScalaByExample.pdf"&gt;Scala by examples&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.scala-lang.org/node/104"&gt;A Tour of Scala&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-5090174601881708490?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2sQUuYWd_LtD_aDGLcSvxHTK0YQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2sQUuYWd_LtD_aDGLcSvxHTK0YQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2sQUuYWd_LtD_aDGLcSvxHTK0YQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2sQUuYWd_LtD_aDGLcSvxHTK0YQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/749RYFd1chs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/5090174601881708490/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=5090174601881708490" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/5090174601881708490?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/5090174601881708490?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/749RYFd1chs/scala.html" title="[占坑贴]  Scala笔记" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/12/scala.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIDQ38_eCp7ImA9WhRbGEQ.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-7145087485110236452</id><published>2011-11-21T07:40:00.001-08:00</published><updated>2012-02-10T10:29:32.140-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-10T10:29:32.140-08:00</app:edited><title>typical IO latency:</title><content type="html">&lt;br /&gt;
L1 cache: ~2 cpu cycle&lt;br /&gt;
L2 cache: ~20 cpu cycle&lt;br /&gt;
DDR3: ~10 ns&lt;br /&gt;
DDR2: ~15 ns&lt;br /&gt;
RDMA: &amp;lt; 1 us&lt;br /&gt;
infiniband: ~ 1 us&lt;br /&gt;
flash&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt; read: ~50 us&lt;/li&gt;
&lt;li&gt; write: ~ 15 - 80 us &lt;/li&gt;
&lt;/ul&gt;
eithernet: ~0.2 ms&lt;br /&gt;
HDD:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Average latency ~4ms&lt;/li&gt;
&lt;li&gt;Random read seek ~10ms&lt;/li&gt;
&lt;li&gt;Random write seek ~10ms&lt;/li&gt;
&lt;/ul&gt;
Internet: ~5-500 ms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another source from http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://blog.mixu.net/files/2011/01/io-cost.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://blog.mixu.net/files/2011/01/io-cost.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Reference:&lt;br /&gt;
http://en.wikipedia.org/wiki/CAS_latency&lt;br /&gt;
&lt;a href="http://www.blogger.com/isca09.cs.columbia.edu/pres/03.pdf"&gt;Scalable High Performance Main Memory System Using PCM Technology"&lt;/a&gt;&lt;br /&gt;
http://www.fusionio.com/platforms/iodrive2/&lt;br /&gt;
http://www.intel.com/design/flash/nand/mainstream/index.htm &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/8203140-7145087485110236452?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2cxq4mA_jCUaliBkOYSze5hTCx0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2cxq4mA_jCUaliBkOYSze5hTCx0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2cxq4mA_jCUaliBkOYSze5hTCx0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2cxq4mA_jCUaliBkOYSze5hTCx0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/02SwEuz-6bo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/7145087485110236452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=7145087485110236452" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/7145087485110236452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/7145087485110236452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/02SwEuz-6bo/typical-access-latency.html" title="typical IO latency:" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/11/typical-access-latency.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MBQ388fSp7ImA9WhdaEE4.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-4332558363941937452</id><published>2011-10-19T08:50:00.000-07:00</published><updated>2011-10-19T08:50:52.175-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T08:50:52.175-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome" /><title>live with gnome-shell</title><content type="html">开始使用gnome-shell了(被逼的).默认配置有诸多不爽之处(对我来说),记录一下:&lt;br /&gt;
&lt;br /&gt;
1 窗口没有最小化按钮了,虽然你可以在窗口顶栏右键,但我很不习惯.&lt;br /&gt;
sol: $gconf-editor&lt;br /&gt;
然后把"/desktop/gnome/shell/windows/button_layout" 改成":minimize,maximize,close" (默认是":close")&lt;br /&gt;
&lt;br /&gt;
ref: http://www.webupd8.org/2011/03/how-to-add-minimize-and-maximize.html&lt;br /&gt;
&lt;br /&gt;
2 没有任务栏了&lt;br /&gt;
解决中...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-4332558363941937452?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eSh2-mbAGxoOtsaYpRE0c1O_tPc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eSh2-mbAGxoOtsaYpRE0c1O_tPc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eSh2-mbAGxoOtsaYpRE0c1O_tPc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eSh2-mbAGxoOtsaYpRE0c1O_tPc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/6m0iRH-iatQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/4332558363941937452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=4332558363941937452" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/4332558363941937452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/4332558363941937452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/6m0iRH-iatQ/live-with-gnome-shell.html" title="live with gnome-shell" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/10/live-with-gnome-shell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4GQnk6fip7ImA9WhdUFUU.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-6739719194792277890</id><published>2011-10-02T13:38:00.000-07:00</published><updated>2011-10-02T13:38:43.716-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-02T13:38:43.716-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ML" /><category scheme="http://www.blogger.com/atom/ns#" term="Currying" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Currying in ML, Python, Javascript</title><content type="html">&lt;span style="font-size: large;"&gt;ML&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;以&lt;span class="inline_code"&gt;SMLNJ&lt;/span&gt;为例.&lt;br /&gt;
&lt;pre class="code"&gt;- fun sum x y = x + y;
val sum = fn : int -&amp;gt; int -&amp;gt; int
- val sum2 = sum 2;
val sum2 = fn : int -&amp;gt; int
- sum2 10;
val it = 12 : int&lt;/pre&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Python&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;可以使用&lt;span class="inline_code"&gt;functools&lt;/span&gt;来实现curry&lt;br /&gt;
&lt;pre class="code"&gt;&amp;gt;&amp;gt;&amp;gt;from functools import partial
&amp;gt;&amp;gt;&amp;gt;def sum(x,y): return x + y
&amp;gt;&amp;gt;&amp;gt;sum2 = partial(sum, 2)
&amp;gt;&amp;gt;&amp;gt;sum2
&amp;lt;functools.partial object at 0x1f2de0&gt;
&amp;gt;&amp;gt;&amp;gt;sum2(10)
12&lt;/pre&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;JavaScript&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;http://www.svendtofte.com/code/curried_javascript/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-6739719194792277890?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x4C4VPF98A1RCRDJffuFwYgSuQE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x4C4VPF98A1RCRDJffuFwYgSuQE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x4C4VPF98A1RCRDJffuFwYgSuQE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x4C4VPF98A1RCRDJffuFwYgSuQE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/oDQoi5Sq5oU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/6739719194792277890/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=6739719194792277890" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6739719194792277890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6739719194792277890?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/oDQoi5Sq5oU/currying-in-ml-python-javascript.html" title="Currying in ML, Python, Javascript" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/10/currying-in-ml-python-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMRHYzfip7ImA9WhdVEkw.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-4628208374318466039</id><published>2011-09-16T16:39:00.000-07:00</published><updated>2011-09-16T16:39:45.886-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-16T16:39:45.886-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Prefetch" /><title>Cacheline prefetch</title><content type="html">non-temporal prefetch&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="inline_code"&gt;PREFETCHNTA&lt;/span&gt;将给定内存地址的数据prefetch到L2 cache的某个特定column上，这样如果这个内存地址的数据只是一次性的使用，就不会导致其他有用的cacheline被替换出cache. 好处是可以可以防止pollute cache&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
temporal prefetch&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="inline_code"&gt;PREFETCHT0,PREFETCHT1,PREFETCHT2&lt;/span&gt;将给定内存地址的数据prefetch到L2 cache&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
具体在C/C++代码里， 可以使用:&lt;br /&gt;
&lt;pre class="code"&gt;void _mm_prefetch(char * p , int i );&lt;/pre&gt;p为内存地址&lt;br /&gt;
i可以为&lt;span class="inline_code"&gt;_MM_HINT_T0&lt;/span&gt;, &lt;span class="inline_code"&gt;_MM_HINT_T1&lt;/span&gt;, &lt;span class="inline_code"&gt;_MM_HINT_T2&lt;/span&gt;, 或者 &lt;span class="inline_code"&gt;_MM_HINT_NTA&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-4628208374318466039?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pThyEXppBQrbKAzmXZ27CFfzVgI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pThyEXppBQrbKAzmXZ27CFfzVgI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pThyEXppBQrbKAzmXZ27CFfzVgI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pThyEXppBQrbKAzmXZ27CFfzVgI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/h3Ltgn8T-1M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/4628208374318466039/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=4628208374318466039" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/4628208374318466039?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/4628208374318466039?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/h3Ltgn8T-1M/cacheline-prefetch.html" title="Cacheline prefetch" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/09/cacheline-prefetch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8AR3ozcCp7ImA9WhdVEEs.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-3566549378767090126</id><published>2011-09-14T22:34:00.000-07:00</published><updated>2011-09-14T22:34:06.488-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T22:34:06.488-07:00</app:edited><title>static关键字在C/C++中的N种用法</title><content type="html">static是C/C++中最让人抓狂的关键字,因为这个关键字被重载了太多不同的用法.要我说这就是C/C++这些语言设计崩坏的地方.&lt;br /&gt;
&lt;br /&gt;
用法1: &lt;br /&gt;
在C中,如果用static修饰一个函数或者全局变量,那么这个函数或者变量仅仅为这个module中其他函数所见.所谓module就是这个C源文件的意思.这种用法实际上相当于Java或者C++中用private去修饰一个成员变量.这种用法下尽可能的使用static被认为是C程序员的良好习惯　--　C从设计上就对namespace问题苦手.&lt;br /&gt;
&lt;br /&gt;
用法2:&lt;br /&gt;
在C++中,被static修饰的成员函数被称为静态成员函数.这种静态成员函数可以被"类名::函数名"来调用.&lt;br /&gt;
&lt;br /&gt;
用法3:&lt;br /&gt;
C/C++中,　一个局部变量的声明如果被static修饰,那么该变量实际上不在运行栈上随着函数的调用和返回生灭,而是有一个全局的备份.换言之,这个变量类似于一个全局变量.　　&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-3566549378767090126?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Dd-jgtjGHr_SGW8xJh-lJlxOJeg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dd-jgtjGHr_SGW8xJh-lJlxOJeg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Dd-jgtjGHr_SGW8xJh-lJlxOJeg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dd-jgtjGHr_SGW8xJh-lJlxOJeg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/YsQmMiuKB6w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/3566549378767090126/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=3566549378767090126" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3566549378767090126?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3566549378767090126?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/YsQmMiuKB6w/staticccn.html" title="static关键字在C/C++中的N种用法" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/09/staticccn.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUECSXszfyp7ImA9WhRREEo.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-6133577894001401349</id><published>2011-08-27T12:20:00.001-07:00</published><updated>2011-11-23T11:47:48.587-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T11:47:48.587-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="network" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><title>Interrupt coalescing 和ethtool</title><content type="html">Interrupt coalescing

这篇文章(http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/interrupt_coal.htm)解释了什么是Interrupt coalescing.


ethtool 是用来显示以及修改网卡的设定的工具

显示eth0的参数:
sudo ethtool -c eth0&lt;br&gt;

将eth0的rx queue的timer设为1000 us 
sudo ethtool -C eth0 rx-usecs 1000&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-6133577894001401349?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4E5Hvjqvgu02B6dvm53oF1lcpkU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4E5Hvjqvgu02B6dvm53oF1lcpkU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4E5Hvjqvgu02B6dvm53oF1lcpkU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4E5Hvjqvgu02B6dvm53oF1lcpkU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/SEdnIbL0vKQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/6133577894001401349/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=6133577894001401349" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6133577894001401349?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6133577894001401349?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/SEdnIbL0vKQ/interrupt-coalescing-ethtool.html" title="Interrupt coalescing 和ethtool" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/08/interrupt-coalescing-ethtool.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIFRHozfSp7ImA9WhRUEU8.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-2487858267338938777</id><published>2011-07-20T11:25:00.001-07:00</published><updated>2012-01-20T21:08:35.485-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T21:08:35.485-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="windbg" /><title>[Windows]windbg kernel debugging</title><content type="html">debugging virtual machine using windbg:&lt;br /&gt;
http://www.ndis.com/ndis-debugging/virtual/vmwaresetup.htm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
Steps:
&lt;li&gt;(One time) On host machine, install WinDbg&lt;/li&gt;
&lt;li&gt;On the target machine (i.e., the VM running on HyperV),  ran following in cmd:
&lt;pre class="code"&gt;bcdedit -debug on
bcdedit -dbgsettings serial debugport:1 baudrate:115200&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;In HyperV’s control panel, open the settings for the VM.&amp;nbsp; Under COM1, add a Named Pipe called “MyVIrtualCom1”.&lt;/li&gt;
&lt;li&gt;Create a shortcut for windbg on host machine,  make it run as administrator (otherwise, you can not access the com). The command to run windbg is something like:&lt;/li&gt;
&lt;pre class="code"&gt;C:\Debuggers\windbg.exe -y SRV*C:\symbols*http://msdl.microsoft.com/download/symbols -k com:port=\\.\pipe\MyVirtualCom1,pipe,resets=0,reconnect&lt;/pre&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-2487858267338938777?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zwrq9yk8eAFe2OO3P1afxNWVpQE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zwrq9yk8eAFe2OO3P1afxNWVpQE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zwrq9yk8eAFe2OO3P1afxNWVpQE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zwrq9yk8eAFe2OO3P1afxNWVpQE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/mIySW2dl0es" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/2487858267338938777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=2487858267338938777" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/2487858267338938777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/2487858267338938777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/mIySW2dl0es/windowswindbg-kernel-debugging.html" title="[Windows]windbg kernel debugging" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/07/windowswindbg-kernel-debugging.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUADR3wzcSp7ImA9WhdTFko.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-5556947515795726255</id><published>2011-07-14T14:09:00.000-07:00</published><updated>2011-07-14T14:09:36.289-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T14:09:36.289-07:00</app:edited><title /><content type="html">dumpbin: 查看binary文件所需要的symbols&lt;br /&gt;
VC自带的工具. &lt;br /&gt;
&lt;pre class="code"&gt;dumpbin /imports foo.sys&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-5556947515795726255?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UBa7XYA1ycuHZNFmbALPAG6YKd0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UBa7XYA1ycuHZNFmbALPAG6YKd0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UBa7XYA1ycuHZNFmbALPAG6YKd0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UBa7XYA1ycuHZNFmbALPAG6YKd0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/0-XvXwLl6R8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/5556947515795726255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=5556947515795726255" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/5556947515795726255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/5556947515795726255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/0-XvXwLl6R8/dumpbin-binarysymbols-vc.html" title="" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/07/dumpbin-binarysymbols-vc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMBQ3Y5cCp7ImA9WhRUFU8.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-1781725722499605267</id><published>2011-06-17T13:37:00.000-07:00</published><updated>2012-01-25T12:47:32.828-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T12:47:32.828-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="debug" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>[Windows]dbg</title><content type="html">&lt;a href="http://www.offensivecomputing.net/?q=node/377"&gt;cheating sheet&lt;/a&gt;

ntsd: user mode debugger&lt;br /&gt;
kd: kernel mode debugger&lt;br /&gt;
windbg: GUI wrapp for ntsd and kd&lt;br /&gt;
&lt;br /&gt;
最基本命令&lt;br /&gt;
.hh: 查看help&lt;br /&gt;
k: show call stack&lt;br /&gt;
r: show register&lt;br /&gt;
Q: quit dbg&lt;br /&gt;
bp: set breakpoint&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;bp foo!main&lt;/li&gt;
&lt;li&gt;bp `source.c:31`&lt;/li&gt;
ba: set data breakpoint
&lt;/ul&gt;
&lt;br /&gt;
p: step&lt;br /&gt;
pc: step to next call&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
kb: Dump the stack with Params&lt;br /&gt;
kn: Dump the stack with Frame #&lt;br /&gt;
kd: Dump stack dissassembly&lt;br /&gt;
~#s: Change to thread (Example: ~3s)&lt;br /&gt;
dd # - Dump the data (Example: dd 01f056548)&lt;br /&gt;
bl: list breakpoints&lt;br /&gt;
bd: disable breakpoint&lt;br /&gt;
bc: remove breakpoint&lt;br /&gt;
lm: system modules&lt;br /&gt;
x foo!*: 查看所有module foo的symbol&lt;br /&gt;
.sympath: 查看当前sympath&lt;br /&gt;
!sympath+“\\your_computer\path\to\your\pdb”: 添加路径到sympath中&lt;br /&gt;
!sym noisy/quiet: Generate verbose output from symbol loader&lt;br /&gt;
.srcpath: 查看当前srcpath&lt;br /&gt;
!srcpath+"\\your_computer\path\to\your\pdb": 添加路径到srcpath中
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kernel Mode Extension&lt;br /&gt;
!symfix: 碰到说nt symbols are incorrect please fix的时候运行&lt;br /&gt;
!reload: 重新读入symbols 包括kernel symbols, private symbols, user symbols.&lt;br /&gt;
!reload foo.sys: 重新读入foo.sys这个driver的symbols&lt;br /&gt;
!process: 查看所有进程&lt;br /&gt;
!process 0 0 myprocess.exe: 查看叫myprocess.exe的进程&lt;br /&gt; 
!thread: 查看所有线程&lt;br /&gt;
!driveinfo: 驱动信息&lt;br /&gt;
!irp: IRP&lt;br /&gt;
!irpfind&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
读取symbol&lt;br /&gt;
&lt;pre class="code"&gt;!symfix
!reload
Connected to Windows 7 7601 x64 target at (Tue Jun 21 13:22:28.221 2011 (UTC - 7:00)), ptr64 TRUE
Loading Kernel Symbols
...............................................................
................................................................
............................
Loading User Symbols
................................................................
.........................
Loading unloaded module list
..........&lt;/pre&gt;
显示driver object (比如kbdclass)&lt;br /&gt;
&lt;pre class="code"&gt;!drvobj kbdclass
Driver object (fffffa8007370870) is for:
 \Driver\kbdclass
Driver Extension List: (id , addr)&lt;/pre&gt;
显示driver object (比如kbdclass)的dispatch routines&lt;br /&gt;
&lt;pre class="code"&gt;!drvobj kbdclass 7
Driver object (fffffa8007370870) is for:
 \Driver\kbdclass
Driver Extension List: (id , addr)

Device Object list:
fffffa8007a31ce0  fffffa800743d6c0  

DriverEntry:   fffff8800440becc kbdclass!GsDriverEntry
DriverStartIo: 00000000 
DriverUnload:  00000000 
AddDevice:     fffff880044083b4 kbdclass!KeyboardAddDevice

Dispatch routines:
[00] IRP_MJ_CREATE                      fffff88004401dd4 kbdclass!KeyboardClassCreate
[01] IRP_MJ_CREATE_NAMED_PIPE           fffff800034b58ac nt!IopInvalidDeviceRequest
[02] IRP_MJ_CLOSE                       fffff8800440217c kbdclass!KeyboardClassClose
[03] IRP_MJ_READ                        fffff88004402804 kbdclass!KeyboardClassRead
[04] IRP_MJ_WRITE                       fffff800034b58ac nt!IopInvalidDeviceRequest
[05] IRP_MJ_QUERY_INFORMATION           fffff800034b58ac nt!IopInvalidDeviceRequest
[06] IRP_MJ_SET_INFORMATION             fffff800034b58ac nt!IopInvalidDeviceRequest
[07] IRP_MJ_QUERY_EA                    fffff800034b58ac nt!IopInvalidDeviceRequest
[08] IRP_MJ_SET_EA                      fffff800034b58ac nt!IopInvalidDeviceRequest
[09] IRP_MJ_FLUSH_BUFFERS               fffff88004401ce0 kbdclass!KeyboardClassFlush
[0a] IRP_MJ_QUERY_VOLUME_INFORMATION    fffff800034b58ac nt!IopInvalidDeviceRequest
[0b] IRP_MJ_SET_VOLUME_INFORMATION      fffff800034b58ac nt!IopInvalidDeviceRequest
[0c] IRP_MJ_DIRECTORY_CONTROL           fffff800034b58ac nt!IopInvalidDeviceRequest
[0d] IRP_MJ_FILE_SYSTEM_CONTROL         fffff800034b58ac nt!IopInvalidDeviceRequest
[0e] IRP_MJ_DEVICE_CONTROL              fffff88004408a40 kbdclass!KeyboardClassDeviceControl
[0f] IRP_MJ_INTERNAL_DEVICE_CONTROL     fffff880044082b4 kbdclass!KeyboardClassPassThrough
[10] IRP_MJ_SHUTDOWN                    fffff800034b58ac nt!IopInvalidDeviceRequest
[11] IRP_MJ_LOCK_CONTROL                fffff800034b58ac nt!IopInvalidDeviceRequest
[12] IRP_MJ_CLEANUP                     fffff88004401afc kbdclass!KeyboardClassCleanup
[13] IRP_MJ_CREATE_MAILSLOT             fffff800034b58ac nt!IopInvalidDeviceRequest
[14] IRP_MJ_QUERY_SECURITY              fffff800034b58ac nt!IopInvalidDeviceRequest
[15] IRP_MJ_SET_SECURITY                fffff800034b58ac nt!IopInvalidDeviceRequest
[16] IRP_MJ_POWER                       fffff88004409fd4 kbdclass!KeyboardClassPower
[17] IRP_MJ_SYSTEM_CONTROL              fffff8800440a364 kbdclass!KeyboardClassSystemControl
[18] IRP_MJ_DEVICE_CHANGE               fffff800034b58ac nt!IopInvalidDeviceRequest
[19] IRP_MJ_QUERY_QUOTA                 fffff800034b58ac nt!IopInvalidDeviceRequest
[1a] IRP_MJ_SET_QUOTA                   fffff800034b58ac nt!IopInvalidDeviceRequest
[1b] IRP_MJ_PNP                         fffff88004403368 kbdclass!KeyboardPnP&lt;/pre&gt;
&lt;br /&gt;
列出当前所有irp&lt;br /&gt;
&lt;pre class="code"&gt;!irpfind

Scanning large pool allocation table for Tag: Irp? (fffffa8005481000 : fffffa8005781000)

  Irp    [ Thread ] irpStack: (Mj,Mn)   DevObj  [Driver]         MDL Process
fffffa8007375930 [00000000] Irp is complete (CurrentLocation 4 &amp;gt; StackCount 3)
fffffa8004f19520 [00000000] Irp is complete (CurrentLocation 2 &amp;gt; StackCount 1) 0x0000000000000000
fffffa8007dcfe10 [fffffa80081438f0] irpStack: ( e,2d)  fffffa8006e6eb10 [ \Driver\AFD]
fffffa8007ecdbc0 [fffffa80088a9b60] irpStack: ( e, 0)  fffffa8006aa4da0 [ \Driver\Beep]
...&lt;/pre&gt;
&lt;br /&gt;
特别查看某个irp (比如地址是fffffa8007dcfe10的这个)&lt;br /&gt;
&lt;pre class="code"&gt;!irp fffffa8007dcfe10
Irp is active with 4 stacks 4 is current (= 0xfffffa8007dcffb8)
 No Mdl: System buffer=fffffa8008dc7d80: Thread fffffa80081438f0:  Irp stack trace.  
     cmd  flg cl Device   File     Completion-Context
 [  0, 0]   0  0 00000000 00000000 00000000-00000000    

   Args: 00000000 00000000 00000000 00000000
 [  0, 0]   0  0 00000000 00000000 00000000-00000000    

   Args: 00000000 00000000 00000000 00000000
 [  0, 0]   0  0 00000000 00000000 00000000-00000000    

   Args: 00000000 00000000 00000000 00000000
&amp;gt;[  e,2d]   5  1 fffffa8006e6eb10 fffffa80086bfa30 00000000-00000000    pending
        \Driver\AFD
   Args: fffffa80081844b0 fffffa80081844b0 fffff88003f03150 fffffa8007ecf810&lt;/pre&gt;
最后一行显示出这个irp的major function是e 也就是IRP_MJ_DEVICE_CONTROL&lt;br /&gt;
&lt;br /&gt;
查看namespace里\Driver里的内容:&lt;br /&gt;
&lt;pre class="code"&gt;!object \Driver
Object: fffff8a00008b7f0  Type: (fffffa8004e83a90) Directory
    ObjectHeader: fffff8a00008b7c0 (new version)
    HandleCount: 0  PointerCount: 107
    Directory Object: fffff8a000004dc0  Name: Driver

    Hash Address          Type          Name
    ---- -------          ----          ----
     00  fffffa8006fbae70 Driver        nvlddmkm
         fffffa80069eae70 Driver        fvevol
         fffffa8005d2e890 Driver        iaStorV
...&lt;/pre&gt;
&lt;br /&gt;
查看_DRIVER_OBJECT的结构&lt;br /&gt;
&lt;pre class="code"&gt;dt nt!_DRIVER_OBJECT
   +0x000 Type             : Int2B
   +0x002 Size             : Int2B
   +0x008 DeviceObject     : Ptr64 _DEVICE_OBJECT
   +0x010 Flags            : Uint4B
   +0x018 DriverStart      : Ptr64 Void
   +0x020 DriverSize       : Uint4B
   +0x028 DriverSection    : Ptr64 Void
   +0x030 DriverExtension  : Ptr64 _DRIVER_EXTENSION
   +0x038 DriverName       : _UNICODE_STRING
   +0x048 HardwareDatabase : Ptr64 _UNICODE_STRING
   +0x050 FastIoDispatch   : Ptr64 _FAST_IO_DISPATCH
   +0x058 DriverInit       : Ptr64     long 
   +0x060 DriverStartIo    : Ptr64     void 
   +0x068 DriverUnload     : Ptr64     void 
   +0x070 MajorFunction    : [28] Ptr64     long 
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-1781725722499605267?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mSNWyVusfhg3ZbHBqmvXIAbG2Jg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mSNWyVusfhg3ZbHBqmvXIAbG2Jg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mSNWyVusfhg3ZbHBqmvXIAbG2Jg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mSNWyVusfhg3ZbHBqmvXIAbG2Jg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/KE0JC46FaQY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/1781725722499605267/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=1781725722499605267" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/1781725722499605267?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/1781725722499605267?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/KE0JC46FaQY/windowsdbg.html" title="[Windows]dbg" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/06/windowsdbg.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8CRn48fip7ImA9WhZaFEg.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-1630134450981044348</id><published>2011-06-14T22:19:00.001-07:00</published><updated>2011-06-30T10:11:07.076-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-30T10:11:07.076-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="cmd" /><title>[Windows]cmd命令笔记</title><content type="html">删除一个文件夹foo所有内容&lt;br /&gt;
&lt;pre class="code"&gt;rd foo /s&lt;/pre&gt;&lt;br /&gt;
查看当前所有进程(类似ps)&lt;br /&gt;
&lt;pre class="code"&gt;tasklist&lt;/pre&gt;&lt;br /&gt;
杀死一个进程(类似kill)&lt;br /&gt;
&lt;pre class="code"&gt;taskkill&lt;/pre&gt;&lt;br /&gt;
查找文件中出现的字符串&lt;br /&gt;
&lt;pre class="code"&gt;findstr&lt;/pre&gt;&lt;br /&gt;
5秒内关机并重启&lt;br /&gt;
&lt;pre class="code"&gt;shutdown -r -t 5&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-1630134450981044348?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tCQedv5PyloR6nd9lXG1XBzjOq8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tCQedv5PyloR6nd9lXG1XBzjOq8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tCQedv5PyloR6nd9lXG1XBzjOq8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tCQedv5PyloR6nd9lXG1XBzjOq8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/xYIIJ6b-HmI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/1630134450981044348/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=1630134450981044348" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/1630134450981044348?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/1630134450981044348?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/xYIIJ6b-HmI/windowscmd.html" title="[Windows]cmd命令笔记" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/06/windowscmd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8DSHY-fCp7ImA9WhdSEk0.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-3360952858123251218</id><published>2011-06-13T12:52:00.000-07:00</published><updated>2011-07-20T15:27:59.854-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-20T15:27:59.854-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Kernel" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="driver" /><title>[Winodws]内核驱动笔记</title><content type="html">占坑&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;背景知识&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;hr /&gt;用户模式(User Mode):&lt;br /&gt;
内核模式(Kernel Mode):&lt;br /&gt;
Win32 API:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;C++注意事项&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;hr /&gt;微软官方的文档&lt;a href="http://msdn.microsoft.com/en-us/windows/hardware/gg487420.aspx"&gt;C++ for Kernel Mode Drivers: Pros and Cons&lt;/a&gt;&lt;br /&gt;
求摘要？看这里&lt;a href="http://blogs.msdn.com/b/adioltean/archive/2005/04/24/411356.aspx"&gt;Advanced C++ features and Kernel-mode programming don't mix&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
cmd或者在(Start-&gt;Run)运行msinfo32,然后选"software environment"-&gt;"system drivers"可以看到当前系统里所有安装了的驱动&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;编译&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;hr /&gt;source文件相当于Linux/Unix下的Makefile. 如何写一个source文件? 参见http://randomlearningnotes.wordpress.com/2009/04/20/using-wdkddk-build-environment-for-drivers-and-non-drivers/&lt;br /&gt;
&lt;br /&gt;
build 命令相当于Linux/Unix下的make&lt;br /&gt;
&lt;br /&gt;
build /c 把所有obj文件全部删除再编译&lt;br /&gt;
&lt;br /&gt;
build的output很少, 详细信息可以参见编译时生成的.log,.wrn和.err文件&lt;br /&gt;
&lt;br /&gt;
disable所有编译优化: 在source 文件中加设置环境变量&lt;br /&gt;
MSC_OPTIMIZATION=/Od /Oi&lt;br /&gt;
&lt;br /&gt;
debugview是一个可以用来查看kernel debug输出信息的工具. 可以connect到local machine来查看本机的, 也可以连接到remote机器上. 后者的方法是先在remote的机器上运行debugview /c, 接着使用debugview在local机器上&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;常用API&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;hr /&gt;信号量&lt;br /&gt;
KeWaitForSingleObject 阻塞当前线程直至信号变量(比如一个event object)被置成signaled&lt;br /&gt;
KeSetEvent 把一个event object设为signaled&lt;br /&gt;
KeResetEvent 把一个event object重置成not-signaled&lt;br /&gt;
&lt;br /&gt;
文件操作:&lt;br /&gt;
ZwReadFile: Read data from the file.&lt;br /&gt;
ZwWriteFile: Write data to the file.&lt;br /&gt;
ZwQueryInformationFile: Read metadata for the file or file handle.&lt;br /&gt;
ZwSetInformationFile: Write metadata for the file or file handle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-3360952858123251218?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Qxw0qUpWax2VZSAKismfOq0KxcA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qxw0qUpWax2VZSAKismfOq0KxcA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Qxw0qUpWax2VZSAKismfOq0KxcA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qxw0qUpWax2VZSAKismfOq0KxcA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/t6WqBjeH9ag" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/3360952858123251218/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=3360952858123251218" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3360952858123251218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3360952858123251218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/t6WqBjeH9ag/winodws.html" title="[Winodws]内核驱动笔记" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/06/winodws.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ABQnc_eCp7ImA9WhZVFk4.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-3147126682973951259</id><published>2011-05-28T19:22:00.000-07:00</published><updated>2011-05-28T19:22:33.940-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-28T19:22:33.940-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ppa" /><title>Ubuntu添加删除ppa</title><content type="html">添加一个ppa是一件很容易的事情, 比如添加ppa:ubuntu-toolchain-r/test(可以在11.04上装gcc-4.6)&lt;br /&gt;
&lt;pre class="code"&gt;$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test&lt;/pre&gt;更新仓库软件列表&lt;br /&gt;
&lt;pre class="code"&gt;$ sudo apt-get update &lt;/pre&gt;&lt;br /&gt;
删除一个ppa并rollback到稳定版本稍微麻烦一些,需要下一个叫ppa-purge的工具先&lt;br /&gt;
&lt;pre class="code"&gt;$ sudo apt-get install ppa-purge&lt;/pre&gt;删除刚才添加的ppa&lt;br /&gt;
&lt;pre class="code"&gt;$ sudo ppa-purge ppa:ubuntu-toolchain-r/test&lt;/pre&gt;然后会自动帮你downgrade或者remove软件.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-3147126682973951259?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Y8LYMUv92QIUhXD--fhmL-4l_v8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y8LYMUv92QIUhXD--fhmL-4l_v8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Y8LYMUv92QIUhXD--fhmL-4l_v8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y8LYMUv92QIUhXD--fhmL-4l_v8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/5SxA93qLIgo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/3147126682973951259/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=3147126682973951259" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3147126682973951259?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3147126682973951259?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/5SxA93qLIgo/ubuntuppa.html" title="Ubuntu添加删除ppa" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/05/ubuntuppa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkADSXw_cCp7ImA9WhZVE08.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-5651849147664937363</id><published>2011-05-25T06:06:00.000-07:00</published><updated>2011-05-25T06:06:18.248-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-25T06:06:18.248-07:00</app:edited><title>64bit整数的左移</title><content type="html">对于32bit或者更短的的integer, 1左移x位就是 &lt;code&gt;1&amp;le;&amp;le;x&lt;/code&gt;&lt;br /&gt;
但是对于64bit的integer, 比如&lt;code&gt;unsigned long long&lt;/code&gt;或者&lt;code&gt;uint64_t&lt;/code&gt;, &lt;code&gt;1&amp;le;&amp;le;32&lt;/code&gt;却是0. 如果需要2^32或者更大的数, 需要用&lt;code&gt;1ULL&amp;le;&amp;le;32&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://cboard.cprogramming.com/c-programming/62790-bitshift-64-bit-integers.html"&gt;http://cboard.cprogramming.com/c-programming/62790-bitshift-64-bit-integers.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;#include &lt;stdio.h&gt;
#include &lt;stdint.h&gt;
#include &lt;inttypes.h&gt;

int main( void )
{
   uint64_t a = 1ULL &lt;&lt; 32;
   uint64_t b = 1 &lt;&lt; 32;
   printf( "a = %016"PRIx64", b = %016"PRIx64"\n",  a, b);
   return 0;
}
&lt;/pre&gt;
&lt;pre class="output"&gt;a = 0000000100000000, b = 0000000000000000
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-5651849147664937363?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jwDtW4myo6fcutNlUHxI-P2stpw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jwDtW4myo6fcutNlUHxI-P2stpw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jwDtW4myo6fcutNlUHxI-P2stpw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jwDtW4myo6fcutNlUHxI-P2stpw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/8j7zXGj9uRc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/5651849147664937363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=5651849147664937363" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/5651849147664937363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/5651849147664937363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/8j7zXGj9uRc/64bit.html" title="64bit整数的左移" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/05/64bit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMARXg-fCp7ImA9WhRWFk0.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-6903032709124502948</id><published>2011-05-20T09:50:00.000-07:00</published><updated>2012-01-03T08:17:24.654-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T08:17:24.654-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Makefile" /><category scheme="http://www.blogger.com/atom/ns#" term="MacOS" /><title>[Linux/Mac]编译相关的工具和命令</title><content type="html">&lt;b&gt;&lt;span style="font-size: large;"&gt;GNU make的常用变量&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;CFLAGS: C compiler的flags,会被传递给关于C代码的compile和link的命令&lt;/li&gt;
&lt;li&gt;CXXFLAGS: C++ compiler的flags,会被传递给关于C++的compile和link的命令&lt;/li&gt;
&lt;li&gt;CPPFLAGS: &lt;b&gt;C&lt;/b&gt; &lt;b&gt;P&lt;/b&gt;re&lt;b&gt;P&lt;/b&gt;rocessor的flags(注意，不要和CXXFLAGS混淆)。它会被传递给编译C以及C++代码的命令&lt;/li&gt;
&lt;li&gt;LDFLAGS: linking阶段的选项。常用来指定一些库文件的位置 比如"-L/usr/local/Cellar/gettext/0.18.1.1/lib"&lt;/li&gt;
&lt;li&gt;CC: C Compiler。比如"gcc", "cc"&lt;/li&gt;
&lt;li&gt;CXX: C++ Compiler。比如"g++"&lt;/li&gt;
&lt;/ul&gt;
参考: &lt;br /&gt;
http://stackoverflow.com/questions/495598/difference-between-cppflags-and-cxxflags-in-gnu-make&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;autoreconf&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;hr /&gt;
根据&lt;span class="inline_code"&gt;configure.ac&lt;/span&gt;生成&lt;span class="inline_code"&gt;configure&lt;/span&gt;文件
&lt;br /&gt;
&lt;pre class="code"&gt;$ autoconf configure.ac &amp;gt; configure
$ chmod +x configure
$ ./configure&lt;/pre&gt;
参见&lt;a href="http://www.edwardrosten.com/code/autoconf/"&gt;A brief introduction to autoreconf&lt;/a&gt;&lt;br /&gt;
http://sourceware.org/autobook/autobook/autobook_toc.html#SEC_Contents &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;configure&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;hr /&gt;
增加额外的编译参数(比如默认的configure找不到某个包,就需要显式的告诉它路径)&lt;br /&gt;
Bash底下&lt;br /&gt;
&lt;pre class="code"&gt;$ LDFLAGS="-L/opt/local/lib" CXXFLAGS="-I/opt/local/include"\
 PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/" ./configure&lt;/pre&gt;
或者csh底下&lt;br /&gt;
&lt;pre class="code"&gt;$ env LDFLAGS="-L/opt/local/lib" CXXFLAGS="-I/opt/local/include"\
 PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/" ./configure&lt;/pre&gt;
configure的常用参数包括
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;--prefix: 通常默认为 "--prefix=/usr/local" &lt;/li&gt;
&lt;li&gt;--enable-shared: build shared libraries,否定为"--enable-shared=no"或者"--disable-shared"&lt;/li&gt;
&lt;li&gt;--enable-static: build static libraries,否定为"--enable-static=no"或者"--disable-static"&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;ldd&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;hr /&gt;
显示一个可执行文件或者一个shared library文件(.so文件)所dependent的其他.so文件&lt;br /&gt;
&lt;pre class="code"&gt;$ ldd a.out 
 linux-vdso.so.1 =&gt;  (0x00007fff4c5ff000)
 libm.so.6 =&gt; /lib/x86_64-linux-gnu/libm.so.6 (0x00007f55df989000)
 libc.so.6 =&gt; /lib/x86_64-linux-gnu/libc.so.6 (0x00007f55df5ea000)
 /lib64/ld-linux-x86-64.so.2 (0x00007f55dfc3b000)&lt;/pre&gt;

&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;nm&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;hr /&gt;
查看一个obj文件的symbol table&lt;br /&gt;
&lt;pre class="code"&gt;$ nm mypair.o
000001c4 s EH_frame1
000001a5 s __GLOBAL__I_mypair.cc
00000254 s __GLOBAL__I_mypair.cc.eh
00000153 s __Z41__static_initialization_and_destruction_0ii
0000022c s __Z41__static_initialization_and_destruction_0ii.eh
         U __ZNKSs4sizeEv
         U __ZNKSsixEm
         U __ZNSt8ios_base4InitC1Ev
         U __ZNSt8ios_base4InitD1Ev
0000012c S __ZSt3minImERKT_S2_S2_
000001e0 S __ZSt3minImERKT_S2_S2_.eh
00000000 t __ZStL17__verify_groupingPKcmRKSs
00000204 s __ZStL17__verify_groupingPKcmRKSs.eh
000002a8 b __ZStL8__ioinit
         U ___cxa_atexit
         U ___dso_handle
         U ___gxx_personality_v0
00000104 t ___tcf_0
00000278 s ___tcf_0.eh&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;strip&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;hr /&gt;
减小一个可执行文件的size。代码体积变小后可能会对icache有帮助。代价是symbol table等帮助debug的信息会被移除。&lt;br /&gt;
&lt;pre class="code"&gt;$ strip a.out&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;pkg-config&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;hr /&gt;
pkg-config相当于一个数据库，用以维护系统中那些已经安装了的library。&lt;br /&gt;
比如你可以通过--modversion来查询某个library的版本
&lt;br /&gt;
&lt;pre class="code"&gt;$ pkg-config --modversion openssl
0.9.8j&lt;/pre&gt;
也可以用--cflags以及--libs查询在Makefile里使用一个library所需要使用的include的路径和其他选项。比如:&lt;br /&gt;
&lt;pre class="code"&gt;$ pkg-config --cflags thrift
-I/usr/local/include/thrift  
$ pkg-config --libs thrift  
-L/usr/local/lib -lthrift&lt;/pre&gt;
pkg-config中的library数据库是通过搜索特定路径下的一系列xxx.pc文件来建立的。每个.pc文件对应一个library，包括了这个library的一些metadata。可以通过如下命令来查看当前数据库中包含了哪些library了。
&lt;br /&gt;
&lt;pre class="code"&gt;$ pkg-config --list-all&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-6903032709124502948?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TdOapN9yp6VwrdGuSy6abremIjg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TdOapN9yp6VwrdGuSy6abremIjg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TdOapN9yp6VwrdGuSy6abremIjg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TdOapN9yp6VwrdGuSy6abremIjg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/3UzYBUsud3o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/6903032709124502948/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=6903032709124502948" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6903032709124502948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6903032709124502948?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/3UzYBUsud3o/linux_20.html" title="[Linux/Mac]编译相关的工具和命令" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/05/linux_20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ANSHg6fSp7ImA9WhZWFkk.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-8632273372417131321</id><published>2011-05-17T07:16:00.000-07:00</published><updated>2011-05-17T07:16:39.615-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-17T07:16:39.615-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="Indefero" /><title>Indefero</title><content type="html">在Indefero上new了一个project之后, 想用git pull一个空的source tree下来.但是发现git总是报错&lt;br /&gt;
&lt;pre class="code"&gt;Cloning into hashfilter...
fatal: '/var/local/indefero/git/repositories/myproj.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly&lt;/pre&gt;折腾了很久, 后来发现原来Indefero上新建的project是没有repo的. 第一次使用的时候需要自己import.所以要在自己的目录里&lt;br /&gt;
&lt;pre class="code"&gt;git init
git add .
git commit -m "initial import"
git remote add origin git@a.b.c.d:yourproj.git
git push origin master&lt;/pre&gt;然后就可以在Indefero上看见自己的source tree了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-8632273372417131321?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-bkQ3iN5HgR_UnOf5X_npFoDbps/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-bkQ3iN5HgR_UnOf5X_npFoDbps/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-bkQ3iN5HgR_UnOf5X_npFoDbps/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-bkQ3iN5HgR_UnOf5X_npFoDbps/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/cmUu0hkR_JM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/8632273372417131321/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=8632273372417131321" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8632273372417131321?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8632273372417131321?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/cmUu0hkR_JM/indefero.html" title="Indefero" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/05/indefero.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIMRnw9eyp7ImA9WhZWE0w.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-6199390814007821667</id><published>2011-05-13T11:49:00.000-07:00</published><updated>2011-05-13T11:49:47.263-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-13T11:49:47.263-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="数学" /><title>Hash, Hash and Hash</title><content type="html">(更新中)&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Universal Hashing&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
A probability distribution H over hash functions from U to $\{1, \ldots, M\}$ is uni-&lt;br /&gt;
versal if for all x = y in U , we have&lt;br /&gt;
$$&lt;br /&gt;
Pr\{h(x) == h(y)\} \leq 1/M&lt;br /&gt;
$$&lt;br /&gt;
&lt;br /&gt;
换言之当h是从H中随机选取,任何两个元素collide的概率不超过1/M.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;(c,k)-Universal Hashing&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
$\{h_i\} h_i : U \to R$, for any distinct elements $x_1,\ldots,x_k \in U$, and $y_1,\ldots,y_k \in R$, we have&lt;br /&gt;
$$&lt;br /&gt;
Pr\{h_i(x_1) = y_1,\ldots, h_i(x_k) =y_k\} \leq c/|R|^k&lt;br /&gt;
$$&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-6199390814007821667?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PYlc8_pMHC9l4o9HyGIcTcg1Fpw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PYlc8_pMHC9l4o9HyGIcTcg1Fpw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PYlc8_pMHC9l4o9HyGIcTcg1Fpw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PYlc8_pMHC9l4o9HyGIcTcg1Fpw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/iCcA_0nyiNs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/6199390814007821667/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=6199390814007821667" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6199390814007821667?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/6199390814007821667?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/iCcA_0nyiNs/hash-hash-and-hash.html" title="Hash, Hash and Hash" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/05/hash-hash-and-hash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4FQ346cCp7ImA9WhZXGUs.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-3645565013873079831</id><published>2011-05-09T10:39:00.000-07:00</published><updated>2011-05-09T11:15:12.018-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-09T11:15:12.018-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gcc" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><title>[Linux]Ubuntu 11.04(Natty)上安装gcc-4.6</title><content type="html">gcc-4.6没有进Natty默认的repo. &lt;br /&gt;
可以从ppa源里安装&lt;br /&gt;
https://launchpad.net/~ubuntu-toolchain-r/+archive/test&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-3645565013873079831?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XAzAWFTv-oSVY6s0RGZrcdH18Ww/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XAzAWFTv-oSVY6s0RGZrcdH18Ww/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XAzAWFTv-oSVY6s0RGZrcdH18Ww/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XAzAWFTv-oSVY6s0RGZrcdH18Ww/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/HsYV1S8kLa8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/3645565013873079831/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=3645565013873079831" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3645565013873079831?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/3645565013873079831?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/HsYV1S8kLa8/linuxubuntu-1104nattygcc-46.html" title="[Linux]Ubuntu 11.04(Natty)上安装gcc-4.6" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/05/linuxubuntu-1104nattygcc-46.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YGR3cyeyp7ImA9WhZXGU0.&quot;"><id>tag:blogger.com,1999:blog-8203140.post-8410487326861589852</id><published>2011-05-08T17:31:00.000-07:00</published><updated>2011-05-08T17:32:06.993-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-08T17:32:06.993-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><title>[Linux]关于用户,组</title><content type="html">增加用户foo&lt;br /&gt;
&lt;pre class="code"&gt;sudo adduser foo&lt;/pre&gt;&lt;br /&gt;
把用户foo添加到group admin当中(这样foo就可以sudo)&lt;br /&gt;
&lt;pre class="code"&gt;sudo adduser foo admin&lt;/pre&gt;&lt;br /&gt;
增加组bar&lt;br /&gt;
&lt;pre class="code"&gt;sudo addgroup bar&lt;/pre&gt;&lt;br /&gt;
查看某个用户foo所属的组&lt;br /&gt;
&lt;pre class="code"&gt;groups foo&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8203140-8410487326861589852?l=apc999.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GU018dfQ1aaTbsPzGKpc4-xfmJA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GU018dfQ1aaTbsPzGKpc4-xfmJA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GU018dfQ1aaTbsPzGKpc4-xfmJA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GU018dfQ1aaTbsPzGKpc4-xfmJA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/KidsReturn/~4/1kQTLz2hl-U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://apc999.blogspot.com/feeds/8410487326861589852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8203140&amp;postID=8410487326861589852" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8410487326861589852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8203140/posts/default/8410487326861589852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/KidsReturn/~3/1kQTLz2hl-U/linux_08.html" title="[Linux]关于用户,组" /><author><name>apc</name><uri>http://www.blogger.com/profile/11341747245547226513</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://apc999.blogspot.com/2011/05/linux_08.html</feedburner:origLink></entry></feed>

