<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2610374684750965741</id><updated>2012-02-09T09:59:36.268+08:00</updated><category term='M.F.'/><category term='QT'/><category term='tools'/><category term='tao'/><category term='javascript'/><category term='web'/><category term='Program'/><category term='C/C++'/><category term='XML'/><category term='Windows'/><category term='Security'/><category term='Java'/><category term='MyProject'/><category term='LFS'/><category term='bloger'/><category term='GTK'/><category term='DeAsm'/><category term='C#'/><category term='xorg'/><category term='PHP'/><category term='Life'/><category term='css'/><category term='shell'/><category term='STL'/><category term='Linux'/><category term='kernel'/><category term='Glib'/><category term='vim'/><category term='google'/><category term='database'/><title type='text'>h_Davy's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default?start-index=101&amp;max-results=100'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>145</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2274091104140247043</id><published>2012-02-09T09:40:00.002+08:00</published><updated>2012-02-09T09:41:17.201+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>效率，灵活，抽象，生产率</title><content type='html'>如果把我们的对编程语言的需求总结为四个：效率，灵活，抽象，生产率。那么，C语言玩的是前两个，而C++玩的是前三个，Java和C#玩的是后两个（抽象和生产率）http://www.infoq.com/cn/news/2012/02/2012-cpp-to-learn-or-not//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2274091104140247043?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2274091104140247043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2274091104140247043&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2274091104140247043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2274091104140247043'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2012/02/blog-post.html' title='效率，灵活，抽象，生产率'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2100925220571858406</id><published>2010-02-24T07:22:00.001+08:00</published><updated>2010-02-24T07:22:06.559+08:00</updated><title type='text'>狼性领导十大原则</title><content type='html'>&lt;h1 style="text-align:left"&gt;&lt;b&gt;&amp;#29436;&amp;#24615;&amp;#39046;&amp;#23548;&amp;#21313;&amp;#22823;&amp;#21407;&amp;#21017;&lt;/b&gt;&lt;/h1&gt;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#19968;&amp;#65306;&amp;#24525;&amp;#36785;&amp;#36127;&amp;#37325;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#25026;&amp;#24471;&amp;#20174;&amp;#23567;&amp;#21040;&amp;#22823;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#23545;&amp;#20255;&amp;#22823;&amp;#21407;&amp;#21017;&amp;#30340;&amp;#22521;&amp;#32946;&amp;#36807;&amp;#31243;,&amp;#35201;&amp;#20687;&amp;#19968;&amp;#20010;&amp;#27597;&amp;#20146;&amp;#19968;&amp;#26679;&amp;#21191;&amp;#20110;&amp;#29306;&amp;#29298;&amp;#12290;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#20108;&amp;#65306;&amp;#25972;&amp;#20307;&amp;#33267;&amp;#19978;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#26368;&amp;#22823;&amp;#30340;&amp;#20351;&amp;#21629;&amp;#23601;&amp;#26159;&amp;#20351;&amp;#21592;&amp;#24037;&amp;#21548;&amp;#21040;&amp;#20844;&amp;#21496;&amp;#24378;&amp;#22823;&amp;#30340;&amp;#22768;&amp;#38899;&amp;#20013;&amp;#20063;&amp;#26377;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#37027;&amp;#19968;&amp;#20221;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#19977;&amp;#65306;&amp;#33258;&amp;#30693;&amp;#20043;&amp;#26126;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#25026;&amp;#24471;&amp;#19987;&amp;#27880;&amp;#20110;&amp;#19968;&amp;#28857;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#33258;&amp;#24049;&amp;#25104;&amp;#20026;&amp;#36825;&amp;#19968;&amp;#39046;&amp;#22495;&amp;#30340;&amp;#32769;&amp;#34382;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#22235;&amp;#65306;&amp;#39034;&amp;#27700;&amp;#34892;&amp;#33311;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#27704;&amp;#36828;&amp;#25026;&amp;#24471;&amp;#26159;&amp;#26102;&amp;#21183;&amp;#36896;&amp;#33521;&amp;#38596;,&amp;#32780;&amp;#19981;&amp;#26159;&amp;#33521;&amp;#38596;&amp;#36896;&amp;#26102;&amp;#21183;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#20116;&amp;#65306;&amp;#34880;&amp;#27987;&amp;#20110;&amp;#27700;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#25026;&amp;#24471;&amp;#26007;&amp;#24535;&amp;#26159;&amp;#29992;&amp;#40092;&amp;#34880;&amp;#28608;&amp;#21457;&amp;#20986;&amp;#26469;&amp;#30340;,&amp;#40092;&amp;#34880;&amp;#24418;&amp;#25104;&amp;#22242;&amp;#38431;&amp;#29282;&amp;#19981;&amp;#21487;&amp;#30772;&amp;#30340;&amp;#20449;&amp;#36182;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#20845;&amp;#65306;&amp;#34920;&amp;#37324;&amp;#22914;&amp;#19968;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#25026;&amp;#24471;&amp;#25152;&amp;#35859;&amp;#32844;&amp;#19994;&amp;#21270;&amp;#23601;&amp;#26159;&amp;#21033;&amp;#30410;&amp;#32972;&amp;#21518;&amp;#30340;&amp;#21407;&amp;#21017;&amp;#39640;&amp;#20110;&amp;#19968;&amp;#20999;,&amp;#27861;&amp;#19981;&amp;#23481;&amp;#24773;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#19971;&amp;#65306;&amp;#30693;&amp;#24049;&amp;#30693;&amp;#24444;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#26126;&amp;#30333;&amp;#32988;&amp;#21033;&amp;#24182;&amp;#19981;&amp;#26159;&amp;#35828;&amp;#26126;&amp;#33258;&amp;#24049;&amp;#24378;&amp;#22823;,&amp;#32780;&amp;#26159;&amp;#35828;&amp;#26126;&amp;#33258;&amp;#24049;&amp;#27604;&amp;#23545;&amp;#25163;&amp;#26356;&amp;#29992;&amp;#24515;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#20843;&amp;#65306;&amp;#21407;&amp;#21017;&amp;#31532;&amp;#19968;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#32477;&amp;#19981;&amp;#25226;&amp;#31934;&amp;#21147;&amp;#25918;&amp;#22312;&amp;#33853;&amp;#21518;&amp;#30340;&amp;#21592;&amp;#24037;&amp;#36523;&amp;#19978;,&amp;#32780;&amp;#26159;&amp;#25226;&amp;#31934;&amp;#21147;&amp;#25918;&amp;#22312;&amp;#34920;&amp;#29616;&amp;#19981;&amp;#38169;&amp;#30340;&amp;#21592;&amp;#24037;&amp;#36523;&amp;#19978;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#20061;&amp;#65306;&amp;#22242;&amp;#38431;&amp;#31934;&amp;#31070;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#25026;&amp;#24471;&amp;#36890;&amp;#36807;&amp;#23562;&amp;#37325;&amp;#12289;&amp;#40723;&amp;#21169;&amp;#20854;&amp;#20182;&amp;#25104;&amp;#21592;&amp;#34920;&amp;#29616;&amp;#33258;&amp;#25105;&amp;#65292;&amp;#25972;&amp;#20010;&amp;#38598;&amp;#20307;&amp;#23450;&amp;#20250;&amp;#21464;&amp;#24471;&amp;#24378;&amp;#22823;&amp;#32780;&amp;#20196;&amp;#20154;&amp;#25964;&amp;#30031;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29436;&amp;#24615;&amp;#21407;&amp;#21017;&amp;#20043;&amp;#21313;&amp;#65306;&amp;#25345;&amp;#32493;&amp;#22522;&amp;#22240;&lt;br&gt;&amp;#39046;&amp;#23548;&amp;#32773;&amp;#24517;&amp;#39035;&amp;#25026;&amp;#24471;&amp;#36229;&amp;#36234;&amp;#21033;&amp;#30410;&amp;#30340;&amp;#25991;&amp;#21270;&amp;#25165;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#22242;&amp;#38431;&amp;#20957;&amp;#32858;&amp;#30340;&amp;#26680;&amp;#24515;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2100925220571858406?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2100925220571858406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2100925220571858406&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2100925220571858406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2100925220571858406'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2010/02/blog-post.html' title='狼性领导十大原则'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-80289290475921964</id><published>2009-11-29T09:43:00.001+08:00</published><updated>2009-11-29T09:43:04.173+08:00</updated><title type='text'>磁盘完整映像的mount</title><content type='html'>&lt;h1&gt;磁盘完整映像的mount&lt;/h1&gt;&lt;br&gt;在linux下我们常常用dd来对硬盘进行完整备份.本文告诉你如何把这个完整备份文件,mount到系统中加以利用.&lt;br&gt;dd做出来的备份,虽然没有压缩,体积巨大, 但是,我们可以把它的分区mount到系统中处理它的数据.&lt;br&gt;&lt;br&gt;要mount磁盘映像,就要用到mount的-o office参数来指定分区的开始位置. offset的参数的单位是字节.&lt;br&gt;我们只要找到分区的开始位置字节数, 就能顺利的mount这个磁盘映像的分区.&lt;br&gt;&lt;br&gt;可以使用fdisk来看每个分区的起始逻辑扇区号,扇区号乘以512就是我们所要的偏移值,&lt;br&gt;由下面的例子,我们可以看出有2个主分区,第2个是有效的,偏移分别是&lt;br&gt;hda1=2048*512=1048576,hda2=13672448*512=7000293376&lt;br&gt;因此mount命令分别是:&lt;br&gt;mount -o loop,offset=1048576 hda.img /mnt/hda1&lt;br&gt;mount -o loop,offset=7000293376 hda.img /mnt/hda2&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;#fdisk -l -u -C 1&amp;nbsp; hda.img&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;Disk hda: 0 MB, 0 bytes&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;255 heads, 63 sectors/track, 1 cylinders, total 0 sectors&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;Units = sectors of 1 * 512 = 512 bytes&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;Device Boot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Blocks&amp;nbsp;&amp;nbsp; Id&amp;nbsp; System&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;&amp;nbsp; hda1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2048&amp;nbsp;&amp;nbsp;&amp;nbsp; 13672447&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6835200&amp;nbsp;&amp;nbsp; 27&amp;nbsp; Unknown&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;Partition 1 does not end on cylinder boundary.&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;&amp;nbsp; hda2&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp; 13672448&amp;nbsp;&amp;nbsp; 117208191&amp;nbsp;&amp;nbsp;&amp;nbsp; 51767872&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp; HPFS/NTFS&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;Partition 2 has different physical/logical endings:&lt;/span&gt;&lt;br style="background-color: rgb(204, 204, 204);"&gt;&lt;span style="background-color: rgb(204, 204, 204);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; phys=(1023, 254, 63) logical=(7295, 222, 31)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;br&gt;原文：&lt;a title="http://www.anheng.com/news/29/1137.html" href="http://www.anheng.com/news/29/1137.html" id="bixn"&gt;http://www.anheng.com/news/29/1137.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-80289290475921964?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/80289290475921964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=80289290475921964&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/80289290475921964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/80289290475921964'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/11/mount.html' title='磁盘完整映像的mount'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6321997623553018907</id><published>2009-07-25T22:43:00.001+08:00</published><updated>2009-07-25T22:43:26.198+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>生日</title><content type='html'>又是一个生日了，今天去了灵隐寺爬山。&lt;br /&gt;在山脚下碰到一个奸商花了我十块钱买了把香，没走几步又碰到一个奸商花了我一百换了一把香。&lt;br /&gt;其实我是不想买的，不过只是他说的一句话让我买了。他说：“今天是佛的生日……”其它还说了什么我就不知道了，也没兴趣听。我只是想，既然佛和我是一天生日，那就给他施舍点好了，于是就花费了那一百。&lt;br /&gt;其实，根本用不着，到山顶就丢掉了。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6321997623553018907?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6321997623553018907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6321997623553018907&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6321997623553018907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6321997623553018907'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/07/blog-post.html' title='生日'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4307571875597468468</id><published>2009-07-15T23:15:00.001+08:00</published><updated>2009-07-15T23:15:16.451+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Nokia E71</title><content type='html'>又换了手机，这次是Nokia 的E71。&lt;br /&gt;总体来说还不错，商务机，可以使用WLAN上网很好很强大。&lt;br /&gt;不过细节上来说还是比不上以前的小西贴心咯，西门子的&lt;br /&gt;细节上做得很人性化。&lt;br /&gt;还是智能手机用起来舒服啊。花费了我2000多大洋还是比较值的。&lt;br /&gt;装一个Opera Mini，装一个搜狗输入法，上网一条腿啊！我现在就是在用手机发的这篇博客。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4307571875597468468?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4307571875597468468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4307571875597468468&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4307571875597468468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4307571875597468468'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/07/nokia-e71.html' title='Nokia E71'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-927399145957897129</id><published>2009-04-11T21:16:00.000+08:00</published><updated>2009-04-11T21:16:48.878+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>动态创建 style 节点</title><content type='html'>在 IE 中 DOM 方式创建页面内 style 节点有点问题～ （创建出来的东西是不能修改内容的）&lt;br /&gt;可用 document.createStyleSheet() 来解决：&lt;br /&gt;&lt;pre class="code"&gt;// create style node&lt;br /&gt;var _styleNode = _(u.STYLE_ID);&lt;br /&gt;if (!_styleNode) {&lt;br /&gt; if (/*@cc_on!@*/0) { // is IE&lt;br /&gt;  var ss = document.createStyleSheet();&lt;br /&gt;  ss.cssText = _defaultStyleText;&lt;br /&gt;  _styleNode = ss.owningElement; // the style node just created&lt;br /&gt;  _styleNode.id = u.STYLE_ID;&lt;br /&gt; } else { // other browsers&lt;br /&gt;  _styleNode = document.createElement("style");&lt;br /&gt;  _styleNode.id = u.STYLE_ID;&lt;br /&gt;  _styleNode.type = "text/css";&lt;br /&gt;  _styleNode.innerHTML = _defaultStyleText;&lt;br /&gt;  var head = document.getElementsByTagName("head")[0] || document.body;&lt;br /&gt;  head.appendChild(_styleNode);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;另外，对于 link 引入 css 可用：&lt;br /&gt;&lt;pre class="code"&gt;document.createStyleSheet("style.css");&lt;br /&gt;对应：&lt;br /&gt;var style = document.createElement("link");&lt;br /&gt;style.href = "style.css";&lt;br /&gt;style.rel = "stylesheet";&lt;br /&gt;style.type = "text/css";&lt;br /&gt;document.getElementsByTagName('head')[0].appendChild(style);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-927399145957897129?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/927399145957897129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=927399145957897129&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/927399145957897129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/927399145957897129'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/04/style.html' title='动态创建 style 节点'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8403164531003383214</id><published>2009-04-07T13:30:00.000+08:00</published><updated>2009-04-07T13:30:46.150+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>告别小西</title><content type='html'>清明的一个意外让我告别陪伴我四年的小西…… 伤感啊～&lt;br /&gt;&lt;br /&gt;虽然之前也摔过很多次一点事也没有，但这次竟然摔坏了 55555……（这次也没多高的说，以前从上铺掉下去也没事的），这次摔后当时感觉没啥事，是在之后才表现出来的，估计是内伤吧～ 可怜我的小西啊！还苦苦支撑了那么久，一次关机后就再也开不了了。&lt;br /&gt;&lt;br /&gt;要是平时我是不会这么快去买手机的（至少也要悼念我的小西一周嘛），但这段时间不能没有手机啊～&lt;br /&gt;&lt;br /&gt;昨天就去买了个山寨的，结果没用一天我就后悔了，不能个性化刷机不说（我过多依恋小西了），竟然不支持Java（小西的很多功能都是靠Java来扩展的，Opera也用不了了），亮度调低后在阳光下根本看不见（小西背光0%在阳光下都可以看得一清二楚），…… 早知道就买之前看上的哪款 OPPO A100 了 虽然贵了好几百。&lt;br /&gt;&lt;br /&gt;还有没有其他不爽的地方就不知道了，这些都够我不爽的了。&lt;br /&gt;&lt;br /&gt;我估计这个我一定不会用上半年，之所以还要用半年是因为我还花了几百块钱哪，不用上半年怎么值呢 ～～！&lt;br /&gt;&lt;br /&gt;还是老版的 SIEMENS 好，结实耐用（已经用了四年了又被摔过多次，要不是这次摔成内伤的话估计还可以继续用上两年），还可以自定个性化刷机！&lt;br /&gt;被收购后的西门子怎么样就不知道了～&lt;br /&gt;&lt;br /&gt;怀恋一下 &lt;a href="http://www.siediyer.com/"&gt;西客站&lt;/a&gt; 之后可能不会有机会再去访问了～&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8403164531003383214?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8403164531003383214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8403164531003383214&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8403164531003383214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8403164531003383214'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/04/blog-post_07.html' title='告别小西'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8619604655341086493</id><published>2009-04-04T21:29:00.000+08:00</published><updated>2009-04-04T21:29:05.617+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>挂青归来</title><content type='html'>在山上淋了两天雨 竟然没感冒 :D&lt;br /&gt;我身体还不错嘛&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8619604655341086493?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8619604655341086493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8619604655341086493&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8619604655341086493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8619604655341086493'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/04/blog-post.html' title='挂青归来'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8832472120972847988</id><published>2009-03-31T19:26:00.001+08:00</published><updated>2009-03-31T19:28:15.637+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Win32++: 在 Dialog 中使用 ListView</title><content type='html'>资源文件中有：&lt;br /&gt;&lt;pre class="code"&gt;IDD_MAIN DIALOG 0, 0, 186, 95&lt;br /&gt;...&lt;br /&gt;{&lt;br /&gt;  ...&lt;br /&gt;  CONTROL         "", IDC_LSTMAIN, WC_LISTVIEW, WS_TABSTOP | WS_BORDER | LVS_ALIGNLEFT | LVS_REPORT, 7, 7, 118, 81, WS_EX_LEFTSCROLLBAR&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;另有 Dialog ：&lt;br /&gt;&lt;pre class="code"&gt;class CMainDialog : public CDialog&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;private:&lt;br /&gt;    CListView   m_lsvMain;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;则，在：&lt;br /&gt;&lt;pre class="code"&gt;BOOL CMainDialog::OnInitDialog()&lt;br /&gt;{&lt;br /&gt;    // &lt;span style="color:green"&gt;加上下面这行：&lt;/span&gt;&lt;br /&gt;    m_lsvMain.AttachDlgItem(IDC_LSTMAIN, this);&lt;br /&gt;    // 用 AttachDlgItem(UINT nID, CWnd* pParent) 将Dialog的控件附加到CListView对象。&lt;br /&gt;    ...&lt;br /&gt;&lt;br /&gt;    // 添加列&lt;br /&gt;    m_lsvMain.InsertColumn(0, _T("Column 0"), LVCFMT_LEFT, 60);&lt;br /&gt;    //m_lsvMain.InsertColumn(1, _T("Column 1"), LVCFMT_LEFT, 60);&lt;br /&gt;&lt;br /&gt;    // 添加项&lt;br /&gt;    m_lsvMain.InsertItem(0, _T("Item 0"));&lt;br /&gt;    m_lsvMain.InsertItem(1, _T("Item 1"));&lt;br /&gt;    m_lsvMain.InsertItem(2, _T("Item 2"));&lt;br /&gt;    m_lsvMain.InsertItem(3, _T("Item 3"));&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;注：&lt;br /&gt;另外 641 中的 &lt;code&gt;InsertColumn(int iCol, LPCTSTR pszColumnHeading, int iFormat, int iWidth, int iSubItem)&lt;/code&gt; 和 &lt;code&gt;InsertItem(int iItem, LPCTSTR pszText)&lt;/code&gt; 是有 BUG 的。&lt;br /&gt;将 listview.h 更新到 SVN 里面最新的 749 后正常。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8832472120972847988?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8832472120972847988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8832472120972847988&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8832472120972847988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8832472120972847988'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/03/win32-dialog-listview.html' title='Win32++: 在 Dialog 中使用 ListView'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6204644240290127839</id><published>2009-03-29T22:17:00.000+08:00</published><updated>2009-03-29T22:17:34.583+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Win32++ CodeBlocks templates &amp; wizard</title><content type='html'>Win32++ is a C++ library used to build windows GUI applications.&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/win32-framework/"&gt;http://sourceforge.net/projects/win32-framework/&lt;/a&gt;&lt;br /&gt;Win32 平台上的一个轻量级的 C++ GUI开发库，可以用在 GCC 编译器中。&lt;br /&gt;document:&lt;br /&gt;&lt;a href="http://users.bigpond.net.au/programming/documentation.htm"&gt;http://users.bigpond.net.au/programming/documentation.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;自己花了点时间做了个简陋的 CodeBlocks 的新建 Win32++ 工程的模板向导。&lt;br /&gt;&lt;br /&gt;下载：&lt;br /&gt;&lt;a href="http://dl.getdropbox.com/u/163800/libs/cxx/Win32%2B%2B/codeblocks_templ.zip"&gt;http://dl.getdropbox.com/u/163800/libs/cxx/Win32%2B%2B/codeblocks_templ.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;安装步骤：&lt;br /&gt;1. 解包后将 wizard 下的 win32xx 目录放到 [CodeBlocks]\share\CodeBlocks\templates\wizard\ 去。&lt;br /&gt;（其中 [CodeBlocks] 表示 CodeBlocks 的安装目录）&lt;br /&gt;当然也可以放到用户目录中——具体参照 CodeBlocks 的 Wiki。&lt;br /&gt;&lt;br /&gt;2. 在 [CodeBlocks]\share\CodeBlocks\templates\wizard\ 中找到 config.script 文件，用文本编辑器打开，在 function RegisterWizards() { ... } 里面加一行：&lt;br /&gt;&lt;pre class="code"&gt;RegisterWizard(wizProject, _T("win32xx"), _T("Win32++ Application"), _T("GUI"));&lt;/pre&gt;&lt;br /&gt;3. 这样新建工程的 GUI 分类里面就有 "Win32++ GUI Application" 的选项了，按向导一步步走就可以了。&lt;br /&gt;（当然，前提是你要将 Win32++ 的库引入哦！——在“编译器选项”-&amp;gt;"Search directories"-&amp;gt;"Compiler"里面加入）&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6204644240290127839?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6204644240290127839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6204644240290127839&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6204644240290127839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6204644240290127839'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/03/win32-codeblocks-templates-wizard.html' title='Win32++ CodeBlocks templates &amp; wizard'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4340580615733283866</id><published>2009-03-28T19:51:00.000+08:00</published><updated>2009-03-28T19:51:12.725+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>SGU</title><content type='html'>说："The only mission is survive!"&lt;br /&gt;貌似 SGU 和 Revolution 都是 黑暗风格……&lt;br /&gt;莫非是受到 BSG 的影响么？&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4340580615733283866?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4340580615733283866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4340580615733283866&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4340580615733283866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4340580615733283866'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/03/sgu.html' title='SGU'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5162815532252891211</id><published>2009-03-28T19:49:00.000+08:00</published><updated>2009-03-28T19:49:06.876+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>访问Windowz的共享</title><content type='html'>samba，当然是samba了。（好像我还没听说过不基于samba的访问方式。。。）&lt;br /&gt;1.查看共享资源列表：（我这里好像匿名的不成啊！？）&lt;br /&gt;$ smbtree -U username&lt;br /&gt;这里username是对方的“共享用户”。默认(不使用"-U")是使用本机当前登录用户名，但注意密码还是要输入对方机器上该用户名的密码。&lt;br /&gt;2.访问对方共享资源：&lt;br /&gt;$ smbclient -U username //host/dir&lt;br /&gt;这里username同上，"//host/dir"是用smbtree查看到的对方共享资源（光只"//host/"是不成的）。&lt;br /&gt;这个smbclient是个像ftp一样的东西，如果你以前用过控制台下的ftp这个应该很容易上手 :)&lt;br /&gt;（BTW:有人说可以# mount -t smbfs ...的，但我的不行啊，也没有smbmount -_-，其实我个人觉得smbclient也不错，至少我对它不算陌生）&lt;br /&gt;===========================================&lt;br /&gt;# mount -t smbfs ...需要在编译内核的时候加入CONFIG_SMB_FS支持 ---- 07-01-24&lt;br /&gt;# mount -t cifs ... CONFIG_CIFS&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5162815532252891211?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5162815532252891211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5162815532252891211&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5162815532252891211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5162815532252891211'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/01/windowz.html' title='访问Windowz的共享'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4336289719062095009</id><published>2009-03-23T09:21:00.000+08:00</published><updated>2009-03-23T09:21:29.559+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>格格来了</title><content type='html'>小侄女，几个月大，很漂亮，比她母亲漂亮。&lt;br /&gt;今天早上教她吃面条，很可爱 :D&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4336289719062095009?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4336289719062095009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4336289719062095009&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4336289719062095009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4336289719062095009'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/03/blog-post.html' title='格格来了'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2344141590825515883</id><published>2009-03-23T09:03:00.002+08:00</published><updated>2009-03-28T19:50:07.277+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>BSG final</title><content type='html'>final 了，果然神叨叨的了～～。&lt;br /&gt;六号说，让一个复杂系统反复运行很长时间，最终令人惊讶的事情可能会发生。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2344141590825515883?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2344141590825515883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2344141590825515883&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2344141590825515883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2344141590825515883'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/03/bsg-final.html' title='BSG final'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-7947926518962120851</id><published>2009-03-17T20:38:00.001+08:00</published><updated>2009-03-17T20:58:31.525+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>instance initializer</title><content type='html'>虽然用Java一段时间了，不过还是第一次听到 instance initializer （实例初始化块）&lt;br /&gt;以前知道有一个 static initializer （静态初始化块）会在类加载的时候执行。&lt;br /&gt;instance initializer 则是在构造函数执行过程中的某一时刻执行。见代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;// LoadOrder.java&lt;br /&gt;&lt;br /&gt;public class LoadOrder {&lt;br /&gt;        private Property _property = new Property();&lt;br /&gt;&lt;br /&gt;        {       // instance initializer&lt;br /&gt;                System.out.println("{ Load Block 1 }");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        static { // static initializer&lt;br /&gt;                System.out.println("{ static 1 }");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public LoadOrder() {&lt;br /&gt;                System.out.println("LoadOrder()");&lt;br /&gt;                _property = new Property(this);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        {&lt;br /&gt;                System.out.println("{ Load Block 2 }");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        static {&lt;br /&gt;                System.out.println("{ static 2 }");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static void main(String[] args) {&lt;br /&gt;                System.out.println("==== main() 1 ====");&lt;br /&gt;                new LoadOrder();&lt;br /&gt;                System.out.println("==== main() 2 ====");&lt;br /&gt;                new LoadOrder();&lt;br /&gt;                Property referee = new Property();&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Property {&lt;br /&gt;        public Property() {&lt;br /&gt;                System.out.println("Property()");&lt;br /&gt;        }&lt;br /&gt;        public Property(Object owner) {&lt;br /&gt;                System.out.println("Property(Object)");&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;// EOF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;运行结果如下：&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;{ static 1 }&lt;br /&gt;{ static 2 }&lt;br /&gt;==== main() 1 ====&lt;br /&gt;Property()&lt;br /&gt;{ Load Block 1 }&lt;br /&gt;{ Load Block 2 }&lt;br /&gt;LoadOrder()&lt;br /&gt;Property(Object)&lt;br /&gt;==== main() 2 ====&lt;br /&gt;Property()&lt;br /&gt;{ Load Block 1 }&lt;br /&gt;{ Load Block 2 }&lt;br /&gt;LoadOrder()&lt;br /&gt;Property(Object)&lt;br /&gt;Property()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-7947926518962120851?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/7947926518962120851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=7947926518962120851&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7947926518962120851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7947926518962120851'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/03/instance-initializer.html' title='instance initializer'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-7990335042457920034</id><published>2009-02-20T13:19:00.000+08:00</published><updated>2009-02-20T13:19:14.447+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>junit 4 使用</title><content type='html'>NOTE:&lt;br /&gt;junit 4 中&lt;br /&gt;1. 测试类不需要继承 TestCase，直接在方法前用 @Test 即可。&lt;br /&gt;2. @BeforeClass, @AfterClass 方法需要是 public static 的。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-7990335042457920034?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/7990335042457920034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=7990335042457920034&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7990335042457920034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7990335042457920034'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/02/junit-4.html' title='junit 4 使用'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8336159933692724447</id><published>2009-02-07T09:19:00.003+08:00</published><updated>2009-02-07T09:21:36.487+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>网易的源</title><content type='html'>想不到163上也出现了一个源镜像，据说就是以前cn99的那个。&lt;br /&gt;&lt;a href="http://mirrors.163.com/"&gt;http://mirrors.163.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;用了一下，速度很快，但不是最新的。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8336159933692724447?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8336159933692724447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8336159933692724447&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8336159933692724447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8336159933692724447'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/02/blog-post.html' title='网易的源'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1701902755278044781</id><published>2009-01-31T16:42:00.008+08:00</published><updated>2009-01-31T16:45:31.278+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>svn portable</title><content type='html'>Apache 集成 Subversion 的Win32便携式版本。&lt;br /&gt;用做个人的版本管理之用。&lt;br /&gt;&lt;br /&gt;集成环境为：&lt;br /&gt;Apache 2.2.9&lt;br /&gt;PHP 5.2.6&lt;br /&gt;Subversion 1.5.5&lt;br /&gt;&lt;br /&gt;默认解压到 D:/ 下运行里面的 install.bat 就能用了。&lt;br /&gt;  若解压到其它地方修改 D:\svn\svn-win32-1.5.5\conf\httpd.conf 中的 ServerRoot 到正确的位置。&lt;br /&gt;  默认项目数据保存在 D:\svn\svn-win32-1.5.5\svn_data 中。&lt;br /&gt;（注：会注册服务 Apache2.2 ，若以前安装有 Apache2.2 就会安装失败。）&lt;br /&gt;运行 start.bat 启动&lt;br /&gt;（注：启动HTTP服务会用 80 端口，若被占用 则启动失败，在 D:\svn\svn-win32-1.5.5\conf\httpd.conf 中修改。）&lt;br /&gt;运行 uninstall.bat 卸载。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;访问 http://localhost/ 可以进行简单的管理：&lt;br /&gt;创建、删除 项目&lt;br /&gt;创建、删除 帐号、修改帐号密码&lt;br /&gt;&lt;br /&gt;修改帐号访问权限现在还是需要自己修改文件&lt;br /&gt;D:\svn\svn-win32-1.5.5\conf\svn\authz&lt;br /&gt;&lt;br /&gt;文件下载：&lt;a href="http://dl.getdropbox.com/u/163800/tools/svn_portable.zip"&gt;svn_portable.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;// EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1701902755278044781?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1701902755278044781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1701902755278044781&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1701902755278044781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1701902755278044781'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/01/svn-portable.html' title='svn portable'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4043047817658959012</id><published>2009-01-29T10:17:00.005+08:00</published><updated>2009-01-29T10:20:21.667+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>汗一下Gmail的Outbox -_-|||</title><content type='html'>Offline Gmail:&lt;br /&gt;&lt;a href="http://googlesystem.blogspot.com/2009/01/offline-gmail.html"&gt;http://googlesystem.blogspot.com/2009/01/offline-gmail.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;需要 &lt;a href="http://gears.google.com/"&gt;Google Gears&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4043047817658959012?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4043047817658959012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4043047817658959012&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4043047817658959012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4043047817658959012'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/01/gmailoutbox.html' title='汗一下Gmail的Outbox -_-|||'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5603839707534287065</id><published>2009-01-21T21:06:00.000+08:00</published><updated>2009-01-21T21:23:18.991+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>在程序中处理设备的热插拔通知</title><content type='html'>注册 WM_DEVICECHANGE 事件，但还不够。&lt;br /&gt;仅注册该事件则仅仅只会收到 DBT_DEVNODES_CHANGED 通知（包括光驱的弹出、收入，网络的通断等都会触发该事件）。&lt;br /&gt;所以还需要用 RegisterDeviceNotification() 注册相应的设备通知。&lt;br /&gt;&lt;pre class="code"&gt;HDEVNOTIFY RegisterDeviceNotification(&lt;br /&gt;  IN HANDLE hRecipient,  // 注册 WM_DEVICECHANGE 事件的窗口或Service句柄&lt;br /&gt;  IN LPVOID NotificationFilter, // DEV_BROADCAST_DEVICEINTERFACE 结构&lt;br /&gt;  IN DWORD Flags&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;BOOL UnregisterDeviceNotification(&lt;br /&gt;  IN HDEVNOTIFY Handle  // RegisterDeviceNotification() 返回的那个Handle&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;在 DEV_BROADCAST_DEVICEINTERFACE 结构里有个 dbcc_classguid 为需要监听的设备 GUID。&lt;br /&gt;MSDN 上说 RegisterDeviceNotification() 的 Flags 加上 DEVICE_NOTIFY_ALL_INTERFACE_CLASSES 后可以不要GUID 但我这里似乎 不能不要GUID～～ RegisterDeviceNotification() 时失败说 “Bad Data!”～ 不知道是怎么回事，也许没用对吧。&lt;br /&gt;&lt;br /&gt;参考：&lt;br /&gt;&lt;a href="http://www.microsoft.com/whdc/Driver/tips/PnPUmNotif.mspx"&gt;http://www.microsoft.com/whdc/Driver/tips/PnPUmNotif.mspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa363211(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa363211(VS.85).aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa363431(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa363431(VS.85).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;另外，在 Linux 上的热插拔通知 可用 udev, HAL, D-BUS。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5603839707534287065?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5603839707534287065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5603839707534287065&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5603839707534287065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5603839707534287065'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/01/blog-post_21.html' title='在程序中处理设备的热插拔通知'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2198800839247257450</id><published>2009-01-21T11:53:00.000+08:00</published><updated>2009-01-21T12:03:21.266+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>使用 RegEnumValue 要注意的地方</title><content type='html'>&lt;pre class="code"&gt;LONG RegEnumValue(&lt;br /&gt;  HKEY hKey,              // handle to key to query&lt;br /&gt;  DWORD dwIndex,          // index of value to query&lt;br /&gt;  LPTSTR lpValueName,     // address of buffer for value string&lt;br /&gt;  LPDWORD lpcbValueName,  // address for size of value buffer&lt;br /&gt;  LPDWORD lpReserved,     // reserved&lt;br /&gt;  LPDWORD lpType,         // address of buffer for type code&lt;br /&gt;  LPBYTE lpData,          // address of buffer for value data&lt;br /&gt;  LPDWORD lpcbData        // address for size of data buffer&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;返回值 ERROR_NO_MORE_ITEMS，表示都枚舉完了。&lt;br /&gt;dwIndex 為索引，如果是枚舉并刪除的話，就一直為0就行了。&lt;br /&gt;lpcbValueName 這個是ValueNameBuffer 的大小，這個地方要注意！！每次調用前設置成buffer大小，調用后都會設置成返回的ValueName實際的長度，所以這里需要在每次調用前都設置一下，@@ 暈死～，沒注意看MSDN。&lt;br /&gt;lpcbData 同上。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2198800839247257450?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2198800839247257450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2198800839247257450&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2198800839247257450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2198800839247257450'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/01/regenumvalue.html' title='使用 RegEnumValue 要注意的地方'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8863020170378208072</id><published>2009-01-12T09:11:00.000+08:00</published><updated>2009-01-12T09:12:59.376+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>google又换favicon了</title><content type='html'>今天发现google的favicon又换了，这次是几个鲜明的色块，不太喜欢这样的 -_-&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8863020170378208072?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8863020170378208072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8863020170378208072&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8863020170378208072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8863020170378208072'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/01/googlefavicon.html' title='google又换favicon了'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8783633261159094546</id><published>2009-01-11T21:06:00.000+08:00</published><updated>2009-01-11T21:14:18.967+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>修改文件/資料夾的用戶訪問權限</title><content type='html'>用WinAPI：&lt;br /&gt;&lt;pre class="code"&gt;BOOL SetFileSecurity(&lt;br /&gt;  LPCTSTR lpFileName,  // address of string for filename&lt;br /&gt;  SECURITY_INFORMATION SecurityInformation,&lt;br /&gt;                       // type of information to set&lt;br /&gt;  PSECURITY_DESCRIPTOR pSecurityDescriptor &lt;br /&gt;                       // address of security descriptor&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;如：&lt;br /&gt;&lt;pre class="code"&gt;::SetFileSecurity(szFileName, DACL_SECURITY_INFORMATION, psd);&lt;/pre&gt;其中 psd 的取得見上一篇：&lt;a href="http://dave3068.blogspot.com/2009/01/securityattributeslpsecuritydescriptor.html"&gt;http://dave3068.blogspot.com/2009/01/securityattributeslpsecuritydescriptor.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;另外，對上一篇的補充：&lt;br /&gt;SECURITY_ATTRIBUTES 中 lpSecurityDescriptor 的使用還可以使用 API ：&lt;br /&gt;SetSecurityDescriptorDacl&lt;br /&gt;SetSecurityDescriptorControl&lt;br /&gt;等。&lt;br /&gt;不過感覺一般情況下還是這個 ConvertStringSecurityDescriptorToSecurityDescriptor 方便些 :)。&lt;br /&gt;要如何使用就要看具體的場合了。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8783633261159094546?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8783633261159094546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8783633261159094546&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8783633261159094546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8783633261159094546'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/01/blog-post.html' title='修改文件/資料夾的用戶訪問權限'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3541354909473097330</id><published>2009-01-10T21:49:00.002+08:00</published><updated>2009-01-11T21:32:04.495+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>SECURITY_ATTRIBUTES.lpSecurityDescriptor 的使用</title><content type='html'>在 WinAPI：CreateFile 等函數中有個 SECURITY_ATTRIBUTES 可以用來控制文件的用戶訪問權限，但一直不知道SECURITY_ATTRIBUTES結構中的lpSecurityDescriptor如何設置，今天查了一下MSDN發現可以用函數：&lt;br /&gt;&lt;pre class="code"&gt;BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptor(&lt;br /&gt;  __in   LPCTSTR StringSecurityDescriptor,&lt;br /&gt;  __in   DWORD StringSDRevision,&lt;br /&gt;  __out  PSECURITY_DESCRIPTOR *SecurityDescriptor,&lt;br /&gt;  __out  PULONG SecurityDescriptorSize&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;來設置pSa-&gt;lpSecurityDescriptor。&lt;br /&gt;要使用該函數需要引入Sddl.h 頭文件，但 VC6 里面沒有這個頭文件。&lt;br /&gt;還有個方法是自己 LoadLibrary =&gt; GetProcAddress 來取得：&lt;br /&gt;ConvertStringSecurityDescriptorToSecurityDescriptor 在 Windows 2000 Professional 以上的 Advapi32.dll 中。&lt;br /&gt;可以用以下代碼得到：&lt;br /&gt;&lt;pre class="code"&gt;typedef BOOL (WINAPI *FN__CSSDTSD__) (&lt;br /&gt;  IN LPCTSTR,&lt;br /&gt;  IN DWORD,&lt;br /&gt;  OUT PSECURITY_DESCRIPTOR *,&lt;br /&gt;  OUT PULONG);&lt;br /&gt;&lt;br /&gt;FN__CSSDTSD__ ConvertStringSecurityDescriptorToSecurityDescriptor = NULL;&lt;br /&gt;&lt;br /&gt;//   SDDL   Version   information&lt;br /&gt;#define SDDL_REVISION_1  1&lt;br /&gt;#define SDDL_REVISION  SDDL_REVISION_1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void _initLIBS()&lt;br /&gt;{&lt;br /&gt; HMODULE hAdvapi32 = ::LoadLibrary("Advapi32");&lt;br /&gt; if (hAdvapi32)&lt;br /&gt; {&lt;br /&gt;  ConvertStringSecurityDescriptorToSecurityDescriptor =&lt;br /&gt;   (FN__CSSDTSD__)::GetProcAddress(&lt;br /&gt;    hAdvapi32,&lt;br /&gt;    "ConvertStringSecurityDescriptorToSecurityDescriptorA");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;參考：&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms717798.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms717798.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa379570%28VS.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa379570%28VS.85%29.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa376401%28VS.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa376401%28VS.85%29.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3541354909473097330?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3541354909473097330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3541354909473097330&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3541354909473097330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3541354909473097330'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2009/01/securityattributeslpsecuritydescriptor.html' title='SECURITY_ATTRIBUTES.lpSecurityDescriptor 的使用'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4771874763356158221</id><published>2008-12-31T20:42:00.000+08:00</published><updated>2008-12-31T21:26:32.394+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>替換Windows的Desktop時，如何獲取應用程序注冊的圖標？</title><content type='html'>今天整理硬盤的時候發現這個，放上來算了，希望對需要的人有幫助。&lt;br /&gt;是以前寫的一個東西——曾經覺得 Windows 的 Desktop 太難看了，所以打算自己寫一個。其它的沒啥子主要是些 GDI+ 的操作。&lt;br /&gt;中間遇到的最大問題是如何獲得應用程序對 TrayNotifyIcon 的注冊。關于這個問題曾經 debug 了 explorer.exe ，才得出以下方法：（Windows XP）&lt;br /&gt;&lt;br /&gt;1、如何接收應用程序的注冊圖標通知：&lt;br /&gt;自己實現一個Window注冊Class為&lt;b&gt;"Shell_TrayWnd"&lt;/b&gt;（Windows界面中的控件元素都可看作Window——所以叫做 Windows 嘛～～），其下一個子窗口（控件）注冊Class為"TrayNotifyWnd"。&lt;br /&gt;在注冊Class為"Shell_TrayWnd"的窗口中可處理 &lt;b&gt;WM_COPYDATA&lt;/b&gt; 消息：&lt;br /&gt;此時 lParam 為 PCOPYDATASTRUCT pcds&lt;br /&gt;(pcds-&amp;gt;dwData == 1) 時表示是一個通知消息&lt;br /&gt;此時的 pcds-&amp;gt;lpData 結構如下：&lt;br /&gt;（這是我自己定義的一個結構，不知道MSDN是否有這樣的結構，反正我是沒找到，所以自定義了個）&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #6aa84f;"&gt;// the struct for WM_COPYDATA to "Shell_TrayWnd"&lt;/span&gt;&lt;br /&gt;typedef struct _NOTIFY_MSG_DATA {&lt;br /&gt; DWORD dwUnknow;  &lt;span style="color: #6aa84f;"&gt;// ??? I don't know what's this ?&lt;/span&gt;&lt;br /&gt; DWORD dwNotifyCode; &lt;span style="color: #6aa84f;"&gt;// NIM_ADD, NIM_DELETE, NIM_MODIFY, ...&lt;/span&gt;&lt;br /&gt; NOTIFYICONDATA nid; &lt;span style="color: #6aa84f;"&gt;// 這里就是應用程序注冊圖標時的數據了&lt;/span&gt;&lt;br /&gt; bool operator== (const _NOTIFY_MSG_DATA&amp;amp; nmd) const&lt;br /&gt; {&lt;br /&gt;  return nid.hWnd == nmd.nid.hWnd;&lt;br /&gt; };&lt;br /&gt;} NOTIFY_MSG_DATA, *PNOTIFY_MSG_DATA;&lt;br /&gt;&lt;/pre&gt;子窗口注冊Class為"TrayNotifyWnd"主要是想和 explorer.exe 保持一致罷了，接收消息的實質上是"Shell_TrayWnd"。&lt;br /&gt;&lt;br /&gt;另外，要注意的是：&lt;br /&gt;&lt;pre class="code"&gt;if (pnid-&gt;uFlags &amp; NIF_ICON) &lt;span style="color: #6aa84f;"&gt;// pnid為上面的NOTIFYICONDATA的指針&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #6aa84f;"&gt;// Some applications destroy the icon immediately after completing the&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #6aa84f;"&gt;// NIM_ADD/MODIFY message, so we have to make a copy of it.&lt;/span&gt;&lt;br /&gt; if (hIcon)&lt;br /&gt;  ::DestroyIcon(hIcon);&lt;br /&gt; hIcon = (HICON) ::CopyIcon(pnid-&gt;hIcon);&lt;br /&gt;&lt;br /&gt; bChanged = true;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;某些程序在注冊圖標后會 destory 這個 hIcon ，所以最好是自己拷貝一份——要不然也會出現某些得到的圖標莫名其妙不見了的情況。&lt;br /&gt;&lt;br /&gt;2、explorer.exe 出異常中途結束后重啟，得到被終結之前的圖標。&lt;br /&gt;（在XP之前的Win版本中是會丟失的——失去之前注冊的程序圖標）&lt;br /&gt;XP 中主要在以下注冊表項目中，以二進制方式存儲：&lt;br /&gt;&lt;pre class="code"&gt;[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify]&lt;br /&gt;IconStreams 当前项目&lt;br /&gt;PastIconsStream 过去的项目&lt;br /&gt;&lt;/pre&gt;存儲的數據格式如何，自己dump一下就知道了 :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;嗯……其它的就沒有什么好多說的了，基本上就是一些 GDI+ 操作了。&lt;br /&gt;&lt;br /&gt;哦！還有就是 explorer.exe 除了桌面外，還充當文件管理器等其它的作用，所以要替換它的話除了繪制桌面還要做其它方面的準備，或者那些方面的替代品。&lt;br /&gt;&lt;br /&gt;差不多就是這些了，以上！&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4771874763356158221?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4771874763356158221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4771874763356158221&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4771874763356158221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4771874763356158221'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/12/windowsdesktop.html' title='替換Windows的Desktop時，如何獲取應用程序注冊的圖標？'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-256750566974523520</id><published>2008-12-13T21:16:00.000+08:00</published><updated>2008-12-13T21:21:28.549+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>DOM 还是 SAX</title><content type='html'>选择 DOM 还是选择 SAX，这取决于下面几个因素：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;应用程序的目的：&lt;/b&gt;如果打算对数据作出更改并将它输出为 XML，那么在大多数情况下，DOM 是适当的选择。并不是说使用 SAX 就不能更改数据，但是该过程要复杂得多，因为您必须对数据的一份拷贝而不是对数据本身作出更改。&lt;/li&gt;&lt;li&gt;&lt;b&gt;数据容量：&lt;/b&gt; 对于大型文件，SAX 是更好的选择。&lt;/li&gt;&lt;li&gt;&lt;b&gt;数据将如何使用：&lt;/b&gt;如果只有数据中的少量部分会被使用，那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面，如果您知道自己以后会回头引用已处理过的大量信息，那么 SAX 也许不是恰当的选择。&lt;/li&gt;&lt;li&gt;&lt;b&gt;对速度的需要：&lt;/b&gt; SAX 实现通常要比 DOM 实现更快。&lt;/li&gt;&lt;/ul&gt;SAX 和 DOM 不是相互排斥的，记住这点很重要。您可以使用 DOM 来创建 SAX 事件流，也可以使用 SAX 来创建 DOM 树。事实上，用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务！&lt;br /&gt;&lt;br /&gt;參考：&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84979"&gt;http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84979&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-256750566974523520?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/256750566974523520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=256750566974523520&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/256750566974523520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/256750566974523520'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/12/dom-sax.html' title='DOM 还是 SAX'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5162663543690424724</id><published>2008-12-11T11:47:00.001+08:00</published><updated>2008-12-11T11:48:05.383+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>網頁互動游戲 Stargate Origin</title><content type='html'>&lt;a href="http://www.stargate-origin.com/"&gt; 網頁 Stargate Origin&lt;/a&gt;&lt;br /&gt;是一個網頁游戲，主要是造東西然后再造東西，還有掠奪別人的東西…… 比較無聊。&lt;br /&gt;&lt;br /&gt;昨天申請了個帳號，今天登錄發現被掠奪一空了 -_-|||| &lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5162663543690424724?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://bbs.sger.net/viewthread.php?tid=88750&amp;extra=&amp;page=1' title='網頁互動游戲 Stargate Origin'/><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5162663543690424724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5162663543690424724&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5162663543690424724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5162663543690424724'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/12/stargate-origin.html' title='網頁互動游戲 Stargate Origin'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3878562112210580573</id><published>2008-12-10T22:50:00.000+08:00</published><updated>2008-12-10T22:55:09.339+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>struts 配置文件中元素的順序</title><content type='html'>今天才發現原來 struts 配置文件中元素之間的順序是有要求的。&lt;br /&gt;&lt;br /&gt;controller 放在 message-resources 之前會報錯，雖然程序能夠正常運行，但在加載的時候會報一個“配置文件解析錯誤”。&lt;br /&gt;&lt;br /&gt;看來順序還是不能變～&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3878562112210580573?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3878562112210580573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3878562112210580573&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3878562112210580573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3878562112210580573'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/12/struts.html' title='struts 配置文件中元素的順序'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1462731146411265157</id><published>2008-12-10T08:24:00.000+08:00</published><updated>2008-12-10T08:50:06.900+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>一个怪异都梦</title><content type='html'>昨天晚上做了个梦，大致是这样的：&lt;br /&gt;&lt;br /&gt;似乎是在急匆匆的赶夜路，夜空非常的&lt;b&gt;清明&lt;/b&gt;，奇怪的是空中找不到月亮，但是空中有三颗很亮的星，看起来有两颗在一等星或一等星以上，另一颗大概是二等星，由于这三颗星的亮度太大，其它星基本看不到。虽然我移动的很快，但仍然感觉得到三颗星都在移动，而且是不规则的运动轨迹，想停下来仔细看看，但发现停不下来──哦~ 原来我躺在一个敞篷的运输车厢里，旁边还挤着其他一些穿着和我一样的人。&lt;br /&gt;&lt;br /&gt;飞星！飞星！&lt;br /&gt;以上情节与《三体》中的场景很象吧？很奇怪我怎么会做这样的梦，《三体》我看过少说也有一两年了，怎么会在这时候梦到就奇怪了。&lt;br /&gt;不过也不一定就是“飞星”，人造天体/飞行器具 也说不定，还有可能是导弹的尾焰……&lt;br /&gt;&lt;br /&gt;大概在这里，就迷迷糊糊的醒来了，之后似乎又迷迷糊糊的睡着了……&lt;br /&gt;总体来说昨晚的睡眠质量特差，断断续续的醒来又迷迷糊糊的睡去，这样往复不断，之后似乎也做了些梦，但都记不得了~~。&lt;br /&gt;&lt;br /&gt;这个梦给我印象最深的就是 夜空 ，夜空非常的清明，稀稀的伴着几朵薄薄的云彩。这样的夜空已经很久没有看到过了，至少在我现在住的地方是看不到的。记得最接近的就是我上湘大时的图书馆前坪看到过比较接近的夜空──那是在图书馆还没实行亮化工程前，实行亮化之后也看不到了。&lt;br /&gt;&lt;br /&gt;不知道要待到何时才能再次在现实中看到这样的夜空？我希望能在我住的地方仰头就能看到这样的夜空 :)&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1462731146411265157?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1462731146411265157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1462731146411265157&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1462731146411265157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1462731146411265157'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/12/blog-post.html' title='一个怪异都梦'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2387144443513678344</id><published>2008-12-07T10:55:00.000+08:00</published><updated>2008-12-07T11:14:53.034+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>ASP.NET TreeView check childs/parents</title><content type='html'>給 ASP.NET 的 TreeView 寫了一個掛件，主要功能就是在 TreeView 是 ShowCheckBox 模式的時候，當勾選某個節點時能自動的勾選這個節點相關的所有父節點，以及勾選、反勾選這個節點的所有子節點。&lt;br /&gt;&lt;br /&gt;功能很簡單純 javascript 實現：&lt;br /&gt;&lt;pre class="code"&gt;/*************************************************************************&lt;br /&gt; * change the tree view node's child nodes check-state, when check&lt;br /&gt; * this node.&lt;br /&gt; *&lt;br /&gt; *   NOTE: for ASP.NET TreeView&lt;br /&gt; *&lt;br /&gt; * @author h_Davy&lt;br /&gt; * @version 2008-12-5&lt;br /&gt; *************************************************************************/&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * check the tree node's childs with this checkbox's stats&lt;br /&gt; *&lt;br /&gt; * @param chk   the check box element&lt;br /&gt; *&lt;br /&gt; * @private&lt;br /&gt; */&lt;br /&gt;function _checkTreeChilds(chk)&lt;br /&gt;{&lt;br /&gt;    var childId = chk.id.replace('CheckBox', 'Nodes');&lt;br /&gt;    var child = document.getElementById(childId);&lt;br /&gt;    if (child) {&lt;br /&gt;        var chks = child.getElementsByTagName('input');&lt;br /&gt;        for (var i in chks) {&lt;br /&gt;            if (chks[i].type == "checkbox") {&lt;br /&gt;                chks[i].checked = chk.checked;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * find out the checkbox-node's parent node's checkbox id&lt;br /&gt; *&lt;br /&gt; * @param chk       the check box element&lt;br /&gt; * @param treeView  the treeView element&lt;br /&gt; *&lt;br /&gt; * @return  the parent node checkbox id&lt;br /&gt; *&lt;br /&gt; * @private&lt;br /&gt; */&lt;br /&gt;function _findTreeParentId(chk, treeView)&lt;br /&gt;{&lt;br /&gt;    if (!chk) return null;&lt;br /&gt;    var tmpElm = chk.parentNode;&lt;br /&gt;    for(;;) {&lt;br /&gt;        if (tmpElm.tagName == "TABLE") {&lt;br /&gt;            return tmpElm.parentNode.id.replace('Nodes', 'CheckBox');&lt;br /&gt;        } else {&lt;br /&gt;        // go up to find out the parent node, until touch the treeview&lt;br /&gt;            tmpElm = tmpElm.parentNode;&lt;br /&gt;            if (tmpElm == treeView) return null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * check the tree node's parent w this checkbox is checked&lt;br /&gt; *&lt;br /&gt; * @param chk   the check box element&lt;br /&gt; * @param treeView  the treeView element&lt;br /&gt; *&lt;br /&gt; * @private&lt;br /&gt; */&lt;br /&gt;function _checkTreeParent(chk, treeView)&lt;br /&gt;{&lt;br /&gt;    if (!chk.checked) return;&lt;br /&gt;    var tmpChk;&lt;br /&gt;    var parentId = _findTreeParentId(chk);&lt;br /&gt;    for(;;) {&lt;br /&gt;        if (!parentId) return;&lt;br /&gt;        if (chk.checked) {&lt;br /&gt;            tmpChk = document.getElementById(parentId);&lt;br /&gt;            if (!tmpChk || tmpChk == treeView) return;&lt;br /&gt;            tmpChk.checked = true;&lt;br /&gt;        }&lt;br /&gt;        parentId = _findTreeParentId(tmpChk, treeView);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * use this bind to a tree view&lt;br /&gt; *&lt;br /&gt; * @param id    the tree view's id (NOTE: it's the HTML node id, not .NET page server id)&lt;br /&gt; */&lt;br /&gt;function bindCheckEvent(id) {&lt;br /&gt;    var treeView = document.getElementById(id);&lt;br /&gt;    var chks = treeView.getElementsByTagName('input');&lt;br /&gt;    for(var i in chks) {&lt;br /&gt;        if (chks[i].type == "checkbox") {&lt;br /&gt;            chks[i].onclick = function() {&lt;br /&gt;                _checkTreeChilds(this);&lt;br /&gt;                _checkTreeParent(this, treeView);&lt;br /&gt;            };&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// -- EOF --&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用方法，在要使用的頁面導入以上代碼后，在頁面結尾處加上：&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;bindCheckEvent('TreeView1');&lt;br /&gt;// 這里的 'TreeView1' 就是那個TreeView的ID&lt;br /&gt;// ！！！注意：這里的ID指的是最終生成的HTML頁面中的ID，&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果你的TreeView是在某個使用了模板頁的內容頁里面的話，&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 就有可能是 'ctl00_ContentPlaceHolder1_TreeView1' 了。&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2387144443513678344?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2387144443513678344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2387144443513678344&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2387144443513678344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2387144443513678344'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/12/aspnet-treeview-check-childsparents.html' title='ASP.NET TreeView check childs/parents'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3038762067316312888</id><published>2008-11-30T10:02:00.000+08:00</published><updated>2008-11-30T10:14:59.748+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Linux 中使用NetBeans部署、运行Web应用要注意目录权限设置</title><content type='html'>使用的是 tomcat&lt;br /&gt;要注意以下几个目录的权限要当前用户可写&lt;br /&gt;&lt;br /&gt;$CATALINA_HOME/conf/Catalina/localhost/&lt;br /&gt;$CATALINA_HOME/webapps/&lt;br /&gt;$CATALINA_HOME/work/Catalina/localhost/&lt;br /&gt;$CATALINA_HOME/temp/&lt;br /&gt;&lt;br /&gt;否则，有可能会出现无法写入部署目录而部署失败：&lt;br /&gt;&lt;blockquote&gt;Failed to deploy application at context path /xxx&lt;/blockquote&gt;&lt;br /&gt;另外，还要注意&lt;br /&gt;$CATALINA_HOME/bin/&lt;br /&gt;下几个.sh文件的当前用户执行权限，不然tomcat都无法运行。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3038762067316312888?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3038762067316312888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3038762067316312888&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3038762067316312888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3038762067316312888'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/11/linux-netbeansweb.html' title='Linux 中使用NetBeans部署、运行Web应用要注意目录权限设置'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6232736826539017358</id><published>2008-11-23T09:20:00.002+08:00</published><updated>2008-11-23T16:12:10.443+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>限用存储过程</title><content type='html'>存储过程是个好东西，但是偶尔用用就好了，不要过分的使用！&lt;br /&gt;特别的在业务逻辑较复杂的应用中 或 在表间关系较复杂的应用中。这时候如果大量使用了存储过程，在后期系统维护、功能改进的过程中你会非常痛苦的~~！！！&lt;br /&gt;业务逻辑尽量交给应用来做。&lt;br /&gt;&lt;br /&gt;// EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6232736826539017358?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6232736826539017358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6232736826539017358&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6232736826539017358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6232736826539017358'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/11/blog-post.html' title='限用存储过程'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2947025875790226055</id><published>2008-11-18T14:21:00.000+08:00</published><updated>2008-11-18T14:25:57.874+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux Admin IQ Test</title><content type='html'>問題見：&lt;br /&gt;&lt;a href="http://www.infoworld.com/tools/quiz/news/IQ2008linux-news-quiz.php"&gt;http://www.infoworld.com/tools/quiz/news/IQ2008linux-news-quiz.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;只的了 65 分啊～～&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Question 1: Which vendor has never branded its own Linux?&lt;br /&gt;&lt;br /&gt;5 points&lt;br /&gt;c. IBM&lt;br /&gt;&lt;br /&gt;Even SCO briefly offered its own Linux product. Big Blue, despite being an enthusiastic Linux backer, has always partnered with other distributors instead of packaging its own version of the OS.&lt;br /&gt;&lt;br /&gt;Question 2: Why GRUB over LILO?&lt;br /&gt;&lt;br /&gt;5 points&lt;br /&gt;d. You want to boot from a network&lt;br /&gt;&lt;br /&gt;LILO supports a wide variety of boot configurations, but you'll need the more modern GRUB if you want to boot from a network.&lt;br /&gt;&lt;br /&gt;Question 4: What's a "shebang"?&lt;br /&gt;&lt;br /&gt;5 points&lt;br /&gt;a. A unique sequence of characters that indicates the start of a shell script&lt;br /&gt;&lt;br /&gt;Short for "shell bang," shebang is a hash or pound sign (#) followed by an exclamation mark (!), known in Unix parlance as a "bang."&lt;br /&gt;&lt;br /&gt;Question 8: Which graphics chip vendor hasn't released a Linux driver?&lt;br /&gt;&lt;br /&gt;5 points&lt;br /&gt;c. Nvidia&lt;br /&gt;&lt;br /&gt;Although most of the competition has released open source drivers for at least some of their graphics chips, Nvidia has remained a staunch holdout.&lt;br /&gt;&lt;br /&gt;Question 15: What's the benefit of noatime?&lt;br /&gt;&lt;br /&gt;5 points&lt;br /&gt;a. It improves performance by reducing the frequency of disk writes&lt;br /&gt;&lt;br /&gt;Normally, Linux will update the time stamp on a file every time it is accessed. With the noatime option, the kernel will update files only when their contents are changed.&lt;br /&gt;&lt;br /&gt;Question 16: Which virt tech allows Windows VMs to run on Linux?&lt;br /&gt;&lt;br /&gt;5 points&lt;br /&gt;c. Xen&lt;br /&gt;&lt;br /&gt;Most of the virtualization software listed can only launch other instances of Linux. Xen can support Windows virtual machines also, provided your processor supports Intel VT or AMD-V technology.&lt;br /&gt;&lt;br /&gt;Question 17: What's a "binary blob"?&lt;br /&gt;&lt;br /&gt;5 points&lt;br /&gt;a. A driver that is loaded into the kernel as a binary object, for which no source code is available&lt;br /&gt;&lt;br /&gt;The Linux community is divided over the practice of running closed source code as part of the Linux kernel, but when hardware vendors refuse to release their specifications, it's often the only option.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2947025875790226055?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2947025875790226055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2947025875790226055&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2947025875790226055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2947025875790226055'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/11/linux-admin-iq-test.html' title='Linux Admin IQ Test'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8816344837548399456</id><published>2008-11-02T10:06:00.000+08:00</published><updated>2008-11-02T10:11:13.377+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>javascript 中判断是否为IE的技巧</title><content type='html'>利用 IE 中 jscript/javascript 的“条件编译”&lt;br /&gt;条件编译：&lt;br /&gt;&lt;code&gt;/*@cc_on, @if, @elif, @else, @end, @*/&lt;/code&gt;&lt;br /&gt;如：&lt;br /&gt;&lt;pre class="code"&gt;/*@cc_on&lt;br /&gt;   @if (@_win32)&lt;br /&gt;      document.write("操作系统是32位windows。浏览器是IE。");&lt;br /&gt;   @else&lt;br /&gt;      document.write("操作系统不是32位windows。浏览器是IE。"); // 这个是不会输出的&lt;br /&gt;   @end&lt;br /&gt;@*/&lt;br /&gt;&lt;/pre&gt;技巧：&lt;br /&gt;&lt;pre class="code"&gt;    if (!/*@cc_on!@*/0) { //if not IE&lt;br /&gt;        //Firefox2、Firefox3、Safari3.1+、Opera9.6+ support &lt;br /&gt;    } else {&lt;br /&gt;        //IE6、IE7 support &lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8816344837548399456?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8816344837548399456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8816344837548399456&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8816344837548399456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8816344837548399456'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/11/javascript-ie.html' title='javascript 中判断是否为IE的技巧'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1481044360915548498</id><published>2008-10-25T18:49:00.002+08:00</published><updated>2008-10-25T19:07:05.883+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>mono+mysql 出现 EntryPointNotFoundException: CreateSemaphore</title><content type='html'>今天试着在 Mono 中使用 mySql 的连接驱动 "MySql.Data.dll" 时出现异常：&lt;br /&gt;&lt;pre class="code"&gt;System.EntryPointNotFoundException: CreateSemaphore&lt;br /&gt;  at (wrapper managed-to-native) MySql.Data.Common.Semaphore:CreateSemaphore (MySql.Data.Common.SECURITY_ATTRIBUTES&amp;,int,int,string)&lt;br /&gt;  at MySql.Data.Common.Semaphore..ctor (Int32 initialCount, Int32 maximumCount) [0x00000] &lt;br /&gt;  at (wrapper remoting-invoke-with-check) MySql.Data.Common.Semaphore:.ctor (int,int)&lt;br /&gt;  at MySql.Data.MySqlClient.MySqlPool..ctor (MySql.Data.MySqlClient.MySqlConnectionString settings) [0x00000] &lt;br /&gt;  at MySql.Data.MySqlClient.MySqlPoolManager.GetPool (MySql.Data.MySqlClient.MySqlConnectionString settings) [0x00000] &lt;br /&gt;  at MySql.Data.MySqlClient.MySqlConnection.Open () [0x00000] &lt;/pre&gt;google 后发现 似乎时需要在连接字符串中设置 "Pooling=false"&lt;br /&gt;&lt;pre class="code"&gt;private const string CONNECTION_STRING = "server={0};database={1};uid={2};pwd={3};Pooling=false;";&lt;/pre&gt;这样就正常了。&lt;br /&gt;原因还不清楚……&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1481044360915548498?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1481044360915548498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1481044360915548498&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1481044360915548498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1481044360915548498'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/10/monomysql-entrypointnotfoundexception.html' title='mono+mysql 出现 EntryPointNotFoundException: CreateSemaphore'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-405157025722714392</id><published>2008-10-14T08:39:00.000+08:00</published><updated>2008-10-14T08:46:33.736+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>OpenOffice 3.0 在 KDE 下的一点小问题</title><content type='html'>3.0速度快了很多，感觉很爽！&lt;br /&gt;但是有个小问题，就是：&lt;br /&gt;“Tools”等几个菜单项选中的时候会挂掉（Arch 的 KDE4桌面环境）&lt;br /&gt;解决方法：&lt;br /&gt;&lt;code&gt;export OOO_FORCE_DESKTOP=gnome&lt;/code&gt;&lt;br /&gt;就好了，据说是因为3.0里面没有支持KDE的主题所致。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-405157025722714392?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/405157025722714392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=405157025722714392&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/405157025722714392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/405157025722714392'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/10/openoffice-30-kde.html' title='OpenOffice 3.0 在 KDE 下的一点小问题'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8046693240222841236</id><published>2008-10-08T19:41:00.000+08:00</published><updated>2008-10-08T19:49:50.154+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>DIV+CSS 布局时要注意的</title><content type='html'>左右浮动分栏布局时要记得清除浮动，否则下面的东西会上来哦！&lt;br /&gt;在一行的浮动，之后不需要浮动的时候，记得在中间加上一个清除浮动层：&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;div style="clear:both;line-height:0;height:0;font-size:0;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;或：&lt;br /&gt;.clear {clear:both;line-height:0;height:0;font-size:0;}&lt;br /&gt;...&lt;br /&gt;&amp;lt;div class="clear"&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;例：&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;双栏&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;&lt;br /&gt;body {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-align: center;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#body {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-align: left;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 95%;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; margin: 0pt auto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; min-width: 640px; /* IE6 不支持 */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#header {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; background-color: #def;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#content {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.left {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float: left;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 20%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.right {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float: left;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 80%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#foot {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font-size: .8em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color: #999;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-align: center;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#header, #content, #foot {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;p, h1 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; margin: 0pt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; padding: 5pt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;*, body {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; font-family: "Verdana", Geneva, Sans-Serif;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*font-size: 10pt;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;div id="body"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="header"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;this is the header&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="content"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div class="left"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Left&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Left&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Left&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Left&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Left&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Left&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Left&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Left&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div class="right"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Right&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Right&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Right&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Right&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Right&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Right&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- 去掉下面这行试试 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div style="clear:both;line-height:0;height:0;font-size:0;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="foot"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copyright &amp;amp;copy; 2008, h_Davy; Powered by: VIM;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8046693240222841236?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8046693240222841236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8046693240222841236&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8046693240222841236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8046693240222841236'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/10/divcss.html' title='DIV+CSS 布局时要注意的'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-123916648368848815</id><published>2008-10-05T21:55:00.001+08:00</published><updated>2008-10-05T22:00:04.209+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>一些字节的单位</title><content type='html'>如下是一些存储中用到的单位，及其换算：&lt;br /&gt;&lt;br /&gt;bit, Byte, KiloByte(KB,KiB), MegaByte(MB,MiB), GigaByte(GB,GiB), TeraByte(TB,TiB),&lt;br /&gt;PetaByte(PB,PiB), ExaByte(EB,EiB), ZettaByte(ZB,ZiB), YottaByte(YB,YiB)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1 bit &lt;/li&gt;&lt;li&gt;8 bits = 1 Byte (on most systems) &lt;/li&gt;&lt;li&gt;1024 bytes = 1 KiloByte (KBytes or KB or KiB) &lt;/li&gt;&lt;li&gt;1024*1024 bytes = 1024 KB = 1 MegaByte (MBytes or MB or MiB) &lt;/li&gt;&lt;li&gt;1024*1024*1024 bytes = 1024*1024 KB = 1024 MB = 1 GigaByte (GBytes or GB or GiB) &lt;/li&gt;&lt;li&gt;1024*1024*1024*1024 bytes = 1024*1024*1024 KB = 1024*1024 MB = 1024 GB = 1 TeraByte (TBytes or TB or TiB) &lt;/li&gt;&lt;li&gt;1024*1024*1024*1024*1024 bytes = 1024*1024*1024*1024 KB = 1024*1024*1024 MB = 1024*1024 GB = 1024 TB = 1 PetaByte (PBytes or PB or PiB) &lt;/li&gt;&lt;li&gt;1024*1024*1024*1024*1024*1024 bytes = 1024*1024*1024*1024*1024 KB = 1024*1024*1024*1024 MB = 1024*1024*1024 GB = 1024*1024 TB = 1024 PB = 1 ExaByte (EBytes or EB or EiB) &lt;/li&gt;&lt;li&gt;1024*1024*1024*1024*1024*1024*1024 bytes = 1024*1024*1024*1024*1024*1024 KB = 1024*1024*1024*1024*1024 MB = 1024*1024*1024*1024 GB = 1024*1024*1024 TB = 1024*1024 PB = 1024 EB = 1 ZettaByte (ZBytes or ZB or ZiB) &lt;/li&gt;&lt;li&gt;1024*1024*1024*1024*1024*1024*1024*1024 bytes = 1024*1024*1024*1024*1024*1024*1024 KB = 1024*1024*1024*1024*1024*1024 MB = 1024*1024*1024*1024*1024 GB = 1024*1024*1024*1024 TB = 1024*1024*1024 PB = 1024*1024 EB = 1024 ZB = 1 YottaByte (YBytes or YB or YiB) &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;参考：&lt;a href="http://en.wikipedia.org/wiki/Byte"&gt;http://en.wikipedia.org/wiki/Byte&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-123916648368848815?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/123916648368848815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=123916648368848815&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/123916648368848815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/123916648368848815'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/10/blog-post.html' title='一些字节的单位'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-582615325773609309</id><published>2008-10-02T20:47:00.005+08:00</published><updated>2008-10-02T20:57:07.626+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>使用 vim, ctags 来记带书签的笔记</title><content type='html'>个人比较偏好纯文本的记录，因为不管何种严苛的条件下只要能查看文本文档就能够读取。&lt;br /&gt;（当然某些特殊的笔记还是需要依靠富文本才能完成的）&lt;br /&gt;&lt;br /&gt;在某些时候希望这些纯文本的记录能够带上书签就更好了——特别是当这些记录日渐积累过多的时日——能够带上目录索引就更好了。&lt;br /&gt;&lt;br /&gt;记得 vim 的help文档么？都是纯文本文件，但是它有带书签、索引的特性跳来跳去，并且还带少量高亮。&lt;br /&gt;&lt;br /&gt;看来仅依靠 vim 自带的这个功能就可以做到了。&lt;br /&gt;&lt;br /&gt;如何做呢？&lt;br /&gt;只需在每个文本文档末尾加上：&lt;br /&gt;&lt;pre class="code"&gt;&amp;nbsp;vim:ft=help&lt;/pre&gt;&lt;br /&gt;就能让 vim 在读取该文档后按照vim help来解析。&lt;br /&gt;&lt;br /&gt;仅仅这样么？&lt;br /&gt;还不够！&lt;br /&gt;那么如何能够让 vim 在文本中支持书签功能呢？&lt;br /&gt;随便打开一个vim的帮助文档看看就知道了。&lt;br /&gt;&lt;br /&gt;通过两个"*"括起来的字符来锚定书签，&lt;br /&gt;通过两个"|"括起来的字符来索引书签。&lt;br /&gt;如：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;索引 &lt;font color="#3366ff"&gt;|the_first_bookmark|&lt;/font&gt;&lt;br /&gt;书签 &lt;font color="#33ccff"&gt;*the_first_bookmark*&lt;/font&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;在“索引”后面的"the_first_bookmark"上面Ctrl+]来跳转到&lt;br /&gt;“书签”后面的"the_first_bookmark"所在位置，&lt;br /&gt;然后按Ctrl+T（或Ctrl+O）可以跳回原来的“索引”后的"the_first_bookmark"所在位置。&lt;br /&gt;还能支持不同文件之间的书签跳转，当然前提是书签不能够重名！！！&lt;br /&gt;&lt;br /&gt;什么？不能跳，提示没有“tag”文件？&lt;br /&gt;哦！忘记说了，还有条vim的命令：&lt;br /&gt;&lt;pre class="code"&gt;:helptags .&lt;/pre&gt;&lt;br /&gt;表示构建当前目录下的*.txt文件的vim help tag索引。&lt;br /&gt;能否构建成功关键是看你的系统里面是否有ctags程序（一般开发用Linux都会有的）&lt;br /&gt;没有的话可以到 &lt;a href="http://ctags.sf.net/ "&gt;http://ctags.sf.net/ &lt;/a&gt;去下载（有Windows版本）&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;要注意的是：&lt;/span&gt;&lt;br /&gt;书签的命名规则，字符串中间不要有空格，不要有除"_"之外的符号。&lt;br /&gt;还有就是当前目录下不要有重名的书签——就是说所有"*"中间的字符串们不要有重复的。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;其他：&lt;br /&gt;分隔行，支持如下三种高亮分隔行（内容分块显示，看起来更清晰）：&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;===========================================================================&lt;br /&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;感兴趣的话，还可以玩玩ASCII艺术。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;总结如下：&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;文件结尾 vim解析标识：&lt;br /&gt;&lt;pre class="code"&gt;&amp;nbsp;vim:ft=help&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"*"中间的字符串锚定命名书签&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"|"中间的字符串索引到指定命名的书签&lt;/li&gt;&lt;br /&gt;&lt;li&gt;构建tags索引：&lt;br /&gt;&lt;pre class="code"&gt;:helptags .&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-582615325773609309?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/582615325773609309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=582615325773609309&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/582615325773609309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/582615325773609309'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/10/vim-ctags.html' title='使用 vim, ctags 来记带书签的笔记'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2624828654431248192</id><published>2008-09-28T13:33:00.007+08:00</published><updated>2008-09-28T14:52:58.524+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'>用kexec快速切换内核</title><content type='html'>详见：&lt;a href="http://www.linuxsir.org/main/node/296"&gt;http://www.linuxsir.org/main/node/296&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总的来说：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;内核版本必需为 2.6.13 或以上，因为自该版本起内置了 kexec 系统调用的程序。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;内核编译需加入 kexec 支援&lt;br /&gt;&lt;pre class="code"&gt;Processor type and features ---&amp;gt;&lt;br /&gt;&lt;br /&gt;[*] kexec system call (EXPERIMENTAL)&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;系统需要安装 kexec-tools&lt;/li&gt;&lt;br /&gt;&lt;li&gt;用 /sbin/kexec 加载另一内核，语法是：&lt;br /&gt;&lt;pre class="code"&gt;kexec -l &amp;lt;kernel-image&amp;gt; --append="&amp;lt;command-line-options&amp;gt;" &lt;br /&gt;如：&lt;br /&gt;kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317"&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;想重启内核，就以 kexec -e 来切换。&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2624828654431248192?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2624828654431248192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2624828654431248192&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2624828654431248192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2624828654431248192'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/09/kexec.html' title='用kexec快速切换内核'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2073841808414892273</id><published>2008-09-26T11:39:00.004+08:00</published><updated>2008-09-28T14:52:30.541+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='MyProject'/><title type='text'>FtpViewer 初始版本源代码</title><content type='html'>源代码下载：&lt;a href="http://sites.google.com/site/dave3068/Home/my-project/FtpViewer_src.zip"&gt;http://sites.google.com/site/dave3068/Home/my-project/FtpViewer_src.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;见：http://sites.google.com/site/dave3068/Home/my-project&lt;br /&gt;&lt;br /&gt;history:&lt;br /&gt;2008-09-26 最初版本。&lt;br /&gt;2008-09-27 有所改进，界面有所改进、增加删除功能。（今后不会再增加功能，有违做这个软件的初衷）&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;注：&lt;br /&gt;为何不加入上传下载功能？&lt;br /&gt;毕竟我写这个工具的初衷是：某FTP提供限额文件存放服务，而我的限额到了，我想看看哪些东西占用空间，并将其删除，并没有其它需求。&lt;br /&gt;而对于FTP的上传、下载：每个操作系统安装后一般都默认自带了命令行的ftp工具，通过脚本可以很方便的实现文件的上传、下载。所以我认为没必要再提供多余的操作。&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2073841808414892273?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2073841808414892273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2073841808414892273&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2073841808414892273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2073841808414892273'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/09/ftpviewer.html' title='FtpViewer 初始版本源代码'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5884729833194531153</id><published>2008-09-26T11:15:00.003+08:00</published><updated>2008-09-26T11:31:27.558+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>sun.net.ftp.FtpClient 编码问题解决</title><content type='html'>使用 sun.net.ftp.FtpClient 在遇到中文文件名和中文目录名时会出现些问题。&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;list() 得到的文件名乱码，这个很好解决：&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; /**&lt;br /&gt;  * 字符编码转换：ISO-8859-1 =&gt; GBK&lt;br /&gt;  * &lt;br /&gt;  * @param str&lt;br /&gt;  * @return&lt;br /&gt;  * @throws UnsupportedEncodingException&lt;br /&gt;  */&lt;br /&gt; public static String iso2Gbk(String str)&lt;br /&gt;   throws UnsupportedEncodingException {&lt;br /&gt;  return new String(str.getBytes("ISO-8859-1"), "GBK");&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;遇到某中文目录时会无法进入，这个问题困扰我好几天（这几天一直在摆弄这个）。&lt;br /&gt;发现服务端接收到的中文目录名都成乱码了，一开始我以为通过 new String() 的方式也可以解决。&lt;br /&gt;其实不然，怎么试都不行，好象在 sun.net.ftp.FtpClient 里面会自动转换成 ISO 的编码。&lt;br /&gt;今天偶然有机会看到 sun.net.ftp.FtpClient 的源码才发现果然如此。&lt;br /&gt;sun.net.ftp.FtpClient 有个超类 sun.net.NetworkClient 在里面会将所有传输出去的编码都转换成 ISO 的。看来问题出在这里了。&lt;br /&gt;同时 sun.net.NetworkClient 还有个：&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;    /* Name of encoding to use for output */&lt;br /&gt;    protected static String encoding;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;这个可以控制其编码，于是乎：&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; /**&lt;br /&gt;  * 设置连接编码&lt;br /&gt;  * &lt;br /&gt;  * @param encodingStr&lt;br /&gt;  */&lt;br /&gt; public static void setEncoding(String encodingStr) {&lt;br /&gt;  sun.net.NetworkClient .encoding = encodingStr;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;将编码设置成 GBK 问题即解决。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;至此，遇到的两个编码问题都已解决，一切都是那么轻松 ^_^ 。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5884729833194531153?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5884729833194531153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5884729833194531153&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5884729833194531153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5884729833194531153'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/09/sunnetftpftpclient.html' title='sun.net.ftp.FtpClient 编码问题解决'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5139976681376529538</id><published>2008-09-25T13:20:00.001+08:00</published><updated>2008-09-25T13:21:49.275+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>回来了！LinuxSir 终于回来了！</title><content type='html'>历时一个半月。&lt;a href="http://www.linuxsir.org/"&gt;LinuxSir&lt;/a&gt; 终于又回来了 ！！！&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5139976681376529538?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5139976681376529538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5139976681376529538&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5139976681376529538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5139976681376529538'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/09/linuxsir.html' title='回来了！LinuxSir 终于回来了！'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-92342826276394220</id><published>2008-09-22T21:51:00.004+08:00</published><updated>2008-09-23T08:26:58.145+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>Java 获取FTP文件大小</title><content type='html'>使用 sun.net.ftp.FtpClient。&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;package&lt;/font&gt; h.davy;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt; h.davy.ftp.FtpFileInfo;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt; java.io.IOException;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt; java.util.ArrayList;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt; java.util.List;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt; java.util.StringTokenizer;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt; sun.net.TelnetInputStream;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt; sun.net.ftp.FtpClient;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; Test {&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; test() {&lt;br /&gt;        FtpClient ftp = &lt;font color="#c00058"&gt;null&lt;/font&gt;;&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; {&lt;br /&gt;            ftp = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; FtpClient();&lt;br /&gt;            ftp.openServer(&lt;font color="#c00058"&gt;&amp;quot;192.168.1.27&amp;quot;&lt;/font&gt;);&lt;br /&gt;            ftp.login(&lt;font color="#c00058"&gt;&amp;quot;t01&amp;quot;&lt;/font&gt;, &lt;font color="#c00058"&gt;&amp;quot;12345&amp;quot;&lt;/font&gt;);&lt;br /&gt;            &lt;font color="#406090"&gt;// ftp.login(&amp;quot;anonymous&amp;quot;, &amp;quot;anonymous@do.c&amp;quot;);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            System.out.println(ftp.pwd()); &lt;font color="#406090"&gt;// 当前目录&lt;/font&gt;&lt;br /&gt;            System.out.println(ftp.system());&lt;br /&gt;&lt;br /&gt;            System.out.println(&lt;font color="#c00058"&gt;&amp;quot;===============================&amp;quot;&lt;/font&gt;);&lt;br /&gt;            ftp.ascii();&lt;br /&gt;            &lt;font color="#406090"&gt;// 获取目录文件列表详细信息&lt;/font&gt;&lt;br /&gt;            TelnetInputStream listStream = ftp.list();&lt;br /&gt;            &lt;font color="#2e8b57"&gt;&lt;b&gt;byte&lt;/b&gt;&lt;/font&gt;[] buf = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;byte&lt;/b&gt;&lt;/font&gt;[&lt;font color="#c00058"&gt;2048&lt;/font&gt;];&lt;br /&gt;            &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; n = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;            &lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; (&lt;font color="#c00058"&gt;true&lt;/font&gt;) {&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (&lt;font color="#c00058"&gt;0&lt;/font&gt; &amp;gt; (n = listStream.read(buf, &lt;font color="#c00058"&gt;0&lt;/font&gt;, buf.length)))&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                System.out.println(n);&lt;br /&gt;                String fileName = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; String(buf, &lt;font color="#c00058"&gt;0&lt;/font&gt;, n);&lt;br /&gt;                System.out.println(fileName);&lt;br /&gt;            }&lt;br /&gt;            listStream.close(); &lt;font color="#406090"&gt;// 需要这个关闭流&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            System.out.println(&lt;font color="#c00058"&gt;&amp;quot;===============================&amp;quot;&lt;/font&gt;);&lt;br /&gt;            getFilesInfo(ftp, &lt;font color="#c00058"&gt;&amp;quot;/&amp;quot;&lt;/font&gt;);&lt;br /&gt;            System.out.println(&lt;font color="#c00058"&gt;&amp;quot;===============================&amp;quot;&lt;/font&gt;);&lt;br /&gt;            System.out.println(getFileSize(ftp, &lt;font color="#c00058"&gt;&amp;quot;/test.tar.bz2&amp;quot;&lt;/font&gt;));&lt;br /&gt;            System.out.println(getFileSize(ftp, &lt;font color="#c00058"&gt;&amp;quot;/phpMyAdmin/index.php&amp;quot;&lt;/font&gt;));&lt;br /&gt;            System.out.println(&lt;font color="#c00058"&gt;&amp;quot;===============================&amp;quot;&lt;/font&gt;);&lt;br /&gt;            getFilesInfo(ftp, &lt;font color="#c00058"&gt;&amp;quot;/phpMyAdmin&amp;quot;&lt;/font&gt;);&lt;br /&gt;            &lt;font color="#406090"&gt;// 退出登录&lt;/font&gt;&lt;br /&gt;            ftp.sendServer(&lt;font color="#c00058"&gt;&amp;quot;QUIT&lt;/font&gt;&lt;font color="#6a5acd"&gt;\r\n&lt;/font&gt;&lt;font color="#c00058"&gt;&amp;quot;&lt;/font&gt;);&lt;br /&gt;        } &lt;font color="#804040"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (IOException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        } &lt;font color="#804040"&gt;&lt;b&gt;finally&lt;/b&gt;&lt;/font&gt; {&lt;br /&gt;            &lt;font color="#406090"&gt;// try {&lt;/font&gt;&lt;br /&gt;            &lt;font color="#406090"&gt;// ftp.closeServer();&lt;/font&gt;&lt;br /&gt;            &lt;font color="#406090"&gt;// } catch (IOException e) {&lt;/font&gt;&lt;br /&gt;            &lt;font color="#406090"&gt;// e.printStackTrace();&lt;/font&gt;&lt;br /&gt;            &lt;font color="#406090"&gt;// }&lt;/font&gt;&lt;br /&gt;        }&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; -&lt;font color="#c00058"&gt;1&lt;/font&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     *&lt;/font&gt;&lt;font color="#6a5acd"&gt; 获取某文件大小&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     *&lt;/font&gt;&lt;font color="#6a5acd"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     &lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt; ftp&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt; filePath&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@return&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@throws&lt;/font&gt;&lt;font color="#008080"&gt; IOException&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     */&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;long&lt;/b&gt;&lt;/font&gt; getFileSize(FtpClient ftp, String filePath) &lt;font color="#2e8b57"&gt;&lt;b&gt;throws&lt;/b&gt;&lt;/font&gt; IOException {&lt;br /&gt;        ftp.binary(); &lt;font color="#406090"&gt;// 需要切换到 Binary 模式&lt;/font&gt;&lt;br /&gt;        ftp.sendServer(String.format(&lt;font color="#c00058"&gt;&amp;quot;SIZE %s&lt;/font&gt;&lt;font color="#6a5acd"&gt;\r\n&lt;/font&gt;&lt;font color="#c00058"&gt;&amp;quot;&lt;/font&gt;, filePath));&lt;br /&gt;        StringBuffer sb = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; StringBuffer();&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; (&lt;font color="#c00058"&gt;true&lt;/font&gt;) {&lt;br /&gt;            &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; c = ftp.serverInput.read();&lt;br /&gt;            &lt;font color="#2e8b57"&gt;&lt;b&gt;char&lt;/b&gt;&lt;/font&gt; ch = (&lt;font color="#2e8b57"&gt;&lt;b&gt;char&lt;/b&gt;&lt;/font&gt;) c;&lt;br /&gt;            &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (c &amp;lt; &lt;font color="#c00058"&gt;0&lt;/font&gt; || ch == &lt;font color="#c00058"&gt;'&lt;/font&gt;&lt;font color="#6a5acd"&gt;\n&lt;/font&gt;&lt;font color="#c00058"&gt;'&lt;/font&gt;) { &lt;font color="#406090"&gt;// end of stream || end of line&lt;/font&gt;&lt;br /&gt;                StringTokenizer tk = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; StringTokenizer(sb.toString());&lt;br /&gt;                &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; index = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; (tk.hasMoreTokens()) {&lt;br /&gt;                    String token = tk.nextToken();&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (index == &lt;font color="#c00058"&gt;1&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; {&lt;br /&gt;                            &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; Long.parseLong(token);&lt;br /&gt;                        } &lt;font color="#804040"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (NumberFormatException e) {&lt;br /&gt;                            &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; -&lt;font color="#c00058"&gt;1L&lt;/font&gt;;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    index++;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (ch == &lt;font color="#c00058"&gt;'&lt;/font&gt;&lt;font color="#6a5acd"&gt;\n&lt;/font&gt;&lt;font color="#c00058"&gt;'&lt;/font&gt;)&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;continue&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;            &lt;font color="#804040"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt; &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (c &amp;lt;= &lt;font color="#c00058"&gt;0&lt;/font&gt;)&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;            sb.append(ch);&lt;br /&gt;        }&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; -&lt;font color="#c00058"&gt;1L&lt;/font&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     *&lt;/font&gt;&lt;font color="#6a5acd"&gt; 获取某目录中的所有文件&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     *&lt;/font&gt;&lt;font color="#6a5acd"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     &lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt; ftp&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt; path&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@return&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@throws&lt;/font&gt;&lt;font color="#008080"&gt; IOException&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     */&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; List&amp;lt;FtpFileInfo&amp;gt; getFilesInfo(FtpClient ftp, String path)&lt;br /&gt;            &lt;font color="#2e8b57"&gt;&lt;b&gt;throws&lt;/b&gt;&lt;/font&gt; IOException {&lt;br /&gt;        List&amp;lt;FtpFileInfo&amp;gt; ret = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; ArrayList&amp;lt;FtpFileInfo&amp;gt;();&lt;br /&gt;&lt;br /&gt;        ftp.cd(path); &lt;font color="#406090"&gt;// 切换到指定目录&lt;/font&gt;&lt;br /&gt;        ftp.ascii(); &lt;font color="#406090"&gt;// 需要切换到 ASCII 模式&lt;/font&gt;&lt;br /&gt;        TelnetInputStream listStream = ftp.list();&lt;br /&gt;        StringBuffer sb = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; StringBuffer();&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; (&lt;font color="#c00058"&gt;true&lt;/font&gt;) {&lt;br /&gt;            &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; c = listStream.read();&lt;br /&gt;            &lt;font color="#2e8b57"&gt;&lt;b&gt;char&lt;/b&gt;&lt;/font&gt; ch = (&lt;font color="#2e8b57"&gt;&lt;b&gt;char&lt;/b&gt;&lt;/font&gt;) c;&lt;br /&gt;            &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (c &amp;lt; &lt;font color="#c00058"&gt;0&lt;/font&gt; || ch == &lt;font color="#c00058"&gt;'&lt;/font&gt;&lt;font color="#6a5acd"&gt;\n&lt;/font&gt;&lt;font color="#c00058"&gt;'&lt;/font&gt;) { &lt;font color="#406090"&gt;// end of stream || end of line&lt;/font&gt;&lt;br /&gt;                FtpFileInfo ffi = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; FtpFileInfo();&lt;br /&gt;                StringTokenizer tk = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; StringTokenizer(sb.toString());&lt;br /&gt;                &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; index = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; (tk.hasMoreTokens()) {&lt;br /&gt;                    String token = tk.nextToken();&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;switch&lt;/b&gt;&lt;/font&gt; (index) {&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;0&lt;/font&gt;: &lt;font color="#406090"&gt;// file attribute string&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#406090"&gt;// 这里可以根据 attribute string 分析该文件是否为目录。&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#406090"&gt;// （若为目录第一个字符为&amp;quot;d&amp;quot;）&lt;/font&gt;&lt;br /&gt;                        ffi.setAttributeStr(token);&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;1&lt;/font&gt;: &lt;font color="#406090"&gt;// ??&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;2&lt;/font&gt;: &lt;font color="#406090"&gt;// owner&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;3&lt;/font&gt;: &lt;font color="#406090"&gt;// group&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;4&lt;/font&gt;: &lt;font color="#406090"&gt;// file size&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; {&lt;br /&gt;                            ffi.setFileSize(Long.parseLong(token));&lt;br /&gt;                        } &lt;font color="#804040"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (NumberFormatException e) {&lt;br /&gt;                            e.printStackTrace();&lt;br /&gt;                        }&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;5&lt;/font&gt;: &lt;font color="#406090"&gt;// month&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;6&lt;/font&gt;: &lt;font color="#406090"&gt;// day&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;7&lt;/font&gt;: &lt;font color="#406090"&gt;// time&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                    &lt;font color="#804040"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/font&gt; &lt;font color="#c00058"&gt;8&lt;/font&gt;: &lt;font color="#406090"&gt;// file name&lt;/font&gt;&lt;br /&gt;                        ffi.setFileName(token);&lt;br /&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;                    }&lt;br /&gt;                    index++;&lt;br /&gt;                }&lt;br /&gt;                ret.add(ffi);&lt;br /&gt;                sb.setLength(&lt;font color="#c00058"&gt;0&lt;/font&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (ch == &lt;font color="#c00058"&gt;'&lt;/font&gt;&lt;font color="#6a5acd"&gt;\n&lt;/font&gt;&lt;font color="#c00058"&gt;'&lt;/font&gt;) {&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;continue&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;            } &lt;font color="#804040"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt; &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (c &amp;lt;= &lt;font color="#c00058"&gt;0&lt;/font&gt;)&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;            sb.append(ch);&lt;br /&gt;        }&lt;br /&gt;        listStream.close(); &lt;font color="#406090"&gt;// 需要这个关闭流&lt;/font&gt;&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; ret;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     &lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt; args&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;     */&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; main(String[] args) {&lt;br /&gt;        System.out.println(test());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;注：其中的 FtpFileInfo 仅仅是个人定义的一个 Java Bean 没什么实质的内容。&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;注：对于 ftp.list() 打开的流需要关闭，要不然后续读取操作会被挂起。&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-92342826276394220?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/92342826276394220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=92342826276394220&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/92342826276394220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/92342826276394220'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/09/java-ftp.html' title='Java 获取FTP文件大小'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4106705354803644148</id><published>2008-09-21T21:04:00.000+08:00</published><updated>2008-09-21T21:05:14.093+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>some photos</title><content type='html'>http://www.getdropbox.com/gallery/163800/1/2008-09-17?h=c63c62&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4106705354803644148?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4106705354803644148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4106705354803644148&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4106705354803644148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4106705354803644148'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/09/some-photos.html' title='some photos'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1711598789843955028</id><published>2008-09-15T09:15:00.002+08:00</published><updated>2008-09-15T09:18:33.944+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>SGER 回来了！</title><content type='html'>回来了！回来了！终于回来了！&lt;br /&gt;&lt;a href="http://bbs.sger.net/"&gt;http://bbs.sger.net/&lt;/a&gt; 终于回来了！&lt;br /&gt;好激动啊！ 可惜丢失了3个多月的数据。&lt;br /&gt;&lt;br /&gt;另外期待 linuxsir 也能尽快回来！&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1711598789843955028?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1711598789843955028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1711598789843955028&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1711598789843955028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1711598789843955028'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/09/sger.html' title='SGER 回来了！'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5052582012183421015</id><published>2008-08-09T09:41:00.000+08:00</published><updated>2008-08-09T09:42:55.548+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>开幕式</title><content type='html'>还有印象的：&lt;br /&gt;&lt;br /&gt;击缶（第一印象——好大的CPU。。。）&lt;br /&gt;贯穿开幕式的画卷&lt;br /&gt;大脚印&lt;br /&gt;会场真的很热～～`` 释放了这么多热量到空气中全集中在那里。。。（庆幸自己没去，嗯……）&lt;br /&gt;&lt;br /&gt;最后，辛苦李林了，发福的年纪了还要被吊在上面折腾～～&lt;br /&gt;（话说中间有一段他“跑”快了，看起来就像是在被后面展开的画卷追赶一样 :D，不过后面还是调整过来了。）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;总体来说我对这个开模式不太满意（特别是点火部分），和我心目中的还是有些距离。（可能我科幻看多了吧）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5052582012183421015?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5052582012183421015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5052582012183421015&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5052582012183421015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5052582012183421015'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/08/blog-post.html' title='开幕式'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-869581530746195351</id><published>2008-08-05T09:49:00.004+08:00</published><updated>2008-08-05T09:55:10.165+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>proftpd 限制用户目录</title><content type='html'>proftpd 是个不错的FTP服务端。&lt;br /&gt;&lt;br /&gt;在 /etc/proftpd.conf 中配置&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;DefaultRoot  ~&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;即可将登录的用户限制在其$HOME中（要不然用户登录后连"/"都能访问）。&lt;br /&gt;&lt;br /&gt;另外加入&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&amp;lt;Limit LOGIN&amp;gt;&lt;br /&gt; DenyUser username&lt;br /&gt;&amp;lt;/Limit&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;可限制登录用户。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-869581530746195351?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/869581530746195351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=869581530746195351&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/869581530746195351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/869581530746195351'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/08/proftpd.html' title='proftpd 限制用户目录'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1713355993840278084</id><published>2008-08-01T22:43:00.002+08:00</published><updated>2008-08-01T22:49:28.163+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux 版 QQ ？</title><content type='html'>听说 TX 出了 Linux 版的QQ，我下载了 tar 版的。&lt;br /&gt;但是，这个可怜的QQ，在我的硬盘上仅存在了 10秒不到～～&lt;br /&gt;马上就被我删掉了，太恶心了～～&lt;br /&gt;花哨的界面和简陋的功能严重不匹配～ 有心思做花哨的界面还不如多花点心思来完善功能。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1713355993840278084?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1713355993840278084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1713355993840278084&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1713355993840278084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1713355993840278084'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/08/linux-qq.html' title='Linux 版 QQ ？'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3785217171881531982</id><published>2008-07-29T08:12:00.000+08:00</published><updated>2008-07-29T08:18:19.435+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>用上KDE4.1了</title><content type='html'>昨天 Arch 官方升级了KDE到4.1，昨天没注意，今天早上开始时吓了一跳~~&lt;br /&gt;&lt;br /&gt;不过也好，迟早是要升级的。就是刚开始从3.5到4.1还有些不太适应。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3785217171881531982?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3785217171881531982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3785217171881531982&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3785217171881531982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3785217171881531982'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/07/kde41.html' title='用上KDE4.1了'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3182766101494994678</id><published>2008-07-21T21:35:00.000+08:00</published><updated>2008-07-21T21:37:20.507+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Komodo</title><content type='html'>Komodo Edit 是 ActiveState 的IDE的一个免费版，具有一些基本的 IDE 功能。支持 HTML/CSS/javascript/Perl/Python/PHP/Ruby 等。&lt;br /&gt;&lt;br /&gt;Komodo 是使用 Python 开发的，基于 XUL （据说ActiveState出钱出人，在FireFox中占了一席之地，专门开发Python for XUL scripting）所以 Komodo 看起来会和 FireFox 有些像，特别是那个 Extension Manager（当然这个是连接上ActiveState的插件站点——不过似乎可以安装FireFox的JavaScript debugger）。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://community.activestate.com/"&gt;http://community.activestate.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3182766101494994678?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3182766101494994678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3182766101494994678&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3182766101494994678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3182766101494994678'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/07/komodo.html' title='Komodo'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-7889098609969934345</id><published>2008-07-06T13:40:00.000+08:00</published><updated>2008-07-06T13:41:21.575+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>untitle</title><content type='html'>要面对未知。只有宽容才能正视，正视才能理解，而理解才能超越。。。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-7889098609969934345?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/7889098609969934345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=7889098609969934345&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7889098609969934345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7889098609969934345'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/07/untitle.html' title='untitle'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3667850127936295409</id><published>2008-06-25T11:35:00.001+08:00</published><updated>2008-06-25T11:37:10.592+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STL'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>std::for_each 调用本类的成员函数</title><content type='html'>std::for_each 是个好用的东西，不过在调用本类的成员函数时稍微遇到点问题。&lt;br /&gt;在网上查找了N久，然后经过自己调试终于得到一个稍微简便的方法：&lt;br /&gt;（结合 std::bind1st 和 std::mem_fun）&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&lt;font color="#406090"&gt;// coding by : h_Davy&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;//&lt;/font&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;#include &lt;/font&gt;&lt;font color="#c00058"&gt;&amp;lt;iostream&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;#include &lt;/font&gt;&lt;font color="#c00058"&gt;&amp;lt;vector&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#804040"&gt;&lt;b&gt;using&lt;/b&gt;&lt;/font&gt;&amp;nbsp;std::out;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Test&lt;br /&gt;{&lt;br /&gt;&lt;font color="#804040"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test() {};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;push(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vi.push_back(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;show()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::for_each(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vi.begin(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vi.end(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::bind1st(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::mem_fun&amp;lt;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;, Test, &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;Test::print1 ), &lt;font color="#804040"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;&amp;nbsp;) );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;font color="#804040"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;gt; vi;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;print1(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt;&amp;lt; &lt;font color="#c00058"&gt;&amp;quot;&amp;gt; &amp;quot;&lt;/font&gt;&amp;nbsp;&amp;lt;&amp;lt; i &amp;lt;&amp;lt; &lt;font color="#c00058"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#6a5acd"&gt;\n&lt;/font&gt;&lt;font color="#c00058"&gt;&amp;quot;&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test t;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.push(&lt;font color="#c00058"&gt;123&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.push(&lt;font color="#c00058"&gt;456&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.push(&lt;font color="#c00058"&gt;789&lt;/font&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.show();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;（以上代码在 GCC 4 中编译通过，并正常运行）&lt;br /&gt;&lt;br /&gt;如果是 MS-VC6 稍微需要些修改：&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;VC6 中似乎不支持 void 的返回值，所以那个成员函数的返回值改成 int 或 任何你觉得合适的类型。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VC6 中应该将 std::mem_fun 改成 std::mem_fun1 。&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;如此，VC6 中能正常使用。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3667850127936295409?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3667850127936295409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3667850127936295409&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3667850127936295409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3667850127936295409'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/06/stdforeach.html' title='std::for_each 调用本类的成员函数'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-404835323714943084</id><published>2008-06-14T22:03:00.004+08:00</published><updated>2008-12-10T18:31:30.581+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>试用 VS.PHP</title><content type='html'>前几天搞了个 Vs.Php 来，今天试用了一下。&lt;br /&gt;&lt;br /&gt;VS.PHP 是一个 PHP 开发的 IDE（基于M$提供的VS.NET） ，我下载的是 VS.Php.for.Visual.Studio.2005。&lt;br /&gt;装好后像VC那样在提供一个新建工程的模板。新建工程再新建php文件后就可以写代码了。&lt;br /&gt;&lt;br /&gt;不过比较奇怪的是，老是运行不起来～～&lt;br /&gt;（按理说，安装好后Apache,PHP都自带了的啊）&lt;br /&gt;&lt;br /&gt;最后发现是没能正常创建 httpd.conf 所致，配置：&lt;br /&gt;Project =&gt; Properties =&gt; Configuration Properties =&gt; Debug =&gt; Advanced =&gt; Apache configuration template&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MGvKv7nV5OA/SFPYTF7oaoI/AAAAAAAAAo0/glmMnrDzRgU/s1600-h/untitled.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_MGvKv7nV5OA/SFPYTF7oaoI/AAAAAAAAAo0/glmMnrDzRgU/s320/untitled.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5211747016319199874" /&gt;&lt;/a&gt;&lt;br /&gt;将VS.PHP安装目录中带的 "httpd-template.conf" （httpd.conf模板文件） 设置到此处，然后就会在工程所在目录中根据该模板自动创建一个 .httpd.conf 文件。&lt;br /&gt;然后运行成功。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;—— 让我感觉到奇怪的是 php.ini 都能自动找到并创建，这个 httpd.conf 的模板怎么就没找到呢？好像其他人也没这样的情况～～ 难道和我用的是试用版有关？还是说是我的RPWT 囧？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-404835323714943084?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/404835323714943084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=404835323714943084&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/404835323714943084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/404835323714943084'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/06/vsphp.html' title='试用 VS.PHP'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MGvKv7nV5OA/SFPYTF7oaoI/AAAAAAAAAo0/glmMnrDzRgU/s72-c/untitled.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5937769005572900744</id><published>2008-05-28T20:40:00.001+08:00</published><updated>2008-05-28T20:41:45.013+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>竟然还是无法面对自己 = =</title><content type='html'>事情过去几年了，想不到我竟然还是无法面对自己。&lt;br /&gt;shit!&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5937769005572900744?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5937769005572900744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5937769005572900744&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5937769005572900744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5937769005572900744'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/05/blog-post.html' title='竟然还是无法面对自己 = ='/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8353101940937809350</id><published>2008-04-08T09:16:00.002+08:00</published><updated>2008-04-08T09:20:52.478+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>买刻录机有一年了~</title><content type='html'>今天又刻了几张碟。想起来，我买这个刻录机也有一年了吧~&lt;br /&gt;一年之间用它刻碟无数，刻好的碟装了一箱了……&lt;br /&gt;确实是方便了不少，为我节约了大量大精力和时间，看来当初做的这个决定没有错！&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8353101940937809350?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8353101940937809350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8353101940937809350&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8353101940937809350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8353101940937809350'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/04/blog-post.html' title='买刻录机有一年了~'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4785105033447262932</id><published>2008-03-05T15:04:00.002+08:00</published><updated>2008-03-05T15:13:26.618+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved</title><content type='html'>有一段时间没搞JSP了，今天用了标准标签库。奇怪，竟然会出现如下错误：&lt;br /&gt;&lt;blockquote&gt;The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved&lt;/blockquote&gt;&lt;br /&gt;以前一直是正常的啊，探求了半天都未果。&lt;br /&gt;（jstl.jar, standard.jar 我是放在WEB-INF/lib中的，以前这样做一直都OK啊！）&lt;br /&gt;后来突发奇想，将这两个文件移到Tomcat的 &lt;b&gt;shared/lib&lt;/b&gt; 中，然后重启那只笨猫，竟然OK了……&lt;br /&gt;这个真的是诡异了，竟然在 WEB-INF/lib 中就找不到？？&lt;br /&gt;（其实WEB-INF/lib中我还有几个库也能找到啊！怎么就是标签库的就找不到呢？）&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4785105033447262932?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4785105033447262932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4785105033447262932&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4785105033447262932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4785105033447262932'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/03/absolute-uri-httpjavasuncomjspjstlcore.html' title='absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8138350147272194316</id><published>2008-02-06T13:23:00.000+08:00</published><updated>2008-02-06T13:54:19.760+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>Core Wars</title><content type='html'>&lt;h3&gt;目录：&lt;/h3&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="#1"&gt;简介&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#2"&gt;Mars机体系结构&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#3"&gt;RedCode简单语法&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#4"&gt;语法实例讲解&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#5"&gt;简单实例&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#6"&gt;如何实战&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#7"&gt;相关资料&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;一、&lt;a name="1"&gt;简介&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CoreWars 磁核大战，是个很古老的编程游戏。&lt;br /&gt;就是大家各自写一个程序，然后把这些程序都载入内存，然后“并发运行”，看最后都结果谁能消灭内存中其他程序而最终存活下来。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当然这些程序不是运行于家用PC上，也不是使用大家常用的Intel汇编来编写的。其运行平台是Mars机──Mars机是一种简单的计算机，有固定的8000个内存单元，和约10来个指令，当然这些程序都是使用这些指令来完成。&lt;/p&gt;&lt;h3&gt;二、&lt;a name="2"&gt;Mars体系结构&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mars机器由一组内存单元，一个CU单元，一个简单进程管理系统，和一组指令集构成。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mars机的标准主要参考pMars虚拟机标准，主要有两个：88标准和94标准。一下都是默认为88标准（扩展94标准会专门标识出来。）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 该系统内存大小固定为8000个内存单元，每一个内存单元由5个部分构成：&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;ol&gt;&lt;li&gt;OPCODE 区：操作数区，该区域指定了机器指令，如：MOV, ADD 等。&lt;/li&gt;&lt;li&gt;A 数据区：一个32位的数据存储区，存放相应数据，如：128, -100。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A 数据区寻址修饰：指定了A数据区的寻址方式。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;B 数据区。&lt;/li&gt;&lt;li&gt;B 数据区寻址修饰。&lt;/li&gt;&lt;li&gt;操作数修饰区。（94标准中新加入）&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;系统寻址方式分为：立即寻址，直接寻址，间接寻址。&lt;br /&gt;（94标准中加入：间接A-1寻址、间接A+1寻址、间接B-1寻址、间接B+1寻址）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;系统寻址都是相对于&lt;strong&gt;当前IP为基准&lt;/strong&gt;寻址的，这是Mars系统和传统计算机最大的不同之处。&lt;br /&gt;如：mov 0, 1 表示将当前指令所在内存单元的下一个内存单元。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CU单元用于执行相应的指令，配合CU单元还有一个隐含的寄存器IP，每次执行单元执行IP指定的内存单元的指令。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 简单进程管理器。系统的进程由一个先进先出队列构成。每次管理系统将当前进程的执行地址出队放入IP寄存器，然后CU单元执行指令，最后将该进 程的下一条指令地址放入队尾。如果该进程产生新进程，则在队尾再加入新进程的起始执行地址。简单进程管理器保证每个进程轮流执行，当一个进程执行了 &lt;strong style="color: red;"&gt;DAT&lt;/strong&gt; 或者执行了 &lt;strong style="color: red;"&gt;被0除&lt;/strong&gt; 的操作则该进程结束。&lt;/p&gt;&lt;p&gt;系统指令包含:&lt;br /&gt;&lt;code&gt;DAT&amp;nbsp;&amp;nbsp;MOV&amp;nbsp; ADD&amp;nbsp;&amp;nbsp;SUB&amp;nbsp;&amp;nbsp;JMP&amp;nbsp;&amp;nbsp;JMZ&amp;nbsp;&amp;nbsp;JMN&amp;nbsp;&amp;nbsp;CMP&amp;nbsp; SLT&amp;nbsp; DJN&amp;nbsp; SPL&lt;br /&gt;(&amp;nbsp;94标准中加入了新的指令:&amp;nbsp;SUB&amp;nbsp;MUL&amp;nbsp;DIV&amp;nbsp;MOD&amp;nbsp;SEQ&amp;nbsp;SNE&amp;nbsp;NOP&amp;nbsp;LDP&amp;nbsp;STP&amp;nbsp;) &lt;/code&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mars机的汇编程序通常是RedCode，而Mars模拟器几乎都集成了一个RedCode的编译器，将RedCode程序编译为机器码写入内存。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 系统初始时内存中都是 &lt;strong&gt;DAT&amp;nbsp;$0,$0&lt;/strong&gt; ，每一个程序加载到内存的随机位置，当多个程序都加载完后系统给每个程序创建一个进程，此时每个进程在进程队列中的位置是随机的，然后系统开始运行。&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;三、&lt;a name="3"&gt;RedCode简单语法(按94标准)&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;指令写法：&lt;code&gt;&amp;lt;label&amp;gt;&amp;nbsp;OPCODE&amp;nbsp;&amp;lt;&amp;nbsp;OP_modify&amp;nbsp;&amp;gt;&amp;nbsp;&amp;lt;A_modify&amp;gt;&amp;nbsp;A_field&amp;nbsp;,&amp;lt;B_modify&amp;gt;&amp;nbsp;B_field&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------&amp;nbsp;  ------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整体记做A &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 整体记做B&lt;br /&gt;&amp;lt;&amp;gt;包含的部分可以省略。&lt;br /&gt;通常A表示源地址，B表示目标地址。&lt;/code&gt;&lt;/p&gt;&lt;p&gt;OPCODE包含：&lt;br /&gt;&lt;code&gt;DAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 中止进程&lt;br /&gt;MOV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 移动数据A到B&lt;br /&gt;ADD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A + B -&amp;gt; B&lt;br /&gt;SUB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A - B -&amp;gt; B&lt;br /&gt;MUL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A * B -&amp;gt; B&lt;br /&gt;DIV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B / A -&amp;gt; B (若A＝0进程结束)&lt;br /&gt;MOD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B % A -&amp;gt; B (若A＝0进程结束)&lt;br /&gt;JMP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 跳转到A&lt;br /&gt;JMZ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 B == 0 则跳转到A&lt;br /&gt;JMN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 B != 0 则跳转到A&lt;br /&gt;DJN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 先 B - 1, 若 B != 0 跳转到A&lt;br /&gt;SPL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 开启一个新进程，新进程起始执行地址为A&lt;br /&gt;SLT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 A &amp;lt; B 跳过下一条指令&lt;br /&gt;CMP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和SEQ相同&lt;br /&gt;SEQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 A == B 跳过下一条指令&lt;br /&gt;SNE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若 A != B 跳过下一条指令&lt;br /&gt;NOP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 空指令，什么也不干。&lt;br /&gt;&lt;br /&gt;LDP/STP&amp;nbsp;本地地址操作指令，一般都没有实现，这里就不解释了。&lt;br /&gt;&lt;br /&gt;DAT &amp;nbsp; &amp;nbsp; 指令可以只有A区域出现，此时一般编译器会将内存的A区域拷贝一份到B区域。&lt;br /&gt;JMP/SPL 指令也可以只有一个A区域出现，此时一般编译器会将内存的B区域作为 $0&lt;/code&gt;&lt;br /&gt;OP_modify包含：&lt;code&gt;.A&amp;nbsp;&amp;nbsp; 指令读写目的地址的A区域&lt;br /&gt;.B&amp;nbsp;&amp;nbsp; 指令读写目的地址的B区域 (如果Op_modify没有指定，则默认使用该规则)&lt;br /&gt;.AB&amp;nbsp; 指令读A指定地址的A区域，结果写入B指定地址的B区域&lt;br /&gt;.BA&amp;nbsp; 指令读A指定地址的B区域，结果写入B指定地址的A区域&lt;br /&gt;.F&amp;nbsp;&amp;nbsp; 指令读A指定地址的A和B区域，操作结果写入B指定地址的A和B区域&lt;br /&gt;.X&amp;nbsp;&amp;nbsp; 指令读取A指定地址的B区域，操作结果写入B指定地址的A区域;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;然后读取A指定地址的A区域，进行同样的操作操作结果写入B指定地址的B区域&lt;br /&gt;.I&amp;nbsp;&amp;nbsp; 指令读写源和目标地址的整个内存单元。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (mov指令没有指定OP_modify，并且源操作数不是立即数时使用该规则) &lt;/code&gt; &lt;/p&gt;&lt;p&gt;Modify指定了寻址方式：&lt;code&gt;#&amp;nbsp;&amp;nbsp; 立即数&lt;br /&gt;$&amp;nbsp;&amp;nbsp; B直接寻址&lt;br /&gt;@&amp;nbsp;&amp;nbsp; 间接寻址&lt;br /&gt;&amp;lt;&amp;nbsp;&amp;nbsp; B先减1，再间接寻址&lt;br /&gt;&amp;gt;&amp;nbsp;&amp;nbsp; B先减1，再间接寻址&lt;br /&gt;*&amp;nbsp;&amp;nbsp; A间接寻址&lt;br /&gt;{&amp;nbsp;&amp;nbsp; A先减1，再间接寻址&lt;br /&gt;}&amp;nbsp;&amp;nbsp; A先加1，再间接寻址 &lt;/code&gt;&lt;br /&gt;值得注意的是地址跳转相关的指令A区域不能为立即数，加减乘除模指令的B区域不能为立即数，否则要么模拟器报语法错误，要么作为执行非法指令中止进程或者作为空指令处理。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Filed就是指定数据的地方了。&lt;/p&gt;&lt;p&gt;程序注释符为";"，从;到行尾均作为注释。但有几个特殊的注释，作为程序信息:&lt;br /&gt;&lt;code&gt;;name&amp;nbsp;&amp;nbsp; filename&amp;nbsp; 指定程序的名字&lt;br /&gt;;author author&amp;nbsp;&amp;nbsp;&amp;nbsp; 指定程序的作者&lt;br /&gt;;debug&amp;nbsp; [static|off] 指定是否调试程序，但不是每个模拟器都实现&lt;/code&gt;&lt;br /&gt;此外不同的模拟器也有自己特定的特殊符号。&lt;/p&gt;&lt;p&gt;宏一般不同的模拟器都有自己的一套，但通常都实现了EQU，语法 &lt;br /&gt;&lt;code&gt;label&amp;nbsp;EQU&amp;nbsp;表达式&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(表达式可以为数字或标签的加减乘除)&lt;br /&gt;&lt;br /&gt;ORG&amp;nbsp;数字或标签&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;指定程序执行的开始地址&lt;br /&gt;END&amp;nbsp;&amp;lt;数字或标签&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;程序结束，此后的部分不会被编译，如果指定了一个数字或标签则作为程序开始地址。&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;四、&lt;a name="4"&gt;语法实例讲解&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下我们写一个完整的RedCode文件：&lt;br /&gt;&lt;code&gt;;name&amp;nbsp;Test&lt;br /&gt;;author&amp;nbsp;cloud&lt;br /&gt;&lt;br /&gt;org&amp;nbsp;1&lt;br /&gt;data&amp;nbsp;&amp;nbsp;dat&amp;nbsp;5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;data&amp;nbsp;,&amp;nbsp;@&amp;nbsp;data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;-2&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&amp;lt;&amp;nbsp;data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;#&amp;nbsp;3&amp;nbsp;&amp;nbsp;,&amp;nbsp;data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jmp&amp;nbsp;-1&lt;br /&gt;end &lt;/code&gt;&lt;/p&gt;&lt;p&gt;编译器编译后将各指令的各个区域写入对应内存单元的对应区域。&lt;br /&gt;假如程序放到内存的0001单元到0005单元,写入内存后反汇编过来就是&lt;br /&gt;&lt;code&gt;0001&amp;nbsp;&amp;nbsp;DAT&amp;nbsp;$&amp;nbsp;5&amp;nbsp;,&amp;nbsp;$&amp;nbsp;5&lt;br /&gt;0002&amp;nbsp;&amp;nbsp;mov&amp;nbsp;$&amp;nbsp;-1,&amp;nbsp;@&amp;nbsp;-1&lt;br /&gt;0003&amp;nbsp;&amp;nbsp;mov&amp;nbsp;$&amp;nbsp;-2,&amp;nbsp;&amp;lt;&amp;nbsp;-2&lt;br /&gt;0004&amp;nbsp;&amp;nbsp;mov&amp;nbsp;#&amp;nbsp;3&amp;nbsp;,&amp;nbsp;$&amp;nbsp;-3&lt;br /&gt;0005&amp;nbsp;&amp;nbsp;jmp&amp;nbsp;$&amp;nbsp;-1,&amp;nbsp;&amp;gt;&amp;nbsp;2&lt;/code&gt;程序入口地址org&amp;nbsp;1，就是程序的第1条指令开始（编号从0开始），就是地址0002&lt;br /&gt;&lt;/p&gt;&lt;p&gt;0002处mov指令的寻址如下：&lt;br /&gt;&lt;code&gt;源地址：&amp;nbsp; $ -1&amp;nbsp;，就是直接寻址，以当前地址(0002)相对的-1处的地址作为源地址&amp;nbsp;，即&amp;nbsp;0001&lt;br /&gt;目的地址：@&amp;nbsp;-1&amp;nbsp;，就是间接寻址，以当前地址(0002)相对的-1处的地址的 B区域作为直接寻址地址&lt;/code&gt;就是0001处的B数据区的数据5作为直接寻址地址，取出0001处的5作为直接寻址，5也是一个相对地址，相对于0002就是地址0007，最终目标地址为0007那么最终就是将0001的内存单元拷贝一份到0007&lt;br /&gt;&lt;br /&gt;0003处的mov源地址一样，操作的是0001的地址，目标地址为：&lt;br /&gt;&amp;nbsp;&amp;lt;&amp;nbsp;-2&amp;nbsp;，就是取出相对0003地址-2的地址(就是0001)的B数据区(就是5)，先将其减1(即为4)，然后在存放回去（0001处的B数据区变成4)，将得到的结果(4)作为直接寻址,目标地址就是相对当前地址(0003)为4的地址，即0007最终结果和上一条指令一样，但真正内存单元拷贝时001的B数据区已经变成了4&lt;br /&gt;&lt;br /&gt;0004处的结果就是把3放到0001的B数据区中&lt;br /&gt;&lt;br /&gt;0005处的结果就是把0007的B数据区的数据加1，然后跳转到0006 &lt;/p&gt;&lt;br /&gt;&lt;h3&gt;五、&lt;a name="5"&gt;简单实例&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;作为对抗程序最重要的就是生存，一个最简单的程序就是&lt;br /&gt;&lt;code&gt;jmp&amp;nbsp;0&lt;/code&gt;始终跳转到自身，死循环，自己没有攻击能力，唯一取胜的方法就是期望对手自己死亡，可谓守株待兔。&lt;br /&gt;但这个程序一个弱点是自己在内存中的地址固定，很容易收到攻击。&lt;/p&gt;&lt;p&gt;下面这个程序可以说是非常出名的IMP程序了：&lt;br /&gt;&lt;code&gt;mov&amp;nbsp;0,1&lt;/code&gt;它不断把自己移动到下一个内存单元，然后执行到下一个内存单元执行。&lt;/p&gt;&lt;p&gt;这个程序具有一定的攻击能力，能够覆盖别人的程序，但是覆盖他人程序后也不能取胜，因为不能导致他人程序执行中止进程操作，唯一的取胜方法也是等待他人程序死亡，但自身在内存中的位置不断移动，生存能力比jmp&amp;nbsp;0强。&lt;/p&gt;&lt;p&gt;对付IMP程序的方法也很简单：&lt;br /&gt;&lt;code&gt;jmp&amp;nbsp;0&amp;nbsp;,&amp;nbsp;&amp;lt;&amp;nbsp;-2&lt;/code&gt;这段代码始终跳转到自身，但是跳转前会将前面的第2个内存单元的B数据区数据减1，当imp程序将自己移动到该地址后将被修改为 mov&amp;nbsp;0, 0&amp;nbsp;这样下次IMP执行时执行mov&amp;nbsp;0, 0 没能将自己移动，但执行地址已经到达下一个内存单元，而Mars系统初始化时内存单元为&amp;nbsp;dat&amp;nbsp;0, 0&amp;nbsp;这就导致IMP程序&lt;strong&gt;执行一个DAT指令而导致进程中止&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;攻击他人程序通常都是通过&lt;strong&gt;扔出一个DAT来覆盖他人程序&lt;/strong&gt;，使得其他程序因执行DAT而中止比如下面这个程序：&lt;br /&gt;&lt;code&gt;org&amp;nbsp;start&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dat&amp;nbsp;0,5&lt;br /&gt;start&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;-1,@-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;-1,&amp;gt;&amp;nbsp;-2&lt;br /&gt;end&lt;/code&gt;第一次mov&amp;nbsp;-1&amp;nbsp;,&amp;nbsp;@&amp;nbsp;-1&amp;nbsp;将&amp;nbsp;dat&amp;nbsp;0,&amp;nbsp;5&amp;nbsp;拷贝一个到相对为5的地址处进行一次轰炸&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;-1&amp;nbsp;,&amp;gt;&amp;nbsp;-2&lt;/code&gt;将&amp;nbsp;dat&amp;nbsp;0&amp;nbsp;,5&amp;nbsp;修改为&amp;nbsp;dat&amp;nbsp;0, 6&lt;br /&gt;然后跳转执行 mov&amp;nbsp;-1,&amp;nbsp;@&amp;nbsp;-1&amp;nbsp;,执行mov时导致将dat&amp;nbsp;0,6&amp;nbsp;拷贝到相对为6的地址进行轰炸 &lt;br /&gt;如此循环，最终将对整个内存以dat轰炸一遍，可谓杀伤力非常。&lt;br /&gt;&lt;br /&gt;像这样的轰炸程序是非常有效的攻击,现在的很多程序都是靠这种手法攻击他人，然后利用IMP的方法移动自己避免被攻击。&lt;/p&gt;&lt;p&gt;当然，你也可以每隔几个单元轰炸一次：&lt;br /&gt;&lt;code&gt;org&amp;nbsp;1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dat&amp;nbsp;0 &amp;nbsp;, 5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;mov&amp;nbsp;-1 , @-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;add&amp;nbsp;#4&amp;nbsp;,&amp;nbsp;-2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;jmp&amp;nbsp;-2&lt;br /&gt;end&amp;nbsp;&lt;/code&gt;这个程序每次将dat&amp;nbsp;0,5的B数据区加4，然后在MOV处以此寻址进行轰炸，所有长度大于4的程序都容易受到它的攻击。&lt;br /&gt;&lt;br /&gt;作为对抗手段，程序可以采用哨兵概念，先在代码前面放一个数据，然后检查该数据是否被改变，如果被改变表示其他程序运行到了该处，或者攻击了该地址，自己就可以采取相应的对策，把自己移动躲避攻击或者发动对该地址的攻击。&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;六、&lt;a name="6"&gt;如何实战&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;需要一个虚拟机。RedCode扩展名为.red放/redcode/目录下。&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;七、&lt;a name="7"&gt;相关资料&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.koth.org/"&gt;http://www.koth.org/&lt;/a&gt; 官方站点&lt;br /&gt;&lt;a href="http://vyznev.net/corewar/guide.html"&gt;http://vyznev.net/corewar/guide.html&lt;/a&gt; RedCode初学指导&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;// EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8138350147272194316?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8138350147272194316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8138350147272194316&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8138350147272194316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8138350147272194316'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/02/core-wars.html' title='Core Wars'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5511290677462177957</id><published>2008-02-01T15:05:00.000+08:00</published><updated>2008-02-01T19:34:49.151+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bloger'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>ScribeFire 中添加 &lt;code&gt; 标签支持</title><content type='html'>Scribefire具体安装在 &amp;lt;firefox home path&amp;gt;/extensions/ 下的哪个目录可以在 extensions.rdf 文件中找到（搜索 "ScribeFire" 即可），以下文件操作的根目录均为 Scribefire 的安装目录。&lt;br /&gt;&lt;br /&gt;1. 自定义 &amp;lt;code&amp;gt; style&lt;br /&gt;文件 &lt;font color="#000066"&gt;/chrome/skin/blank.css&lt;/font&gt; 中添加：&lt;br /&gt;&lt;code&gt;code {&lt;br /&gt;&amp;nbsp; display: block;&lt;br /&gt;&amp;nbsp; font-size: 110%;&lt;br /&gt;&amp;nbsp; margin: 5px;&lt;br /&gt;&amp;nbsp; margin-left: 1.3em;&lt;br /&gt;&amp;nbsp; padding: 3px;&lt;br /&gt;&amp;nbsp; padding-left:&amp;nbsp; 10px;&lt;br /&gt;&amp;nbsp; background: #eee;&lt;br /&gt;&amp;nbsp; border: 1px solid #ccc;&lt;br /&gt;&amp;nbsp; border-left: 3px solid #ccc;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;2. 操作界面外观&lt;br /&gt;文件 &lt;font color="#000066"&gt;/chrome/skin/toolbar/toolbar-code.png&lt;/font&gt;&lt;br /&gt;（自己作的“&amp;lt;code&amp;gt;”按钮图片）&lt;br /&gt;&lt;br /&gt;文件 &lt;font color="#000066"&gt;/chrome/skin/overlay.css&lt;/font&gt; 中设置按钮外观图片&lt;br /&gt;&lt;code&gt;#code-button {&lt;br /&gt;&amp;nbsp; list-style-image: url(chrome://performancing/skin/toolbar/toolbar-code.png);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3. 界面、事件关联&lt;br /&gt;&lt;br /&gt;文件 &lt;font color="#000066"&gt;/chrome/content/editor.xul&lt;/font&gt; 中：&lt;br /&gt;&amp;nbsp;1) 按钮事件关联：&lt;br /&gt;&lt;code&gt;&amp;lt;command id="cmd_blockquote" oncommand="performancingMidas.blockquote()"/&amp;gt;&lt;/code&gt;&lt;br /&gt;下依葫芦画瓢之：&lt;br /&gt;&lt;code&gt;&amp;lt;command id="cmd_code" oncommand="performancingMidas.code()"/&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;2) 按钮布局：&lt;br /&gt;&lt;code&gt;&amp;lt;toolbarbutton id="blockquote-button" command="cmd_blockquote" tooltiptext="&amp;amp;performancing.editor.bar.quote.tt;"/&amp;gt;&lt;/code&gt;&lt;br /&gt;下依葫芦画瓢之：&lt;br /&gt;&lt;code&gt;&amp;lt;toolbarbutton id="code-button" command="cmd_code" tooltiptext="&amp;amp;performancing.editor.bar.code.tt;"/&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;文件 &lt;font color="#000066"&gt;/chrome/content/midas.js&lt;/font&gt; 中定义事件响应，分别在：&lt;br /&gt;&lt;code&gt;performancingMidas.blockquote = function(){&lt;br /&gt;...&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;code&gt;case "blockquote":&lt;br /&gt;...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;case "blockquote":&lt;br /&gt;...&lt;/code&gt;&lt;br /&gt;下依葫芦画瓢之。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;文件 &lt;font color="#000066"&gt;/chrome/content/locale-default/overlay.dtd&lt;/font&gt; 中定义 tooltips，在&lt;br /&gt;&lt;code&gt;&amp;lt;!ENTITY performancing.editor.bar.quote.tt "Quote"&amp;gt;&lt;/code&gt;&lt;br /&gt;下依葫芦画瓢之：&lt;br /&gt;&lt;code&gt;&amp;lt;!ENTITY performancing.editor.bar.code.tt "Code"&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;又做了一件无聊之事~~&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5511290677462177957?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5511290677462177957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5511290677462177957&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5511290677462177957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5511290677462177957'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/02/scribefire.html' title='ScribeFire 中添加 &amp;lt;code&amp;gt; 标签支持'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4055366135125441018</id><published>2008-01-31T14:42:00.000+08:00</published><updated>2008-12-10T18:31:30.782+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>QT右键菜单</title><content type='html'>&lt;ol&gt;&lt;li&gt;右键弹出菜单：&lt;br /&gt;重写void QWidget::contextMenuEvent(QContextMenuEvent)函数&lt;br /&gt;如：&lt;br /&gt;&lt;code&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MainWindow::contextMenuEvent( QContextMenuEvent* e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;QMenu *menu = &lt;font color="#a52a2a"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;QMenu();&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;addAction(openAct);&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;addSeparator();&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;addAction(quitAct);&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;exec(e-&amp;gt;globalPos());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;delete&lt;/b&gt;&lt;/font&gt;&amp;nbsp;menu;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;定制原生器件的弹出菜单（某些器件可能本身就自带popMenu）&lt;br /&gt;那么如何获得已有的菜单项呢？利用：&lt;br /&gt;&lt;code&gt;QList&amp;lt;QAction *&amp;gt; QWidget::actions() &lt;font color="#a52a2a"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;返回的是其所包含QAction的一个列表。&lt;br /&gt;&lt;br /&gt;如：&lt;br /&gt;&lt;code&gt; TextViewer::TextViewer() : QTextEdit()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;-&amp;gt;setReadOnly(&lt;font color="#c00058"&gt;true&lt;/font&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;TextViewer::contextMenuEvent ( QContextMenuEvent* e )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;QMenu *menu = createStandardContextMenu();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// remove the separator between 'copy' &amp;amp; 'select all'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;removeAction(menu-&amp;gt;actions().at(&lt;font color="#c00058"&gt;1&lt;/font&gt;));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// insert separator before 'copy'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;QAction *sepTop = menu-&amp;gt;insertSeparator(menu-&amp;gt;actions().at(&lt;font color="#c00058"&gt;0&lt;/font&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// insert 'open' &amp;amp; 'top' before that separator&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;insertAction(sepTop, ((MainWindow*)&lt;font color="#a52a2a"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;-&amp;gt;parentWidget())-&amp;gt;openAction());&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;insertAction(sepTop, ((MainWindow*)&lt;font color="#a52a2a"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;-&amp;gt;parentWidget())-&amp;gt;topmostAction());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// add separator after 'select all'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;addSeparator();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// add 'quit' after that separator&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;addAction(((MainWindow*)&lt;font color="#a52a2a"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;-&amp;gt;parentWidget())-&amp;gt;quitAction());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;menu-&amp;gt;exec(e-&amp;gt;globalPos());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;delete&lt;/b&gt;&lt;/font&gt;&amp;nbsp;menu;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;效果预览：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MGvKv7nV5OA/R6Fx4yok4AI/AAAAAAAAAnU/m5tIUI4rtA8/s1600-h/qt-customPopMenu.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_MGvKv7nV5OA/R6Fx4yok4AI/AAAAAAAAAnU/m5tIUI4rtA8/s320/qt-customPopMenu.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5161531868421873666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4055366135125441018?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4055366135125441018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4055366135125441018&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4055366135125441018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4055366135125441018'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/01/qt_736.html' title='QT右键菜单'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_MGvKv7nV5OA/R6Fx4yok4AI/AAAAAAAAAnU/m5tIUI4rtA8/s72-c/qt-customPopMenu.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-283960888319662001</id><published>2008-01-31T14:31:00.000+08:00</published><updated>2008-01-31T14:36:24.607+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>QT快捷键</title><content type='html'>&lt;ol&gt;&lt;li&gt;shortcut作用域。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; QT 无全局快捷键（全局快捷键与相应的窗口管理器(KDE等)相关）。&lt;br /&gt;&lt;code&gt;QAction::setShortcutContext(Qt::ShortcutContext)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;Qt::ApplicationShortcut&amp;nbsp;当前程序中有任意一窗口被激活时可使用的快捷键&lt;br /&gt;&amp;nbsp;&amp;nbsp;Qt::WindowShortcut&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;仅适用于当前窗口的 (&lt;b&gt;default&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;Qt::WidgetShortcut&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;当前器件被激活时可用的快捷键&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;若该窗口无menuBar，对于popupMenu[contextMenu]中的menuItem之快捷键会无效。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;QAction 为抽象器件，可将该QAction添加到该窗口中，则可使用该菜单项的快捷键了 。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-283960888319662001?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/283960888319662001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=283960888319662001&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/283960888319662001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/283960888319662001'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/01/qt_31.html' title='QT快捷键'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6416021060979251810</id><published>2008-01-31T10:31:00.000+08:00</published><updated>2008-12-10T18:31:30.944+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>QT程序外观定制</title><content type='html'>今天才发现，原来QT的程序可以像网页写CSS那样来用StyleSheet定制外观，真是方便啊。&lt;br /&gt;(Qt &amp;gt;= 4.2) 其语法、作用域、优先级和网页的CSS差不多。&lt;br /&gt;&lt;code&gt;QApplication::setStyleSheet(QString);&lt;br /&gt;QWidget::setStyleSheet(QString);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;程序级的外观：（作用于整个程序的器件）&lt;br /&gt;如：&lt;br /&gt;&lt;code&gt;QLineEdit { background: yellow }&lt;br /&gt;QCheckBox { color: red }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;器件级的外观：（作用于本器件及其子器件）&lt;br /&gt;如：&lt;br /&gt;&lt;code&gt;textViewer-&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;setStyleSheet(&lt;font color="#000099"&gt;"background-color: #FFFFBB;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  "color: #000099;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  "margin: 10px;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  "padding: 5px;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  "padding-left: 15px;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  "padding-right: 15px;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  "border-radius: 5px;"  &lt;font color="#009900"&gt;// 圆角边框(只用IE的人就不知道了吧:D)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  "border: 3px solid #abc;"&lt;/font&gt;);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;效果预览：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MGvKv7nV5OA/R6E00iok3_I/AAAAAAAAAnM/CzL-dVPO-5g/s1600-h/qt4_stylesheet.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_MGvKv7nV5OA/R6E00iok3_I/AAAAAAAAAnM/CzL-dVPO-5g/s320/qt4_stylesheet.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5161464725198135282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6416021060979251810?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6416021060979251810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6416021060979251810&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6416021060979251810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6416021060979251810'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/01/qt.html' title='QT程序外观定制'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MGvKv7nV5OA/R6E00iok3_I/AAAAAAAAAnM/CzL-dVPO-5g/s72-c/qt4_stylesheet.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2277353911323515049</id><published>2008-01-27T12:04:00.000+08:00</published><updated>2008-01-29T09:13:21.177+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>fucking the damn winter!!</title><content type='html'>今年实为近几十年来最严重的冰冻天气，道路结冰，高压输电线路冻成了几十厘米粗的“冰棍”~~还冻垮了几个高压输电塔，冻断了输电线路，全省供电紧张。&lt;br /&gt;托这种鬼天气的福，我们这几天每天都是在一天之内全城停电、断电多次，搞的这几天什么都干不成。&lt;br /&gt;调试一个程序好不容易恢复到上次的断点条件，马上又黑了~~郁闷啊！！搞的我都不敢开机了。&lt;br /&gt;想出去走走，道路又滑的要命~听说还摔死了几个人！-_-（幸好我比较小心，就第一天摔了几跤）&lt;br /&gt;不止如此，听说水管被冻爆了，今天还停水了── Oh, my God!!!（真担心我家的太阳能会不会被冻爆？）&lt;br /&gt;据说这种鬼天气还要持续十多天！！？？&lt;br /&gt;&lt;br /&gt;这样下去怎么过啊~~ 不如冬眠算了！&lt;br /&gt;说实话冬眠确实是个好办法，不过我天生就不是冬眠动物啊，白天怎么睡都睡不着的~~还弄得浑身酸痛~呜……&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2277353911323515049?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2277353911323515049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2277353911323515049&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2277353911323515049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2277353911323515049'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/01/fucking-dam-winter.html' title='fucking the damn winter!!'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1236804241900858935</id><published>2008-01-20T09:57:00.000+08:00</published><updated>2008-01-20T10:00:24.675+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tao'/><title type='text'>墨菲定理</title><content type='html'>&lt;a href="http://baike.baidu.com/view/40544.htm"&gt;http://baike.baidu.com/view/40544.htm&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;“如果一件事情有可能向坏的方向发展，就一定会向最坏的方向发展”。&lt;/blockquote&gt;&lt;br /&gt;这个说得果然对！。。。。。。 郁闷啊！&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1236804241900858935?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1236804241900858935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1236804241900858935&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1236804241900858935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1236804241900858935'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/01/blog-post.html' title='墨菲定理'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2946952702589666172</id><published>2008-01-12T11:35:00.000+08:00</published><updated>2008-01-12T11:43:24.915+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tao'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>KISS</title><content type='html'>[转载，源出处不可考（不知被转过多少次了）。]&lt;br /&gt;&lt;center&gt;&lt;blockquote&gt;&lt;b&gt;KEEP  IT   SIMPLE ,  STUPID !&lt;/b&gt;&lt;/blockquote&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;KISS──UNIX/LINUX哲学思想&lt;/font&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 编写只做一件事情，并且要做好的程序；编写可以在一起工作的程序，编写处理文本流的程序，因为这是通用的接口。这就是UNIX哲学.所有的哲学真正的浓缩为一个铁一样的定律，高明的工程师的神圣的“&lt;span style="color: rgb(255, 0, 0);"&gt;KISS 原则&lt;/span&gt;”无处不在。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 大部分隐式的UNIX哲学不是这些前辈所说的，而是他们所做的和UNIX自身建立的例子。从整体上看，我们能够抽象出下面这些观点：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;模块性原则：写简单的，通过干净的接口可被连接的部件；&lt;/li&gt;&lt;li&gt;清楚原则：清楚要比小聪明好。&lt;/li&gt;&lt;li&gt;合并原则：设计能被其它程序连接的程序。&lt;/li&gt;&lt;li&gt;分离原则：从机制分离从策略，从实现分离出接口。&lt;/li&gt;&lt;li&gt;简单原则：设计要简单；只有当你需要的时候，增加复杂性；&lt;/li&gt;&lt;li&gt;节俭原则：只有当被证实是清晰，其它什么也不做的时候，才写大的程序&lt;/li&gt;&lt;li&gt;透明原则：为使检查和调试明显更容易而设计&lt;/li&gt;&lt;li&gt;健壮性原则：健壮性是透明和简单的追随者&lt;/li&gt;&lt;li&gt;表现原则：把知识整理成资料，于是程序逻辑能变得易理解和精力充沛的。&lt;/li&gt;&lt;li&gt;最小意外原则：在接口设计中，总是做最小意外事情&lt;/li&gt;&lt;li&gt;沉默原则：当一个程序令人吃惊什么也不说的时候，他应该就是什么也不说&lt;/li&gt;&lt;li&gt;修补补救：当你必须失败的时候，尽可能快的吵闹地失败&lt;/li&gt;&lt;li&gt;经济原则：程序员的时间是宝贵的；优先机器时间节约它。&lt;/li&gt;&lt;li&gt;产生原则：避免手工堆砌；当你可能的时候，编写可以写程序的程序；&lt;/li&gt;&lt;li&gt;优化原则：在雕琢之前先有原型；在你优化它之前，先让他可以运行；&lt;/li&gt;&lt;li&gt;差异原则：怀疑所有声称的“唯一真理“&lt;/li&gt;&lt;li&gt;可扩展原则：为将来做设计，因为它可能比你认为来的要快&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2946952702589666172?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2946952702589666172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2946952702589666172&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2946952702589666172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2946952702589666172'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2008/01/kiss.html' title='KISS'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3527890059071348807</id><published>2007-12-29T09:25:00.000+08:00</published><updated>2008-12-10T18:31:31.106+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tao'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>优秀团队</title><content type='html'>引自：&lt;a href="http://www.footbig.com/kernel"&gt;http://www.footbig.com/kernel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MGvKv7nV5OA/R3WiuqcGWoI/AAAAAAAAAlM/Kt0HrHFQkuk/s1600-h/kernel.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_MGvKv7nV5OA/R3WiuqcGWoI/AAAAAAAAAlM/Kt0HrHFQkuk/s320/kernel.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5149200671517858434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3527890059071348807?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3527890059071348807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3527890059071348807&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3527890059071348807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3527890059071348807'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/12/blog-post.html' title='优秀团队'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MGvKv7nV5OA/R3WiuqcGWoI/AAAAAAAAAlM/Kt0HrHFQkuk/s72-c/kernel.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8402808751367351499</id><published>2007-12-03T10:59:00.000+08:00</published><updated>2008-01-31T11:39:49.979+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>Java2D 3 or more Colors gradient paint (use TexturePaint)</title><content type='html'>Java中的 GradientPaint 画刷好像仅仅只能支持2色渐变，下面我用动态生成纹理画刷的方式变相实现了一个简单的多色渐变的效果：&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;font color="#cd00cd"&gt;package&lt;/font&gt;&amp;nbsp;test.draw;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.AlphaComposite;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.BasicStroke;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Color;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Font;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Graphics;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Graphics2D;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Rectangle;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.RenderingHints;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.TexturePaint;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.event.MouseEvent;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.event.MouseListener;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.font.FontRenderContext;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.font.TextAttribute;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.font.TextLayout;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.geom.AffineTransform;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.geom.Rectangle2D;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.image.BufferedImage;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.text.AttributedCharacterIterator;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.text.AttributedString;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;javax.swing.JFrame;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;javax.swing.JPanel;&lt;br /&gt;&lt;br /&gt;&lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;*&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;nbsp;彩虹纹理画刷&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@author&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;h_Davy [dave3068 AT gmail DOT com]&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@version&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;2007-11-28 上午02:09:46&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;*/&lt;/font&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;RainbowText &lt;font color="#2e8b57"&gt;&lt;b&gt;extends&lt;/b&gt;&lt;/font&gt;&amp;nbsp;JPanel&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;implements&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Runnable, MouseListener {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;final&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;long&lt;/b&gt;&lt;/font&gt;&amp;nbsp;serialVersionUID = &lt;font color="#c00058"&gt;1L&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RainbowText()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;super&lt;/b&gt;&lt;/font&gt;(&lt;font color="#c00058"&gt;true&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;init();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;init()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setBackground(Color.white);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTextAttributes();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//new Thread(this).start();&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;addMouseListener(&lt;font color="#2e8b57"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;String text = &lt;font color="#c00058"&gt;"Rainbow Text"&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Font f;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;TextLayout tl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;AttributedCharacterIterator aci;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//private FontMetrics fm;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;setTextAttributes()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Font(&lt;font color="#c00058"&gt;"serif"&lt;/font&gt;,Font.BOLD,&lt;font color="#c00058"&gt;60&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//fm = this.getFontMetrics(f);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AttributedString as = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;AttributedString(text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//as.addAttribute(TextAttribute.FONT, f, 0, text.length());&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AffineTransform at = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;AffineTransform();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//at.setToRotation(Math.toRadians(45));&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;as.addAttribute(TextAttribute.FONT, f.deriveFont(at), &lt;font color="#c00058"&gt;0&lt;/font&gt;, text.length());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aci = as.getIterator();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color []c = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Color[]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{Color.blue, Color.cyan, Color.green, Color.yellow,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color.orange, Color.red, Color.magenta};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;&amp;nbsp;[]w = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;[]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;font color="#c00058"&gt;.09f&lt;/font&gt;, &lt;font color="#c00058"&gt;.15f&lt;/font&gt;, &lt;font color="#c00058"&gt;.16f&lt;/font&gt;, &lt;font color="#c00058"&gt;.17f&lt;/font&gt;, &lt;font color="#c00058"&gt;.15f&lt;/font&gt;, &lt;font color="#c00058"&gt;.16f&lt;/font&gt;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initTextImg(&lt;font color="#c00058"&gt;350&lt;/font&gt;, c, w, &lt;font color="#c00058"&gt;true&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;paintComponent(Graphics g)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphics2D g2 = (Graphics2D)g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setRenderingHint(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setStroke(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BasicStroke(&lt;font color="#c00058"&gt;2.f&lt;/font&gt;));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// draw background&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setColor(getBackground());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.fillRect(&lt;font color="#c00058"&gt;0&lt;/font&gt;, &lt;font color="#c00058"&gt;0&lt;/font&gt;, getWidth(), getHeight());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setColor(Color.blue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.drawRoundRect(&lt;font color="#c00058"&gt;5&lt;/font&gt;, &lt;font color="#c00058"&gt;5&lt;/font&gt;, getWidth()-&lt;font color="#c00058"&gt;10&lt;/font&gt;, getHeight()-&lt;font color="#c00058"&gt;10&lt;/font&gt;, &lt;font color="#c00058"&gt;10&lt;/font&gt;, &lt;font color="#c00058"&gt;10&lt;/font&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setStroke(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BasicStroke(&lt;font color="#c00058"&gt;1.5f&lt;/font&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FontRenderContext frc = g2.getFontRenderContext();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//tl = new TextLayout(text, f, frc);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tl = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;TextLayout(aci, frc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rectangle2D rect = tl.getBounds();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;x = getWidth()/&lt;font color="#c00058"&gt;2&lt;/font&gt;&amp;nbsp;- (&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)rect.getWidth()/&lt;font color="#c00058"&gt;2&lt;/font&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y = getHeight()/&lt;font color="#c00058"&gt;2&lt;/font&gt;&amp;nbsp;+ (&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)rect.getHeight()/&lt;font color="#c00058"&gt;2&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.translate(x, y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//g2.rotate(Math.toRadians(-45));&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//g2.setColor(Color.yellow);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//g2.fill(rect);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setPaint(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;TexturePaint(bi, rect));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setComposite(AlphaComposite.SrcOver);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//g2.rotate(Math.toRadians(30));&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tl.draw(g2, &lt;font color="#c00058"&gt;0&lt;/font&gt;, &lt;font color="#c00058"&gt;0&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .5f);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//g2.setComposite(ac);&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;W = (&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)rect.getWidth();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rect = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Rectangle2D.Float(X, &lt;font color="#c00058"&gt;0&lt;/font&gt;, W, &lt;font color="#c00058"&gt;1&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setPaint(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;TexturePaint(bi, rect));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;R.setRect(-x+&lt;font color="#c00058"&gt;10&lt;/font&gt;, y, getWidth()-&lt;font color="#c00058"&gt;20&lt;/font&gt;, &lt;font color="#c00058"&gt;20&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.fillRect(R.x, &lt;font color="#c00058"&gt;10&lt;/font&gt;, R.width, &lt;font color="#c00058"&gt;20&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt;&amp;nbsp;run = &lt;font color="#c00058"&gt;false&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;X = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;W = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Rectangle R = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Rectangle();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;run()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(run)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thread.sleep(&lt;font color="#c00058"&gt;10&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X+=&lt;font color="#c00058"&gt;1&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(X&amp;gt;=W)&amp;nbsp;X = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//repaint();&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;repaint(&lt;font color="#c00058"&gt;10&lt;/font&gt;, R.y+&lt;font color="#c00058"&gt;10&lt;/font&gt;, R.width, R.height);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;font color="#804040"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(InterruptedException e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseClicked(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;run = !run;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Thread(&lt;font color="#2e8b57"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;).start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 纹理&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BufferedImage bi;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;nbsp;初始化纹理&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt;&amp;nbsp;width&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;纹理总宽度&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt;&amp;nbsp;c&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;颜色值数组&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt;&amp;nbsp;w&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;各色带宽度所占百分比(w.length=c.length-1)&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt;&amp;nbsp;cyclic&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;是否循环&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;initTextImg(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;width, Color []c, &lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;&amp;nbsp;w[], &lt;font color="#2e8b57"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt;&amp;nbsp;cyclic)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bi = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BufferedImage(width, &lt;font color="#c00058"&gt;1&lt;/font&gt;, BufferedImage.TYPE_4BYTE_ABGR);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;n = c.length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;m = cyclic ? n : n - &lt;font color="#c00058"&gt;1&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// initialize widths&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;&amp;nbsp;[]ww = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;[m];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(i = &lt;font color="#c00058"&gt;0&lt;/font&gt;; i &amp;lt; m-&lt;font color="#c00058"&gt;1&lt;/font&gt;; i++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s += w[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(s&amp;gt;=&lt;font color="#c00058"&gt;1&lt;/font&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;; &lt;font color="#406090"&gt;// 以防输入的百分比过大时产生的异常&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;font color="#804040"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ww[i]&amp;nbsp;= w[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(i&amp;lt;(m-&lt;font color="#c00058"&gt;1&lt;/font&gt;))&amp;nbsp;{ &lt;font color="#406090"&gt;// 若输入的百分比过大将剩下的均分&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;&amp;nbsp;t = (&lt;font color="#c00058"&gt;1&lt;/font&gt;-s+w[i])/(m-i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(; i&amp;lt;m; i++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ww[i]&amp;nbsp;= t;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;font color="#804040"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&amp;nbsp;{ &lt;font color="#406090"&gt;// 将剩下的分配给最后一个色块&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ww[m-&lt;font color="#c00058"&gt;1&lt;/font&gt;]&amp;nbsp;= &lt;font color="#c00058"&gt;1&lt;/font&gt;&amp;nbsp;- s;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// initialize colors&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;[]rgbs = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[n];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(i = &lt;font color="#c00058"&gt;0&lt;/font&gt;; i &amp;lt; n; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rgbs[i]&amp;nbsp;= c[i].getRGB();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// the color's divides&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;a[]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[n];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;r[]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[n];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;g[]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[n];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;b[]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[n];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// initialize the color's divides&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(i = &lt;font color="#c00058"&gt;0&lt;/font&gt;; i &amp;lt; n; i++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a[i]&amp;nbsp;= (rgbs[i]&amp;nbsp;&amp;gt;&amp;gt; &lt;font color="#c00058"&gt;24&lt;/font&gt;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r[i]&amp;nbsp;= (rgbs[i]&amp;nbsp;&amp;gt;&amp;gt; &lt;font color="#c00058"&gt;16&lt;/font&gt;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g[i]&amp;nbsp;= (rgbs[i]&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;&amp;nbsp;&lt;font color="#c00058"&gt;8&lt;/font&gt;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b[i]&amp;nbsp;= (rgbs[i]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// tail of color's divides (if you wana cyclic)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ta = ((rgbs[n-&lt;font color="#c00058"&gt;1&lt;/font&gt;]&amp;nbsp;&amp;gt;&amp;gt; &lt;font color="#c00058"&gt;24&lt;/font&gt;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;)&amp;nbsp;- a[&lt;font color="#c00058"&gt;0&lt;/font&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tr = ((rgbs[n-&lt;font color="#c00058"&gt;1&lt;/font&gt;]&amp;nbsp;&amp;gt;&amp;gt; &lt;font color="#c00058"&gt;16&lt;/font&gt;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;)&amp;nbsp;- r[&lt;font color="#c00058"&gt;0&lt;/font&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tg = ((rgbs[n-&lt;font color="#c00058"&gt;1&lt;/font&gt;]&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;&amp;nbsp;&lt;font color="#c00058"&gt;8&lt;/font&gt;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;)&amp;nbsp;- g[&lt;font color="#c00058"&gt;0&lt;/font&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tb = ((rgbs[n-&lt;font color="#c00058"&gt;1&lt;/font&gt;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;amp; &lt;font color="#c00058"&gt;0xff&lt;/font&gt;)&amp;nbsp;- b[&lt;font color="#c00058"&gt;0&lt;/font&gt;];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 用于存储平滑过渡的各颜色值&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;[]interp = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[cyclic ? n*&lt;font color="#c00058"&gt;256&lt;/font&gt;+&lt;font color="#c00058"&gt;1&lt;/font&gt;&amp;nbsp;: (n-&lt;font color="#c00058"&gt;1&lt;/font&gt;)*&lt;font color="#c00058"&gt;256&lt;/font&gt;+&lt;font color="#c00058"&gt;1&lt;/font&gt;];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 颜色线性平滑插值&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(i = &lt;font color="#c00058"&gt;0&lt;/font&gt;; i &amp;lt;= &lt;font color="#c00058"&gt;256&lt;/font&gt;; i++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;&amp;nbsp;rel = i / &lt;font color="#c00058"&gt;256.0f&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;rgb;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;j=&lt;font color="#c00058"&gt;0&lt;/font&gt;; j&amp;lt;n-&lt;font color="#c00058"&gt;1&lt;/font&gt;; j++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rgb =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(a[j]&amp;nbsp;+ (a[j+&lt;font color="#c00058"&gt;1&lt;/font&gt;]-a[j])&amp;nbsp;* rel))&amp;nbsp;&amp;lt;&amp;lt; &lt;font color="#c00058"&gt;24&lt;/font&gt;)&amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(r[j]&amp;nbsp;+ (r[j+&lt;font color="#c00058"&gt;1&lt;/font&gt;]-r[j])&amp;nbsp;* rel))&amp;nbsp;&amp;lt;&amp;lt; &lt;font color="#c00058"&gt;16&lt;/font&gt;)&amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(g[j]&amp;nbsp;+ (g[j+&lt;font color="#c00058"&gt;1&lt;/font&gt;]-g[j])&amp;nbsp;* rel))&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;nbsp;&lt;font color="#c00058"&gt;8&lt;/font&gt;)&amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(b[j]&amp;nbsp;+ (b[j+&lt;font color="#c00058"&gt;1&lt;/font&gt;]-b[j])&amp;nbsp;* rel))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;interp[i+&lt;font color="#c00058"&gt;256&lt;/font&gt;*j]&amp;nbsp;= rgb;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(cyclic)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rgb =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(a[&lt;font color="#c00058"&gt;0&lt;/font&gt;]&amp;nbsp;+ ta * rel))&amp;nbsp;&amp;lt;&amp;lt; &lt;font color="#c00058"&gt;24&lt;/font&gt;)&amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(r[&lt;font color="#c00058"&gt;0&lt;/font&gt;]&amp;nbsp;+ tr * rel))&amp;nbsp;&amp;lt;&amp;lt; &lt;font color="#c00058"&gt;16&lt;/font&gt;)&amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(g[&lt;font color="#c00058"&gt;0&lt;/font&gt;]&amp;nbsp;+ tg * rel))&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;nbsp;&lt;font color="#c00058"&gt;8&lt;/font&gt;)&amp;nbsp;|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(((&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(b[&lt;font color="#c00058"&gt;0&lt;/font&gt;]&amp;nbsp;+ tb * rel))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;interp[n*&lt;font color="#c00058"&gt;256&lt;/font&gt;-i]&amp;nbsp;= rgb;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// fill the image&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;/*float rt = (float)interp.length / width;&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (i=0; i&amp;lt;width; i++) {&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bi.setRGB(i, 0, interp[(int)(i*rt)]);&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}*/&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;cur = &lt;font color="#c00058"&gt;0&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(i=&lt;font color="#c00058"&gt;0&lt;/font&gt;; i&amp;lt;m; i++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;wi = (&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;(width*ww[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(i==(m-&lt;font color="#c00058"&gt;1&lt;/font&gt;))&amp;nbsp;wi = width-cur;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;//System.out.print(wi+",");&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;&amp;nbsp;rt = (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&lt;font color="#c00058"&gt;256&lt;/font&gt;&amp;nbsp;/ wi;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;j=&lt;font color="#c00058"&gt;0&lt;/font&gt;; j&amp;lt;wi; j++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bi.setRGB(cur+j, &lt;font color="#c00058"&gt;0&lt;/font&gt;, interp[(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;)(j*rt)+i*&lt;font color="#c00058"&gt;256&lt;/font&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur += wi;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseEntered(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseExited(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mousePressed(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseReleased(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt;&amp;nbsp;args&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JFrame f = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;JFrame(&lt;font color="#c00058"&gt;""&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setSize(&lt;font color="#c00058"&gt;640&lt;/font&gt;, &lt;font color="#c00058"&gt;480&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setLocationRelativeTo(&lt;font color="#c00058"&gt;null&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.add(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;RainbowText());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setVisible(&lt;font color="#c00058"&gt;true&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8402808751367351499?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8402808751367351499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8402808751367351499&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8402808751367351499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8402808751367351499'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/12/java2d-3-or-more-colors-gradient-paint.html' title='Java2D 3 or more Colors gradient paint (use TexturePaint)'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1800868588846265021</id><published>2007-12-03T10:53:00.000+08:00</published><updated>2008-01-31T11:40:40.268+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>Java2D Curves Control Point</title><content type='html'>大家刚接触Java图形编程的可能对 二次曲线、贝尔曲线 的几个控制点有点迷惑，我下面有段示例方便大家理解这两个曲线的几个控制点的作用：&lt;br /&gt;&lt;code&gt;&lt;font color="#cd00cd"&gt;package&lt;/font&gt;&amp;nbsp;test.draw;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.BasicStroke;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Color;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Graphics;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Graphics2D;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Point;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.Rectangle;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.RenderingHints;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.event.FocusEvent;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.event.FocusListener;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.event.MouseEvent;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.event.MouseListener;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.event.MouseMotionListener;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;java.awt.geom.GeneralPath;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;javax.swing.JFrame;&lt;br /&gt;&lt;font color="#cd00cd"&gt;import&lt;/font&gt;&amp;nbsp;javax.swing.JPanel;&lt;br /&gt;&lt;br /&gt;&lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;*&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;nbsp;方便理解Quadratic/Bezier曲线的几个控制点作用&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;*&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@author&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;h_Davy [dave3068 AT gmail DOT com]&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@version&lt;/font&gt;&lt;font color="#406090"&gt;&amp;nbsp;2007-11-27 上午01:41:23&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;*/&lt;/font&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;CurvesTest &lt;font color="#2e8b57"&gt;&lt;b&gt;extends&lt;/b&gt;&lt;/font&gt;&amp;nbsp;JPanel&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;implements&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MouseListener, MouseMotionListener, FocusListener {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;final&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;long&lt;/b&gt;&lt;/font&gt;&amp;nbsp;serialVersionUID = &lt;font color="#c00058"&gt;1L&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;CurvesTest()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;super&lt;/b&gt;&lt;/font&gt;(&lt;font color="#c00058"&gt;true&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;init();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;init()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setBackground(Color.white);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setFocusable(&lt;font color="#c00058"&gt;true&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;addFocusListener(&lt;font color="#2e8b57"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;addMouseListener(&lt;font color="#2e8b57"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;addMouseMotionListener(&lt;font color="#2e8b57"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 二次曲线&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;QuadCurve q = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;QuadCurve(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point(&lt;font color="#c00058"&gt;50&lt;/font&gt;, &lt;font color="#c00058"&gt;100&lt;/font&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point(&lt;font color="#c00058"&gt;200&lt;/font&gt;, &lt;font color="#c00058"&gt;150&lt;/font&gt;), &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point(&lt;font color="#c00058"&gt;300&lt;/font&gt;, &lt;font color="#c00058"&gt;100&lt;/font&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 贝尔曲线&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BezierCurve b = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BezierCurve(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point(&lt;font color="#c00058"&gt;100&lt;/font&gt;, &lt;font color="#c00058"&gt;300&lt;/font&gt;), &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point(&lt;font color="#c00058"&gt;200&lt;/font&gt;, &lt;font color="#c00058"&gt;400&lt;/font&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point(&lt;font color="#c00058"&gt;300&lt;/font&gt;, &lt;font color="#c00058"&gt;200&lt;/font&gt;), &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point(&lt;font color="#c00058"&gt;400&lt;/font&gt;, &lt;font color="#c00058"&gt;300&lt;/font&gt;));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;paintComponent(Graphics g)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphics2D g2 = (Graphics2D)g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setRenderingHint(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setStroke(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BasicStroke(&lt;font color="#c00058"&gt;2.f&lt;/font&gt;));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// draw background&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setColor(getBackground());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.fillRect(&lt;font color="#c00058"&gt;0&lt;/font&gt;, &lt;font color="#c00058"&gt;0&lt;/font&gt;, getWidth(), getHeight());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setColor(Color.blue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.drawRect(&lt;font color="#c00058"&gt;5&lt;/font&gt;, &lt;font color="#c00058"&gt;5&lt;/font&gt;, getWidth()-&lt;font color="#c00058"&gt;10&lt;/font&gt;, getHeight()-&lt;font color="#c00058"&gt;10&lt;/font&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// draw curves&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.draw(q.getPath());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.draw(b.getPath());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// fill path area&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setColor(Color.lightGray);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.fill(q.getPath());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.fill(b.getPath());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// paint drag handles&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.setColor(Color.orange);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DragHandle []dhs = q.getDragHandles();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i = &lt;font color="#c00058"&gt;0&lt;/font&gt;; i&amp;lt;dhs.length; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.fill(dhs[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dhs = b.getDragHandles();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i = &lt;font color="#c00058"&gt;0&lt;/font&gt;; i&amp;lt;dhs.length; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g2.fill(dhs[i]);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt;&amp;nbsp;isDrag = &lt;font color="#c00058"&gt;false&lt;/font&gt;; &lt;font color="#406090"&gt;// 是否在拖动控制点&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle curDrag = &lt;font color="#c00058"&gt;null&lt;/font&gt;; &lt;font color="#406090"&gt;// 当前拖动中的控制点&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mousePressed(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// find out is mousePoint in any DragHandle&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DragHandle dh = q.findDragHandle(e.getPoint());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(dh != &lt;font color="#c00058"&gt;null&lt;/font&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;curDrag = dh;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isDrag = &lt;font color="#c00058"&gt;true&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dh = b.findDragHandle(e.getPoint());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(dh != &lt;font color="#c00058"&gt;null&lt;/font&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;curDrag = dh;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isDrag = &lt;font color="#c00058"&gt;true&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseReleased(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isDrag = &lt;font color="#c00058"&gt;false&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseDragged(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(isDrag)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;curDrag.setPoint(e.getPoint());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;q.refresh();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.refresh();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;repaint();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;focusLost(FocusEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isDrag = &lt;font color="#c00058"&gt;false&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 控制点区域&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#cd00cd"&gt;@SuppressWarnings&lt;/font&gt;(&lt;font color="#c00058"&gt;"serial"&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle &lt;font color="#2e8b57"&gt;&lt;b&gt;extends&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Rectangle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point pt = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DragHandle()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width = &lt;font color="#c00058"&gt;5&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height = &lt;font color="#c00058"&gt;5&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DragHandle(Point p)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt.x = p.x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt.y = p.y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;calcRect();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;calcRect()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x = pt.x - &lt;font color="#c00058"&gt;2&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y = pt.y - &lt;font color="#c00058"&gt;2&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;setPoint(Point p)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt.x = p.x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt.y = p.y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;calcRect();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Point getPoint()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;pt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// Quadratic 曲线&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;QuadCurve {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 曲线路径&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/font&gt;&amp;nbsp;GeneralPath gp = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;GeneralPath();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 曲线的几个控制点&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle []pt = &lt;font color="#c00058"&gt;null&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/font&gt;&amp;nbsp;QuadCurve ()&amp;nbsp;{}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QuadCurve(Point p1, Point p2, Point p3)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle[&lt;font color="#c00058"&gt;3&lt;/font&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt[&lt;font color="#c00058"&gt;0&lt;/font&gt;]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle(p1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt[&lt;font color="#c00058"&gt;1&lt;/font&gt;]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle(p2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt[&lt;font color="#c00058"&gt;2&lt;/font&gt;]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle(p3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;refresh();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 更新曲线&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;refresh()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gp.reset();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gp.moveTo((&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;0&lt;/font&gt;].getX(), (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;0&lt;/font&gt;].getY());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gp.quadTo((&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;1&lt;/font&gt;].getX(), (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;1&lt;/font&gt;].getY(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;2&lt;/font&gt;].getX(), (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;2&lt;/font&gt;].getY());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 指定点是否在控制点区域内&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle findDragHandle(Point p)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i = &lt;font color="#c00058"&gt;0&lt;/font&gt;; i&amp;lt;pt.length; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(pt[i].contains(p))&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;pt[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#c00058"&gt;null&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 获得所有控制点&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle[]&amp;nbsp;getDragHandles()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;pt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// 获得该曲线的Path&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;GeneralPath getPath()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;gp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;// Bezier 曲线&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BezierCurve &lt;font color="#2e8b57"&gt;&lt;b&gt;extends&lt;/b&gt;&lt;/font&gt;&amp;nbsp;QuadCurve {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/font&gt;&amp;nbsp;BezierCurve(Point p1, Point p2, Point p3)&amp;nbsp;{}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BezierCurve (Point p1, Point p2, Point p3, Point p4)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle[&lt;font color="#c00058"&gt;4&lt;/font&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt[&lt;font color="#c00058"&gt;0&lt;/font&gt;]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle(p1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt[&lt;font color="#c00058"&gt;1&lt;/font&gt;]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle(p2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt[&lt;font color="#c00058"&gt;2&lt;/font&gt;]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle(p3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pt[&lt;font color="#c00058"&gt;3&lt;/font&gt;]&amp;nbsp;= &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;DragHandle(p4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;refresh();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;refresh()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gp.reset();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gp.moveTo((&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;0&lt;/font&gt;].getX(), (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;0&lt;/font&gt;].getY());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gp.curveTo((&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;1&lt;/font&gt;].getX(), (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;1&lt;/font&gt;].getY(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;2&lt;/font&gt;].getX(), (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;2&lt;/font&gt;].getY(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;3&lt;/font&gt;].getX(), (&lt;font color="#2e8b57"&gt;&lt;b&gt;float&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;pt[&lt;font color="#c00058"&gt;3&lt;/font&gt;].getY());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseClicked(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseEntered(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseExited(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;mouseMoved(MouseEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;focusGained(FocusEvent e)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#406090"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#406090"&gt;* &lt;/font&gt;&lt;font color="#6a5acd"&gt;@param&lt;/font&gt;&lt;font color="#008080"&gt;&amp;nbsp;args&lt;/font&gt;&lt;br /&gt;&lt;font color="#406090"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JFrame f = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;JFrame(&lt;font color="#c00058"&gt;"拖动几个橙色的小点看看 ^_^"&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setSize(&lt;font color="#c00058"&gt;640&lt;/font&gt;, &lt;font color="#c00058"&gt;480&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setLocationRelativeTo(&lt;font color="#c00058"&gt;null&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.add(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;CurvesTest());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setVisible(&lt;font color="#c00058"&gt;true&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1800868588846265021?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1800868588846265021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1800868588846265021&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1800868588846265021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1800868588846265021'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/12/java2d-curves-control-point.html' title='Java2D Curves Control Point'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6586417991612693877</id><published>2007-11-01T09:22:00.000+08:00</published><updated>2008-12-10T18:31:31.627+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>两个曲谱</title><content type='html'>一个是经典游戏《天之痕》的：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MGvKv7nV5OA/RykrCzhDV4I/AAAAAAAAAkk/Y3GlG6ZcC9g/s1600-h/%E5%A6%82%E5%BF%86%E7%8E%89%E5%84%BF%E6%9B%B2.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_MGvKv7nV5OA/RykrCzhDV4I/AAAAAAAAAkk/Y3GlG6ZcC9g/s320/%E5%A6%82%E5%BF%86%E7%8E%89%E5%84%BF%E6%9B%B2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5127676977926592386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;还有一个是小时候很喜欢的《红蜻蜓》（日本民谣）的。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MGvKv7nV5OA/RykrMjhDV5I/AAAAAAAAAks/0J_5OhSnKO8/s1600-h/%E7%BA%A2%E8%9C%BB%E8%9C%93%EF%BC%88%E6%97%A5%E6%B0%91%E8%B0%A3%EF%BC%89.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_MGvKv7nV5OA/RykrMjhDV5I/AAAAAAAAAks/0J_5OhSnKO8/s320/%E7%BA%A2%E8%9C%BB%E8%9C%93%EF%BC%88%E6%97%A5%E6%B0%91%E8%B0%A3%EF%BC%89.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5127677145430316946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6586417991612693877?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6586417991612693877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6586417991612693877&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6586417991612693877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6586417991612693877'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/11/blog-post.html' title='两个曲谱'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MGvKv7nV5OA/RykrCzhDV4I/AAAAAAAAAkk/Y3GlG6ZcC9g/s72-c/%E5%A6%82%E5%BF%86%E7%8E%89%E5%84%BF%E6%9B%B2.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5726986339900977374</id><published>2007-10-28T08:27:00.000+08:00</published><updated>2007-10-28T08:37:55.665+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>VC notes[01]</title><content type='html'>许久没用Win了，生疏了很多。记些笔记：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;让Dialog中能接收 WM_CHAR，及按键时不要“咚咚”声&lt;/li&gt;&lt;br /&gt;在 Dialog::PreTranslateMessage(MSG* pMsg) 中让Dialog跳过WM_CHAR的处理(return FALSE)：&lt;br /&gt;&lt;blockquote&gt;if (pMsg-&amp;gt;message == WM_KEYDOWN&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; || pMsg-&amp;gt;message == WM_KEYUP&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; || pMsg-&amp;gt;message == WM_CHAR) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE; &lt;font color="#009900"&gt;// 解决按键时的“咚咚”声，及让Dialog中能接收 WM_CHAR&lt;/font&gt; &lt;br /&gt;&lt;font color="#009900"&gt;//（Dialog 的回车自动 OK，ESC 自动 CANCEL 也可以用这种方式解决）&lt;/font&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;li&gt;在某窗体中禁用输入法：（标准 Windowz GUI 中控件也是窗体） &lt;br /&gt;处理 WM_INPUTLANGCHANGEREQUEST 并 return 0;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;自绘输入光标 &lt;br /&gt;&lt;blockquote&gt;WM_SETFOCUS: &lt;br /&gt;&lt;font color="#009900"&gt;// 注：这里我开始用this-&amp;gt;CreateCaret(NULL)，发现只有个小黑点，所以用可以定义大小的。&lt;/font&gt; &lt;br /&gt;::CreateCaret(this-&amp;gt;m_hWnd, NULL, 2, 25);&lt;font color="#009900"&gt;//(HBITMAP)1是灰块，NULL是黑块，也可以定制BMP&lt;/font&gt; &lt;br /&gt;::SetCaretPos(50,15);&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;font color="#009900"&gt;// 设置光标位置&lt;/font&gt; &lt;br /&gt;this-&amp;gt;ShowCaret(); &lt;br /&gt;&amp;nbsp;&lt;br /&gt;WM_KILLFOCUS: &lt;br /&gt;&amp;nbsp;&lt;br /&gt;this-&amp;gt;HideCaret(); &lt;br /&gt;::DestroyCaret();&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;动态设置光标位置 &lt;br /&gt;结合如下API：（注意：DC的字体） &lt;br /&gt;&lt;blockquote&gt;SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;size;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;font color="#009900"&gt;// 字串高度、宽度&lt;/font&gt; &lt;br /&gt;GetTextExtentexPoint32(hdc, str, strlen, &amp;amp;size);&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;限制窗口显示的大小 &lt;br /&gt;（注：该消息为Win发送处理，用户只需设置其值就行了，只设置需要的其它的交给系统调整）&lt;blockquote&gt;WM_GETMINMAXINFO:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;font color="#009900"&gt;// 窗口最小能调整到的大小&lt;/font&gt; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMinTrackSize.x = 640; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMinTrackSize.y = 480; &lt;br /&gt;&lt;font color="#009900"&gt;// 窗口最大能调整到的大小&lt;/font&gt; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMaxTrackSize.x = 800; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMaxTrackSize.y = 600; &lt;br /&gt;&lt;font color="#009900"&gt;// 最大化窗口时的大小&lt;/font&gt; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMaxSize.x = 800; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMaxSize.y = 600; &lt;br /&gt;&lt;font color="#009900"&gt;// 最大化窗口时的位置&lt;/font&gt; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMaxPosition.x = 50; &lt;br /&gt;lpMinMaxInfo-&amp;gt;ptMaxPosition.y = 60; &lt;br /&gt;&amp;nbsp;&lt;br /&gt;return 0; &lt;font color="#009900"&gt;// 自己处理后要 return 0;&lt;/font&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5726986339900977374?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5726986339900977374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5726986339900977374&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5726986339900977374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5726986339900977374'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/10/vc-notes01.html' title='VC notes[01]'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5629935269210219373</id><published>2007-10-22T08:25:00.000+08:00</published><updated>2007-10-28T08:27:07.156+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>诡异的显示器进水事件</title><content type='html'>前天，突然显示器闪了一下就黑屏了，还不时的发出“喳喳”声。第一反应是“完了，显示器烧了”，马上关电源，果然不一会儿就闻到一股电路元件烧毁的气味……&lt;br /&gt;&lt;br /&gt;今天拿去修理，拆开后他说：是进水了……&lt;br /&gt;我说：怎么可能呢！？一来房间不漏水、二来没在上面放过水杯、三来没用湿抹布抹过、四来没向显示器上泼水，这显示器怎么就会进水呢？&lt;br /&gt;于是他让我看。果然，在显示器的线路板下面有个“盘子”里积了十多毫升的水。&lt;br /&gt;说 是边上有根线因为虹吸把水引上电路板导致短路而烧毁的。&lt;br /&gt;&lt;br /&gt;后来我就一直在想到底显示器是怎么进水的……&lt;br /&gt;想来想去只想到一种可能，那就是大约今年4、5、6月份的时候空气湿度大，我的显示器放在窗户边上我晚上又不关窗户，当时每天刚开机的时候显示器总是先黑上一分钟之后慢慢的变清晰的，过了那段时间就没事了，我也没怎么在意。&lt;br /&gt;我想可能是当时清晨的时候空气中的水份凝结在显示器内部而流到底下的“盘子”上积累的，但我想不通的是为什么过了一个夏天水都没蒸发？？难道是我的显示器“密封性”太好了？&lt;br /&gt;-_-||||&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5629935269210219373?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5629935269210219373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5629935269210219373&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5629935269210219373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5629935269210219373'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/10/blog-post_22.html' title='诡异的显示器进水事件'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-358380276091674411</id><published>2007-10-20T20:30:00.000+08:00</published><updated>2007-10-20T20:33:43.174+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>感觉FF-2.0.0.8字体清晰了很多(Linux版本)</title><content type='html'>2008出来有一段时间了，不过今天才注意到（前段时间有的忙），发现显示中文字体比之前清晰了很多啊。&lt;br /&gt;不知道是我自己的纯感觉还是真的有提升？&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-358380276091674411?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/358380276091674411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=358380276091674411&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/358380276091674411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/358380276091674411'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/10/ff-2008linux.html' title='感觉FF-2.0.0.8字体清晰了很多(Linux版本)'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4986400933148720331</id><published>2007-10-04T20:27:00.000+08:00</published><updated>2007-10-20T20:30:37.510+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>今年的国庆真忙</title><content type='html'>我姐今年国庆结婚，10月2日婚宴。&lt;br /&gt;我们10月1日赶过去，然后10月2日忙了一天，10月3日又忙着赶回来……&lt;br /&gt;真有够累人的～～&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4986400933148720331?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4986400933148720331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4986400933148720331&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4986400933148720331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4986400933148720331'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/10/blog-post.html' title='今年的国庆真忙'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8251876980189046332</id><published>2007-09-12T21:04:00.000+08:00</published><updated>2007-09-12T21:49:00.663+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='DeAsm'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>sys_calls</title><content type='html'>/usr/include/asm/unistd.h (sys/syscall.h)&lt;br /&gt;the system call numbers:&lt;br /&gt;&lt;p&gt;&lt;table style="border: 1px solid #48e;"&gt;&lt;tbody&gt; &lt;tr&gt;&lt;th align="left"&gt;sys_call name&lt;/th&gt;&lt;th align="left"&gt;sys_call num.(hex)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;restart_syscall&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;_exit&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fork&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;read&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;write&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;open&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;close&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;waitpid&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;create&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;link&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;unlink&lt;/td&gt;&lt;td&gt;a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;execve&lt;/td&gt;&lt;td&gt;b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;chdir&lt;/td&gt;&lt;td&gt;c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mknod&lt;/td&gt;&lt;td&gt;e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;chmod&lt;/td&gt;&lt;td&gt;f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;lchown&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;break&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;oldstat&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;lseek&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getpid&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mount&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;oldumount&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setuid&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getuid&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;stime&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ptrace&lt;/td&gt;&lt;td&gt;1a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;alarm&lt;/td&gt;&lt;td&gt;1b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;oldfstat&lt;/td&gt;&lt;td&gt;1c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;pause&lt;/td&gt;&lt;td&gt;1d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;utime&lt;/td&gt;&lt;td&gt;1e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;stty&lt;/td&gt;&lt;td&gt;1f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;gtty&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;access&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;nice&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ftime&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sync&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;kill&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rename&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mkdir&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rmdir&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;dup&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;pipe&lt;/td&gt;&lt;td&gt;2a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;times&lt;/td&gt;&lt;td&gt;2b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;prof&lt;/td&gt;&lt;td&gt;2c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;brk&lt;/td&gt;&lt;td&gt;2d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setgid&lt;/td&gt;&lt;td&gt;2e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getgid&lt;/td&gt;&lt;td&gt;2f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;signal&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;geteuid&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getegid&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;acct&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;umount2&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;lock&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ioctl&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fcntl&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mpx&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setpgid&lt;/td&gt;&lt;td&gt;39&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ulimit&lt;/td&gt;&lt;td&gt;3a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;oldolduname&lt;/td&gt;&lt;td&gt;3b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;umask&lt;/td&gt;&lt;td&gt;3c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;chroot&lt;/td&gt;&lt;td&gt;3d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ustat&lt;/td&gt;&lt;td&gt;3e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;dup2&lt;/td&gt;&lt;td&gt;3f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getppid&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getpgrp&lt;/td&gt;&lt;td&gt;41&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setsid&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sigaction&lt;/td&gt;&lt;td&gt;43&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sgetmask&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ssetmask&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setreuid&lt;/td&gt;&lt;td&gt;46&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setregid&lt;/td&gt;&lt;td&gt;47&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sigsuspend&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sigpending&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sethostname&lt;/td&gt;&lt;td&gt;4a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setrlimit&lt;/td&gt;&lt;td&gt;4b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getrlimit&lt;/td&gt;&lt;td&gt;4c /* Back compatible 2Gig limited rlimit */&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getrusage&lt;/td&gt;&lt;td&gt;4d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;gettimeofday&lt;/td&gt;&lt;td&gt;4e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;settimeofday&lt;/td&gt;&lt;td&gt;4f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getgroups&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setgroups&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;select&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;symlink&lt;/td&gt;&lt;td&gt;53&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;oldlstat&lt;/td&gt;&lt;td&gt;54&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;readlink&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;uselib&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;swapon&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;reboot&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;readdir&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mmap&lt;/td&gt;&lt;td&gt;5a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;munmap&lt;/td&gt;&lt;td&gt;5b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;truncate&lt;/td&gt;&lt;td&gt;5c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ftruncate&lt;/td&gt;&lt;td&gt;5d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fchmod&lt;/td&gt;&lt;td&gt;5e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fchown&lt;/td&gt;&lt;td&gt;5f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getpriority&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setpriority&lt;/td&gt;&lt;td&gt;61&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;profil&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;statfs&lt;/td&gt;&lt;td&gt;63&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fstatfs&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ioperm&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;socketcall&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;syslog&lt;/td&gt;&lt;td&gt;67&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;settimer&lt;/td&gt;&lt;td&gt;68&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;gettimer&lt;/td&gt;&lt;td&gt;69&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;stat&lt;/td&gt;&lt;td&gt;6a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;lstat&lt;/td&gt;&lt;td&gt;6b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fstat&lt;/td&gt;&lt;td&gt;6c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;olduname&lt;/td&gt;&lt;td&gt;6d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;iopl&lt;/td&gt;&lt;td&gt;6e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;vhangup&lt;/td&gt;&lt;td&gt;6f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;idle&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;vm86old&lt;/td&gt;&lt;td&gt;71&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;wait4&lt;/td&gt;&lt;td&gt;72&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;swapoff&lt;/td&gt;&lt;td&gt;73&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sysinfo&lt;/td&gt;&lt;td&gt;74&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ipc&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fsync&lt;/td&gt;&lt;td&gt;76&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sigreturn&lt;/td&gt;&lt;td&gt;77&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;clone&lt;/td&gt;&lt;td&gt;78&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setdomainname&lt;/td&gt;&lt;td&gt;79&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;uname&lt;/td&gt;&lt;td&gt;7a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;modify_ldt&lt;/td&gt;&lt;td&gt;7b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;adjtimex&lt;/td&gt;&lt;td&gt;7c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mprotect&lt;/td&gt;&lt;td&gt;7d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sigprocmask&lt;/td&gt;&lt;td&gt;7e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;create_module&lt;/td&gt;&lt;td&gt;7f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;init_module&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;delete_module&lt;/td&gt;&lt;td&gt;81&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;get_kernel_syms&lt;/td&gt;&lt;td&gt;82&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;quotactl&lt;/td&gt;&lt;td&gt;83&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getpgid&lt;/td&gt;&lt;td&gt;84&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fchdir&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;dbflush&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sysfs&lt;/td&gt;&lt;td&gt;87&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;personality&lt;/td&gt;&lt;td&gt;88&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;afs_syscall&lt;/td&gt;&lt;td&gt;89 /* Syscall for Andrew File System */&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setfsuid&lt;/td&gt;&lt;td&gt;8a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setfsgid&lt;/td&gt;&lt;td&gt;8b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;_llseek&lt;/td&gt;&lt;td&gt;8c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getdents&lt;/td&gt;&lt;td&gt;8d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;_newselect&lt;/td&gt;&lt;td&gt;8e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;flock&lt;/td&gt;&lt;td&gt;8f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;msync&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;readv&lt;/td&gt;&lt;td&gt;91&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;writev&lt;/td&gt;&lt;td&gt;92&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getsid&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fdatasync&lt;/td&gt;&lt;td&gt;94&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;_sysctl&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mlock&lt;/td&gt;&lt;td&gt;96&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;munlock&lt;/td&gt;&lt;td&gt;97&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mlockall&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;munlockall&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_setparam&lt;/td&gt;&lt;td&gt;9a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_getparam&lt;/td&gt;&lt;td&gt;9b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_setscheduler&lt;/td&gt;&lt;td&gt;9c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_getscheduler&lt;/td&gt;&lt;td&gt;9d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_yield&lt;/td&gt;&lt;td&gt;9e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_get_priority_max&lt;/td&gt;&lt;td&gt;9f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_set_priority_min&lt;/td&gt;&lt;td&gt;a0&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sched_rr_get_interval&lt;/td&gt;&lt;td&gt;a1&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;nanosleep&lt;/td&gt;&lt;td&gt;a2&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mremap&lt;/td&gt;&lt;td&gt;a3&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setresuid&lt;/td&gt;&lt;td&gt;a4&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getresuid&lt;/td&gt;&lt;td&gt;a5&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;vm86&lt;/td&gt;&lt;td&gt;a6&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;query_module&lt;/td&gt;&lt;td&gt;a7&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;poll&lt;/td&gt;&lt;td&gt;a8&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;nfsservctl&lt;/td&gt;&lt;td&gt;a9&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;setresgid&lt;/td&gt;&lt;td&gt;aa&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getresgid&lt;/td&gt;&lt;td&gt;ab&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;prctl&lt;/td&gt;&lt;td&gt;ac&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rt_sigreturn&lt;/td&gt;&lt;td&gt;ad&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rt_sigaction&lt;/td&gt;&lt;td&gt;ae&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rt_sigprocmask&lt;/td&gt;&lt;td&gt;af&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rt_sigpending&lt;/td&gt;&lt;td&gt;b0&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rt_sigtimedwait&lt;/td&gt;&lt;td&gt;b1&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rt_sigqueueinfo&lt;/td&gt;&lt;td&gt;b2&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;rt_sigsuspend&lt;/td&gt;&lt;td&gt;b3&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;pread64&lt;/td&gt;&lt;td&gt;b4&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;pwrite64&lt;/td&gt;&lt;td&gt;b5&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;chown&lt;/td&gt;&lt;td&gt;b6&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getcwd&lt;/td&gt;&lt;td&gt;b7&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;capget&lt;/td&gt;&lt;td&gt;b8&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;capset&lt;/td&gt;&lt;td&gt;b9&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sigaltstack&lt;/td&gt;&lt;td&gt;ba&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;sendfile&lt;/td&gt;&lt;td&gt;bb&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getpmsg&lt;/td&gt;&lt;td&gt;bc /* some people actually want streams */&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;putpmsg&lt;/td&gt;&lt;td&gt;bd /* some people actually want streams */&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;vfork&lt;/td&gt;&lt;td&gt;be&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ugetrlimit&lt;/td&gt;&lt;td&gt;bf /* SuS compliant getrlimit */&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mmap2&lt;/td&gt;&lt;td&gt;c0&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;truncate64&lt;/td&gt;&lt;td&gt;c1&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ftruncate64&lt;/td&gt;&lt;td&gt;c3&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;tkill&lt;/td&gt;&lt;td&gt;ee&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;io_setup&lt;/td&gt;&lt;td&gt;f5&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;io_destory&lt;/td&gt;&lt;td&gt;f6&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;io_getevents&lt;/td&gt;&lt;td&gt;f7&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;io_submit&lt;/td&gt;&lt;td&gt;f8&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;io_cancel&lt;/td&gt;&lt;td&gt;f9&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;exit_group&lt;/td&gt;&lt;td&gt;fc&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;timer_create&lt;/td&gt;&lt;td&gt;103&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;timer_settime&lt;/td&gt;&lt;td&gt;104&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;timer_gettime&lt;/td&gt;&lt;td&gt;105&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;timer_getoverrun&lt;/td&gt;&lt;td&gt;106&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;timer_delete&lt;/td&gt;&lt;td&gt;107&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;clock_settime&lt;/td&gt;&lt;td&gt;108&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;clock_gettime&lt;/td&gt;&lt;td&gt;109&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;clock_getres&lt;/td&gt;&lt;td&gt;10a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;clock_nanosleep&lt;/td&gt;&lt;td&gt;10b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;tgkill&lt;/td&gt;&lt;td&gt;10e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;utimes&lt;/td&gt;&lt;td&gt;10f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;kexec_load&lt;/td&gt;&lt;td&gt;11b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;waitid&lt;/td&gt;&lt;td&gt;11c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;/* sys_setaltroot&lt;/td&gt;&lt;td&gt;11d */&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;add_key&lt;/td&gt;&lt;td&gt;11e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;request_key&lt;/td&gt;&lt;td&gt;11f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;keyctl&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ioprio_set&lt;/td&gt;&lt;td&gt;121&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;ioprio_get&lt;/td&gt;&lt;td&gt;122&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;inotify_init&lt;/td&gt;&lt;td&gt;123&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;inotify_add_watch&lt;/td&gt;&lt;td&gt;124&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;inotify_rm_watch&lt;/td&gt;&lt;td&gt;125&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;migrate_pages&lt;/td&gt;&lt;td&gt;126&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;openat&lt;/td&gt;&lt;td&gt;127&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mkdirat&lt;/td&gt;&lt;td&gt;128&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;mknodat&lt;/td&gt;&lt;td&gt;129&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fchownat&lt;/td&gt;&lt;td&gt;12a&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;futimesat&lt;/td&gt;&lt;td&gt;12b&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fstatat64&lt;/td&gt;&lt;td&gt;12c&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;unlinkat&lt;/td&gt;&lt;td&gt;12d&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;renameat&lt;/td&gt;&lt;td&gt;12e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;linkat&lt;/td&gt;&lt;td&gt;12f&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;symlinkat&lt;/td&gt;&lt;td&gt;130&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;readlinkat&lt;/td&gt;&lt;td&gt;131&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;fchmodat&lt;/td&gt;&lt;td&gt;132&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;faccessat&lt;/td&gt;&lt;td&gt;133&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;getcpu&lt;/td&gt;&lt;td&gt;13e&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8251876980189046332?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8251876980189046332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8251876980189046332&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8251876980189046332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8251876980189046332'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/09/syscalls.html' title='sys_calls'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-612495784824792085</id><published>2007-09-03T20:31:00.000+08:00</published><updated>2007-09-03T21:09:38.735+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>位域</title><content type='html'>位域是C语言里面比较高级的特性，在结构体中比较常见。&lt;br /&gt;现在在嵌入式开发中还比较常用，主要是能够节约内存空间。&lt;br /&gt;如：&lt;br /&gt;&lt;blockquote&gt;typedef struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; short int&amp;nbsp;&amp;nbsp;&amp;nbsp; flag_a: 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#009900"&gt;/* 在内存中只占 1 bit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 超出可能会向高位覆写&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; * 但也可能丢失高位，由编译器而定 */&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; short int&amp;nbsp;&amp;nbsp;&amp;nbsp; flag_b: 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#009900"&gt;/* 占 1 bit */&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; short int&amp;nbsp;&amp;nbsp;&amp;nbsp; flag_c: 4;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#009900"&gt;/* 占 4 bits */&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; short int&amp;nbsp;&amp;nbsp;&amp;nbsp; flag_d: 2;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#009900"&gt;/* 占 2 bits */&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; short int&amp;nbsp;&amp;nbsp;&amp;nbsp; flag_e;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color="#009900"&gt;/* 占 16 bits */&lt;/font&gt;&lt;br /&gt;} flags;&lt;br /&gt;&lt;font color="#009900"&gt;/* 这里整个结构体在内存中只占用了 4 Bytes */&lt;br /&gt;/* 但还要注意：分配内存时还要考虑内存对齐原则，&lt;br /&gt;&amp;nbsp;* 如，上面 flag_d 之后到 flag_e 之间，内存还有 8bits 的空余。&lt;br /&gt;&amp;nbsp;* 所以 请尽量把位域字段放在一块儿！&lt;br /&gt;&amp;nbsp;* 如果在 flag_e 之后再添加一个 flag_f: 8 的话，空间是只会向后扩展&lt;br /&gt;&amp;nbsp;* 而不会插入 flag_d 和 flag_e 之间空余空间的。&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;br /&gt;// EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-612495784824792085?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/612495784824792085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=612495784824792085&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/612495784824792085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/612495784824792085'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/09/blog-post.html' title='位域'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-560634654664075617</id><published>2007-08-30T19:08:00.000+08:00</published><updated>2007-08-30T19:13:01.854+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>Star Trek 中曲速航行物理学原理</title><content type='html'>详见： &lt;a href="http://www.ex-astris-scientia.org/treknology/warp1.htm"&gt;http://www.ex-astris-scientia.org/treknology/warp1.htm&lt;/a&gt;&lt;br /&gt;其中空间坐标换算见 "Space-time diagram" 节。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-560634654664075617?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/560634654664075617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=560634654664075617&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/560634654664075617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/560634654664075617'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/08/star-trek.html' title='Star Trek 中曲速航行物理学原理'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5875719108362310053</id><published>2007-08-30T08:39:00.000+08:00</published><updated>2007-08-30T09:12:29.079+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>Starfleet General Order星际舰队指导原则全文</title><content type='html'>以下所列之指导原则为星舰总部所应遵守之规范。本指导原则乃由星际舰队秘书处所提出，并或联邦议会追认为行政命令，本指导原则适用所有星际舰队成员。本指导原则之指定列管范围乃由联邦议会或军事指挥会议其中一者为之。&lt;br /&gt;相反地，本指导原则亦授权星际舰队得以本指导原则影响联邦政策。本指导原则所罗列支32项条款乃所有星际舰队之任务与作战的基本规范。首六条概已经联邦议会追认为联邦基本法。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第一条：最高指导原则&lt;br /&gt;&lt;br /&gt;凡星际舰队成员不得干涉一有知觉并居住於有正常文化发展且拥有自我慎思能力的环境下之外星种族生活与文化发展，前述之干涉行为包括将高等知识、力量、科技引进至向无能力和先进智慧掌控其发展之世界。星际舰队成员不得以拯救自身生命或船舰为由违反本条款，但若是在未告知该外星世界的情况下，改正另外违反本条款行为或处理因意外而产生之污染则不在本条款限制范围之内。当星际舰队成员执行任务时应将本条款至於最优先考量，并且负起应负之最高心理责任。&lt;br /&gt;&lt;br /&gt;&lt;span class="hideonmain"&gt;&lt;br /&gt;指导原则第二条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员无论个别或集体行动均不应在非必要情况下动用武力对抗星联成员，且无论情况下都不得违反本条款。本条款授权之对象为议员、代言人、经指定之领袖和非星联成员。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第三条&lt;br /&gt;&lt;br /&gt;每一联邦成员主权必须受到绝对尊重，凡星际舰队成员必须遵守联邦成员行星之司法裁量权管制下的法规、法律、传统风俗与统治者所订立之规范。违反者将被交付当地政府受应负之惩罚。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第四条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员如与迄今向未被发现之智慧生命形式接触时，无论使用文字或动作均不应告知前述之生命形式：除了他们的世界之外，仍有其他世界与生命形式存在於他们的太空边界之外。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第五条&lt;br /&gt;&lt;br /&gt;在极度紧急之情况下，联邦特使经授权得动用紧急权力并依照当时的情况与环境采用不会危及联邦公民之行动。本条款亦许可经授权之联邦公民人员得短暂权宜指挥星际舰队之船舰与成员，星际舰队人员务须服从该员於危急时间所获得之授权。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第六条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员必须将来自联邦公民的警及呼救无条件视为最优先处理项目。&lt;br /&gt;舰队成员必须立即回应该呼救并予以处理且排除排除其他行动。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第七条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员不得以紧急状态或任何理由前往Talos Ⅳ，如本条款与指导原则第六条冲突，则指导原则第六条无效。违反本条款者将被判处死刑。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第八条&lt;br /&gt;&lt;br /&gt;凡星际舰队船舰指挥官若目击并辨别确认所隶属外星政权之战船驶入联邦领域，应判断其进入联邦领域之理由。如该战船表现出明显敌意，联邦船只得援引本条款采取适当行动以保护联邦成员之生命财产。同时该船舰指挥官得依其判断何时采用武力解除敌对状态，但应避免非必要杀害生命。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第九条&lt;br /&gt;&lt;br /&gt;凡正规或预备星际舰队指挥官均不得在未获联邦政府同意下提供任何人政治庇护。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十条&lt;br /&gt;&lt;br /&gt;如有任何资深军官证明之目击证人存在或有类似相似证据证实之个人违反最高指导原则，本条款授权经过宣誓之联邦政府代表人立即解除该员职务并予以逮捕。该联邦政府代理人亦需立即采取其认为之最适当行动将伤害减低至最低。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十一条&lt;br /&gt;&lt;br /&gt;凡军阶为上校或将军之星际舰队军官得援引本条款获得完整授权与法定非联邦成员交涉条件与缔结条约。同时在该情况下，本条款授权该交涉军官得以使用联邦特使所有权力。凡援引本条款缔结之条约需经过星际舰队作战部门主任或星际舰队秘书处批准。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十二条&lt;br /&gt;&lt;br /&gt;凡星际舰队军官仅有在条约许可或必须为在紧急状态下抢救联邦公民为前提方得进入中立区。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十三条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员除非拥有其他命令声明否则应对行星系之领域与该星系政府完整性有所尊重并且不会对该世界之领域区采取入侵行为。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十四条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员仅有在得到该星系领袖或民选之领导人请求并接获直接命令方得以保护联邦公民之生命财产安全与维护指导原则完整性为名介入当地行星系事件。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十五条&lt;br /&gt;&lt;br /&gt;凡将军级星际舰队指挥官不得在未有适当武力之护卫下前往有潜在性威胁之区域。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十六条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员仅有在不违反最高指导原则与不为及联邦或星际舰队安全之情况下方得提供科技、医疗或其他科学技术与未被承认之星族。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十七条&lt;br /&gt;&lt;br /&gt;星际舰队船舰舰长必须慎重考虑其船员之生命安全。在有潜在性威胁的情形下舰长需将船员之生命安全考量置於船舰之上。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十八条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员若被指控叛国，联邦法院有权解除其之职务。若该员已被释放，星舰总部不得在该案上以其他法条追索其罪名。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第十九条&lt;br /&gt;&lt;br /&gt;凡星际舰队成员除非宣布紧急状态否则不得在行星系之间运送被相信用於进攻行为之人员与材料。本条款适用范围包括位於联邦领域内之独立世界。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十条&lt;br /&gt;&lt;br /&gt;星舰总部之军官与成员均受雇於处理联邦领域内所有种族违反本身意愿之财产、运输、销售或商业利益交换之事宜。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十一条&lt;br /&gt;&lt;br /&gt;凡星际舰队之军官或义务役士兵均不得在未或联邦议会许可下替独立外星政府服务&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十二条&lt;br /&gt;&lt;br /&gt;个人的意见表达与公开表述应获得尊重，本条款保障星际舰队成员能够在非公开场合讨论联邦政策，但是其内容应避免违反最高指导原则、联邦特别命令与星际舰队指挥程序。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十三条&lt;br /&gt;&lt;br /&gt;当可证实之证据证明星际舰队船舰或其他同等联邦职务之资深指挥军官正在或过去曾经违反最高指导原则，星联军官得解除前述军官之职务，并且承担前述军官职务之所有权利以等候蔫帮政府官方的全面调查。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十四条&lt;br /&gt;&lt;br /&gt;如果指挥官认为有个人或团体对星际舰队成员或联邦公民进行恐吓，他可以采用任何他认为必要的手段（包括武力）来保护被恐吓者的安全。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十五条&lt;br /&gt;&lt;br /&gt;在不危及星联或星际舰队安全的极端紧急状况下受星际舰队成员保护的公民与军人应得到与其军阶或身份相符之合理待遇。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十六条&lt;br /&gt;&lt;br /&gt;船舰编制内或地面基地编制的成员无权直接要求其上级长官对行动做出任何说明。同样地，船舰成员在没有直接涉及指挥对抗其指挥官的惩戒性措施的情况下不须分担前述之行动。&lt;br /&gt;本条款适用於有存在证据确实证明有违反最高指导原则的情势。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十七条&lt;br /&gt;&lt;br /&gt;如果家庭成员获准登上舰队船舰或被视为舰队编制内的一部份，凡星际舰队成员不应因为标准任务或责任而被要求与其家庭分离。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十八条&lt;br /&gt;&lt;br /&gt;除非至少三名资深军官彻底与完全同意，指挥阶级军官不应被剥夺指挥权。但如真有此情况发生之可能，采取此行动之军官群应包括该船舰之首席军官、总医师、顾问以及一名具指挥身份的资浅军官。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第二十九条&lt;br /&gt;&lt;br /&gt;任何星际舰队船舰指挥官之首要责任是要保障包括公民在内的船员福利与社区安全。除非是职务需求或其他不可避免情况，军官不应只是采取对个人安全会造成不当威胁的行动。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第三十条&lt;br /&gt;&lt;br /&gt;星舰总部承认每艘船的指挥官有权在发现新的有知觉外星种族的环境情况下权宜详细解释最高指导原则与生效的其他指导原则。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;指导原则第三十一条&lt;br /&gt;&lt;br /&gt;指导原则的状态与叙述内容完全适用所有已被发现有知觉的原生或人工外星种族。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;除非在最紧急状态下，星际舰队指挥官未经星舰总部特别准许授权不得命令他的船舰飞行快过曲速系数五级。本条款不适用使用变量几何曲速引擎（Variable Geometry Warp Nacelles）或者稳定场域系统（Stable Field System）的船舰。&lt;br /&gt;&lt;br /&gt;//EOF&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5875719108362310053?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5875719108362310053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5875719108362310053&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5875719108362310053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5875719108362310053'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/08/starfleet-general-order.html' title='Starfleet General Order星际舰队指导原则全文'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-2691012358029551066</id><published>2007-08-24T21:11:00.000+08:00</published><updated>2007-08-25T09:15:04.166+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>重复定义。。。</title><content type='html'>今天有人问我他某个头文件中定义的一个函数在编译的时候总是出现“重复定义”的提示，我也有直接在头文件中定义函数体的情况但从未遇到过那种提示啊～～，当时想了半天。。。未果。。。后来吃饭的时候才突然想到，一定是他在多个源文件中include了那个头文件，而那个头文件没有使用如下预编译宏：&lt;br /&gt;&lt;blockquote&gt;#ifndef _XXX_H_&lt;br /&gt;#define _XXX_H_&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;#endif //_XXX_H_&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;我每次写头文件时都会习惯性的首先添加上述宏，已经成为一种下意识的习惯了，所以当时一时间没有考虑到这种情况。&lt;br /&gt;我还真是的……养成这种良好的习惯后竟然会在考虑问题时自然而然的首先忽略掉这种情况。。。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-2691012358029551066?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/2691012358029551066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=2691012358029551066&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2691012358029551066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/2691012358029551066'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/08/blog-post.html' title='重复定义。。。'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-7337731998617537234</id><published>2007-08-14T17:31:00.000+08:00</published><updated>2007-08-14T17:37:43.756+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='DeAsm'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>ALD</title><content type='html'>ALD(Assembly Language Debugger)&lt;br /&gt;&lt;br /&gt;is a simple beautiful baseline POSIX debugger.&lt;br /&gt;if you wanna debug a asm program this will be a better choice&lt;br /&gt;&lt;br /&gt;http://ald.sourceforge.net&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-7337731998617537234?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/7337731998617537234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=7337731998617537234&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7337731998617537234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7337731998617537234'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/08/ald.html' title='ALD'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-695664573715065964</id><published>2007-08-01T18:10:00.001+08:00</published><updated>2007-08-01T18:14:14.470+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>daemon tool : mount from command line</title><content type='html'>&gt; "\path\to\daemon.exe" -mount 0,"\path\to\image file"&lt;br /&gt;(-mount index,imagefile or -unmount index)&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\ISOfile\shell\open\command]&lt;br /&gt;@="\"C:\\Program Files\\DAEMON Tools\\daemon.exe\" -mount 0,\"%1\""&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-695664573715065964?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/695664573715065964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=695664573715065964&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/695664573715065964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/695664573715065964'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/08/daemon-tool-mount-from-command-line.html' title='daemon tool : mount from command line'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6022324405960143434</id><published>2007-07-31T09:53:00.000+08:00</published><updated>2007-07-31T10:01:48.022+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DeAsm'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>分析Delphi编译的程序真郁闷</title><content type='html'>分析Delphi编译的程序真的很郁闷～～&lt;br /&gt;&lt;br /&gt;特别是字符串部分……&lt;br /&gt;Pascal字符串结构是：[字串长]字串字符部分....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Delphi程序的 函数/过程 传值方式大多是以寄存器为主。&lt;br /&gt;其中也有特殊的，比如_LStrCatN：&lt;br /&gt;&lt;blockquote&gt;procedure _LStrCatN (var dest:AnsiString; argCnt: Integer; ...) &lt;font color="#009900"&gt;// AnsiString 的连接&lt;/font&gt;&lt;/blockquote&gt;&lt;br /&gt;EAX ：目标字符串 &lt;br /&gt;EDX ：源字符串的个数 +2 &lt;br /&gt;[ESP+4*i] ：第 i 个源字符串的指针 &lt;br /&gt;&lt;br /&gt;这里的入口参数比较特别 &lt;br /&gt;&lt;br /&gt;之上有：&lt;br /&gt;push xxx&lt;br /&gt;push xxx&lt;br /&gt;...(EDX个push不一定要在一起)&lt;br /&gt;如：&lt;br /&gt;_LStrCatN (str, 3, LStrFromString(b), LStrFromString(a), IntToStr(n))&lt;br /&gt;这样的就有可能是：&lt;br /&gt;&lt;blockquote&gt;lea&amp;nbsp;&amp;nbsp; &amp;nbsp;edx, [ebp+tmp1]&lt;br /&gt;mov&amp;nbsp;&amp;nbsp; &amp;nbsp;eax, [ebp+n]&lt;br /&gt;call&amp;nbsp; &amp;nbsp;IntToStr&lt;br /&gt;push&amp;nbsp; &amp;nbsp;[ebp+tmp1]&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;font color="#009900"&gt;; &amp;lt;&amp;lt;== 01&lt;/font&gt;&lt;br /&gt;lea&amp;nbsp;&amp;nbsp; &amp;nbsp;eax, [ebp+tmp2]&lt;br /&gt;mov&amp;nbsp;&amp;nbsp; &amp;nbsp;edx, ds:off_a&lt;br /&gt;call&amp;nbsp; &amp;nbsp;LStrFromString&lt;br /&gt;push&amp;nbsp; &amp;nbsp;[ebp+tmp2]&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;font color="#009900"&gt;; &amp;lt;&amp;lt;== 02&lt;/font&gt;&lt;br /&gt;lea&amp;nbsp;&amp;nbsp; &amp;nbsp;eax, [ebp+tmp3]&lt;br /&gt;lea&amp;nbsp;&amp;nbsp; &amp;nbsp;edx, [ebp+b]&lt;br /&gt;call&amp;nbsp; &amp;nbsp;LStrFromString&lt;br /&gt;push&amp;nbsp; &amp;nbsp;[ebp+tmp3]&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;font color="#009900"&gt;; &amp;lt;&amp;lt;== 03&lt;/font&gt;&lt;br /&gt;lea&amp;nbsp;&amp;nbsp; &amp;nbsp;edx, [ebp+str]&lt;br /&gt;mov&amp;nbsp;&amp;nbsp; &amp;nbsp;edx, 3&lt;br /&gt;call&amp;nbsp; &amp;nbsp;LStrCatN&lt;br /&gt;&lt;br /&gt;&lt;font color="#009900"&gt;; 这些push分散到了 01,02,03 所指处（一开始我还以为前两个push是LStrFromString的- -）&lt;/font&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;返回值也不一定在 EAX 中——尽管大多数是在EAX中没错，不过也有放[ESP+4]的。&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6022324405960143434?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6022324405960143434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6022324405960143434&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6022324405960143434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6022324405960143434'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/07/delphi_31.html' title='分析Delphi编译的程序真郁闷'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5777119716713663611</id><published>2007-07-07T17:54:00.000+08:00</published><updated>2007-07-07T18:06:40.671+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Linux下实现getch()</title><content type='html'>Linux下的int getchar(void)在默认情况下需要Enter后才能继续。那么可否像DOS下那样即时返回的呢？&lt;br /&gt;回答是肯定的：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;使用curses库的getch()。&lt;/li&gt;&lt;li&gt;read /dev/input/event0 （kernel &amp;gt;= 2.6）&lt;/li&gt;&lt;li&gt;将stdin改成unbuffered：&lt;br /&gt;&lt;blockquote&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;termios.h&amp;gt;&lt;br /&gt;int getch (void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int&amp;nbsp;&amp;nbsp; &amp;nbsp;c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct termios&amp;nbsp;&amp;nbsp; &amp;nbsp;tm_old, tm;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = tcgetattr (STDIN_FILENO, &amp;amp;tm_old);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;assert (ret==0);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;memcpy (&amp;amp;tm, &amp;amp;tm_old, sizeof(tm));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;tm.c_lflag &amp;amp;= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;tcsetattr (STDIN_FILENO, TCSANOW, &amp;amp;tm);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;c = fgetc(stdin);//getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = tcsetattr (STDIN_FILENO, TCSANOW, &amp;amp;tm_old);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;assert (ret==0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return c;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5777119716713663611?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5777119716713663611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5777119716713663611&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5777119716713663611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5777119716713663611'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/07/linuxgetch.html' title='Linux下实现getch()'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6604396815554987577</id><published>2007-07-04T10:26:00.000+08:00</published><updated>2007-07-04T10:37:52.669+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>《侠胆雄狮》</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.classicalliance.net/site%20logos/vincent2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px;" src="http://www.classicalliance.net/site%20logos/vincent2.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;最近在看《Dark Angel》，第二季中Joshua("the first one")的出场立刻让我联想到了上世纪90年代中央电视台正大剧场播过的《侠胆雄狮》(Beauty and the Beast)。&lt;br /&gt;很经典的一部电视剧，当时我还很小，很多记忆都模糊了，但是看这部剧的感受还深深的印在我的心头。不过正大剧场好像只引进了第一季呢，没结局。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tv.mofile.com/r4s2qzp3/"&gt;http://tv.mofile.com/r4s2qzp3/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6604396815554987577?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6604396815554987577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6604396815554987577&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6604396815554987577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6604396815554987577'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/07/blog-post.html' title='《侠胆雄狮》'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-4649159582461368300</id><published>2007-07-04T08:44:00.000+08:00</published><updated>2007-07-04T09:00:49.351+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>amulecmd</title><content type='html'>~/.aMule/amule.conf&lt;br /&gt;&lt;blockquote&gt;AcceptExternalConnections=1&lt;br /&gt;ECPassword=&amp;lt;md5 string&amp;gt; # get this string with this:&lt;br /&gt;&lt;blockquote&gt;$ echo "your passwd" | md5sum | cut -d ' ' -f 1&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;then:&lt;br /&gt;&lt;blockquote&gt;$ amuled &amp;&lt;/blockquote&gt;&lt;br /&gt;you can using amulecmd do a simply control.&lt;br /&gt;&lt;blockquote&gt;$ amulecmd -P "your passwd" [-c "control cmd"]&lt;/blockquote&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-4649159582461368300?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/4649159582461368300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=4649159582461368300&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4649159582461368300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/4649159582461368300'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/07/amulecmd.html' title='amulecmd'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-7724206949155210768</id><published>2007-06-30T20:59:00.000+08:00</published><updated>2007-06-30T21:06:26.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>梦</title><content type='html'>最后一次做梦是什么时候呢？似乎已经忘记了吧。想起来好像有好些年没有做梦了～～&lt;br /&gt;&lt;br /&gt;啊～ 呵呵，说这些是没有意义的。理论上说，对于人类的正常睡眠每天都有做梦的啦，每次进入深层睡眠会有3到4次的做梦。&lt;br /&gt;但通常意义上的做梦还是指那些清醒后还能够保留在记忆中的那些信息。&lt;br /&gt;&lt;br /&gt;我所指的就是后者，真的好想再次做梦哪！哎～&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-7724206949155210768?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/7724206949155210768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=7724206949155210768&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7724206949155210768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/7724206949155210768'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/06/blog-post_30.html' title='梦'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-736896299974168780</id><published>2007-06-29T09:38:00.000+08:00</published><updated>2007-06-29T09:48:14.488+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>不知道overnet2000的Kad Nodes是什么时候开始失效的？</title><content type='html'>今天早上8:00之前还蛮好的，8:00之后 aMule log 一直持续不断的出现：&lt;br /&gt;ServerUDP: Received invalid packet, protocol (0xe4) and opcode (0x20)&lt;br /&gt;之类的信息，Kad Nodes的连接也一落千丈，上网搜索了发现果然是和Kad有关。&lt;br /&gt;打开，aMule默认填写的 http://download.overnet2000.de/nodes.dat 不知道什么时候就是“404”了。&lt;br /&gt;结果，换一个node吧，更新后Kad的连接是上去了，但源似乎还没更新，后来才意识到aMule更新这些东西后还需要restart的。。。&lt;br /&gt;restart aMule 后一切回复正常。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-736896299974168780?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/736896299974168780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=736896299974168780&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/736896299974168780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/736896299974168780'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/06/overnet2000kad-nodes.html' title='不知道overnet2000的Kad Nodes是什么时候开始失效的？'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8272762719262372315</id><published>2007-06-28T07:07:00.000+08:00</published><updated>2007-06-28T07:08:22.938+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>十年</title><content type='html'>十年……又过了十年。&lt;br /&gt;如此轻易的放过了这十年。&lt;br /&gt;十年的时间经历了很多，也改变了很多。&lt;br /&gt;十年前的信念你是否还在坚守？&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8272762719262372315?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8272762719262372315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8272762719262372315&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8272762719262372315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8272762719262372315'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/06/blog-post.html' title='十年'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3515095349615427077</id><published>2007-06-14T21:54:00.000+08:00</published><updated>2007-06-14T21:59:02.714+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><title type='text'>Xlib Programming Manuals</title><content type='html'>SUPER-UX Xlib Programming Manual&lt;br /&gt;&lt;a href="http://tucupi.cptec.inpe.br/sx4/sx4man2/g1ae02e/frame.html"&gt;http://tucupi.cptec.inpe.br/sx4/sx4man2/g1ae02e/frame.html&lt;/a&gt;&lt;br /&gt;The X Window system&lt;br /&gt;&lt;a href="http://tronche.com/gui/x/"&gt;http://tronche.com/gui/x/&lt;/a&gt;&lt;br /&gt;Basic Graphics Programming With The Xlib Library&lt;br /&gt;&lt;a href="http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html"&gt;http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html&lt;/a&gt;&lt;br /&gt;Xlib Programming Manual (O'Reilly &amp; Associates, Inc.): Table of Contents&lt;br /&gt;&lt;a href="http://www.sbin.org/doc/Xlib/index_contents.html"&gt;http://www.sbin.org/doc/Xlib/index_contents.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3515095349615427077?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3515095349615427077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3515095349615427077&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3515095349615427077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3515095349615427077'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/06/xlib-programming-manuals.html' title='Xlib Programming Manuals'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8059032768377957542</id><published>2007-06-14T20:45:00.000+08:00</published><updated>2007-06-14T20:56:17.618+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>GNU Go</title><content type='html'>GNU Go is a free program that plays the game of Go.&lt;br /&gt;you can using this to play Go with your PC.&lt;br /&gt;but, GNU Go need a GUI.&lt;br /&gt;then, qGo(QT 3) or Quarry(GTK+ 2) will be needed.&lt;br /&gt;&lt;br /&gt;GNU Go : &lt;a href="http://www.gnu.org/software/gnugo/"&gt;http://www.gnu.org/software/gnugo/&lt;/a&gt;&lt;br /&gt;qGo : &lt;a href="http://sourceforge.net/projects/qgo/"&gt;http://sourceforge.net/projects/qgo/&lt;/a&gt;&lt;br /&gt;Quarry : &lt;a href="http://home.gna.org/quarry/"&gt;http://home.gna.org/quarry/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8059032768377957542?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8059032768377957542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8059032768377957542&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8059032768377957542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8059032768377957542'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/06/gnu-go.html' title='GNU Go'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6760527903352639082</id><published>2007-05-21T18:19:00.000+08:00</published><updated>2007-05-22T11:59:26.009+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='M.F.'/><title type='text'>SC2中神族的母舰实在是太强了！</title><content type='html'>刚才看了那段SC2的演示Demo&lt;br /&gt;神族的母舰可以创建一个时间缓慢场，在那个场中只有神族的航母可以以正常的速度行动，其它的东西的运动都慢得近乎于静止。。。&lt;br /&gt;这个还不止。。。竟然还可以创建一个黑洞！！！ Oh,My GOD!!!!!!!!&lt;br /&gt;庆幸的是似乎在一场战斗中只能拥有一架这样的怪物。&lt;br /&gt;&lt;br /&gt;SC2的韩国发布会现场：（成堆的丢韩语，只有后面讲E文的时候听得懂 -_-|||）&lt;br /&gt;http://www.tudou.com/programs/view/08zXR3IBE1U/&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6760527903352639082?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6760527903352639082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6760527903352639082&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6760527903352639082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6760527903352639082'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/sc2.html' title='SC2中神族的母舰实在是太强了！'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-9093610150795505409</id><published>2007-05-20T21:54:00.000+08:00</published><updated>2007-05-20T22:04:47.066+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>FoxTorrent...</title><content type='html'>汗一个。。。想不到还有做 FireFox 的BT下载插件的。&lt;br /&gt;详见： &lt;a href="http://www.foxtorrent.com/"&gt;http://www.foxtorrent.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;一年前曾经用过 FF 的插件 DownThemAll，也是个多线程、断点续传的下载插件，刚开始的时候还觉得比较新奇，用了一段时间后还是觉得没的专门的下载工具好。&lt;br /&gt;&lt;br /&gt;尝尝鲜是可以，但我还是不看好这个 FoxTorrent&lt;br /&gt;我个人是比较喜欢 FF 的，但是。。。有一点，就是 FF 的内存占用确实。。。尤其在游览某含有海量大幅图片的网站后，内存一直居高不下啊。。。而 BT 这个东西是要经常挂的。。。这样的话还不如命令行下面的小巧BT工具划算。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-9093610150795505409?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/9093610150795505409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=9093610150795505409&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/9093610150795505409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/9093610150795505409'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/foxtorrent.html' title='FoxTorrent...'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1378181454417050791</id><published>2007-05-14T11:43:00.000+08:00</published><updated>2007-05-14T11:56:44.420+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Parse error: unexpected $end in xxx.php</title><content type='html'>"Parse error: syntax error, unexpected $end in xxx.php on line 1517"&lt;br /&gt;&lt;br /&gt;出现这么一条莫名其妙的错误，1517行又是文件的末尾，真是莫明其妙。&lt;br /&gt;其实，出现这种错误大多是由于文件中不匹配的 括号（"()","{}"）特别是掉了某个结束括号 引发的。&lt;br /&gt;&lt;br /&gt;仔细巡查文档，发现原来在删除一段代码块时多删除了一行（那一行就是一个"}"符号）所致。&lt;br /&gt;&lt;br /&gt;所幸，我写的代码格式还算规范，加上使用了VIM这种优秀的编辑器，这样我才能这么快的找到问题所在。&lt;br /&gt;&lt;br /&gt;所以说嘛，书写规范格式的代码 是很有必要的！&lt;br /&gt;要不然，就只有通过某种优秀的代码编辑器在成堆的代码中艰难的苦苦探寻才能找到找出问题了。:)&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1378181454417050791?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1378181454417050791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1378181454417050791&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1378181454417050791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1378181454417050791'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/parse-error-unexpected-end-in-xxxphp.html' title='Parse error: unexpected $end in xxx.php'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-1551184212520955407</id><published>2007-05-13T20:46:00.000+08:00</published><updated>2007-05-13T21:04:33.402+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>undefined reference to `vtable for xxx'</title><content type='html'>C++ 程序链接的时候出现这条信息 往往是有 虚析构函数 出现在基类中而又没有相应实现的情况。&lt;br /&gt;解决方法：&lt;br /&gt;给这个 虚析构函数 一个函数体，或者是定义成一个纯虚函数。&lt;br /&gt;&lt;br /&gt;而在 QT 中出现这种情况 很可能是由于在该类中使用了Q_OBJECT宏&lt;br /&gt;（见：&lt;a href="http://blog.sina.com.cn/u/496ad465010007sk"&gt;http://blog.sina.com.cn/u/496ad465010007sk&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.csdn.net/baymoon/archive/2006/11/23/1409167.aspx"&gt;http://blog.csdn.net/baymoon/archive/2006/11/23/1409167.aspx&lt;/a&gt;）&lt;br /&gt;和moc文件相关，解决方法，删除掉 *.o 再重新编译一次。&lt;br /&gt;（对于KDevelop生成的qmake之外的工程，要到./debug/src 目录中删除掉 *.o 还有那些 class-name.moc.cpp ，然后重新编译）&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-1551184212520955407?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/1551184212520955407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=1551184212520955407&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1551184212520955407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/1551184212520955407'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/undefined-reference-to-vtable-for-xxx.html' title='undefined reference to `vtable for xxx&apos;'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5312461550943145397</id><published>2007-05-13T15:51:00.000+08:00</published><updated>2007-05-13T21:05:43.367+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bloger'/><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>终于决定用Tor了</title><content type='html'>托我们伟大的国网(GFW)的福，这两天blogspot又不能访问了。。。&lt;br /&gt;而以前的两个代理inblogs和pkblogs又都下线了，不想找别的代理，终于描上了以前听说过的Tor。&lt;br /&gt;其实，原来别人也推荐过我用Tor，主要是保密方面的因素，而我平常也没什么好保密的，也就没有方在心上。&lt;br /&gt;实际上Tor的特性决定了它在除通信保密之外很强的一个用途——可以当作灵活的代理来用——当然为了不要占用大家的资源只能用来作些通信量较小的工作，下载大文件那是最好不要做的。&lt;br /&gt;&lt;br /&gt;安装配置方式，使用方法，Tor的主页上都说的很清楚了：&lt;br /&gt;&lt;a href="http://tor.eff.org/index.html.zh-cn"&gt;http://tor.eff.org/index.html.zh-cn&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5312461550943145397?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5312461550943145397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5312461550943145397&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5312461550943145397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5312461550943145397'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/tor.html' title='终于决定用Tor了'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-5292164345125584287</id><published>2007-05-10T09:05:00.000+08:00</published><updated>2007-05-10T09:33:16.855+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>王蓝一</title><content type='html'>哈哈，以前不是没时间就是忘记了。今天趁着还记得上网搜索了一下&lt;br /&gt;才知道 原来她叫做“王蓝一”，不过还真的有叫“蓝一”……&lt;br /&gt;其实，还是蛮好听的，呵呵。&lt;br /&gt;&lt;br /&gt;中央台天气预报的主持人。&lt;br /&gt;我第一次看到她就是“朝闻天下”插播天气预报的那短短的片刻。&lt;br /&gt;虽然只是片刻的时光却给我留下了深刻的印象。&lt;br /&gt;一身职业装、一头短发，鲜明简洁，微笑，亲切，充满朝气（感觉她最适合作“朝闻天下”气象播报的主持人了，就是每天都早起的话太辛苦啊～）&lt;br /&gt;早上能够见到她，那一天都能感觉神清气爽。偶尔几个早上见不到她，不免感觉有些失落。&lt;br /&gt;&lt;br /&gt;不过，“中国气象信息网”上的照片都是长发的，还是感觉短发的她——“朝闻天下”气象播报中的那种装束 更加漂亮，更加动人。&lt;br /&gt;似乎比我大呢，70年代末的（会不会对我们80后的有成见呢？）&lt;br /&gt;哈～想这些干嘛？先做好我份内的吧，就像她的座右铭——“也许你不是最优秀的，但记住你一定是唯一的”&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-5292164345125584287?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/5292164345125584287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=5292164345125584287&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5292164345125584287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/5292164345125584287'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/blog-post_10.html' title='王蓝一'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-6546349529205526009</id><published>2007-05-09T09:45:00.000+08:00</published><updated>2007-05-09T09:53:28.844+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>callback 在 C++ 中的使用</title><content type='html'>C++ 的class中只有用 static 的公有成员函数才有可能作为参数传递给 callback。&lt;br /&gt;但是 static 的成员函数却不能访问非 static 的成员，因为对于static来说this指针是没有意义的。&lt;br /&gt;&lt;br /&gt;那么有个变通的解决方法：自己搞一个 ^_^&lt;br /&gt;——用一个该class的指针作参数，通过该参数来变通的访问类的实例。&lt;br /&gt;如下：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;typedef int (* FUN)(int,void*);&lt;br /&gt;&lt;br /&gt;class AA {&lt;br /&gt;public:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int     aa;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;static int fun(int n, &lt;b style="color: rgb(255, 0, 0);"&gt;AA* a&lt;/b&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return a-&amp;gt;aa&amp;gt;&amp;gt;n;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int f(int f, void*)&lt;br /&gt;{ return f&amp;lt;&amp;lt;2; }&lt;br /&gt;&lt;br /&gt;void p (FUN callback, &lt;b style="color: rgb(255, 0, 0);"&gt;void* arg&lt;/b&gt;=NULL)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout&amp;lt;&amp;lt;callback(8, arg)&amp;lt;&amp;lt;endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main ()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AA a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;a.aa = 0x1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;p (f);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;p ((FUN)AA::fun, &lt;b style="color: rgb(255, 0, 0);"&gt;(void*)&amp;amp;a&lt;/b&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;对此，pthread_create 最后一个参数的魔力就体现出来了。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-6546349529205526009?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/6546349529205526009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=6546349529205526009&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6546349529205526009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/6546349529205526009'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/callback-c.html' title='callback 在 C++ 中的使用'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3062521668406460067</id><published>2007-05-05T17:15:00.000+08:00</published><updated>2007-05-05T18:19:14.881+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Program'/><title type='text'>黑盒测试 和 白盒测试</title><content type='html'>以前学过的东西，基本忘记了。。。再从书上抄下来加深点映像。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;黑盒测试（功能测试）&lt;/h4&gt;已知程序具有的功能，检验每个功能是否能正常使用。&lt;br /&gt;（它只检查程序功能：是否能适当地接收输入的数据并输出正确的信息，并保持外部信息的完整性。）&lt;br /&gt;测试以下几个方面：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;不正确或遗漏的功能。&lt;/li&gt;&lt;li&gt;界面错误。&lt;/li&gt;&lt;li&gt;数据结构或数据库的访问错误。&lt;/li&gt;&lt;li&gt;性能错误。&lt;/li&gt;&lt;li&gt;初始化和终止条件错误。&lt;/li&gt;&lt;/ol&gt;有以下几种方法：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;等价分类法&lt;ul&gt;按输入条件把输入的数据划分为若干等价类&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;边界值分析法(BVA, Boundary Value Analysis)&lt;ul&gt;经验表明，大多数错误都发生在输入的边界值上。&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;对比测试法（背靠背测试，back-to-back testing）&lt;ul&gt;通过不同开发的相同功能冗余系统来对照&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h4&gt;白盒测试（结构测试）内部功能测试&lt;/h4&gt;已知程序内部工作过程，测试动作是否按规格说明书的规定正常进行。&lt;br /&gt;（按照程序内部的逻辑，检验程序中的每条通路是否能按预定的要求工作。）&lt;br /&gt;原则：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;保证模块中每一独立的路径至少执行一次。&lt;/li&gt;&lt;li&gt;保证所有判断的每一分支至少执行一次。&lt;/li&gt;&lt;li&gt;保证每一循环都在边界条件和一般条件下至少各执行一次。&lt;/li&gt;&lt;/ol&gt;有以下两类方法：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;基本路径测试&lt;ul&gt;&lt;li&gt;流图（程序图）&amp;lt;把流程图结构用有向图表示，谓词节点&amp;gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;控制结构测试&lt;ul&gt;&lt;li&gt;条件测试法(condition test)&lt;/li&gt;&lt;li&gt;数据流测试法(data flow testing)&lt;/li&gt;&lt;li&gt;循环测试&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;黑盒测试 和 白盒测试 不能相互替代，两者应互为补充！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;因为不可能进行穷尽测试，所以不可能发现程序中的所有错误，也就是说，通过测试并不能证明程序的&lt;b&gt;正确性&lt;/b&gt;。但是，我们的目的只是通过测试保证程序的&lt;b&gt;可靠性&lt;/b&gt;，因此，必须仔细设计测试方案，力争用尽可能少的测试发现尽可能多的错误。&lt;br /&gt;&lt;br /&gt;实践表明：用&lt;b&gt;无效的输入数据&lt;/b&gt;比用有效的输入数据进行测试，往往能发现更多错误。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3062521668406460067?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3062521668406460067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3062521668406460067&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3062521668406460067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3062521668406460067'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/05/blog-post.html' title='黑盒测试 和 白盒测试'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8332321666312630498</id><published>2007-04-29T11:15:00.001+08:00</published><updated>2007-04-29T11:15:46.828+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='tao'/><title type='text'>鱼刺</title><content type='html'>从小到大无数次吃鱼，几乎每次都要被鱼刺折磨那么一会儿。&lt;br /&gt;所以，虽然我喜欢鱼的美味但是却讨厌吃鱼。&lt;br /&gt;（大学在校期间没有吃过一次鱼，对外说是“我讨厌鱼腥味”“学校的鱼不好吃”，其实我知道，我是害怕鱼刺！）&lt;br /&gt;其中有两次印象特别深刻的。&lt;br /&gt;&lt;br /&gt;一次的在高3的时候，那次也是最让我哭笑不得的一次，以前只知道有钓鱼的，没想到那次我被鱼给钓了。&lt;br /&gt;一根大概1.5cm的鱼刺（处于分裂期——就是以一根鱼刺分裂成两根的那种——这是我的猜想，也只有这样才能解释那种奇形怪状的鱼刺）大概是“K”形的——中间连接在一起，两边都分裂出倒钩的那种——刺穿了我的舌头而那两个倒钩都留在了我舌头内（怎么样很象是鱼上钩的情景吧:D）。&lt;br /&gt;当时痛的很，由于鱼刺很短留在外面的部分很少手更本捏不住，父母把我的舌头拽出口腔外部摆弄了半天未果后终于决定上医务室去。&lt;br /&gt;开始一个女的用止血钳夹着那根刺慢慢的摆弄着，把我的舌头拉出口腔老长都不能弄出来，还把我痛得眼睛都突出来了。&lt;br /&gt;后来来一个男的说“对这种事要速战速决”，于是用木片把我舌头压住，用酒精把伤口周围消毒用止血钳夹住鱼刺狠命一拔——那根形状怪异的鱼刺终于出来了！！除了当时痛那么一下，和之后出了很多血之外到没什么大碍。总比开始那个女的折磨我要轻松多了 :D。&lt;br /&gt;那次之后有1年时间，对于餐桌上的鱼我碰都不敢碰。&lt;br /&gt;&lt;br /&gt;然后，昨天晚上。。。母亲弄了糖醋鱼，我的噩梦又开始了。&lt;br /&gt;在快要结束晚餐的时候，就在我放松警惕的时候，噩梦发生了，突然感觉在咽部有个什么东西刺了一下，我意识到“完了！又是鱼刺！！”，我马上停止了吞咽的动作，并且把口腔内的东西吐了出来——之后的事实证明这是个正确的决断！&lt;br /&gt;之后在家里用传统方法摆弄了10多分钟未果，决定去求医了。到医务室，医生看了一下说“这里没有条件弄，要到大点的医院用窥镜才能看到”。&lt;br /&gt;幸好3医院不远，晚上只能看急诊吧？挂号费就要3块～～&lt;br /&gt;到了医生那儿，我对医生说“大概在左边扁桃体附近被扎了根鱼刺”，那个医生竟然说“小子不错啊！竟然懂医呢。。。”（我暴汗。。。这个可是初中生物书上的内容，对于自己的身体大概在什么位置还是了解的吧？）&lt;br /&gt;之后就轻松了，在左边扁桃体后部扎了一根2cm左右的鱼刺，已刺入1.5cm。。。（估计开始没刺入那么多，是后来以那些传统方法处理的时候又推入了不少）&lt;br /&gt;最让我愤恨的是这样竟然花了我￥80RMB（我告诉那个医生刺入位置后根本就没用窥镜），完全是抢钱嘛！！&lt;br /&gt;而且还不给我个消炎药？今天感觉扁桃体还有些痛～～&lt;br /&gt;&lt;br /&gt;这件事情告诉我们，在事情完全结束前不要放松警惕，在还没了解事情的真像前不要凭经验随便处理。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8332321666312630498?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8332321666312630498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8332321666312630498&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8332321666312630498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8332321666312630498'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/04/blog-post_7462.html' title='鱼刺'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-8704082971892717411</id><published>2007-04-29T09:48:00.000+08:00</published><updated>2007-04-29T09:54:10.698+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tao'/><title type='text'>随便说两句</title><content type='html'>最近从Windows转向Linux的桌面用户很多，其中有一部分是被最近Linux上兴起的3D桌面吸引，但很大一部分是不能忍受Windows下多如牛毛的病毒之害的。&lt;br /&gt;&lt;br /&gt;唉～怎么说呢？&lt;br /&gt;如果说Windows是个人人得以上之的妓女的话。那么Linux无疑是一个气质高雅的优美女孩，这种高雅的气质是由内而外的，这种高雅的气质不可否认的是来自于Unix。&lt;br /&gt;（注意：是优美而不是完美，优美总是那么的可爱，但完美偶尔是会让人觉得反感的）&lt;br /&gt;&lt;br /&gt;嗯。。。&lt;br /&gt;并不是说Linux下就没有病毒了，Linux下生产病毒的可能性是很大的，只不过长久以来Linux的使用者都是一些技术群体，对于这些大家都心照不宣（病毒创造出来后最终受害者是谁？何必更自己过不去呢？）。&lt;br /&gt;而且，由于Linux的这种由内而外的高雅气质，即使有病毒但能够危害到系统基础构架的却基本没有。相当于是穿着一件性感漂亮的内衣，不小心弄脏了，洗一洗，或者大不了丢掉再去换一件新的。并不用花费太多的代价，不用吃药，不用动手术，更加不用“重生”、换人。&lt;br /&gt;当然，不能排除某些牛人狠狠钻研内核后找出某些危险的漏洞，而加以利用的可能性。但这样的牛人有几个？他们会这样不负责任么？即使造出来也不会像现在Windows下的那么泛滥吧。&lt;br /&gt;&lt;br /&gt;以上说这么多，其实我并没有诽谤Windows的意思。&lt;br /&gt;只不过，想让新用Linux的那批人正确的看待这件事（病毒）。&lt;br /&gt;其实，Windows刚开始流行之初也是没有这么泛滥的病毒之灾的，当时Windows的大多数使用者也只是一些技术人员，当PC迅速普及之后才有这么泛滥的病毒之灾。难道是之前的那些资格深厚的技术人员还不如当今的那些技术小混混么？很明显不是的，技术的积累不是一朝一夕的事情，看看当今Windows下的那些病毒真正有技术含量的有几个？绝大多数都是小混混的流氓作品罢了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;其实我真的很担心，让太多的人染指Linux 会玷污她那高雅的气质，毕竟人多了就杂 难免会掺杂那么几个混混流氓在里面。&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-8704082971892717411?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/8704082971892717411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=8704082971892717411&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8704082971892717411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/8704082971892717411'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/04/blog-post_29.html' title='随便说两句'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2610374684750965741.post-3186659013543637394</id><published>2007-04-21T11:18:00.000+08:00</published><updated>2007-05-04T12:14:47.236+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bloger'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>新版bloger模板设置[3]</title><content type='html'>这两天才发现新的bloger模板中有一个“Lables”模块，实现的就是那些分类的功能。&lt;br /&gt;不过如果你的Bloger中有很多Lables的话，会出现一大版……影响美观啊～&lt;br /&gt;于是我小改一下（添加 显示／隐藏 功能）：&lt;br /&gt;修改后Lables模块如下：&lt;br /&gt;&lt;blockquote&gt;&amp;lt;b:widget id='Label1' locked='false' title='Labels' type='Label'&amp;gt;&lt;br /&gt;&amp;lt;b:includable id='main'&amp;gt;&lt;br /&gt; &amp;lt;b:if cond='data:title'&amp;gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;    &amp;lt;h2 onclick="NodeExpand('lable_list');" style="cursor:pointer;"&amp;gt;&amp;lt;span id="mk1"&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id="mk2" style="display:none;"&amp;gt;V&amp;lt;/span&amp;gt;&lt;/span&gt; &amp;lt;data:title/&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt; &amp;lt;/b:if&amp;gt;&lt;br /&gt; &amp;lt;div class='widget-content' &lt;span style="color: blue;"&gt;id="lable_list" style="display:none;"&lt;/span&gt;&amp;gt;&lt;br /&gt;   &amp;lt;ul&amp;gt;&lt;br /&gt;   &amp;lt;b:loop values='data:labels' var='label'&amp;gt;&lt;br /&gt;     &amp;lt;li&amp;gt;&lt;br /&gt;       &amp;lt;b:if cond='data:blog.url == data:label.url'&amp;gt;&lt;br /&gt;         &amp;lt;data:label.name/&amp;gt;&lt;br /&gt;       &amp;lt;b:else/&amp;gt;&lt;br /&gt;         &amp;lt;a expr:href='data:label.url'&amp;gt;&amp;lt;data:label.name/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;       &amp;lt;/b:if&amp;gt;&lt;br /&gt;       (&amp;lt;data:label.count/&amp;gt;)&lt;br /&gt;     &amp;lt;/li&amp;gt;&lt;br /&gt;   &amp;lt;/b:loop&amp;gt;&lt;br /&gt;   &amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;b:include name='quickedit'/&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/b:includable&amp;gt;&lt;br /&gt;&amp;lt;/b:widget&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;还要在Bloger的模板中添加一个Javascript模块，添加内容如下：&lt;br /&gt;&lt;blockquote&gt;&amp;lt;script language=javascript type=text/javascript&amp;gt;&lt;br /&gt;function NodeExpand(divName) {&lt;br /&gt;objDiv = document.getElementById(divName);&lt;br /&gt;objMark1 = this.document.getElementById('mk1');&lt;br /&gt;objMark2 = this.document.getElementById('mk2');&lt;br /&gt;   if (objDiv) {&lt;br /&gt;       if (objDiv.style.display == "block") {&lt;br /&gt;           objDiv.style.display = "none";&lt;br /&gt;           objMark1.style.display = "";&lt;br /&gt;           objMark2.style.display = "none";&lt;br /&gt;           } else {&lt;br /&gt;           objDiv.style.display = "block";&lt;br /&gt;           objMark1.style.display = "none";&lt;br /&gt;           objMark2.style.display = "";&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;还有怎么让那些labels不要显示在一条长列里面呢，模板中添加如下style：&lt;br /&gt;&lt;blockquote&gt;#lable_list ul{list-style:none;}&lt;br /&gt;#lable_list li{float:left;width:100px;}&lt;/blockquote&gt;&lt;br /&gt;规定lable_list中每列只占用100px宽，以及横向排列。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BTW: 开始那个手形光标把我搞晕了，很久以前记得应该是 cursor:hand; 的，结果这样竟然无效！？&lt;br /&gt;后来google了才发现原来 hand 是M$的标准，W3C 标准应该用 &lt;span style="color:red;"&gt;cursor:pointer;&lt;/span&gt; ！！&lt;br /&gt;（哎～ M$ 太恶劣了，毒害了一代人啊！）&lt;br /&gt;//EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2610374684750965741-3186659013543637394?l=blog.davyhawk.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.davyhawk.net/feeds/3186659013543637394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2610374684750965741&amp;postID=3186659013543637394&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3186659013543637394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2610374684750965741/posts/default/3186659013543637394'/><link rel='alternate' type='text/html' href='http://blog.davyhawk.net/2007/04/bloger3.html' title='新版bloger模板设置[3]'/><author><name>h_Davy</name><uri>http://www.blogger.com/profile/10114930662552451055</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_MGvKv7nV5OA/R6F1Kyok4CI/AAAAAAAAAnk/N8dfEpm8BKc/S220/gl80x80.jpg'/></author><thr:total>0</thr:total></entry></feed>
