<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>23号博客</title><link>http://n23.appspot.com/blog/</link><description>latest 182 posts of 23号博客</description><lastBuildDate>Tue, 07 Jul 2015 04:07:26 GMT</lastBuildDate><generator>PyRSS2Gen-1.0.0</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>查看Unix/Linux系统里的字体的排序顺序: fc-match</title><link>http://n23.appspot.com/blog/post/112401</link><description>&lt;p&gt;fc-match -h:&lt;/p&gt;
&lt;p&gt;usage: fc-match [-savVh] [-f FORMAT] [--sort] [--all] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}&lt;br /&gt;List best font matching [pattern]&lt;br /&gt;&lt;br /&gt;&amp;nbsp; -s, --sort&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; display sorted list of matches&lt;br /&gt;&amp;nbsp; -a, --all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; display unpruned sorted list of matches&lt;br /&gt;&amp;nbsp; -v, --verbose&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; display entire font pattern verbosely&lt;br /&gt;&amp;nbsp; -f, --format=FORMAT&amp;nbsp; use the given output format&lt;br /&gt;&amp;nbsp; -V, --version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; display font config version and exit&lt;br /&gt;&amp;nbsp; -h, --help&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; display this help and exit&lt;/p&gt;
&lt;p&gt;有一个sort的选项，太给力了。&lt;/p&gt;
&lt;p&gt;Shell:~ &amp;gt;: fc-match -s serif&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;VeraSe.ttf: &amp;quot;Bitstream Vera Serif&amp;quot; &amp;quot;Roman&amp;quot;&lt;br /&gt;DejaVuSerif.ttf: &amp;quot;DejaVu Serif&amp;quot; &amp;quot;Book&amp;quot;&lt;br /&gt;DejaVuSerif-Bold.ttf: &amp;quot;DejaVu Serif&amp;quot; &amp;quot;Bold&amp;quot;&lt;br /&gt;DejaVuSerif-Italic.ttf: &amp;quot;DejaVu Serif&amp;quot; &amp;quot;Italic&amp;quot;&lt;br /&gt;DejaVuSerif-BoldItalic.ttf: &amp;quot;DejaVu Serif&amp;quot; &amp;quot;Bold Italic&amp;quot;&lt;br /&gt;times.ttf: &amp;quot;Times New Roman&amp;quot; &amp;quot;Normal&amp;quot;&lt;br /&gt;luxirr.ttf: &amp;quot;Luxi Serif&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;l049013t.pfa: &amp;quot;Luxi Serif&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;timR12.pcf.gz: &amp;quot;Times&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;wqy-zenhei.ttf: &amp;quot;文泉驛正黑&amp;quot; &amp;quot;中等&amp;quot;&lt;br /&gt;GohaTibebZemen.ttf: &amp;quot;Goha-Tibeb Zemen&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;YaHei.Consolas.ttf: &amp;quot;YaHei Consolas Hybrid&amp;quot; &amp;quot;Normal&amp;quot;&lt;br /&gt;arial.ttf: &amp;quot;Arial&amp;quot; &amp;quot;Normal&amp;quot;&lt;br /&gt;cour.ttf: &amp;quot;Courier New&amp;quot; &amp;quot;Normal&amp;quot;&lt;br /&gt;DejaVuSans.ttf: &amp;quot;DejaVu Sans&amp;quot; &amp;quot;Book&amp;quot;&lt;br /&gt;DejaVuSansMono.ttf: &amp;quot;DejaVu Sans Mono&amp;quot; &amp;quot;Book&amp;quot;&lt;br /&gt;ariblk.ttf: &amp;quot;Arial Black&amp;quot; &amp;quot;Normal&amp;quot;&lt;br /&gt;simsun.ttf: &amp;quot;SimSun&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;SyrCOMAdiabene.otf: &amp;quot;East Syriac Adiabene&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;SyrCOMMalankara.otf: &amp;quot;Serto Malankara&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;seguibk.ttf: &amp;quot;Segoe UI&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;cour.pfa: &amp;quot;Courier&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;tahomabd.ttf: &amp;quot;Tahoma&amp;quot; &amp;quot;Negreta&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;知道了排序了，可以用/etc/fonts/local.conf来修改，想怎样就怎样。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>fc-match</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/112401</guid><pubDate>Thu, 10 Feb 2011 15:19:49 GMT</pubDate></item><item><title>Clojure links</title><link>http://n23.appspot.com/blog/post/108401</link><description>搜了一个下午的结果：&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://clojure.org/" rel="no-follow"&gt;Clojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://clojuredocs.org/" rel="no-follow"&gt;ClojureDocs&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://planet-clojure.org/" rel="no-follow"&gt;Planet Clojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://java.ociweb.com/mark/clojure/article.html" rel="no-follow"&gt;Clojure - Functional Programming for the JVM&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://sicpinclojure.com/" rel="no-follow"&gt;SICP in Clojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://disclojure.org/" rel="no-follow"&gt;disclojure.org&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://clojars.org/" rel="no-follow"&gt;Clojars&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/technomancy/leiningen" rel="no-follow"&gt;leiningen&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/ninjudd/cake" rel="no-follow"&gt;cake&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/russolsen/dejour" rel="no-follow"&gt;dejour&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/liebke/cljr" rel="no-follow"&gt;cljr&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/relevance/labrepl" rel="no-follow"&gt;labrepl&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/weavejester/compojure" rel="no-follow"&gt;compojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/jochu/swank-clojure" rel="no-follow"&gt;swank-clojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://clojure.blogspot.com/" rel="no-follow"&gt;clojure.blogspot.com&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://clojure.com/" rel="no-follow"&gt;clojure.com&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://clojure.github.com/clojure/" rel="no-follow"&gt;clojure API&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://richhickey.github.com/clojure-contrib/index.html" rel="no-follow"&gt;clojure-contrib API&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://nakkaya.com/tags/" rel="no-follow#clojure"&gt;nakkaya.com&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://learn-clojure.com/" rel="no-follow"&gt;Learn Clojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.enclojure.org/" rel="no-follow"&gt;enclojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://clojure.bighugh.com/" rel="no-follow"&gt;Clojure Box&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://proclojure.com/" rel="no-follow"&gt;Pro Clojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.clojureinaction.com/" rel="no-follow"&gt;Clojure in Action&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.clojure-games.org/" rel="no-follow"&gt;Clojure Games&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/mmcgrana/ring" rel="no-follow"&gt;ring&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://mmcgrana.github.com/" rel="no-follow"&gt;Mark McGranaghan&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://clojure-examples.appspot.com/" rel="no-follow"&gt;Clojure Examples Wiki&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://thinkrelevance.com/blog/2008/09/16/pcl-clojure.html" rel="no-follow"&gt;PCL -&amp;gt; Clojure&lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="http://clojurelinks.tumblr.com/" rel="no-follow"&gt;Clojure Links&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://intensivesystems.net/tutorials/stream_proc.html" rel="no-follow"&gt;Stream Processing in Clojure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
 </description><author>No.0023</author><category>Clojure</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/108401</guid><pubDate>Fri, 14 Jan 2011 15:10:26 GMT</pubDate></item><item><title>多年积累的20条编程经验[转]</title><link>http://n23.appspot.com/blog/post/78401</link><description>&lt;p&gt;编者按：原文作者乔纳森&amp;amp;middot;丹尼可（Jonathan   Danylko）是一位自由职业的web架构师和程序员，编程经验已超过20年，涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。正如乔纳  森在文中所言，本文适合刚毕业的大学生和刚入门的程序员。如果你已是高级开发人员，或许你能在本文中看到自己的身影。&lt;/p&gt;
&lt;p&gt;从11岁时，我就一直在编程，并且一直都很喜欢技术和编程。这些年来，我积累了一些艰难又容易的经验。作为一名程序员，你或许还没这些经验，但我会把它们献给那些想从中学到更多的朋友。&lt;/p&gt;
&lt;p&gt;我会持续更新这些经验，我可能还会有更多的感想，但就我这20年来看，我想下面这个列表中基本不需要增添额外的东西了。下面就是我至今最难忘的经验。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 估算解决问题所需要的时间。&lt;/strong&gt;不要怕，承认吧！我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时。为自己定一个时间限制吧，1小时、30分钟或甚至15分钟。如果在这期间你不能解决问题，那就去寻求帮助，或到网上找答案，而不是尝试去做&amp;ldquo;超级堆码员&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 编程语言是一种语言，只是一种语言。&lt;/strong&gt;随着时光推移，只要你理解了一种语言的原理，你会发现各种语言之间的相似之处 。你所选择的语言，你应该觉得&amp;ldquo;舒服&amp;rdquo;，并且能够写出有效（而且简洁）的代码。最重要的，让语言去适应项目，反之亦然。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 不要过于注重程序的&amp;ldquo;设计模式&amp;rdquo;。&lt;/strong&gt; 有时候，写一个简单的算法，要比引入某种模式更容易。在多数情况下，程序代码应是简单易懂，甚至清洁工也能看懂。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. 经常备份代码。&lt;/strong&gt;在我年轻时，我就有过因硬盘故障而丢了大量代码的经历，这经历很恐怖的。只要你一次没有备份，就应当像有着严格的期限，客户明天就需要。此时就该源码/版本控制软件大显身手了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. 承认自己并不是最顶尖的程序员 - 知不足。&lt;/strong&gt;我常想，我对编程了解已足够多，但是总有其他人比你优秀。正所谓，&amp;ldquo;一山总比一山高&amp;rdquo;。所以，向他们看齐吧！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6、学习再学习。&lt;/strong&gt;正如第5点所说，我经常会在手里拿一本计算机或编程相关的杂志或书（不信，可以问我的朋友）。诚然，总有很多你不知道的技术，你可以从中学习以保持不落后。如果你有一种灵巧的方式来获取你需要的新技术，那你每天都应该坚持学习。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. 永恒的变化。&lt;/strong&gt;你对待技术/编程知识，就应像你对待股票一样：多样化。不要在某一特定技术上自我感觉良好。   如果那种技术或语言已经没有足够支持，那你还不如现在就开始更新你的简历，并启动培训新计划。我能保持前行的主要原则是什么呢？至少了解两到三种语言，所  以，如果某种语言过时了，你在学习新技术的时候还可以依靠另一种语言。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. 提携新人。&lt;/strong&gt;协助并且培养初级/入门的开发人员学习优秀的编程方法和技巧。也许你还不知道，在帮助他们向更高一层前进时，你自己也在向更高一层提升，你会更加自信。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9. 简化算法。&lt;/strong&gt;代码如恶魔，在你完成编码后，应回头并且优化它。从长远来看，这里或那里一些的改进，会让后来的支持人员更加轻松。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10. 编写文档。&lt;/strong&gt;无论是Web服务的API，还是一个简单的类，你尽量编写相应文档。我曾经引以为豪的代码注  释，因过度注释而有人指责。给三行代码加一行注释，只需要你几秒时间。如果那是一个比较难以理解的技术，千万别担心过多注释。如果你能很好做好自己的工  作，大多数架构师、后备程序员、支持组都会感激你。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11. 测试、测试再测试。&lt;/strong&gt;我是一名黑盒测试粉丝。当你完成编码后，你&amp;ldquo;被认可&amp;rdquo;的时候就开始了。如果你们公司有QA部门，如果你的代码中有错误，那你得到的评论，会比项目经理还多。如果你不彻底测试自己的代码，那恐怕你开发的就不只是代码，可能还会声名狼藉。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;12. 庆祝每一次成功。&lt;/strong&gt;我见过很多程序员在解决编程技术难题后，会和同伴握手、击掌或甚至手舞足蹈。每个人在  生命中都会碰到&amp;ldquo;顿悟&amp;rdquo;。如果一个程序员高兴地跑来叫你去看他的非凡代码，也许你已经看过这样的代码100遍了，但你也应该为了这个家伙而庆祝第101  次。（编者注：《庆祝成功的九种方式》。）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;13. 经常检查代码。 &lt;/strong&gt;在公司，你的代码要经常检查（包括自查和其他同事检查）。不要把别人的检查，看成是对代码风格的苛求。应该把它们看作是有建设性的批评。对个人来说，经常检查你的代码并且自问，&amp;ldquo;我怎样才能写得更好呢？&amp;rdquo; 这会加速你的成长，让你成为一个更优秀的程序员。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;14. 回顾你的代码。&lt;/strong&gt;在看到自己以前的代码时，通常会有两种方式：&amp;ldquo;难以至信，这代码是我写的&amp;rdquo;和&amp;ldquo;难以至  信，这代码是我写的&amp;rdquo;。第一种往往是厌恶的语气，并在想如何改进它。你也许会惊叹，旧代码也能复活成为一种更好的程序，甚至是一个完整的产品。第二种通常   带着惊奇和成就感。开发人员应该一到两个自己完成的项目成果，能让众人不禁而立并注目而观的项目。同样，基于你优越的编程能力，你可以把过去的程序或项目  拿出来，把它们更新为更加优秀的产品或想法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;15. 幽默是不可缺的。&lt;/strong&gt;在我20年的开发生涯中，我还没有碰到哪位程序员是没有幽默感的。实际上，干我们这行，幽默是一项必备品。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;16. 谨防那些无所不知的程序员，不愿分享的程序员，还有经验不足的程序员。&lt;/strong&gt;当你遇到这几种程序员时，你自己要谦虚。无所不知的程序员，更想当一个英雄而不是团队成员；保守的程序员则是在编写着他们独享的代码；而经验不足的程序员则会每十分钟就来问你一下，当代码完成后，代码已经是你的，而不是他们。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;17. 任何项目都不会那么简单。&lt;/strong&gt;朋友、家人和同事曾请求我仓促做一些事情，仓促做一个程序或者网站。对于这样  的事，应该从双方做计划，才能做出令两方都会满意的东西。如果某人起初只是需要一个使用Microsoft   Access的、只有有3个页面的网站，但来就很可能变成一个有15个页面的网站，并使用SQL   Server，有一个论坛，还有一个定制的CMS（内容管理系统）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;18. 任何时候不要想当然。&lt;/strong&gt;假如你承接一个简单的项目，你可能会认为某个部分可以轻松完成。千万别这样想！除非你有一个类、组件、或者一段已经写好的代码，并且在现有的项目已经测试通过。不要认为这将是很容易的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;19. 没有已经完成的软件。&lt;/strong&gt;曾经有一位程序员告诉我，没有软件是已经完成的，它只是&amp;ldquo;暂时完成了&amp;rdquo;。这是明智的忠告。如果客户还在使用你写的程序，并经受了时间的考验。如果有机会，你仍在更新它，这并不是什么坏事，这让你不断地前行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20. 耐心是一种美德。&lt;/strong&gt;当客户、朋友或家庭成员用电脑的时候，他们也许会受挫，进而想砸电脑，或气冲冲地离  开。我一直在告诉他们，&amp;ldquo;是你掌控电脑，不是电脑掌控你。&amp;rdquo;对于用作编程的电脑，你要有一定的耐心。一旦程序员知道问题所在后，他们就会站在电脑的角度看  问题，并且说&amp;ldquo;哦，这就是为什么它是这样做。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;编者后话&lt;/p&gt;
&lt;p&gt;对本文深有感触！虽然本文没有华丽的辞藻，其中朴实的道理，其实并非只适用程序员，同样可以扩展到其他行业。记得以前练字时，总感觉当时写得很好，但后来回头再看时，也会想&amp;ldquo;这居然是我写的字！&amp;rdquo;&lt;/p&gt;</description><author>No.0023</author><category>program</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/78401</guid><pubDate>Wed, 24 Nov 2010 04:31:48 GMT</pubDate></item><item><title>开源协议 Apache License 中文翻译</title><link>http://n23.appspot.com/blog/post/63401</link><description>
&lt;p&gt;Apache许可证&lt;/p&gt;
&lt;p&gt;2.0版，2004年1月&lt;br /&gt; &lt;a href="http://www.apache.org/licenses/" rel="no-follow"&gt;http://www.apache.org/licenses/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;译者：Joe 改动：hbW&lt;br /&gt;使用、重生成及分发的术语和条件：&lt;/p&gt;
&lt;p&gt;1.&lt;strong&gt;定义&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;quot;许可证&amp;quot;是指根据本文档第1到第9部分关于使用、重生成和分发的术语和条件。&lt;/p&gt;
&lt;p&gt;&amp;quot;许可证颁发者&amp;quot;是指版权所有者或者由版权所有者批准的授权许可证的实体。&lt;/p&gt;
&lt;p&gt;&amp;quot; 法律实体&amp;quot;是指实施实体和进行控制的所有其它实体受该实体控制，或者受该实体集中控制。根据此定义，&amp;quot;控制&amp;quot;是指(i)让无论是否签订协议的上述实体，进 行指导或管理的直接权利或间接权利，或者(ii)拥有百分之五十(50%)或以上已发行股票的所有者，或者(iii)上述实体的实权所有者。&lt;/p&gt;
&lt;p&gt;&amp;quot;用户&amp;quot;(或&amp;quot;用户的&amp;quot;)是指行使本许可证所授予权限的个人或法律实体。&lt;/p&gt;
&lt;p&gt;&amp;quot;源程序&amp;quot;形式是指对包含但不限制软件源代码、文档源程序和配置文件进行修改的首选形式。&lt;/p&gt;
&lt;p&gt;&amp;quot;目标&amp;quot;形式是指对源程序形式进行机械转换或翻译的任何形式，包括但不限于对编译的目标代码，生成的文件以及转换为其它媒体类型。&lt;/p&gt;
&lt;p&gt;&amp;quot;作品&amp;quot;是指根据本许可证所制作的源程序形式或目标形式的著作，在著作中包含的或附加的版权通知(在下面附录中提供了一个示例)。&lt;/p&gt;
&lt;p&gt;&amp;quot; 衍生作品&amp;quot;是指基于作品(或从作品衍生而来)的源程序形式或目标形式的任何作品，以及编辑修订、注释、详细描述或其它修订等构成原创著作作品的整体。根据 本许可证，衍生作品不得包括与作品及其衍生作品分离之作品，或仅与作品及其衍生作品的接口相链接(或按名称结合)之作品。&lt;/p&gt;
&lt;p&gt;&amp;quot;贡献&amp;quot;是指任何 著作作品，包括作品的原始版本和对该作品或衍生作品所做的任何修订或补充，意在提交给许可证颁发者以让版权所有者或代表版权所有者的授权个人或法律实体包 含在其作品中。根据此定义，&amp;quot;提交&amp;quot;一词表示发送给许可证颁发者或其代表人，任何电子的、口头的或书面的交流信息形式，包括但不限于在由许可证颁发者或者 代表其管理的电子邮件清单、源代码控制系统、以及发布跟踪系统上为讨论和提高作品的交流，但不包括由版权所有者以书面形式明显标注或指定为&amp;quot;非贡献&amp;quot;的交 流活动。&lt;/p&gt;
&lt;p&gt;&amp;quot;贡献者&amp;quot;是指许可证颁发者和代表从许可证颁发者接受之贡献的并随后包含在作品之贡献中的任何个人或法律实体。&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;版权许可证的授予&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;根据本许可证的条款，每个贡献者授予用户永久性的、全球性的、非专有性的、免费的、无版权费的、不可撤销的版权许可证以源程序形式或目标形式复制、准备衍生作品、公开显示、公开执行、授予分许可证、以及分发作品和这样的衍生作品。&lt;/p&gt;
&lt;p&gt;3.&lt;strong&gt;专利许可证的授予&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;根 据本许可证的条款，每个贡献者授予用户永久性的、全球性的、非专有性的、免费的、无版权费的、不可撤销的(除在本部分进行说明)专利许可证对作品进行制 作、让人制作、使用、提供销售、销售、进口和其它转让，且这样的许可证仅适用于在所递交作品的贡献中因可由单一的或多个这样的贡献者授予而必须侵犯的申请 专利。如果用户对任何实体针对作品或作品中所涉及贡献提出因直接性或贡献性专利侵权而提起专利法律诉讼(包括交互诉讼请求或反索赔)，那么根据本许可证， 授予用户针对作品的任何专利许可证将在提起上述诉讼之日起终止。&lt;/p&gt;
&lt;p&gt;4.&lt;strong&gt;重新分发&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用户可在任何媒介中复制和分发作品或衍生作品之副本，无论是否修订，还是以源程序形式或目标形式，条件是用户需满足下列条款：&lt;/p&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;如 果作品将&amp;quot;通知&amp;quot;文本文件包括为其分发作品的一部分，那么用户分发的任何衍生作品中须至少在下列地方之一包括，在这样的通知文件中所包含的属性通知的可读 副本，但不包括那些不属于衍生作品任何部分的通知：在作为衍生作品一部分而分发的通知文本文件中；如果与衍生作品一起提供则在源程序形式或文件中；或者通 常作为第三方通知出现的时候和地方，在衍生作品中产生的画面中。通知文件的内容仅供信息提供，并未对许可证进行修改。用户可在其分发的衍生作品中在作品的 通知文本后或作为附录添加自己的属性通知，条件是附加的属性通知不得构成修改本许可证。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;用户可以为自身所做出的修订添加自己的版权声明并可对自身所做出修订内容或为这样的衍生作品作为整体的使用、复制或分发提供附加或不同的条款，条件是用户对作品的使用、复制和分发必须符合本许可证中声明的条款。&lt;/p&gt;
&lt;li&gt;

&lt;p&gt;5.&lt;strong&gt;贡献的提交。&lt;/strong&gt;&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;除非用户明确声明，在作品中由用户向许可证颁发者的提交若要包含在贡献中，必须在无任何附加条款下符合本许可证的条款。尽管上面如此规定，执行许可证颁发者有关贡献的条款时，任何情况下均不得替代或修改任何单独许可证协议的条款。&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.商标。&lt;/strong&gt;本许可证并未授予用户使用许可证颁发者的商号、商标、服务标记或产品名称，除非将这些名称用于合理性和惯例性描述作品起源和复制通知文件的内容时。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;7.保证否认条款。&lt;/strong&gt;除 非因适用法律需要或书面同意，许可证颁发者以&amp;quot;按原样&amp;quot;基础提供作品(并且每个贡献者提供其贡献)，无任何明示的或暗示的保证或条件，包括但不限于关于所 有权、不侵权、商品适销性、或适用性的保证或条件。用户仅对使用或重新分发作品的正确性负责，并需承担根据本许可证行使权限时的任何风险。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;8.责任限制条款。&lt;/strong&gt;在 任何情况下并根据任何法律，无论是因侵权(包括过失)或根据合同，还是其它原因，除非根据适用法律需要(例如故意行为和重大过失行为)或经书面同意，即使 贡献者事先已被告知发生损害的可能性，任何贡献者不就用户因使用本许可证或不能使用或无法使用作品(包括但不限于商誉损失、停工、计算机失效或故障，或任 何商业损坏或损失)而造成的损失，包括直接的、非直接的、特殊的、意外的或间接的字符损坏而负责。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;9.接受保证或附加责任。&lt;/strong&gt;重 新分发作品或及其衍生作品时，用户可选择提供或为符合本许可证承担之支持、担保、赔偿或其它职责义务和/或权利而收取费用。但是，在承担上述义务时，用户 只可代表用户本身和用户本身责任来执行，无需代表任何其它贡献者，并且用户仅可保证、防护并保持每个贡献者不受任何因此而产生的责任或对因用户自身承担这 样的保证或附加责任而对这样的贡献者所提出的索赔。&lt;/li&gt;
&lt;p&gt;条款结束&lt;/p&gt;
&lt;p&gt;附录：如何向用户作品中应用Apache许可证。&lt;/p&gt;
&lt;p&gt;若 要向用户作品应用Apache许可证，请附加下列样本通知，将括号&amp;quot;[]&amp;quot;中的字段以用户自身的区分信息来替换(但不包括括号)。文本必须以文件格式适当 的注释句法包含在其中。另外建议将文件名或类别名以及目的说明包含在相同的&amp;quot;打印页&amp;quot;上作为版权通知，以更加容易的区分出第三方档案。&lt;/p&gt;

&lt;pre&gt;&lt;em&gt;版权所有[yyyy][版权所有者的名称]&lt;br /&gt;&lt;br /&gt;根据2.0版本Apache许可证(&amp;quot;许可证&amp;quot;)授权；&lt;br /&gt;根据本许可证，用户可以不使用此文件。&lt;br /&gt;用户可从下列网址获得许可证副本：&lt;br /&gt;&lt;br /&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;&lt;br /&gt;除非因适用法律需要或书面同意，&lt;br /&gt;根据许可证分发的软件是基于&amp;quot;按原样&amp;quot;基础提供，&lt;br /&gt;无任何明示的或暗示的保证或条件。&lt;br /&gt;详见根据许可证许可下，特定语言的管辖权限和限制。&lt;/em&gt;&lt;/pre&gt;

</description><author>No.0023</author><category>open</category><category>license</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/63401</guid><pubDate>Thu, 14 Oct 2010 06:47:07 GMT</pubDate></item><item><title>Google Go：初级读本</title><link>http://n23.appspot.com/blog/post/48401</link><description>&lt;p&gt;from http://www.infoq.com/cn/articles/google-go-primer&lt;/p&gt;
&lt;p&gt;作者 			 				 			 			&lt;strong&gt;&lt;a href="http://www.infoq.com/cn/bycategory.action?authorName=Samuel-Tesla" rel="no-follow"&gt; Samuel Tesla&lt;/a&gt; &lt;/strong&gt; 译者&lt;strong&gt;&lt;a href="http://www.infoq.com/cn/bycategory.action?authorName=%e9%bb%84%e7%92%9c"&gt; 黄璜&lt;/a&gt; &lt;/strong&gt; 发布于 			2010年4月2日 上午12时5分&lt;/p&gt;
&lt;p&gt;Google最近发布新型的编程语言，&lt;a href="http://golang.org/" rel="no-follow"&gt;Go&lt;/a&gt;。它被设计为将现代编程语言的先进 性带入到目前仍由C语言占统治地位的系统层面。然而，这一语言仍在试验阶段并在不断演变。&lt;/p&gt;
&lt;p&gt;Go语言的设计者计划设计一门简单、高效、安全和 并发的语言。这门语言简单到甚至不需要有一个符号表来进行词法分析。它可以快速地编译；整个工程的编译时间在秒以下的情况是常事。它具备垃圾回收功能，因 此从内存的角度是安全的。它进行静态类型检查，并且不允许强制类型转换，因而对于类型而言是安全的。同时语言还内建了强大的并发实现机制。&lt;/p&gt;
&lt;h2&gt;阅读Go&lt;/h2&gt;
&lt;p&gt;Go的语法传承了与C一样的风格。程序由函数组成，而函数体是一系列的语句序列。一段代码块用花括号括起来。这门语言保留有限的关键字。表达式使用 同样的&lt;a href="http://en.wikipedia.org/wiki/Infix_notation" rel="no-follow"&gt;中缀运算符&lt;/a&gt;。语法上并无 太多出奇之处。&lt;/p&gt;
&lt;p&gt;Go语言的作者在设计这一语言时坚持一个单一的指导原则：简单明了至上。一些新的语法构件提供了简明地表达一些约定俗成的概 念的方式，相较之下用C表达显得冗长。而其他方面则是针对几十年的使用所呈现出来的一些不合理的语言选择作出了改进。&lt;/p&gt;
&lt;h3&gt;变量声明&lt;/h3&gt;
&lt;p&gt;变量是如下声明的：&lt;/p&gt;
&lt;pre&gt;var sum int // 简单声明&lt;br /&gt;var total int = 42 // 声明并初始化&lt;/pre&gt;
&lt;p&gt;最值得注意的是，这些声明里的类型跟在变量名的&lt;strong&gt;后面&lt;/strong&gt;。乍一看有点怪，但这更清晰明了。比如，以下面这个C片段来说：&lt;/p&gt;
&lt;pre&gt;int* a, b;&lt;/pre&gt;
&lt;p&gt;它并明了，但这里实际的意思是a是一个指针，但b不是。如果要将两者都声明为指针，必须要重复星号。然后在Go语言里，通过如下方式可以将两者都 声明为指针：&lt;/p&gt;
&lt;pre&gt;var a, b *int&lt;/pre&gt;
&lt;p&gt;如果一个变量初始化了，编译器通常能推断它的类型，所以程序员不必显式的敲出来：&lt;/p&gt;
&lt;pre&gt;var label = &amp;quot;name&amp;quot;&lt;/pre&gt;
&lt;p&gt;然而，在这种情况下var几乎显得是多余了。因此，Go的作者引入了一个新的运算符来 声明和初始化一个新的变量：&lt;/p&gt;
&lt;pre&gt;name := &amp;quot;Samuel&amp;quot;&lt;/pre&gt;
&lt;h3&gt;条件语句&lt;/h3&gt;
&lt;p&gt;Go语言当中的条件句与C当中所熟知的if-else构造一样，但条件不需要被打包在括号内。这样可以减少阅读代码时的视觉上的混乱。&lt;/p&gt;
&lt;p&gt;括号并不是唯一被移去的视觉干扰。在条件之间可以包括一个简单的语句，所以如下的代码：&lt;/p&gt;
&lt;pre&gt;result := someFunc();&lt;br /&gt;if result &amp;gt; 0 {&lt;br /&gt;	/* Do something */&lt;br /&gt;} else {&lt;br /&gt;	/* Handle error */&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;可以被精简成：&lt;/p&gt;
&lt;pre&gt;if result := someFunc(); result &amp;gt; 0 { &lt;br /&gt;	/* Do something */&lt;br /&gt;} else {&lt;br /&gt;	/* Handle error */&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;然而，在后面这个例子当中，result只在条件块&lt;strong&gt;内部&lt;/strong&gt;有效&amp;amp;mdash;&amp;amp;mdash;而前者 中，它在整个包含它的上下文中都是可存取的。&lt;/p&gt;
&lt;h3&gt;分支语句&lt;/h3&gt;
&lt;p&gt;分支语句同样是似曾相识，但也有增强。像条件语句一样，它允许一个简单的语句位于分支的表达式之前。然而，他们相对于在C语言中的分支而言走得更远。&lt;/p&gt;
&lt;p&gt;首先，为了让分支跳转更简明，作了两个修改。情况可以是逗号分隔的列表，而fall-throuth也不再是默认的行为。&lt;/p&gt;
&lt;p&gt;因此，如下的C代码：&lt;/p&gt;
&lt;pre&gt;int result;&lt;br /&gt;switch (byte) {&lt;br /&gt; case 'a':&lt;br /&gt; case 'b':&lt;br /&gt;   {&lt;br /&gt;     result = 1&lt;br /&gt;     break&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt; default:&lt;br /&gt;   result = 0&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;在Go里就变成了这样：&lt;/p&gt;
&lt;pre&gt;var result int&lt;br /&gt;switch byte {&lt;br /&gt;case 'a', 'b':&lt;br /&gt;  result = 1&lt;br /&gt;default:&lt;br /&gt;  result = 0&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;第二点，Go的分支跳转可以匹配比整数和字符更多的内容，任何有效的表达式都可以作为跳转语句值。只要它与分支条件的类型是一样的。&lt;/p&gt;
&lt;p&gt;因此如下的C代码：&lt;/p&gt;
&lt;pre&gt;int result = calculate();&lt;br /&gt;if (result &amp;lt; 0) {&lt;br /&gt;  /* negative */&lt;br /&gt;} else if (result &amp;gt; 0) {&lt;br /&gt;  /* positive */&lt;br /&gt;} else {&lt;br /&gt;  /* zero */&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;在Go里可以这样表达：&lt;/p&gt;
&lt;pre&gt;switch result := calculate(); true {&lt;br /&gt;case result &amp;lt; 0:&lt;br /&gt;  /* negative */&lt;br /&gt;case result &amp;gt; 0:&lt;br /&gt;  /* positive */&lt;br /&gt;default:&lt;br /&gt;  /* zero */&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;这些都是公共的约定俗成，比如如果分支值省略了，就是默认为真，所以上面的代码可以这样写：&lt;/p&gt;
&lt;pre&gt;switch result := calculate(); {&lt;br /&gt;case result &amp;lt; 0:&lt;br /&gt;  /* negative */&lt;br /&gt;case result &amp;gt; 0:&lt;br /&gt;  /* positive */&lt;br /&gt;default:&lt;br /&gt;  /* zero */&lt;br /&gt;}&lt;/pre&gt;
&lt;h3&gt;循环&lt;/h3&gt;
&lt;p&gt;Go只有一个关键字用于引入循环。但它提供了除do-while外C语言当中所有可用的循环方式。&lt;/p&gt;
&lt;h4&gt;条件&lt;/h4&gt;
&lt;pre&gt;for a &amp;gt; b { /* ... */ }&lt;/pre&gt;
&lt;h4&gt;初始，条件和步进&lt;/h4&gt;
&lt;pre&gt;for i := 0; i &amp;lt; 10; i++ { /* ... */ }&lt;/pre&gt;
&lt;h4&gt;范围&lt;/h4&gt;
&lt;p&gt;range语句右边的表达式必须是&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Array_types"&gt;array&lt;/a&gt;，&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Slice_types"&gt;slice&lt;/a&gt;，&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#String_types"&gt;string&lt;/a&gt;或者&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Map_types"&gt;map&lt;/a&gt;，  或是指向array的指针，也可以是&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Channel_types"&gt;channel&lt;/a&gt;。&lt;/p&gt;
&lt;pre&gt;for i := range &amp;quot;hello&amp;quot; { /* ... */ }&lt;/pre&gt;
&lt;h4&gt;无限循环&lt;/h4&gt;
&lt;pre&gt;for { /* ever */ }&lt;/pre&gt;
&lt;h3&gt;函数&lt;/h3&gt;
&lt;p&gt;声明函数的语法与C不同。就像变量声明一样，类型是在它们所描述的术语之后声明的。在C语言中：&lt;/p&gt;
&lt;pre&gt;int add(int a, b) { return a + b }&lt;/pre&gt;
&lt;p&gt;在Go里面是这样描述的：&lt;/p&gt;
&lt;pre&gt;func add(a, b int) int { return a + b }&lt;/pre&gt;
&lt;h4&gt;多返回值&lt;/h4&gt;
&lt;p&gt;在C语言当中常见的做法是保留一个返回值来表示错误(比如，read()返回0)，或 者保留返回值来通知状态，并将传递存储结果的内存地址的指针。这容易产生了不安全的编程实践，因此在像Go语言这样有良好管理的语言中是不可行的。&lt;/p&gt;
&lt;p&gt;认识到这一问题的影响已超出了函数结果与错误通讯的简单需求的范畴，Go的作者们在语言中内建了函数返回多个值的能力。&lt;/p&gt;
&lt;p&gt;作为例子，这个函数将返回整数除法的两个部分：&lt;/p&gt;
&lt;pre&gt;func divide(a, b int) (int, int) {&lt;br /&gt;  quotient := a / b&lt;br /&gt;  remainder := a % b&lt;br /&gt;  return quotient, remainder&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;有了多个返回值，有良好的代码文档会更好&amp;amp;mdash;&amp;amp;mdash;而Go允许你给返回值命名，就像参数一样。你可以对这些返回的变量赋值，就像其它的变量一样。所以我们可以重写divide：&lt;/p&gt;
&lt;pre&gt;func divide(a, b int) (quotient, remainder int) {&lt;br /&gt;  quotient = a / b&lt;br /&gt;  remainder = a % b&lt;br /&gt;  return&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;多返回值的出现促进了&amp;quot;comma-ok&amp;quot;的模式。有可能失败的函数可以返回第二个布尔结果来表示成功。作为替代，也可以返回一个错误对象，因此像下面这样的代码也就不见怪了：&lt;/p&gt;
&lt;pre&gt;if result, ok := moreMagic(); ok {&lt;br /&gt;  /* Do something with result */&lt;br /&gt;}&lt;/pre&gt;
&lt;h4&gt;匿名函数&lt;/h4&gt;
&lt;p&gt;有了垃圾收集器意味着为许多不同的特性敞开了大门&amp;amp;mdash;&amp;amp;mdash;其中就包括匿名函数。Go为声明匿名函数提供了简单的语法。像许多动态语言一样，这些函数在它们被定义的范围内创建了词法闭包。&lt;/p&gt;
&lt;p&gt;考虑如下的程序：&lt;/p&gt;
&lt;pre&gt;func makeAdder(x int) (func(int) int) {&lt;br /&gt;  return func(y int) int { return x + y }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;func main() {&lt;br /&gt;  add5 := makeAdder(5)&lt;br /&gt;  add36 := makeAdder(36)&lt;br /&gt;  fmt.Println(&amp;quot;The answer:&amp;quot;, add5(add36(1))) //=&amp;gt; The answer: 42&lt;br /&gt;}&lt;/pre&gt;
&lt;h3&gt;基本类型&lt;/h3&gt;
&lt;p&gt;像C语言一样，Go提供了一系列的基本类型，常见的布尔，整数和浮点数类型都具备。它有一个Unicode的字符串类型和数组类型。同时该语言还引入了两 种新的类型：&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Slice_types"&gt;slice&lt;/a&gt; 和&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Map_types"&gt;map&lt;/a&gt;。&lt;/p&gt;
&lt;h4&gt;数组和切片&lt;/h4&gt;
&lt;p&gt;Go语言当中的数组不是像C语言那样动态的。它们的大小是类型的一部分，在编译时就决定了。数组的索引还是使用的熟悉的C语法(如 a[i])，并且与C一样，索引是由0开始的。编译器提供了内建的功能在编译时求得一个数组的长度 (如 len(a))。如果试图超过数组界限写入，会产生一个运行时错误。&lt;/p&gt;
&lt;p&gt;Go还提供了切片（slices），作为数组的变形。一个切片(slice)表示一个数组内的连续分段，支持程序员指定底层存储的明确部分。构建一个切片 的语法与访问一个数组元素类似：&lt;/p&gt;
&lt;pre&gt;/* Construct a slice on ary that starts at s and is len elements long */&lt;br /&gt;s1 := ary[s:len]&lt;br /&gt;&lt;br /&gt;/* Omit the length to create a slice to the end of ary */&lt;br /&gt;s2 := ary[s:]&lt;br /&gt;&lt;br /&gt;/* Slices behave just like arrays */&lt;br /&gt;s[0] == ary[s] //=&amp;gt; true&lt;br /&gt;&lt;br /&gt;// Changing the value in a slice changes it in the array&lt;br /&gt;ary[s] = 1&lt;br /&gt;s[0] = 42&lt;br /&gt;ary[s] == 42 //=&amp;gt; true&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;该切片所引用的数组分段可以通过将新的切片赋值给同一变量来更改：&lt;/p&gt;
&lt;pre&gt;/* Move the start of the slice forward by one, but do not move the end */&lt;br /&gt;s2 = s2[1:]&lt;br /&gt;&lt;br /&gt;/* Slices can only move forward */&lt;br /&gt;s2 = s2[-1:] // this is a compile error&lt;/pre&gt;
&lt;p&gt;切片的长度可以更改，只要不超出切片的&lt;strong&gt;容量&lt;/strong&gt;。切片s的容量是数组从s[0]到数组尾端的大小，并由内建的cap()函数返回。一个切片的长度永远不能超出它的容量。&lt;/p&gt;
&lt;p&gt;这里有一个展示长度和容量交互的例子：&lt;/p&gt;
&lt;pre&gt;a := [...]int{1,2,3,4,5} // The ... means &amp;quot;whatever length the initializer has&amp;quot;&lt;br /&gt;len(a) //=&amp;gt; 5&lt;br /&gt;&lt;br /&gt;/* Slice from the middle */&lt;br /&gt;s := a[2:4] //=&amp;gt; [3 4]&lt;br /&gt;len(s), cap(s) //=&amp;gt; 2, 3&lt;br /&gt;&lt;br /&gt;/* Grow the slice */&lt;br /&gt;s = s[0:3] //=&amp;gt; [3 4 5]&lt;br /&gt;len(s), cap(s) //=&amp;gt; 3, 3&lt;br /&gt;&lt;br /&gt;/* Cannot grow it past its capacity */&lt;br /&gt;s = s[0:4] // this is a compile error&lt;/pre&gt;
&lt;p&gt;通常，一个切片就是一个程序所需要的全部了，在这种情况下，程序员根本用不着一个数组，Go有两种方式直接创建切片而不用引用底层存储：&lt;/p&gt;
&lt;pre&gt;/* literal */&lt;br /&gt;s1 := []int{1,2,3,4,5}&lt;br /&gt;&lt;br /&gt;/* empty (all zero values) */&lt;br /&gt;s2 := make([]int, 10) // cap(s2) == len(s2) == 10&lt;/pre&gt;
&lt;h4&gt;Map类型&lt;/h4&gt;
&lt;p&gt;几乎每个现在流行的动态语言都有的数据类型，但在C中不具备的，就是dictionary。Go提供了一个基本的dictionary类型叫做map。下 面的例子展示了如何创建和使用Go map：&lt;/p&gt;
&lt;pre&gt;m := make(map[string] int) // A mapping of strings to ints&lt;br /&gt;&lt;br /&gt;/* Store some values */&lt;br /&gt;m[&amp;quot;foo&amp;quot;] = 42&lt;br /&gt;m[&amp;quot;bar&amp;quot;] = 30&lt;br /&gt;&lt;br /&gt;/* Read, and exit program with a runtime error if key is not present. */&lt;br /&gt;x := m[&amp;quot;foo&amp;quot;]&lt;br /&gt;&lt;br /&gt;/* Read, with comma-ok check; ok will be false if key was not present. */&lt;br /&gt;x, ok := m[&amp;quot;bar&amp;quot;]&lt;br /&gt;&lt;br /&gt;/* Check for presence of key, _ means &amp;quot;I don't care about this value.&amp;quot; */&lt;br /&gt;_, ok := m[&amp;quot;baz&amp;quot;] // ok == false&lt;br /&gt;&lt;br /&gt;/* Assign zero as a valid value */&lt;br /&gt;m[&amp;quot;foo&amp;quot;] = 0;&lt;br /&gt;_, ok := m[&amp;quot;foo&amp;quot;] // ok == true&lt;br /&gt;&lt;br /&gt;/* Delete a key */&lt;br /&gt;m[&amp;quot;bar&amp;quot;] = 0, false&lt;br /&gt;_, ok := m[&amp;quot;bar&amp;quot;] // ok == false&lt;br /&gt;&lt;/pre&gt;
&lt;h2&gt;面向对象&lt;/h2&gt;
&lt;p&gt;Go语言支持类似于C语言中使用的面向对象风格。数据被组织成structs，然后定义操作这些structs的函数。类似于Python，Go语言提供 了定义函数并调用它们的方式，因此语法并不会笨拙。&lt;/p&gt;
&lt;h3&gt;Struct类型&lt;/h3&gt;
&lt;p&gt;定义一个新的struct类型很简单：&lt;/p&gt;
&lt;pre&gt;type Point struct {&lt;br /&gt;  x, y float64&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;现在这一类型的值可以通过内建的函数new来分配，这将返回一个指针，指向一块内存单元，其所占内存槽初始化为零。&lt;/p&gt;
&lt;pre&gt;var p *Point = new(Point)&lt;br /&gt;p.x = 3&lt;br /&gt;p.y = 4&lt;/pre&gt;
&lt;p&gt;这显得很冗长，而Go语言的一个目标是尽可能的简明扼要。所以提供了一个同时分配和初始化struct的语法：&lt;/p&gt;
&lt;pre&gt;var p1 Point = Point{3,4}  // Value&lt;br /&gt;var p2 *Point = &amp;amp;Point{3,4} // Pointer&lt;/pre&gt;
&lt;h3&gt;方法&lt;/h3&gt;
&lt;p&gt;一旦声明了类型，就可以将该类型显式的作为第一个参数来声明函数：&lt;/p&gt;
&lt;pre&gt;func (self Point) Length() float {&lt;br /&gt;  return math.Sqrt(self.x*self.x + self.y*self.y);&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;这些函数之后可作为struct的方法而被调用：&lt;/p&gt;
&lt;pre&gt;p := Point{3,4}&lt;br /&gt;d := p.Length() //=&amp;gt; 5&lt;/pre&gt;
&lt;p&gt;方法实际上既可以声明为值也可以声明为指针类型。Go将会适当的处理引用或解引用对象，所以既可以对类型T，也可以对类型*T声明方式，并合理地使用它们。&lt;/p&gt;
&lt;p&gt;让我们为Point扩展一个变换器：&lt;/p&gt;
&lt;pre&gt;/* Note the receiver is *Point */&lt;br /&gt;func (self *Point) Scale(factor float64) {&lt;br /&gt;  self.x = self.x * factor&lt;br /&gt;  self.y = self.y * factor&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;然后我们可以像这样调用：&lt;/p&gt;
&lt;pre&gt;p.Scale(2);&lt;br /&gt;d = p.Length() //=&amp;gt; 10&lt;/pre&gt;
&lt;p&gt;很重要的一点是理解传递给MoveToXY的self和其它的参数一样，并且是&lt;strong&gt;值&lt;/strong&gt;传递，而不是引用传递。如果它被声明为Point，那么在方法内修改的struct就不再跟调用方的一样&amp;amp;mdash;&amp;amp;mdash;值在它们传递给方法的时候被 拷贝，并在调用结束后被丢弃。&lt;/p&gt;
&lt;h3&gt;接口&lt;/h3&gt;
&lt;p&gt;像Ruby这样的动态语言所强调面向对象编程的风格认为对象的行为比哪种对象是动态类型（&lt;a href="http://en.wikipedia.org/wiki/Duck_typing" rel="no-follow"&gt;duck typing&lt;/a&gt;）更为重要。Go所 带来的一个最强大的特性之一就是提供了可以在编程时运用动态类型的思想而把行为定义的合法性检查的工作推到编译时。这一行为的名字被称作&lt;strong&gt;接口&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;定义一个接口很简单：&lt;/p&gt;
&lt;pre&gt;type Writer interface {&lt;br /&gt;  Write(p []byte) (n int, err os.Error)&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;这里定义了一个接口和一个写字节缓冲的方法。任何实现了这一方法的对象也实现了这一接口。不需要像Java一样进行声明，编译器能推断出来。这既给予了动态类型的表达能力又保留了静态类型检查的安全。&lt;/p&gt;
&lt;p&gt;Go当中接口的运作方式支持开发者在编写程序的时候发现程序的类型。如果几个对象间存在公共行为，而开发者想要抽象这种行为，那么它就可以创建一个接口并使用它。&lt;/p&gt;
&lt;p&gt;考虑如下的代码：&lt;/p&gt;
&lt;pre&gt;// Somewhere in some code:&lt;br /&gt;type Widget struct {}&lt;br /&gt;func (Widget) Frob() { /* do something */ }&lt;br /&gt;&lt;br /&gt;// Somewhere else in the code:&lt;br /&gt;type Sprocket struct {}&lt;br /&gt;func (Sprocket) Frob() { /* do something else */ }&lt;br /&gt;&lt;br /&gt;/* New code, and we want to take both Widgets and Sprockets and Frob them */&lt;br /&gt;type Frobber interface {&lt;br /&gt;  Frob()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;func frobtastic(f Frobber) { f.Frob() }&lt;/pre&gt;
&lt;p&gt;需要特别指出的很重要的一点就是所有的对象都实现了这个空接口：&lt;/p&gt;
&lt;pre&gt;interface {}&lt;/pre&gt;
&lt;h3&gt;继承&lt;/h3&gt;
&lt;p&gt;Go语言不支持继承，至少与大多数语言的继承不一样。并不存在类型的层次结构。相较于继承，Go鼓励使用组合和委派，并为此提供了相应的语法甜点使其更容易接受。&lt;/p&gt;
&lt;p&gt;有了这样的定义：&lt;/p&gt;
&lt;pre&gt;type Engine interface {&lt;br /&gt;  Start()&lt;br /&gt;  Stop()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;type Car struct {&lt;br /&gt;  Engine&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;于是我可以像下面这样编写：&lt;/p&gt;
&lt;pre&gt;func GoToWorkIn(c Car) {&lt;br /&gt;  /* get in car */&lt;br /&gt;&lt;br /&gt;  c.Start();&lt;br /&gt;&lt;br /&gt;  /* drive to work */&lt;br /&gt;&lt;br /&gt;  c.Stop();&lt;br /&gt;&lt;br /&gt;  /* get out of car */&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;当我声明Car这个struct的时候，我定义了一个&lt;strong&gt;匿名成员&lt;/strong&gt;。这是一 个只能被其类型识别的成员。匿名成员与其它的成员一样，并有着和类型一样的名字。因此我还可以写成c.Engine.Start()。 如果Car并没有其自身方法可以满足调用的话,编译器自动的会将在Car上的调用委派给它的Engine上面的方法。&lt;/p&gt;
&lt;p&gt;由匿名成员提供的分离方法的规则是保守的。如果为一个类型定义了一个方法，就使用它。如果不是，就使用为匿名成员定义的方法。如果有两个匿名成员都提供一 个方法，编译器将会报错，但只在该方法被调用的情况下。&lt;/p&gt;
&lt;p&gt;这种组合是通过&lt;strong&gt;委派&lt;/strong&gt;来实现的，而不是继承。一旦匿名成员的方法被调用，控制流整个都被委派给了该方法。所以你无法做到和下面的例子一样来模拟类型层次：&lt;/p&gt;
&lt;pre&gt;type Base struct {}&lt;br /&gt;func (Base) Magic() { fmt.Print(&amp;quot;base magic&amp;quot;) }&lt;br /&gt;func (self Base) MoreMagic() { &lt;br /&gt;  self.Magic()&lt;br /&gt;  self.Magic()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;type Foo struct {&lt;br /&gt;  Base&lt;br /&gt;}&lt;br /&gt;func (Foo) Magic() { fmt.Print(&amp;quot;foo magic&amp;quot;) }&lt;/pre&gt;
&lt;p&gt;当你创建一个Foo对象时，它将会影响Base的两个方法。然而，当你调用MoreMagic时， 你将得不到期望的结果：&lt;/p&gt;
&lt;pre&gt;f := new(Foo)&lt;br /&gt;f.Magic() //=&amp;gt; foo magic&lt;br /&gt;f.MoreMagic() //=&amp;gt; base magic base magic&lt;/pre&gt;
&lt;h2&gt;并发&lt;/h2&gt;
&lt;p&gt;Go的作者选择了消息传递模型来作为推荐的并发编程方法。该语言同样支持共享内存，然后作者自有道理：&lt;/p&gt;
&lt;blockquote&gt;不要通过共享内存来通信，相反，通过通信来共享内存。&lt;/blockquote&gt;
&lt;p&gt;该语言提供了两个基本的构件来支持这一范型：&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Go_statements"&gt;goroutines&lt;/a&gt;和&lt;a href="http://golang.org/doc/go_spec.html" rel="no-follow#Channel_types"&gt;channels&lt;/a&gt;。&lt;/p&gt;
&lt;h3&gt;Go例程&lt;/h3&gt;
&lt;p&gt;Goroutine是轻量级的并行程序执行路径，与线程，coroutine或者进程类似。然而，它们彼此相当不同，因此Go作者决定给它一个新的名字并 放弃其它术语可能隐含的意义。&lt;/p&gt;
&lt;p&gt;创建一个goroutine来运行名为DoThis的函数十分简单：&lt;/p&gt;
&lt;pre&gt;go DoThis() // but do not wait for it to complete&lt;/pre&gt;
&lt;p&gt;匿名的函数可以这样使用：&lt;/p&gt;
&lt;pre&gt;go func() {&lt;br /&gt;  for { /* do something forever */ }&lt;br /&gt;}() // Note that the function must be invoked&lt;/pre&gt;
&lt;p&gt;这些goroutine将会通过Go运行时而映射到适当的操作系统原语（比如，POSIX线程）。&lt;/p&gt;
&lt;h3&gt;通道类型&lt;/h3&gt;
&lt;p&gt;有了goroutine，代码的并行执行就容易了。然而，它们之间仍然需要通讯机制。Channel提供一个FIFO通信队列刚好能达到这一目的。&lt;/p&gt;
&lt;p&gt;以下是使用channel的语法：&lt;/p&gt;
&lt;pre&gt;/* Creating a channel uses make(), not new - it was also used for map creation */&lt;br /&gt;ch := make(chan int)&lt;br /&gt;&lt;br /&gt;/* Sending a value blocks until the value is read */&lt;br /&gt;ch &amp;lt;- 4&lt;br /&gt;&lt;br /&gt;/* Reading a value blocks until a value is available */&lt;br /&gt;i := &amp;lt;-ch&lt;/pre&gt;
&lt;p&gt;举例来说，如果我们想要进行长时间运行的数值计算，我们可以这样做：&lt;/p&gt;
&lt;pre&gt;ch := make(chan int)&lt;br /&gt;&lt;br /&gt;go func() {&lt;br /&gt;  result := 0&lt;br /&gt;  for i := 0; i &amp;lt; 100000000; i++ {&lt;br /&gt;    result = result + i&lt;br /&gt;  }&lt;br /&gt;  ch &amp;lt;- result&lt;br /&gt;}()&lt;br /&gt;&lt;br /&gt;/* Do something for a while */&lt;br /&gt;&lt;br /&gt;sum := &amp;lt;-ch // This will block if the calculation is not done yet&lt;br /&gt;fmt.Println(&amp;quot;The sum is:&amp;quot;, sum)&lt;/pre&gt;
&lt;p&gt;channel的阻塞行为并非永远是最佳的。该语言提供了两种对其进行定制的方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;程序员可以指定缓冲大小&amp;amp;mdash;&amp;amp;mdash;想缓冲的channel发送消息不会阻塞，除非缓冲已满，同样从缓冲的channel读取也不会阻塞，除非缓冲是空的。&lt;/li&gt;
&lt;li&gt;该语言同时还提供了不会被阻塞的发送和接收的能力，而操作成功是仍然要报告。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;/* Create a channel with buffer size 5 */&lt;br /&gt;ch := make(chan int, 5)&lt;br /&gt;&lt;br /&gt;/* Send without blocking, ok will be true if value was buffered */&lt;br /&gt;ok := ch &amp;lt;- 42&lt;br /&gt;&lt;br /&gt;/* Read without blocking, ok will be true if a value was read */&lt;br /&gt;val, ok := &amp;lt;-ch&lt;/pre&gt;
&lt;h2&gt;包&lt;/h2&gt;
&lt;p&gt;Go提供了一种简单的机制来组织代码：包。每个文件开头都会声明它属于哪一个包，每个文件也可以引入它所用到的包。任何首字母大写的名字是由包导出的，并可以被其它的包所使用。&lt;/p&gt;
&lt;p&gt;以下是一个完整的源文件：&lt;/p&gt;
&lt;pre&gt;package geometry&lt;br /&gt;&lt;br /&gt;import &amp;quot;math&amp;quot;&lt;br /&gt;&lt;br /&gt;/* Point is capitalized, so it is visible outside the package. */&lt;br /&gt;&lt;br /&gt;type Point struct {&lt;br /&gt;&lt;br /&gt;  /* the fields are not capitalized, so they are not visible&lt;br /&gt;     outside of the package */&lt;br /&gt;&lt;br /&gt;  x, y float64 &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* These functions are visible outside of the package */&lt;br /&gt;&lt;br /&gt;func (self Point) Length() float64 {&lt;br /&gt;  /* This uses a function in the math package */&lt;br /&gt;  return math.Sqrt(self.x*self.x + self.y*self.y)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;func (self *Point) Scale(factor float64) {&lt;br /&gt;  self.setX(self.x * factor)&lt;br /&gt;  self.setY(self.y * factor)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* These functions are not visible outside of the package, but can be&lt;br /&gt;   used inside the package */&lt;br /&gt;&lt;br /&gt;func (self *Point) setX(x float64) { self.x = x }&lt;br /&gt;func (self *Point) setY(y float64) { self.y = y }&lt;/pre&gt;
&lt;h2&gt;缺失&lt;/h2&gt;
&lt;p&gt;Go语言的作者试图将代码的清晰明确作为设计该语言作出所有决定的指导思想。第二个目标是生产一个编译速度很快的语言。有了这两个标准作为方向，来 自其它语言的许多特性就不那么适合了。许多程序员会发现他们最爱的语言特性在Go当中不存在，确实，有很多人也许会觉得Go语言由于缺乏其它语言所共有的 一些特性，还不太可用。&lt;/p&gt;
&lt;p&gt;这当中两个缺失的特性就是异常和泛型，两者在其它语言当中都是非常有用的。而它们目前都不是Go的一分子。但因为该 语言仍处于试验阶段，它们有可能最终会加入到语言里。然而，如果将Go与其它语言作比较的话，我们应当记住Go是打算在系统编程层面作为C语言的替代。明 白这一点的话，那么缺失的这许多特性倒也不是很大的问题了。&lt;/p&gt;
&lt;p&gt;最后，因为这一语言才刚刚发布，因此它没有什么类库或工具可以用，也没有Go语 言的集成编程环境。Go语言&lt;a href="http://golang.org/pkg/" rel="no-follow"&gt;标准库&lt;/a&gt;有些有用的代码，但这与更为成熟的语言比 起来仍还是很少的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看英文原文&lt;/strong&gt;：&lt;a href="http://www.infoq.com/articles/google-go-primer" rel="no-follow"&gt;Google Go: A Primer&lt;/a&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;感谢&lt;a href="http://www.infoq.com/cn/bycategory.action?authorName=%e9%a9%ac%e5%9b%bd%e8%80%80" target="_blank"&gt;马国耀&lt;/a&gt;对本文的审校。&lt;/p&gt;
&lt;p&gt;给InfoQ中文站投稿或者参与内容翻译工作，请邮件至&lt;a href="mailto:editors@cn.infoq.com"&gt;editors@cn.infoq.com&lt;/a&gt;。也欢迎大家加入到&lt;a href="http://groups.google.com/group/InfoQChina" rel="no-follow" target="_blank"&gt;InfoQ中文站用户讨论组&lt;/a&gt;中与我们的编辑和其他读者朋友交流。&lt;/p&gt;</description><author>No.0023</author><category>Go</category><category>golang</category><category>google</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/48401</guid><pubDate>Fri, 02 Apr 2010 16:40:51 GMT</pubDate></item><item><title>改造工具</title><link>http://n23.appspot.com/blog/post/43401</link><description>&lt;p&gt;PyPy有一个工具叫py.lookup，可以搜索python源文件里的字符串，像这样：&lt;br /&gt;&lt;br /&gt;Shell:~/hgroot/iredadmin &amp;gt;: py.lookup username&lt;br /&gt;controllers/base.py:47:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if session.get('username') != None and session.get('logged') == True:&lt;br /&gt;libs/iredbase.py:92:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'username': None,&lt;br /&gt;controllers/ldap/admin.py:87:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.username = web.safestr(i.get('username'))&lt;br /&gt;controllers/ldap/admin.py:89:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.mail = self.username + '@' + self.domain&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;但只能搜索python文件太不爽，于是决定改造一下，让它可以搜索其他文件：&lt;br /&gt;&lt;br /&gt;diff -r 02b74505f46d py.lookup&lt;br /&gt;--- a/py.lookup&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Mar 31 23:38:32 2010 +0000&lt;br /&gt;+++ b/py.lookup&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Mar 31 23:41:37 2010 +0000&lt;br /&gt;@@ -12,6 +12,7 @@&lt;br /&gt;&amp;nbsp;from _findpy import py&lt;br /&gt;&amp;nbsp;from py.__.misc.terminal_helper import ansi_print, terminal_width&lt;br /&gt;&amp;nbsp;import re&lt;br /&gt;+import stat&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;curdir = py.path.local()&lt;br /&gt;&amp;nbsp;def rec(p):&lt;br /&gt;@@ -24,6 +25,8 @@&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; help=&amp;quot;ignore case distinctions&amp;quot;)&lt;br /&gt;&amp;nbsp;parser.add_option(&amp;quot;-C&amp;quot;, &amp;quot;--context&amp;quot;, action=&amp;quot;store&amp;quot;, type=&amp;quot;int&amp;quot;, dest=&amp;quot;context&amp;quot;,&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; default=0, help=&amp;quot;How many lines of output to show&amp;quot;)&lt;br /&gt;+parser.add_option(&amp;quot;-p&amp;quot;, &amp;quot;--pattern&amp;quot;, dest=&amp;quot;pattern&amp;quot;,&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; default=&amp;quot;*.py&amp;quot;, help=&amp;quot;pattern for file name&amp;quot;)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;def find_indexes(search_line, string):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; indexes = []&lt;br /&gt;@@ -42,7 +45,8 @@&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string = args[0]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if options.ignorecase:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string = string.lower()&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; for x in curdir.visit('*.py', rec):&lt;br /&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp; for x in curdir.visit(options.pattern):&lt;br /&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if stat.S_ISDIR(x.stat().mode): continue&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&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 = x.read()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except py.error.ENOENT:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;修改后的帮助菜单如下：&lt;br /&gt;Shell:~ &amp;gt;: py.lookup -h&lt;br /&gt;usage: py.lookup SEARCH_STRING [options]&lt;br /&gt;&lt;br /&gt;Looks recursively at Python files for a SEARCH_STRING, starting from the&lt;br /&gt;present working directory. Prints the line, with the filename and line-number&lt;br /&gt;prepended.&lt;br /&gt;&lt;br /&gt;options:&lt;br /&gt;&amp;nbsp; -h, --help&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; show this help message and exit&lt;br /&gt;&amp;nbsp; -i, --ignore-case&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ignore case distinctions&lt;br /&gt;&amp;nbsp; -C CONTEXT, --context=CONTEXT&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; How many lines of output to show&lt;br /&gt;&amp;nbsp; -p PATTERN, --pattern=PATTERN&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; pattern for file name&lt;br /&gt;&lt;br /&gt;--pattern的default也是*.py，但我们搜索其他类型的文件：&lt;br /&gt;Shell:~/hgroot/iredadmin &amp;gt;: py.lookup -p '*.html' utf-8&lt;br /&gt;templates/default/ldap/admin_profile.html:61: {% set cn = entry.get('cn', [''])[0].decode('utf-8') %}&lt;br /&gt;templates/default/ldap/admins.html:64:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {% set cn = entry.get('cn', [''])[0].decode('utf-8') %}&lt;br /&gt;templates/default/ldap/domain_profile.html:61: {% set cn = entries.get('cn', [''])[0].decode('utf-8') %}&lt;br /&gt;templates/default/ldap/layout.html:28:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;templates/default/ldap/users.html:81:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {% set cn = entries.get('cn', [''])[0].decode('utf-8') %}&lt;br /&gt;templates/default/ldap/users.html:82:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {% set employeeid = entries.get('employeeNumber', [''])[0].decode('utf-8') %}&lt;br /&gt;templates/default/ldap/macros.html:169:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {{ _(&amp;quot;%s (%s)&amp;quot;) |format( admin[1].get('cn')[0].decode('utf-8'), adminMail ) }}&lt;br /&gt;templates/default/ldap/user_profile.html:65: {% set cn = entries.get('cn', [''])[0].decode('utf-8') %}&lt;br /&gt;templates/default/ldap/user_profile.html:68: {% set employeeNumber = entries.get('employeeNumber', [''])[0].decode('utf-8') %}&lt;br /&gt;Shell:~/hgroot/iredadmin &amp;gt;:&lt;/p&gt;</description><author>No.0023</author><category>python</category><category>Py</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/43401</guid><pubDate>Thu, 01 Apr 2010 13:45:01 GMT</pubDate></item><item><title>golang hg log</title><link>http://n23.appspot.com/blog/post/41401</link><description>&lt;p&gt;Shell:~ &amp;gt;: cd hgroot&lt;br /&gt;Shell:~/hgroot &amp;gt;: cd go&lt;br /&gt;Shell:~/hgroot/go &amp;gt;: hg log -r 0:4&lt;/p&gt;
&lt;pre&gt;changeset:   0:f6182e5abf5e&lt;br /&gt;user:        Brian Kernighan &lt;br /&gt;date:        Tue Jul 18 19:05:45 1972 -0500&lt;br /&gt;summary:     hello, world&lt;br /&gt;&lt;br /&gt;changeset:   1:b66d0bf8da3e&lt;br /&gt;user:        Brian Kernighan &lt;br /&gt;date:        Sun Jan 20 01:02:03 1974 -0400&lt;br /&gt;summary:     convert to C&lt;br /&gt;&lt;br /&gt;changeset:   2:ac3363d7e788&lt;br /&gt;user:        Brian Kernighan &lt;br /&gt;date:        Fri Apr 01 02:02:04 1988 -0500&lt;br /&gt;summary:     convert to Draft-Proposed ANSI C&lt;br /&gt;&lt;br /&gt;changeset:   3:172d32922e72&lt;br /&gt;user:        Brian Kernighan &lt;br /&gt;date:        Fri Apr 01 02:03:04 1988 -0500&lt;br /&gt;summary:     last-minute fix: convert to ANSI C&lt;br /&gt;&lt;br /&gt;changeset:   4:4e9a5b095532&lt;br /&gt;user:        Robert Griesemer &lt;br /&gt;date:        Sun Mar 02 20:47:34 2008 -0800&lt;br /&gt;summary:     Go spec starting point.&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>golang</category><category>Go</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/41401</guid><pubDate>Wed, 24 Mar 2010 07:19:57 GMT</pubDate></item><item><title>QQMail 的杯具</title><link>http://n23.appspot.com/blog/post/39401</link><description>&lt;p&gt;尊敬的 &lt;a href="mailto:85800355@qq.com" target="_blank"&gt;85800355@qq.com&lt;/a&gt; ：&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 感谢您使用QQ邮箱。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 您的邮箱总邮件数已经达到 39000 封，如果超过 40000  封，系统将视为邮箱已满，不能再收到新邮件。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 请您及时清理邮箱，保证邮件总数一直在 40000 封以下。&lt;br /&gt;&amp;nbsp;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  QQ邮箱管理员&lt;/p&gt;</description><author>No.0023</author><category>QQMail</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/39401</guid><pubDate>Fri, 12 Mar 2010 09:31:01 GMT</pubDate></item><item><title>BSDMagazine</title><link>http://n23.appspot.com/blog/post/38401</link><description>&lt;p&gt;Shell:~/mylibs/share/BSDMagazine &amp;gt;: tree .&lt;br /&gt;.&lt;br /&gt;|-- 62-64__wywiad.pdf&lt;br /&gt;|-- BSD_01_2008.pdf&lt;br /&gt;|-- BSD_01_2009.pdf&lt;br /&gt;|-- BSD_01_2010.pdf.tar.gz&lt;br /&gt;|-- BSD_02_2008.pdf&lt;br /&gt;|-- BSD_02_2009.pdf&lt;br /&gt;|-- BSD_02_2010.pdf&lt;br /&gt;|-- BSD_03_2009.pdf&lt;br /&gt;|-- BSD_04_2009.pdf&lt;br /&gt;|-- instal_netbsd.pdf&lt;br /&gt;`-- marko.pdf&lt;br /&gt;&lt;br /&gt;0 directory, 11 files&lt;/p&gt;</description><author>No.0023</author><category>BSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/38401</guid><pubDate>Sun, 28 Feb 2010 14:32:13 GMT</pubDate></item><item><title>Go Lang介绍</title><link>http://n23.appspot.com/blog/post/37401</link><description>&lt;p&gt;&lt;strong&gt;Go Lang介绍&lt;/strong&gt;&lt;br /&gt; Go编程语言是Google中一些大牛（尤其是有着plan9前科的大牛们）如Rob Pike，Ken Thomason这两位赫赫有名的程序高手、技术作于2007年9月开始建造。&lt;/p&gt;
&lt;p&gt;Pike指出，Go代码的编译基本上可以达到C语言的速度，几乎可以在瞬间完成，&amp;ldquo;就像是在使用交互式语言&amp;rdquo;。现有的语言都没有针对多核心处理器进 行优化，为了解决此类编程问题，Google工程师们开发了Go语言。从源文件的copyright可以看到，很多基础代码来自plan9.&lt;/p&gt;
&lt;p&gt;Go 已在Google公司内部测试过，但仍处于试验阶段。Google开放Go的代码，希望籍此帮助Go语言的发展。首席软件工程师Rob Pike说：我们开发Go，是因为近10年左右开发程序之难让我们有点沮丧。Google两年前开始开发Go，1年前开始有一只团队专职于此。目前只支持 unix平台， windows平台的支持由于资源的原因，需要更多的参与者来移植。&lt;br /&gt; Go的定位 是系统编程，比如Web服务器、存储系统和数据库等，但也欢迎在其它方面的应用。&lt;/p&gt;
&lt;p&gt;Go语言的官方吉祥物如下:&lt;br /&gt; &lt;a href="http://blog.yufeng.info/wp-content/uploads/2010/01/logo-153x55.png" rel="no-follow"&gt;&lt;img src="http://blog.yufeng.info/wp-content/uploads/2010/01/logo-153x55.png" title="logo-153x55" height="55" width="153" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我看好Go的原因是： 这个语言不是凭空或者实验室设计的，而是填补过去10年在系统编程软件方面的不足。作为系统软件的编写者，经常会深深的感觉到目前常见语言的面对大规模的 网络应用，在不断涌现的多核心硬件前的无奈, 纠缠在多线程和各种锁中间， 不停的制造各种各样的轮子， 低效的排错。Go拥有的这些现代特性都是系统用户梦迷以求的，经过作者全面的考虑，适当的取舍，即结合了动态语言的弹性，又有了静态语言的安全性和高性 能。&lt;/p&gt;
&lt;p&gt;目前这个GO社区非常活跃，邮件列表里每天都有几百个讨论，加上有Google的强力支持， 个人认为非常有前途。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那么GO能解决什么问题：&lt;/strong&gt;&lt;br /&gt; 1.	硬件很快 软件开发很慢。&lt;br /&gt; 2.	依赖很麻烦。&lt;br /&gt; 3.	c++ java太笨拙。&lt;br /&gt; 4.	并行和gc&lt;br /&gt; 5.	多核心机器的出现，未来几年128核心的机器都很常见。&lt;/p&gt;
&lt;p&gt;大部分的系统语言并不是设计来解决这些问题的,而且新涌现的大多数库并没有改善这些问题，相反加剧了。&lt;/p&gt;
&lt;p&gt;GO结合了动态语言的开发效率和静态编译型语言的安全性和运行效率，支持网络和多核编程，带给我们快速， 安全， 并发， 快乐。&lt;/p&gt;
&lt;p&gt;Go有着非常高的效率。 实际上golang.org就是用gdoc架设的。同时语言效能评测网站（） Go和其他语言的对比，也充分说明了Go的效率和c语言很接近。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GO的设计目标：&lt;/strong&gt;&lt;br /&gt; 1。 系统编程语言。&lt;br /&gt; 2. 快速编译和执行。&lt;br /&gt; 3. 类型安全性和内存使用安全。&lt;br /&gt; 4. 很好的支持并发计算。&lt;br /&gt; 5. 高效，低延迟的垃圾回收算法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;指导原则：&lt;/strong&gt;&lt;br /&gt; 1.	减少bookkeeping。&lt;br /&gt; 2.	更少的关键词，减少无谓的输入。无符号表设计使得语法分析，调试等大幅简单。&lt;br /&gt; 3.	保持概念正交&lt;br /&gt; 4. 保持简单。&lt;br /&gt; 5. 减少类型，无类型层次，避免啰嗦。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;语言特性：&lt;/strong&gt;&lt;br /&gt; 清晰，精确的语法语法：大多数从c 继承， 包机制Pascal/Modula/Oberon family (declarations, packages)，并发从(CSP)那里借鉴。&lt;br /&gt; 大写符号导出符号。&lt;br /&gt; 函数或者块开始注释是文档，用于gdoc处理。&lt;br /&gt; 改进的If， case 复合语句，允许在条件前，执行语句。 Case 不支持自动fall throught, 必须显示说明。 Case支持多个判断。&lt;/p&gt;
&lt;p&gt;轻量的类型系统&lt;br /&gt; 没有隐式的转换&lt;br /&gt; 强类型，显式类型转化&lt;br /&gt; 指针运算 slice代替 提供安全性&lt;br /&gt; 通用类型：interface{}&lt;br /&gt; 内置数组和字典&lt;br /&gt; 支持面向对象编程，但是不支持层次继承。&lt;br /&gt; 融合多种语言的特性，各个社区的人都会熟悉，特别是c, lua, python社区的用户非常容易上手。&lt;/p&gt;
&lt;p&gt;运行期： c和汇编实现内存的分配和收集，栈管理，轻量级协程，通讯管道，切片，Map以及反射等等基础设施。&lt;/p&gt;
&lt;p&gt;Gc：目前是用经典的简单的Mark And sweep 算法, 未来会采用更高效，低延迟的算法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;库实现：&lt;/strong&gt;&lt;br /&gt; 1.	完全用Go语言实现, 不依赖其他系统库&lt;br /&gt; 2.	从接口库如xml, asn1，jonson, IO库，压缩，加密库等等，比较齐全，极大的方便了用户。&lt;br /&gt; 支持unicode. 值得一提的是 Go的 &amp;ldquo;hello 世界&amp;rdquo;，很好的展示了对unicode支持。&lt;/p&gt;
&lt;p&gt;模块：&lt;br /&gt; Package管理。一个package可以分散在多个文件里，就好比在一个文件效果一样。&lt;/p&gt;
&lt;p&gt;扩展：&lt;br /&gt; Cgo 支持c和go编程混合，使得GO的扩展非常容易，让Cgo来做参数和类型的转换， 直接连接用户的c函数。&lt;/p&gt;
&lt;p&gt;Range：for语句支持通用的迭代，支持数组，字典，通讯管道。 特别是通讯管道结合goroutine, 由生产者负责在一端输入数据， range充当消费者， 从另外一端。。。，使得包容器的迭代实现非常的优雅和简单易懂。&lt;/p&gt;
&lt;p&gt;Type: 相当灵活的struct, 支持匿名字段，复用看起来很优雅。&lt;/p&gt;
&lt;p&gt;Interface:&lt;br /&gt; 接口 类型 接口实现分离。Interface{}用来实现表示同样类型，用于实现保容器和参数省略。&lt;/p&gt;
&lt;p&gt;闭包：函数是第一类对象。有了闭包，我们很容易把数据和函数结合在一起，形成一个独立的执行体，无需关心数据的泄漏。&lt;/p&gt;
&lt;p&gt;反射(reflection)：用于实现多参数和实现比如xml库，很直观的把结构的字段名和值映射起来，但是效率不高。&lt;/p&gt;
&lt;p&gt;Network 支持。支持tcp,udp，接口统一，但网络读写暂时无效的时候，net模块会自动把该句柄注册到系统的poll, 并且让出执行，等待读写事件的发生。一旦事件通知，net内部通过channel通知阻塞的句柄继续往下执行。从用户的使用角度来看，网络的读写都是顺序 执行的，极大的简化了编程。&lt;/p&gt;
&lt;p&gt;Goroutine：Goroutines 是使得并发编程变得容易的核心。核心思想就是通过系统的线程来多路派遣独立函数的执行 单位协程。当一个协程阻塞的时候，比如说系统调用，调度器就会自动把其他协程安排到另外的线程去执行，从而保证了系统的不间断运行。 这个调度对于程序员是透明的，从用户的角度来看，协程在一直运行。而且这个调度的开销非常小，典型的CPU每秒钟可以调度百万次，使得我们可以创建大量的 goroutine, 模拟现实世界的行为，大大的简化了程序的设计和实现。&lt;/p&gt;
&lt;p&gt;Channel： CSP的核心思想是通过消息共享， 而不是内存共享。 而消息共享机制就是通过channel来传递消息，有同步和异步之分。 Channel在生产者和消费者之间架设起沟通的桥梁。&lt;br /&gt; &lt;strong&gt;&lt;br /&gt; 正是 Network+闭包+Goroutine+Channel让Go这么突出。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目前存在的问题：&lt;/strong&gt;&lt;br /&gt; 1.	语言的实现时间比较短，实现和社区都不够成熟，一些语言特性如select timeout还没有实现。&lt;br /&gt; 2.	语言库和基于GO的应用还比较少，甚至在Google内部也还是个试验项目。&lt;/p&gt;</description><author>No.0023</author><category>Go</category><category>Google</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/37401</guid><pubDate>Thu, 04 Feb 2010 15:41:43 GMT</pubDate></item><item><title>my twitter</title><link>http://n23.appspot.com/blog/post/36401</link><description>&lt;p&gt;https://twitter.com/ &lt;br /&gt;https://rabr.in/ &lt;br /&gt;https://brizzly.com/ &lt;br /&gt;https://t.jteet.com/ &lt;br /&gt;http://twittload.com/ &lt;br /&gt;http://power.com/ &lt;br /&gt;http://fanfou.alwaysdata.net/ &lt;br /&gt;http://is.gd/ &lt;br /&gt;http://3.ly/ &lt;br /&gt;http://yfrog.com/ &lt;br /&gt;http://img.ly/ &lt;br /&gt;http://twitpic.com/ &lt;br /&gt;http://twitgoo.com/ &lt;br /&gt;http://pingwire.com/ &lt;br /&gt;http://twitterfeed.com/ &lt;br /&gt;http://bit.ly/ &lt;br /&gt;http://bitly.tv/ &lt;br /&gt;http://j.mp/&lt;/p&gt;</description><author>No.0023</author><category>twitter</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/36401</guid><pubDate>Wed, 20 Jan 2010 08:18:04 GMT</pubDate></item><item><title>我家儿子欣然的相册</title><link>http://n23.appspot.com/blog/post/35401</link><description>&lt;p&gt;http://www.douban.com/photos/album/22113815/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>欣然</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/35401</guid><pubDate>Wed, 20 Jan 2010 08:16:39 GMT</pubDate></item><item><title>beautiful</title><link>http://n23.appspot.com/blog/post/32401</link><description>&lt;p&gt;&lt;img src="/blog/upload/agNuMjNyEgsSClVwbG9hZEZpbGUYqfUBDA.png" alt="you guest?" height="400" width="600" /&gt;&lt;/p&gt;
&lt;p&gt;漂亮吧？猜一下这图来自哪？&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/32401</guid><pubDate>Thu, 03 Dec 2009 00:41:08 GMT</pubDate></item><item><title>终于用上了unladen-swallow</title><link>http://n23.appspot.com/blog/post/29401</link><description>&lt;p&gt;Shell:~ &amp;gt;: python&lt;br /&gt;Python 2.6.1 (r261:900M, Nov 18 2009, 17:55:22) &lt;br /&gt;[GCC 4.3.2] on linux2&lt;br /&gt;[Unladen Swallow 2009Q4]&lt;br /&gt;Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;由于OpenSolaris太慢了，换成Debian，终于可以用unladen-swallow.&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/29401</guid><pubDate>Thu, 19 Nov 2009 01:18:59 GMT</pubDate></item><item><title>bpython Screenshots</title><link>http://n23.appspot.com/blog/post/28401</link><description>&lt;p&gt;&lt;a href="http://www.bpython-interpreter.org/static/screenshots/1.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/1.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/2.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/2.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/3.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/3.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/4.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/4.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/5.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/5.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/6.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/6.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/7.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/7.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/8.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/8.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/9.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/9.png" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.bpython-interpreter.org/static/screenshots/10.png" rel="no-follow" target="_BLANK"&gt;&lt;img src="http://www.bpython-interpreter.org/static/screenshots/10.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/28401</guid><pubDate>Wed, 11 Nov 2009 14:34:04 GMT</pubDate></item><item><title>Monaco ttf is cool</title><link>http://n23.appspot.com/blog/post/25401</link><description>&lt;p&gt;&lt;a href="/blog/upload/agNuMjNyEgsSClVwbG9hZEZpbGUYusYBDA.png"&gt;Monaco ttf from apple.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blog/upload/agNuMjNyEgsSClVwbG9hZEZpbGUYusYBDA.png" alt="Mocaco tff" height="400" width="600" /&gt;&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/25401</guid><pubDate>Fri, 30 Oct 2009 09:47:14 GMT</pubDate></item><item><title>iRedAdmin-0.1.1 （开源版）新版本发布</title><link>http://n23.appspot.com/blog/post/24401</link><description>&lt;p&gt;iRedAdmin-0.1.1 管理后台（开源版）发布了。下载地址：&lt;a href="http://code.google.com/p/iredmail/downloads/list" rel="no-follow" target="_blank"&gt;http://code.google.com/p/iredmail/downloads/list&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; iRedAdmin 是为 iRedMail 开源邮件方案开发的基于 web 的管理后台，大家可以在这里访问 demo： &lt;a href="http://demo.iredmail.org/" rel="no-follow" target="_blank"&gt;http://demo.iredmail.org/&lt;/a&gt;&lt;br /&gt; 我们也提供了全功能版的管理后台，将在 iRedMail 项目2周年生日的 2009-11-01 发布，只需要 99$ 即可。您可以从 demo 体验后再决定是否购买。demo 地址： &lt;a href="http://demo.iredmail.org/" rel="no-follow" target="_blank"&gt;http://demo.iredmail.org&lt;/a&gt; （选择 Full-featured edition）。&lt;br /&gt; &lt;br /&gt; 以下是 0.1.1 版本从 0.1 版本发布以来的更新记录：&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;br /&gt;
&lt;li&gt;支持实时的语言切换，支持多国语言。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;新建用户时默认允许使用 POP3S, IMAPS，以及通过 TLS/SSL 使用 managesieve 协议修改自己的邮件过滤规则。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;增加了 Vi_VN （Vietnamese），fr_FR（法语），zh_CN（简体中文）翻译。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;修正：将 SQL 模板中的语法由 'TYPE=' 改为 'ENINGE='。感谢论坛的 @peterpp 网友。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;在编辑帐号时显示帐号的当前状态（启用、禁用）。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;新建邮件域是默认添加 ou=Externals。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;修正：正确显示 404 错误页面。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;修正：将新建帐号的邮件地址都转换成小写。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;修正：修正新建帐号时错误的 maildir 路径（域名和用户名之间少了一个 '/'）。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;修正：允许显示多个电话号码。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;列出用户时显示用户的 ID（员工ID，可用于存储类似工号之类的信息）。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;允许修改员工 ID。&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;修正：编辑帐号时允许保存空的显示名称（cn）。&lt;/li&gt;
&lt;/ul&gt;</description><author>No.0023</author><category>iRedAdmin</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/24401</guid><pubDate>Fri, 30 Oct 2009 03:07:55 GMT</pubDate></item><item><title>python exec</title><link>http://n23.appspot.com/blog/post/23401</link><description>&lt;p&gt;In Python 2, exec is actually implemented as a special language statement, &lt;br /&gt;whereas Python 3 implements it as a standard library function.&lt;/p&gt;
&lt;p&gt;在python2是语句，在python3已经是标准的库函数了。&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/23401</guid><pubDate>Tue, 27 Oct 2009 07:59:53 GMT</pubDate></item><item><title>中文 Scala 用户组</title><link>http://n23.appspot.com/blog/post/22401</link><description>&lt;p&gt;https://groups.google.com/group/scala-cn&lt;/p&gt;</description><author>No.0023</author><category>Scala</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/22401</guid><pubDate>Wed, 16 Sep 2009 14:02:05 GMT</pubDate></item><item><title>sbaz is cool</title><link>http://n23.appspot.com/blog/post/20405</link><description>&lt;p&gt;Shell:~ &amp;gt;: sbaz installed&lt;br /&gt;base/1.9&lt;br /&gt;sbaz/1.25tmp&lt;br /&gt;sbaz-setup/1.0&lt;br /&gt;scala/2.7.5.final&lt;br /&gt;scala-devel/2.7.5.final&lt;br /&gt;scala-documentation/2.7.5.final&lt;br /&gt;scala-library/2.7.5.final&lt;br /&gt;scala-tool-support/2.7.5.final&lt;br /&gt;8 packages installed&lt;br /&gt;Shell:~ &amp;gt;: sbaz upgrade&amp;nbsp; &lt;br /&gt;Refreshing list of available packages...&lt;br /&gt;Planning to install scala/2.7.6.final...&lt;br /&gt;Planning to install scala-devel/2.7.6.final...&lt;br /&gt;Planning to install scala-documentation/2.7.6.final...&lt;br /&gt;Planning to install scala-library/2.7.6.final...&lt;br /&gt;Planning to install scala-tool-support/2.7.6.final...&lt;br /&gt;Installing...&lt;br /&gt;sbaz upgrade&amp;nbsp; 3.76s user 0.97s system 3% cpu 2:31.58 total&lt;br /&gt;Shell:~ &amp;gt;: scalac -version&lt;br /&gt;Scala compiler version 2.7.6.final -- Copyright 2002-2009, LAMP/EPFL&lt;/p&gt;</description><author>No.0023</author><category>scala</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/20405</guid><pubDate>Fri, 11 Sep 2009 07:16:03 GMT</pubDate></item><item><title>doubanclaim482ec6c552a48d84</title><link>http://n23.appspot.com/blog/post/21401</link><description>&lt;p&gt;douban&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/21401</guid><pubDate>Tue, 08 Sep 2009 13:24:58 GMT</pubDate></item><item><title>Google accounts on Twitter</title><link>http://n23.appspot.com/blog/post/16403</link><description>&lt;p&gt;&lt;a href="http://twitter.com/google" rel="no-follow"&gt;twitter.com/Google&lt;/a&gt; - our central account&lt;br /&gt;&lt;a href="http://twitter.com/blogger" rel="no-follow"&gt;twitter.com/Blogger&lt;/a&gt; - for Blogger fans&lt;br /&gt;&lt;a href="http://twitter.com/googlecalendar" rel="no-follow"&gt;twitter.com/GoogleCalendar&lt;/a&gt; - user tips &amp;amp; updates&lt;br /&gt;&lt;a href="http://twitter.com/googleimages" rel="no-follow"&gt;twitter.com/GoogleImages&lt;/a&gt; - news, tips, tricks on our visual image search&lt;br /&gt;&lt;a href="http://twitter.com/googlenews" rel="no-follow"&gt;twitter.com/GoogleNews&lt;/a&gt; - latest headlines via Google News&lt;br /&gt;&lt;a href="http://twitter.com/googlereader" rel="no-follow"&gt;twitter.com/GoogleReader&lt;/a&gt; - from our feed reader team&lt;br /&gt;&lt;a href="http://twitter.com/igoogle" rel="no-follow"&gt;twitter.com/iGoogle&lt;/a&gt; - news &amp;amp; notes from Google's personalized homepage&lt;br /&gt;&lt;a href="http://twitter.com/googlestudents" rel="no-follow"&gt;twitter.com/GoogleStudents&lt;/a&gt; - news of interest to students using Google&lt;br /&gt;&lt;a href="http://twitter.com/youtube" rel="no-follow"&gt;twitter.com/YouTube&lt;/a&gt; - for YouTube fans&lt;br /&gt;&lt;a href="http://twitter.com/youtubees" rel="no-follow"&gt;twitter.com/YouTubeES&lt;/a&gt; - en Espanol&lt;br /&gt;&lt;a href="http://twitter.com/googleatwork" rel="no-follow"&gt;twitter.com/GoogleAtWork&lt;/a&gt; - solutions for IT and workplace productivity&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Geo-related&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://twitter.com/sketchup" rel="no-follow"&gt;twitter.com/SketchUp&lt;/a&gt; - Google SketchUp news&lt;br /&gt;&lt;a href="http://twitter.com/3DWH" rel="no-follow"&gt;twitter.com/3DWH&lt;/a&gt; - SketchUp's 3D Warehouse&lt;br /&gt;&lt;a href="http://twitter.com/modelyourtown" rel="no-follow"&gt;twitter.com/Modelyourtown&lt;/a&gt; - 3D modeling to build your favorite places&lt;br /&gt;&lt;a href="http://twitter.com/earthoutreach" rel="no-follow"&gt;twitter.com/EarthOutreach&lt;/a&gt; - Earth &amp;amp; Maps tools for nonprofits &amp;amp; orgs&lt;br /&gt;&lt;a href="http://twitter.com/googlemaps" rel="no-follow"&gt;twitter.com/GoogleMaps&lt;/a&gt; - uses, tips, mashups&lt;br /&gt;&lt;a href="http://twitter.com/googleskymap" rel="no-follow"&gt;twitter.com/GoogleSkyMap&lt;/a&gt; -Android app for the night sky&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ads-related &lt;/strong&gt;&lt;br /&gt;&lt;a href="http://twitter.com/adsense" rel="no-follow"&gt;twitter.com/AdSense&lt;/a&gt; - for online publishers&lt;br /&gt;&lt;a href="http://twitter.com/adwordshelper" rel="no-follow"&gt;twitter.com/AdWordsHelper&lt;/a&gt; - looking out for AdWords questions and tech issues&lt;br /&gt;&lt;a href="http://twitter.com/adwordsprosarah" rel="no-follow"&gt;twitter.com/AdWordsProSarah&lt;/a&gt; - Google Guide for AdWords Help Forum&lt;br /&gt;&lt;a href="http://twitter.com/googleanalytics" rel="no-follow"&gt;twitter.com/GoogleAnalytics&lt;/a&gt; - insights for website effectiveness&lt;br /&gt;&lt;a href="http://twitter.com/googleadbuilder" rel="no-follow"&gt;twitter.com/GoogleAdBuilder&lt;/a&gt; - re building display ads&lt;br /&gt;&lt;a href="http://twitter.com/googleretail" rel="no-follow"&gt;twitter.com/GoogleRetail&lt;/a&gt; - for retail advertisers&lt;br /&gt;&lt;a href="http://twitter.com/technologyuk" rel="no-follow"&gt;twitter.com/TechnologyUK&lt;/a&gt; - for U.K. tech advertisers&lt;br /&gt;&lt;a href="http://twitter.com/insideadwordsde" rel="no-follow"&gt;twitter.com/InsideAdWordsDE&lt;/a&gt; - for German AdWords customers&lt;br /&gt;&lt;a href="http://twitter.com/googleagencyde" rel="no-follow"&gt;twitter.com/GoogleAgencyDE&lt;/a&gt; - for German ad agencies&lt;br /&gt;&lt;a href="http://twitter.com/AdSensePT" rel="no-follow"&gt;twitter.com/AdSensePT&lt;/a&gt; - info for Portuguese-language publishers&lt;br /&gt;&lt;a href="http://twitter.com/AdWordsRussia" rel="no-follow"&gt;twitter.com/AdWordsRussia&lt;/a&gt; - AdWords news &amp;amp; tips in Russian&lt;br /&gt;&lt;a href="http://twitter.com/dentrodeadwords" rel="no-follow"&gt;twitter.com/DentroDeAdWords&lt;/a&gt; - Spanish updates from the Inside AdWords blog&lt;br /&gt;&lt;a href="http://twitter.com/adwordsapi" rel="no-follow"&gt;twitter.com/AdWordsAPI&lt;/a&gt; - AdWords API tips&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Developer &amp;amp; technical &lt;/strong&gt;&lt;br /&gt;&lt;a href="http://twitter.com/googleresearch" rel="no-follow"&gt;twitter.com/GoogleResearch&lt;/a&gt; - from our research scientists&lt;br /&gt;&lt;a href="http://twitter.com/googlewmc" rel="no-follow"&gt;twitter.com/GoogleWMC&lt;/a&gt; - Google Webmaster Central&lt;br /&gt;&lt;a href="http://twitter.com/googlecode" rel="no-follow"&gt;twitter.com/GoogleCode&lt;/a&gt; - latest updates for Google developer products&lt;br /&gt;&lt;a href="http://twitter.com/googledata" rel="no-follow"&gt;twitter.com/GoogleData&lt;/a&gt; - Data APIs provide a standard protocol for reading and writing web data&lt;br /&gt;&lt;a href="http://twitter.com/app_engine" rel="no-follow"&gt;twitter.com/app_engine&lt;/a&gt; - web apps run on Google infrastructure&lt;br /&gt;&lt;a href="http://twitter.com/dataliberation" rel="no-follow"&gt;twitter.com/DataLiberation&lt;/a&gt; - our initiative for complete import/export of all data&lt;br /&gt;&lt;a href="http://twitter.com/googlemapsapi" rel="no-follow"&gt;twitter.com/GoogleMapsAPI&lt;/a&gt; - about using Google Maps embedded in websites&lt;br /&gt;&lt;a href="http://twitter.com/googleio" rel="no-follow"&gt;twitter.com/GoogleIO&lt;/a&gt; - Google's largest annual developer event&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Culture, People &lt;/strong&gt;&lt;br /&gt;&lt;a href="http://twitter.com/googletalks" rel="no-follow"&gt;twitter.com/googletalks&lt;/a&gt; - notes from our @Google speaker series&lt;br /&gt;&lt;a href="http://twitter.com/googlejobs" rel="no-follow"&gt;twitter.com/googlejobs&lt;/a&gt; - the voice of Google recruiters&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Country or Region &lt;/strong&gt;&lt;br /&gt;&lt;a href="http://twitter.com/googlearabia" rel="no-follow"&gt;twitter.com/googlearabia&lt;/a&gt; - news from the Google Arabia Blog*&lt;/p&gt;
&lt;a href="http://twitter.com/googledownunder" rel="no-follow"&gt;twitter.com/googledownunder&lt;/a&gt; - Google activities in Australia &amp;amp; New Zealand&lt;br /&gt;&lt;a href="http://twitter.com/googlede" rel="no-follow"&gt;twitter.com/GoogleDE&lt;/a&gt; - Google in Germany&lt;br /&gt;&lt;a href="http://twitter.com/googlekorea" rel="no-follow"&gt;twitter.com/GoogleKorea&lt;/a&gt; - News &amp;amp; notes in Korean*
&lt;a href="http://twitter.com/googlelatam" rel="no-follow"&gt;twitter.com/GoogleLatAm&lt;/a&gt; - Latin America (en Espanol)&lt;br /&gt;&lt;a href="http://twitter.com/googlepolicyit" rel="no-follow"&gt;twitter.com/GooglePolicyIt&lt;/a&gt; - Notes on Google policy issues in Italy</description><author>No.0023</author><category>Google</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/16403</guid><pubDate>Mon, 13 Jul 2009 00:59:49 GMT</pubDate></item><item><title>my gpg key </title><link>http://n23.appspot.com/blog/post/16402</link><description>&lt;p&gt;-----BEGIN PGP PUBLIC KEY BLOCK-----&lt;br /&gt;Version: GnuPG v1.4.9 (OpenBSD)&lt;br /&gt;&lt;br /&gt;mQGiBEpBN7YRBAD8ycf01oRLw83JSsQNfXgl+hGlvKGCBgg44jB8nwseSE4Xs8ZG&lt;br /&gt;4p2hf50lHc8Cg/UPZG1ZtvFx1ufQQo0aln5c/SjXp9SFOmfMGuvagXHXWRNqwvgj&lt;br /&gt;i289jcnAqOV2x8skPc5QzMcHr1vphEjyIHwlGe48a60fjPPxytA5vhSYuwCgxfxn&lt;br /&gt;1ezzQ0PD7481JJ8W/JpPSzkD/1IC6EFsgsMxvx3lxBIbiBo/kqNjZfowifM0Fn91&lt;br /&gt;W2eatbL842c61/7NEy6qaxUPmmGOs4bcuL49ELDFHtJ4xCNb5SK93QsRysZPh+hG&lt;br /&gt;VPtaCOhmfXO4tp5nPk31sWNjdQNI5X8BhgFEHSGymEVXeAP4yLjkNu+poQBxNeFu&lt;br /&gt;yBvoBADuTUn+iTMSCUU8Qx0vvZNwvPz2fR8SPBrNYPcHnCGN7kzTc7w4n8ysVTIc&lt;br /&gt;yUdiFsxUAT3bHMqJXD/eBTNFoq3KD4ExOjRiWAwAxIqV2aemCxSeENOqrIoj/bs6&lt;br /&gt;UjbfvBpSKS9eAJK5lUIj4FjpG0SHjb1h7vI33qp3q1oGVQuVKbQeUHl0aG9uMzAw&lt;br /&gt;MCA8bm8uMDAyM0BnbWFpbC5jb20+iGAEExECACAFAkpBN7YCGwMGCwkIBwMCBBUC&lt;br /&gt;CAMEFgIDAQIeAQIXgAAKCRCqh0o9/sNblx/bAJ0bHt5yyshq1YlHQy5WUFUOyH9k&lt;br /&gt;tgCfcv1kCJ2eRi2VCvcGTRDp/iapTDS5BA0ESkE3thAQAM7LMPXfCAMZDxa9OEI+&lt;br /&gt;snzXLC1ET70/VneqalUMHfsd/tO5+P4fSW23kQ4P2PUicaCA1b+kidVAisJS2kr6&lt;br /&gt;zZb587L7HtbyIFm7AtKQL6hEuXu2qgeO5v1KmQMFHCEynkc0HDTpVoslaukAOVLq&lt;br /&gt;+i9FeG08lqPvk3RUP7DPSKDoiPWDOKKdKiGCL8ls/B1R1TXkGWDg+wEUri1GsYnR&lt;br /&gt;djoBMLUUhcX/IAisPpetPjtjpXoUljGVvpONWQMGJGwupitp5/mPDWMeYsmGr7Ps&lt;br /&gt;HEey8aeIEn3x90CXCnynO3kYsYUPhZE7ELDk9p/iE8D9Vicn8+AG3eD8ZcWefG6l&lt;br /&gt;Wa2wKa/0r1p/L1JMYvfE7RWouLfxgaIyWF84WIXh87qSaL77eastkLnwm0LhiHlW&lt;br /&gt;X4UcjYzZDCo1tQFJ2HHCHaooH9bn3VCts7/Kec+OdtLWF9BXmN2DMztcyZCVZwSJ&lt;br /&gt;5DQR/nSXBsTgVpClLA5hHvwKEJnVghjBWmS5+eJqxCRXK1Xwt5IFFH0sXl45nZN9&lt;br /&gt;WWvId0OklsQFX8NQqszsbz5Wps3z4qXHJZ7evT98zTSL+SFz9D4uxsX/TB74lUdu&lt;br /&gt;xG143nVfcSwF+wABzFgTRe7Qcybaf23Nwr9ndez3WPqeGXr+hFg/YNGgJqOpY/Zc&lt;br /&gt;Xg8AyDwsR3/EvDE5k2pNrUI3AAQND/wLBpwlLyzhNDeriUZrc9Su52TFp1c8H1aE&lt;br /&gt;SHYPcnlkkQXnLckbOKJcvjFHAEHaGJXz6qeCmxk65U06TfOE3GkUl9nAGQej6biN&lt;br /&gt;AByY4OyyJPba9gOG0arZHHjEk6NIzU1GeJA82XBMnA0TPLtDO8TmLYV7AJhzIUzh&lt;br /&gt;hOHYTD3uGhm80pqcYaQER4973GO4BX3EokT/PJfdRXm8h6yTWZYpAyer4gO6dGnt&lt;br /&gt;v/2iAMyY+h6kaEC3LQGWB7A1Gj5i/vsrMEhXEXZgfIoSsdNAYQkXjzK/DXPzNdSj&lt;br /&gt;DmRuFjgUzCeoX8y0pes++7x5EsHHBVpfCLLdiBhZD8q3Srd/q8E/nK91ulDu9Lut&lt;br /&gt;wqlp0yndUub2ezw+ZmxnY55aB0ENXlIqnHWlTHA/DLNwRO7fO2OwetV5dt00y0Hb&lt;br /&gt;BZFW2N5X6nlnjaeWfSq9qfvYwfNNdruHqjKRqWR6DhgSrCgW5NCUU+vkQ86I5Njg&lt;br /&gt;kvWS2Ou9hHbpf1RxqEEicMsnrejW+puE3Fufn/TfY3pgc9HMTk4JP0+T8CnVfUVR&lt;br /&gt;GwN2xZ5AZPh3ZMFFxslBbKNozhlt11gmsy7b6Lv2A7p0tNMGP6icWQfG84Boc9Mw&lt;br /&gt;jq2FSGc/dfWna37EaZxIUUpKJc16wm9yvCWNK/Oa7tG/eYAJAKMWzSWtQqcfAxvS&lt;br /&gt;phfi8QN2mohJBBgRAgAJBQJKQTe2AhsMAAoJEKqHSj3+w1uXAhIAni6J8cQ2YIFA&lt;br /&gt;2yvlopu07U+b9dUYAJ9hWzW6mbqEw5anXqLRg9iBlTXhJQ==&lt;br /&gt;=MLiY&lt;br /&gt;-----END PGP PUBLIC KEY BLOCK-----&lt;/p&gt;</description><author>No.0023</author><category>gpg</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/16402</guid><pubDate>Sat, 11 Jul 2009 00:59:16 GMT</pubDate></item><item><title>Python sendmail </title><link>http://n23.appspot.com/blog/post/16401</link><description>&lt;p&gt;http://code.google.com/p/mylibs/source/browse/lib/Python/MyPyLib/smtp_client.py :&lt;/p&gt;
&lt;p&gt;#!/usr/bin/env python&lt;br /&gt;# -*- coding: UTF-8 -*-&lt;br /&gt;&lt;br /&gt;# Copyright 2009 N23 &amp;lt;No.0023@gmail.com&amp;gt;&lt;br /&gt;# All rights reserved.&lt;br /&gt;&lt;br /&gt;# Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;# you may not use this file except in compliance with the License.&lt;br /&gt;# You may obtain a copy of the License at&lt;br /&gt;#&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;#&lt;br /&gt;# Unless required by applicable law or agreed to in writing, software&lt;br /&gt;# distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;# See the License for the specific language governing permissions and&lt;br /&gt;# limitations under the License.&lt;br /&gt;&lt;br /&gt;__all__ = ['get_smtp_client', 'sendmail']&lt;br /&gt;&lt;br /&gt;import os, sys&lt;br /&gt;from ConfigParser import ConfigParser&lt;br /&gt;from ConfigParser import NoOptionError&lt;br /&gt;&lt;br /&gt;from smtplib import SMTP&lt;br /&gt;from smtplib import SMTPAuthenticationError&lt;br /&gt;from email import Encoders&lt;br /&gt;from email.base64MIME import encode as encode_base64&lt;br /&gt;from email.MIMEBase import MIMEBase&lt;br /&gt;from email.MIMEMultipart import MIMEMultipart&lt;br /&gt;from email.MIMEText import MIMEText&lt;br /&gt;&lt;br /&gt;def get_smtp_client(stor):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; host = stor['host']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; port = stor['port']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; user = stor['user']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; passwd = stor['pass']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debuglevel = stor['debuglevel']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; login = stor['login']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; starttls = stor['starttls']&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = SMTP(host, port)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if debuglevel:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.set_debuglevel(True)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if starttls and login:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.ehlo()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.starttls()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.ehlo()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.login(user, passwd)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif login:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&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; s.login(user, passwd)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except SMTPAuthenticationError:&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; sys.stdout.write('\n------- try Auth Login again ------\n')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = SMTP(host, port)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if debuglevel:&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; s.set_debuglevel(True)&lt;br /&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; s.ehlo()&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; (code, resp) = s.docmd('AUTH LOGIN')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if code != 334:&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; raise SMTPAuthenticationError(code, resp)&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; (code, resp) = s.docmd(encode_base64(user, eol=&amp;quot;&amp;quot;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if code != 334:&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; raise SMTPAuthenticationError(code, resp)&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; (code, resp) = s.docmd(encode_base64(passwd, eol=&amp;quot;&amp;quot;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if code != 235:&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; raise SMTPAuthenticationError(code, resp)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;def sendmail(server, msg):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; address = [i for f in ('To', 'Cc', 'Bcc') if msg[f] for i in msg[f].split(',')]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.sendmail(msg['From'], address, msg.as_string())&lt;br /&gt;&lt;br /&gt;def fn(options, args):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cfg = ConfigParser()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cfg.read(os.path.join(os.getenv('HOME'), '.LoginAccount.txt'))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag = 'mailClient'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keys = ('host', 'port', 'user', 'pass', 'fr', 'to', 'debuglevel', 'login', 'starttls')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor = {}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k in keys: stor.setdefault(k, '')&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['host'] = cfg.get(flag, 'host')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['port'] = cfg.getint(flag, 'port')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['user'] = cfg.get(flag, 'user')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['pass'] = cfg.get(flag, 'pass')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['fr'] = cfg.get(flag, 'fr')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['to'] = cfg.get(flag, 'to')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['debuglevel'] = cfg.getboolean(flag, 'debuglevel')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['login'] = cfg.getboolean(flag, 'login')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['starttls'] = cfg.getboolean(flag, 'starttls')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; except NoOptionError: pass&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if options.addr:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stor['to'] = options.addr&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = get_smtp_client(stor)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for arg in args:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.stdout.write('sending... ' + arg)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg = MIMEMultipart()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg['From'] = stor['fr']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg['Subject'] = arg&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg['To'] = stor['to']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.set_boundary('===== Baby, I love you. no.0023@gmail.com =====')&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if options.atta:&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; data = MIMEBase('application', 'octet-stream')&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; data.set_payload(open(arg, 'rb').read())&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; Encoders.encode_base64(data)&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; data.add_header('Content-Disposition', 'attachment', filename = arg)&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; msg.attach(data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = '''&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;pre&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; b += open(arg, 'rb').read()&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; b += '''&amp;lt;/pre&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;'''&lt;br /&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; body = MIMEText(b, _subtype = 'html', _charset = 'utf-8')&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; msg.attach(body)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendmail(s, msg)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.stdout.write(' done.\n')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.close()&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from optparse import OptionParser&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; usage = '%prog [-e addr] [-a] args...'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser = OptionParser(usage=usage)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser.add_option('-e', '--addr', dest='addr',&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; help='receive email address', metavar='ADDR')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser.add_option('-a', '--atta', dest='atta',&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; action='store_true', default=False,&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; help='attachment flag', metavar='atta')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (options, args) = parser.parse_args()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not args:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser.print_usage()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(1)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fn(options, args)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;http://code.google.com/p/mylibs/source/browse/lib/Python/MyPyLib/LoginAccount.txt :&lt;/p&gt;
&lt;pre&gt;[mailClient]&lt;br /&gt;host = smtp.qq.com&lt;br /&gt;port = 25&lt;br /&gt;user = ***            # change to your login id&lt;br /&gt;pass = ***           # change to your login password&lt;br /&gt;fr = no.0023@qq.com&lt;br /&gt;to = no.0023@gmail.com&lt;br /&gt;debuglevel = True&lt;br /&gt;login = True&lt;br /&gt;starttls = False&lt;br /&gt;&lt;br /&gt;#[mailClient]&lt;br /&gt;#host = smtp.gmail.com&lt;br /&gt;#port = 587&lt;br /&gt;#user = ***@gmail.com&lt;br /&gt;#pass = ***&lt;br /&gt;#fr = no.0023@gmail.com&lt;br /&gt;#to = no.0023@qq.com&lt;br /&gt;#debuglevel = True&lt;br /&gt;#login = True&lt;br /&gt;#starttls = True&lt;/pre&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/16401</guid><pubDate>Fri, 10 Jul 2009 02:31:15 GMT</pubDate></item><item><title> Heads up! OpenBSD turns 4.6-current </title><link>http://n23.appspot.com/blog/post/15402</link><description>&lt;p&gt;David Gwynne (dlg@) has &lt;a href="http://marc.info/?m=124683740010999" rel="no-follow"&gt;tagged 4.6-current&lt;/a&gt;. That means that we are one step closer to the upcoming release. Keep an eye out for pre-orders!&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;From: David Gwynne &lt;br /&gt;To: source-changes@cvs.openbsd.org&lt;br /&gt;Subject: CVS: cvs.openbsd.org: src&lt;br /&gt;Date: Sun, 5 Jul 2009 17:42:51 -0600 (MDT)&lt;br /&gt;Sender: owner-source-changes@openbsd.org&lt;br /&gt;&lt;br /&gt;CVSROOT:	/cvs&lt;br /&gt;Module name:	src&lt;br /&gt;Changes by:	dlg@cvs.openbsd.org	2009/07/05 17:42:51&lt;br /&gt;&lt;br /&gt;Modified files:&lt;br /&gt;	sys/conf       : newvers.sh &lt;br /&gt;&lt;br /&gt;Log message:&lt;br /&gt;take us to 4.6-current&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/15402</guid><pubDate>Tue, 07 Jul 2009 13:03:10 GMT</pubDate></item><item><title>7月编程语言排行榜：Java，正在老去的王者</title><link>http://n23.appspot.com/blog/post/15401</link><description>&lt;p&gt;【51CTO独家特稿】Tiobe近日发布了最新一期的编程语言排行榜，在前十名的榜单中，除C#上升一位与上期排名第六的Python交换位置外，其他排名无明显变化。本期榜单，我们关注Java的持续下滑。&lt;/p&gt;
&lt;p&gt;&lt;img src="http://images.51cto.com/files/uploadimg/20090706/1003150.jpg" alt="" height="574" width="490" /&gt; &lt;br /&gt; &lt;strong&gt;编程语言排行榜前20名榜单&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;王者之路&lt;/strong&gt;&lt;br /&gt; 1990年代，随着计算机硬件技术的发展和成本的下降，电脑开始在企业中迅速普及，每个公司都开始自己的信息化之路以节约成本提升效率；随后，个人电脑开 始在家庭用户群体得到普及。&amp;ldquo;第三次浪潮&amp;rdquo;的预言波澜壮阔的展开并迅速蔓延；互联网的发展将这次信息化革命推向高潮。1995年，市场占有率高达 95%Netspace浏览器开始使用一种JavaApplet技术为人们提供炫目而安全的使用体验（当时发布的版本叫HotJava浏览 器，Netspace与Sun联合推出）。这吸引了大批编写CGI程序的开发者关注；渐渐的，Java的各种优点被人们挖掘，字节码、垃圾回收、更强的面 向对象，这种基于虚拟机的语言开始在程序员中迅速传播并被实践到各种类型的项目中。&lt;br /&gt; 经过几年的演化和改进，到2000年，Java已经成功超越当时的主流语言C和C++；2002年，Java一跃成为采用率最高的编程语言。&amp;ldquo;一次编写到 处运行&amp;rdquo;的口号使更多企业级项目的程序员得到解脱，庞大复杂的项目需求开始告别混乱的结构和错误的指针，就像80年代C++的出现一样，Java使程序员 的生产力又一次得到了大幅提升。&lt;br /&gt; 一般地，我们可以从开发工具的丰富和厂商的支持来评判一门语言是否流行。Java的开发工具形成了激烈的市场竞争，Borland推出了 JBuilder，微软匆忙启动了Visual J++，IBM开始投资Visual Age for Java（Eclipse前身），Sun则推出了自己的NetBeans IDE。&lt;br /&gt; 这时，Java无疑成为了编程语言的王者，他以自己干净的语法和强大的功能统治着企业级项目的开发；Sun公司开始被程序员以一家软件厂商看待并崇拜。&lt;br /&gt; &lt;strong&gt;在变化中老去&lt;/strong&gt;&lt;br /&gt; 没有&amp;ldquo;银弹&amp;rdquo;，没有哪种语言可以完美适应日新月异的IT界，至少Java的进化的速度在最近几年已经远远无法追赶日趋复杂项目需求和苛刻的交付日期。人们 开始尝试各种开源项目以缓解Java在某些方面的不足，以Hibernate和Spring为代表的框架快速发展和普及；另一方面，Sun和JCP的各种 标准不断遭到人们的质疑，JSF和JPA等官方框架被大多数开发者抛在一边。而这背后，是Sun和JCP对新需求的麻木和对社区的漠视，这直接导致 Java的更新落后于变化，Java正在新变化新需求中变得缓慢和老态。&lt;/p&gt;
&lt;p&gt;&lt;img src="http://images.51cto.com/files/uploadimg/20090706/1003151.jpg" alt="" height="366" width="490" /&gt;&lt;br /&gt; Java近年走势&lt;/p&gt;
&lt;p&gt;Java最近一次让你兴奋的功能 更新是什么？是1.4到Java5.0的版本更新还是新加入的泛型语法?这些都是5年前的事了。面对社区中的众多需求，JCP早已无法及时考量和应 对，Java的脚步在日趋蹒跚；更多的开发者在考虑项目是否应该使用Java或者其他什么语言，总之，要他们解决的问题Java解决起来很麻烦；不满的情 绪开始在社区中蔓延。&lt;br /&gt; &lt;strong&gt;DSL和敏捷&lt;/strong&gt;&lt;br /&gt; 远在日本的松本行弘就是这其实之一，寻找适合自己的编程语言的梦想促使他开发了Ruby，一种比Perl更强大，比Python更面向对象的语言；这时， 关于程序开发效率的讨论从各个软件公司的项目小组蔓延到社区，以TomDeMacro为首的一群人人开始倡导敏捷开发以提高效率；作为对敏捷宣言的实 践，DSL（特定领域语言）开始被人们重拾并重视起来。基于灵活的语法，Ruby无疑成为DSL和敏捷的不二选择。&lt;br /&gt; 不久，DHH（DAVID HEINEMEIERHANSSON）推出了基于Ruby编写框架。随着Web2.0引领的又一次互联网高潮，基于Ruby onRails的敏捷项目一个又一个的迅速建立并投入使用，人们惊奇的发现通过简单的DSL改造，Ruby几乎可以适应任何Web项目。这时，Java阵 营也开始躁动不安，Sun甚至雇佣了两名JRuby团队的核心成员开发自己的Ruby解释器以期拥有Ruby的动态和敏捷。JRuby是一个纯Java实 现的Ruby解释器。通过JRuby，你可以在JVM上直接运行Ruby程序，调用Java的API。&lt;br /&gt; &lt;strong&gt;源于Java，超越Java&lt;/strong&gt;&lt;br /&gt; 类似JRuby这种基于JVM的语言还有很多，比如Scala。Java泛型的创造者MartinOdersky对为Java创造泛型时遇到的约束性记忆 犹新，创建一个超越Java的新语言的念头由此产生，并最终促成了Scala编程语言。Scala是一种针对JVM将函数和面向对象技术组合在一起的编程 语言，高度的可伸缩性和对JavaAPI的无缝兼容使Scala成为Java程序员解决某些问题的另一种选择。&lt;br /&gt; 同样基于JVM的语言还有Groovy、Jython等，他们虽然拥有不同的名字，不同的语法和特性，但相同的一点时他们都是基于JVM的语言，并对 JavaAPI非常友好。在日趋老态臃肿的Java之外，他们，为解决不同的问题域和应用场景而生；在Java社区的庞大背影下，这些基于JVM的语言为 需求而生，为问题而生，敏捷且充满活力。&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;其他编程语言&lt;/strong&gt;&lt;br /&gt; 以下是排名21到50的编程语言列表，请注意排名32位的Scala和排名47位的Groovy。&lt;br /&gt; [tr]PositionProgramming LanguageRatings[/tr]&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;Objective-C&lt;/td&gt;
&lt;td&gt;0.509%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;ActionScript&lt;/td&gt;
&lt;td&gt;0.425%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;Fortran&lt;/td&gt;
&lt;td&gt;0.400%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;COBOL&lt;/td&gt;
&lt;td&gt;0.399%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Logo&lt;/td&gt;
&lt;td&gt;0.394%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Ada&lt;/td&gt;
&lt;td&gt;0.394%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;FoxPro/xBase&lt;/td&gt;
&lt;td&gt;0.338%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;PowerShell&lt;/td&gt;
&lt;td&gt;0.327%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;Scratch&lt;/td&gt;
&lt;td&gt;0.274%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;Transact-SQL&lt;/td&gt;
&lt;td&gt;0.271%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;Prolog&lt;/td&gt;
&lt;td&gt;0.243%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Scala&lt;/td&gt;
&lt;td&gt;0.228%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;Erlang&lt;/td&gt;
&lt;td&gt;0.203%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;Haskell&lt;/td&gt;
&lt;td&gt;0.198%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;ML&lt;/td&gt;
&lt;td&gt;0.196%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;LabVIEW&lt;/td&gt;
&lt;td&gt;0.191%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;Focus&lt;/td&gt;
&lt;td&gt;0.155%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;Awk&lt;/td&gt;
&lt;td&gt;0.153%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;Smalltalk&lt;/td&gt;
&lt;td&gt;0.150%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;Forth&lt;/td&gt;
&lt;td&gt;0.145%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;Alice&lt;/td&gt;
&lt;td&gt;0.142%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;J&lt;/td&gt;
&lt;td&gt;0.133%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;Tcl/Tk&lt;/td&gt;
&lt;td&gt;0.129%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;JavaFX Script&lt;/td&gt;
&lt;td&gt;0.129%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;Caml/F#&lt;/td&gt;
&lt;td&gt;0.118%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;NXT-G&lt;/td&gt;
&lt;td&gt;0.118%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;Groovy&lt;/td&gt;
&lt;td&gt;0.114%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;APL&lt;/td&gt;
&lt;td&gt;0.111%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;Bourne shell&lt;/td&gt;
&lt;td&gt;0.109%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;CL (OS/400)&lt;/td&gt;
&lt;td&gt;0.107%&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;下面是排名51-100的语言：&lt;br /&gt; ABC, AD, Algol, Alpha, Applescript, Beta, Boo, C shell, cg, Clean,Cobra, cT, Curl, Dylan, Eiffel, Euphoria, Factor, Fan, Icon, IDL,Inform, Io, Lingo, MAD, Magic, Maple, Mathematica, MAX/MSP, MOO, MUMPS,Natural, Oberon, Occam, Oz, PL/I, Postscript, PowerBuilder, Progress,Q, R, Revolution, REXX, S-lang, SIGNAL, SPSS, SuperCollider, VBScript,Verilog, VHDL, XSLT&lt;br /&gt; &lt;strong&gt;编程语言类别走势&lt;/strong&gt;&lt;br /&gt; [tr]CategoryRatings July 2009Delta July 2008[/tr]&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;Object-Oriented Languages&lt;/td&gt;
&lt;td&gt;54.2%&lt;/td&gt;
&lt;td&gt;-1.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Procedural Languages&lt;/td&gt;
&lt;td&gt;41.8%&lt;/td&gt;
&lt;td&gt;+0.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Functional Languages&lt;/td&gt;
&lt;td&gt;2.8%&lt;/td&gt;
&lt;td&gt;+0.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logical Languages&lt;/td&gt;
&lt;td&gt;1.1%&lt;/td&gt;
&lt;td&gt;+0.2%&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;br /&gt; [tr]CategoryRatings July 2009Delta July 2008[/tr]&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;Statically Typed Languages&lt;/td&gt;
&lt;td&gt;60.2%&lt;/td&gt;
&lt;td&gt;+1.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamically Typed Languages&lt;/td&gt;
&lt;td&gt;39.8%&lt;/td&gt;
&lt;td&gt;-1.8%&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;img src="http://images.51cto.com/files/uploadimg/20090706/1003152.jpg" alt="" height="345" width="490" /&gt;&lt;br /&gt; &lt;strong&gt;静态类型和动态类型的语言走势&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;来源：51CTO&lt;/strong&gt;&lt;/p&gt;</description><author>No.0023</author><category>Java</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/15401</guid><pubDate>Tue, 07 Jul 2009 13:01:12 GMT</pubDate></item><item><title>sudo -s</title><link>http://n23.appspot.com/blog/post/14407</link><description>&lt;p&gt;Shell:~ &amp;gt;: id&lt;br /&gt;uid=1000(Py3k) gid=0(wheel) groups=0(wheel),&amp;nbsp; 5(operator), 20(staff),&amp;nbsp; 597(_kqemu)&lt;br /&gt;Shell:~ &amp;gt;: sudo -s&lt;br /&gt;obsd# id&lt;br /&gt;uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys), 4(tty), 5(operator), 20(staff), 31(guest), 597(_kqemu)&lt;br /&gt;obsd#&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/14407</guid><pubDate>Thu, 04 Jun 2009 14:29:27 GMT</pubDate></item><item><title>BSD Release: Jibbed 5.0</title><link>http://n23.appspot.com/blog/post/14401</link><description>&lt;p&gt;NetBSD developer Zafer Aydogan has announced the release of &lt;a href="http://distrowatch.com/jibbed" rel="no-follow"&gt;Jibbed&lt;/a&gt; 5.0, a live CD based on NetBSD 5.0. An announcement went out a few days ago, but now it has been updated to include information about new features: &amp;quot;Here we go again the with a new version of the NetBSD live CD. This time it's version 5.0, built from the finest NetBSD-5 sources. As usual, the live CD contains the latest packages from pkgsrc and three new packages: AbiWord and two fantastic games - Wormux and Crack Attack!. As always it contains X.Org from base and the Xfce window manager. Jibbed is a bootable live CD based on the NetBSD operating system that works directly from a CD without touching a hard drive. It provides automatic hardware detection and supports many graphics cards, sound cards and USB devices. It also features features a rescue environment for NetBSD.&amp;quot; Visit the project's &lt;a href="http://www.jibbed.org/" rel="no-follow"&gt;home page&lt;/a&gt; to read the brief release announcement. &lt;a href="http://www.jibbed.org/download.html" rel="no-follow"&gt;Download (MD5)&lt;/a&gt;: &lt;a href="http://dl.jibbed.org/releases/jibbed-5.0-i386-LiveCD.iso" rel="no-follow"&gt;jibbed-5.0-i386-LiveCD.iso&lt;/a&gt; (489MB), &lt;a href="http://ber.jibbed.org/releases/jibbed-5.0-amd64-LiveCD.iso" rel="no-follow"&gt;jibbed-5.0-amd64-LiveCD.iso&lt;/a&gt; (530MB).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Jibbed是非安装型的自启动运行光盘，它基于NetBSD。它创建自HEAD分支最新的NetBSD源码，光盘上提供的第三方软件都是最新版本，这包括来自wip-pkgsrc的测试软件包。&lt;/p&gt;</description><author>No.0023</author><category>NetBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/14401</guid><pubDate>Thu, 14 May 2009 03:04:03 GMT</pubDate></item><item><title>BSD Release: BSDanywhere 4.5</title><link>http://n23.appspot.com/blog/post/13401</link><description>&lt;p&gt;Stephan Rickauer has announced the release of &lt;a href="http://distrowatch.com/bsdanywhere" rel="no-follow"&gt;BSDanywhere&lt;/a&gt; 4.5, a live CD consisting of a base OpenBSD system plus a graphical desktop (Enlightenment 17): &amp;quot;We are pleased to announce the immediate availability of BSDanywhere 4.5 - Enlightenment at your fingertips. Here's a quick summary of the changes since 4.4: Upgrade base system to OpenBSD 4.5 and packages accordingly, please see the OpenBSD site for a list of changes since 4.4; contains official, standard, unmodified OpenBSD kernel - previously, we had to ship a slightly modified version of the OpenBSD kernel to make the boot off CD media less cumbersome, but thanks to OpenBSD developer Kenneth Westerback, this has been improved in OpenBSD 4.5; last but not least, we have great new artwork, provided graciously by Tim Saueressig.&amp;quot; Here is the complete &lt;a href="http://bsdanywhere.org/node/46" rel="no-follow"&gt;release announcement&lt;/a&gt;. &lt;a href="http://bsdanywhere.org/download/" rel="no-follow"&gt;Download (SHA256)&lt;/a&gt;: &lt;a href="http://mirror.switch.ch/ftp/mirror/BSDanywhere/4.5/bsdanywhere45-i386.iso" rel="no-follow"&gt;bsdanywhere45-i386.iso&lt;/a&gt; (628MB), &lt;a href="ftp://ftp.netbsd.se/BSDanywhere/4.5/bsdanywhere45-amd64.iso" rel="no-follow"&gt;bsdanywhere45-amd64.iso&lt;/a&gt; (699MB).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BSDanywhere是基于OpenBSD的自启动运行光盘镜像。它包含了整个OpenBSD基础系统（不含编译器），并带有一份图形桌面、一套非典型 的软件收藏、自动硬件检测，以及对很多显示卡、声卡、SCSI、USB设备及其他外设的支持。BSDanywhere可以作为一份教学UNIX系统，一套 修复环境，或者是硬件测试平台来使用。&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/13401</guid><pubDate>Wed, 06 May 2009 14:35:39 GMT</pubDate></item><item><title>My DAL Util CLass</title><link>http://n23.appspot.com/blog/post/12401</link><description>&lt;p&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.ResultSetMetaData;&lt;br /&gt;import java.sql.SQLException;&lt;br /&gt;import java.sql.Statement;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Map;&lt;br /&gt;&lt;br /&gt;import javax.sql.RowSet;&lt;br /&gt;import javax.sql.rowset.CachedRowSet;&lt;br /&gt;&lt;br /&gt;import com.sun.rowset.CachedRowSetImpl;&lt;br /&gt;&lt;br /&gt;public class DALUtils {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* Data Access Layer Util Class.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static RowSet query(Connection conn, String sql) {&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; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResultSet rset = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Statement stmt = conn.createStatement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rset = stmt.executeQuery(sql);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CachedRowSet crs = new CachedRowSetImpl();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; crs.populate(rset);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; stmt.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return crs;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (SQLException ex) {ex.printStackTrace();}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int exec(Connection conn, String sql) {&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; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int rt = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Statement stmt = conn.createStatement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rt = stmt.executeUpdate(sql);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; stmt.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return rt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (SQLException ex) {ex.printStackTrace();}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static List&amp;lt;Object&amp;gt; resultSetToList(ResultSet rs, String className) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Object&amp;gt; list = new ArrayList&amp;lt;Object&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResultSetMetaData meta = rs.getMetaData();&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Object obj = null;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (rs.next()) {&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; obj = Class.forName(className).newInstance();&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; for(int i = 1; i &amp;lt;= meta.getColumnCount(); i++)&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; String colName = meta.getColumnName(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; String methodName = &amp;quot;set&amp;quot; + new String(colName.charAt(0)+&amp;quot;&amp;quot;).toUpperCase() + colName.substring(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object value = rs.getObject(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; Method method = obj.getClass().getMethod(methodName, value.getClass());&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; method.invoke(obj, value);&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; &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; list.add(obj);&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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(Exception ex) {ex.printStackTrace();}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; resultSetToList(ResultSet rset) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; list = new ArrayList&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt;();&lt;br /&gt;&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; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResultSetMetaData meta = rset.getMetaData();&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (rset.next()) {&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; Map&amp;lt;String, Object&amp;gt; m = new HashMap&amp;lt;String, Object&amp;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; for(int i = 1; i &amp;lt;= meta.getColumnCount(); i++)&amp;nbsp;&amp;nbsp;&amp;nbsp; &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; m.put(meta.getColumnName(i), rset.getObject(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; list.add(m);&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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(SQLException ex) {ex.printStackTrace();}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static List&amp;lt;String&amp;gt; getColumnLabelList(ResultSet rset) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResultSetMetaData meta = rset.getMetaData();&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 1; i &amp;lt;= meta.getColumnCount(); 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; list.add(meta.getColumnLabel(i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(SQLException ex) {ex.printStackTrace();}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static int getTableMaxCount(Connection conn, String tableName) {&lt;br /&gt;&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; int cnt = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;select count(*) from &amp;quot; + tableName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Statement stmt = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; stmt = conn.createStatement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ResultSet rset = stmt.executeQuery(sql);&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; while(rset.next()) {&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; cnt = rset.getInt(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&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; stmt.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (SQLException ex) {ex.printStackTrace(); } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return cnt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static Map&amp;lt;String, Integer&amp;gt; getPagerData(Connection conn, String tableName, int pageSize, int pageCnt) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int maxCnt = getTableMaxCount(conn, tableName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int totalPageCnt = (maxCnt + pageSize -1) / pageSize;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int pageCnt = 1;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (page != null &amp;amp;&amp;amp; page.length() &amp;gt; 0) pageCnt = Integer.valueOf(page);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (pageCnt &amp;gt; totalPageCnt) pageCnt = totalPageCnt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (pageCnt &amp;lt;= 0) pageCnt = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int offset = (pageCnt -1) * pageSize;&lt;br /&gt;&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; Map&amp;lt;String, Integer&amp;gt; m = new HashMap&amp;lt;String, Integer&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; m.put(&amp;quot;maxCnt&amp;quot;, maxCnt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; m.put(&amp;quot;pageCnt&amp;quot;, pageCnt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; m.put(&amp;quot;totalPageCnt&amp;quot;, totalPageCnt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; m.put(&amp;quot;offset&amp;quot;, offset);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; m.put(&amp;quot;pageSize&amp;quot;, pageSize);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return m;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static String getTableData(Connection conn, String sql) {&lt;br /&gt;&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; return table head and body&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuffer sb = new StringBuffer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (sql.toUpperCase().contains(&amp;quot;SELECT&amp;quot;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sql = &amp;quot;select * from (&amp;quot; + sql + &amp;quot;) a limit 0, 1000&amp;quot;;&lt;br /&gt;&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; RowSet rs = query(conn, sql);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(&amp;quot;&amp;lt;thead&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(&amp;quot;&amp;lt;tr&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;String&amp;gt; LabelList = getColumnLabelList(rs);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (String s: LabelList) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(&amp;quot;&amp;lt;th&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(s);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(&amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);&lt;br /&gt;&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; sb.append(&amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(&amp;quot;&amp;lt;/thead&amp;gt;&amp;quot;);&lt;br /&gt;&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; List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; dataList = resultSetToList(rs);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(&amp;quot;&amp;lt;tbody&amp;gt;&amp;quot;);&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; for(Map&amp;lt;String, Object&amp;gt; m: dataList) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sb.append(&amp;quot;&amp;lt;tr&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (String s: LabelList) {&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; sb.append(&amp;quot;&amp;lt;td&amp;gt;&amp;quot;);&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; sb.append(m.get(s).toString());&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; sb.append(&amp;quot;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;quot;);&lt;br /&gt;&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; sb.append(&amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;);&lt;br /&gt;&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; sb.append(&amp;quot;&amp;lt;tbody&amp;gt;&amp;quot;);&lt;br /&gt;&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; return sb.toString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static String getTableData(Connection conn, String tableName, Map&amp;lt;String, Integer&amp;gt; pagerData) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int offset = pagerData.get(&amp;quot;offset&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int pageSize = pagerData.get(&amp;quot;pageSize&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String sql = &amp;quot;select * from &amp;quot; + tableName + &amp;quot; limit &amp;quot; + offset + &amp;quot;, &amp;quot; + pageSize;&lt;br /&gt;&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; return getTableData(conn, sql);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String args[]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Connection conn = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RowSet rs = query(conn, &amp;quot;select * from plantMapping&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; resultSetToList(rs, &amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;</description><author>No.0023</author><category>Java</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/12401</guid><pubDate>Fri, 20 Mar 2009 14:45:01 GMT</pubDate></item><item><title>必备的 Java 参考资源列表</title><link>http://n23.appspot.com/blog/post/9403</link><description>&lt;p&gt;from http://www.ibm.com/developerworks/cn/java/j-javaresources.html?S_TACT=105AGX52&amp;amp;S_CMP=NL&amp;amp;ca=dnl-cn-03052009&amp;amp;open&amp;amp;cm_mmc=4962-_-n-_-vrm_newsletter-_-10104_107179&amp;amp;cmibm_em=dm:0:14308375&lt;/p&gt;
&lt;p&gt;自 Java 平台从 1995 年作为一个整体引入编程社区开始，它的发展已经远远超出了早期 Java 专家和推介者所设想的&amp;ldquo;applet 无处不在&amp;rdquo;这一远景。相反，Java 世界出现了 Swing、与 servlet 结合，从而发展为 J2EE、出现了 EJB、超越了 Spring 和 Hibernate、添加了泛型，变得越来越具有动态性，然后实现了函数化，在我撰写本文时，Java 继续朝着各种有趣的方向发展。&lt;/p&gt;
&lt;p&gt;这使得没有一直跟随学习这门语言的 Java 程序员感到有点吃力。&lt;/p&gt;
&lt;p&gt;作为一名演讲人、博客作者、顾问和导师，经常有一些初、中级 Java 程序员向我询问相关参考资源，以便帮助他们掌握这个广泛的、复杂的、看似永无止境的语言。几年前，我发表了一个 &lt;a href="http://blogs.tedneward.com/2005/08/21/Recommended+Reading+List+Old+Version.aspx" rel="no-follow"&gt;推荐读物列表&lt;/a&gt; 专门解答这个问题，但最近，developerWorks 的 Java 编辑让我整理一份更完整的参考资源列表，而不仅仅包括书籍 &amp;amp;mdash; 考虑到资源列表现在已经增长到了预期消费者即使花费十年的时间阅读也仍然不得要领的地步，这是一个很好的提议。&lt;/p&gt;
&lt;p&gt;为了保证客观性和避免不利的影响，我决定给出各种参考资源的博客空间（blogosphere）：Web 站点、研讨会、书籍、博客、工具，以及任何 Java 开发人员可能感兴趣或对他们有用的内容，帮助他们从庞大的参考资源中找到自己需要的内容。&lt;/p&gt;
&lt;p&gt;这份列表得到了很多人的响应（在此我要感谢所有的回复者）。&lt;/p&gt;
&lt;p&gt;在开始之前，需要解释一点：这些参考资源不一定是 Java 世界中最流行、最强大或最有影响的资源 &amp;amp;mdash; 				&lt;em&gt;这份&lt;/em&gt; 列表可能完全不同（尽管我怀疑其中也会出现很多相同的资源）；但每个希望获得成功的 Java 开发人员都应该将这些参考资源保存在浏览器、书架或备忘录中。与任何此类型的列表一样，人们总会争论哪些内容本来应当包含进去但却没有出现在列表中，或本 不该有的内容却出现在列表中。&lt;/p&gt;
&lt;p&gt;现在开始正式介绍这些参考资源。&lt;/p&gt;
&lt;p&gt;&lt;a name="N1007C"&gt;Web 站点和开发人员 Web 门户&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;网络无疑改变了共享资源和出版的本质（对我也是一样：您正在网络上阅读这篇文章），因此，从每位 Java 开发人员都应该关注的关键 Web 站点和开发人员门户上的关键 Java 参考资源入手似乎比较合理。&lt;/p&gt;
&lt;p&gt;在 许多情况下，Web 站点和/或开发人员门户的价值不仅仅在于其中提供的参考资源或文章，还包括围绕该门户或站点的社区。静态 Web 页面和下载文件的时代已经一去不复返了，取而代之的是更&amp;ldquo;积极&amp;rdquo; 的论坛、主题文章和交互式讨论，讨论者不仅包括频繁访问该站点并组成社区的开发人员，还包括社区成员和门户所有者。随着技术的发展，开发人员也必须跟上技 术的步伐，同时，门户也要不断发展，以满足社区不断变化的需求；与社区保持开放的关系是实现活跃门户的关键因素。&lt;/p&gt;
&lt;p&gt;Web 站点列表（带有 URL）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/" rel="no-follow"&gt;java.sun.com&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 这是 JDK 的发源地，通常是 Java 开发人员下载 JDK 和文档副本的首要站点。除此之外，该站点还是查找有关整个 Java 平台的信息的好来源，包括一段非常详细的 JVM 介绍（Hotspot），它极其深入地描述了 JVM 的细节。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.java.net/" rel="no-follow"&gt;java.net&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; Java.NET 站点汇集了开源项目、文档、博客、wiki、新闻和其他社区资源等各种内容。它是 Java 技术的主要信息来源，不过提供的信息似乎过于繁杂。不过尽管如此，浏览项目列表也会找到一些真正有用的东西，如 FEST-Swing 项目，它旨在创建一个用于构建 Swing 应用程序的&amp;ldquo;方便接口&amp;rdquo;，大大简化了单元测试的创建。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.infoq.com/" rel="no-follow"&gt;InfoQ&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 由 Floyd Marinescu 创建，他是 The ServerSide 的名誉主编，InfoQ 与这里列出的许多其他参考资源的区别是，它是技术中立的，不仅包括 Java 代码，还包括 .NET 和 Ruby，并提供了大量灵活的方法和见解。尽管 InfoQ 上的评论社区并没有 TheServerSide 上的社区那么庞大和多样化，但是该社区中的讨论通常更加温和，而不会过于激烈。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.theserverside.com/" rel="no-follow"&gt;TheServerSide&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 通常称为&amp;ldquo;the Slashdot of Java&amp;rdquo;，TheServerSide 是第一个公开质询、热烈讨论和积极研究企业 Java 主题的地方。有关轻量级容器（以 Spring 为代表）的一些最初理念就是从这里诞生的，这里产生了许多 Java 社区中的&amp;ldquo;思想领导者&amp;rdquo;。尽管最近的激烈争论有时会带有主观色彩，但 TSS 将始终是许多 Java 内容的发源地，这些内容构成了我们现在所拥有的 Java 系统；同样，从 TSS 总是可以了解各种 Java 技术的历史。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.dzone.com/" rel="no-follow"&gt;DZone&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; DZone 最初是一个面向 Java 开发人员的资源站点，但最近它扩展到了其他技术领域。包括 .NET 和 Ruby，以及其他几个主题&amp;ldquo;专区&amp;rdquo;。这样，不仅 Java 开发人员可以利用它来专门研究 Java 专区，还会有一些跨平台的内容，聪明的开发人员可以充分利用这一点。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.ibm.com/developerworks/cn/java/" rel="no-follow"&gt;developerWorks Java 技术专区&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 如果您正在阅读本文，那么您已经找到了 dw。为了解释清楚，我必须强调除本文外，我曾在该站点发表过其他一些文章，但我可以诚实地说，dw 是一个有关 Java 编码和 JVM 的文章和资源的优秀来源。特别注意，请务必查看 &lt;a href="http://www.ibm.com/developerworks/cn/java/j-jtp/" rel="no-follow"&gt;Java 理论与实践&lt;/a&gt;，这是一个由 Brian Goetz 撰写的长期系列，其中包含一个共分三部分的 JVM 垃圾收集器系列文章，它以一种浅显易懂的方式介绍了 GC 的核心概念。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.alphaworks.ibm.com/" rel="no-follow"&gt;IBM alphaWorks&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; alphaWorks 是 developerWorks 的姊妹站点，IBM 研究人员和员工在此提供他们认为会确定未来主流的工具和技术。alphaWorks 提供了十二种不同的类别，从而为 Java 开发人员提供了机会来尝试各种非常超前的工具、语言、库和其他项目 &amp;amp;mdash; 它们正处于研究阶段。注意，许多项目是为了证明一个特殊的研究点，然后就会停止，使项目保持在当前的效率状态。&lt;em&gt;警告：&lt;/em&gt;有 些项目不是开源的，而有些项目不包含源代码。但相当数量的 alphaWorks 项目最终会成为主流，要么成为受 IBM 支持的产品，要么作为可从一些 IBM 开放源码位置下载的可用工具。无论如何，只要关注 alphaWorks，就可以了解 Java 发展的方向以及方式。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.onjava.com/" rel="no-follow"&gt;OnJava&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; OnJava 是一个独立运行的站点，用于跟踪活动、记录会议、提供各种有关企业 Java 的观点。事实上，这里提供的大部分信息也可以在别处找到，不过这一点对于几乎所有开发人员门户（包括上面提到的）都是一样的，想了解 Java 的各种开发的开发人员只需打开该站点上的 &lt;a href="http://www.onjava.com/pub/q/all_onjava_articles" rel="no-follow"&gt;文章列表&lt;/a&gt;，然后逐一阅读。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.artima.com/" rel="no-follow"&gt;Artima&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; Artima 由 Bill Venners 创建，目前已经发展成一个巨大的汇集了文章、博客和访谈的站点，它不是完全侧重于 Java 开发，并且其中还包括了 Java 著作方面的权威（查看 Bill Joy 自 Java 5 出版后，对 Java 语言复杂性的怀疑，以及他用于证明所担心问题的经典示例 &amp;amp;mdash; Enum&amp;lt;&amp;gt;）。该站点非常值得您访问。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意，对于上面大部分站点，为充分利用站点/门户，需要进行某种形式的注册。在撰写本文时，所有文章基本上都是免费的，只需要一个用户名/密码登录，以便 它们能惟一识别访问者，还需要提供电子邮件地址，以便定期发送主题新闻资讯或电子邮件（据我所知，所有站点将允许您不提供电子邮箱，但我还未这样做过，因 为我发现新闻咨询会不时告诉我一些有趣的、我还不知道的信息，收件箱中的这些邮件是很有用的）。&lt;/p&gt;
&lt;p&gt;&lt;a name="N1012D"&gt;博客（Weblog）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Blog 使开发人员可以轻松地表达想法、概念、理念、论点并围绕技术展开思想讨论，并了解特定技术领域中非常有影响力的&amp;ldquo;思想领袖&amp;rdquo;。此外，博客可以通过提要阅读 器在本地使用，提要阅读器将文章/条目下载到本地，以便在脱机时也可以使用。事实上，博客已经变得非常普遍，以至于出现了专门的设备（如 Amazon Kindle）来轻松获取开发人员所需要的信息。&lt;/p&gt;
&lt;p&gt;关键在于从几百万个博客中找到感兴趣的内容。每位开发人员都有他自己的选择，哪些需要阅读，哪些不需要，但有些博客是最基本的，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://feeds.feedburner.com/javaposse" rel="no-follow"&gt;The Java Posse&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.javaspecialists.eu/archive/tjsn.rss" rel="no-follow"&gt;The Java Specialists' Newsletter&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://martinfowler.com/bliki/bliki.rss" rel="no-follow"&gt;Martin Fowler's Bliki&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt;&amp;ldquo;Web 站点&amp;rdquo; 小节列出的 Web 站点所提供的全部 &lt;strong&gt;RSS 提要&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意（大多数）博客内容都属于个人观点；在这里分享的一些观点可能在以后被证明是错误的 &amp;amp;mdash; 永远不要只根据博客条目中的信息来对产品下结论。但如果要使思维过程突破常规，博客将是一种增强技能的强大资源。&lt;/p&gt;
&lt;p&gt;&lt;a name="N10172"&gt;包和/或库&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;跟踪 Java 生态系统中的所有库和包是一项繁杂的工作，并且 Java 开发人员很容易就会忽略这项工作。结果，开发人员常常发现自己正在编写的内容其实已经存在于平台内（只要他们浏览一下就会发现这一点）。&lt;/p&gt;
&lt;p&gt;下面列出了&amp;ldquo;每位 Java 开发人员至少应该知道其存在（最好知道如何使用）的十大 Java 包&amp;rdquo;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/reflect/package-summary.html" rel="no-follow"&gt;java.lang.reflect&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 许多 Java 库和工具都依赖于 Reflection 包，所以了解它成为了一项必要要求（如果在使用时不理解它，会因为安全策略或其他类型的基础设施不匹配问题而导致失败）。与 Reflection 结合使用的还有 &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/Annotation.html" rel="no-follow"&gt;Java 5 注释和 java.lang.annotation &lt;/a&gt;。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/javase/6/docs/api/javax/script/package-summary.html" rel="no-follow"&gt;javax.script&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; Java 系统一直在强调动态语言，了解如何从 Java 代码内部使用脚本语言可以使开发人员扩展他们的系统，而不用经历昂贵的编译-链接-运行-测试环节。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/package-summary.html" rel="no-follow"&gt;javax.management&lt;/a&gt; &lt;/strong&gt; 和 &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/package-summary.html" rel="no-follow"&gt;java.lang.management&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 该管理包也称为 Java 管理扩展（Java Management Extensions，JMX），是一种监视 Java 应用程序运行的强大工具；因此，开发人员应该熟悉和习惯使用 JMX，以便构建实际上可以被系统管理员使用的软件。不要忘记查看随 JDK 一起发布的 jconsole 工具，它演示了一种应用程序健康状况指示板，同时演示了可以构建的内容，它本身就是一个很有用的工具（密切关注构建 jconsole 插件来在 jconsole 内启用脚本支持的脚本 demo，它是任何合格的系统管理员都应该掌握的一个强大工具）。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html" rel="no-follow"&gt;java.util.concurrent.*&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 并发性是开发人员在未来十年内将要面临的最大问题，Java 开发人员用来修复并发性 bug 的主要武器就是此包及其子包中的类（&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/package-summary.html" rel="no-follow"&gt; .atomic &lt;/a&gt; 和 &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/package-summary.html" rel="no-follow"&gt; .locks &lt;/a&gt;）。学习使用它将与学习编写类一样（甚至更）重要。了解它，使用它，并喜欢上它。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/package-summary.html" rel="no-follow"&gt;java.util&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; java.util 中的类同样重要。它们被频繁引用，特别是 Collections 类，所以 java.util.* 应该像 java.lang 那样自动导入。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/package-summary.html" rel="no-follow"&gt;java.beans&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; JavaBeans 无疑是整个 Java 生态系统中都要使用的核心元素之一，使用商业含义不是很明显的名称&amp;ldquo;POJO&amp;rdquo;（普通的旧 Java 对象）。POJO 仍然基于 JavaBeans 代码、API 和规范，因此花一点时间了解 java.beans 中的类可以帮助编写更好的 POJO。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/package-summary.html" rel="no-follow"&gt;java.util.logging&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 诊断和审计日志迅速成为跟踪运行程序执行的强大工具，不管是出于调试目的，还是出于管理和监视目的。我的忠告是：学习使用这个包和其开源的姊妹包 &lt;a href="http://logging.apache.org/log4j/1.2/index.html" rel="no-follow"&gt;log4j&lt;/a&gt;。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/security/package-summary.html" rel="no-follow"&gt;java.security.*&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; Java 安全 API、策略机制和权限类是使 Java 环境成为安全计算平台的核心部分，但只有开发人员知道如何利用这个包。避开加密 API &amp;amp;mdash; 在详细了解每个对您有用的选项后再使用它们。它们不难使用，但要获取加密权限（意味着没有大的缺陷）需要花费几年的时间，有大量来自其他加密专家的相关评 论。首先使用其他机制，如 SSL/TLS 和 GuardedObject/SignedObject/SecureObject 类。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/package-summary.html" rel="no-follow"&gt;javax.xml.parsers.*&lt;/a&gt; &lt;/strong&gt;、&lt;strong&gt; &lt;a href="http://java.sun.com/webservices/docs/1.6/api/javax/xml/bind/package-tree.html" rel="no-follow"&gt;javax.xml.bind&lt;/a&gt; &lt;/strong&gt; 和 &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/transform/package-summary.html" rel="no-follow"&gt;javax.xml.transform.*&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; XML 逐渐出现在 Java 开发人员的视野中，能够解析（直接解析或通过对象-XML 库）和转换它（使用 XSLT）是开发人员必须拥有的一项重要技能。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/package-summary.html" rel="no-follow"&gt;javax.sound.*&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 这不是一项必需的技能，但知道如何偶尔弹出声音效果可以使原本乏味的代码充满生气。此外，在没有直接可用的显示时，还可以用声音来向系统提供信号和反馈。 除此之外，让抛出栈跟踪的机器发出恐怖电影里的尖叫，这样用户可以知道刚刚发生了不好的事情，从而增加了一些刺激的乐趣。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然，还有许多其他（位于 JDK 内部和外部）的包值得学习，但掌握以上这些就足以使您很好地处理大多数项目，更不用说应付大多数工作面试。&lt;/p&gt;
&lt;p&gt;&lt;a name="N1026C"&gt;研讨会&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;研 讨会继续在 Java 开发人员的培训中扮演着主要角色，特别是那些还没有获得足够的认可，尚未成为大型培训公司培训课程的主题。研讨会也是开发人员结识其他具备各种技能和职责 的开发人员的绝好机会，使与会者有机会做一些非常过瘾的（并且是完全必要的）事情：发泄对工作环境的不满。&lt;/p&gt;
&lt;p&gt;参加研讨会也会产生一种有用的副作用（如果积极管理，可以为研讨会锦上添花）：&lt;em&gt;与会者可以建立开发人员小组。&lt;/em&gt;通 过可在世界范围内使用的电子邮件、邮件列表（如 GoogleGroups 或 Yahoo Groups）和许多其他轻量级 groupware 通信工具，了解参加研讨会的人员的信息比以前更加容易。这些通过午餐和晚宴建立起来的友谊可以持续一生，并且随着时间流逝愈加有益，特别是在评估新技术时 更是如此。&lt;/p&gt;
&lt;p&gt;让一位有着 30 年经验的与会者、演讲者、组织者（不是我，是我的一位朋友）的话为您提供指引：&amp;ldquo;技术新手参加研讨会是为了通过期间举办的各种会议获取知识，资深人士参加研讨会是为了宴会和结识朋友。宴会帮助您结识朋友，他们可以帮助您提升自己的职业&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;研讨会包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.nofluffjuststuff.com/" rel="no-follow"&gt;No Fluff, Just Stuff&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 这是一个我特别热衷的研讨会，不仅仅因为我是那里的定期演讲者，而且还因为十大 JavaOne 2007 演讲者中有 7 个人都是 NoFluffJustStuff（目前的或以前的）演讲者。Java 开发人员不会发现比这里更加关注技术主题的讨论，而且也不会找到比它价格更合理、召开位置更便利的会议：您的家乡（北美大陆每年有 30 多场会议 &amp;amp;mdash; 范围跨越欧洲和亚洲，这样，您便有机会驱车去参加 NFJS 大会，而不用花几千美元飞到一个遥远的城市并且住在旅馆中）。同样，本文中推荐的许多书籍都是由出席 NoFluff 研讨会的专家编写的，这一点也就不足为奇了，而且 NFJS 的组织者们一直在不遗余力地查找有关各种 Java 和 Agile Development 主题的&amp;ldquo;重要资源&amp;rdquo;。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://java.sun.com/javaone/sf/index.jsp" rel="no-follow"&gt;JavaOne&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 这是一个规模宏大且非常客观的会议，并且一直在旧金山（在这个地方举行有利也有弊，具体取决于您公司的出差预算情况）举行，不过世界上还没有哪一个会议能像 JavaOne 这样把这么多关键 Java 推动者聚集到一个地方。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://jaoo.dk/" rel="no-follow"&gt;JAOO&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 为了不冷落我们的欧洲 Java 同胞，每年在丹麦奥尔胡斯举行一次 JAOO 会议，该研讨会已经举办了将近二十年，并且没有任何衰落的迹象。JAOO 不仅吸引了一些顶尖的演讲者和作家，而且作为一个跨技术的研讨会，在技术方面具有很好的包容性，也就是说，与会者早上可以出席 Java 研讨会，午餐时与一些 C++ 开发人员交谈，下午了解 Microsoft 的 &amp;amp;reg; Silverlight 的最新发展成果（或任何别的新事物），晚上则与 Smalltalker 喝喝啤酒。如果您想增长见识，JAOO 或它的姊妹会议 &lt;a href="http://qcon.infoq.com/sanfrancisco-2008/conference/" rel="no-follow"&gt;QCon&lt;/a&gt;（在 InfoQ 工作人员的协力支持下召开）将是一个不错的起点。对那些居住在&amp;ldquo;澳大利亚或新西兰&amp;rdquo; 的 Java 同胞，今年（2008）在布里斯班和悉尼首次召开了 JAOO；所有迹象表明，在未来几年来内，将会在这里再次举行 JAOO。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://www.devoxx.com/display/JV08/Home" rel="no-follow"&gt;Devoxx&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; 该研讨会是以前的 JavaPolis，在比利时安特卫普这一飞速发展的城市举行，参加这一研讨会是遇见欧洲同行的绝好途径（而且还可以品尝到上等的比利时啤酒）。演讲者都 是该领域的首席专家，他们将集中讨论一些尖端技术。该研讨会也提供了优秀的平台和许多机会让您与开发人员同行进行交流。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;a href="http://jazoon.com/" rel="no-follow"&gt;Jazoon&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; Jazoon 是一个相对较新的研讨会，2007 年在苏黎世（瑞士）召开。因为参与者名单上有 Martin Odersky（Scala 的创建者）、Neal Gafter 和 Simon Phipps（Sun 的首席开放源码执行官）之类的名字，所以 Jazoon 有望吸引大量演讲者。Jazoon 完全侧重于 Java 主题并在欧洲的中心召开，它有望成为欧洲 Java 同胞们的一项重要日程。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;还有其他一些研讨会，目标受众也各不相同，但以上列举的研讨会是直接针对 Java 开发人员的。那些希望扩大自己视野的开发人员应该考虑参加&amp;ldquo;其他&amp;rdquo; 技术研讨会，如在世界各地举办的各种 Perl、Python、Ruby 甚至 .NET 会议；接受新的观念有时需要研究一组全新的问题。&lt;/p&gt;
&lt;p&gt;&lt;a name="N102DC"&gt;书籍&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;对开发人员而言，没有哪一种资源能比价格便宜的传统书籍更容易获取。只需要去当地的书店（如果您住在边远地区，可通过 Web 浏览器查找 &lt;a href="http://www.amazon.com/" rel="no-follow"&gt;Amazon&lt;/a&gt; 来购买书籍），就可以找到大量珍贵的技术知识和经验&amp;hellip;&amp;hellip;只要您肯在大量资源中仔细寻找。&lt;/p&gt;
&lt;p&gt;这些书籍假设读者已经有了 Java 语言和工具集的应用知识；Java 入门书籍非常普遍，而且大多数讨论的是相同的基本内容。选择书籍需要一定的技巧，要考虑作者的写作风格，有时甚至要考虑随书光盘中是否包含了练习的参考答案（如果包含了练习的话）。&lt;/p&gt;
&lt;p&gt;掌握了基本知识后，考虑阅读以下书籍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Effective Java&lt;/em&gt;（第 2 版）&lt;/strong&gt;，Joshua Bloch&lt;br /&gt; 每位 Java 开发人员的书架上必备的第一本书，必须定期翻阅、随时查看。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Java Concurrency in Practice&lt;/em&gt; &lt;/strong&gt;，Brian Goetz&lt;br /&gt; 每位 Java 开发人员书架上必备的第二本书，因为每位 Java 人员（不管他们愿意与否）都会操纵多线程环境的内部。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Better, Faster, Lighter Java&lt;/em&gt; &lt;/strong&gt;，Justin Gehtland 和 Bruce Tate&lt;br /&gt; 这一小巧的册子被许多 Java 开发人员当作攻下以 Spring 为首的&amp;ldquo;轻量级容器&amp;rdquo; 环境的&amp;ldquo;利器&amp;rdquo;，填补了大多数大型 EJB 服务器（如 WebSphere 或其他事务处理中间件）留下的空白。作者还介绍了基于 POJO 的开发周期，指出了该理念的优点和缺点，以及如何采取更轻量级的方法构建企业应用程序，使用了 Spring 和 Hibernate 这类不会降低生成系统的功能和能力的工具。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Effective Enterprise Java&lt;/em&gt; &lt;/strong&gt;，Ted Neward（我）&lt;br /&gt; 提供 75 种方法来确保企业 Java 应用程序（不管它们是用 Spring、EJB、Web 服务，还是其他技术实现）不会出现问题。就像 &lt;em&gt;Effective        Java&lt;/em&gt; 不是针对初级 Java 程序员一样，&lt;em&gt;Effective        Enterprise Java&lt;/em&gt; 同样也不是针对刚开始学习&amp;ldquo;企业 Java&amp;rdquo; 基础知识的开发人员。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Release It!&lt;/em&gt; &lt;/strong&gt;，Michael Nygard&lt;br /&gt; 任何打算编写针对生产服务器的软件的人都应该阅读本书 &amp;amp;mdash; 它深入探讨了生产环境中可能出现的错误，以及如何处理潜在的故障，要么恢复故障，要么完全避免故障。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Inside the Java 2 Virtual Machine&lt;/em&gt; &lt;/strong&gt;，Bill Venners 或       &lt;strong&gt; &lt;em&gt;Component Development for the Java Platform&lt;/em&gt; &lt;/strong&gt;，Stuart Halloway&lt;br /&gt; Java 开发人员一旦学习 Java 这门语言后，迟早要了解底层平台 &amp;amp;mdash; Java 虚拟机本身，这意味着垃圾收集以及 Reference 对象、ClassLoader、线程和监视器等主题将成为接下来探讨的重点领域。两本书中的任何一本（或两本）都是非常有用的指南。但是这两本书都有一个 很大的缺陷：它们的出版时间比较早。&lt;em&gt;Inside&lt;/em&gt; 是 Java 1.2 期间出版的，此后不久便出版了 &lt;em&gt;Component-Based&lt;/em&gt;。幸运的是，大多数 Java 虚拟机自那时起一直没有发生什么变化，所以如果读者遇到除 JDK 1.2 以外的问题时，可以暂时放下本书并继续研究下一主题。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt;Martin Fowler 撰写的 &lt;strong&gt; &lt;em&gt;Patterns of Enterprise Application Architecture&lt;/em&gt; &lt;/strong&gt;、Gregor Hohpe 和        Bobby Woolf 撰写的 &lt;strong&gt; &lt;em&gt;Enterprise Integration Patterns&lt;/em&gt; &lt;/strong&gt; &lt;br /&gt; 说到设计方法和理念，这两本书都是典范，同样假定大部分读者都阅读过由 Gamma、Helm、Johnson 和 VlissidesBoth 合著的经典书籍 &lt;em&gt;Design Patterns&lt;/em&gt;。模式书籍通常为开发人员提供了一些基本的概念构建块进行调整和组合，从而创建更健壮的设计，这些构建块在单独使用时就不怎么有效。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Java Power Tools&lt;/em&gt; &lt;/strong&gt;，John Smart&lt;br /&gt; 很多人推荐这本书，它详细介绍了 Java 生态系统中各种可用的工具。Smart 还提供了关于本书的培训课程（Java Power Tools Bootcamp），但大多数开发人员获取信息的最简单方式还是通过 dead-tree 版本。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;The Pragmatic Programmer&lt;/em&gt; &lt;/strong&gt;，Andy Hunt 和 Dave Thomas&lt;br /&gt; 每个程序员应该人手一册，不管他实际使用的语言或平台是什么。本书适合有经验的读者和从事多年编程工作的程序员。本书可与 Fred Brooks 的经典著作 &lt;em&gt;The Mythical Man-Month&lt;/em&gt; 媲美。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;The Productive Programmer&lt;/em&gt; &lt;/strong&gt;，Neal Ford&lt;br /&gt; 这本最近出版的书籍与 &lt;em&gt;Pragmatic Programmer&lt;/em&gt; 一样经典，它主要讨论各种技巧和技能，程序员可以借助这些技巧和技能提高他们的效率，获得比 IDE 更高的生产力。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Pragmatic Starter Kit&lt;/strong&gt; &lt;br /&gt; 本套件由 &lt;em&gt;Pragmatic Unit Testing (with JUnit)&lt;/em&gt;、&lt;em&gt;Pragmatic Project Automation&lt;/em&gt; 和 &lt;em&gt;Pragmatic Source Control (with Subversion)&lt;/em&gt; 组成。每本书都清晰、针对性地讨论了各个主题的核心内容，它们直接深入主题，没有涉及其他无关内容。例如，Project Automation 是阅读 &lt;em&gt;Ant in Action&lt;/em&gt; 的&amp;ldquo;开胃书&amp;rdquo;，但同时也讨论了什么是优秀的构建流程以及构建它们的原因。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt; &lt;em&gt;Ant in Action&lt;/em&gt;（第 2 版）&lt;/strong&gt;，Erik Hatcher 和 Steve Loughran&lt;br /&gt; Ant 是面向 Java 平台的优秀构建实用程序（参阅后面的工具内容了解更多详细信息），本书是目前为止介绍强大 Ant 功能的最佳读物。在学习如何使用 Ant 时，&lt;em&gt;Ant in Action&lt;/em&gt; 还演示了单元测试、持续集成和生产部署实践，这一切都是从实际 Java 开发人员的日常实践的角度出发的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name="N103D4"&gt;工具&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;正如盖房子不仅仅是&amp;ldquo;抡起锤子在板上钉钉子&amp;rdquo; 一样，Java 开发也不仅仅是&amp;ldquo;掌握 IDE 并开始编写代码&amp;rdquo;。好的 IDE 当然能为编写 Java 代码出力不少，但其他的工具也可以提供与 IDE 相等的（也许更好的）价值。&lt;/p&gt;
&lt;p&gt;排名不分先后&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;IDE&lt;/strong&gt; &lt;br /&gt; 当然，工具讨论首先从 IDE 开始。在避开商业限制方面，Eclipse 和 NetBeans 都是开源且免费的，因而提供了吸引人的&amp;ldquo;第一步&amp;rdquo;。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;单元测试&lt;/strong&gt; &lt;br /&gt; 掀起单元测试革命的工具是 &lt;a href="http://www.junit.org/" rel="no-follow"&gt;JUnit&lt;/a&gt;，但其他几个工具也得到普及，包括 &lt;a href="http://www.testng.org/" rel="no-follow"&gt;TestNG&lt;/a&gt;，自然还有 &lt;a href="http://clarkware.com/software/JUnitPerf.html" rel="no-follow"&gt;JUnitPerf&lt;/a&gt; 等等。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;持续集成&lt;/strong&gt; &lt;br /&gt; 持续集成服务器不断检查不受源控制的代码，执行构建，对它运行单元测试，并通常通过电子邮件向开发人员报告所有构建故障。有几个开源版本可用，但有一个已经得到了广泛关注，即 Hudson，它是一个拥有大量插件和具有高可扩展性的持续集成服务器，它源自 &lt;a href="http://cruisecontrol.sourceforge.net/" rel="no-follow"&gt;CruiseControl&lt;/a&gt; ，它正是因为这一点而声名斐赫。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;静态分析&lt;/strong&gt; &lt;br /&gt; &lt;a href="http://findbugs.sourceforge.net/" rel="no-follow"&gt;FindBugs&lt;/a&gt; 是一个运行 Java 代码的开放源码静态分析工具，执行 &lt;em&gt;n&lt;/em&gt; 向深度分析来找出所有可能的代码路径，并基于一组可扩展规则报告找到的各种错误和警告。FindBugs 由 William Pugh 开发（这位 William Pugh 还发现了 Java 内存模型中的 bug），其最值得炫耀的地方是它能够分析 Java 代码来查找并发 bug，每位程序员都会为之欢呼。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;网络包跟踪&lt;/strong&gt; &lt;br /&gt; &lt;a href="http://www.wireshark.org/" rel="no-follow"&gt;WireShark&lt;/a&gt; （以前一般称为 Ethereal）使程序员可以查看网络上传播的内容，让他们有机会检查正在网络上传播的内容是否合适，而那些&lt;em&gt;不&lt;/em&gt; 合适的内容（比如敏感信息和明文密码）没有出现在网路上。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;虚拟化&lt;/strong&gt; &lt;br /&gt; 类似 VMWare、Xen、VirtualBox 或 VirtualPC 之类的虚拟化工具（或者更准确地称之为平台）使程序员能够创建与生产机器将运行的环境相同的环境，而不失去主机 PC 环境的生产力。它还提供了一种便利方法来在本地尝试&amp;ldquo;处于试验阶段的&amp;rdquo; 软件，而不必让处于生产状态的机器冒险。如果不是完全的开源项目，大多数虚拟化工具都提供有某种免费选项。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您不必感到惊讶，这些工具中的其中一些是商业工具；如果一个工具一个星期平均能帮您节约一个小时的时间，您需要多长时间就可以收回购买该工具的资金呢？如 果管理人员不认同这个观点的话，那么仔细计算使用某一工具节省的时间（假设是开发人员的时间，或者是产品诊断或执行时间）后，管理员终会发现，他们在这些 工具上的吝啬是一件得不偿失的愚蠢事。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" height="1" width="10" /&gt;&lt;/td&gt;
&lt;td&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a name="N1044C"&gt;&lt;strong&gt;向贡献者致谢&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt; 感谢所有访问我的博客（blogs.tedneward.com）的读者，他们从百忙中抽出时间来向我推荐应该包含在此列表中的参考资源；他们（当然不是 所有人）包括 Greg Ostrovich、Ryan Slobojan、Hamlet D'Arcy（他认为自己是个外星人，正在为 IT 打工来赚钱修复他的宇宙飞船，从而返回自己的星球）、Pierre Marc-Larocque、Prashant Rane、Marc Stock、Eric Kerwin、Morten Anderson、Alex，以及 Yvonne Miller、Rahul Raj、Brian Sletten 和 Neal Ford。&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;a name="N10452"&gt;未来趋势展望&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当 然，Java 开发人员花所有时间来学习当前的技术并不是一件好事，学习完后，新的技术又接踵而至，使学过的所有内容一下子都变得过时了。随时关注&amp;ldquo;未来发展趋势&amp;rdquo; 同样重要，惟有这样，当公司 CTO 突然在电梯里问您&amp;ldquo;我最近听到的函数式语言是怎么一回事，我们需要对此进行研究吗？&amp;rdquo; 时，您才会给出连贯合理的答复。&lt;/p&gt;
&lt;p&gt;排名不分先后，一些围绕 Java 平台的&amp;ldquo;未来趋势&amp;rdquo; 包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;动态语言&lt;/strong&gt; &lt;br /&gt; Groovy 和 JRuby 之类的语言衍生出了其他一些值得研究的项目，如 Clojure 和 Fan，试验表明，低强度类型的环境能提供更好的生产力和更多的选项。这并非鼓励您放弃 Java 语言，不过，最好的效果总是来自强强联合。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;函数式语言&lt;/strong&gt; &lt;br /&gt; 其兴起源于 Scala，由于函数语言一般支持复合函数并缺少共享状态，因此提供了隐式并发性的优点（尽管有时它的语法很难让人接受）。Jaskell 是一个 Haskell-on-JVM 实现，同样，Clojure 也适合在这里使用，您可以想象生产环境中的软件事务内存是什么样子。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Java 中的闭包&lt;/strong&gt; &lt;br /&gt; 添加闭包支持（也称为 lambda 或匿名方法）将简化部分 Java 编码工作，对是否在 Java 7 发行版中包含此支持进行过热烈的讨论。社区对此问题的讨论深度不一，因此 Java 程序员有必要花点时间研究这个问题，并看看讨论的所有内容。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;DaVinci 机器&lt;/strong&gt; &lt;br /&gt; JVM 的一个新版本对其他语言（比如上面提到的动态语言和函数式语言）更友好，这最终可能会也可能不会使它进入主流 JVM 发行版。随时关注这一点有助于理解在当前 JVM 上运行动态/脚本语言的利弊。&lt;br /&gt; &lt;br /&gt; &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;用户界面开发&lt;/strong&gt; &lt;br /&gt; 在 Flash/Flex、Silverlight 和 JavaFX 的支持下，Web 浏览器得到了显著的（并且几乎是惊人的）改变。这还不考虑 Java 领域中的新服务器端 Web 框架和 Google Web 工具包（Google Web Toolkit，GWT）之类的特例。用户界面一直是、而且以后将继续是一个吸引人的亮点。了解一到两个（更不必说 Swing 或 SWT 之类的&amp;ldquo;富客户端&amp;rdquo; 库）库将对构建比 HTML 页面更具交互性的内容大有裨益。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;记住，与任何和&amp;ldquo;未来&amp;rdquo; 相关的事物一样，现在讨论的内容可能最终证明是错误的方向、昙花一现的事物、对行业的一种影响，也可能是下一个重大事件；保持开放的思维，同时也要保持适当的怀疑。&lt;/p&gt;
&lt;p&gt;&lt;a name="N1049D"&gt;结束语&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;请随意补充此列表 &amp;amp;mdash; 最终会得到一份更完善的参考资源列表。因为 Java 世界在不断发展，不断变化和成长，所以列表的内容会随时间而改变。这是一件好事；如果我们必须使用 1995 年时期的 Java 环境，我们早就转向其他技术了。&lt;/p&gt;
&lt;p&gt;积极参与到 Java 世界中来：贡献补丁、增强，如果没有合适的贡献，就构建自己的工具。也许您的项目 5 年以内会一直出现在这个列表中。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="resources"&gt;参考资料 &lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;您可以参阅本文在 developerWorks 全球网站上的 &lt;a href="http://www.ibm.com/developerworks/java/library/j-javaresources.html" rel="no-follow" target="_blank"&gt;英文原文&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.ibm.com/developerworks/cn/java/" rel="no-follow"&gt;developerWorks Java 技术专区&lt;/a&gt;：这里有数百篇有关 Java 编程的各个方面的文章。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.ibm.com/developerworks/blogs/" rel="no-follow"&gt;developerWorks blogs&lt;/a&gt;：加入 &lt;a href="http://www.ibm.com/developerworks/community/" rel="no-follow"&gt;developerWorks 社区&lt;/a&gt;。 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="author"&gt;关于作者&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" height="5" width="100%" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;img src="http://www.ibm.com/developerworks/i/p-tneward.jpg" alt="Ted Neward 的照片" /&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" height="5" width="4" /&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Ted Neward 是 ThoughtWorks 的一名顾问，ThoughtWorks 是一家在全球提供咨询服务的公司，他还是 Neward &amp;amp; Associates 的主管，负责有关 Java、.NET 和 XML 服务和其他平台的咨询、指导、培训和推介。他现在居住在华盛顿西雅图附近。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;</description><author>No.0023</author><category>Java</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/9403</guid><pubDate>Fri, 06 Mar 2009 13:05:27 GMT</pubDate></item><item><title>OpenBSD 4.5 Pre-Orders Online</title><link>http://n23.appspot.com/blog/post/9402</link><description>



&lt;p&gt;&lt;a href="http://openbsd.org/images/openbsd45_cover.gif" rel="no-follow" target="_blank"&gt; &lt;img src="http://openbsd.org/images/cd45-s.gif" width="90" alt="OpenBSD 4.5 cover" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pre-orders are &lt;a href="https://https.openbsd.org/cgi-bin/order?CD45=1&amp;amp;CD45+=Add" target="_blank"&gt;now being accepted&lt;/a&gt; for &lt;a href="http://www.openbsd.org/45.html" rel="no-follow" target="_blank"&gt;OpenBSD 4.5&lt;/a&gt;, scheduled for release on May 1st, 2009.&lt;/p&gt;
&lt;p&gt;The developers bring us an amazing amount of cool new stuff (&lt;a href="http://undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;sid=20081029164221" target="_blank"&gt;Accelerated video drivers&lt;/a&gt;, &lt;a href="http://undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;sid=20090223231214" target="_blank"&gt;OpenSSH 5.2&lt;/a&gt;, &lt;a href="http://undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;sid=20090201164147" target="_blank"&gt;LDoms Virtualization&lt;/a&gt;, &lt;a href="http://undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;sid=20080909151202" target="_blank"&gt;pflow(4) NetFlow export interface&lt;/a&gt;, &lt;a href="http://www.undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;sid=20081120152718" target="_blank"&gt;aucat(8) audio server capability&lt;/a&gt; and &lt;a href="http://www.openbsd.org/45.html" rel="no-follow#new" target="_blank"&gt;lots more&lt;/a&gt;).  There are over 5500 ports and packages for easy installation.&lt;/p&gt;
&lt;p&gt;Of course, &lt;a href="http://www.openbsd.org/tshirts.html" rel="no-follow#31" target="_blank"&gt;t-shirts&lt;/a&gt; and &lt;a href="http://www.openbsd.org/images/poster21.jpg" rel="no-follow" target="_blank"&gt;posters&lt;/a&gt; are available too. Order your set NOW! (&lt;a href="https://https.openbsd.org/cgi-bin/order?CD45=1&amp;amp;CD45+=Add" target="_blank"&gt;International&lt;/a&gt;, &lt;a href="https://https.openbsd.org/cgi-bin/order.eu?CD45=1&amp;amp;CD45+=Add" target="_blank"&gt;Europe&lt;/a&gt;)&lt;/p&gt;



</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/9402</guid><pubDate>Fri, 06 Mar 2009 07:37:22 GMT</pubDate></item><item><title>跟香港政府学做预算</title><link>http://n23.appspot.com/blog/post/10401</link><description>&lt;p&gt;&lt;a href="http://www.budget.gov.hk/" rel="no-follow" target="_blank"&gt;&lt;img src="http://4.bp.blogspot.com/_mtzwAwypays/Sa6UsTBOJfI/AAAAAAAAAcw/4j80sNQlQJY/s400/hkbudget.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;日前，香港政府财政司司长 曾俊华 在立法会宣读了《&lt;a href="http://www.budget.gov.hk/" rel="no-follow" target="_blank"&gt;2009 至 2010 年度政府财政预算案&lt;/a&gt;》。虽然这几天香港诸媒体对于该预算案各有褒贬，但是在我们内地民众看来，该预算案的制作技术、展现方式以及所体现的诚意，令人叹为观止。&lt;br /&gt;&lt;br /&gt;香港政府财政司为了让公众方便地获取预算案相关信息，颇动了一番脑筋，费了一番折腾。繁、英、简三种文字的网站 &lt;a href="http://www.budget.gov.hk/" rel="no-follow" target="_blank"&gt;http://www.budget.gov.hk/&lt;/a&gt; 专为公布预算而设。该网站中详细罗列了预算案演辞、预算案重点、预算案全文、网上广播、新闻稿、图片集等多种格式的文件，任何人都可以从该网站上自由下载，全方位地了解预算案相关的各项细节。为了让青少年市民充分理解预算案内容，财政司还特意制作了图文并茂的漫画版：&lt;br /&gt; &lt;a href="http://www.slideshare.net/hutuworm/20092010-1100259?type=document" rel="no-follow" target="_blank"&gt;香港政府2009至2010年度财政预算案漫画版&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;除了表现形式、技术手段之外，政府各部门预算编制之详尽，也是很让人叹服的。以&lt;a href="http://www.budget.gov.hk/2009/chi/pdf/chead078.pdf" rel="no-follow" target="_blank"&gt;知识产权署预算&lt;/a&gt;为 例，其中的《管制人员报告》部分列出了各纲领下 2007 年财政拨款实际使用情况、2008 年预算修订情况，以及 2009 年预算。还在各项纲领预算后面详细交代该纲领各项宗旨，以及各项指标在 2007 年、2008 年的实际发生数字和 2009 年预算数字。各纲领末尾附有&amp;ldquo;2009 至 2010 年度需要特别留意的事项&amp;rdquo;，罗列了除上述指标之外与该纲领有关的工作事项。接下来是该署的三年财政拨款与人手编制分析图表。最后是三年财务（含 2009 年预算）账目及按分目列出的开支详情。通过这样一份内容丰富、数据翔实的预算案，民众就可以充分了解所纳税款究竟用在了哪里，为什么要这样用。&lt;br /&gt;&lt;br /&gt;无论如何，香港政府在预算编制和公开方面的专业精神令人钦佩，值得学习。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://feedproxy.google.com/~r/hutuworm/~3/1fL-2gNOBkk/blog-post.html&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/10401</guid><pubDate>Thu, 05 Mar 2009 13:46:10 GMT</pubDate></item><item><title>sap rfc with python</title><link>http://n23.appspot.com/blog/post/9401</link><description>&lt;p&gt;1. download rfcsdk on sap.com, download saprfc for python on http://pypi.python.org/pypi/saprfc/0.07&lt;/p&gt;
&lt;p&gt;2. install rfcsdk and saprfc with docs&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#! /usr/bin/env python&lt;br /&gt;&lt;br /&gt;import pprint&lt;br /&gt;import saprfc&lt;br /&gt;&lt;br /&gt;conn = saprfc.conn(ashost='hostname', sysnr='00', client='220', lang='EN', user='xxxxx', passwd='xxxxx')&lt;br /&gt;conn.connect()&lt;br /&gt;&lt;br /&gt;print &amp;quot;am I connected: &amp;quot;, conn.is_connected()&lt;br /&gt;print &amp;quot;sysinfo is: &amp;quot;&lt;br /&gt;pprint.pprint(conn.sapinfo())&lt;br /&gt;&lt;br /&gt;iface = conn.discover(&amp;quot;RFC_READ_TABLE&amp;quot;)&lt;br /&gt;iface.query_table.setValue(&amp;quot;TRDIR&amp;quot;)&lt;br /&gt;iface.ROWCOUNT.setValue(10)&lt;br /&gt;iface.OPTIONS.setValue([&amp;quot;NAME LIKE 'SAPL%RFC%'&amp;quot;])&lt;br /&gt;&lt;br /&gt;conn.callrfc(iface)&lt;br /&gt;&lt;br /&gt;print &amp;quot;NO. PROGS: &amp;quot;, iface.DATA.rowCount()&lt;br /&gt;#print &amp;quot;PROGS DATA: &amp;quot;&lt;br /&gt;#pprint.pprint(iface.DATA.value)&lt;br /&gt;&lt;br /&gt;# get the SAP Data Dictionary structure for TRDIR&lt;br /&gt;str = conn.structure(&amp;quot;TRDIR&amp;quot;)&lt;br /&gt;&lt;br /&gt;# various ways for iterating over the results in an&lt;br /&gt;#&amp;nbsp; interface table&lt;br /&gt;for x in iface.data.value:&lt;br /&gt;&amp;nbsp; print &amp;quot;Doing: &amp;quot; + str.toHash(x)['NAME']&lt;br /&gt;&lt;br /&gt;#print &amp;quot;PROGS HASH ROWS: &amp;quot;&lt;br /&gt;#for i in iface.DATA.hashRows():&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;next row: &amp;quot;, i&lt;br /&gt;&lt;br /&gt;conn.close()&lt;/p&gt;</description><author>No.0023</author><category>Python</category><category>SAP</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/9401</guid><pubDate>Thu, 05 Mar 2009 02:10:42 GMT</pubDate></item><item><title>install Python 3.0 on AIX</title><link>http://n23.appspot.com/blog/post/8401</link><description>&lt;p&gt;shell:~/python-3.0.1/bin &amp;gt;: python3.0&lt;br /&gt;Python 3.0.1 (r301:69556, Feb 27 2009, 21:48:14) &lt;br /&gt;[GCC 4.0.0] on aix5&lt;br /&gt;Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; &lt;br /&gt;shell:~/python-3.0.1/bin &amp;gt;: &lt;br /&gt;&lt;br /&gt;how to install:&lt;br /&gt;shell:~/tmp/Python-3.0.1 &amp;gt;: configure --prefix=$u/python-3.0.1 --with-gcc&lt;br /&gt;shell:~/tmp/Python-3.0.1 &amp;gt;: make&lt;br /&gt;shell:~/tmp/Python-3.0.1 &amp;gt;: make install&lt;/p&gt;</description><author>No.0023</author><category>Python</category><category>AIX</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/8401</guid><pubDate>Fri, 27 Feb 2009 14:04:56 GMT</pubDate></item><item><title>50个实用的JavaScript工具 </title><link>http://n23.appspot.com/blog/post/7402</link><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;JavaScript是一个功能强大的客户端脚本语言，许多现代化的网站和Web应用程序都会使用到它。JavaScript可以增强用户的体验，并提供丰富的互动式组件和功能。虽然它的语法相当简单，但是对开发者来说还是很有难度的，因为它要运行在Web浏览器中。&lt;/p&gt;
&lt;p&gt;以下是我们为你推荐的50个相关工具:&lt;/p&gt;
&lt;h3&gt;JavaScript/AJAX编辑工具&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ui.jquery.com/themeroller/" rel="no-follow" target="_blank"&gt;jQuery UI&lt;/a&gt;&lt;br /&gt; jQuery UI是jquery官方推出的配合jquery使用的用户界面组件集合！包含了许多的界面操作功能，如我们常用的表格排序，拖拽，TAB选项卡，滚动条，相册浏览，日历控件，对话框等JS插件&amp;hellip;
&lt;p&gt;&lt;a href="http://ui.jquery.com/themeroller/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77058/3866be7f-d8cf-3902-bed8-40d57c2a6ba6.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/overview.html" rel="no-follow" target="_blank"&gt;Google Web Toolkit&lt;/a&gt;&lt;br /&gt; Google 推出的一个开发Ajax 应用的框架，它支持用Java 开发和调试Ajax 应用。我们可以既充分利用Java语言的开发优势降低Ajax应用开发的难度，加快Ajax应用的开发速度，为Ajax的大规模应用创造可能，又可以充分 发挥Ajax技术的优势，创建更加动态和交互性更好的Web应用程序，提升用户的浏览体验。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jxlib.org/" rel="no-follow" target="_blank"&gt;Jx&lt;/a&gt;&lt;br /&gt; 是一个JavaScript库，用于创建MooTools框架顶部的图形用户界面，有许多例子以及API文档在这里 http://jxlib.org/。
&lt;p&gt;&lt;a href="http://jxlib.org/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77060/b31320ea-771d-3764-a31d-8e8f1c26d040.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.thefrontside.net/freestyle" rel="no-follow" target="_blank"&gt;Freestyle Webtop Toolkit&lt;/a&gt;&lt;br /&gt;可以帮你减少复杂性和时间的消耗，让你专注于编程逻辑和用户界面设计或其他的处理（跨浏览器的兼容和DHTML和Ajax的开发）。
&lt;p&gt;&lt;a href="http://www.thefrontside.net/freestyle" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77062/37f2bbf4-79bf-30a8-ab10-b2694bdcb8f6.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://projects.nikhilk.net/ScriptSharp" rel="no-follow" target="_blank"&gt;Script#&lt;/a&gt;&lt;br /&gt;是一个Ajax和JavaScript编辑工具，可以让开发者用C#进行编写。还允许.NET开发人员充分的发挥已学的知识，同时还为.NET框架提供强大的工具。
&lt;p&gt;&lt;a href="http://projects.nikhilk.net/ScriptSharp" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77064/2c344656-b088-39bb-915a-f534eb11f406.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.aptana.com/jaxer/" rel="no-follow" target="_blank"&gt;Aptana Jaxer&lt;/a&gt;&lt;br /&gt;号称世界上第一个真正的Ajax服务器，由Aptana提供的一个最新产品。它使用Jaxer的服务端Java脚本API操作对象和数据库，支持FTP、SMTP、HTTP等常用协议。Jaxer集成了许多非常流行的JavaScript库，如 jQuery, &lt;a href="http://www.dojotoolkit.org/" rel="no-follow" target="_blank"&gt;Dojo&lt;/a&gt; 和 &lt;a href="http://extjs.com/" rel="no-follow" target="_blank"&gt;Ext  JS&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jslab.dk/tools.regex.php" rel="no-follow" target="_blank"&gt;JS Regex Generator&lt;/a&gt;&lt;br /&gt; JS Regex Generator可以帮助JavaScript开发人员编写与字符串文字想匹配的正则表达式。经常用来检验文本的格式，如输入的日期或电子邮件格式是否正确。
&lt;p&gt;&lt;a href="http://www.jslab.dk/tools.regex.php" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77066/f37a3db4-8e29-3e5c-b2d3-8f0b389896bc.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wavemaker.com/" rel="no-follow" target="_blank"&gt;WaveMaker&lt;/a&gt;&lt;br /&gt;WaveMaker是一个Web应用程序WYSIWYG构建工具。它能够创建基于Dojo Ajax widget，Spring与Hibernate的应用程序。这里有 &lt;a href="http://www.wavemaker.com/product/demos.html" rel="no-follow" target="_blank"&gt;Demo Applications&lt;/a&gt; 。
&lt;p&gt;&lt;a href="http://www.wavemaker.com/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77068/8f3bec1c-eeb3-39d2-8c57-d7f957386fd6.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;文档工具&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/jsdoc-toolkit/" rel="no-follow" target="_blank"&gt;JSDoc Toolkit&lt;/a&gt;&lt;br /&gt; 是一个把js描述格式化成文档的工具。开发者只需按JsDoc的规范写好注释就可以很方便导出文档。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jgrouse.com/" rel="no-follow#jgdoc" target="_blank"&gt;jGrouseDoc&lt;/a&gt;&lt;br /&gt; 是一个开源项目，它可以将开发者的code comments使用类似于Javadoc的格式进行管理。
&lt;p&gt;&lt;a href="http://jgrouse.com/" rel="no-follow#jgdoc" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77070/11284329-50b1-32cf-921f-f287a51ed78d.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;JavaScript调试工具&lt;br /&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://getfirebug.com/" rel="no-follow" target="_blank"&gt;Firebug&lt;/a&gt;&lt;br /&gt; 它集HTML查看和编辑、Javascript控制台、网络状况监视器于一体，是开发JavaScript、CSS、HTML和Ajax的得力助手。 Firebug如同一把精巧的瑞士军刀，从各个不同的角度剖析Web页面内部的细节层面，给Web开发者带来很大的便利。另外有一个Firebug lite版本，可以通过javascript调用，包含在页面中，从而在其他非Firefox浏览器中使用。
&lt;p&gt;&lt;a href="http://getfirebug.com/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77074/b86ae556-02fd-3f78-858b-3f8595baaa84.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mozilla.org/projects/venkman/" rel="no-follow" target="_blank"&gt;Venkman  JavaScript Debugger&lt;/a&gt;&lt;br /&gt; 基于Mozilla的浏览器（如firefox）的一个功能强大的JavaScript调试环境。提供了一系列有用的功能和选项，如代码分析或检查脚本的性能。
&lt;p&gt;&lt;a href="http://www.mozilla.org/projects/venkman/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77072/c2dc9d9f-ba96-3d29-bb7b-7b8e2261d213.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://webkit.org/blog/61/introducing-drosera/" rel="no-follow" target="_blank"&gt;Drosera&lt;/a&gt;&lt;br /&gt; 为Safari准备的一个很好的调试工具。
&lt;p&gt;&lt;a href="http://webkit.org/blog/61/introducing-drosera/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77076/89d47cca-66c2-3b41-9323-129690b09aa3.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.opera.com/dragonfly/" rel="no-follow" target="_blank"&gt;Opera Dragonfly&lt;/a&gt;&lt;br /&gt;Opera Dragonfly其实就是类似Firebug那样的网站/网路应用程式开发工具，可以调试JavaScript、检查CSS和DOM、查看错误，是网站开发人员的好工具，支持PC和移动电话。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nitobibug.com/" rel="no-follow" target="_blank"&gt;NitobiBug&lt;/a&gt;&lt;br /&gt; 这是一个基于浏览器的JavaScript对象记录和检查工具-类似的Firebug。可运行在不同的浏览器（的IE6 + ， Safari浏览器，opera，火狐）提供一致的和强大的工具，丰富了Ajax应用程序。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.debugbar.com/" rel="no-follow" target="_blank"&gt;DebugBar&lt;/a&gt;&lt;br /&gt; 是一款Internet Explorer插件。它可以用于检查DOM，HTTP，Javascript及HTML代码合法性等 ...
&lt;p&gt;&lt;a href="http://www.debugbar.com/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77078/4b8ee0ba-fff6-3b9a-bc46-c7f143639552.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;amp" rel="no-follow;amp;amp;displaylang=en" target="_blank"&gt;Internet  Explorer Developer Toolbar&lt;/a&gt;&lt;br /&gt; 同样也是类似于Firebug，由微软发布。该产品让开发人员能够深入探索和理解Web页面,帮助开发者更好地创建Web应用。&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;JavaScript的测试和验证工具&lt;br /&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://javascriptmvc.com/learningcenter/test/index.html" rel="no-follow" target="_blank"&gt;Test -  JavaScriptMVC&lt;/a&gt;&lt;br /&gt; 一个JavaScriptMVC组件，可以轻松的为JavaScript代码创建自动化单元测试。它可以让你有效的测试DOM时间（如表单提交），从而减少开发时间。
&lt;p&gt;&lt;a href="http://javascriptmvc.com/learningcenter/test/index.html" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77080/5f751a7f-27b9-368b-9a28-d2b0617a6d55.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jsunit.net/" rel="no-follow" target="_blank"&gt;JsUnit&lt;/a&gt;&lt;br /&gt;是一个流行的JavaScript单元测试框架，还有一个类似的支持Java的单元测试框架被称为JUnit。允许你编写测试案例并提供工具来自动执行代码。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jslint.com/" rel="no-follow" target="_blank"&gt;JSLint&lt;/a&gt;&lt;br /&gt; 是一个JavaScript验证工具，可以扫描JavaScript源代码来查找问题。一旦发现问题，JSLint就会显示描述这个问题的消息，并指出错误在源代码中的大致位置。&lt;br /&gt;
&lt;p&gt;&lt;a href="http://jslint.com/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77082/91eaf378-2bf8-3385-bbad-188b1a472149.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.thefrontside.net/crosscheck" rel="no-follow" target="_blank"&gt;Crosscheck&lt;/a&gt;&lt;br /&gt;是一个开源的JavaScript测试框架，不在Web浏览器中也可以进行测试。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/yuitest/" rel="no-follow#start" target="_blank"&gt;YUI  Test&lt;/a&gt;&lt;br /&gt;它 是由Yahoo! UI Library开发的一个JavaScriptMVC测试插件，能够让你模范大部分DOM动作，比如写，拖拽，比如模范AJAX响应，并且能够使用断言 (assertions)。它能够象函数一样运行，并且能够在不同的console窗口进行集成测试。&lt;br /&gt;
&lt;p&gt;&lt;a href="http://developer.yahoo.com/yui/yuitest/" rel="no-follow#start" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77084/a07c4812-a8da-31fb-bea9-679c7dbae234.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j3unit.sourceforge.net/" rel="no-follow" target="_blank"&gt;J3Unit&lt;/a&gt;&lt;br /&gt;是 JavaScript单元测试领域的新兵。这一特别的库所提供的超越于JSUnit的功能在于，它能直接与服务器端的测试套件(如 JUnit或Jetty)溶合。对JavaScript开发者来说，这可能是极其有用的，因为他们能够同时为他们的客户端和服务器端代码快速地遍历所有的 测试用例。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://erik.eae.net/playground/regexp/regexp.html" rel="no-follow" target="_blank"&gt;Regular  Expression Tool&lt;/a&gt;&lt;br /&gt; Regular Expression Tool是一个在线工具，可以用来测试你的正则表达式，使用这个工具很方便。
&lt;p&gt;&lt;a href="http://erik.eae.net/playground/regexp/regexp.html" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77086/0f30ef54-4013-3df3-b478-f72827b6ecce.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/scripting/regex2.aspx" rel="no-follow" target="_blank"&gt;JavaScript  Regular Expression Tester&lt;/a&gt;&lt;br /&gt; 另一个脱离Web浏览器的正则表达式测试工具。
&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/scripting/regex2.aspx" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77088/e9e46aa3-d3ca-383a-a552-84b2edff7a68.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://broofa.com/Tools/JSLitmus/" rel="no-follow" target="_blank"&gt;JSLitmus&lt;/a&gt;&lt;br /&gt; JSLitmus是一个轻量级的工具，用于javascript的性能测试
&lt;p&gt;&lt;a href="http://broofa.com/Tools/JSLitmus/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77110/30577b16-3be0-3a51-95d8-f79a81ddeb11.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;安全工具&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.gnucitizen.org/blog/attackapi/" rel="no-follow" target="_blank"&gt;AttackAPI&lt;/a&gt;&lt;br /&gt; AttackAPI是一个基于Web的攻击构造库，它可以结合PHP、JavaScript及其他客户端和服务器端技术进行使用。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/jsfuzzer/" rel="no-follow" target="_blank"&gt;jsfuzzer&lt;/a&gt;&lt;br /&gt; 它是一个fuzzing工具，帮助你使用JavaScript编写/测试attack vectors。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;新的替代JavaScript和Ajax的开发框架&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://clean-ajax.sourceforge.net/" rel="no-follow" target="_blank"&gt;Clean AJAX&lt;/a&gt;&lt;br /&gt; Clean一个开源的Ajax引擎，一组简化AJAX开发的高级接口。此处Clean还集成两个开源项目Google AJAXSLT：为Clean添加XSLT支持。Paul Johnstone(JavaScript实现MD5与SHA1算法的开源项目)：为Clean添加对安全AJAX请求的支持。
&lt;p&gt;&lt;a href="http://clean-ajax.sourceforge.net/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77090/10b99ace-6d1f-3000-baf6-a8e7c01955f5.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.modernmethod.com/sajax/index.phtml" rel="no-follow" target="_blank"&gt;SAJAX&lt;/a&gt;&lt;br /&gt; 是一款被封装的ajax工具，非常方便与后台的交互，对XMLHttpRequest对象进行了封装，可以实现对服务器的异步请求，简化操作。&lt;br /&gt;
&lt;p&gt;&lt;a href="http://www.modernmethod.com/sajax/index.phtml" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77091/7e43ecbd-0bd6-3742-afc4-3106d6658742.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://javascriptmvc.com/" rel="no-follow" target="_blank"&gt;JavaScriptMVC&lt;/a&gt;&lt;br /&gt;JavaScriptMVC 是一个功能强大的 JavaScript framework. 也是一个很棒的JavaScript测试框架，它同样能提高开发的速度。JavaScriptMVC应用了模型-视图-控制器架构模式，把业务逻辑和表示 分离，使得代码更加模块化。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qooxdoo.org/" rel="no-follow" target="_blank"&gt;qooxdoo&lt;/a&gt;&lt;br /&gt; 是一个功能强大基于JavaScript GUI工包，它让你可以用JavaScript来开发类似于VB/Delphi风格的具有Ajax功能的web2.0应用程序。qooxdoo具有客户端 浏览器检测功能，具有浏览器抽象层，可以无差别的创建跨浏览器的Web应用程序，它提供方便的调试接口，具有事件管理、聚焦管理、定时器、边框和对象属性 等特征。它提供一组窗体组件并扩展了布局，它还提供跨平台的png图形透明支持功能。此外，qooxdoo提供一个原子组件，你可以在其基础上开发你自己 的组件。
&lt;p&gt;&lt;a href="http://qooxdoo.org/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77094/778680ba-94d2-3ee7-ad99-e6a658499c90.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://simplejs.bleebot.com/" rel="no-follow" target="_blank"&gt;SimpleJS&lt;/a&gt;&lt;br /&gt; SimpleJS是一个简单，轻量的，但很特别的JavaScript框架。它提供了Ajax函数和动态效果。&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;图像处理&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://cow.neondragon.net/stuff/reflection/" rel="no-follow" target="_blank"&gt;Reflection.js&lt;/a&gt;&lt;br /&gt; 是一个能够给图片加倒影效果的JavaScript库。&lt;br /&gt;
&lt;p&gt;&lt;a href="http://cow.neondragon.net/stuff/reflection/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77096/cbe9c260-0d85-3106-9f44-e9d562016aa9.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://typeface.neocracy.org/" rel="no-follow" target="_blank"&gt;typeface.js&lt;/a&gt;&lt;br /&gt; 提供了一个字体的解决方案，你能使用任何字体显示，不管客户端是否安装了这种字体，即使不使用Flash（sIFR使用Flash）。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.liquidx.net/canvasgraphjs/" rel="no-follow" target="_blank"&gt;CanvasGraph.js&lt;/a&gt;&lt;br /&gt; 它是一个简单的JavaScript库，让你使用HTML的canvas元素创造bar，line和pie。
&lt;p&gt;&lt;a href="http://www.liquidx.net/canvasgraphjs/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77097/0283f871-7b40-3a22-9075-a7634091ec6c.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/flot/" rel="no-follow" target="_blank"&gt;flot&lt;/a&gt;&lt;br /&gt; Flot是Ole Laursen开发的基于JQuery的纯JavaScript实现的绘图库，Flot使用起来非常简单，绘图效果相当绚丽，而且还支持一些图片的操作功能。
&lt;p&gt;&lt;a href="http://code.google.com/p/flot/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77100/0f114d5d-7d04-3b0f-9c61-cddad0caa126.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lutanho.net/diagram/" rel="no-follow" target="_blank"&gt;JavaScript Diagram Builder&lt;/a&gt;&lt;br /&gt; 是一个跨浏览器的javascript库，他可以帮助你创建坐标图或图表的，你只需要引用diagram.js在你的html头即可。
&lt;p&gt;&lt;a href="http://www.lutanho.net/diagram/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77102/f21d36a9-6346-3c48-8ef2-67f249cc3dd7.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dojotoolkit.org/2006/11/08/dojo-charting-engine-courtesy-greenplum-and-sitepen" rel="no-follow" target="_blank"&gt;The Dojo Charting Engine&lt;/a&gt;&lt;br /&gt; 创建数据的可视化组件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;实用的工具和JavaScript脚本&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ejohn.org/blog/processingjs/" rel="no-follow" target="_blank"&gt;Processing.js&lt;/a&gt;&lt;br /&gt; Processing可视化语言移植至Javascript，这是Javascript成为Flash竞争对手的第一步。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxlibs/" rel="no-follow" target="_blank"&gt;AJAX  Libraries API&lt;/a&gt;&lt;br /&gt;Google 把一些非常流行的JavaScript 框架放到Google 的服务器上。这样大家来说可以充分利用Google 的服务器资源。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://damnit.jupiterit.com/" rel="no-follow" target="_blank"&gt;DamnIT&lt;/a&gt;&lt;br /&gt; DamnIT是一个错误报告服务，它可以帮你追踪错误以及您Web应用程序的不足。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/ie7-js/" rel="no-follow" target="_blank"&gt;ie7-js&lt;/a&gt;&lt;br /&gt; 是一个JavaScript库，解决IE与W3C标准的冲突的JS库。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.appelsiini.net/projects/lazyload" rel="no-follow" target="_blank"&gt;Lazy  loader&lt;/a&gt;&lt;br /&gt; 是用javascript写的jquery插件，它可以延迟加载页面里面的图片。在用户浏览视界(页面中可见部分)以外的图片之前，它将不会被加载。&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;JavaScript代码优化和简化工具&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://fmarcia.info/jsmin/test.html" rel="no-follow" target="_blank"&gt;JS Minifier&lt;/a&gt;&lt;br /&gt; 一个基于Web的小工具，用来缩小你的JavaScript代码。
&lt;p&gt;&lt;a href="http://fmarcia.info/jsmin/test.html" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77104/0b67ed77-ed0f-33de-9ba9-3e96e64c643a.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crockford.com/javascript/jsmin.html" rel="no-follow" target="_blank"&gt;JSMIN&lt;/a&gt;&lt;br /&gt; JSMin 是一个javascript脚本压缩工具，首先去除脚本中不必要的注释以及空白字符，通常可以将js脚本压缩到原文件一半大小。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/compressor/" rel="no-follow" target="_blank"&gt;YUI  Compressor&lt;/a&gt;&lt;br /&gt; 是一款非常强大JS混淆和压缩工具，目前很多Javascript Framework都使用YUI Compressor进行代码分发。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.scriptalizer.com/" rel="no-follow" target="_blank"&gt;Scriptalizer&lt;/a&gt;&lt;br /&gt; 是一个有用的在线工具，减少HTTP请求。
&lt;p&gt;&lt;a href="http://www.scriptalizer.com/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77106/2347dfa4-c8dc-3d6b-ba60-8b4b22270819.jpg" alt="" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dojotoolkit.org/docs/shrinksafe" rel="no-follow" target="_blank"&gt;ShrinkSafe&lt;/a&gt;&lt;br /&gt; 文件压缩工具&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mootools.net/slickspeed/" rel="no-follow" target="_blank"&gt;SlickSpeed  Selectors Test&lt;/a&gt;&lt;br /&gt; 用于ajax框架css选择方法速度的对比。
&lt;p&gt;&lt;a href="http://mootools.net/slickspeed/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;img src="http://www.javaeye.com/upload/attachment/77108/8c7ee260-176a-3f80-81f6-eec1c86c82f8.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;来自：&lt;a href="http://www.smashingmagazine.com/2009/02/08/50-extremely-useful-javascript-tools/" rel="no-follow" target="_blank"&gt;smashingmagazine&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Ajax</category><category>javascript</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/7402</guid><pubDate>Fri, 20 Feb 2009 15:37:26 GMT</pubDate></item><item><title>Python 3 初探，第 1 部分: Python 3 的新特性</title><link>http://n23.appspot.com/blog/post/7401</link><description>&lt;h1&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-python3-1/?S_TACT=105AGX52&amp;amp;amp" rel="no-follow;S_CMP=NL&amp;amp;ca=dnl-cn-02052009&amp;amp;open&amp;amp;cm_mmc=4804-_-n-_-vrm_newsletter-_-10104_104384&amp;amp;cmibm_em=dm:0:14308375" target="_self"&gt;Python 3 初探，第 1 部分: Python 3 的新特性&lt;/a&gt;&lt;/h1&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/7401</guid><pubDate>Fri, 06 Feb 2009 14:59:50 GMT</pubDate></item><item><title>集成Google App Engine和iPhone</title><link>http://n23.appspot.com/blog/post/6402</link><description>&lt;p&gt;分布式商用平台上的云计算&amp;amp;mdash;&amp;amp;mdash;比如&lt;a href="http://code.google.com/appengine/" rel="no-follow"&gt;Google App Engine&lt;/a&gt;和&lt;a href="http://aws.amazon.com/ec2/" rel="no-follow"&gt;Amazon EC2&lt;/a&gt;&amp;amp;mdash;&amp;amp;mdash;也许是Web 2.0应用开发中最让人兴奋的新趋势。不需要专用的高可靠性服务器群，以及连带的成本和复杂性，商业云平台就允许按需构建应用并对应用进行托管。&lt;/p&gt;
&lt;p&gt;云的&amp;ldquo;后端&amp;rdquo;架构已然激动人心，同样，强大、低成本手持移动平台的利用也让&amp;ldquo;前端&amp;rdquo;变得令人振奋&amp;amp;mdash;&amp;amp;mdash;像iPhone和Android这些手持设备即将会实施那些几年前还难以想象的服务。&lt;/p&gt;
&lt;p&gt;DeveloperWorks上由Noah Gift和Jonathan Saggau写的新文章《&lt;a href="http://www.ibm.com/developerworks/library/wa-aj-iphone/?S_TACT=105AGX01&amp;amp;amp" rel="no-follow;S_CMP=HP"&gt;将Apple的iPhone连接到Google的云计算产品&lt;/a&gt;》 论述了两个平台相结合的能力。作者通过利用iPhone特有的plist结构（Apple特定的一种XML格式）构建了一个Python应用，并托管在 AppEngine上，该应用能按要求在iPhone上给出一首莎士比亚的十四行诗。示例代码包括AppEngine上的Python代码、iPhone 的Objective-C客户端，还有数据如何使用XML plist通过HTTP传输的例子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看英文原文：&lt;/strong&gt;&lt;a href="http://www.infoq.com/news/2009/02/appengine-iphone" rel="no-follow"&gt;Integrating Google App Engine with iPhone&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://www.infoq.com/cn/news/2009/02/appengine-iphone&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6402</guid><pubDate>Fri, 06 Feb 2009 01:15:21 GMT</pubDate></item><item><title>Enable Debug Mode in J2EE Server Node</title><link>http://n23.appspot.com/blog/post/6203</link><description>&lt;p&gt;Sometimes a developer asks you to make a J2EE server node debug able.  To do this, launch the J2EE Config Tool (usr/sap//instance/j2ee/configtool) . Then click on server instance node and in the right pane navigate to the Servers Debug tab. There you must select the Debuggable tick box as well as the Enable Debug Mode tick below it.See the screen shot below.&lt;a href="http://1.bp.blogspot.com/_6zQRzGa0fW0/RzhFjLMWpGI/AAAAAAAAAkI/8FMNDWkd5yE/s1600-h/debug.jpg" rel="no-follow"&gt;&lt;img src="http://1.bp.blogspot.com/_6zQRzGa0fW0/RzhFjLMWpGI/AAAAAAAAAkI/8FMNDWkd5yE/s400/debug.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://netweaverstuff.blogspot.com/2007/11/enable-debug-mode-in-j2ee-server-node.html&lt;/p&gt;</description><author>No.0023</author><category>SAP</category><category>Webdynpro</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6203</guid><pubDate>Wed, 21 Jan 2009 04:24:45 GMT</pubDate></item><item><title>2009年海外Web设计风潮（上）</title><link>http://n23.appspot.com/blog/post/6011</link><description>&lt;p&gt;这是 &lt;a href="http://www.smashingmagazine.com/" rel="no-follow" target="_blank"&gt;&lt;strong&gt;Smashing Magazine&lt;/strong&gt;&lt;/a&gt; 花费几个月的时间研究编写的 2009 年 &lt;strong&gt;Web 设计&lt;/strong&gt;风格与潮流，Smashing Magazine 的编辑们对当前流行的大量 Web 设计风格进行分析，总结出那些可能在 2009 年风行的潮流，包括新的设计元素，新的图形方式，并给出大量的漂亮的示例。这是第一部分10个潮流，第二部分15个潮流将于下周推出。&lt;/p&gt;
&lt;h3&gt;2009 Web 设计风潮&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;凸版印刷风格&lt;/li&gt;
&lt;p&gt;&lt;a href="http://365daysofastronomy.org/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-04.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;li&gt;富UI
&lt;p&gt;&lt;a href="http://www.newspond.com/science/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-11.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;透明 PNG
&lt;p&gt;&lt;a href="http://rustinjessen.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-27.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;大字体
&lt;p&gt;&lt;a href="http://www.francescomugnai.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-15.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;代用字体
&lt;p&gt;&lt;a href="http://www.chigarden.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-30.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;灯箱框
&lt;p&gt;&lt;a href="http://listen.grooveshark.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-17.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;媒体块
&lt;p&gt;&lt;a href="http://www.goodbarry.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-24.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;杂志式样
&lt;p&gt;&lt;a href="http://cutandtaste.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-19.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;幻灯滚动
&lt;p&gt;&lt;a href="http://www.itv.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-25.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;重点展示区域
&lt;p&gt;&lt;a href="http://productplanner.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/trend-14.jpg" alt="Web Design Trends 2009" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;1. 凸版印刷风格&lt;/h3&gt;
&lt;p&gt;这种风格有些出人意料，可能因为之前很少有人使用。该风格在在各种主题的网站中都有，但主要用于产品设计或在线服务类网站。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://365daysofastronomy.org/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress6.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexbuga.com/v8/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress3.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://brightkite.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress7.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.powerset.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress8.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.storenvy.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterp.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://unblab.com/login" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress1.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.leemunroe.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress2.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2d2.es/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress4.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.respiromedia.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/letterpress5.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;2. 富UI&lt;/h3&gt;
&lt;p&gt;现代 Web 中的 UI 变得越来越漂亮，越来越好用。过去的一年，Web 中的 UI 有了显著提高，有了一种接近桌面的感觉。Ajax 和 Flash 被广泛使用。&lt;/p&gt;
&lt;p&gt;特别是我们比去年看到了更多留白区域，还看到很多现代的 UI 技术会显示用户同系统之间交流的视觉状态，比如，按钮在正常和被按下时显示不同的样子，用户同系统交互时能及时得到反馈，另外，越来越多的服务可以被用户定制。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.quicksnapper.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/quick.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dc2009.drupalcon.org/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/sli.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这些设计显示 Web 设计师将更多精力放到了用户体验上。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://konigi.com/interface/mobileme-calendar-date-selector" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/action.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.newspond.com/science/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/spond.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.howcast.com/categories" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/howcast.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://moodstream.gettyimages.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/moodstream.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.gettyimages.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/personalize.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://listen.grooveshark.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/radioh.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kontain.com/" rel="no-follow#home" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/kontain.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;3. 透明 PNG&lt;/h3&gt;
&lt;p&gt;使用 PNG 实现透明虽然不被 IE6 支持，却在过去的一年大行其道。设计师们似乎正在尝试将背景图片和内容融合并实现一些印刷媒体的风格。比如，将 PNG 半透明图片放到整体背景的某个区域上，用来加亮显示这个区域，如标题或声明。一些 PNG 同名技术还用来实现灯箱框效果。&lt;/p&gt;
&lt;p&gt;Smashing Magazine 去年曾有篇&lt;a href="http://www.smashingmagazine.com/2008/04/16/getting-creative-with-transparency-in-web-design/" rel="no-follow" target="_blank"&gt;使用透明效果实现创意设计&lt;/a&gt;的文章，很多设计师在他们的作品中开始尝试这些技巧。有趣的是，透明效果常被用于页首和页尾部分，不过也有些&lt;a href="http://24ways.org/" rel="no-follow" target="_blank"&gt;例外&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rustinjessen.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/cover-headline1.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dc2009.drupalcon.org/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/png.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://24ways.org/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/oob2.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://labs.paulicio.us/viewport/" rel="no-follow#2" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/png2.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.restroom.nl/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/transp.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.wishingline.com/notebook/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/wisih.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://carrotcreative.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/carrot.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;4. 巨大字体&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2007/10/15/the-showcase-of-big-typography/" rel="no-follow" target="_blank"&gt;以前&lt;/a&gt;的&lt;a href="http://www.smashingmagazine.com/2008/05/20/the-showcase-of-big-typography-second-edition/" rel="no-follow" target="_blank"&gt;文章&lt;/a&gt;中我们曾介绍过巨型字体设计，2009年，巨型字体设计还会风行，尤其是那些设计社，以及展示型，产品介绍型，或在线服务型网站，他们会使用巨型字体显示重要信息。&lt;/p&gt;
&lt;p&gt;巨型字体设计中使用的字号往往超过36px，设计师们对字体编排注入了更多关注，以实现更漂亮，更连贯，更值得信赖的站点。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.francescomugnai.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/zo.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://madebygiant.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/type1.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://theautumnfilm.com/red-white-sale/us.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/red.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.signalapps.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/logbook.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.blackestate.co.nz/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/vine.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.onefastbuffalo.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/type3.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;5. 代用字体&lt;/h3&gt;
&lt;p&gt;设计师们还把更多注意力放到字体上，虽然经典的 Web 字体，Helvetica, Arial, Georgia 以及 Verdana 等仍占主流，一些代用字体正浮出水面（如 sIFR）。&lt;/p&gt;
&lt;p&gt;有趣的是，这些字体会和设计无缝地衔接，设计师们似乎并非为字体而字体，而是要将字体同他们的设计结合在一起实现更漂亮的效果。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.iso50.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/sh.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://365daysofastronomy.org/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/sifr1.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.chigarden.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/sifr2.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nonesuch.com/journal" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/sifr3.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://daily.creattica.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/daily.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;6. 灯箱效果&lt;/h3&gt;
&lt;p&gt;灯箱框是第二代弹窗，它们比第一代基于 JavaScript 的弹窗更友好，可以让用户将注意力集中到最重要的部分。这些窗口一般由用户的某个行为激发，并显示在其它内容的上层，他们有时候是半透明的，并包含一个关闭按钮。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://typedeskref.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/modalbox2.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.realmacsoftware.com/rapidweaver/overview/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/modalbox1.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://listen.grooveshark.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/groove.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;7. 媒体块&lt;/h3&gt;
&lt;p&gt;随着宽带接入的普及，用户现在可以承担更丰富的内容，设计师们也借机提出更有吸引力的内容。越来越多产品网站使用媒体块显示视频，让用户更容易理解 这些内容。用户只需靠在椅子上看视频，不需要一步一步往下点，这些食品通常比较短，直奔主题，虽然很正规，但也包含一些娱乐性。&lt;/p&gt;
&lt;p&gt;不过请注意，视频应当是你内容展示方式的次要选项，并不是所有人都有宽带接入，也不是所有人都喜欢有视频播放（他们可能正在后台听网络收音机或播放音乐），另外，也不是所有人都启用了 Flash 和 Javascript。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.getbackboard.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/gf.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.goodbarry.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/gb.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;8. 杂志外观&lt;/h3&gt;
&lt;p&gt;传统印刷媒体设计中使用的编排技术也出现在 Blog 设计中，文章的编排，文字排版，图片甚至对其方式。&lt;strong&gt;基于网格的设计&lt;/strong&gt;也很流行，但主要用于展示与产品页以及大型博客，极少用于公司网站或网店。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alpha-multimedia.com/category/blog" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/magazine1.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.objectifiedfilm.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/magazine2.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.inspirationbit.com/sources-of-inspiration-to-the-rescue/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/magazine3.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.good.is/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/magazine4.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cutandtaste.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/maga.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nonesuch.com/journal" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/magaz.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;9. 滚动幻灯导航&lt;/h3&gt;
&lt;p&gt;幻灯片水平和垂直滚动，可以向不同方向滚动，当前项加大加亮。这种导航技术可以让用户快速直观地浏览站点中的内容。一般常用语娱乐性网站，另外，设计者还可以使用该技术展示他们的作品。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.itv.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/amy.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://money.cnn.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/cnnmoney.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://music.yahoo.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/musicyahoo.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vickycristina-movie.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/wein.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;10. 在重点位置做形象展示&lt;/h3&gt;
&lt;p&gt;网站的左上方一般是一个站点最重要的区域，因为那是用户注意力最集中的地方。因此，在那个部位放上网站中最重要的信息是明智之举。&lt;/p&gt;
&lt;p&gt;事实上很多设计师正是这样做的，不管是 Web 程序，公司网站，在线服务还是作品展示，设计师们将口号或简介性内容放在那里，并使用醒目的排版给用户以良好的第一印象。这些内容长短不一，不管哪种方 式，但它们都占据可观的空间，一般横跨整个幅面，高度在250到400之间。不过这些形象展示性区域一般并不用于博客或在线商店。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.shannonmoeller.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/feature2.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://productplanner.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/introd.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.45royale.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/45r.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://revyver.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/feature3.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://creamscoop.com/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.baochizulin.com/Writable/Resource/_random_/2009-01-19/introd2.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;未完待续&lt;/p&gt;
&lt;p&gt;本文国际来源：&lt;a href="http://www.smashingmagazine.com/2009/01/14/web-design-trends-for-2009/" rel="no-follow" target="_blank"&gt;http://www.smashingmagazine.com/2009/01/14/web-design-trends-for-2009/&lt;/a&gt;&lt;br /&gt;中文翻译来源：&lt;a href="http://www.comsharp.com/" rel="no-follow" target="_blank"&gt;COMSHARP CMS&lt;/a&gt; 官方网站（35公里译）&lt;/p&gt;</description><author>No.0023</author><category>Web</category><category>dev</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6011</guid><pubDate>Tue, 20 Jan 2009 12:25:17 GMT</pubDate></item><item><title>在 Google App Engine 1.1.7 上跑 Pylons 0.9.7 RC4 </title><link>http://n23.appspot.com/blog/post/6007</link><description>&lt;p&gt;版本資訊：&lt;br /&gt;OS: Ubuntu 8.10&lt;br /&gt;Python 2.5.4&lt;br /&gt;Pylons 0.97rc4&lt;br /&gt;Google App Engine 1.1.7&lt;br /&gt;&lt;br /&gt;步驟：&lt;/p&gt;
&lt;pre&gt;svn checkout http://appengine-monkey.googlecode.com/svn/trunk/ appengine-monkey&lt;br /&gt;python2.5 appengine-boot.py --paste-deploy my-app&lt;br /&gt;## my-app 可改為你的想要的應用程式名稱，如：hellopylons)&lt;br /&gt;&amp;gt;&amp;gt; Enter template_engine (mako/genshi/jinja/etc: Template language) ['mako']: &lt;br /&gt;&amp;gt;&amp;gt; Enter sqlalchemy (True/False: Include SQLAlchemy 0.4 configuration) [False]:&lt;br /&gt;&amp;gt;&amp;gt; Enter google_app_engine (True/False: Setup default appropriate&lt;br /&gt;&amp;gt;&amp;gt;                                      for Google App Engine) [False]:True&lt;br /&gt;cd my-app&lt;br /&gt;source bin/activate&lt;br /&gt;easy_install Pylons&lt;br /&gt;cd src&lt;br /&gt;paster create --template=pylons MyApplication&lt;br /&gt;## MyApplication 依樣可自訂其名稱&lt;br /&gt;cd my-app/src/MyApplication&lt;br /&gt;python setup.py develop&lt;br /&gt;cd ../..&lt;br /&gt;python -m pth_relpath_fixup&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;編輯 my-app/development.ini：&lt;/p&gt;
&lt;pre&gt;[app:the-app]&lt;br /&gt;## Change this to whatever you name your application:&lt;br /&gt;use = egg:MyApplication&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;到此與 &lt;a href="http://code.google.com/p/appengine-monkey/wiki/Pylons" rel="no-follow" target="_blank"&gt;appengine-monkey&lt;/a&gt; 上差不多，但接著要多幾個動作才能見到 Welcome：&lt;br /&gt;&lt;br /&gt;一．&lt;br /&gt;File &amp;quot;.../appengine-monkey/my-app/src/MyApplication/MyApplication/config/environment.py&amp;quot;, line 34, in load_environment&lt;br /&gt; module_directory=os.path.join(app_conf['cache_dir'], 'templates'),&lt;br /&gt;KeyError: 'cache_dir'&lt;br /&gt;避免如上錯誤，編輯 my-app/src/MyApplication/config/environment.py，註解掉一行：&lt;/p&gt;
&lt;pre&gt;        ...&lt;br /&gt;        #module_directory=os.path.join(app_conf['cache_dir'], 'templates'),&lt;br /&gt;        ...&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;二．&lt;br /&gt;VersionConflict: (WebOb 0.9 (.../google_appengine/lib/webob), Requirement.parse('WebOb&amp;gt;=0.9.4'))&lt;br /&gt;移走 google_appengine/lib/webob 來避免這錯誤：&lt;/p&gt;
&lt;pre&gt;mv google_appengine/lib/webob/ google_appengine/webob/&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;即 Google Appengine 1.1.7 隨附的 webob 版本 (0.9) 未達 Pylons 0.9.7 的要求 'WebOb&amp;gt;=0.9.4'&lt;br /&gt;註：如果你有跑其它 App Engine apps，這個 google_appengine 最好單獨就給 Pylons 使用，以免造成其它程式的問題。 &lt;br /&gt;&lt;br /&gt;好，是時候了：&lt;br /&gt;/usr/bin/python2.5 google_appengine/dev_appserver.py my-app&lt;br /&gt;## 我使用自己 compile 的 /usr/bin/local/python2.5 google_appengine/dev_appserver.py my-app&lt;br /&gt;主要參考：&lt;br /&gt;Appengine-Monkey: &lt;a href="http://code.google.com/p/appengine-monkey/wiki/Pylons" rel="no-follow" target="_blank"&gt;http://code.google.com/p/appengine-monkey/wiki/Pylons&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;註二：&lt;br /&gt;自己 compile 的 Python 要支援 SSL 才能跑 Google App Engine，在 Ubuntu 8.10 下就是裝完 libssl-dev 後重新 make &amp;amp;&amp;amp; make install。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://everydayquest.blogspot.com/2009/01/memo-of-pylons-on-google-app-engine.html&lt;/p&gt;</description><author>No.0023</author><category>Python</category><category>GAE</category><category>Pylons</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6007</guid><pubDate>Sat, 17 Jan 2009 08:46:57 GMT</pubDate></item><item><title>copy IWDNode from other model IWDNode</title><link>http://n23.appspot.com/blog/post/6202</link><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Zds0001_Save_Input ds0001SaveInput = new Zds0001_Save_Input();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wdContext.nodeZds0001_Save_Input().bind(ds0001SaveInput);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDS0001QueryBankHeadNode queryBankHeadNode = wdContext.nodeDS0001QueryBankHead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; queryBankHeadNode.size(); i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; queryBankHeadNode.setLeadSelection(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Zbank_Head bankHead = new Zbank_Head();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WDCopyService.copyCorresponding(queryBankHeadNode.currentDS0001QueryBankHeadElement(), bankHead);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ds0001SaveInput.addIt_Bank_Head(bankHead);&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; }&lt;br /&gt;&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; wdContext.currentZds0001_Save_InputElement().modelObject().execute();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wdContext.nodeDS0001SaveOutput().invalidate();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; reportException(method, e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } finally {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wdContext.currentZds0001_Save_InputElement().modelObject().modelInstance().disconnectIfAlive();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;</description><author>No.0023</author><category>SAP</category><category>Java</category><category>Webdynpro</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6202</guid><pubDate>Fri, 16 Jan 2009 15:51:16 GMT</pubDate></item><item><title>IWDNode.invalidate()</title><link>http://n23.appspot.com/blog/post/6201</link><description>&lt;p&gt;IWDNode.invalidate() 不生效？用这个吧：&lt;/p&gt;
&lt;p&gt;&amp;nbsp; //@@begin javadoc:deleteElements()&lt;br /&gt;&amp;nbsp; /** Declared method. */&lt;br /&gt;&amp;nbsp; //@@end&lt;br /&gt;&amp;nbsp; public void deleteElements( com.sap.tc.webdynpro.progmodel.api.IWDNode node )&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //@@begin deleteElements()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = node.size() - 1; i &amp;gt;= 0; --i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; node.removeElement(node.getElementAt(i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //@@end&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;</description><author>No.0023</author><category>SAP</category><category>Java</category><category>Webdynpro</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6201</guid><pubDate>Fri, 16 Jan 2009 15:44:31 GMT</pubDate></item><item><title>The History of Python - Introduction </title><link>http://n23.appspot.com/blog/post/6004</link><description>&lt;p&gt;by gvanrossum@gmail.com (Guido van Rossum)&lt;/p&gt;
&lt;p&gt;Python is 19 years old now. I started the design and implementation of the language on a cold Christmas break in Amsterdam, in late December 1989. It started out as a typical hobby project. Little did I know where it would all lead.&lt;br /&gt;&lt;br /&gt;With Python's coming of age, I am going to look back on the history of the language, from the conception as a personal tool, through the the early years of community building, (&lt;a href="http://www.python.org/search/hypermail/python-1994q2/1040.html" rel="no-follow" target="_blank"&gt;If Guido was hit by a bus?&lt;/a&gt;), all the way through the &lt;a href="http://www.python.org/download/releases/3.0/" rel="no-follow" target="_blank"&gt;release of Python 3000&lt;/a&gt;, almost 19 years later. It's been quite an adventure, for myself as well as for the users of the language.&lt;br /&gt;&lt;br /&gt;This won't be an ordinary blog post -- it'll be an open-ended series. I may invite guest writers. I'll be touching upon many aspects of the language's history and evolution, both technical and social.&lt;br /&gt;&lt;br /&gt;I'll start with the gradual publication of material I wrote a few years ago, when I was invited to contribute an article on Python to &lt;a href="http://research.ihost.com/hopl/HOPL-III.html" rel="no-follow" target="_blank"&gt;HOPL-III&lt;/a&gt;, the third installment of ACM's prestigious History of Programming Languages conference, held roughly every ten years. Unfortunately, the demands of the rather academically inclined reviewers were too much for my poor hacker's brain. Once I realized that with every round of review the amount of writing left to do seemed to increase rather than decrease, I withdrew my draft. Bless those who persevered, but I don't believe that the resulting collection of papers gives a representative overview of the developments in &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" rel="no-follow" target="_blank"&gt;programming languages of the past decade&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The next destination of the draft was a book on Python to be published by Addison-Wesley. Again, the mountain of raw material that I had collected was too large and at the same time too incomplete to serve as a major section of the book, despite the editing help I received from &lt;a href="http://www.dabeaz.com/" rel="no-follow" target="_blank"&gt;David Beazley&lt;/a&gt;, a much better writer than I am.&lt;br /&gt;&lt;br /&gt;As they tell prospective Ph.D. students, the best way to eat an elephant is one meal at a time. So today I am publishing the first bit of the elephant, perhaps still somewhat uncooked, but at least it's out there. Hopefully others who were there at the time can help clear up the inevitable omissions and mistakes. I have many more chapters, each still requiring some editing, and I expect this to be a long-running series. Therefore I am starting a separate blog title for this, unimaginatively called &lt;a href="http://python-history.blogspot.com/" rel="no-follow" target="_blank"&gt;The History of Python&lt;/a&gt;. Follow the link and enjoy!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://neopythonic.blogspot.com/2009/01/history-of-python-introduction.html&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6004</guid><pubDate>Thu, 15 Jan 2009 01:37:29 GMT</pubDate></item><item><title>OpenSSL CVE-2008-5077: Incorrect checks for malformed signatures </title><link>http://n23.appspot.com/blog/post/5806</link><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Some exploitable logic errors have been discovered in OpenSSL versions prior to 0.9.8j.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; These errors may permit an attacker to bypass validation of DSA/ECDSA certificates and &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conduct a &amp;quot;man in the middle attack&amp;quot; against SSL/TLS connection that use them. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fortunately, DSA and ECDSA certificates appear to be rarely used in practice.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; This vulnerability has been designated CVE-2008-5077. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; More information is available from the OpenSSL project at:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://www.openssl.org/news/secadv_20090107.txt&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source code patches are available for OpenBSD 4.3 and 4.4. -current has been updated to OpenSSL 0.9.8j&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Patch for OpenBSD 4.3:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.3/common/007_openssl.patch&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Patch for OpenBSD 4.4:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.4/common/007_openssl.patch&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; These patches are also available in the OPENBSD_4_3 and OPENBSD_4_4 stable CVS branches.&lt;br /&gt;&lt;br /&gt;Thanks Damien for the update. Start your patching!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;from OpenBSD Journal&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5806</guid><pubDate>Sun, 11 Jan 2009 09:35:25 GMT</pubDate></item><item><title>jQuery plugin - Easy Image or Content Slider</title><link>http://n23.appspot.com/blog/post/6002</link><description>&lt;p&gt;This is my first &lt;a href="http://jquery.com/" rel="no-follow"&gt;jQuery&lt;/a&gt; plugin. I wrote several &lt;a href="http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery" rel="no-follow"&gt;jQuery scripts&lt;/a&gt; but never made a real plugin just because I was I afraid of it's complexity. It turned out to be a lot easier than I thought so I went ahead and created this one. &lt;br /&gt; &lt;strong&gt;Easy Slider&lt;/strong&gt; (as I call this plugin) enables images or any content to slide horizontally or vertically on click. It is configurable with css alone. So, basically you link to plugin file, set the content up and style it with css.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cssglobe.com/lab/easyslider/easySlider.zip" rel="no-follow"&gt;Download easySlider.zip&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;First you'll need content and it should be wrapped inside a div containing an ordered list where each list item represents one slide. Here's a markup example:&lt;/p&gt;
&lt;pre&gt;&amp;lt;div id=&amp;quot;slider&amp;quot;&amp;gt;&lt;br /&gt;	&amp;lt;ul&amp;gt;&lt;br /&gt;&lt;br /&gt;	&amp;lt;li&amp;gt;content here...&amp;lt;/li&amp;gt;&lt;br /&gt;	&amp;lt;li&amp;gt;content here...&amp;lt;/li&amp;gt;&lt;br /&gt;	&amp;lt;li&amp;gt;content here...&amp;lt;/li&amp;gt;&lt;br /&gt;	...&lt;br /&gt;	&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;p&gt;You can basically put whatever you want inside list items as long as you keep the same dimensions. My initial idea was to use this slider for image gallery as on &lt;a href="http://templatica.com/" rel="no-follow"&gt;Templatica's homepage&lt;/a&gt; but I've used it for other stuff too.&lt;br /&gt; To activate the script you will need to download the files, place jQuery file and easySlider.js somewhere on your site and link to them:&lt;/p&gt;
&lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/js/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/js/easySlider.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;p&gt;The action starts when you add this lines of code to your JavaScript:&lt;/p&gt;
&lt;pre&gt;$(document).ready(function(){&lt;br /&gt;	$(&amp;quot;#slider&amp;quot;).easySlider();&lt;br /&gt;});&lt;/pre&gt;
&lt;p&gt;This basically initiates the script on page load where &amp;quot;#slider&amp;quot; is css selector of the element(s) that you wish to apply script to. You can also use multiple elements using their class names i.e. &lt;em&gt;$(&amp;quot;.list&amp;quot;).easySlider();&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Next is up to your preferences - styling. This is how default styling looks like:&lt;/p&gt;
&lt;pre&gt;#slider ul, #slider li{&lt;br /&gt;	margin:0;&lt;br /&gt;	padding:0;&lt;br /&gt;	list-style:none;&lt;br /&gt;	}&lt;br /&gt;#slider, #slider li{ &lt;br /&gt;	width:500px;&lt;br /&gt;	height:200px;&lt;br /&gt;	overflow:hidden; &lt;br /&gt;	}&lt;br /&gt;span#prevBtn{}&lt;br /&gt;span#nextBtn{}		&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Not much there, is it? The most important thing here is to keep the same dimensions for the content area and each list item (slide). Also, overflow:hidden is obligatory. Other than that, you have free hands in adding your own style to the Easy Slider! To get an idea how it can be spiced up, you may take a look at &lt;a href="http://templatica.com/" rel="no-follow"&gt;Templatica's homepage.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;How does it all work&lt;/h3&gt;
&lt;p&gt;Script automatically adds &amp;quot;previous&amp;quot; and &amp;quot;next&amp;quot; buttons in form of span elements with nested anchors just after the content element. Spans have assigned IDs that you can use for css selecting:&lt;/p&gt;
&lt;pre&gt;&amp;lt;span id=&amp;quot;prevId&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot;&amp;gt;Previous&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;&amp;lt;span id=&amp;quot;nextBtn&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot;&amp;gt;Next&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;/pre&gt;
&lt;p&gt;On each click (previous or next button) script calculates the current &amp;quot;position&amp;quot; and makes a one step in requested direction. So, the slider jumps from one slide to another. Once it reaches the end (last slide), the &amp;quot;next&amp;quot; button fades away and re-appears only if &amp;quot;previous&amp;quot; button is clicked again. Same goes for sliding towards the beginning.&lt;/p&gt;
&lt;h3&gt;Options&lt;/h3&gt;
&lt;p&gt;The following options are configurable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;prevId&lt;/strong&gt; - id for &amp;quot;previous&amp;quot; button&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;prevText&lt;/strong&gt; - text for &amp;quot;previous&amp;quot; button&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;nextId&lt;/strong&gt; - id for &amp;quot;previous&amp;quot; button&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;nextText&lt;/strong&gt; - text for &amp;quot;next&amp;quot; button&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;orientation&lt;/strong&gt; - horizontal or vertical, horizontal is default and if you want vertical set this to 'vertical'&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;speed&lt;/strong&gt; - animation speed in milliseconds, default value is 800&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, you saw it correctly, &lt;strong&gt;vertical sliding is also possible!&lt;/strong&gt; :)&lt;/p&gt;
&lt;p&gt;Options are added when calling the script:&lt;/p&gt;
&lt;pre&gt;$(document).ready(function(){ &lt;br /&gt;	$(&amp;quot;#slider&amp;quot;).easySlider({&lt;br /&gt;		prevText: 'Previous Slide',&lt;br /&gt;		nextText: 'Next Slide',&lt;br /&gt;		orientation: 'vertical'&lt;br /&gt;	});&lt;br /&gt;});&lt;/pre&gt;
&lt;p&gt;Make sure that you don't put the comma after last option.&lt;/p&gt;
&lt;h3&gt;Demos&lt;/h3&gt;
&lt;p&gt;Here are some blank, non styled demos. Check out the script in action:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://cssglobe.com/lab/easyslider/01.html" rel="no-follow"&gt;Default non-styled image slider&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://cssglobe.com/lab/easyslider/02.html" rel="no-follow"&gt;Non-styled vertical image slider&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://cssglobe.com/lab/easyslider/03.html" rel="no-follow"&gt;Non-styled vertical content slider&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To check out styled demo, please visit &lt;a href="http://templatica.com/" rel="no-follow"&gt;Templatica&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;What makes this slider script different&lt;/h3&gt;
&lt;p&gt;Because of it's simplicity and light-weightness (is that a word ?! ) I believe that is is much easier to deal with this plug in and configure it. The appearance is totally editable with css so all of you afraid of getting their hands dirty with JS code can easily use this.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://cssglobe.com/post/3783/jquery-plugin-easy-image-or-content-slider&lt;/p&gt;</description><author>No.0023</author><category>jQuery</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6002</guid><pubDate>Fri, 09 Jan 2009 09:05:44 GMT</pubDate></item><item><title>2008年国外最佳Web设计/开发技巧、脚本及资源总结 </title><link>http://n23.appspot.com/blog/post/6001</link><description>

&lt;p&gt;&lt;a href="http://blog.bingo929.com/best-of-2008-for-web-developers.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://blog.bingo929.com/wp-content/uploads/2008/12/best-of-2008-for-developers-3.jpg" alt="2008-最佳-前端开发" height="150" width="500" title="2008-最佳-前端开发" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今天是2008年的最后一天，彬Go为大家奉上今年的最后大餐，这篇文章将为大家总结08年国外一些比较不错的&lt;em&gt;前端开发&lt;/em&gt;相关的教程、技巧、脚本、实 例及工具资源等，有一些是曾经彬Go发表过的翻译文章。实在是丰盛的需要消化很久&amp;hellip;无论您是刚入门的前端开发菜鸟，还是有多年前端开发经验的高手，我相信 下面的这些日志总会有您需要的！&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;工具&amp;amp;Web应用&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.smashingapps.com/2008/11/27/13-most-essential-open-source-apps-that-you-probably-like-to-say-thank-you.html" rel="no-follow" target="_blank"&gt;13个可能会让你说&amp;rdquo;Thank You&amp;rdquo;的必不可少的开源应用&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.conversion-rate-experts.com/articles/understanding-your-visitors/" rel="no-follow" target="_blank"&gt;14个免费工具让你了解为什么人们会放弃访问你的网站&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.allwebdesignresources.com/webdesignblogs/graphics/40-css-generators-creators-and-makers/" rel="no-follow" target="_blank"&gt;40+CSS生成器&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/03/30/74-great-web-apps-for-web-designers-we-have-forgotten-about/" rel="no-follow" target="_blank"&gt;74个我们可能已经忘记的适合网页设计师的很棒的Web应用&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.insidecrm.com/features/webmaster-turbo-kit-042108/" rel="no-follow" target="_blank"&gt;50+能提高你的网站速度和性能的技巧和资源&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sixrevisions.com/tools/tools_monitoring_website_popularity/" rel="no-follow" target="_blank"&gt;15个可以监视网站人气的工具&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/20-free-page-seo-analysis-tools.html" rel="no-follow" target="_blank"&gt;20个免费的SEO网站分析工具&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jasonbartholme.com/11-powerful-firefox-3-add-ons-that-can-replace-standalone-applications/" rel="no-follow" target="_blank"&gt;11个功能强大甚至可以替代标准应用程序的Firefox3扩展插件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hongkiat.com/blog/10-free-photo-managing-software-you-should-at-least-know/" rel="no-follow" target="_blank"&gt;10个你至少应该了解的免费照片管理软件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webjackalope.com/15-things-every-web-developers-should-be-thankful-for/" rel="no-follow" target="_blank"&gt;作为Web前端开发工程师应到感谢的15件事&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/15-bookmarklets.html" rel="no-follow" target="_blank"&gt;15个前端开发/网页设计师必备的Bookmarklet&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://woork.blogspot.com/2008/11/20-great-php-framework-for-developers.html" rel="no-follow" target="_blank"&gt;20大的PHP开发框架&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.divitodesign.com/2008/08/66-links-to-learn-the-webdesign-basics/" rel="no-follow" target="_blank"&gt;66个学习网页设计基础的链接&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mashable.com/2008/11/01/web-development-tools/" rel="no-follow" target="_blank"&gt;Web开发工具箱： 120 +Web开发新工具&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;脚本、补丁及Hack&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/02/10/the-top-40-free-ajax-javascript-code-for-web-designers/" rel="no-follow" target="_blank"&gt;40大免费Ajax及JavaScipt代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://freelancefolder.com/15-top-site-elements/" rel="no-follow" target="_blank"&gt;所有顶级网站应有的15个关键元素&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://designm.ag/resources/converting-psd-to-html/" rel="no-follow" target="_blank"&gt;将PSD效果图转换为HTML/CSS的10大教程&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dzineblog.com/2008/10/30-tooltips-scripts.html" rel="no-follow" target="_blank"&gt;30+JavaScript, Ajax &amp;amp; CSS工具提示脚本&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hongkiat.com/blog/50-nice-clean-css-tab-based-navigation-scripts/" rel="no-follow" target="_blank"&gt;50+漂亮的基于纯CSS的导航脚本&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hongkiat.com/blog/40-most-wanted-wordpress-tricks-and-hacks/" rel="no-follow" target="_blank"&gt;40+最热门的wordpress秘诀和技巧&lt;/a&gt;， &lt;a href="http://www.hongkiat.com/blog/30-more-most-wanted-wordpress-tips-tricks-and-hacks/" rel="no-follow" target="_blank"&gt;30+ More&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nettuts.com/articles/web-roundups/30-eye-opening-web-development-screencasts/" rel="no-follow" target="_blank"&gt;30+让你大开眼界的Web前端开发视频教程&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.designvitality.com/blog/2008/08/19-css-menu-tutorials-to-spice-up-your-web-designs/" rel="no-follow" target="_blank"&gt;19个CSS菜单教程来为你的网站添加更多趣味&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/30-css-tec-examples.html" rel="no-follow" target="_blank"&gt;精选30个优秀的CSS技术和实例&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.knowtebook.com/34-free-html-newsletter-templates-for-startups-899.htm" rel="no-follow" target="_blank"&gt;34+免费通讯(Email等)用HTML模板&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2008/10/16/50-excellent-ajax-tutorials/" rel="no-follow" target="_blank"&gt;50个优秀的Ajax教程&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/12-javascript-browser-css-wrong.html" rel="no-follow" target="_blank"&gt;12种Javascript解决常见浏览器兼容问题的方法&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2008/11/18/15-helpful-in-browser-web-development-tools/" rel="no-follow" target="_blank"&gt;15个有帮助的基于浏览器的Web前端开发工具&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2008/09/11/75-really-useful-javascript-techniques/" rel="no-follow" target="_blank"&gt;75个(真正的)很有帮助的JavaScipt技术&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/03/08/63-essential-wordpress-hacks-tutorials-help-files-and-cheats/" rel="no-follow" target="_blank"&gt;63个必不可少的Wordpress Hack、教程、帮助文件和手册&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/03/16/the-best-cheat-sheets-for-web-designers-and-developers-from-css-ajax-perl-vbscript/" rel="no-follow" target="_blank"&gt;Web设计/开发最佳使用手册(19)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2008/12/02/10-useful-rss-hacks-for-wordpress/" rel="no-follow" target="_blank"&gt;10个针对Worpress有用的RSS技巧和Hack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/10/26/20-amazing-javascript-prototype-scripts-elements-widgets-classes/" rel="no-follow" target="_blank"&gt;20个神奇的Javascipt脚本原型、元素、Widgets、类&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nettuts.com/tutorials/javascript-ajax/10-rare-but-clever-javascript-techniques/" rel="no-follow" target="_blank"&gt;10个聪明的JavaScipt技术用来提升你的UI界面&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nettuts.com/tutorials/javascript-ajax/20-excellent-ajax-effects-you-should-know/" rel="no-follow" target="_blank"&gt;10个你必须知道的很棒的Ajax特效&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/10/19/35-easy-to-use-free-ajax-navigation-solutions/" rel="no-follow" target="_blank"&gt;35个使用简便的Ajax/JavaScipt导航解决方案&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.catswhocode.com/blog/web-design/top-10-css-buttons-tutorial-list-29" rel="no-follow" target="_blank"&gt;10大CSS按钮教程列表&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webtecker.com/2008/06/12/10-free-chart-scripts/" rel="no-follow" target="_blank"&gt;10个免费图表脚本&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;技巧&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://nettuts.com/tutorials/php/10-principles-of-the-php-masters/" rel="no-follow" target="_blank"&gt;10个精通PHP的原理&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nettuts.com/tutorials/html-css-techniques/6-easy-ways-to-improve-your-html-emails/" rel="no-follow" target="_blank"&gt;6个简单方法来改善您的HTML邮件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2008/08/18/7-principles-of-clean-and-optimized-css-code/" rel="no-follow" target="_blank"&gt;整理及优化CSS代码的7个原则&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2008/11/12/12-principles-for-keeping-your-code-clean/" rel="no-follow" target="_blank"&gt;保持你的代码整洁的12个原则&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingmagazine.com/2008/11/18/10-advanced-php-tips-to-improve-your-progamming/" rel="no-follow" target="_blank"&gt;10个改善你编程的高级PHP技巧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/spice-up-your-images-with-css-5-way.html" rel="no-follow" target="_blank"&gt;使用CSS为图片添加更多趣味的5种方法&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.prelovac.com/vladimir/wordpress-optimization-guide" rel="no-follow" target="_blank"&gt;10个优化技巧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.redswish.co.uk/10-seo-elements-all-websites-should-have/" rel="no-follow" target="_blank"&gt;所有网站都应具备的10个SEO元素&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.leemunroe.com/10-web-app-tips-from-fowa-london/" rel="no-follow" target="_blank"&gt;来自8为极具灵感的演讲者的10个网络应用技巧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.equivalence.co.uk/archives/101" rel="no-follow" target="_blank"&gt;编写赏心悦目的代码的7种方法&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/10-css-shorthand-tips.html" rel="no-follow" target="_blank"&gt;10个CSS简写技巧让你永远受用&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.yongfook.com/items/view/81/10-dirty-little-web-development-tricks" rel="no-follow" target="_blank"&gt;10个Web开发小技巧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.themeforest.net/general/15-css-tricks-that-must-be-learned/" rel="no-follow" target="_blank"&gt;15个必须学会的CSS技巧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.noupe.com/design/101-css-techniques-of-all-time-part-1.html" rel="no-follow" target="_blank"&gt;101个CSS技术-第一部分&lt;/a&gt;,&lt;a href="http://www.noupe.com/css/101-css-techniques-of-all-time-part2.html" rel="no-follow" target="_blank"&gt;第二部分&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;资源&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/20-websites-web-design-usabillity.html" rel="no-follow" target="_blank"&gt;推荐20个关于网站可用性及界面设计的网站&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/31-practical-web-interface-design-tutorials.html" rel="no-follow" target="_blank"&gt;精选31个网站界面设计实践教程&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/02/24/53-steps-to-follow-if-you-want-to-become-freelance-web-designerdeveloper-60-resources/" rel="no-follow" target="_blank"&gt;成为Web设计/开发自由职业者所要遵循了53个步(60+资源)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/08/19/a-study-in-ajax-web-trends-what-are-the-best-free-ajax-resources-70-of-the-best-ajax-resources/" rel="no-follow" target="_blank"&gt;Ajax网页趋势研究，什么是最好的免费Ajax资源？(70+最佳Ajax资源)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/04/27/155-wordpress-resources-tutorials-plugins-themes-ajax-podcastingwp-monster-list/" rel="no-follow" target="_blank"&gt;155个Wordpress资源、教程、插件、主题、Ajax、播客&amp;hellip;庞大的WP列表&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/10-sources-ajax-javascript.html" rel="no-follow" target="_blank"&gt;10个非常棒的Ajax及Javascript实例资源网站&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/gifts-from-designers-to-you-best-of-2008.html" rel="no-follow" target="_blank"&gt;精选2008年最佳设计素材资源&amp;amp;灵感&lt;/a&gt; (已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/10-ajax-effects-website-fanciness.html" rel="no-follow" target="_blank"&gt;10种JavaScript特效实例让你的网站更吸引人&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/css-frameworks-15.html" rel="no-follow" target="_blank"&gt;精选15个国外CSS框架&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/04/09/41-of-the-best-mootools-ajax-example-downloads/" rel="no-follow" target="_blank"&gt;41个最佳Mootools Ajax实例下载&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/20-websites-learn-css.html" rel="no-follow" target="_blank"&gt;推荐20个让你学习并精通CSS的网站&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/04/02/65-excellent-jquery-resources-tutorialscheat-sheetsebooksdemosplugins/" rel="no-follow" target="_blank"&gt;65个优秀的jQuery资源(教程、手册、电子书、demo、插件&amp;hellip;)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/300-jquery-css-mootools-js-navigation-menus.html" rel="no-follow" target="_blank"&gt;300+Jquery, CSS, MooTools 和 JS的导航菜单资源&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/12-free-text-editors-for-web-developer.html" rel="no-follow" target="_blank"&gt;推荐12款可用于前端开发的免费文本编辑器&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bingo929.com/10-beautiful-icons-for-web.html" rel="no-follow" target="_blank"&gt;网页设计必备的10套漂亮图标集&lt;/a&gt;(已翻译成中文)&lt;/p&gt;
&lt;h3&gt;生成器&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.thewebsqueeze.com/articles/25-color-palette-generating-resources-for-web-designing.html" rel="no-follow" target="_blank"&gt;25个用于网页设计的颜色调色板生成器资源&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.smashingapps.com/2008/10/21/13-free-online-tools-that-helps-you-to-create-and-host-your-website.html" rel="no-follow" target="_blank"&gt;12款免费在线工具帮助你创建和托管你的网站&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webtecker.com/2008/04/09/25-web-20-generators/" rel="no-follow" target="_blank"&gt;25款Web2.0生成器&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;插件和主题&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.problogdesign.com/general-tips/10-best-plugins-to-get-more-comments/" rel="no-follow" target="_blank"&gt;10个用来得到更多评论的最棒的插件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogof.francescomugnai.com/2008/10/the-top-20-plugins-to-transform-wordpress-in-a-cms/" rel="no-follow" target="_blank"&gt;将Wordpress变为CMS系统的20大插件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.leemunroe.com/10-plugins-for-your-wordpress-theme-blog/" rel="no-follow" target="_blank"&gt;你会用在Wordpress主题或博客中的10款插件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/11/09/10-wordpress-plugins-to-add-ratings-and-polls-to-your-blog/" rel="no-follow" target="_blank"&gt;10款用于评分和投票的Wordpress插件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/01/26/top-30-wordpress-plugins-that-are-actually-useful/" rel="no-follow" target="_blank"&gt;30款确实有用的Wordpress插件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.1stwebdesigner.com/resources/130-wordpress-plugins-you-could-ever-need-the-best-of-part-1/" rel="no-follow" target="_blank"&gt;你早晚会用到的130款Wordpress插件-第一部分&lt;/a&gt;-&lt;a href="http://www.1stwebdesigner.com/resources/130-wordpress-plugins-you-could-ever-need-the-best-of-part-2/" rel="no-follow" target="_blank"&gt;第二部分&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://speckyboy.com/2008/10/06/18-wordpress-plugins-to-add-professionalism-to-your-blog/" rel="no-follow" target="_blank"&gt;18个让你的博客更专业的Wordpress插件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cssleak.com/news/7-Wordpress-Themes-To-Create-Your-Own-CSS-Gallery.html" rel="no-follow" target="_blank"&gt;7个创建你自己的CSS画廊的Wordpress主题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;英文原文:&lt;a href="http://aytemir.com/best-of-2008-for-developers-2008-tips-tricks-scripts-and-sources/" rel="no-follow" target="_blank"&gt;Best of 2008 for developers: 2008+ tips, tricks, scripts and sources!&lt;/a&gt;&lt;br /&gt; 翻译原文:&lt;a href="http://blog.bingo929.com/best-of-2008-for-web-developers.html" rel="no-follow" target="_blank"&gt;2008年国外最佳前端开发技巧、脚本及资源总结&lt;/a&gt;(暴风彬彬)&lt;/p&gt;
&lt;p&gt;原载:&lt;a href="http://blog.bingo929.com/index.php" rel="no-follow" target="_blank"&gt;彬Go&lt;/a&gt;-集前端开发/网页设计/网站可用性/用户体验于一体的趣味互联网生活&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;br /&gt;来自：&lt;a href="http://blog.bingo929.com/best-of-2008-for-web-developers.html" rel="no-follow" target="_blank"&gt;http://blog.bingo929.com/&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/6001</guid><pubDate>Thu, 01 Jan 2009 14:40:42 GMT</pubDate></item><item><title>New Book - Programming in Python 3</title><link>http://n23.appspot.com/blog/post/5802</link><description>&lt;p&gt;Finally got my hands on the brand new &amp;quot;Programming in Python 3 - A Complete Introduction to the Python Language&amp;quot;. As far as I know, this is the first print book covering Python 3.0 (Python 3000). A quick skim looked promising.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_k7-jvtv2cLo/SVP0KavDyMI/AAAAAAAAATI/5McXL3qBYHY/s1600-h/py3book.jpg" rel="no-follow"&gt;&lt;img src="http://2.bp.blogspot.com/_k7-jvtv2cLo/SVP0KavDyMI/AAAAAAAAATI/5McXL3qBYHY/s400/py3book.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5802</guid><pubDate>Fri, 26 Dec 2008 09:18:54 GMT</pubDate></item><item><title>2008年百度搜索风云榜 </title><link>http://n23.appspot.com/blog/post/5801</link><description>&lt;p&gt;2008年，无疑是不平凡的一年。从年初的拉萨打砸抢烧事件，到年中凝聚中华民族亿万人心的汶川地震，再到下半年的奥运盛事、神七上天，每一个宏大事件，都承载了我们的太多情绪和记忆。&lt;/p&gt;
&lt;p&gt;然而，宏大并非唯一的主题，三鹿奶粉事件让我们看到了生活中忧心忡忡的现实。好在有层出不穷的艳照门刺激眼球、命中注定这样的无敌偶像剧打发时间，生活总算有些乐趣。&lt;/p&gt;
&lt;p&gt;退赛的刘翔、振振有词的范跑跑，借着奥运、地震两件举国关注的大事强力上榜。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%b1%b6%e5%b7%9d&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/01_sszk_01_wc.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%88%98%e7%bf%94&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/01_sszk_02_lx.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%bc%80%e5%b9%95%e5%bc%8f&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/01_sszk_03_kms.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e7%a5%9e%e8%88%9f%e4%b8%83%e5%8f%b7&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/01_sszk_04_sz7h.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008年搜索量最大前十名基本上囊括了网络时代我们生活娱乐的方式。&lt;/p&gt;
&lt;p&gt;作为目前市场份额最大的即时通讯软件，QQ已经成为日常联络沟通不可或缺的手段。借助更加迅捷的网络传播、下载方式（如迅雷），电影、游戏、音乐们统治了我们娱乐时间的绝大部分。&lt;/p&gt;
&lt;p&gt;同样是借助网络，小说的阅读、分享方式也变得更加迅捷，观看NBA这样热门体育赛事的平台也已不再限于传统电视媒体。&amp;ldquo;一切要快&amp;rdquo;，是这个时代娱乐消费的一大特征。而几乎人手一部的手机，已经变成集合以上种种娱乐方式的新终端。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=qq&amp;amp;amp" rel="no-follow;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/02_rmss_01_qq.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=mp3&amp;amp;amp" rel="no-follow;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/02_rmss_02_mp3.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%b0%8f%e8%af%b4&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/02_rmss_03_xs.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e7%94%b5%e5%bd%b1&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/02_rmss_04_dy.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008年，有关&amp;ldquo;汶川地震&amp;rdquo;和&amp;ldquo;北京奥运&amp;rdquo;的搜索毫无悬念的位居榜首。前者见证了一个伟大民族在灾难面前的坚韧和团结，后者则向全世界证明了这个民族智慧和热情的一面。&lt;/p&gt;
&lt;p&gt;大悲大喜过后，生活却并未归于平淡。金融海啸下的股市危机、三鹿奶粉引发的三聚氰胺风波，让国人在担心自己荷包变小的同时，还要担忧自己体内某个脏器变大。&lt;/p&gt;
&lt;p&gt;何以解忧？唯有八卦。当艳照门的主角偃旗息鼓之际，周正龙携一张虎照再次震撼登场，这个群众演员波澜起伏的表演，盖过了那一众艳照明星的风头。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%b1%b6%e5%b7%9d%e5%9c%b0%e9%9c%87&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/03_rmsj_01_wcdz.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%8c%97%e4%ba%ac%e5%a5%a5%e8%bf%90&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/03_rmsj_02_ayh.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%89%b3%e7%85%a7%e9%97%a8&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/03_rmsj_03_yzm.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e4%b8%89%e9%b9%bf%e5%a5%b6%e7%b2%89&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/03_rmsj_04_slnf.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;用一个故事来总结2008流行语的话，可以这么来描述：&lt;/p&gt;
&lt;p&gt;一 堆香港女明星&amp;ldquo;很傻很天真&amp;rdquo;，为了锻炼&amp;ldquo;叉腰肌&amp;rdquo;，跟一个男子做了&amp;ldquo;三个俯卧撑&amp;rdquo;，刚好被&amp;ldquo;正龙拍虎&amp;rdquo;了，此后又出了很多&amp;ldquo;山寨&amp;rdquo;版艳照门，很多网友都感 叹互联网&amp;ldquo;很好很强大&amp;rdquo;。一名小学生在去&amp;ldquo;打酱油&amp;rdquo;的路上，接受了电视台的采访，她大声疾呼：网络&amp;ldquo;很黄很暴力&amp;rdquo;，&amp;ldquo;猪坚强&amp;rdquo;才是学习的对象。不过网友不 领情，痛批&amp;ldquo;做人不要太CNN&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;其实，网络流行语讲述的不仅仅是故事，更是世道人心。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%be%88%e9%bb%84%e5%be%88%e6%9a%b4%e5%8a%9b&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/04_lxy_01_hhhbl.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%81%9a%e4%ba%ba%e4%b8%8d%e8%a6%81%e5%a4%aacnn&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/04_lxy_02_cnn.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%89%93%e9%85%b1%e6%b2%b9&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/04_lxy_03_djy.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%8f%89%e8%85%b0%e8%82%8c&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/04_lxy_04_cyj.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;试用年度十大新字造句如下：&amp;ldquo;本人曾经宅男、轻微御姐，某日发萌、转loli控，莫道我槑、休说我囧，俯身orz三下、雷到你请飘过。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;这样的字句，在汉语辞典上完全无法找到正解，想要弄清含义，必须请教智慧的中国网民。&lt;/p&gt;
&lt;p&gt;另外需要说明的是，除了雷、囧、槑、飘这四个字，其他六个年度新字，全都来自日语。有关日语对现代汉语的影响，可以追溯到上世纪的白话文运动，不过那就是另外一个话题了。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e9%9b%b7&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/05_xxz_01_l.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%9b%a7&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/05_xxz_02_j.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%ae%85&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/05_xxz_03_z.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%a7%91&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/05_xxz_04_m.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008年度十大婚恋关键词，反映出国人婚恋价值观的变化，这其中既有对传统观念的挑战、也有回归。&lt;/p&gt;
&lt;p&gt;暧昧，说不清道不明，无论在网络上如何搜索，注定找不到明确答案。它的种子一旦在痴男怨女间播下，轻则亚偷情、精神出轨，重则变身小三、泡良族。&lt;/p&gt;
&lt;p&gt;倦鸟归巢，何况人乎？耍累了，还是要走回结婚生子的老路。于是相亲这种几被遗忘的婚恋方式，借着互联网又焕发了第二春，多少恨嫁的女子因此得福。结了婚，才发现也不安稳：孔雀女遭遇凤凰男，门当户对的老调被重新弹起；丁克，从&amp;ldquo;丁人&amp;rdquo;变成了&amp;ldquo;丁狗&amp;rdquo;。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%9a%a7%e6%98%a7&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/06_hlgjc_01_am.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e7%9b%b8%e4%ba%b2&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/06_hlgjc_02_xq.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%b0%8f%e4%b8%89&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/06_hlgjc_03_xs.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%87%a4%e5%87%b0%e7%94%b7&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/06_hlgjc_04_fhn.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;细 细观来，2008年十大网络人物，除了作为群体统称的什锦八宝饭、恶搞娱民的蠢爸爸，剩下的几乎都与人肉搜索有着或多或少的联系：姜岩自杀，网友人肉搜索 负心汉和小三，进行声讨；恶意炒作的兰董在人肉搜索面前露了马脚；正龙的伪照、妙可的假唱也难逃网民法眼；辽宁女、王千源之流的小丑更是无处遁形；一脱成 名的酒鬼妹妹、kappa女，也怨不得网民要曝曝你们的身份。&lt;/p&gt;
&lt;p&gt;在人肉搜索方面，2008年的中国网民表现出了无所不能、无处不在的强大力量。如果要另设一个2008网络人物集体奖，非全体中国网民莫属。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%85%b0%e8%91%a3&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/07_wlrw_01_ld.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e7%8e%8b%e5%8d%83%e6%ba%90&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/07_wlrw_02_wqx.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e4%bb%80%e9%94%a6%e5%85%ab%e5%ae%9d%e9%a5%ad&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/07_wlrw_03_sjbb.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%be%bd%e5%ae%81%e5%a5%b3&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/07_wlrw_04_lnn.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008年十大热门考试，考研和公务员考试位列冠亚军，高考则滑落到季军位置。在就业形势日趋严峻的今年，对面临&amp;ldquo;毕业即失业&amp;rdquo;困境的大学生而言，考研和考公务员无疑是最被关注的出路。而类似司法考试、CPA这样的专业技能考试，同样不失为一种选择。&lt;/p&gt;
&lt;p&gt;自考作为&amp;ldquo;没有围墙的大学&amp;rdquo;，今年受到了更多的重视，条条大路通罗马，高考已不是唯一的高等教育深造之途。&lt;/p&gt;
&lt;p&gt;与备受关注&amp;ldquo;国考&amp;rdquo;相比，今年雅思、托福这类考试的热门程度相形逊色，海归身份不再是职场上所向披靡的尚方宝剑。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%80%83%e7%a0%94&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/08_rmks_01_ky.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%85%ac%e5%8a%a1%e5%91%98%e8%80%83%e8%af%95&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/08_rmks_02_gwy.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e9%ab%98%e8%80%83&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/08_rmks_03_gk.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%87%aa%e8%80%83&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/08_rmks_04_zk.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008年，国人切身体会到了一场席卷全球的金融危机。事件源起自美国次贷危机，在全球化背景下，引发一系列连锁反应，国家无论大小、体制，皆被波及，甚至一度出现国家破产的奇闻。&lt;/p&gt;
&lt;p&gt;受世界范围内经济恶化、股市萧条的影响，中国股市自年初以来，一路下挫，尽管有印花税下调这样的兴奋剂，仍然难阻颓势，多少中国股民的身家灰飞烟灭。财富缩水，楼市开始黯淡，然而房价还未降多少，便引来一片救市之声，对比那厢股市，真可谓是两重天。&lt;/p&gt;
&lt;p&gt;在这样的形势之下，年底4万亿救市政策的出台，终于让国人悬了大半年的心放了下来。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e9%87%91%e8%9e%8d%e5%8d%b1%e6%9c%ba&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/09_jjsj_01_czwj.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%ac%a1%e8%b4%b7%e5%8d%b1%e6%9c%ba&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/09_jjsj_02_czwj.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%82%a1%e7%81%be&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/09_jjsj_03_gz.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e7%be%8e%e5%9b%bd%e6%94%bf%e5%ba%9c%e6%95%91%e5%b8%82%e6%96%b9%e6%a1%88&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/09_jjsj_04_mgzfjs.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008，人人都盼股市涨，结果涨上去的却是油价；人人都盼房价降，结果下降速度远不如A股来得爽，好在有两限房政策出台、房贷利率下调，房奴们明年多少可以减些负担。&lt;/p&gt;
&lt;p&gt;临近年底，燃油税该不该收、个税起征点上调与否，支持和反对者各执一词，效果如何，还待实践检验。&amp;ldquo;费&amp;rdquo;和&amp;ldquo;税&amp;rdquo;一样，都是老百姓生活中关心的字眼：手机漫游费终于减了，医疗费仍高居不下，老百姓还是把荷包捂捂紧。&lt;/p&gt;
&lt;p&gt;借奥运东风，&amp;ldquo;奥运门票购买&amp;rdquo;、&amp;ldquo;奥运单双号限行&amp;rdquo;强力上榜，毕竟百年盛事，咱老百姓得献出一份力。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%b1%bd%e6%9f%b4%e6%b2%b9%e6%b6%a8%e4%bb%b7&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/10_mssj_01_qcyzj.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e4%b8%a4%e9%99%90%e6%88%bf%e6%94%bf%e7%ad%96&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/10_mssj_02_lxfzc.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%8c%bb%e7%96%97%e6%94%b9%e9%9d%a9&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/10_mssj_03_ylgg.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%89%8b%e6%9c%ba%e6%bc%ab%e6%b8%b8%e8%b4%b9%e5%90%ac%e8%af%81%e4%bc%9a&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/10_mssj_04_sjmyf.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;如果说去年的&amp;ldquo;十大新股&amp;rdquo;榜单是皆大欢喜，那么今年的&amp;ldquo;十大动荡股票&amp;rdquo;榜单则是哀鸿遍野。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;位高权重&amp;rdquo;的中石油&amp;ldquo;率领&amp;rdquo;A股踏上&amp;ldquo;漫漫熊途&amp;rdquo;；&amp;ldquo;中国平安、平安中国&amp;rdquo;俨然成为一个笑话，不如代之以&amp;ldquo;中国平安、A股不安&amp;rdquo;；中国神华？&amp;ldquo;神话&amp;rdquo;果真是来得快去也快；比起神华，百年雷曼兄弟的破产倒更像是一个令人难以置信的神话。&lt;/p&gt;
&lt;p&gt;2008年股市唯一靠谱的说法，就是今年的股票很不靠谱。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e4%b8%ad%e7%9f%b3%e6%b2%b9&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/11_ddgp_01_zsy.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e9%98%bf%e9%87%8c%e5%b7%b4%e5%b7%b4&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/11_ddgp_02_albb.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e4%b8%ad%e5%9b%bd%e5%b9%b3%e5%ae%89&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/11_ddgp_03_zgpa.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e4%b8%87%e7%a7%91&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/11_ddgp_04_wk.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;荣威550位居年度新车榜首位，令人百思不得其解，其强大的发动机声音、强大的油耗、强大的怠速，如何能得到广大网民如此追捧？&lt;/p&gt;
&lt;p&gt;宝来、爱丽舍、凯越都是老车型，但是并不妨碍加个&amp;ldquo;新&amp;rdquo;字后，再次粉墨登场。与它们相比，宝马X6算得上是真正让人耳目一新的新车型了。&lt;/p&gt;
&lt;p&gt;由于榜单上居然没有一款日系车，因此韩国伊兰特的出现就更加令人困惑，需知神州大地遍地日本车，韩系车还难以望其项背。唯一让人欣慰的是，民族品牌奇瑞A3位列第五，2008年不仅立足本土，同时也开始走向世界。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%8d%a3%e5%a8%81550&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/12_xc_01_rw550.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%9c%97%e9%80%b8&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/12_xc_02_ly.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e9%80%8d%e5%ae%a2&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/12_xc_03_xk.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%96%b0%e5%ae%9d%e6%9d%a5&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/12_xc_04_xbl.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&amp;ldquo;人固有一死，或重于泰山，或轻于鸿毛&amp;rdquo;。2008年，这些逝者的名字再次唤醒了我们的某些记忆。十大最怀念文娱人物，娱乐圈人物占据其七，这倒应了我们这个时代娱乐至死的精神，这其中，韩星占据三席，韩流式微的论调唱的看来有点早。&lt;/p&gt;
&lt;p&gt;与娱乐明星位居&amp;ldquo;最怀念文娱人物&amp;rdquo;榜单前列相比，柏杨、魏巍、索尔仁尼琴在榜单上的靠后位置，多少显得有一些尴尬。不过这却不是已逝大师们的尴尬，而是我们这些生者的尴尬。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%b4%94%e7%9c%9f%e5%ae%9e&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/13_zhnwyrw_01_czs.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%b2%88%e6%ae%bf%e9%9c%9e&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/13_zhnwyrw_02_sdx.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%ae%89%e5%9c%a8%e7%84%95&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/13_zhnwyrw_03_azh.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%b0%a2%e6%99%8b&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/13_zhnwyrw_04_xj.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008年是个明星结婚年，一月刘涛、蔡少芬，四月王志文，五月佟大为，六月韩星张赫、港星杜汶泽，七月梁朝伟刘嘉玲，九月王楠、胡静、聂远、董洁，十月陈慧琳，十一月杨威杨云，还有终于嫁出去的大美女李嘉欣，十二月倪震周慧敏&amp;hellip;&amp;hellip;真让人有目不暇接之感。&lt;/p&gt;
&lt;p&gt;明星结婚，当事人摆的是排场，观众看的是热闹。一场场活色声香、纸醉金迷、高潮迭起的婚礼秀，不过是让我等这样平凡市井之民多了许多茶余饭后的谈资。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%a2%81%e6%9c%9d%e4%bc%9f%e5%88%98%e5%98%89%e7%8e%b2%e5%a9%9a%e7%a4%bc&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/14_mxhl_01_ljllcw.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%88%98%e6%b6%9b%e5%a9%9a%e7%a4%bc&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/14_mxhl_02_lt.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%9d%8e%e5%98%89%e6%ac%a3%e5%a9%9a%e7%a4%bc&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/14_mxhl_03_ljx.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e4%bd%9f%e5%a4%a7%e4%b8%ba%e5%a9%9a%e7%a4%bc&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/14_mxhl_04_tdw.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;2008年，曾经火爆异常的选秀节目走到了拐角，但是依然顽强地占据着榜单十大节目的多数位置。只是群雄逐鹿的混乱逐渐平息，代之以三分天下的鼎足而立（湖南卫视、江苏卫视、东方卫视）。选秀之路未来该如何走？这是一个值得节目制作者和电视观众共同思索的问题。&lt;/p&gt;
&lt;p&gt;汶川地震、北京奥运的影响无可避免的横扫荧屏，因此&amp;ldquo;感动中国&amp;rdquo;、&amp;ldquo;奥运向前冲&amp;rdquo;、&amp;ldquo;荣誉殿堂&amp;rdquo;的上榜也就不足为奇。&lt;/p&gt;
&lt;p&gt;倒是凤凰卫视的一档&amp;ldquo;军情观察室&amp;rdquo;，由于内地类似节目的空白，在局部冲突再起（8月格俄危机）、恐怖袭击回潮（11月孟买事件）的年度大背景下，重新又火了一把。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%84%9f%e5%8a%a8%e4%b8%ad%e5%9b%bd&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/15_chdsj_01_gdzz.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%86%9b%e6%83%85%e8%a7%82%e5%af%9f%e5%ae%a4&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/15_chdsj_02_jqgcs.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%88%91%e7%88%b1%e8%ae%b0%e6%ad%8c%e8%af%8d&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/15_chdsj_03_wajgc.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e9%be%99%e7%9a%84%e4%bc%a0%e4%ba%ba&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/15_chdsj_04_ldcr.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;一场汶川地震，牵动了多少人的心，其中，又涌现出了多少感人事迹、英雄模范。&lt;/p&gt;
&lt;p&gt;地 震发生后，上至中央总理温家宝、下至地方市委副书记曾万明，中国政府的表现不仅获得了全国人民的一致支持，也赢得了全世界的积极肯定。蒋宇航、陈坚、宋欣 宜、可乐男孩薛枭&amp;hellip;&amp;hellip;，他们面对死亡时的勇气，鼓舞了亿万中国人。谭千秋、叶志平、蒋敏&amp;hellip;&amp;hellip;，灾难面前坚守岗位，甚至牺牲生命，让无数人敬仰。&lt;/p&gt;
&lt;p&gt;当空十五军的勇士冒死伞降、解放军战士奋战在抗震救灾第一线，他们的行动再次证明了谁是最可爱的人。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%b8%a9%e5%ae%b6%e5%ae%9d&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/16_kzjz_01_wjb.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e6%9b%be%e4%b8%87%e6%98%8e&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/16_kzjz_02_zwm.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%b0%ad%e5%8d%83%e7%a7%8b&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/16_kzjz_03_tqq.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e8%92%8b%e9%9b%a8%e8%88%aa&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/16_kzjz_04_jyh.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;戏剧化的退赛事件让刘翔当之无愧地登上&amp;ldquo;奥运明星运动员&amp;rdquo;榜首。恋情曝光的跳水女皇郭晶晶、闭幕式上遭遇温柔一抱的小巨人姚明、完美谢幕的乒坛老将王楠也毫无悬念的现身榜单。&lt;/p&gt;
&lt;p&gt;瓷娃娃福原爱、外星人菲尔普斯、科比的上榜，反映国人对体育的关注已超越国籍界限。新生代运动员李小鹏、何雯娜则因其超高的人气成功进入前十名。&lt;/p&gt;
&lt;p&gt;唯一具有讽刺意味的，莫过于国足的集体上榜。2008年一切都不正常，幸而有国足，他们一如既往的糟糕表现，成为这一年中唯一正常的事。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%88%98%e7%bf%94&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/17_aymxydy_01_lx.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e5%a7%9a%e6%98%8e&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/17_aymxydy_02_ym.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e9%83%ad%e6%99%b6%e6%99%b6&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/17_aymxydy_03_gjj.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.baidu.com/s?wd=%e7%a6%8f%e5%8e%9f%e7%88%b1&amp;amp;cl=3" target="_blank"&gt;&lt;img src="http://www.baidu.com/2008/img/17_aymxydy_04_fya.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;去年高居榜首的基金、权证、股指和股票跌出榜单，我们看到了整个金融投资市场的低迷，一开始不少人人认定说都是&amp;ldquo;大小非&amp;rdquo;给闹得，但是当各行业均出现萎缩，&amp;ldquo;什么是经济危机&amp;rdquo;这个问题开始被一遍遍提及。&lt;/p&gt;
&lt;p&gt;当然也有去年的老面孔：如&amp;ldquo;什么是电子商务&amp;rdquo;、&amp;ldquo;什么是爱情&amp;rdquo;、&amp;ldquo;什么是科学发展观&amp;rdquo;。其中&amp;ldquo;什么是科学发展观&amp;rdquo;的排名由去年的第九，一跃而至今年的榜首，今年老百姓对政策理论的关注度可见一斑。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;什么是知识产权&amp;rdquo;的上榜，反映出今年人们对这一问题的重视程度明显高于以往。尊重保护知识产权已经为越来越多的人所认可。&lt;/p&gt;
&lt;p&gt;十大&amp;ldquo;怎么办&amp;rdquo;中，六个是关于身体上的小问题，四个则是关于电脑的小毛病。其中&amp;ldquo;牙疼怎么办&amp;rdquo;、&amp;ldquo;皮肤过敏怎么办&amp;rdquo;和&amp;ldquo;网速慢怎么办&amp;rdquo;连续两年上榜，成了网民最不知道应该怎么办的三大经典问题。&lt;/p&gt;
&lt;p&gt;有趣的是，盘点这些&amp;ldquo;怎么办&amp;rdquo;，发现网友操心的都没什么大事儿，网友们乐于在网络上寻找答案的，不是皮肤过敏了，就是电脑没声了，都属于那种不好受、但也基本没啥严重后果的&amp;ldquo;小焦虑&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;虽然微软的&amp;ldquo;黑屏事件&amp;rdquo;年底才发生，却以迅猛无敌的势头后来居上，愣是打败了诸如&amp;ldquo;失恋了怎么办&amp;rdquo;这样困扰了人类几千年的永恒问题，挤进了今年的十大。看来，被微软&amp;ldquo;养大&amp;rdquo;的中国网民，面对着高达千元的正版价格和面前突然黑了的屏幕，一时之间还真有点不知道该怎么办了。&lt;/p&gt;
&lt;p&gt;人有六欲：见、听、香、味、触、意，又有七情：喜、怒、忧、思、悲、恐、惊。普通人，大抵难逃对这七情六欲的追求。&lt;/p&gt;
&lt;p&gt;网友们搜索的这些&amp;ldquo;最&amp;rdquo;，正是对&amp;ldquo;纵情声色&amp;rdquo;的极致追求&amp;amp;mdash;&amp;amp;mdash;要电影来看、歌曲来听、游戏来玩满足六欲；要最新的满足好奇、要最恐怖的发泄内心深处的害怕、要搞笑的放松情绪、要感人好听的好玩的昂贵的来满足自我。&lt;/p&gt;
&lt;p&gt;这些&amp;ldquo;最&amp;rdquo;，为我们描绘出一幅&amp;ldquo;人类潜意识秘辛图&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;来自：&lt;a href="http://www.baidu.com/2008/" rel="no-follow" target="_blank"&gt;http://www.baidu.com/2008/&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5801</guid><pubDate>Wed, 24 Dec 2008 04:43:47 GMT</pubDate></item><item><title>十个优秀的Ajax/Javascript实例网站</title><link>http://n23.appspot.com/blog/post/5602</link><description>
&lt;p&gt;今天，要向大家推荐10个相当棒的Ajax和Javascript国外资源网站或博客，它们提供了相当多的高质量Ajax、Javascript实例及教程，喜欢Ajax和Javascript的朋友绝对不能错过。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.ajaxrain.com/" rel="no-follow" target="_blank"&gt;1.Ajax Rain&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124480.jpg" alt="" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;AjaxRain有很多完美整合AJAX, CSS, DHTML 或 Javascript的实例，有一些Demo的确值得你去看一看，即使你不是网页设计(开发)师。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.ajaxdaddy.com/" rel="no-follow" target="_blank"&gt;2.Ajax Daddy&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124481.jpg" alt="ajax-javascript-教程" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;Ajax Daddy收集了大量漂亮的Web2.0工具，其中一个使用的功能就是，在你把某个Ajax/Javascript实例应用在自己的网站上之前，你可以在它上面先看看效果演示。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;&lt;a href="http://miniajax.com/" rel="no-follow" target="_blank"&gt;3.Mini Ajax&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124482.jpg" alt="ajax-javascript-实例" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;MiniAJAX 是一个新生的网站，收集了少许 DHTML 和 AJAX 脚本, 它的代码片段风格非常实用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://ajaxian.com/" rel="no-follow" target="_blank"&gt;4.Ajaxian&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124483.jpg" alt="ajax-javascript-源码" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;一个接近于门户类型的AJAX资源站点，包括Ajax示例收集，博客，论坛和教程等等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dhtmlgoodies.com/" rel="no-follow" target="_blank"&gt;5.DHTML Goodies&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124484.jpg" alt="ajax-javascript-教程" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;DHTML Goodies是一个收集了大量DHTML、Ajax脚本、Demo和教程的网站。脚本范围涵盖从导航菜单、窗口、日历到图片集合。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.javascriptkit.com/" rel="no-follow" target="_blank"&gt;6.Javascript Kit&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124485.jpg" alt="ajax-javascript-资源" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;收集了大量的Javascript教程及脚本资源，当然也有DHTML、CSS和网页设计教程和一个设计师帮助论坛。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dynamicdrive.com/" rel="no-follow" target="_blank"&gt;7.Dynamic Drive&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124486.jpg" alt="ajax-javascript-源码" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;一个我常去的 JavaScript和 CSS资源网站，即使你是初学者，也能找到DHTML、Javascript、客户端脚本详细的指导。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dhtmlsite.com/" rel="no-follow" target="_blank"&gt;8.DHTML Site&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124487.jpg" alt="ajax-javascript" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;你能从DHTML Site找到大量游泳的AJAX及DHTML脚本及教程，脚本涵盖页面效果、工具技巧、拖拽式日历、窗口特效及图片集效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://ajax.solutoire.com/" rel="no-follow" target="_blank"&gt;9.Solutoire&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124488.jpg" alt="ajax-javascript-资源" height="185" width="500" /&gt;&amp;nbsp;
&lt;p&gt;这个网站收集了相当多且很棒的javascript和ajax的实例及教程. 还有很多 jQuery、Scriptaculous、mootools等Javascript框架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.devsnippets.com/" rel="no-follow" target="_blank"&gt;10.DevSnippets&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://www.chinaz.com/upimg/allimg/081217/1124489.jpg" alt="ajax-javascript-资源" height="185" width="500" /&gt;&lt;br /&gt;</description><author>No.0023</author><category>Ajax</category><category>javascript</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5602</guid><pubDate>Fri, 19 Dec 2008 13:47:56 GMT</pubDate></item><item><title>使用 jQuery : from IBM developerworks</title><link>http://n23.appspot.com/blog/post/5601</link><description>&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/cn/xml/x-ajaxjquery.html" rel="no-follow" target="_blank"&gt;使用 jQuery 简化 Ajax 开发&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/cn/web/wa-jquery1/?S_TACT=105AGX52&amp;amp;amp" rel="no-follow;amp" target="_blank"&gt;使用 jQuery，第 1 部分: 将桌面应用程序引入浏览器&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/cn/web/wa-jquery2/?S_TACT=105AGX52&amp;amp;amp" rel="no-follow;amp" target="_blank"&gt;使用 jQuery，第 2 部分: 构建未来的 Web 应用程序&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/cn/web/wa-jquery3/?S_TACT=105AGX52&amp;amp;amp" rel="no-follow;amp" target="_blank"&gt;使用 jQuery，第 3 部分: 用 jQuery 和 Ajax 构建富 Internet 应用程序&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>jQuery</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5601</guid><pubDate>Fri, 19 Dec 2008 12:56:49 GMT</pubDate></item><item><title>OpenBSD command: lockspool</title><link>http://n23.appspot.com/blog/post/4605</link><description>&lt;p&gt;LOCKSPOOL(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenBSD Reference Manual&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOCKSPOOL(1)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockspool - lock user's system mailbox&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockspool [username]&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockspool is useful for a client mail program to attain proper locking.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockspool obtains a username.lock for the calling user and retains it un-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; til stdin is closed or a signal like SIGINT, SIGTERM, or SIGHUP is re-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ceived.&amp;nbsp; Additionally, the superuser may specify the name of a user in&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order to lock a different mailbox.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If lockspool is able to create the lock file, ``1'' is written to stdout,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; otherwise ``0'' is written and an error message is written to stderr.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockspool will try up to 10 times to get the lock (sleeping for a short&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; period in between tries).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The lockspool utility exits 0 on success, and 1 if an error occurs.&lt;br /&gt;&lt;br /&gt;FILES&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /var/mail/username.lock&amp;nbsp; user's mail lock file&lt;br /&gt;&lt;br /&gt;SEE ALSO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mail(1), mail.local(8), sendmail(8)&lt;br /&gt;&lt;br /&gt;HISTORY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The lockspool program appeared in OpenBSD 2.4.&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4605</guid><pubDate>Sat, 13 Dec 2008 14:54:37 GMT</pubDate></item><item><title>OpenBSD command: nologin</title><link>http://n23.appspot.com/blog/post/5402</link><description>&lt;p&gt;NOLOGIN(8)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenBSD System Manager's Manual&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NOLOGIN(8)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nologin - politely refuse a login&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nologin&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nologin displays a message that an account is not available and exits&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; non-zero.&amp;nbsp; It is intended as a replacement shell field for accounts that&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; have been disabled.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If the file /etc/nologin.txt exists, nologin displays its contents to the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user instead of the default message.&lt;br /&gt;&lt;br /&gt;SEE ALSO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; login(1)&lt;br /&gt;&lt;br /&gt;HISTORY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The nologin command appeared in 4.4BSD.&lt;br /&gt;&lt;br /&gt;OpenBSD 4.4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; May 31, 2007&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5402</guid><pubDate>Sat, 13 Dec 2008 14:15:18 GMT</pubDate></item><item><title>what in OpenBSD</title><link>http://n23.appspot.com/blog/post/5401</link><description>&lt;p&gt;Shell:~ &amp;gt;: wh&lt;br /&gt;what&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whence&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whereis&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; which-command&amp;nbsp; who&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whois&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;whatis&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; which&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whoami&lt;br /&gt;&lt;br /&gt;Shell:~ &amp;gt;: whereis what&lt;br /&gt;/usr/bin/what&lt;br /&gt;&lt;br /&gt;Shell:~ &amp;gt;: cd /usr/bin&lt;br /&gt;&lt;br /&gt;Shell:/usr/bin &amp;gt;: what what&lt;br /&gt;what&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Copyright (c) 1980, 1988, 1993&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $OpenBSD: what.c,v 1.11 2003/07/10 00:06:52 david Exp $&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Shell:/usr/bin &amp;gt;: whatis what&lt;br /&gt;what (1) - show what versions of object modules were used to construct a file&lt;br /&gt;&lt;br /&gt;Shell:/usr/bin &amp;gt;: whatis what whatis whence where whereis which which-command while&lt;br /&gt;what (1) - show what versions of object modules were used to construct a file&lt;br /&gt;whatis (1) - describe what a command is&lt;br /&gt;whereis (1) - locate programs&lt;br /&gt;which (1) - locate a program file (or files) in the path&lt;br /&gt;Converts a file with native (1) -encoded characters (characters which are non-Latin 1 and non-Unicode) to one with Unicode-encoded characters.&lt;br /&gt;whence: not found&lt;br /&gt;where: not found&lt;br /&gt;which-command: not found&lt;br /&gt;while: not found&lt;br /&gt;&lt;br /&gt;Shell:/usr/bin &amp;gt;: whereis what whatis whence where whereis which which-command while&lt;br /&gt;/usr/bin/what&lt;br /&gt;/usr/bin/whatis&lt;br /&gt;/usr/bin/whereis&lt;br /&gt;/usr/bin/which&lt;br /&gt;&lt;br /&gt;Shell:/usr/bin &amp;gt;: alias | grep wh&lt;br /&gt;which-command=whence&lt;br /&gt;&lt;br /&gt;whence, where, while inside zsh.&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5401</guid><pubDate>Fri, 12 Dec 2008 15:53:37 GMT</pubDate></item><item><title>What's New in Python3.0</title><link>http://n23.appspot.com/blog/post/4805</link><description>&lt;p&gt;原文：&lt;a href="http://docs.python.org/dev/3.0/whatsnew/3.0.html" rel="no-follow"&gt;What's New in Python 3.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这篇文章主要介绍了相比于python2.6，python3.0的新特性。更详细的介绍请参见python3.0的文档。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Common Stumbling Blocks&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本段简单的列出容易使人出错的变动。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;print语句被print()函数取代了，可以使用关键字参数来替代老的print特殊语法。例如：&lt;br /&gt; &lt;ol&gt;
&lt;li&gt;Old: print &amp;quot;The answer is&amp;quot;, 2*2&lt;/li&gt;
&lt;li&gt;New: print(&amp;quot;The answer is&amp;quot;, 2*2)&lt;/li&gt;
&lt;li&gt;Old: print x,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/li&gt;
&lt;li&gt;New: print(x, end=&amp;quot; &amp;quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/li&gt;
&lt;li&gt;Old: print&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/li&gt;
&lt;li&gt;New: print()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/li&gt;
&lt;li&gt;Old: print &amp;gt;&amp;gt;sys.stderr, &amp;quot;fatal error&amp;quot;&lt;/li&gt;
&lt;li&gt;New: print(&amp;quot;fatal error&amp;quot;, file=sys.stderr)&lt;/li&gt;
&lt;li&gt;Old: print (x, y)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 输出repr((x, y))&lt;/li&gt;
&lt;li&gt;New: print((x, y))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 不同于print(x, y)!&lt;/li&gt;
&lt;/ol&gt; 你可以自定义输出项之间的分隔符：&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(&amp;quot;There are &amp;lt;&amp;quot;, 2**32, &amp;quot;&amp;gt; possibilities!&amp;quot;, sep=&amp;quot;&amp;quot;)&lt;br /&gt; 输出结果是：&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There are &amp;lt;4294967296&amp;gt; possibilities!&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;注意：&lt;/strong&gt; &lt;br /&gt; &lt;ol&gt;
&lt;li&gt;print()函数不支持老print语句的&amp;ldquo;软空格&amp;rdquo;特性，例如，在python2.x中，print &amp;quot;A\n&amp;quot;, &amp;quot;B&amp;quot;会输出&amp;quot;A\nB\n&amp;quot;，而python3.0中，print(&amp;quot;A\n&amp;quot;, &amp;quot;B&amp;quot;)会输出&amp;quot;A\n B\n&amp;quot;&lt;/li&gt;
&lt;li&gt;学会渐渐习惯print()吧！&lt;/li&gt;
&lt;li&gt;使用2to3源码转换工具时，所有的print语句被自动转换成print()函数调用，对大项目，这是无需争论的。&lt;/li&gt;
&lt;/ol&gt; &lt;/li&gt;
&lt;li&gt;python3.0使用字符串(strings)和bytes代替Unicode字符串和8位字符串，这意味着几乎所有使用Unicode编码和二进制数据的代码都要改动。这个改动很不错，在2.x的世界里，无数的bug都是因为编码问题。&lt;/li&gt;
&lt;li&gt;map()和filter()返回迭代器(iterators)&lt;/li&gt;
&lt;li&gt;dict方法keys(),items(),values()返回视图(同样是迭代器)而不是列表(list)&lt;/li&gt;
&lt;li&gt;内建的sorted()方法和list.sort()方法不再接受表示比较函数的cmp参数，使用key参数代替。&lt;/li&gt;
&lt;li&gt;1/2返回浮点数，使用1//2能得到整数。&lt;/li&gt;
&lt;li&gt;repr()函数对于long整数不再包含拖尾的L，所以不加判断的去除最后一个字符会导致去掉一个有用的数字。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;String and Bytes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;现在只有一种字符串:str,它的行为和实现都很像2.x的unicode串。&lt;/li&gt;
&lt;li&gt;basestring超类已经去掉了，2to3工具会把每个出现的basestring替换成str。&lt;/li&gt;
&lt;li&gt;PEP3137:新类型bytes，用来表示二进制数据和编码文本，str和bytes不能混合，需要时，必须进行显示的转换，转换方法是str.encode()(str-&amp;gt;bytes)和bytes.decode()(bytes-&amp;gt;str).&lt;/li&gt;
&lt;li&gt;在原始字符串(raw strings)中所有反斜线都按字面量解释，不再特殊处理Unicode转义字符。&lt;/li&gt;
&lt;li&gt;PEP3112:bytes字面量，例如b&amp;quot;abc&amp;quot;，创建bytes实例。&lt;/li&gt;
&lt;li&gt;PEP3120:默认源文件编码为UTF-8&lt;/li&gt;
&lt;li&gt;PEP3131:可以使用非ASCII标识符(然而，除了注释中贡献者的名字之外，标准库仍然只包含ASCII)&lt;/li&gt;
&lt;li&gt;PEP3116:新的IO实现，API几乎100%向后兼容，二进制文件使用bytes代替strings&lt;/li&gt;
&lt;li&gt;去除了StringIO和cStringIO模块，取而代之的是io.StringIO或者io.BytesIO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PEP3101：字符串格式化的新方法&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;str.format方法(原文提到替代了%操作符，实际上，format方法和%的用法差别很大，各有所长)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PEP3106:修补了dict的keys(),items(),values()方法&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;删除了dict.iterkeys(),dict.itervalues()和dict.iteritems()&lt;/li&gt;
&lt;li&gt;dict.keys(),dict.values()和dict.items()返回dict相关数据的引用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PEP3107:函数注解(Function Annotations)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;注解函数参数和返回值的标准化方法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Exception Stuff&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PEP352:异常类必须继承自BaseException,它异常结构的基类。&lt;/li&gt;
&lt;li&gt;移除了StandardError&lt;/li&gt;
&lt;li&gt;Dropping sequence behavior (slicing!) and message attribute of exception instances.&lt;/li&gt;
&lt;li&gt;PEP3109:抛出异常：现在必须使用raise Exception(args)而不是原来的raise Exception, args&lt;/li&gt;
&lt;li&gt;PEP3110:捕获异常，现在必须使用except Exception as identifier而不是原来的except Exception, identifier&lt;/li&gt;
&lt;li&gt;PEP3134:异常链(Exception chain)。&lt;/li&gt;
&lt;li&gt;改良了一些windows不能加载模式时的异常信息，具有本地化处理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;New Class and Metaclass Stuff&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;移除了classic class&lt;/li&gt;
&lt;li&gt;PEP3115:新的metaclass语法&lt;/li&gt;
&lt;li&gt;PEP3119:抽象基类。&lt;/li&gt;
&lt;li&gt;PEP3129:类包装。&lt;/li&gt;
&lt;li&gt;PEP3141:数字抽象基类&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;其他的语言变化&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里列出大多数的python语言核心和内建函数的变化。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;移除了backticks(使用repr()代替)&lt;/li&gt;
&lt;li&gt;移除了&amp;lt;&amp;gt;(不等号，使用!=代替)&lt;/li&gt;
&lt;li&gt;as和with变成了关键字&lt;/li&gt;
&lt;li&gt;True,False和None变成了关键字&lt;/li&gt;
&lt;li&gt;PEP237:long不存在了，只有int，它和原来的long一样。不再支持以L结尾的数字字面量。移除sys.maxint，因为int现在已经是无限大了&lt;/li&gt;
&lt;li&gt;PEP238:int相除，返回float&lt;/li&gt;
&lt;li&gt;改变了顺序操作符的行为，例如x&amp;lt;y，当x和y类型不匹配时抛出TypeError而不是返回随即的bool值&lt;/li&gt;
&lt;li&gt;移除了__getslice__，语法a[i:j]被解释成a.__getitem__(slice(i,j))&lt;/li&gt;
&lt;li&gt;PEP3102:keyword-only arguments.在函数参数列表中，出现在*args之后的命名参数只能使用&amp;quot;关键字参数&amp;quot;的形式调用&lt;/li&gt;
&lt;li&gt;PEP3104:nonlocal声明。使用nonlocal可以声明一个外部变量(不是global变量)&lt;/li&gt;
&lt;li&gt;PEP3111:raw_input()改名为input()，也就是说，新的input()函数从标准输入设备(sys.stdin)读取一行 并返回(不包括行结束符)，如果输入过早终止，该函数抛出EOFError，如果想使用老的input()，可以使用eval(input())代替。&lt;/li&gt;
&lt;li&gt;xrange()改名为range()，range()现在不是产生一个列表(list)，而是一个迭代器。&lt;/li&gt;
&lt;li&gt;PEP3113:移除了&amp;quot;元组参数拆包(tuple parameter unpacking)&amp;quot;。这种写法已经不行了：&lt;br /&gt; def foo(a, (b, c)):...&lt;br /&gt; 现在要这样写:&lt;br /&gt; def foo(a, b_c):&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b,c = b_c&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;PEP3114:next()重命名为__next__(),新的内建函数next()可以调用一个对象的__next__()方法。&lt;/li&gt;
&lt;li&gt;PEP3127:新的八进制字面量，二进制字面量和bin()函数。你应该写0o666而不是0666，oct()函数也做了响应的改动。同样，0b1010等价于10，bin(10)返回&amp;quot;0b1010&amp;quot;。0666这种写法现在是错误的。&lt;/li&gt;
&lt;li&gt;PEP3132:支持迭代器拆包。现在你可以这样写:&lt;br /&gt; a, b, *rest = some_seqence&lt;br /&gt; 甚至象这样：&lt;br /&gt; *rest, a = stuff&lt;br /&gt; 一般情况下，rest对象是list，而等号右边的对象是可迭代的&lt;/li&gt;
&lt;li&gt;PEP3135:新的super()。你可以不适用任何参数调用super()，正确的参数和实例会被正确选择。如果使用参数，它的行为不变，和以前一样。&lt;/li&gt;
&lt;li&gt;zip(),map(),filter()返回迭代器。&lt;/li&gt;
&lt;li&gt;移除了string.letters和它的朋友们(string.lowcase和string.uppercase)，现在上场的是string.ascii_letters等&lt;/li&gt;
&lt;li&gt;移除了apply(),callable(),exefile(),file(),reduce(),reload()&lt;/li&gt;
&lt;li&gt;移除了dict.has_key()。使用in操作符进行测试&lt;/li&gt;
&lt;li&gt;exec语句没有了，现在是exec()函数&lt;/li&gt;
&lt;li&gt;移除了__oct__()和__hex__()特殊方法。oct()和hex()方法使用__index__()&lt;/li&gt;
&lt;li&gt;移除了对__members__和__methods__的支持&lt;/li&gt;
&lt;li&gt;nb_nonzero重命名为nb_bool,__nonzero__()重命名为__bool__()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optimizations&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一般情况下，python 3.0比python 2.5慢33%左右。不过仍有提升空间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;模块变动(新的，改进的和废弃的)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;移除了cPickle模块，可以使用pickle模块代替。最终我们将会有一个透明高效的模块。&lt;/li&gt;
&lt;li&gt;移除了imageop模块&lt;/li&gt;
&lt;li&gt;移除了audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块&lt;/li&gt;
&lt;li&gt;移除了bsddb模块(单独发布，可以从http://www.jcea.es/programacion/pybsddb.htm获取)&lt;/li&gt;
&lt;li&gt;移除了new模块&lt;/li&gt;
&lt;li&gt;os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下&lt;/li&gt;
&lt;li&gt;tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens，而是tokenize.tokenize()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Build and C API Changes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Python&amp;amp;rsquo;s build process和C API的改动包括:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PEP3118:新的Buffer API&lt;/li&gt;
&lt;li&gt;PEP3121:扩展模块的的Initialization &amp;amp; Finalization&lt;/li&gt;
&lt;li&gt;PEP3123:使PyObject_HEAD符合标准C&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;其他的改动和修复&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在源码里分散一系列的改进和bug修复。changes log表明，从2.6到3.0，有XXX个改动和YYY的bug修复。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://jjz.javaeye.com/blog/259156&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4805</guid><pubDate>Wed, 10 Dec 2008 02:02:46 GMT</pubDate></item><item><title>BSD发行版：BSDanywhere 4.4发布</title><link>http://n23.appspot.com/blog/post/4804</link><description>&lt;p&gt;BSDanywhere是基于OpenBSD的自启动运行光盘镜像。它包含了整个OpenBSD基础系统（不含编译器），并带有一份图形桌面、一套非典型 的软件收藏、自动硬件检测，以及对很多显示卡、声卡、SCSI、USB设备及其他外设的支持。BSDanywhere可以作为一份教学UNIX系统，一套 修复环境，或者是硬件测试平台来使用。&lt;br /&gt;Stephan Rickauer has announced the release of &lt;a href="http://distrowatch.com/bsdanywhere" rel="no-follow"&gt;BSDanywhere&lt;/a&gt; 4.4, a live CD based on the latest stable version of OpenBSD: &amp;quot;We are pleased to announce the immediate availability of BSDanywhere 4.4 - Enlightenment at your fingertips. As always, we release our OpenBSD based images in two flavours: i386 (32bit) and amd64 (64bit). Here's a quick summary of the not-to-intense changes since 4.3: removed packages: GIMP, AbiWord, Audacious, Mutt, rsnapshot, Darkstat - we are really limited in space that's why we decided to concentrate on the primary focus of BSDanywhere, which is hardware testing and system rescue; added packages: Dnstop, dnstracer; we now enabled 'machdep.kbdreset' which permits console CTRL-ALT-DEL to do a nice halt; new artwork.&amp;quot; Read the rest of the &lt;a href="http://bsdanywhere.org/node/40" rel="no-follow"&gt;release announcement&lt;/a&gt; for further information. &lt;a href="http://bsdanywhere.org/download/" rel="no-follow"&gt;Download (MD5)&lt;/a&gt;: &lt;a href="ftp://ftp.netbsd.se/BSDanywhere/4.4/bsdanywhere44-i386.iso" rel="no-follow"&gt;bsdanywhere44-i386.iso&lt;/a&gt; (612MB), &lt;a href="http://www.ini.uzh.ch/~stephan/bsdanywhere/4.4/bsdanywhere44-amd64.iso"&gt;bsdanywhere44-amd64.iso&lt;/a&gt; (683MB).&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4804</guid><pubDate>Tue, 09 Dec 2008 09:34:54 GMT</pubDate></item><item><title>Python 3.0 on OpenBSD</title><link>http://n23.appspot.com/blog/post/4604</link><description>&lt;p&gt;Shell:~/tools/Py3k/bin &amp;gt;: ./python3.0&lt;br /&gt;Python 3.0 (r30:67503, Dec&amp;nbsp; 4 2008, 23:27:21) &lt;br /&gt;[GCC 3.3.5 (propolice)] on openbsd4&lt;br /&gt;Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import os&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; os.uname()&lt;br /&gt;('OpenBSD', 'obsd.org', '4.4', 'GENERIC.MP#0', 'i386')&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import sys&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; for line in sys.path: print(line)&lt;br /&gt;... &lt;br /&gt;&lt;br /&gt;/home/Py3k/mylibs/lib/Python&lt;br /&gt;/home/Py3k/tools/Py3k/lib/python30.zip&lt;br /&gt;/home/Py3k/tools/Py3k/lib/python3.0&lt;br /&gt;/home/Py3k/tools/Py3k/lib/python3.0/plat-openbsd4&lt;br /&gt;/home/Py3k/tools/Py3k/lib/python3.0/lib-dynload&lt;br /&gt;/home/Py3k/tools/Py3k/lib/python3.0/site-packages&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>Python</category><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4604</guid><pubDate>Thu, 04 Dec 2008 15:35:58 GMT</pubDate></item><item><title>Python 3.0 Release</title><link>http://n23.appspot.com/blog/post/4803</link><description>&lt;h2&gt;&lt;a name="python-3-0"&gt;Python 3.0&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Python 3.0 (a.k.a. &amp;quot;Python 3000&amp;quot; or &amp;quot;Py3k&amp;quot;) is a new version of the language that is incompatible with the 2.x line of releases.  The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed.  Also, the standard library has been reorganized in a few prominent places.&lt;/p&gt;
&lt;p&gt;Here are some Python 3.0 resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.python.org/dev/3.0/whatsnew/3.0.html" rel="no-follow"&gt;What's new in Python 3000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/download/releases/3.0/NEWS.txt" rel="no-follow"&gt;Python 3.0 change log&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.python.org/dev/3.0/" rel="no-follow"&gt;Online Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Read more in &lt;a href="http://www.python.org/dev/peps/pep-3000/" rel="no-follow"&gt;PEP 3000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;To help out, sign up for &lt;a href="http://mail.python.org/mailman/listinfo/python-3000/" rel="no-follow"&gt;python-3000@python.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Conversion tool for Python 2.x code: &lt;a href="http://svn.python.org/view/sandbox/trunk/2to3/" rel="no-follow"&gt;2to3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please report bugs at &lt;a href="http://bugs.python.org/" rel="no-follow"&gt;http://bugs.python.org&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a name="python-3-0-release-03-dec-2008"&gt;Python 3.0 Release: 03-Dec-2008&lt;/a&gt;&lt;/h3&gt;
&lt;h2&gt;&lt;a name="download"&gt;Download&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is a proeuction release; we currently support these formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/3.0/Python-3.0.tgz" rel="no-follow"&gt;Gzipped source tar ball (3.0)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/3.0/Python-3.0.tgz.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/3.0/Python-3.0.tar.bz2" rel="no-follow"&gt;Bzipped source tar ball (3.0)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/3.0/Python-3.0.tar.bz2.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/3.0/python-3.0.msi" rel="no-follow"&gt;Windows x86 MSI Installer (3.0)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/3.0/python-3.0.msi.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/3.0/python-3.0.amd64.msi" rel="no-follow"&gt;Windows AMD64 MSI Installer (3.0)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/3.0/python-3.0.amd64.msi.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MD5 checksums and sizes of the released files:&lt;/p&gt;
&lt;pre&gt;ac1d8aa55bd6d04232cd96abfa445ac4  11191348  Python-3.0.tgz&lt;br /&gt;28021e4c542323b7544aace274a03bed   9474659  Python-3.0.tar.bz2&lt;br /&gt;054131fb1dcaf0bc20b23711d1028099  13421056  python-3.0.amd64.msi&lt;br /&gt;2b85194a040b34088b64a48fa907c0af  13168640  python-3.0.msi&lt;br /&gt;&lt;/pre&gt;
&lt;h2&gt;&lt;a name="documentation"&gt;Documentation&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.python.org/dev/3.0/" rel="no-follow"&gt;Online Documentation&lt;/a&gt; is updated twice a day&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.python.org/dev/3.0/whatsnew/3.0.html" rel="no-follow"&gt;What's new in Python 3000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.artima.com/weblogs/index.jsp?blogger=guido" rel="no-follow"&gt;Guido van Rossum's blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4803</guid><pubDate>Thu, 04 Dec 2008 02:16:42 GMT</pubDate></item><item><title>GAE SDK 1.1.6 Released</title><link>http://n23.appspot.com/blog/post/5201</link><description>&lt;p&gt;Today we released the 1.1.6 SDK.  You can &lt;a href="http://code.google.com/p/googleappengine/downloads/list" rel="no-follow" target="_blank"&gt;download it&lt;/a&gt; on our Google hosting project, and peruse the &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes" rel="no-follow" target="_blank"&gt;release notes&lt;/a&gt; for more details on the release.&lt;/p&gt;
&lt;p&gt;This release contains some notable new features, including several to our datastore:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now &lt;a href="http://code.google.com/appengine/docs/datastore/queriesandindexes.html" rel="no-follow#Queries_on_Keys" target="_blank"&gt;sort and filter&lt;/a&gt; on an entity's key&lt;/li&gt;
&lt;li&gt;You can now delete an entity directly using its key, without fetching the Model object.&lt;/li&gt;
&lt;li&gt;If you specify a key_name when creating a Model, its key will now be available before you call put()&lt;/li&gt;
&lt;li&gt;URLFetch calls made in the SDK now have a 5 second timeout, matching production&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, it contains a number of issue fixes, including the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=53" rel="no-follow" target="_blank"&gt;SDK now only supports the same headers as production&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=423" rel="no-follow" target="_blank"&gt;In production, fixed an erroneous NeedIndexError when two ancestor queries were specified&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=430" rel="no-follow" target="_blank"&gt;Calling to_xml() on a model instance containing a BlobProperty returns that BlobProperty base64 encoded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=363" rel="no-follow" target="_blank"&gt;URLFetch now uses the original HTTP method (e.g. POST) when following a redirect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As always, any and all feedback is welcome in the &lt;a href="http://groups.google.com/group/google-appengine" rel="no-follow" target="_blank"&gt;Google Group&lt;/a&gt;!&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5201</guid><pubDate>Fri, 21 Nov 2008 14:21:43 GMT</pubDate></item><item><title>Django 1.0.2发布</title><link>http://n23.appspot.com/blog/post/5001</link><description>&lt;p&gt;在上周&lt;a href="http://www.djangoproject.com/weblog/2008/nov/15/101/" rel="no-follow" target="_blank"&gt;Django 1.0.1&lt;/a&gt;发布之后不久，有人发现用于生成release的打包脚本漏掉了几个Django源码目录，这不仅会到影响单元测试，而且至少有一个被遗漏的文件影响到Django的正常使用。于是Django工作组在11月18号发布&lt;a href="http://www.djangoproject.com/weblog/2008/nov/18/102/" rel="no-follow" target="_blank"&gt;Django 1.0.2&lt;/a&gt;修正了这些问题。&lt;br /&gt;&lt;br /&gt;点击&lt;a href="http://www.djangoproject.com/download/1.0.2/tarball/" rel="no-follow" target="_blank"&gt;此处&lt;/a&gt;下载Django 1.0.2&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://www.onlypython.com/post/4324/&lt;/p&gt;</description><author>No.0023</author><category>Django</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/5001</guid><pubDate>Thu, 20 Nov 2008 01:39:05 GMT</pubDate></item><item><title>Django 1.0.1发布</title><link>http://n23.appspot.com/blog/post/4603</link><description>&lt;p&gt;按照&lt;a href="http://www.djangoproject.com/weblog/2008/oct/24/upcoming-releases/" rel="no-follow" target="_blank"&gt;发布计划&lt;/a&gt;，&lt;a href="http://www.djangoproject.com/download/1.0.1/tarball/" rel="no-follow" target="_blank"&gt;Django 1.0.1&lt;/a&gt;于11月15号正式发布。此版本修改了Django 1.0一些bug。&lt;br /&gt;&lt;br /&gt;点击&lt;a href="http://www.djangoproject.com/download/1.0.1/tarball/" rel="no-follow" target="_blank"&gt;此处&lt;/a&gt;下载。&lt;/p&gt;</description><author>No.0023</author><category>Django</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4603</guid><pubDate>Mon, 17 Nov 2008 04:42:52 GMT</pubDate></item><item><title>tar -j for openbsd</title><link>http://n23.appspot.com/blog/post/4802</link><description>&lt;p&gt;TAR(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenBSD Reference Manual&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TAR(1)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tar - tape archiver&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tar {crtux}[014578befHhjLmOoPpqsvwXZz]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [blocking-factor | archive | replstr] [-C directory] [-I file]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [file ...]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tar {-crtux} [-014578eHhjLmOoPpqvwXZz] [-b blocking-factor] [-C&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; directory] [-f archive] [-I file] [-s replstr] [file ...]&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The tar command creates, adds files to, or extracts files from an archive&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file in ``tar'' format.&amp;nbsp; A tar archive is often stored on a magnetic&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tape, but can be stored equally well on a floppy, CD-ROM, or in a regular&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disk file.&lt;br /&gt;...&lt;/p&gt;
&lt;p&gt;-j&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Compress archive using bzip2.&amp;nbsp; The bzip2 utility must be in-&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; stalled separately.&lt;br /&gt;...&lt;/p&gt;
&lt;p&gt;已经支持bzip2了。&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4802</guid><pubDate>Thu, 13 Nov 2008 16:46:38 GMT</pubDate></item><item><title>openjdk for openbsd</title><link>http://n23.appspot.com/blog/post/4602</link><description>&lt;p&gt;Shell:~ &amp;gt;: uname -a&lt;br /&gt;OpenBSD obsd.org 4.4 GENERIC.MP#0 i386&lt;br /&gt;Shell:~ &amp;gt;: java -version&lt;br /&gt;openjdk version &amp;quot;1.7.0-internal&amp;quot;&lt;br /&gt;OpenJDK Runtime Environment (build 1.7.0-internal-naddy_12_aug_2008_23_14-b00)&lt;br /&gt;OpenJDK Client VM (build 12.0-b01, mixed mode)&lt;br /&gt;Shell:~ &amp;gt;: pkg_list jdk&lt;br /&gt;jdk-1.7.0.00b24p2.tgz&lt;br /&gt;Shell:~ &amp;gt;:&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4602</guid><pubDate>Thu, 13 Nov 2008 16:44:51 GMT</pubDate></item><item><title>InfoQ: 架构师（试刊第二期）</title><link>http://n23.appspot.com/blog/post/4801</link><description>&lt;h1&gt;架构师（试刊第二期）&lt;/h1&gt;
&lt;p&gt;作者 		&lt;strong&gt;InfoQ中文站&lt;/strong&gt; 发布于 		2008年11月12日 上午12时46分&lt;/p&gt;
社区&lt;a href="http://www.infoq.com/cn/architecture" rel="no-follow" name="architecture"&gt;Architecture&lt;/a&gt;,&lt;a href="http://www.infoq.com/cn/agile" rel="no-follow" name="agile"&gt;Agile&lt;/a&gt;,&lt;a href="http://www.infoq.com/cn/java" rel="no-follow" name="java"&gt;Java&lt;/a&gt;,&lt;a href="http://www.infoq.com/cn/ruby" rel="no-follow" name="ruby"&gt;Ruby&lt;/a&gt;,&lt;a href="http://www.infoq.com/cn/dotnet" rel="no-follow" name="dotnet"&gt;.NET&lt;/a&gt;,&lt;a href="http://www.infoq.com/cn/soa" rel="no-follow" name="soa"&gt;SOA&lt;/a&gt;主题&lt;a href="http://www.infoq.com/cn/infoqAnnouncements" rel="no-follow" name="infoqAnnouncements"&gt;InfoQ声明&lt;/a&gt;,&lt;a href="http://www.infoq.com/cn/enterprise-architecture" rel="no-follow" name="enterprise-architecture"&gt;企业架构&lt;/a&gt;标签&lt;a href="http://www.infoq.com/cn/InfoQ" rel="no-follow" name="InfoQ"&gt;InfoQ&lt;/a&gt;,&lt;a href="http://www.infoq.com/cn/architect" rel="no-follow" name="architect"&gt;《架构师》月刊&lt;/a&gt;
&lt;p&gt;&lt;img src="http://www.infoq.com/resource/minibooks/architect-nov/zh/cover/arch_11_big.jpg" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;篇首语&lt;br /&gt; ──由壹基金的专业性想到的&lt;/h2&gt;
&lt;p&gt;在西安出差时，恰逢凤凰卫视播放李连杰壹基金会为其评选出来的&amp;ldquo;典范工程&amp;rdquo;颁奖。观看整个晚会过程后，再联想到其一直以来所坚持的专业性，我不禁浮想联翩，想得最多的自然还是目前国内技术社区的发展状况。&lt;/p&gt;
&lt;p&gt;记得在汶川大地震时，李连杰的壹基金团队也参与了救援，不过与其他类似的救援组织有所不同的是，与他们同去的还有德勤会计师事务所。据报道，其实从 壹基金成立的那天起，他们就特别注重对基金的专业化管理，从而使得自己在民众的心中更显中立和公正性。相比于那些屡屡爆出救灾资金被私吞或者被滥用的其他 基金会而言，壹基金的做法无疑高人一筹。而在这次的&amp;ldquo;典范工程&amp;rdquo;颁奖晚会上，壹基金再次彰显其公正的一面，为了选出最具有说服力的&amp;ldquo;典范&amp;rdquo;，他们邀请了多 位口碑好、专业强的评委，如希望工程创始人、南都基金会秘书长徐永光等，面试过程也是非常严格。事实证明这些站在讲台上的组织确实都令人折服！&lt;/p&gt;
&lt;p&gt;以他人之例，可以反思我们手中所做的事情。做网站难，做技术社区更难，我想这是很多社区创始人的同感。当然其中有很多客观的原因，比如相比于欧美国 家，我们的IT产业大环境还不是很理想，专业人群的基数也不够大等等。但我想提醒的还是主观方面的原因，尤其是专业性方面。以从事技术社区的编辑记者为 例，我们的很多&amp;ldquo;专业人士&amp;rdquo;对技术缺少最基本的了解，所以在一些专家见面会上，常见我们的记者大人们问出一些让人哭笑不得的问题。究其客观原因，是因为技 术社区的特点决定了服务于这个社区的编辑记者需要具备技术和文学的复合能力；究其主观原因，是因为这样的复合人才确实稀少，为了缩减成本，某些社区只好退 而求其次，请一些文采略好但不懂技术的人来担大梁。并不是说这样就不可以，只是专业性也许稍微差了点。&lt;/p&gt;
&lt;p&gt;再说一下国内技术社区的特点，&amp;ldquo;大而全&amp;rdquo;是其中多数社区的一个特点，原因其实也很简单，商务所迫或者追逐利益所致。只要是客户感兴趣的，都马上设置 相应的栏目。殊不知，专业的内容如果没有专业的人才来打理，那结果只能是遗笑大方。那么有没有什么解决的办法？研究一下壹基金的架构，人家主动邀请德勤来 做监督，我们是不是也应该给自己带个紧箍咒什么的，让自己将主要精力就放在对读者最有价值的事情上？这样一旦脑袋发热，紧箍咒就能提醒一下&amp;ldquo;要专注从事 &amp;rdquo;。想起在做InfoQ中文站的过程中，我常想如果中文站也如国内其他的网站那么大该多好。就此事与Floyd聊起时，他常会嘿嘿一笑说，&amp;ldquo;我们目前只关 注企业软件开发领域&amp;rdquo;。现在反思，也许这就是为什么InfoQ在不到两年半的时间里就能为全球中高端技术人员所熟知和喜欢的原因吧。&lt;/p&gt;
&lt;p&gt;回到本期的《架构师》试刊第二期，相比于上期，我们在内容的选择安排和版式上都根据读者的意见重新做了修正，比如将&amp;ldquo;人物专访&amp;rdquo;放在最前位置，以使 读者在最短的时间内阅读到技术专家的观点；将&amp;ldquo;新品推荐&amp;rdquo;的内容进行缩减，仅提供摘要性文字以提高信息量等；将段间距进行调整，以使得阅读过程更加轻松 等。&amp;ldquo;细节决定成败&amp;rdquo;，我们希望基于InfoQ中文站的专业内容，《架构师》能够一步步成为中文社区架构师、项目经理、团队领导者和高级软件工程师等朋友 喜欢的电子刊物！&lt;/p&gt;
&lt;p&gt;霍泰稳&lt;/p&gt;
&lt;h2&gt;免费下载阅读&lt;/h2&gt;
&lt;p&gt;欢迎您 	 		&lt;a href="http://www.infoq.com/resource/minibooks/architect-nov/zh/pdf/architect-nov-by-infoq.pdf" rel="no-follow"&gt;免费下载这本书（PDF）&lt;/a&gt; ，并为我们提出宝贵的建议。&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4801</guid><pubDate>Thu, 13 Nov 2008 11:17:23 GMT</pubDate></item><item><title>OpenBSD 相册</title><link>http://n23.appspot.com/blog/post/4601</link><description>&lt;p&gt;&lt;a href="http://www.douban.com/photos/album/10925176/" rel="no-follow"&gt;http://www.douban.com/photos/album/10925176/&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.douban.com/photos/album/12598413/" rel="no-follow"&gt;http://www.douban.com/photos/album/12598413/&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.douban.com/photos/album/12598603/" rel="no-follow"&gt;http://www.douban.com/photos/album/12598603/&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.douban.com/photos/album/12625183/" rel="no-follow"&gt;http://www.douban.com/photos/album/12625183/&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4601</guid><pubDate>Mon, 10 Nov 2008 01:06:04 GMT</pubDate></item><item><title>The Best Cheat Sheets for Web Developers</title><link>http://n23.appspot.com/blog/post/4405</link><description>&lt;p&gt;&lt;strong&gt;1. jQuery Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.gscottolson.com/weblog/2008/01/11/jquery-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/jQuery.png" alt="jQuery Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Mootools Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mediavrog.net/blog/2008/06/11/mootools/mootools-12-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/mootools.png" alt="Mootools Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Ruby on Rails Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addedbytes.com/cheat-sheets/ruby-on-rails-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/ruby.png" alt="Ruby on Rails Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Django Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mercurytide.co.uk/whitepapers/django-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/django.png" alt="Django Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. YUI Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://developer.yahoo.com/yui/" rel="no-follow#cheatsheets" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/yui.png" alt="YUI Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Prototype Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thinkweb2.com/projects/prototype/prototype-1602-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/prototype.png" alt="Prototype Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. Scriptaculous Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.slash7.com/articles/2006/04/22/scriptaculous-cheat-sheet-1" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/scriptaculous.png" alt="Scriptaculous Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. extJs Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://huseyint.com/projeler/extjs-cheat-sheets/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/extjs.png" alt="extJs Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9. Javascript Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addedbytes.com/cheat-sheets/javascript-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/javascript.png" alt="Javascript Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10. HTML Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://floele.flyspray.org/htmlcheatsheet.pdf" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/HTML.png" alt="HTML Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11. CSS Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/css.png" alt="CSS Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;12. Mod_Rewrite Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/mod-rewrite.png" alt="Mod_Rewrite Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;13. Regular Expressions Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/regular.png" alt="Regular Expression Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;14. PHP Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addedbytes.com/cheat-sheets/php-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/php.png" alt="PHP Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;15. MySQL Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addedbytes.com/cheat-sheets/mysql-cheat-sheet/" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/mysql.png" alt="MySQL Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;16. SEO Cheat Sheet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.seomoz.org/blog/the-web-developers-seo-cheat-sheet" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.webappers.com/img/2008/11/seo.png" alt="SEO Cheat Sheet" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4405</guid><pubDate>Thu, 06 Nov 2008 09:34:21 GMT</pubDate></item><item><title>gcc</title><link>http://n23.appspot.com/blog/post/4209</link><description>&lt;p&gt;八月初 Mark Mitchell 发布了 &lt;a href="http://gcc.gnu.org/" rel="no-follow" target="_blank"&gt;GCC 4.3.2 版本&lt;/a&gt;，GCC是GNU编译集合，包括C, C++, Objective-C, Fortran, Java, and Ada编译器等。从这里下载最新的GCC: &lt;a href="http://gcc.gnu.org/mirrors.html" rel="no-follow" target="_blank"&gt;http://gcc.gnu.org/mirrors.html&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://gcc.gnu.org/img/gccegg-65.png" alt="" /&gt; &lt;br /&gt; &lt;br /&gt;让我们了解一下GCC 4： &lt;br /&gt; &lt;br /&gt;在过去的几年中，GNU Compiler Collection (GCC)一直在做GCC 3 到 GCC 4 的主要版本转换。GCC 4是一个重要的版本，GCC 4 新增了很多新的最优化框架(和新的中间代码生成)，新的架构和语言支持，多种新属性和选项变化。了解GCC 4新的属性和它们的优点很有必要。 &lt;br /&gt; &lt;br /&gt;GCC是所有开发的基石，不管是对开源世界和闭源世界。它让操作系统和架构能够运行。当一个新的处理器出现，它必须依赖一个GCC版本支持(GCC在后台为它提供代码生成)。GCC也让开源操作系统Linux得以运行，让Linux进入嵌入开发领域成为现实&amp;hellip;&amp;hellip; &lt;br /&gt; &lt;br /&gt;但是GCC并不是静止的，新的处理器架构不停的出现，新的研究发现更好的方式来生成最优化代码，所以GCC也在一直在发展中，并且成功的发布了新的主要版本GCC 4。本文将浏览GCC的核心修改，让你熟悉新的编译标准。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;首先简短复习一下的GCC历史：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;GCC 最初是GNU C Compiler，由大名鼎鼎的 Richard Stallman 同学 在1987年首次发布。Richard开始这个项目于1984年，期望建立一个免费的C编译器，能够被使用和修改。GCC 最初跑在早期的Sun和DEC VAX系统上。 &lt;br /&gt; &lt;br /&gt;作为一个开源的编译器(意味着源代码是公开的)，其他开发者也在热心帮助修复bug，更重要的是升级GCC支持新的语言和其他目标架构。不久以后，它的名称变成GNU Compiler Collection，它已经支持多种语言和最流行的架构。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;GCC发布历史：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.ibm.com/developerworks/linux/library/l-gcc4/figure1.gif" alt="" /&gt; &lt;br /&gt; &lt;br /&gt;今天GCC已经成为最流行的编译器，支持Ada, Fortran, the Java&amp;amp;trade; language,&amp;nbsp; C 的变种 (C++ 和 Objective-C)，以及覆盖了最大范围的处理器架构(支持30种处理器家族)，GCC源代码移植到了超过60种平台，也是目前现存的最复杂的开源 系统，GCC现在拥有大概150万行源代码。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;在开始之前简单了解GCC的基本架构：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;编译器是一种pipeline管道架构，通过不同的层次为不同类型的数据进行通讯(见下图)。前台编译器针对特殊语言，包括特定语言的语法分析 器，解析为树状结构和中间状态代码(使用注册转换语言Register Transfer Language：RTL)。后台编译器提供与语言无关的解析和针对特定目标架构的创建结构。为了达到这个目标，最优化使用RTL创建更快速或者更简洁代 码(如果可能，两者同时兼顾)。最优化的RTL被代码生成器获取，然后生成目标代码。 &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.ibm.com/developerworks/linux/library/l-gcc4/figure2.gif" alt="" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;GCC 4的核心转换：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;GCC 4 提供许多标准编译器组件的修改，最大更改是通过引进树静态单一分配(tree Static Single Assignment:SSA)格式对代码最优化的支持。GCC 4 对于 警告warning和错误error的展示是非常彻底的(事实上，一些特定的警告信息在GCC 4中已经显示为错误)。GCC 4的一个退步是它并不是GCC 3创建对象的字节编译，这意味着GCC 3编译的代码必须通过GCC 4重新编译。不幸的是，这样的成本就要增加。 &lt;br /&gt; &lt;br /&gt;让我们看看GCC 4 的主要进步。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;4.0 发布系列：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;4.0系列(4.0.4是最后版本)，是GCC 进入 第4版的第一步，所以并不推荐使用在生产环境中，这个版本包含很多修改，一个是前面介绍的树静态单一分配SSA，另外一个是autovectorization自动矢量化。 &lt;br /&gt; &lt;br /&gt;在GCC 4之前，中间代码名叫Register Transfer Language (RTL)，RTL是一个低层的代码，非常类似于汇编语言(从LISP S-expressions获得灵感)。RTL的问题是它对转换成最终目标提供了优化，确失了解释信息。当需要支持更好的分析和优化的时候，Tree SSA 设计用来同时独立于语言和目标。 &lt;br /&gt; &lt;br /&gt;Tree SSA 引入了两个新的中间代码，第一个叫 GENERIC ，这是一个普通的树结构，用来形成前台树格式。 GENERIC 树转换为 GIMPLE格式和子序列控制流图来支持基于SSA的最优化。最后SSA树转换为RTL，这用于后台来做最终目标的代码生成。简单的说，就是，引入 Tree SSA的好处就是提供新的中间代码让高层和低层的最优化都做到最好。 &lt;br /&gt; &lt;br /&gt;GCC 4另外一个有趣的变化是添加了loop vectorizer 循环矢量(也是基于Tree SSA框架)。Autovectorization 自动矢量化让编译器标识代码内的分级进程循环，让目标处理器能够获得矢量指令的优势。结果是获得更加严格和高效的目标代码。另一个基于循环优化的是 Swing Modulo Scheduling (SMS),通过减少构造层平行数量来构建最小循环指令管道。 &lt;br /&gt; &lt;br /&gt;最后 4.0 系列引入很多C 和 C++ 修改，新的Fortran 前台，支持Fortran 90 和 95 (而不是古老的Fortran 77，GCC 3支持)。新的Ada 2005功能，支持更多Ada新的架构。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;4.1发布系列：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;改进的属性支持和更精确的分支可能性预判。两个很有用的优化是更好的内联支持和减少本地指令缓存能力。如果函数是内联方式，编译器不再频繁执行。 而且热点调用区域将更可能通过内联来保持代码数量尽可能小，获得内联函数的优势。GCC能够帮助分段函数进入热点或者冷静区域。保持热点函数放在一起，获 得更好的指令缓存。 &lt;br /&gt; &lt;br /&gt;前台做了系列更新，包括支持Objective-C++。同时有大量针对java核心库(libgc)的更新。后台引入对IBM&amp;amp;reg; System z&amp;amp;trade; 9-109 处理器支持，包括支持128位指令代码，Electronics Engineers (IEEE)浮点数，和内建原子内存存取能力。如果这些还不够吸引眼球，那么后台现在还能够发出保护堆栈攻击的指令，这意味着，如果缓冲buffer溢出 被检测到，将重新排列保护指针不会崩溃。一些内建功能也被更新，用来保护缓冲buffer不会被过量请求占用。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;4.2发布系列：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;4.2版本继续支持更好的优化，同时包括语言和处理器架构的进步。后台更新包括对Sun的UltraSPARC T1处理器支持(代码名称Niagara)，同时支持Broadcom的SB-1A MIPS 芯片。前台修补了C++可视化处理机制，支持Fortran 2003 输入/输出流扩展。但是4.2最有趣的更新是添加了C，C++和Fortran编译器的OpenMP功能。 &lt;br /&gt; &lt;br /&gt;OpenMP是一个多线程实现，允许编译器生成平行任务和数据代码。 &lt;br /&gt; &lt;br /&gt;OpenMP一个概念：代码能够通过区域注释，这块区域平行处理能够被处理器直接使用。代码转换成多线程程序，用来处理代码块存在，然后在代码块结束后进入每个线程。 &lt;br /&gt; &lt;br /&gt;下图提供了处理器如何工作的示例。 &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.ibm.com/developerworks/linux/library/l-gcc4/figure3.gif" alt="" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;4.3发布系列：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;这个发布系列显示功能和支持架构的加速进步 (比如很多陈旧的架构支持被删除)。新的语言支持，比如添加对Fortran 2003支持。新的处理器支持，包括支持Coldfire 处理器家族， IBM System z9 EC/BC 处理器，Cell broadband engine 晶格宽带引擎架构的互协作处理器单元(Synergistic Processor Unit :SPU)，支持SmartMIPS等。你将发现Thumb2的编译和库支持(简洁的ARM指令)以及对ARMv7架构支持，支持 Core2 处理器和Geode处理器家族。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;4.3 发布以后：&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;已经开始4.4版本开发了，这个版本即将发布，在4.4版本中OpenMP的3.0版本规格将应用到C, C++, 和 Fortran中。 &lt;br /&gt; &lt;br /&gt;编译器现在允许你定义一个在函数层进行优化的级别，(代替文档层，原先是缺省设置)。这个功能提供优化参数，提供独立的选项做优化。 &lt;br /&gt; &lt;br /&gt;最后处理器将添加Picochip支持，这是一个16位多核处理器。 &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;GCC的未来？&lt;/strong&gt; &lt;br /&gt; &lt;br /&gt;GCC的未来是光明的。GCC将支持更多的处理器和架构，GCC几乎涵盖整个开发语言。开发方面还支持一系列不同的语言，比如 Mercury，GHDL(一个用于VHDL的GCC前台语言)，和 统一的并行C语言(Unified Parallel C language :UPC)。 &lt;br /&gt; &lt;br /&gt;由于GCC的进步，几乎所有的软件将从GCC的进步中获得好处(从Linux和Berkeley软件到Apache等)，通过GCC 4进行软件编译将更加简洁和快速。           &lt;br /&gt;&lt;br /&gt;来自：&lt;a href="http://www.ibm.com/developerworks/linux/library/l-gcc4/index.html" rel="no-follow" target="_blank"&gt;ibm.com&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4209</guid><pubDate>Thu, 06 Nov 2008 09:27:32 GMT</pubDate></item><item><title>firebug</title><link>http://n23.appspot.com/blog/post/4208</link><description>&lt;p&gt;&lt;a href="http://wiki.ccw.com.cn/index.php/Firefox" rel="no-follow" target="_blank"&gt;&lt;strong&gt;Firefox&lt;/strong&gt;&lt;/a&gt;扩展Firebug是一个全功能的Web 应用程序调试器，可以协助Web黑客洞悉复杂的Web 应用程序的内部工作机制。它有两种版本：一种可以跨&lt;strong&gt;&lt;a href="http://wiki.ccw.com.cn/%e6%b5%8f%e8%a7%88%e5%99%a8" rel="no-follow" target="_blank"&gt;&lt;strong&gt;浏览器&lt;/strong&gt;&lt;/a&gt;&lt;/strong&gt;使用的组件Firebug Lite，另一种是专用于专用于&lt;a href="http://wiki.ccw.com.cn/%e7%81%ab%e7%8b%90" rel="no-follow" target="_blank"&gt;&lt;strong&gt;火狐&lt;/strong&gt;&lt;/a&gt;浏览器的扩展Firebug。本文将着重向读者介绍前者的用法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、简介&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;浏览器扩展Firebug提供了一个集成环境，我们能够在其中对感兴趣的Web 应用程序进行的全面的分析（参见图1）。它提供了许多功能，可以探索DOM结构、动态地修改HTML 代码、跟踪和调试JavaScript代码、监视网络请求和响应等等。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://imgs.ccw.com.cn/resources/2008_10/2008_10_31/200810314301225382836971.jpg" alt="" height="364" width="554" /&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图1&amp;nbsp; 浏览器扩展Firebug&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;二、利用Firebug控制台劫持函数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Firebug控制台可以用来计算表达式。作用如同命令行JavaScript解释器。在控制台中，我们不仅可以输入JavaScript表达式(例如，Alert (&amp;amp;lsquo;Message&amp;amp;rsquo;);)，而且还能接收错误消息。如下图所示：&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;img src="http://imgs.ccw.com.cn/resources/2008_10/2008_10_31/200810310291225382836971.jpg" alt="" height="391" width="560" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图2&amp;nbsp; Firebug控制台&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;您也可以动态插入代码，举例来说，如果要测试一个Web 应用程序，该程序有一个从窗口对象导出的方法，称为performRequest。应用程序使用该方法从客户端发送请求到&lt;a href="http://www.ccw.com.cn/server/topic/stor/" rel="no-follow" target="_blank"&gt;&lt;strong&gt;服务器&lt;/strong&gt;&lt;/a&gt;。我们更感兴趣的可能是这个函数请求的信息，所以我们将在控制台中提供下列命令来劫持该方法：&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;p&gt;window._oldPerformRequest = window.performRequest;&lt;/p&gt;&lt;p&gt;window.performRequest = function () { console.log(arguments);&lt;/p&gt;&lt;p&gt;window._oldPerformRequest.&lt;a href="http://wiki.ccw.com.cn/AP" rel="no-follow" target="_blank"&gt;&lt;strong&gt;ap&lt;/strong&gt;&lt;/a&gt;ply(window, arguments) }&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;上述代码实际上将用我们自己的函数替换原先的performRequest函数，我们的函数执行时将在控制台中列出所有参数。当函数调用结束时，我 们将代码流程重定向到oldPerformRequest定义的原先的performRequest上，它将执行要求的操作。现在，我们已经明白如何在无 需改写Web 应用程序的方法的情况下来劫持函数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、利用Firebug浏览和动态修改HTML元素&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;许多Web开发人员和设计者经常忽视HTML 源代码的可读性，尤其是用所见即所得的编辑器产生的页面。这会加剧我们审查其源代码的难度，这时，我们就需要使用其他一些工具来重新组织页面的各个部分。当然，我们可以使用DOM In&lt;a href="http://wiki.ccw.com.cn/SPEC" rel="no-follow" target="_blank"&gt;&lt;strong&gt;spec&lt;/strong&gt;&lt;/a&gt;tor来探索这些结构欠佳的HTML 源代码，而Firebug也能达到同样的目的，下面是Firebug的HTML视图。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;img src="http://imgs.ccw.com.cn/resources/2008_10/2008_10_31/200810318491225382836971.jpg" alt="" height="248" width="555" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图3&amp;nbsp;&amp;nbsp; Firebug的HTML视图&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;如图3所见，可以选择并展开当前视图中的每个HTML 元素。当鼠标停在某个元素上的时候，浏览器就会高亮显示对应元素。在右边的窗口，显示了关于式样、布局和DOM 特性的信息。DOM信息极为有用，当您想查询各种不同类型的属性可用时，几乎与DOM Inspector一样。此外，我们也可以用它探索应用程序运行机制。举例来说，AJAX应用开发人员经常会为图像、链接及其他类型的html 元素添加附加的属性，而这些属性和方法可能是应用程序逻辑的关键部分。&lt;/p&gt;
&lt;p&gt;HTML视图还能用于动态地修改应用程序文档的结构。我们可以通过按下键盘上的删除键来删除所选定的元素，或者修改各个元素的属性，方法是在元素属 性上双击并设置它的值。注意，HTML 结构的改变可能对页面更新事件不起作用。如果希望变化固定下来，可以使用GreaseMonkey脚本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、利用Firebug调试JavaScript脚本&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ajax 应用程序通常涉及JavaScript、&lt;a href="http://wiki.ccw.com.cn/XML" rel="no-follow" target="_blank"&gt;&lt;strong&gt;XML&lt;/strong&gt;&lt;/a&gt;和 按需信息检索。它们的规模常常超过正常应用程序，并且运行起来很像是桌面应用程序。因为大量使用JavaScript，所以您将发现标准漏洞估计程序将无 法覆盖所有可能的攻击方式。就像二进制程序测试一样，我们需要使用调试器来跟踪代码、分析程序结构和调查潜在的问题，Firebug为我们提供了所有这些 功能，下图向我们展示了Firebug脚本调试器视图。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://imgs.ccw.com.cn/resources/2008_10/2008_10_31/200810311541225382836971.jpg" alt="" height="303" width="557" /&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图4&amp;nbsp; Firebug脚本调试视图&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;在图4中我们可以看到一个断点，其位于第2行。 断点是些伪指令，用来通知JavaScript解释器当代码抵达这些断点时停止/中止该进程。一旦程序暂停，我们就可以查看存放在全局、局部变量中的当前 数据，甚至更新它们。我们不仅可以通过它来了解程序正在干什么，并且还能取得对应用程序的完全控制。&lt;/p&gt;
&lt;p&gt;在图4的右边，您可以看到监视和断点列表。断点列表包含我们在当前调试的代码中设置的全部断点。您可以迅速禁用和启用断点，但是却无需知道断点的精确位置。&lt;/p&gt;
&lt;p&gt;监控列表提供了一个机制来监视DOM结构中的变化。举例来说，如果想知道某个的值在程序运行过程中的变化情况，只须简单创建一个相应的的监控条目即可。&lt;/p&gt;
&lt;p&gt;DOM是存放Web 应用程序的内容的地方。DOM结构提供了动态编辑页面的所有必要功能，比如去除和插入html 元素、初始化计时器、创建和删除Cook&lt;a href="http://wiki.ccw.com.cn/IE" rel="no-follow" target="_blank"&gt;&lt;strong&gt;ie&lt;/strong&gt;&lt;/a&gt;等等。DOM 是所有的Web 应用程序最为复杂的组件，所以对它的检查也是最难的。然而，Firebug 能够提供有用的DOM 视图，它的使用跟DOM In&lt;a href="http://wiki.ccw.com.cn/SPEC" rel="no-follow" target="_blank"&gt;&lt;strong&gt;spec&lt;/strong&gt;&lt;/a&gt;tor一样。图5展示了Firebug的DOM 视图。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://imgs.ccw.com.cn/resources/2008_10/2008_10_31/200810318211225382836971.jpg" alt="" height="323" width="552" /&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图 5&amp;nbsp; Firebug的DOM视图&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;如上图所示，DOM包含一个长长的元素表。我们可以查看当前可用的一些函数。通过使用Firebug的DOM 视图，我们可以检查当前打开的应用程序的各个部分。我们可以在一个树状结构中查看当前可用的所有属性和对象，并可以展开这些元素和对象来查看他们的子属性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;五、利用Firebug监视网络&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Firebug最强大的的特性之一是网络流量监控功能。当我们想要监视应用程序内部发出的Web请求时，这个视图极为有用。当 然，LiveHttpHeaders扩展也可用来监视网络，但是它会把全部请求显示在一个列表中，而Firebug却可以详细查看每个请求的每个字符。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://imgs.ccw.com.cn/resources/2008_10/2008_10_31/200810316001225382836971.jpg" alt="" height="360" width="549" /&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图6&amp;nbsp; Firebug的网络视图&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;在网络视图的顶部，我们可以选择不同类型的网络活动，在上图中我们要查看所有请求。 然而，您可以只列出特定对象发出的请求。Firebug一个更为有趣的特性是该扩展将会记录全部网络活动，不管它是否打开。这个特性跟扩展 LiveHttpHeaders有所不同，后者只有当它打开时才会记录网络事件。然而，与LiveHttpHeaders扩展不同的是，Firebug不 能重放网络活动，但是将能更细致的观察网络流量。下图展示了Firebug正在检查请求和响应头以及发送的参数。&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://imgs.ccw.com.cn/resources/2008_10/2008_10_31/200810313111225382836987.jpg" alt="" height="364" width="548" /&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图7&amp;nbsp; 利用Firebug查看网络请求&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;六、Firebug Lite简介&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Firebug Lite是一个跨&lt;strong&gt;&lt;a href="http://wiki.ccw.com.cn/%e6%b5%8f%e8%a7%88%e5%99%a8" rel="no-follow" target="_blank"&gt;&lt;strong&gt;浏览器&lt;/strong&gt;&lt;/a&gt;&lt;/strong&gt;的组件，能够轻易地嵌入到需要测试的应用程序中它是专为开发人员而非安全研究人员设计的，并且没有&lt;a href="http://wiki.ccw.com.cn/index.php/Firefox" rel="no-follow" target="_blank"&gt;&lt;strong&gt;Firefox&lt;/strong&gt;&lt;/a&gt;扩展版本那样多的用途。然而，它在某些情况下是非常有帮助的，比如需要在Internet E&lt;a href="http://wiki.ccw.com.cn/Athlon+XP" rel="no-follow" target="_blank"&gt;&lt;strong&gt;xp&lt;/strong&gt;&lt;/a&gt;lorer、&lt;a href="http://wiki.ccw.com.cn/Opera" rel="no-follow" target="_blank"&gt;&lt;strong&gt;Opera&lt;/strong&gt;&lt;/a&gt;及其他不支持&lt;a href="http://wiki.ccw.com.cn/Mozilla" rel="no-follow" target="_blank"&gt;&lt;strong&gt;Mozilla&lt;/strong&gt;&lt;/a&gt;平台的跨平台安装（XPI）型文件的浏览器中调试应用程序时。&lt;/p&gt;
&lt;p&gt;使用firebug lite之前，必须在需要调试的应用程序内嵌入一些脚本标签。我们必须在使用FireBug的应用程序页面内放入下列脚本标签：&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt; language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;src=&amp;quot;/path/to/firebug/firebug.js&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;要跟踪应用程序中的某个变量时，可以使用控制台对象。举例来说，如果我们想要跟踪下列循环中变量item的变化，可以使用下列代码：&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;p&gt;function (var item in document)&lt;/p&gt;&lt;p&gt;console.log(item);&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;七、结束语&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Firefox扩展Firebug是一个全功能的Web 应用程序调试器，可以协助Web黑客洞悉复杂的Web 应用程序的内部工作机制。本文详细介绍了在安全测试过程中的使用方法，如劫持函数、浏览和动态修改HTML元素、操作DOM、监视网络以及调试脚本等等。 最后，我们还对Firebug Lite做了简要介绍。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://soft.ccw.com.cn/news/htm2008/20081031_534852.shtml&lt;/p&gt;</description><author>No.0023</author><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4208</guid><pubDate>Thu, 06 Nov 2008 04:42:09 GMT</pubDate></item><item><title>Python FAQ from newsmth.net</title><link>http://n23.appspot.com/blog/post/4404</link><description>&lt;p&gt;本FAQ内容包含：&lt;br /&gt; 0.Python 资源索引&lt;br /&gt; 1.Python的版本和下载方式&lt;br /&gt; 2.推荐书籍&lt;br /&gt; 3.推荐站点&lt;br /&gt; 4.Python有什么IDE&lt;br /&gt; 5.哪有Python电子书&lt;br /&gt; 6.使用easy_install安装第三方程序包&lt;br /&gt; 7.Python需要编译么？如何做成.exe文件&lt;br /&gt; 8.如何在代码中使用中文&lt;br /&gt; 9.Python有哪些图形库&lt;br /&gt; 10.一些网址&lt;br /&gt; 11.filter, map, reduce, zip函数&lt;br /&gt; 12.访问GAE，修改hosts文件的方法&lt;br /&gt; &lt;br /&gt; 0.Python 资源索引&lt;br /&gt; &amp;nbsp;&amp;nbsp;&lt;a href="http://wiki.woodpecker.org.cn/moin/ObpLovelyPython/LpyAttach2ResIdx" rel="no-follow" target="_blank"&gt;http://wiki.woodpecker.org.cn/mo ... on/LpyAttach2ResIdx&lt;/a&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;大多数资料都在上面了，目录如下:&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1. Python 资源索引&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;1. Py 语言自身&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;2. Py 文本处理&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;3. Py 数据库应用&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;4. Py 网络应用&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;5. Py 嵌入系统&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;6. Py 多媒体支持&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;7. Py 应用扩展&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;8. Py 科学计算&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;9. Py 行业应用&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;10. Py 教育支持&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;11. Py 集锦资源&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;2. 资源回收&lt;br /&gt; &lt;br /&gt; 1.Python的版本和下载方式&lt;br /&gt; A.至2008年10月，Python最新的版本为2.6。Python3000尚处于测试状态。Python的官方下载地址是：&lt;br /&gt; &lt;a href="http://www.python.org/download/" rel="no-follow" target="_blank"&gt;http://www.python.org/download/&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; 2.推荐书籍：&lt;br /&gt; A.1、《A Byte of Python(简明python教程)》&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.byteofpython.info/language/chinese/index.html" rel="no-follow" target="_blank"&gt;http://www.byteofpython.info/language/chinese/index.html&lt;/a&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;2、《Dive into Python(Python研究)》&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.woodpecker.org.cn/diveintopython/index.html" rel="no-follow" target="_blank"&gt;http://www.woodpecker.org.cn/diveintopython/index.html&lt;/a&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;3、《Learning Python》&lt;br /&gt; &amp;nbsp;&amp;nbsp;4、《Programming Python》&lt;br /&gt; &amp;nbsp;&amp;nbsp;第一本书非常简短，也有中文译本&amp;ldquo;简明Python教程&amp;rdquo;，是想速成(几小时)者的首选。另外在&lt;a href="http://www.python.org/doc" rel="no-follow" target="_blank"&gt;http://www.python.org/doc&lt;/a&gt;有&lt;br /&gt; 很多官方的文档和教程，非常不错。&lt;br /&gt; &lt;br /&gt; 3.推荐站点:&lt;br /&gt; A.1、啄木鸟社区&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.woodpecker.org.cn/" rel="no-follow" target="_blank"&gt;http://www.woodpecker.org.cn/&lt;/a&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;2、Python@Newsmth&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;(wahahaha~~~)&lt;br /&gt; &amp;nbsp;&amp;nbsp;3. 中文用户组&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;CPUG:&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://python.cn/" rel="no-follow" target="_blank"&gt;http://python.cn&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; [email]python-&lt;a href="mailto:chinese@lists.python.cn"&gt;chinese@lists.python.cn&lt;/a&gt;[/email] (邮件列表) //已经停止服务，转CPyUG吧。&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;CPyUG: 华蟒用户组&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="https://groups.google.com/group/python-cn" rel="no-follow" target="_blank"&gt;https://groups.google.com/group/python-cn&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;PyTUG: Python 語言台灣使用者群組&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="https://groups.google.com/group/pythontw" rel="no-follow" target="_blank"&gt;https://groups.google.com/group/pythontw&lt;/a&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;4. 中文论坛：&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;1. Python@CU&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://bbs.chinaunix.net/forumdisplay.php?fid=55" rel="no-follow" target="_blank"&gt;http://bbs.chinaunix.net/forumdisplay.php?fid=55&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; 4.Python有什么IDE&lt;br /&gt; A.Python官网有一份IDE列表，很全：&lt;br /&gt; &lt;a href="http://wiki.python.org/moin/IntegratedDevelopmentEnvironments" rel="no-follow" target="_blank"&gt;http://wiki.python.org/moin/IntegratedDevelopmentEnvironments&lt;/a&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;如果看了上面的列表还是不知道自己该选哪个，推荐看置底的&amp;ldquo;Python IDE比较与推荐&amp;rdquo;&lt;br /&gt; &lt;br /&gt; 5.哪有Python电子书？&lt;br /&gt; A.精华区x-5收录了一些经典的电子书。下载请用web方式。&lt;br /&gt; &amp;nbsp;&amp;nbsp;强烈推荐开放图书计划：&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://code.google.com/p/openbookproject/" rel="no-follow" target="_blank"&gt;http://code.google.com/p/openbookproject/&lt;/a&gt; 聚集大量的Python技术图书.&lt;br /&gt; &lt;br /&gt; 另外这两个地方有很多python的电子书：&lt;br /&gt; &lt;a href="http://www.longtengwang.com/Soft/yiyong/Python/Index.html" rel="no-follow" target="_blank"&gt;http://www.longtengwang.com/Soft/yiyong/Python/Index.html&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.pythonid.com/html/wendangxiazai/index.html" rel="no-follow" target="_blank"&gt;http://www.pythonid.com/html/wendangxiazai/index.html&lt;/a&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;想看纸质书，在书店里没有找到，那么最简单的办法是去淘宝网。&lt;br /&gt; &lt;br /&gt; 6. 使用easy_install安装第三方程序包:&lt;br /&gt; A.参考：&lt;a href="http://blog.chinaunix.net/u1/42287/showart_405102.html" rel="no-follow" target="_blank"&gt;http://blog.chinaunix.net/u1/42287/showart_405102.html&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html" rel="no-follow" target="_blank"&gt;http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;1. 安装&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;wget -q &lt;a href="http://peak.telecommunity.com/dist/ez_setup.py" rel="no-follow" target="_blank"&gt;http://peak.telecommunity.com/dist/ez_setup.py&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;sudo python ez_setup.py&lt;br /&gt; &amp;nbsp;&amp;nbsp;2. 使用&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;sudo easy_install CherryPy&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;sudo easy_install -Z web.py-0.21.tar.gz&lt;br /&gt; &lt;br /&gt; B. 想看看有什么第三方程序包：&lt;a href="http://pypi.python.org/pypi" rel="no-follow" target="_blank"&gt;http://pypi.python.org/pypi&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; 7.Python需要编译么？如何做成.exe文件？&lt;br /&gt; A.Python不需要用户专门去编译它，第一次运行时，在运行过程中，Python的解析器会自动将代码编译为.pyc。一般来讲，运 &lt;br /&gt; 行结束后不会自动删除.pyc文件。&lt;br /&gt; &amp;nbsp;&amp;nbsp;在Windows下，可以用py2exe等工具将代码编译为.exe文件。原理是py2exe会将必要的python解析器也打包进去。所以做成的&lt;br /&gt; .exe有几M，如果有图形界面，就会有十几M，而且运行速度不会有提升。&lt;br /&gt; &lt;br /&gt; 8.如何在代码中使用中文&lt;br /&gt; A.在Python2.5或之前的版本中，代码里默认是不能有中文的，包括注释。解决方法是在代码一开头加上：&lt;br /&gt; # -*- coding: gbk -*-&lt;br /&gt; 或&lt;br /&gt; # -*- coding: utf-8 -*-&lt;br /&gt; 或&lt;br /&gt; #coding=utf-8&lt;br /&gt; &amp;nbsp;&amp;nbsp;具体选哪一种看具体情况。一般来讲，如果不是网络编程，统一用utf-8就OK了，包括与MySQL的交互也可以用utf-8搞定。如&lt;br /&gt; 果是网络编译，特别是与FTP打交道，推荐使用gbk，可以省去很多麻烦。&lt;br /&gt; &amp;nbsp;&amp;nbsp;注意本法没有涉及不同编码的转换。&lt;br /&gt; &lt;br /&gt; 9.Python有哪些图形库&lt;br /&gt; A.常用的有tk/tcl, PyGtk，PyQt和wxPython。都是跨平台且开源的。第一个是Python自带的，但比较难用且难看。PyQt和&lt;br /&gt; wxPython都漂亮好用且文档/demo很棒，目前来看PyQt4比wxPython更胜一畴。&lt;br /&gt; &lt;br /&gt; 10. 一些网址&lt;br /&gt; Python:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.python.org/" rel="no-follow" target="_blank"&gt;www.python.org&lt;/a&gt;&lt;br /&gt; ActivePython:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.activestate.com/" rel="no-follow" target="_blank"&gt;www.activestate.com&lt;/a&gt;&lt;br /&gt; Stackless Python:&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.stackless.com/" rel="no-follow" target="_blank"&gt;www.stackless.com&lt;/a&gt;&lt;br /&gt; IronPython:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.ironpython.com/" rel="no-follow" target="_blank"&gt;www.ironpython.com&lt;/a&gt;&lt;br /&gt; PyPy:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; pypy.org&lt;br /&gt; JPython:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.jpython.org/" rel="no-follow" target="_blank"&gt;www.jpython.org&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; Django:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.djangoproject.com/" rel="no-follow" target="_blank"&gt;www.djangoproject.com&lt;/a&gt;&lt;br /&gt; Mod_Python:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.modpython.org/" rel="no-follow" target="_blank"&gt;www.modpython.org&lt;/a&gt;&lt;br /&gt; Webware:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.webwareforpython.org/" rel="no-follow" target="_blank"&gt;www.webwareforpython.org&lt;/a&gt;&lt;br /&gt; CherryPy:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.cherrypy.org/" rel="no-follow" target="_blank"&gt;www.cherrypy.org&lt;/a&gt;&lt;br /&gt; Web.py:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;webpy.org&lt;br /&gt; Zope:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.zope.org/" rel="no-follow" target="_blank"&gt;www.zope.org&lt;/a&gt;&lt;br /&gt; Turbogears:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.turbogears.org/" rel="no-follow" target="_blank"&gt;www.turbogears.org&lt;/a&gt;&lt;br /&gt; Google AppEngine:&amp;nbsp; &amp;nbsp; &lt;a href="http://code.google.com/appengine" rel="no-follow" target="_blank"&gt;http://code.google.com/appengine&lt;/a&gt;&lt;br /&gt; Twisted:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://twistedmatrix.com/" rel="no-follow" target="_blank"&gt;http://twistedmatrix.com&lt;/a&gt;&lt;br /&gt; Beautiful Soup:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://crummy.com/software/BeautifulSoup" rel="no-follow" target="_blank"&gt;http://crummy.com/software/BeautifulSoup&lt;/a&gt;&lt;br /&gt; PythonWeb:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.pythonweb.org/" rel="no-follow" target="_blank"&gt;www.pythonweb.org&lt;/a&gt;&lt;br /&gt; JabberPy:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://jabberpy.sourceforge.net/" rel="no-follow" target="_blank"&gt;http://jabberpy.sourceforge.net&lt;/a&gt;&lt;br /&gt; pyGoogle:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://pygoogle.sourceforge.net/" rel="no-follow" target="_blank"&gt;http://pygoogle.sourceforge.net&lt;/a&gt;&lt;br /&gt; libgmail:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://libgmail.sourceforge.net/" rel="no-follow" target="_blank"&gt;http://libgmail.sourceforge.net&lt;/a&gt;&lt;br /&gt; pyExpect:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://pexpect.sourceforge.net/" rel="no-follow" target="_blank"&gt;http://pexpect.sourceforge.net&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; MySQLdb:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://sourceforge.net/projects/mysql-python" rel="no-follow" target="_blank"&gt;http://sourceforge.net/projects/mysql-python&lt;/a&gt;&lt;br /&gt; PyGreSQL:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.pygresql.org/" rel="no-follow" target="_blank"&gt;www.pygresql.org&lt;/a&gt;&lt;br /&gt; psycopg:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.initd.org/pub/software/psycopg" rel="no-follow" target="_blank"&gt;www.initd.org/pub/software/psycopg&lt;/a&gt;&lt;br /&gt; cx_Oracle:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.cxtools.net/" rel="no-follow" target="_blank"&gt;www.cxtools.net&lt;/a&gt;&lt;br /&gt; SQLAlchemy:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.sqlalchemy.org/" rel="no-follow" target="_blank"&gt;www.sqlalchemy.org&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; scipy:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.scipy.org/" rel="no-follow" target="_blank"&gt;www.scipy.org&lt;/a&gt;&lt;br /&gt; NumPy:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://numpy.scipy.org/" rel="no-follow" target="_blank"&gt;http://numpy.scipy.org&lt;/a&gt;&lt;br /&gt; numarray:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.stsci.edu/resources/software_hardware/numarray" rel="no-follow" target="_blank"&gt;www.stsci.edu/resources/software_hardware/numarray&lt;/a&gt;&lt;br /&gt; matplotlib:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://matplotlib.sourceforge.net/" rel="no-follow" target="_blank"&gt;http://matplotlib.sourceforge.net&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; WxPython:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.wxpython.org/" rel="no-follow" target="_blank"&gt;www.wxpython.org&lt;/a&gt;&lt;br /&gt; PyGtk:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.pygtk.org/" rel="no-follow" target="_blank"&gt;www.pygtk.org&lt;/a&gt;&lt;br /&gt; PyQt:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://trolltech.com/products/qt" rel="no-follow" target="_blank"&gt;http://trolltech.com/products/qt&lt;/a&gt;&lt;br /&gt; Tkinter 3000:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://effbot.org/zone/wck.htm" rel="no-follow" target="_blank"&gt;http://effbot.org/zone/wck.htm&lt;/a&gt;&lt;br /&gt; PIL:&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;a href="http://www.pythonware.com/products/pil" rel="no-follow" target="_blank"&gt;www.pythonware.com/products/pil&lt;/a&gt;&lt;br /&gt; pyOpenGL:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://pyopengl.sourceforge.net/" rel="no-follow" target="_blank"&gt;http://pyopengl.sourceforge.net&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; pySoundic:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://pysonic.sourceforge.net/" rel="no-follow" target="_blank"&gt;http://pysonic.sourceforge.net&lt;/a&gt;&lt;br /&gt; pyMedia:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://pymedia.org/" rel="no-follow" target="_blank"&gt;http://pymedia.org&lt;/a&gt;&lt;br /&gt; FMOD:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://www.fmod.org/" rel="no-follow" target="_blank"&gt;http://www.fmod.org&lt;/a&gt;&lt;br /&gt; pyMIDI:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.cs.unc.edu/Research/assist/developer.shtml" rel="no-follow" target="_blank"&gt;http://www.cs.unc.edu/Research/assist/developer.shtml&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; Python Documentation Online: &lt;a href="http://pydoc.org/" rel="no-follow" target="_blank"&gt;http://pydoc.org&lt;/a&gt;, &lt;a href="http://docs.python.org/" rel="no-follow" target="_blank"&gt;http://docs.python.org&lt;/a&gt;&lt;br /&gt; Python-cn:&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;a href="http://python.cn/" rel="no-follow" target="_blank"&gt;http://python.cn&lt;/a&gt;&lt;br /&gt; Pythonic:&amp;nbsp; &amp;nbsp;&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;a href="http://www.woodpecker.org.cn/" rel="no-follow" target="_blank"&gt;http://www.woodpecker.org.cn&lt;/a&gt;&lt;br /&gt; The Daily Python-URL:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.pythonware.com/daily/index.htm" rel="no-follow" target="_blank"&gt;http://www.pythonware.com/daily/index.htm&lt;/a&gt;&lt;br /&gt; Python Package Index:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://pypi.python.org/" rel="no-follow" target="_blank"&gt;http://pypi.python.org&lt;/a&gt;&lt;br /&gt; Planet Python:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.planetpython.org/" rel="no-follow" target="_blank"&gt;http://www.planetpython.org&lt;/a&gt;&lt;br /&gt; Pythonite:&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;a href="http://www.pythonite.org/" rel="no-follow" target="_blank"&gt;http://www.pythonite.org&lt;/a&gt;&lt;br /&gt; Useless Python:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.uselesspython.com/" rel="no-follow" target="_blank"&gt;http://www.uselesspython.com&lt;/a&gt;&lt;br /&gt; Python Cookbook:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;a href="http://aspn.activestate.com/ASPN/Cookbook/Python" rel="no-follow" target="_blank"&gt;http://aspn.activestate.com/ASPN/Cookbook/Python&lt;/a&gt;&lt;br /&gt; Python Sidebar:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.edgewall.org/python-sidebar" rel="no-follow" target="_blank"&gt;http://www.edgewall.org/python-sidebar&lt;/a&gt;&lt;br /&gt; Python Source:&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://pythonsource.com/" rel="no-follow" target="_blank"&gt;http://pythonsource.com&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; 11.filter, map, reduce, zip函数&lt;br /&gt; 1. filter(function, sequence) 返回序列,为原序列中能使function返回true的值&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;gt;&amp;gt;&amp;gt;a=[1,2,3,4]&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;gt;&amp;gt;&amp;gt;filter(lambda x:x%2, a)&lt;br /&gt; &amp;nbsp; &amp;nbsp; [1, 3]&lt;br /&gt; 2. map(function, sequence, [sequence...]) 返回序列,为对原序列每个元素分别调用function获得的值.&lt;br /&gt; &amp;nbsp; &amp;nbsp; 可以传入多个序列,但function也要有相应多的参数,如&lt;br /&gt; &amp;nbsp; &amp;nbsp; map(lambda x,y,z:x+y+z,range(1,3),range(3,5),range(5,7))&lt;br /&gt; &amp;nbsp; &amp;nbsp; 计算过程为&lt;br /&gt; &amp;nbsp; &amp;nbsp; 1+3+5=9&lt;br /&gt; &amp;nbsp; &amp;nbsp; 2+4+6=12&lt;br /&gt; &amp;nbsp; &amp;nbsp; 返回[9,12]&lt;br /&gt; 3. reduce(function,sequence,[init])&lt;br /&gt; &amp;nbsp; &amp;nbsp; 返回一个单值为,计算步骤为 :&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;* 第1个结果=function(sequence[0],sequence[1])&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;* 第2个结果=function(第1个结果,sequence[2])&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;* 返回最后一个计算得值&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;* 如果有init,则先调用function(init,sequence[0])&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;* sequence只有一个元素时,返回该元素,为空时抛出异常.&lt;br /&gt; &amp;nbsp; &amp;nbsp; 如 reduce(lambda x,y:x+y,range(3),99) 的计算为&lt;br /&gt; &amp;nbsp; &amp;nbsp; 99+0=99 =&amp;gt; 99+1=100 =&amp;gt; 100+2=102&lt;br /&gt; &amp;nbsp; &amp;nbsp; 返回102&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; 注:实际使用中用内建函数sum来完成这个累加更合适,如这里等价sum(range(3),99)&lt;br /&gt; 4. zip用于多个sequence的循环&lt;br /&gt; &amp;nbsp; &amp;nbsp; questions=['name', 'quest', 'favorite color']&lt;br /&gt; &amp;nbsp; &amp;nbsp; answers=['lancelot', 'the holy grail', 'blue']&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; for q, a in zip(questions, answers):&lt;br /&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;print 'What is your %s ? It is %s.' % (q,a)&lt;br /&gt; &amp;nbsp; &amp;nbsp; 输出:&lt;br /&gt; &amp;nbsp; &amp;nbsp; What is your name ? It is lancelot.&lt;br /&gt; &amp;nbsp; &amp;nbsp; What is your quest ? It is the holy grail.&lt;br /&gt; &amp;nbsp; &amp;nbsp; What is your favorite color ? It is blue.&lt;br /&gt; &lt;br /&gt; 12.访问GAE，修改hosts文件的方法&lt;br /&gt; Shell:~/dev/AppEngine/google_appengine/n23 &amp;gt;: tail -n 3 /etc/hosts&lt;br /&gt; 209.85.171.118&amp;nbsp; &amp;nbsp; n23.appspot.com&lt;br /&gt; 64.233.189.99&amp;nbsp; &amp;nbsp;appengine.google.com&lt;br /&gt; #203.208.35.100&amp;nbsp;&amp;nbsp;appengine.google.com&lt;br /&gt; Shell:~/dev/AppEngine/google_appengine/n23 &amp;gt;:&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4404</guid><pubDate>Wed, 05 Nov 2008 07:44:04 GMT</pubDate></item><item><title>30 Cool Linux Login Screens</title><link>http://n23.appspot.com/blog/post/4207</link><description>&lt;h3&gt;1-Somatic&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Somatic+-+GDM?content=86643" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/somatic.jpg" alt="" height="312" width="500" title="Somatic" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: pokemonjojo2&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;2-Clear Crisp Morning&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Crisp+Clear+Morning?content=48994" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/clear-crisp-morning.png" alt="" height="375" width="500" title="Clear Crisp Morning" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: penseleit&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;3-Tux vs. MS&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Tux+versus+Ms+butterfly?content=15783" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/tux-vs-ms.jpg" alt="" height="375" width="500" title="Tux  vs. MS" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By:&amp;nbsp; alcapcom&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;4-Doe&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Doe+GDM?content=52791" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/doe.jpg" alt="" height="376" width="500" title="Doe" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: xyzwqt&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;5-Blue Swirl&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Blue+Swirl?content=30846" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/dark-knight.jpg" alt="" height="400" width="500" title="Blue Swirl" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: darkknight9&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;6-Magic Book&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Magic+Book+GDM+Theme?content=77221" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/magic-book.jpg" alt="" height="375" width="500" title="Magic Book" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: gHiRo&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;7-Pixel Girl&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Pixel+Girl?content=18179" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/pixel-girl.jpg" alt="" height="375" width="500" title="Pixel Girl" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: fabiand&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;8-Super GNOME Bros&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Super+Gnome+Bross?content=55092" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/super-gnome-bros.jpg" alt="" height="372" width="500" title="Super GNOME Bros" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: linuxville&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;9-Sunshine&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Sunshine?content=43012" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/sunshine-alpha.jpg" alt="" height="375" width="500" title="Sunshine" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: paullinux&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;10-Relaxing Water&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Relaxing+Water?content=48213" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/relaxing-water.jpg" alt="" height="375" width="500" title="relaxing-water" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: cooper14&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;11-Still Alive Sunshine&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Still+alive+sunshine+GDM+Theme?content=52687" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/still-alive-sunshine.png" alt="" height="375" width="500" title="Still Alive Sunshine" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: savagehp&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;12-Soft Flower&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Soft+Flower+Gnome+GDM?content=35592" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/soft-flower.jpg" alt="" height="398" width="500" title="Soft Flower" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: solarfields&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;13-Avio&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://hehe2.net/wp-content/uploads/2008/11/avio.jpghttp://gnome-look.org/content/show.php/Avio-GDM?content=37395" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/avio.jpg" alt="" height="375" width="500" title="Avio" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: tobain&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;14-Sunset&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Sunset?content=85709" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/sunset.jpg" alt="" height="374" width="500" title="Sunset" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: Dav87&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;15-Arc Colors&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://gnome-look.org/content/show.php/Arc-Colors+GDM-Walls?content=88305" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/arc-colors.png" alt="" height="312" width="500" title="Arc Colors" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: perfectska04&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;16-Toxic&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/ToxicTheme+-+Widescreen?content=50771" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/toxic.jpg" alt="" height="312" width="500" title="Toxic" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: guerrerocarl&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;17-Clean&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/Clean?content=74405" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/clean.png" alt="" height="312" width="500" title="Clean" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: Simoo&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;18-Porum&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/Porum+KDM+theme?content=82029" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/porum.png" alt="" height="375" width="500" title="Porum" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By:linuzoid&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;18-Sweet Darkness&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/Sweet+Darkness+Login+Theme?content=75036" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/sweet-darkness.jpg" alt="" height="399" width="500" title="sweet-darkness" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: Snooky (distro logos can be changed)&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;19-WorldKDM&lt;/h3&gt;
&lt;h3&gt;&lt;a href="http://kde-look.org/content/show.php/WorldKdm?content=75534" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/worldkdm.jpg" alt="" height="375" width="500" title="WorldKDM" /&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;By: codicem&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;20-LoveKDE&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/LoveKDE+KDM+Theme?content=35843" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/lovekde.jpg" alt="" height="400" width="500" title="LoveKDE" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: invernomuto&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;21-Peace&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/peace_kdm-theme?content=64631" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/peace.jpg" alt="" height="375" width="500" title="Peace" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: nico67&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;22-Impressions&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/peace_kdm-theme?content=64631" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/impressions.png" alt="" height="375" width="500" title="impressions" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: linuzoid&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;23-Skyline&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/SkyLine+(KDM+Theme)?content=85126" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/skyline.jpg" alt="" height="400" width="500" title="Skyline" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: Soravis&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;24-KdmLinux&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/SkyLine+(KDM+Theme)?content=85126" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/kdmlinux.jpg" alt="" height="375" width="500" title="KdmLinux" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: Codicem&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;25-Earth Abstract&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/Earth-abstract?content=75630" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/earth-abstract.jpg" alt="" height="312" width="500" title="Earth Abstract" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: repli2dev&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;26-True Nature&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/TrueNature+KDM-Theme?content=43841" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/true-nature.png" alt="" height="312" width="500" title="True Nature" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: Stanlus&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;27-KDM Ret&lt;em&gt;ina&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="http://kde-look.org/content/preview.php?preview=1&amp;amp;amp" rel="no-follow;id=78261&amp;amp;file1=78261-1.jpg&amp;amp;file2=&amp;amp;file3=&amp;amp;name=KDMretina" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/kdm-retina.jpg" alt="" height="312" width="500" title="KDM Retina" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: codicem&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;28-Xmas KDM&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/Xmas+KDM?content=71248" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/xmas-kdm.jpg" alt="" height="312" width="500" title="xmas-kdm" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: thio83&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;29-Flamenco Modern&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/Flamenco-Modern?content=53400" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/flamenco-modern.jpg" alt="" height="400" width="500" title="Flamenco Modern" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: twi&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;30-Deep&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://kde-look.org/content/show.php/DEEP?content=39575" rel="no-follow" target="_blank"&gt;&lt;img src="http://hehe2.net/wp-content/uploads/2008/11/deep.jpg" alt="" height="375" width="500" title="Deep" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By: mPtTybOB&lt;/em&gt;&lt;/p&gt;</description><author>No.0023</author><category>Linux</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4207</guid><pubDate>Tue, 04 Nov 2008 00:41:21 GMT</pubDate></item><item><title>mirror for OpenBSD</title><link>http://n23.appspot.com/blog/post/4403</link><description>&lt;p&gt;Shell:~ &amp;gt;: grep PKG .zprofile  &lt;br /&gt; #export PKG_PATH=ftp://ftp.openbsd.org.tw/pub/OpenBSD/$(uname -r)/packages/$(machine -a)/ &lt;br /&gt; export PKG_PATH=ftp://ftp.freebsdchina.org/pub/OpenBSD/$(uname -r)/packages/$(machine -a)/ &lt;br /&gt; Shell:~ &amp;gt;: grep CVSROOT .zprofile &lt;br /&gt; export CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs &lt;br /&gt; #export CVSROOT=anoncvs@anoncvs.de.openbsd.org:/cvs &lt;br /&gt; &lt;br /&gt; Shell:~ &amp;gt;: cat /etc/mk.conf  &lt;br /&gt; SUDO=/usr/bin/sudo &lt;br /&gt; &lt;br /&gt; WRKOBJDIR=/usr/obj/ports &lt;br /&gt; DISTDIR=/usr/distfiles &lt;br /&gt; PACKAGE_REPOSITORY=/usr/packages &lt;br /&gt; &lt;br /&gt; _MASTER_SITE_OPENBSD?=  \ &lt;br /&gt; ftp://ftp.freebsdchina.org/pub/OpenBSD/distfiles/${DIST_SUBDIR}/ \ &lt;br /&gt; ftp://ftp.openbsd.org/pub/OpenBSD/distfiles/${DIST_SUBDIR}/ \ &lt;br /&gt; ftp://ftp.tw.openbsd.org/pub/OpenBSD/distfiles/${DIST_SUBDIR}/ &lt;br /&gt; &lt;br /&gt; XENOCARA_RERUN_AUTOCONF=Yes &lt;br /&gt; ACCEPT_JRL_LICENSE=Yes &lt;br /&gt; Shell:~ &amp;gt;: &lt;br /&gt; &lt;br /&gt; &lt;a href="http://mirror.openbsd.org.cn/" rel="no-follow" target="_blank"&gt;http://mirror.openbsd.org.cn&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.iredmail.org/openbsd" rel="no-follow" target="_blank"&gt;http://www.iredmail.org/openbsd&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4403</guid><pubDate>Sun, 02 Nov 2008 16:31:12 GMT</pubDate></item><item><title>OpenBSD 4.4 released, Nov 1. Enjoy!</title><link>http://n23.appspot.com/blog/post/4206</link><description>
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;from&lt;/td&gt;
&lt;td&gt;&lt;img src="https://mail.google.com/mail/images/cleardot.gif" height="16" width="16" alt="" /&gt;Theo de Raadt &amp;lt;deraadt@cvs.openbsd.org&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;to&lt;/td&gt;
&lt;td&gt;&lt;img src="https://mail.google.com/mail/images/cleardot.gif" height="16" width="16" alt="" /&gt;misc@openbsd.org&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;date&lt;/td&gt;
&lt;td&gt;&lt;img src="https://mail.google.com/mail/images/cleardot.gif" alt="" height="16" width="16" /&gt;Fri, Oct 31, 2008 at 16:34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;subject&lt;/td&gt;
&lt;td&gt;&lt;img src="https://mail.google.com/mail/images/cleardot.gif" alt="" height="16" width="16" /&gt;OpenBSD 4.4 released, Nov 1.  Enjoy!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mailed-by&lt;/td&gt;
&lt;td&gt;&lt;img src="https://mail.google.com/mail/images/cleardot.gif" alt="" height="16" width="16" /&gt;openbsd.org&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;

&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="https://mail.google.com/mail/images/cleardot.gif" alt="" /&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://mail.google.com/mail/images/cleardot.gif" alt="" /&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

------------------------------------------------------------------------&lt;br /&gt; Nov 1, 2008.&lt;br /&gt; &lt;br /&gt; We are pleased to announce the official release of OpenBSD 4.4.&lt;br /&gt; This is our 24th release on CD-ROM (and 25th via FTP). &amp;nbsp;We remain&lt;br /&gt; proud of OpenBSD's record of more than ten years with only two remote&lt;br /&gt; holes in the default install.&lt;br /&gt; &lt;br /&gt; As in our previous releases, 4.4 provides significant improvements,&lt;br /&gt; including new features, in nearly all areas of the system:&lt;br /&gt; &lt;br /&gt; - New/extended platforms:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o OpenBSD/sparc64.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Fujitsu's SPARC64-V, SPARC64-VI and SPARC64-VII processors are supported&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;now, which means that many of the PRIMEPOWER machines and the SPARC&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Enterprise M4000/M5000/M8000/M9000 work now.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sun's UltraSPARC VI processors are supported now. &amp;nbsp;Many of Sun's&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;mid-range and high-end servers with these processors or UltraSPARC III&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;and UltraSPARC III+ processors work now.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sun's UltraSPARC T1 and UltraSPARC T2 processors are supported now,&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;which means the sun4v architecture is now supported and machines like&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;the SPARC Enterprise T1000 and SPARC Enterprise T5220 work now.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o OpenBSD/socppc.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;For machines based on the Freescale MPC8349E&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;System-on-Chip (SoC) platform that use Das U-Boot as a boot loader.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o OpenBSD/landisk: added shared libraries support.&lt;br /&gt; &lt;br /&gt; - Improved hardware support, including:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Several new/improved drivers for sensors: fins(4), andl(4), it(4),&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;kate(4), sdtemp(4), lmtemp(4), adt(4), km(4).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Support for Intel G33 and G35 chipsets in agp(4).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New lii(4) driver for Attansic L2 10/100 Ethernet devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Preliminary support for UVC USB webcams: uvideo(4) and video(4).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o WPA/WPA2-PSK support for several models of wireless cards.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Openchrome(4) and geode(4) video card drivers for X.Org.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New vmt(4) driver, implements VMware Tools.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New auglx(4) driver for AMD Geode LX CS5536 integrated AC'97 audio.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New ix(4) driver for Intel 82598 PCI Express 10Gb Ethernet.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New acpithinkpad(4) driver provides additional ACPI support for&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;IBM/Lenovo ThinkPad laptops.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New acpiasus(4) driver provides additional ACPI support for ASUS&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;laptops including the EeePC.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New gecko(4) driver supporting the GeckoBOA BC GSC+ port found on&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;some hppa systems.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New tsec(4) driver supporting the Freescale Triple Speed Ethernet&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Controller..&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The re(4) driver now supports RTL8102E and RTL8168 devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The cas(4) driver now supports National Semiconductor Saturn devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The pccom(4) driver has been removed; all platforms use com(4) now.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o cardbus(4) and pcmcia(4) now work on most sparc64 machines.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The udcf(4) driver now supports mouseCLOCK USB II devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The msk(4) driver now supports 88E8040T devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The ath(4) now now supports many more Atheros wireless devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The ciss(4) driver now supports HP Smart Array P212, P410, P411, P411i&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;and P812 devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The uftdi(4) driver now supports ELV Elektronik and FTDI 2232L devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The umsm(4) driver now supports Option GlobeTrotter 3G+, Huawei E220&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;and more HSDPA MSM devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The ubsa(4) driver now supports ZTE CMDMA MSM devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The axe(4) driver now supports Apple USB A1277 devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The puc(4) driver now supports more Netmos devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The mgx(4) driver now supports 2D acceleration on selected boards.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The isp(4) driver firmware for some controllers has been updated.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The isp(4) driver no longer hangs during probe on some machines.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The bge(4) driver has better support for BCM5704 chipsets in fiber&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;mode which helps with some blade servers.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The bge(4) driver has better support for the BCM5906 chipset on&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;some systems.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The bge(4) driver has much better support for PCI Express chipsets&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;resulting in much faster transmit performance.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The bge(4) driver has support for the BCM5714/5715/5780 chipsets&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;using fiber interfaces.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The bnx(4) driver has support for the BCM5706/5708 chipsets using&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;fiber interfaces.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The ral(4) driver now supports Ralink Technology RT2700 devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Serial ports other than com0 can now be used for console on amd64.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The serial console on i386 and amd64 has improved compatibility&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;with server management cards.&lt;br /&gt; &lt;br /&gt; - New tools:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o rpc.statd(8), the host status monitoring daemon for use with the NFS&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;file locking daemon.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Initial import of ypldap(8), a drop-in replacement for ypserv&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;to glue in an LDAP directory for get{pw,gr}ent family of functions.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Deprecated slattach(8) and nmeaattach(8) in favor of ldattach(8).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Import of tcpbench(1), a small TCP benchmarking tool.&lt;br /&gt; &lt;br /&gt; - New functionality:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o aucat(1) is now able to play and record audio in fullduplex, it&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;can mix unlimited number of streams, handles up to 16 channels, can&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;resample streams on the fly, supports various 24-bit and 32-bit&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;encodings and does format conversions on the fly.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o httpd(8) now supports IPv6.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o dhcpd(8) now supports basic synchronization of the /etc/dhcpd.leases&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;file to allow for running multiple instances for redundancy.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o rpc.lockd(8) now supports NLMv4 and does actually do locking.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o ftp(1) now supports recursive mget transfers.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o ftp(1) now uses keep alive packets by default.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Make ftp(1) accept empty passwords in URLs.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o locate(1) now supports -b flag to perform search only on the last&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;component of the path.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Allow cdio(1) in TAO mode to set the write speed.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o cdio(1) no longer blanks media twice.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Add ability in cdio(1) to determine media capabilities and make it figure&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;out if media supports TAO or blanking.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Initial version of softraid(4) crypto support.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o dhcpd(8) now groks options tftp-config-file and auto-proxy-script in&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;dhcpd.conf.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o dhclient(8) option handling much more resistant to abuse.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o dhclient(8) now aware of interface link state and reacts to changes.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o DIOCRLDINFO, DIOCGPDINFO, and DIOCGPART support added to block devices&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;previously lacking it.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o disklabel(8) no longer supports the '-r' option, and obtains all disklabel&lt;br /&gt; &amp;nbsp; &amp;nbsp;information via ioctl's.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o disklabel(8) no longer suggests offsets and sizes that would result in&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;partitions starting or ending outside the OpenBSD section of the disk.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o disklabel(8) now correctly reads back the 'vendor' field from text&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;disklabels.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o disklabel(8) editor mode '?' and 'p' commands are more compact and the 'l'&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;command has been added to produce previous verbose output.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o I/O's outside the bounds of the RAW_PART are now prevented, allowing&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;proper detection of invalid I/O's.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o USB floppies now have a valid cylinder count calculated, rather than 0.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o newfs(8) can now create filesystems on devices with sector sizes other&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;than 512, although such filesystems cannot yet be read.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o scsi(4) probing displays less useless verbiage and fewer spurious error&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;messages.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o st(4) devices can now be detached.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o ATAPI devices are now identified as such, rather than as SCSIn devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o SATA tape drives now work.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o scsi(4) probing now displays the ID of the initiator on the bus.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o scsi(4) debug capabilities improved to show commands and input or output&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;data as appropriate.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o scsi(4) probing makes better use of the TEST UNIT READY command to clear&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;errors and allow successfull attachments.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o scsi(4) probing can now find more fibre channel attached devices.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Several mbuf pool cache corruption issues were fixed&lt;br /&gt; &amp;nbsp; &amp;nbsp;o identd(8) now supports IPv6 in standalone mode.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o cal(1) now shows week numbers too.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o In pf(4), implement a sloppy tcpstate tracker which does not look at&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;sequence numbers at all.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o pf(4) rule accounting now has a counter to record how many states in&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;total have been created by a rule.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The kill states feature in pfctl(8) now supports two additional match&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;targets: Kill by rule label or state ID.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Make relayd(8) use sloppy pf(4) state keeping for routed sessions (Direct&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Server Return).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Added support in relayd(8) for transparent L7 forwarding in relays.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Added support for dynamic IPv6-to-IPv4 or IPv4-to-IPv6 TCP relays&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;in relayd(8).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Improved the DNS mode and use OpenBSD's Id shuffle code from named(8)&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;in relayd(8).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Extend awk(1) with bitwise operations.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Updated the display code for systat(1) which adds views for pf(4) states,&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;rules and queues.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Imported initial support for IEEE 802.3ad/LACP in trunk(4).&lt;br /&gt; &lt;br /&gt; - Assorted improvements and code cleanup:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o A greatly changed buffer cache subsystem which maps cache pages only&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;when in use, resulting in improved filesystem performance, and&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowing for the effective use of a much larger buffer cache&lt;br /&gt; &amp;nbsp; &amp;nbsp;o A greatly improved implementation of malloc(3), the general purpose&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;memory allocator, which catches more mistakes, reduces address space&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;fragmentation, and is faster.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The statfs(2) system call has been enhanced to support large filesystems.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o The strtof(3) function has been added to libc.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o A lot of work has been done on libm to add several functions towards more&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;C99 compliance.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Lots of features have been implemented in OpenCVS, which can now be used&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;to do some real work.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New APIs for arc4random, one to fill a buffer with random numbers&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;and the other to return a uniformly distributed random number&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;without bias.&lt;br /&gt; &lt;br /&gt; - Install/Upgrade process changes:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o A new tool sysmerge(1), derived from the old mergemaster port, makes&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;it easier to merge configuration files changes during an upgrade.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Fully support OpenBSD inside extended partitions on i386 and amd64.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o During installation 'dhcp' is now the initial default answer during&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;network configuration.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Fetching sets via FTP more reliable due to automatic use of keep alive.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Fetching sets via NFS no longer hangs retrying a non-functional mount.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Installation ensures hostname.* files are installed with mode 600.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Serial console configuration now automatically detects speed.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Serial console support extended to all architectures.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Partition size display no longer limited to 32 bit sizes.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Partition sizes now scaled and formatted to use human readable units.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o NTPD configuration questions improved.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Sparc miniroot root disk detection fixed.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Invocations of disklabel(8) by the scripts are now less verbose.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; - OpenSSH 5.1:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o New experimental fingerprint ASCII art visualisation system for easier&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;verification of remote keys.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Added chroot(2) support for sshd(8).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Added an extended test mode (-T) to sshd(8).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Make ssh(1) support negation of groups in a &amp;quot;Match group&amp;quot; block.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Increased the ephemeral key size in protocol1 from 768 to 1024 bits.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Better tests of primes in /etc/moduli&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Refuse to read .shosts or authorized_keys files that are not regular&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;files.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Enable ~ escapes for multiplex slave sessions.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Support CIDR address matching in Match blocks and authorized_keys&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;from=&amp;quot;...&amp;quot; stanzas.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Make port forwarding code try additional addresses when connecting to&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;a destination whose DNS name resolves to more than one address.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Make the maximum number of ssh(1) sessions run-time controllable via&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;MaxSessions in sshd_config(5).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o ssh-scan(1) now defaults to RSA protocol 2 keys, instead of RSA1.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Added an extension to sftp protocol to implement statvfs(2)-like operations&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;and add a df command to sftp(1).&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Disable execution of /.ssh/rc for sessions where a command has been&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;forced by the sshd_config ForceCommand directive.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o And several bug fixes and performance enhancements.&lt;br /&gt; &lt;br /&gt; - Over 4,500 ports, minor robustness improvements in package tools.&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Many pre-built packages for each architecture:&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;i386: &amp;nbsp; 5033 &amp;nbsp; &amp;nbsp;sparc64: &amp;nbsp;4862 &amp;nbsp; &amp;nbsp;alpha: 4852 &amp;nbsp; &amp;nbsp;sh: &amp;nbsp; &amp;nbsp; 1285&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;amd64: &amp;nbsp;4940 &amp;nbsp; &amp;nbsp;powerpc: &amp;nbsp;4466 &amp;nbsp; &amp;nbsp;sparc: 3381 &amp;nbsp; &amp;nbsp;mips64: 3099&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;arm: &amp;nbsp; &amp;nbsp;4018 &amp;nbsp; &amp;nbsp;hppa: &amp;nbsp; &amp;nbsp; 1595 &amp;nbsp; &amp;nbsp;vax: &amp;nbsp; 1954&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Highlights include:&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o mozilla-firefox 3&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o drupal 5&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o Gnome &lt;a href="http://2.20.3./" target="_blank"&gt;2.20.3.&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o GNUstep &lt;a href="http://1.14.2./" target="_blank"&gt;1.14.2.&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o Inkscape 0.46.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o JDK 1.7.0.b24.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o KDE &lt;a href="http://3.5.8./" target="_blank"&gt;3.5.8.&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o Mozilla Firefox &lt;a href="http://2.0.0.16/" rel="no-follow" target="_blank"&gt;2.0.0.16&lt;/a&gt; and &lt;a href="http://3.0.1./" target="_blank"&gt;3.0.1.&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o Mozilla Thunderbird &lt;a href="http://2.0.0.16/" rel="no-follow" target="_blank"&gt;2.0.0.16&lt;/a&gt;.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o MySQL 5.0.51a&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o OpenMotif &lt;a href="http://2.3.0./" target="_blank"&gt;2.3.0.&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o OpenOffice.org &lt;a href="http://2.4.1./" target="_blank"&gt;2.4.1.&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o PostgreSQL &lt;a href="http://8.3.3./" target="_blank"&gt;8.3.3.&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;o Xfce &lt;a href="http://4.4.2./" target="_blank"&gt;4.4.2.&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; - As usual, steady improvements in manual pages and other documentation.&lt;br /&gt; &lt;br /&gt; - The system includes the following major components from outside&lt;br /&gt; &amp;nbsp;suppliers:&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Xenocara (based on X.Org 7.3 + patches, freetype 2.3.5,&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;fontconfig 2.4.2, expat 2.0.1, Mesa 7.0.3, xterm 234 and more)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Gcc 2.95.3 (+ patches) and 3.3.5 (+ patches)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Perl 5.8.8 (+ patches)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Our improved and secured version of Apache 1.3, with SSL/TLS and DSO&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;support&lt;br /&gt; &amp;nbsp; &amp;nbsp;o OpenSSL 0.9.7j (+ patches)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Groff 1.15&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Sendmail 8.14.3, with libmilter&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Bind 9.4.2-P2 (+ patches)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Lynx 2.8.5rel.4 with HTTPS and IPv6 support (+ patches)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Sudo 1.6.9p17&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Ncurses 5.2&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Latest KAME IPv6&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Heimdal 0.7.2 (+ patches)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Arla 0.35.7&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Binutils 2.15 (+ patches)&lt;br /&gt; &amp;nbsp; &amp;nbsp;o Gdb 6.3 (+ patches)&lt;br /&gt; &lt;br /&gt; If you'd like to see a list of what has changed between OpenBSD 4.3&lt;br /&gt; and 4.4, look at&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/plus44.html" rel="no-follow" target="_blank"&gt;http://www.OpenBSD.org/plus44.html&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; Even though the list is a summary of the most important changes&lt;br /&gt; made to OpenBSD, it still is a very very long list.&lt;br /&gt; We provide patches for known security threats and other important&lt;br /&gt; issues discovered after each CD release. &amp;nbsp;As usual, between the&lt;br /&gt; creation of the OpenBSD 4.4 FTP/CD-ROM binaries and the actual 4.4&lt;br /&gt; release date, our team found and fixed some new reliability problems&lt;br /&gt; (note: most are minor and in subsystems that are not enabled by&lt;br /&gt; default). &amp;nbsp;Our continued research into security means we will find&lt;br /&gt; new security problems -- and we always provide patches as soon as&lt;br /&gt; possible. &amp;nbsp;Therefore, we advise regular visits to&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/security.html" rel="no-follow" target="_blank"&gt;http://www.OpenBSD.org/security.html&lt;/a&gt;&lt;br /&gt; and&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/errata.html" rel="no-follow" target="_blank"&gt;http://www.OpenBSD.org/errata.html&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; Security patch announcements are sent to the security-announce@OpenBSD.org&lt;br /&gt; mailing list. &amp;nbsp;For information on OpenBSD mailing lists, please see:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/mail.html" rel="no-follow" target="_blank"&gt;http://www.OpenBSD.org/mail.html&lt;/a&gt;&lt;br /&gt; OpenBSD 4.4 is also available on CD-ROM. &amp;nbsp;The 3-CD set costs $50 CDN&lt;br /&gt; (EUR 50 including VAT) and is available via mail order and from a number&lt;br /&gt; of contacts around the world. &amp;nbsp;The set includes a colourful booklet&lt;br /&gt; which carefully explains the installation of OpenBSD. &amp;nbsp;A new set&lt;br /&gt; of cute little stickers is also included (sorry, but our FTP mirror&lt;br /&gt; sites do not support STP, the Sticker Transfer Protocol). &amp;nbsp;As an&lt;br /&gt; added bonus, the second CD contains an audio track, a song entitled&lt;br /&gt; &amp;quot;Trial of the BSD Knights&amp;quot;. &amp;nbsp;MP3 and OGG versions of the audio track can&lt;br /&gt; be found on the first CD.&lt;br /&gt; &lt;br /&gt; Lyrics (and an explanation) for the songs may be found at:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/lyrics.html" rel="no-follow#44" target="_blank"&gt;http://www.OpenBSD.org/lyrics.html#44&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; Profits from CD sales are the primary income source for the OpenBSD&lt;br /&gt; project -- in essence selling these CD-ROM units ensures that OpenBSD&lt;br /&gt; will continue to make another release six months from now.&lt;br /&gt; &lt;br /&gt; The OpenBSD 4.4 CD-ROMs are bootable on the following four platforms:&lt;br /&gt; &lt;br /&gt; &amp;nbsp;o i386&lt;br /&gt; &amp;nbsp;o amd64&lt;br /&gt; &amp;nbsp;o macppc&lt;br /&gt; &amp;nbsp;o sparc64&lt;br /&gt; &lt;br /&gt; (Other platforms must boot from floppy, network, or other method).&lt;br /&gt; &lt;br /&gt; For more information on ordering CD-ROMs, see:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/orders.html" rel="no-follow" target="_blank"&gt;http://www.OpenBSD.org/orders.html&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; The above web page lists a number of places where OpenBSD CD-ROMs&lt;br /&gt; can be purchased from. &amp;nbsp;For our default mail order, go directly to:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="https://https.openbsd.org/cgi-bin/order" rel="no-follow" target="_blank"&gt;https://https.OpenBSD.org/cgi-bin/order&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; or, for European orders:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="https://https.openbsd.org/cgi-bin/order.eu" rel="no-follow" target="_blank"&gt;https://https.OpenBSD.org/cgi-bin/order.eu&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; All of our developers strongly urge you to buy a CD-ROM and support&lt;br /&gt; our future efforts. &amp;nbsp;Additionally, donations to the project are&lt;br /&gt; highly appreciated, as described in more detail at:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/goals.html" rel="no-follow#funding" target="_blank"&gt;http://www.OpenBSD.org/goals.html#funding&lt;/a&gt;&lt;br /&gt; For those unable to make their contributions as straightforward gifts,&lt;br /&gt; the OpenBSD Foundation (&lt;a href="http://www.openbsdfoundation.org/" rel="no-follow" target="_blank"&gt;http://www.openbsdfoundation.org&lt;/a&gt;) is a Canadian&lt;br /&gt; not-for-profit corporation that can accept larger contributions and&lt;br /&gt; issue receipts. &amp;nbsp;In some situations, their receipt may qualify as a&lt;br /&gt; business expense writeoff, so this is certainly a consideration for&lt;br /&gt; some organizations or businesses. &amp;nbsp;There may also be exposure benefits&lt;br /&gt; since the Foundation may be interested in participating in press releases.&lt;br /&gt; In turn, the Foundation then uses these contributions to assist OpenBSD's&lt;br /&gt; infrastructure needs. &amp;nbsp;Contact the foundation directors at&lt;br /&gt; &lt;a href="mailto:directors@openbsdfoundation.org"&gt;directors@openbsdfoundation.org&lt;/a&gt; for more information.&lt;br /&gt; The OpenBSD distribution companies also sell tshirts and polo shirts.&lt;br /&gt; And our users like them too. &amp;nbsp;We have a variety of shirts available,&lt;br /&gt; with the new and old designs, from our web ordering system at:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="https://https.openbsd.org/cgi-bin/order" rel="no-follow" target="_blank"&gt;https://https.OpenBSD.org/cgi-bin/order&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; and for Europe:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="https://https.openbsd.org/cgi-bin/order.eu" rel="no-follow" target="_blank"&gt;https://https.OpenBSD.org/cgi-bin/order.eu&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; The OpenBSD 4.4 t-shirts are available now. &amp;nbsp;We also sell our older&lt;br /&gt; shirts, as well as a selection of OpenSSH t-shirts.&lt;br /&gt; If you choose not to buy an OpenBSD CD-ROM, OpenBSD can be easily&lt;br /&gt; installed via FTP. &amp;nbsp;Typically you need a single small piece of boot&lt;br /&gt; media (e.g., a boot floppy) and then the rest of the files can be&lt;br /&gt; installed from a number of locations, including directly off the&lt;br /&gt; Internet. &amp;nbsp;Follow this simple set of instructions to ensure that&lt;br /&gt; you find all of the documentation you will need while performing&lt;br /&gt; an install via FTP. &amp;nbsp;With the CD-ROMs, the necessary documentation&lt;br /&gt; is easier to find.&lt;br /&gt; &lt;br /&gt; 1) Read either of the following two files for a list of ftp&lt;br /&gt; &amp;nbsp; mirrors which provide OpenBSD, then choose one near you:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/ftp.html" rel="no-follow" target="_blank"&gt;http://www.OpenBSD.org/ftp.html&lt;/a&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://ftp.openbsd.org/pub/OpenBSD/4.4/ftplist" rel="no-follow" target="_blank"&gt;ftp://ftp.OpenBSD.org/pub/OpenBSD/4.4/ftplist&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp; As of November 1, 2008, the following ftp mirror sites have the 4.4 release:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://ftp.kd85.com/pub/OpenBSD/4.4/" rel="no-follow" target="_blank"&gt;ftp://ftp.kd85.com/pub/OpenBSD/4.4/&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Austria&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://ftp.stacken.kth.se/pub/OpenBSD/4.4/" rel="no-follow" target="_blank"&gt;ftp://ftp.stacken.kth.se/pub/OpenBSD/4.4/&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sweden&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://ftp2.usa.openbsd.org/pub/OpenBSD/4.4/" rel="no-follow" target="_blank"&gt;ftp://ftp2.usa.openbsd.org/pub/OpenBSD/4.4/&lt;/a&gt; &amp;nbsp; &amp;nbsp; NYC, USA&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://ftp3.usa.openbsd.org/pub/OpenBSD/4.4/" rel="no-follow" target="_blank"&gt;ftp://ftp3.usa.openbsd.org/pub/OpenBSD/4.4/&lt;/a&gt; &amp;nbsp; &amp;nbsp; CO, USA&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://ftp5.usa.openbsd.org/pub/OpenBSD/4.4/" rel="no-follow" target="_blank"&gt;ftp://ftp5.usa.openbsd.org/pub/OpenBSD/4.4/&lt;/a&gt; &amp;nbsp; &amp;nbsp; CA, USA&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://rt.fm/pub/OpenBSD/4.4/" rel="no-follow" target="_blank"&gt;ftp://rt.fm/pub/OpenBSD/4.4/&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IL, USA&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The release is also available at the master site:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="ftp://ftp.openbsd.org/pub/OpenBSD/4.4/" rel="no-follow" target="_blank"&gt;ftp://ftp.openbsd.org/pub/OpenBSD/4.4/&lt;/a&gt; &amp;nbsp;Alberta, Canada&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;However it is strongly suggested you use a mirror.&lt;br /&gt; &lt;br /&gt; &amp;nbsp; Other mirror sites may take a day or two to update.&lt;br /&gt; &lt;br /&gt; 2) Connect to that ftp mirror site and go into the directory&lt;br /&gt; &amp;nbsp; pub/OpenBSD/4.4/ which contains these files and directories.&lt;br /&gt; &amp;nbsp; This is a list of what you will see:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ANNOUNCEMENT &amp;nbsp; amd64/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; macppc/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.tar.gz&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Changelogs/ &amp;nbsp; &amp;nbsp;armish/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mvme68k/ &amp;nbsp; &amp;nbsp; &amp;nbsp; tools/&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HARDWARE &amp;nbsp; &amp;nbsp; &amp;nbsp; ftplist &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;packages/ &amp;nbsp; &amp;nbsp; &amp;nbsp;vax/&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PACKAGES &amp;nbsp; &amp;nbsp; &amp;nbsp; hp300/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ports.tar.gz &amp;nbsp; xenocara.tar.gz&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PORTS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hppa/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.mail &amp;nbsp; &amp;nbsp; &amp;nbsp;zaurus/&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;README &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i386/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sparc/&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SIZES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;landisk/ &amp;nbsp; &amp;nbsp; &amp;nbsp; sparc64/&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;alpha/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mac68k/ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src.tar.gz&lt;br /&gt; &lt;br /&gt; &amp;nbsp; It is quite likely that you will want at LEAST the following&lt;br /&gt; &amp;nbsp; files which apply to all the architectures OpenBSD supports.&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;README &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- generic README&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HARDWARE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- list of hardware we support&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PORTS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - description of our &amp;quot;ports&amp;quot; tree&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PACKAGES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- description of pre-compiled packages&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.mail &amp;nbsp; &amp;nbsp; &amp;nbsp; - a copy of root's mail at initial login.&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;(This is really worthwhile reading).&lt;br /&gt; &lt;br /&gt; 3) Read the README file. &amp;nbsp;It is short, and a quick read will make&lt;br /&gt; &amp;nbsp; sure you understand what else you need to fetch.&lt;br /&gt; &lt;br /&gt; 4) Next, go into the directory that applies to your architecture,&lt;br /&gt; &amp;nbsp; for example, i386. &amp;nbsp;This is a list of what you will see:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INSTALL.i386 &amp;nbsp; &amp;nbsp;cd44.iso &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;floppyB44.fs &amp;nbsp; &amp;nbsp;pxeboot*&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INSTALL.linux &amp;nbsp; cdboot* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; floppyC44.fs &amp;nbsp; &amp;nbsp;xbase44.tgz&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MD5 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cdbr* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; game44.tgz &amp;nbsp; &amp;nbsp; &amp;nbsp;xetc44.tgz&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base44.tgz &amp;nbsp; &amp;nbsp; &amp;nbsp;cdemu44.iso &amp;nbsp; &amp;nbsp; index.txt &amp;nbsp; &amp;nbsp; &amp;nbsp; xfont44.tgz&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bsd* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comp44.tgz &amp;nbsp; &amp;nbsp; &amp;nbsp;install44.iso &amp;nbsp; xserv44.tgz&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://bsd.mp/" rel="no-follow" target="_blank"&gt;bsd.mp&lt;/a&gt;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; etc44.tgz &amp;nbsp; &amp;nbsp; &amp;nbsp; man44.tgz &amp;nbsp; &amp;nbsp; &amp;nbsp; xshare44.tgz&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bsd.rd* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; floppy44.fs &amp;nbsp; &amp;nbsp; misc44.tgz&lt;br /&gt; &lt;br /&gt; &amp;nbsp; If you are new to OpenBSD, fetch _at least_ the file INSTALL.i386&lt;br /&gt; &amp;nbsp; and the appropriate floppy*.fs or install44.iso files. &amp;nbsp;Consult the&lt;br /&gt; &amp;nbsp; INSTALL.i386 file if you don't know which of the floppy images&lt;br /&gt; &amp;nbsp; you need (or simply fetch all of them).&lt;br /&gt; &lt;br /&gt; &amp;nbsp; If you use the install44.iso file (roughly 200MB in size), then you&lt;br /&gt; &amp;nbsp; do not need the various *.tgz files since they are contained on that&lt;br /&gt; &amp;nbsp; one-step ISO-format install CD.&lt;br /&gt; &lt;br /&gt; 5) If you are an expert, follow the instructions in the file called&lt;br /&gt; &amp;nbsp; README; otherwise, use the more complete instructions in the&lt;br /&gt; &amp;nbsp; file called INSTALL.i386. &amp;nbsp;INSTALL.i386 may tell you that you&lt;br /&gt; &amp;nbsp; need to fetch other files.&lt;br /&gt; &lt;br /&gt; 6) Just in case, take a peek at:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.openbsd.org/errata.html" rel="no-follow" target="_blank"&gt;http://www.OpenBSD.org/errata.html&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp; This is the page where we talk about the mistakes we made while&lt;br /&gt; &amp;nbsp; creating the 4.4 release, or the significant bugs we fixed&lt;br /&gt; &amp;nbsp; post-release which we think our users should have fixes for.&lt;br /&gt; &amp;nbsp; Patches and workarounds are clearly described there.&lt;br /&gt; &lt;br /&gt; Note: If you end up needing to write a raw floppy using Windows,&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;you can use &amp;quot;fdimage.exe&amp;quot; located in the pub/OpenBSD/4.4/tools&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;directory to do so.&lt;br /&gt; X.Org has been integrated more closely into the system. &amp;nbsp;This release&lt;br /&gt; contains X.Org &lt;a href="http://7.3.0./" target="_blank"&gt;7.3.0.&lt;/a&gt; &amp;nbsp;Most of our architectures ship with X.Org, including&lt;br /&gt; amd64, sparc, sparc64 and macppc. &amp;nbsp;During installation, you can install&lt;br /&gt; X.Org quite easily. &amp;nbsp;Be sure to try out xdm(1) and see how we have&lt;br /&gt; customized it for OpenBSD.&lt;br /&gt; The OpenBSD ports tree contains automated instructions for building&lt;br /&gt; third party software. &amp;nbsp;The software has been verified to build and&lt;br /&gt; run on the various OpenBSD architectures. &amp;nbsp;The 4.4 ports collection,&lt;br /&gt; including many of the distribution files, is included on the 3-CD&lt;br /&gt; set. &amp;nbsp;Please see the PORTS file for more information.&lt;br /&gt; &lt;br /&gt; Note: some of the most popular ports, e.g., the Apache web server&lt;br /&gt; and several X applications, come standard with OpenBSD. &amp;nbsp;Also, many&lt;br /&gt; popular ports have been pre-compiled for those who do not desire&lt;br /&gt; to build their own binaries (see BINARY PACKAGES, below).&lt;br /&gt; A large number of binary packages are provided. &amp;nbsp;Please see the PACKAGES&lt;br /&gt; file (&lt;a href="ftp://ftp.openbsd.org/pub/OpenBSD/4.4/PACKAGES" rel="no-follow" target="_blank"&gt;ftp://ftp.OpenBSD.org/pub/OpenBSD/4.4/PACKAGES&lt;/a&gt;) for more details.&lt;br /&gt; The CD-ROMs contain source code for all the subsystems explained&lt;br /&gt; above, and the README (&lt;a href="ftp://ftp.openbsd.org/pub/OpenBSD/4.4/README" rel="no-follow" target="_blank"&gt;ftp://ftp.OpenBSD.org/pub/OpenBSD/4.4/README&lt;/a&gt;)&lt;br /&gt; file explains how to deal with these source files. &amp;nbsp;For those who&lt;br /&gt; are doing an FTP install, the source code for all four subsystems&lt;br /&gt; can be found in the pub/OpenBSD/4.4/ directory:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;xenocara.tar.gz &amp;nbsp; &amp;nbsp; ports.tar.gz &amp;nbsp; src.tar.gz &amp;nbsp; &amp;nbsp; sys.tar.gz&lt;br /&gt; OpenBSD 4.4 includes artwork and CD artistic layout by Ty Semaka,&lt;br /&gt; who also arranged an audio track on the OpenBSD 4.4 CD set. &amp;nbsp;Ports&lt;br /&gt; tree and package building by Antoine Jacoutot, Nikolay Sturm,&lt;br /&gt; Robert Nagy and Christian Weisgerber. &amp;nbsp;System builds by Theo de Raadt,&lt;br /&gt; and Miod Vallat. &amp;nbsp;X11 builds by Todd Fries. &amp;nbsp;ISO-9660 filesystem&lt;br /&gt; layout by Theo de Raadt.&lt;br /&gt; &lt;br /&gt; We would like to thank all of the people who sent in bug reports, bug&lt;br /&gt; fixes, donation cheques, and hardware that we use. &amp;nbsp;We would also like&lt;br /&gt; to thank those who pre-ordered the 4.4 CD-ROM or bought our previous&lt;br /&gt; CD-ROMs. &amp;nbsp;Those who did not support us financially have still helped&lt;br /&gt; us with our goal of improving the quality of the software.&lt;br /&gt; &lt;br /&gt; Our developers are:&lt;br /&gt; &lt;br /&gt; &amp;nbsp; &amp;nbsp;Alexander Bluhm, Alexander Schrijver, Alexander von Gernler,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Alexandre Anriot, Alexandre Ratchov, Alexey Vatchenko,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Anders Magnusson, Andreas Gunnarsson, Antoine Jacoutot,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Artur Grabowski, Austin Hook, Bernd Ahlers, Bob Beck, Brad Smith,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Bret Lambert, Can Erkin Acar, Chad Loder, Charles Longeau,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Chris Kuethe, Christian Weisgerber, Claudio Jeker,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Constantine A. Murenin, Dale Rahn, Damien Bergamini, Damien Miller,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Daniel Hartmeier, Darren Tucker, David Gwynne, David Hill,&lt;br /&gt; &amp;nbsp; &amp;nbsp;David Krause, Deanna Phillips, Eric Faurot, Esben Norby,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Federico G. Schwindt, Felix Kronlage, Gilles Chehade,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Gordon Willem Klok, Hans-Joerg Hoexer, Henning Brauer,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Henric Jungheim, Hugh Graham, Ian Darwin, Igor Sobrado,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Jacob Meuser, Jakob Schlyter, Janne Johansson, Jared Yanovich,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Jason Dixon, Jason George, Jason McIntyre,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Jasper Lievisse Adriaanse, Joel Knight, Joel Sing,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Johan Mson Lindman, Jolan Luff, Jonathan Gray, Jordan Hargrave,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Joris Vink, Kenneth R Westerback, Kevin Lo, Kevin Steves,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Kjell Wooding, Kurt Miller, Landry Breuil, Laurent Fanis,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Marc Balmer, Marc Espie, Marco Peereboom, Marco Pfatschbacher,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Marco S Hyman, Marcus Glocker, Mark Kettenis, Mark Uemura,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Markus Friedl, Martin Reindl, Martynas Venckus,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Mathieu Sauve-Frankel, Mats O Jansson, Matthias Kilian,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Matthieu Herrb, Michael Erdely, Michael Knudsen, Mike Belopuhov,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Miod Vallat, Moritz Grimm, Moritz Jodeit, Nick Holland,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Nikolay Sturm, Okan Demirmen, Oleg Safiullin, Otto Moerbeek,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Owain Ainsworth, Pedro Martelletto, Peter Hessler, Peter Stromberg,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Peter Valchev, Philip Guenther, Pierre-Yves Ritschard,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Rainer Giedat, Ray Lai, Reyk Floeter, Robert Nagy, Rui Reis,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Ryan Thomas McBride, Saad Kadhi, Simon Bertrang, Stefan Kempf,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Steven Mestdagh, Stuart Henderson, Ted Unangst, Theo de Raadt,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Thordur I. Bjornsson, Tobias Stoeckmann, Tobias Weingartner,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Todd C. Miller, Todd Fries, Tomoyuki Sakurai, Uwe Stuehler,&lt;br /&gt; &amp;nbsp; &amp;nbsp;Will Maier, Xavier Santolaria, Yojiro Uo, joshua stein</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4206</guid><pubDate>Sat, 01 Nov 2008 15:33:53 GMT</pubDate></item><item><title>disktab on OpenBSD</title><link>http://n23.appspot.com/blog/post/4205</link><description>&lt;p&gt;Shell:/etc &amp;gt;: cat disktab &lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $OpenBSD: disktab,v 1.19 2006/10/04 01:04:22 krw Exp $&lt;br /&gt;&lt;br /&gt;# Disk geometry and partition layout tables.&lt;br /&gt;# Key:&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; dt&amp;nbsp;&amp;nbsp;&amp;nbsp; controller type&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; ty&amp;nbsp;&amp;nbsp;&amp;nbsp; type of disk (fixed, removable, simulated)&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; d[0-4]&amp;nbsp;&amp;nbsp;&amp;nbsp; drive-type-dependent parameters&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;# a == root&lt;br /&gt;# b == swap&lt;br /&gt;# c == whole disk&lt;br /&gt;# e == /var&lt;br /&gt;# f == scratch&lt;br /&gt;# h == /usr&lt;br /&gt;&lt;br /&gt;cp3100new|Conner Peripherals 100MB IDE, with a different configuration:\&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :dt=ST506:ty=winchester:se#512:nt#8:ns#33:nc#766: \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :pa#15840:oa#0:ta=4.2BSD:ba#4096:fa#512: \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :pb#24288:ob#15840:tb=swap: \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :pc#202224:oc#0: \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :pe#15840:oe#40128:te=4.2BSD:be#4096:fe#512: \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :pg#15840:og#55968:tg=4.2BSD:bg#4096:fg#512: \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :ph#130416:oh#71808:th=4.2BSD:bh#4096:fh#512:&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;f == scratch 我的f装成home区了:&lt;/p&gt;
&lt;p&gt;Shell:/etc &amp;gt;: df&lt;br /&gt;Filesystem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&amp;nbsp;&amp;nbsp;&amp;nbsp; Used&amp;nbsp;&amp;nbsp; Avail Capacity iused&amp;nbsp;&amp;nbsp; ifree&amp;nbsp; %iused&amp;nbsp; Mounted on&lt;br /&gt;/dev/sd0a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 97.9M&amp;nbsp;&amp;nbsp; 43.2M&amp;nbsp;&amp;nbsp; 49.9M&amp;nbsp;&amp;nbsp;&amp;nbsp; 46%&amp;nbsp;&amp;nbsp;&amp;nbsp; 2462&amp;nbsp;&amp;nbsp; 13536&amp;nbsp;&amp;nbsp;&amp;nbsp; 15%&amp;nbsp;&amp;nbsp; /&lt;br /&gt;/dev/sd0f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22.6G&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.3G&amp;nbsp;&amp;nbsp; 16.2G&amp;nbsp;&amp;nbsp;&amp;nbsp; 24%&amp;nbsp; 142269 2897857&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5%&amp;nbsp;&amp;nbsp; /home&lt;br /&gt;/dev/sd0d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1005M&amp;nbsp;&amp;nbsp; 20.0K&amp;nbsp;&amp;nbsp;&amp;nbsp; 955M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37&amp;nbsp; 155865&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0%&amp;nbsp;&amp;nbsp; /tmp&lt;br /&gt;/dev/sd0g&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34.5G&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.5G&amp;nbsp;&amp;nbsp; 26.2G&amp;nbsp;&amp;nbsp;&amp;nbsp; 20%&amp;nbsp; 354107 4271043&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8%&amp;nbsp;&amp;nbsp; /usr&lt;br /&gt;/dev/sd0e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1005M&amp;nbsp;&amp;nbsp; 70.6M&amp;nbsp;&amp;nbsp;&amp;nbsp; 884M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7%&amp;nbsp;&amp;nbsp;&amp;nbsp; 2891&amp;nbsp; 153011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2%&amp;nbsp;&amp;nbsp; /var&lt;br /&gt;procfs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 397M&amp;nbsp;&amp;nbsp;&amp;nbsp; 241M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0B&amp;nbsp;&amp;nbsp; 100%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 74&amp;nbsp;&amp;nbsp; 65461&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0%&amp;nbsp;&amp;nbsp; /proc&lt;br /&gt;/dev/sd0i&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19.5G&amp;nbsp;&amp;nbsp;&amp;nbsp; 9.8G&amp;nbsp;&amp;nbsp;&amp;nbsp; 9.7G&amp;nbsp;&amp;nbsp;&amp;nbsp; 50%&amp;nbsp;&amp;nbsp; 89632 10154708&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1%&amp;nbsp;&amp;nbsp; /mnt/c&lt;br /&gt;/dev/sd0j&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30.1G&amp;nbsp;&amp;nbsp; 20.3G&amp;nbsp;&amp;nbsp;&amp;nbsp; 9.8G&amp;nbsp;&amp;nbsp;&amp;nbsp; 67%&amp;nbsp;&amp;nbsp; 57920 10282504&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1%&amp;nbsp;&amp;nbsp; /mnt/d&lt;br /&gt;Shell:/etc &amp;gt;:&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4205</guid><pubDate>Fri, 31 Oct 2008 16:08:03 GMT</pubDate></item><item><title>intro 3 for dev</title><link>http://n23.appspot.com/blog/post/4402</link><description>&lt;pre&gt;INTRO(3)                  OpenBSD Programmer's Manual                 INTRO(3)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=3#end" name="NAME"&gt;&lt;strong&gt;NAME&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;     &lt;strong&gt;intro&lt;/strong&gt; - introduction to the C libraries&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=3#end" name="SYNOPSIS"&gt;&lt;strong&gt;SYNOPSIS&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;     &lt;strong&gt;cc&lt;/strong&gt; [&lt;em&gt;flags&lt;/em&gt;] &lt;em&gt;file&lt;/em&gt; &lt;em&gt;...&lt;/em&gt;  [&lt;strong&gt;-llibrary&lt;/strong&gt;]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=3#end" name="DESCRIPTION"&gt;&lt;strong&gt;DESCRIPTION&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;     The manual pages in section 3 provide an overview of the C library func-&lt;br /&gt;     tions, their error returns, and other common definitions and concepts.&lt;br /&gt;     Most of these functions are available from the C library, &lt;em&gt;libc&lt;/em&gt;.  Other&lt;br /&gt;     libraries, such as the math library, &lt;em&gt;libm&lt;/em&gt;, must be indicated at compile&lt;br /&gt;     time with the &lt;strong&gt;-l&lt;/strong&gt; option of the compiler.&lt;br /&gt;&lt;br /&gt;     The various libraries (followed by the loader flag):&lt;br /&gt;&lt;br /&gt;     libc (&lt;strong&gt;-lc&lt;/strong&gt;)&lt;br /&gt;             Standard C library functions.  When using the C compiler &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=cc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;cc(1)&lt;/a&gt;,&lt;br /&gt;             it is not necessary to supply the loader flag &lt;strong&gt;-lc&lt;/strong&gt; for these func-&lt;br /&gt;             tions.  There are several ``libraries'' or groups of functions&lt;br /&gt;             included inside of libc: the standard I/O routines, database rou-&lt;br /&gt;             tines, bit operators, string operators, character tests and char-&lt;br /&gt;             acter operators, DES encryption routines, storage allocation,&lt;br /&gt;             time functions, signal handling, and more.&lt;br /&gt;&lt;br /&gt;     libcompat (&lt;strong&gt;-lcompat&lt;/strong&gt;)&lt;br /&gt;             Functions which are obsolete but are available for compatibility&lt;br /&gt;             with 4.3BSD.  In particular, a number of system call interfaces&lt;br /&gt;             provided in previous releases of BSD have been included for&lt;br /&gt;             source code compatibility.  Use of these routines should, for the&lt;br /&gt;             most part, be avoided.  The manual page entry for each compati-&lt;br /&gt;             bility routine indicates the proper interface to use.&lt;br /&gt;&lt;br /&gt;     libcrypto (&lt;strong&gt;-lcrypto&lt;/strong&gt;)&lt;br /&gt;             The OpenSSL crypto library.  Implements a range of cryptographic&lt;br /&gt;             algorithms, providing such functionality as symmetric encryption,&lt;br /&gt;             public key cryptography, and certificate handling.  See&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=crypto&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;crypto(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libcurses (&lt;strong&gt;-lcurses&lt;/strong&gt;)&lt;br /&gt;     libncurses (&lt;strong&gt;-lncurses&lt;/strong&gt;)&lt;br /&gt;     libtermcap (&lt;strong&gt;-ltermcap&lt;/strong&gt;)&lt;br /&gt;     libtermlib (&lt;strong&gt;-ltermlib&lt;/strong&gt;)&lt;br /&gt;             Terminal-independent screen management routines for two-dimen-&lt;br /&gt;             sional non-bitmap display terminals.  This implementation is&lt;br /&gt;             ``new curses'' and is a replacement for 4.2BSD classic curses.&lt;br /&gt;             The libraries &lt;em&gt;libncurses&lt;/em&gt;, &lt;em&gt;libtermcap&lt;/em&gt;, and &lt;em&gt;libtermlib&lt;/em&gt; are all hard&lt;br /&gt;             links to &lt;em&gt;libcurses&lt;/em&gt;.  This is for compatibility purposes only; new&lt;br /&gt;             programs should link with &lt;strong&gt;-lcurses&lt;/strong&gt;.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=curses&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;curses(3)&lt;/a&gt; and&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=termcap&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;termcap(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libdes (&lt;strong&gt;-ldes&lt;/strong&gt;)&lt;br /&gt;             Implementation of the DES encryption algorithm.  See&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=des_crypt&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;des_crypt(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libedit (&lt;strong&gt;-ledit&lt;/strong&gt;)&lt;br /&gt;             Generic line editing and history functions, similar to those&lt;br /&gt;             found in &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=sh&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;sh(1)&lt;/a&gt;.  Functions using the &lt;em&gt;libedit&lt;/em&gt; library must be&lt;br /&gt;             linked with the &lt;em&gt;libcurses&lt;/em&gt; library, i.e. &lt;strong&gt;-ledit -lcurses&lt;/strong&gt;.  See&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=editline&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;editline(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libevent (&lt;strong&gt;-levent&lt;/strong&gt;)&lt;br /&gt;             Provides a mechanism to execute a function when a specific event&lt;br /&gt;             on a file descriptor occurs or after a given time has passed.&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=event&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;event(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libexpat (&lt;strong&gt;-lexpat&lt;/strong&gt;)&lt;br /&gt;             Library routines for parsing XML documents.&lt;br /&gt;&lt;br /&gt;     libform (&lt;strong&gt;-lform&lt;/strong&gt;)&lt;br /&gt;             Terminal-independent facilities for composing form screens on&lt;br /&gt;             character-cell terminals.  Functions using the &lt;em&gt;libform&lt;/em&gt; library&lt;br /&gt;             must be linked with the &lt;em&gt;libcurses&lt;/em&gt; library, i.e. &lt;strong&gt;-lform -lcurses&lt;/strong&gt;.&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=form&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;form(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libfrtbegin (&lt;strong&gt;-lfrtbegin&lt;/strong&gt;)&lt;br /&gt;     libg2c (&lt;strong&gt;-lg2c&lt;/strong&gt;)&lt;br /&gt;             Support routines for Fortran functions.  These two libraries were&lt;br /&gt;             separated to allow linking Fortran code with other languages on&lt;br /&gt;             ELF platforms.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=g77&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;g77(1)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libgcc (&lt;strong&gt;-lgcc&lt;/strong&gt;)&lt;br /&gt;             GCC runtime support, including long arithmetic, propolice, and&lt;br /&gt;             language independent exception support.  Note: users do not nor-&lt;br /&gt;             mally have to explicitly link with this library.&lt;br /&gt;&lt;br /&gt;     libgssapi (&lt;strong&gt;-lgssapi&lt;/strong&gt;)&lt;br /&gt;             The Generic Security Service Application Program Interface&lt;br /&gt;             (GSS-API) provides security services to callers in a generic&lt;br /&gt;             fashion.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=gssapi&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;gssapi(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libiberty (&lt;strong&gt;-liberty&lt;/strong&gt;)&lt;br /&gt;             Collection of subroutines missing in other operating systems, as&lt;br /&gt;             well as the C++ demangler and other functions used by the GNU&lt;br /&gt;             toolchain.&lt;br /&gt;&lt;br /&gt;     libkadm5clnt (&lt;strong&gt;-lkadm5clnt&lt;/strong&gt;)&lt;br /&gt;             Kerberos administration client library, for talking to a Kerberos&lt;br /&gt;             database.  Clients communicate via the network.&lt;br /&gt;&lt;br /&gt;     libkadm5srv (&lt;strong&gt;-lkadm5srv&lt;/strong&gt;)&lt;br /&gt;             Kerberos administration server library, for talking to a Kerberos&lt;br /&gt;             database.  Servers talk directly to the database.&lt;br /&gt;&lt;br /&gt;     libkeynote (&lt;strong&gt;-lkeynote&lt;/strong&gt;)&lt;br /&gt;             System library for the keynote trust-management system.  Trust-&lt;br /&gt;             management systems provide standard, general-purpose mechanisms&lt;br /&gt;             for specifying application security policies and credentials.&lt;br /&gt;             Functions using the libkeynote library must be linked with the&lt;br /&gt;             &lt;em&gt;libm&lt;/em&gt; and &lt;em&gt;libcrypto&lt;/em&gt; libraries, i.e. &lt;strong&gt;-lkeynote -lm&lt;/strong&gt; -lcrypto.  See&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=keynote&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;keynote(3)&lt;/a&gt; and &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=keynote&amp;amp;amp" rel="no-follow;sektion=4&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;keynote(4)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libkrb5 (&lt;strong&gt;-lkrb5&lt;/strong&gt;)&lt;br /&gt;     libasn1 (&lt;strong&gt;-lasn1&lt;/strong&gt;)&lt;br /&gt;     libcom_err (&lt;strong&gt;-lcom&lt;/strong&gt;&lt;em&gt;_&lt;/em&gt;&lt;strong&gt;err&lt;/strong&gt;)&lt;br /&gt;     libhdb (&lt;strong&gt;-lhdb&lt;/strong&gt;)&lt;br /&gt;     libkafs (&lt;strong&gt;-lkafs&lt;/strong&gt;)&lt;br /&gt;             Kerberos 5 libraries.  The libraries &lt;em&gt;libasn1&lt;/em&gt;, &lt;em&gt;libcom_err&lt;/em&gt;, &lt;em&gt;libhdb&lt;/em&gt;,&lt;br /&gt;             and &lt;em&gt;libkafs&lt;/em&gt; are all hard links to &lt;em&gt;libkrb5&lt;/em&gt;.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=krb5&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;krb5(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libkvm (&lt;strong&gt;-lkvm&lt;/strong&gt;)&lt;br /&gt;             Kernel memory interface library.  Provides a uniform interface&lt;br /&gt;             for accessing kernel virtual memory images, including live sys-&lt;br /&gt;             tems and crash dumps.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=kvm&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;kvm(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libl (&lt;strong&gt;-ll&lt;/strong&gt;)&lt;br /&gt;     libfl (&lt;strong&gt;-lfl&lt;/strong&gt;)&lt;br /&gt;             The library for &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=lex&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;lex(1)&lt;/a&gt;, a lexical analyzer generator.  The &lt;em&gt;libfl&lt;/em&gt;&lt;br /&gt;             library is a hard link to &lt;em&gt;libl&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;     libm (&lt;strong&gt;-lm&lt;/strong&gt;)&lt;br /&gt;             Mathematical functions which comprise the C math library, &lt;em&gt;libm&lt;/em&gt;.&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=math&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;math(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libmenu (&lt;strong&gt;-lmenu&lt;/strong&gt;)&lt;br /&gt;             Terminal-independent facilities for composing menu systems on&lt;br /&gt;             character-cell terminals.  Functions using the &lt;em&gt;libmenu&lt;/em&gt; library&lt;br /&gt;             must be linked with the &lt;em&gt;libcurses&lt;/em&gt; library, i.e. &lt;strong&gt;-lmenu -lcurses&lt;/strong&gt;.&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=menu&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;menu(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libmilter (&lt;strong&gt;-lmilter&lt;/strong&gt;)&lt;br /&gt;             The &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=sendmail&amp;amp;amp" rel="no-follow;sektion=8&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;sendmail(8)&lt;/a&gt; mail filter API.  See the documentation in&lt;br /&gt;             &lt;em&gt;/usr/share/doc/html/milter/&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;     libobjc (&lt;strong&gt;-lobjc&lt;/strong&gt;)&lt;br /&gt;             Library for Objective C, an object-oriented superset of ANSI C.&lt;br /&gt;             Use this to compile Objective C programs.&lt;br /&gt;&lt;br /&gt;     libocurses (&lt;strong&gt;-locurses&lt;/strong&gt;)&lt;br /&gt;     libotermcap (&lt;strong&gt;-lotermcap&lt;/strong&gt;)&lt;br /&gt;             Routines to provide the user with a method of updating screens&lt;br /&gt;             with reasonable optimisation.  The &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ocurses&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ocurses(3)&lt;/a&gt; library is compati-&lt;br /&gt;             ble with the &lt;em&gt;curses&lt;/em&gt; library provided in 4.3.  &lt;em&gt;libotermcap&lt;/em&gt; is the&lt;br /&gt;             4.3-compatible &lt;em&gt;termcap&lt;/em&gt; library, and is a hard link to &lt;em&gt;libocurses&lt;/em&gt;.&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=otermcap&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;otermcap(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libossaudio (&lt;strong&gt;-lossaudio&lt;/strong&gt;)&lt;br /&gt;             Provides an emulation of the &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=OSS&amp;amp;amp" rel="no-follow;sektion=Linux&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;OSS (Linux)&lt;/a&gt; audio interface.  This&lt;br /&gt;             is used only for porting programs.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ossaudio&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ossaudio(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libpanel (&lt;strong&gt;-lpanel&lt;/strong&gt;)&lt;br /&gt;             Terminal-independent facilities for stacked windows on character-&lt;br /&gt;             cell terminals.  Functions using the &lt;em&gt;libpanel&lt;/em&gt; library must be&lt;br /&gt;             linked with the &lt;em&gt;libcurses&lt;/em&gt; library, i.e. &lt;strong&gt;-lpanel -lcurses&lt;/strong&gt;.  See&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=panel&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;panel(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libpcap (&lt;strong&gt;-lpcap&lt;/strong&gt;)&lt;br /&gt;             Packet capture library.  All packets on the network, even those&lt;br /&gt;             destined for other hosts, are accessible through this library.&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=pcap&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;pcap(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libperl (&lt;strong&gt;-lperl&lt;/strong&gt;)&lt;br /&gt;             Support routines for &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=perl&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;perl(1)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libpthread (&lt;strong&gt;-pthread&lt;/strong&gt;)&lt;br /&gt;             IEEE Std 1003.1-2001 (``POSIX'') threads API and thread sched-&lt;br /&gt;             uler.  Threaded applications should use &lt;strong&gt;-pthread&lt;/strong&gt; not &lt;strong&gt;-lpthread&lt;/strong&gt;.&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=pthreads&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;pthreads(3)&lt;/a&gt;.  Note: users do not normally have to explicitly&lt;br /&gt;             link with this library.&lt;br /&gt;&lt;br /&gt;     libreadline (&lt;strong&gt;-lreadline&lt;/strong&gt;)&lt;br /&gt;             Command line editing interface.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=readline&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;readline(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     librpcsvc (&lt;strong&gt;-lrpcsvc&lt;/strong&gt;)&lt;br /&gt;             Generated by &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=rpcgen&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;rpcgen(1)&lt;/a&gt;, containing stub functions for many common&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=rpc&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;rpc(3)&lt;/a&gt; protocols.&lt;br /&gt;&lt;br /&gt;     libsectok (&lt;strong&gt;-lsectok&lt;/strong&gt;)&lt;br /&gt;             Library for communicating with ISO 7816 smartcards.  See&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=sectok&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;sectok(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libskey (&lt;strong&gt;-lskey&lt;/strong&gt;)&lt;br /&gt;             Support library for the S/Key one time password (OTP) authentica-&lt;br /&gt;             tion toolkit.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=skey&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;skey(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libssl (&lt;strong&gt;-lssl&lt;/strong&gt;)&lt;br /&gt;             The OpenSSL ssl library implements the Secure Sockets Layer (SSL&lt;br /&gt;             v2/v3) and Transport Layer Security (TLS v1) protocols.  See&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ssl&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ssl(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libstdc++ (&lt;strong&gt;-lstdc++&lt;/strong&gt;)&lt;br /&gt;             GCC subroutine library for C++.  See c++(1).  Note: users do not&lt;br /&gt;             normally have to explicitly link with this library.&lt;br /&gt;&lt;br /&gt;     libsupc++ (&lt;strong&gt;-lsupc++&lt;/strong&gt;)&lt;br /&gt;             (GCC 3.3.x systems only) C++ core language support (exceptions,&lt;br /&gt;             new, typeinfo).  Note: users do not normally have to explicitly&lt;br /&gt;             link with this library.&lt;br /&gt;&lt;br /&gt;     libusbhid (&lt;strong&gt;-lusbhid&lt;/strong&gt;)&lt;br /&gt;             Routines to extract data from USB Human Interface Devices (HIDs).&lt;br /&gt;             See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=usbhid&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;usbhid(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libutil (&lt;strong&gt;-lutil&lt;/strong&gt;)&lt;br /&gt;             System utility functions.  These are currently &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=check_expire&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;check_expire(3)&lt;/a&gt;,&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=fmt_scaled&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;fmt_scaled(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=fparseln&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;fparseln(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=getmaxpartitions&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;getmaxpartitions(3)&lt;/a&gt;,&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=getrawpartition&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;getrawpartition(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=login&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;login(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=login_fbtab&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;login_fbtab(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=opendev&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;opendev(3)&lt;/a&gt;,&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=opendisk&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;opendisk(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=openpty&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;openpty(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=pidfile&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;pidfile(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=pw_init&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;pw_init(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=pw_lock&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;pw_lock(3)&lt;/a&gt;,&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=readlabelfs&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;readlabelfs(3)&lt;/a&gt; and &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=uucplock&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;uucplock(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libwrap (&lt;strong&gt;-lwrap&lt;/strong&gt;)&lt;br /&gt;             TCP wrapper access control library.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=hosts_access&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;hosts_access(3)&lt;/a&gt; and&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=rfc1413&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;rfc1413(3)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     liby (&lt;strong&gt;-ly&lt;/strong&gt;)&lt;br /&gt;             The library for &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=yacc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;yacc(1)&lt;/a&gt;, an LALR parser generator.&lt;br /&gt;&lt;br /&gt;     libz (&lt;strong&gt;-lz&lt;/strong&gt;)&lt;br /&gt;             General purpose data compression library.  The functions in this&lt;br /&gt;             library are documented in &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=compress&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;compress(3)&lt;/a&gt;.  The data format is de-&lt;br /&gt;             scribed in RFCs 1950 - 1952.&lt;br /&gt;&lt;br /&gt;     Platform-specific libraries:&lt;br /&gt;&lt;br /&gt;     libalpha (&lt;strong&gt;-lalpha&lt;/strong&gt;)&lt;br /&gt;             Alpha I/O and memory access functions.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=inb&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;inb(2)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libamd64 (&lt;strong&gt;-lamd64&lt;/strong&gt;)&lt;br /&gt;             AMD64 I/O and memory access functions.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=amd64_get_ioperm&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;amd64_get_ioperm(2)&lt;/a&gt;&lt;br /&gt;             and &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=amd64_iopl&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;amd64_iopl(2)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libarm (&lt;strong&gt;-larm&lt;/strong&gt;)&lt;br /&gt;             ARM I/O and memory access functions.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=arm_drain_writebuf&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;arm_drain_writebuf(2)&lt;/a&gt;&lt;br /&gt;             and &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=arm_sync_icache&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;arm_sync_icache(2)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     libi386 (&lt;strong&gt;-li386&lt;/strong&gt;)&lt;br /&gt;             i386 I/O and memory access functions.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=i386_get_ioperm&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;i386_get_ioperm(2)&lt;/a&gt;,&lt;br /&gt;             &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=i386_get_ldt&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;i386_get_ldt(2)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=i386_iopl&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;i386_iopl(2)&lt;/a&gt;, and &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=i386_vm86&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;i386_vm86(2)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=3#end" name="LIBRARY+TYPES"&gt;&lt;strong&gt;LIBRARY TYPES&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;     The system libraries are located in &lt;em&gt;/usr/lib&lt;/em&gt;.  Typically, a library will&lt;br /&gt;     have a number of variants:&lt;br /&gt;&lt;br /&gt;           libc.a&lt;br /&gt;           libc.so.30.1&lt;br /&gt;           libc_p.a&lt;br /&gt;           libc_pic.a&lt;br /&gt;&lt;br /&gt;     Libraries with an `.a' suffix are static.  When a program is linked&lt;br /&gt;     against a library, all the library code will be linked into the binary.&lt;br /&gt;     This means the binary can be run even when the libraries are unavailable.&lt;br /&gt;     However, it can be inefficient with memory usage.  The C compiler, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=cc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;cc(1)&lt;/a&gt;,&lt;br /&gt;     can be instructed to link statically by specifying the &lt;strong&gt;-static&lt;/strong&gt; flag.&lt;br /&gt;&lt;br /&gt;     Libraries with a `.so.X.Y' suffix are dynamic libraries.  When code is&lt;br /&gt;     compiled dynamically, the library code that the application needs is not&lt;br /&gt;     linked into the binary.  Instead, data structures are added containing&lt;br /&gt;     information about which dynamic libraries to link with.  When the binary&lt;br /&gt;     is executed, the run-time linker &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ld.so&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ld.so(1)&lt;/a&gt; reads these data structures,&lt;br /&gt;     and loads them at a virtual address using the &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=mmap&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;mmap(2)&lt;/a&gt; system call.&lt;br /&gt;&lt;br /&gt;     `X' represents the major number of the library, and `Y' represents the&lt;br /&gt;     minor number.  In general, a binary will be able to use a dynamic library&lt;br /&gt;     with a differing minor number, but the major numbers must match.  In the&lt;br /&gt;     example above, a binary linked with minor number `3' would be linkable&lt;br /&gt;     against libc.so.30.1, while a binary linked with major number `31' would&lt;br /&gt;     not.&lt;br /&gt;&lt;br /&gt;     The advantages of dynamic libraries are that multiple instances of the&lt;br /&gt;     same program can share address space, and the physical size of the binary&lt;br /&gt;     is smaller.  The disadvantage is the added complexity that comes with&lt;br /&gt;     loading the libraries dynamically, and the extra time taken to load the&lt;br /&gt;     libraries.  Of course, if the libraries are not available, the binary&lt;br /&gt;     will be unable to execute.  The C compiler, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=cc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;cc(1)&lt;/a&gt;, can be instructed to&lt;br /&gt;     link dynamically by specifying the &lt;strong&gt;-shared&lt;/strong&gt; flag, although on systems that&lt;br /&gt;     support it, this will be the default and need not be specified.&lt;br /&gt;&lt;br /&gt;     Libraries with a `_p.a' suffix are profiling libraries.  They contain ex-&lt;br /&gt;     tra information suitable for analysing programs, such as execution speed&lt;br /&gt;     and call counts.  This in turn can be interpreted by utilities such as&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=gprof&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;gprof(1)&lt;/a&gt;.  The C compiler, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=cc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;cc(1)&lt;/a&gt;, can be instructed to generate profiling&lt;br /&gt;     code, or to link with profiling libraries, by specifying the &lt;strong&gt;-pg&lt;/strong&gt; flag.&lt;br /&gt;&lt;br /&gt;     Libraries with a `_pic.a' suffix contain position-independent code (PIC).&lt;br /&gt;     Normally, compilers produce relocatable code.  Relocatable code needs to&lt;br /&gt;     be modified at run-time, depending on where in memory it is to be run.&lt;br /&gt;     PIC code does not need to be modified at run-time, but is less efficient&lt;br /&gt;     than relocatable code.  PIC code is used by shared libraries, which can&lt;br /&gt;     make them slower.  The C compiler, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=cc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;cc(1)&lt;/a&gt;, can be instructed to generate&lt;br /&gt;     PIC code, or to link with PIC libraries, by specifying the &lt;strong&gt;-fpic&lt;/strong&gt; or &lt;strong&gt;-fPIC&lt;/strong&gt;&lt;br /&gt;     flags.&lt;br /&gt;&lt;br /&gt;     With the exception of dynamic libraries, libraries are generated using&lt;br /&gt;     the &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ar&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ar(1)&lt;/a&gt; utility.  The libraries contain an index to the contents of the&lt;br /&gt;     library, stored within the library itself.  The index lists each symbol&lt;br /&gt;     defined by a member of a library that is a relocatable object file.  This&lt;br /&gt;     speeds up linking to the library, and allows routines in the library to&lt;br /&gt;     call each other regardless of their placement within the library.  The&lt;br /&gt;     index is created by &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ranlib&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ranlib(1)&lt;/a&gt; and can be viewed using &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=nm&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;nm(1)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;     The building of PIC versions of libraries and dynamic libraries can be&lt;br /&gt;     prevented by setting the variable NOPIC in &lt;em&gt;/etc/mk.conf&lt;/em&gt;.  The building of&lt;br /&gt;     profiling versions of libraries and/or dynamic libraries can be prevented&lt;br /&gt;     by setting the variable NOPROFILE in &lt;em&gt;/etc/mk.conf&lt;/em&gt;.  See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=mk.conf&amp;amp;amp" rel="no-follow;sektion=5&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;mk.conf(5)&lt;/a&gt; for&lt;br /&gt;     more details.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=3#end" name="FILES"&gt;&lt;strong&gt;FILES&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;     /usr/lib/libasn1.a&lt;br /&gt;     /usr/lib/libc.a&lt;br /&gt;     /usr/lib/libcom_err.a&lt;br /&gt;     /usr/lib/libcompat.a&lt;br /&gt;     /usr/lib/libcrypto.a&lt;br /&gt;     /usr/lib/libcurses.a&lt;br /&gt;     /usr/lib/libdes.a&lt;br /&gt;     /usr/lib/libedit.a&lt;br /&gt;     /usr/lib/libevent.a&lt;br /&gt;     /usr/lib/libexpat.a&lt;br /&gt;     /usr/lib/libfl.a&lt;br /&gt;     /usr/lib/libform.a&lt;br /&gt;     /usr/lib/libfrtbegin.a&lt;br /&gt;     /usr/lib/libg2c.a&lt;br /&gt;     /usr/lib/gcc-lib/${ARCH}-unknown-openbsd${OSREV}/${GCCREV}/fpic/libgcc.a&lt;br /&gt;     /usr/lib/libgssapi.a&lt;br /&gt;     /usr/lib/libhdb.a&lt;br /&gt;     /usr/lib/libiberty.a&lt;br /&gt;     /usr/lib/libkadm5clnt.a&lt;br /&gt;     /usr/lib/libkadm5srv.a&lt;br /&gt;     /usr/lib/libkafs.a&lt;br /&gt;     /usr/lib/libkeynote.a&lt;br /&gt;     /usr/lib/libkrb5.a&lt;br /&gt;     /usr/lib/libkvm.a&lt;br /&gt;     /usr/lib/libl.a&lt;br /&gt;     /usr/lib/libm.a&lt;br /&gt;     /usr/lib/libmenu.a&lt;br /&gt;     /usr/lib/libmilter.a&lt;br /&gt;     /usr/lib/libncurses.a&lt;br /&gt;     /usr/lib/libobjc.a&lt;br /&gt;     /usr/lib/libocurses.a&lt;br /&gt;     /usr/lib/libossaudio.a&lt;br /&gt;     /usr/lib/libotermcap.a&lt;br /&gt;     /usr/lib/libpanel.a&lt;br /&gt;     /usr/lib/libpcap.a&lt;br /&gt;     /usr/lib/libperl.a&lt;br /&gt;     /usr/lib/libpthread.a&lt;br /&gt;     /usr/lib/libreadline.a&lt;br /&gt;     /usr/lib/librpcsvc.a&lt;br /&gt;     /usr/lib/libsectok.a&lt;br /&gt;     /usr/lib/libskey.a&lt;br /&gt;     /usr/lib/libssl.a&lt;br /&gt;     /usr/lib/libstdc++.a&lt;br /&gt;     /usr/lib/libsupc++.a&lt;br /&gt;     /usr/lib/libtermcap.a&lt;br /&gt;     /usr/lib/libtermlib.a&lt;br /&gt;     /usr/lib/libusbhid.a&lt;br /&gt;     /usr/lib/libutil.a&lt;br /&gt;     /usr/lib/libwrap.a&lt;br /&gt;     /usr/lib/liby.a&lt;br /&gt;     /usr/lib/libz.a&lt;br /&gt;&lt;br /&gt;     /usr/lib/libalpha.a&lt;br /&gt;     /usr/lib/libamd64.a&lt;br /&gt;     /usr/lib/libarm.a&lt;br /&gt;     /usr/lib/libi386.a&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=3#end" name="SEE+ALSO"&gt;&lt;strong&gt;SEE ALSO&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ar&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ar(1)&lt;/a&gt;, c++(1), &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=cc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;cc(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=g77&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;g77(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=gcc-local&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;gcc-local(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=gprof&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;gprof(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ld&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ld(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ld.so&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ld.so(1)&lt;/a&gt;,&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=lex&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;lex(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=nm&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;nm(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=perl&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;perl(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ranlib&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ranlib(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=yacc&amp;amp;amp" rel="no-follow;sektion=1&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;yacc(1)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=2&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;intro(2)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=compress&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;compress(3)&lt;/a&gt;,&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=crypto&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;crypto(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=curses&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;curses(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=des_crypt&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;des_crypt(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=editline&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;editline(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=event&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;event(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=form&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;form(3)&lt;/a&gt;,&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=hosts_access&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;hosts_access(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=keynote&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;keynote(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=kvm&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;kvm(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=math&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;math(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=menu&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;menu(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ocurses&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ocurses(3)&lt;/a&gt;,&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ossaudio&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ossaudio(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=panel&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;panel(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=pcap&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;pcap(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=pthreads&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;pthreads(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=readline&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;readline(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=rfc1413&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;rfc1413(3)&lt;/a&gt;,&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=rpc&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;rpc(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=sectok&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;sectok(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=skey&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;skey(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ssl&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;ssl(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=stdio&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;stdio(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=termcap&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;termcap(3)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=usbhid&amp;amp;amp" rel="no-follow;sektion=3&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;usbhid(3)&lt;/a&gt;,&lt;br /&gt;     &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=keynote&amp;amp;amp" rel="no-follow;sektion=4&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;keynote(4)&lt;/a&gt;, &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=mk.conf&amp;amp;amp" rel="no-follow;sektion=5&amp;amp;arch=&amp;amp;apropos=0&amp;amp;manpath=OpenBSD+Current"&gt;mk.conf(5)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=intro&amp;amp;amp" rel="no-follow;sektion=3#end" name="HISTORY"&gt;&lt;strong&gt;HISTORY&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;     An &lt;strong&gt;intro&lt;/strong&gt; manual appeared in Version 7 AT&amp;amp;T UNIX.&lt;br /&gt;&lt;br /&gt;OpenBSD 4.4                     August 26, 2008&lt;/pre&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4402</guid><pubDate>Thu, 30 Oct 2008 14:29:24 GMT</pubDate></item><item><title>硬盘与分区</title><link>http://n23.appspot.com/blog/post/4204</link><description>&lt;p&gt;Shell:~/tmp &amp;gt;: df&amp;nbsp;&amp;nbsp; &lt;br /&gt;Filesystem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&amp;nbsp;&amp;nbsp;&amp;nbsp; Used&amp;nbsp;&amp;nbsp; Avail Capacity iused&amp;nbsp;&amp;nbsp; ifree&amp;nbsp; %iused&amp;nbsp; Mounted on&lt;br /&gt;/dev/sd0a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 97.9M&amp;nbsp;&amp;nbsp; 43.2M&amp;nbsp;&amp;nbsp; 49.9M&amp;nbsp;&amp;nbsp;&amp;nbsp; 46%&amp;nbsp;&amp;nbsp;&amp;nbsp; 2462&amp;nbsp;&amp;nbsp; 13536&amp;nbsp;&amp;nbsp;&amp;nbsp; 15%&amp;nbsp;&amp;nbsp; /&lt;br /&gt;/dev/sd0f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22.6G&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.3G&amp;nbsp;&amp;nbsp; 16.2G&amp;nbsp;&amp;nbsp;&amp;nbsp; 25%&amp;nbsp; 142498 2897628&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5%&amp;nbsp;&amp;nbsp; /home&lt;br /&gt;/dev/sd0d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1005M&amp;nbsp;&amp;nbsp; 20.0K&amp;nbsp;&amp;nbsp;&amp;nbsp; 955M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 39&amp;nbsp; 155863&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0%&amp;nbsp;&amp;nbsp; /tmp&lt;br /&gt;/dev/sd0g&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34.5G&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.4G&amp;nbsp;&amp;nbsp; 26.3G&amp;nbsp;&amp;nbsp;&amp;nbsp; 20%&amp;nbsp; 351775 4273375&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8%&amp;nbsp;&amp;nbsp; /usr&lt;br /&gt;/dev/sd0e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1005M&amp;nbsp;&amp;nbsp; 70.3M&amp;nbsp;&amp;nbsp;&amp;nbsp; 885M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7%&amp;nbsp;&amp;nbsp;&amp;nbsp; 2891&amp;nbsp; 153011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2%&amp;nbsp;&amp;nbsp; /var&lt;br /&gt;procfs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 447M&amp;nbsp;&amp;nbsp;&amp;nbsp; 280M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0B&amp;nbsp;&amp;nbsp; 100%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 76&amp;nbsp;&amp;nbsp; 65459&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0%&amp;nbsp;&amp;nbsp; /proc&lt;br /&gt;/dev/sd0i&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19.5G&amp;nbsp;&amp;nbsp;&amp;nbsp; 9.9G&amp;nbsp;&amp;nbsp;&amp;nbsp; 9.7G&amp;nbsp;&amp;nbsp;&amp;nbsp; 51%&amp;nbsp;&amp;nbsp; 89632 10125452&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1%&amp;nbsp;&amp;nbsp; /mnt/c&lt;br /&gt;/dev/sd0j&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30.1G&amp;nbsp;&amp;nbsp; 20.3G&amp;nbsp;&amp;nbsp;&amp;nbsp; 9.8G&amp;nbsp;&amp;nbsp;&amp;nbsp; 67%&amp;nbsp;&amp;nbsp; 57920 10292980&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1%&amp;nbsp;&amp;nbsp; /mnt/d&lt;br /&gt;Shell:~/tmp &amp;gt;: cat /etc/fstab &lt;br /&gt;/dev/sd0a / ffs rw 1 1&lt;br /&gt;/dev/sd0f /home ffs rw,nodev,nosuid 1 2&lt;br /&gt;/dev/sd0d /tmp ffs rw,nodev,nosuid 1 2&lt;br /&gt;/dev/sd0g /usr ffs rw,nodev 1 2&lt;br /&gt;/dev/sd0e /var ffs rw,nodev,nosuid 1 2&lt;br /&gt;/proc /proc procfs rw,linux 0 0&lt;/p&gt;
&lt;p&gt;Shell:~/tmp &amp;gt;: disklabel sd0&lt;br /&gt;# Inside MBR partition 2: type A6 start 104165460 size 130271085&lt;br /&gt;# /dev/rsd0c:&lt;br /&gt;type: ESDI&lt;br /&gt;disk: ESDI/IDE disk&lt;br /&gt;label: SAMSUNG HM120JI &lt;br /&gt;flags:&lt;br /&gt;bytes/sector: 512&lt;br /&gt;sectors/track: 63&lt;br /&gt;tracks/cylinder: 16&lt;br /&gt;sectors/cylinder: 1008&lt;br /&gt;cylinders: 16383&lt;br /&gt;total sectors: 234441648&lt;br /&gt;rpm: 3600&lt;br /&gt;interleave: 1&lt;br /&gt;trackskew: 0&lt;br /&gt;cylinderskew: 0&lt;br /&gt;headswitch: 0&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; # microseconds&lt;br /&gt;track-to-track seek: 0&amp;nbsp;&amp;nbsp;&amp;nbsp; # microseconds&lt;br /&gt;drivedata: 0 &lt;br /&gt;&lt;br /&gt;16 partitions:&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; size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset&amp;nbsp; fstype [fsize bsize&amp;nbsp; cpg]&lt;br /&gt;&amp;nbsp; a:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 204876&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 104165460&amp;nbsp; 4.2BSD&amp;nbsp;&amp;nbsp; 2048 16384&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 &lt;br /&gt;&amp;nbsp; b:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4195296&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 104370336&amp;nbsp;&amp;nbsp;&amp;nbsp; swap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; c:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 234441648&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp; unused&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; d:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2097648&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 108565632&amp;nbsp; 4.2BSD&amp;nbsp;&amp;nbsp; 2048 16384&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 &lt;br /&gt;&amp;nbsp; e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2097648&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110663280&amp;nbsp; 4.2BSD&amp;nbsp;&amp;nbsp; 2048 16384&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 &lt;br /&gt;&amp;nbsp; f:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48234816&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 112760928&amp;nbsp; 4.2BSD&amp;nbsp;&amp;nbsp; 2048 16384&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 &lt;br /&gt;&amp;nbsp; g:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 73440801&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 160995744&amp;nbsp; 4.2BSD&amp;nbsp;&amp;nbsp; 2048 16384&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 &lt;br /&gt;&amp;nbsp; i:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40965687&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 63 unknown&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; j:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 63199710&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40965750 unknown&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;Shell:~/tmp &amp;gt;:&lt;/p&gt;
&lt;p&gt;for my notebook.&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4204</guid><pubDate>Thu, 30 Oct 2008 13:14:22 GMT</pubDate></item><item><title>apropos</title><link>http://n23.appspot.com/blog/post/4401</link><description>&lt;p&gt;Shell:~/tmp &amp;gt;: man apropos&lt;/p&gt;
&lt;p&gt;APROPOS(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenBSD Reference Manual&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; APROPOS(1)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; apropos - locate commands by keyword lookup&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; apropos [-C file] [-M path] [-m path] keyword ...&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; apropos shows which manual pages contain instances of any of the given&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keyword(s) in their title line.&amp;nbsp; Each word is considered separately and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case of letters is ignored.&amp;nbsp; Words which are part of other words are con-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sidered; when looking for ``compile'', apropos will also list all in-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stances of ``compiler''.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If the line output by apropos starts ``name (section) ...'', you can en-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ter ``man section name'' to get its documentation.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;unix-center.net:~ &amp;gt;: man apropos&lt;br /&gt;apropos(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; apropos(1)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; apropos - search the whatis database for strings&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; apropos keyword ...&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; apropos searches a set of database files containing short descriptions of system commands for keywords and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; displays the result on the standard output.&lt;br /&gt;&lt;br /&gt;AUTHOR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; John W. Eaton was the original author of man.&amp;nbsp; Zeyd M. Ben-Halim released man&amp;nbsp; 1.2,&amp;nbsp; and&amp;nbsp; Andries&amp;nbsp; Brouwer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; followed&amp;nbsp; up&amp;nbsp; with&amp;nbsp; versions&amp;nbsp; 1.3 thru 1.5p.&amp;nbsp; Federico Lucifredi &amp;lt;flucifredi@acm.org&amp;gt; is the current main-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tainer.&lt;/p&gt;
&lt;p&gt;竟然一直不知道有这个命令，以前就知道man -k了，以后也要记得还有whatis, whereis.&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4401</guid><pubDate>Thu, 30 Oct 2008 13:11:48 GMT</pubDate></item><item><title>Bind On OpenBSD</title><link>http://n23.appspot.com/blog/post/4203</link><description>&lt;p&gt;Shell:~ &amp;gt;: sudo vi /etc/rc.conf.local&lt;br /&gt;named_flags=&amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;Shell:~ &amp;gt;: sudo cp -rf /var/named/etc/root.hint /var/named/standard/root.hint&lt;br /&gt;Shell:~ &amp;gt;: cd /var/named/standard&lt;br /&gt;Shell:/var/named/standard &amp;gt;: sudo wget ftp://ftp.internic.net/domain/db.cache &lt;br /&gt;Shell:/var/named/standard &amp;gt;: sudo wget ftp://ftp.internic.net/domain/named.cache &lt;br /&gt;Shell:/var/named/standard &amp;gt;: sudo wget ftp://ftp.internic.net/domain/named.root &lt;br /&gt;&lt;br /&gt;Shell:~ &amp;gt;: cat /etc/resolv.conf&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;lookup file bind&lt;br /&gt;nameserver 127.0.0.1&lt;br /&gt;nameserver 202.96.128.166&lt;br /&gt;nameserver 202.96.134.133&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4203</guid><pubDate>Thu, 23 Oct 2008 15:15:19 GMT</pubDate></item><item><title>Gidot Black - 微软非官方黑屏增值服务</title><link>http://n23.appspot.com/blog/post/4202</link><description>&lt;p&gt;&lt;a href="http://www.appinn.com/" rel="no-follow" target="_blank"&gt;小众软件&lt;/a&gt;读者 &lt;a href="http://runningwaterpro.blog.163.com/" rel="no-follow" target="_blank"&gt;李二嫂的猪&lt;/a&gt; 强烈推荐！&lt;/p&gt;
&lt;p&gt;最近的黑屏事件，真是如火如荼：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://news.xinhuanet.com/tech/2008-10/21/content_10227375.htm" rel="no-follow" target="_blank"&gt;有人恶搞&lt;/a&gt;，DIY 纯黑壁纸，上书&amp;ldquo;绝对盗版自觉黑屏&amp;rdquo;几个大字。&lt;a href="http://ahk.5d6d.com/viewthread.php?tid=700" rel="no-follow" target="_blank"&gt;AHK 粉丝请参考 AutoHotKey 中文论坛自觉黑屏法&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://news.xinhuanet.com/tech/2008-10/21/content_10226283.htm" rel="no-follow" target="_blank"&gt;有人向公安部举报，称微软黑屏是最大黑客行为&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://news.xinhuanet.com/tech/2008-10/21/content_10228013.htm" rel="no-follow" target="_blank"&gt;有人利用黑屏计划传播病毒&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cnbeta.com/articles/67650.htm" rel="no-follow" target="_blank"&gt;有人爆料：XP 家庭版不参加&amp;rdquo;黑屏&amp;rdquo;验证&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;有人破解黑屏补丁，链接就不给出，有兴趣自信搜索。注意防毒防虫防火。&lt;/li&gt;
&lt;li&gt;Keso 也来&lt;a href="http://blog.donews.com/keso/archive/2008/10/21/1364509.aspx" rel="no-follow" target="_blank"&gt;三言二拍：我们对微软的复杂情感&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;小众跟着瞎掺和什么？我们可不是跟风炒作。微软非官方黑屏增值服务真的是个好东西！&lt;/p&gt;
&lt;p&gt;Gidot Black 的作者有这两个软件在小众介绍过：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.appinn.com/gidot-typesetter/" rel="no-follow" target="_blank"&gt;Gidot Typesetter - 文章自动排版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.appinn.com/gidot-box/" rel="no-follow" target="_blank"&gt;Gidot Box - 桌面一键搜索&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先来看界面：&lt;/p&gt;
&lt;a href="http://www.appinn.com/gidot-black/" rel="no-follow" target="_blank"&gt;&lt;img src="http://pic.yupoo.com/jdvip/274516613a34/medium.jpg" alt="" /&gt;&lt;/a&gt;
&lt;p&gt;明白了吧？是个护眼软件！效果很棒哦，一个渐渐出现的黑色窗口遮满这个屏幕，只留下鼠标。运行软件之后，可以右击其托盘图标，选择&amp;ldquo;立即体验黑屏&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;在真正黑屏期间（非预览模式），用快捷键调用任务管理器的话，会是这个效果：&lt;/p&gt;
&lt;a href="http://www.appinn.com/Gidot-Black/" rel="no-follow" target="_blank"&gt;&lt;img src="http://pic.yupoo.com/jdvip/386646613a34/medium.jpg" alt="" /&gt;&lt;/a&gt;
&lt;p&gt;如果能加上音乐播放，还有在最后 10 分钟每隔一分钟进行提醒就更好了。这个最后时间要能自定义。&lt;/p&gt;
&lt;p&gt;下载（800KB）：&lt;a href="http://www.appinn.com/down/1039" rel="no-follow" target="_blank"&gt;uushare&lt;/a&gt;(国内）|&lt;a href="http://www.gidot.cn/blog/article.asp?id=227" rel="no-follow" target="_blank"&gt;官方网站&lt;/a&gt;|&lt;a href="http://www.appinn.com/Gidot-Black/" rel="no-follow" target="_blank"&gt;来自小众软件&lt;/a&gt;|&lt;a href="http://www.appinn.com/down/1040" rel="no-follow" target="_blank"&gt;box.net&lt;/a&gt;|&lt;a href="http://www.appinn.com/down/1038" rel="no-follow" target="_blank"&gt;dropbox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://www.appinn.com/gidot-black/&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4202</guid><pubDate>Wed, 22 Oct 2008 04:17:45 GMT</pubDate></item><item><title>Android</title><link>http://n23.appspot.com/blog/post/4201</link><description>&lt;p&gt;详情查看：&lt;a href="http://source.android.com/" rel="no-follow" target="_blank"&gt;http://source.android.com/&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>java</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4201</guid><pubDate>Wed, 22 Oct 2008 04:15:13 GMT</pubDate></item><item><title>OpenBSD使用cdio刻录cd</title><link>http://n23.appspot.com/blog/post/3414</link><description>&lt;p&gt;Shell:~/tmp &amp;gt;: dmesg | grep cd | head&lt;br /&gt;cd0 at scsibus0 targ 0 lun 0: &amp;lt;QSI, DVD+-RW SDW-082S, LX06&amp;gt; SCSI0 5/cdrom removable&lt;br /&gt;cd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2&lt;/p&gt;
&lt;p&gt;Shell:~ &amp;gt;: wget http://ftp.bsdanywhere.org/4.3/bsdanywhere43-i386.iso&lt;br /&gt;Shell:~ &amp;gt;: eject cd0&lt;br /&gt;Shell:~ &amp;gt;: sudo cdio -f cd0c tao bsdanywhere43-i386.iso&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;太简单了，电池内置啊。&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3414</guid><pubDate>Mon, 20 Oct 2008 16:50:59 GMT</pubDate></item><item><title>一些常见的关于 IT 的定律</title><link>http://n23.appspot.com/blog/post/3212</link><description>&lt;h4&gt;摩尔定律&lt;/h4&gt;
&lt;p&gt;集成电路芯片上所集成的电路的数目，每隔18个月就翻一番。(&lt;a href="http://baike.baidu.com/view/17904.htm" rel="no-follow" target="_blank"&gt;refer&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;摩尔定律人人都知道，也是老生常谈了。近年来摩尔也做了一点修正，总体来说，再来一段时间内，仍然管用。&lt;/p&gt;
&lt;h4&gt;Metcalfe 定律&lt;/h4&gt;
&lt;p&gt;网络的价值与上网人数的平方成正比。Bob Metcalfe@3Com&lt;/p&gt;
&lt;p&gt;Metcalfe 定律现在来看，也适用于 SNS。尽管关键节点的作用可能对整天定律的准确性有很大影响。&lt;/p&gt;
&lt;h4&gt;吉尔德定律&lt;/h4&gt;
&lt;p&gt;未来25年，带宽每六个月增一倍。by George Gilder&lt;/p&gt;
&lt;p&gt;在国内基本上很难感受到每六个月增一倍。倒是每六个月网速度慢一倍差不多。&lt;/p&gt;
&lt;h4&gt;Traver 定律&lt;/h4&gt;
&lt;p&gt;一条连接的价值等于用户所能访问到的应用程序功能的倍数 by Traver Grue Kennedy@Cisco&lt;/p&gt;
&lt;h4&gt;达维多定律&lt;/h4&gt;
&lt;p&gt;一家企业要在市场中总是占据主导地位，那么就要做到第一个开发出新一代产品，第一个淘汰自己现有的产品。by William H Davidow@Intel&lt;/p&gt;
&lt;p&gt;这一条对于个人技能发展很有参考价值。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://www.dbanotes.net/geek/it_laws.html&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3212</guid><pubDate>Mon, 20 Oct 2008 13:49:52 GMT</pubDate></item><item><title>DjangoBBS</title><link>http://n23.appspot.com/blog/post/3413</link><description>&lt;p&gt;http://code.google.com/p/djangobbs, 欢迎参加...&lt;/p&gt;</description><author>No.0023</author><category>Django</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3413</guid><pubDate>Mon, 20 Oct 2008 09:02:45 GMT</pubDate></item><item><title>用 Python + django 10分鐘內作出一個 blog </title><link>http://n23.appspot.com/blog/post/3412</link><description>&lt;p&gt;在 &lt;a href="http://www.rubyonrails.org/" rel="no-follow" target="_blank"&gt;Ruby on Rails&lt;/a&gt; 的官方網站上有 15 分鐘作出一個 weblog 的 screencast，的確 demo 了 RoR 開發的快速。不過萬萬不可太迷信只有 RoR 能這麼神速，根據最近擠出一點時間看 &lt;a href="http://www.djangoproject.com/" rel="no-follow" target="_blank"&gt;django&lt;/a&gt; 的東西後，我也想先來作個「10分鐘做出 blog 的挑戰」。（由於還不太會用製作 screen cast 的軟體，所以只能用文字介紹..）這篇文章只是描述一下建構過程，所以不會介紹 django 環境的安裝設定，請讀者見諒。&lt;/p&gt;
&lt;p&gt;稍微簡介一下 django，它是一個基於 &lt;a href="http://www.python.org/" rel="no-follow" target="_blank&amp;quot;"&gt;Python&lt;/a&gt; 語言的 Web 開發框架（framework）。&lt;/p&gt;
&lt;h4&gt;建立 project 及 app&lt;/h4&gt;
&lt;p&gt;在 django 的環境裡，一個 project 裡可以有很多個 application，如此一來同一個 project 下的 application 便能共用同一套環境設定。所以我們先在命令列下執行 django-admin.py 來建立一個 project：&lt;/p&gt;
&lt;a href="http://www.zooomr.com/photos/ericsk/3783697/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783697_05bb08763c.jpg" alt="django1" height="112" width="500" /&gt;&lt;/a&gt;
&lt;p&gt;先來改一下 demo/settings.py 的設定，裡面設定我們會用 sqlite3 來作資料庫的引擎，然後產生一個 demo.db 的檔案來當資料庫，再設定一些時區及 template 目錄等：&lt;/p&gt;


&lt;pre&gt;DATABASE_ENGINE = 'sqlite3'&lt;br /&gt;DATABASE_NAME = 'demo.db'&lt;br /&gt;...&lt;br /&gt;TIME_ZONE='Asia/Taipei'&lt;br /&gt;LANGUAGE_CODE='zh-tw'&lt;br /&gt;...&lt;br /&gt;TEMPLATE_DIRS = (&lt;br /&gt;  ...&lt;br /&gt;  '.',&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;INSTALLED_APPS = (&lt;br /&gt;  'django.contrib.admin',&lt;br /&gt;  ..&lt;br /&gt;  'demo.blog',  # 等一下就會產生&lt;br /&gt;)&lt;/pre&gt;


&lt;p&gt;然後在 demo 目錄下建立一個 blog 的 app：&lt;/p&gt;
&lt;a href="http://www.zooomr.com/photos/ericsk/3783724/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783724_b998f6d599.jpg" alt="圖片 1" height="108" width="500" /&gt;&lt;/a&gt;
&lt;p&gt;然後在 demo/blog/models.py 裡建立需要的 model（DB Table）：&lt;/p&gt;


&lt;pre&gt;from django.db import models&lt;br /&gt;&lt;br /&gt;class Category(models.Model):&lt;br /&gt;  name = models.CharField(max_length=32)&lt;br /&gt;  def __unicode__(self):&lt;br /&gt;    return self.name&lt;br /&gt;  class Admin:&lt;br /&gt;    pass&lt;br /&gt;&lt;br /&gt;class Article(models.Model):&lt;br /&gt;  title         = models.CharField(max_length=64)&lt;br /&gt;  published_at  = models.DateTimeField('date published')&lt;br /&gt;  content       = models.TextField()&lt;br /&gt;  category      = models.ForeignKey(Category)&lt;br /&gt;  def __unicode__(self):&lt;br /&gt;    return self.title&lt;br /&gt;  class Admin:&lt;br /&gt;    pass&lt;/pre&gt;


&lt;p&gt;然後可以看看 django 產生的 SQL DDL，確定的話就用 syncdb 來建立資料庫表格：&lt;/p&gt;
&lt;a href="http://www.zooomr.com/photos/ericsk/3783749/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783749_809bed97cc.jpg" alt="django3" height="250" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://www.zooomr.com/photos/ericsk/3783752/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783752_60d1df10e0.jpg" alt="django4" height="238" width="500" /&gt;&lt;/a&gt;
&lt;p&gt;其中會要求你建立一個管理者帳號，這是為了之後進管理介面發表文章使用的帳號。完成這些動作之後，修改一下 demo/urls.py 的內容:&lt;/p&gt;


&lt;pre&gt;from django.conf.urls.defaults import *&lt;br /&gt;&lt;br /&gt;urlpatterns = patterns('',&lt;br /&gt;  (r'^blog/', include('demo.blog.urls')),&lt;br /&gt;  (r'^admin/', include('django.contrib.admin.urls')),&lt;br /&gt;)&lt;/pre&gt;


&lt;p&gt;先在 demo/blog/ 下建立一個 urls.py 的檔案，然後在命令列下輸入 python manage.py runserver，再打開瀏覽器輸入網址 http://localhost:8000/admin/ 馬上就有一個後台介面可以使用了呀！&lt;/p&gt;
&lt;a href="http://www.zooomr.com/photos/ericsk/3783806/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783806_a573406ca1.jpg" alt="django5" height="375" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://www.zooomr.com/photos/ericsk/3783848/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783848_081c906206.jpg" alt="django6" height="366" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;發表文章的介面還蠻好用的呢
&lt;p&gt;登入後你就可以直接建立 Category 及 Artical 的內容，這不就是一個現成的文章發表介面了嗎？一開始操作到現在不會超過5分鐘吧！&lt;/p&gt;
&lt;h4&gt;文章列表、單篇文章&lt;/h4&gt;
&lt;p&gt;可以發表文章之後，當然是要能夠瀏覽呀，所以我們馬上打開 demo/blog/urls.py 這個檔案，然後貼上下列的 code：&lt;/p&gt;


&lt;pre&gt;from django.conf.urls.defaults import *&lt;br /&gt;from demo.blog.models import Article&lt;br /&gt;&lt;br /&gt;info_dict = {&lt;br /&gt;  'queryset': Article.objects.all(),&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;urlpatterns = patterns('',&lt;br /&gt;    (r'^$', 'django.views.generic.list_detail.object_list', info_dict),&lt;br /&gt;    (r'^(?P&amp;lt;object_id&amp;gt;\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),&lt;br /&gt;)&lt;/pre&gt;


&lt;p&gt;然後再分別建立 demo/blog/article_list.html 及 demo/blog/article_detail.html 這兩個檔案，分別表示文章列表及文章內容:&lt;/p&gt;
&lt;p&gt;article_list.html:&lt;/p&gt;


&lt;pre&gt;{% if object_list %}&lt;br /&gt;  {% for article in object_list %}&lt;br /&gt;    &amp;lt;div class=&amp;quot;article&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/blog/{{ article.id }}&amp;quot;&amp;gt;{{ article.title }}&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;  {% endfor %}&lt;br /&gt;{% else %} &lt;br /&gt;  &amp;lt;p&amp;gt;對不起沒有文章喔！&amp;lt;/p&amp;gt;&lt;br /&gt;{% endif %}&lt;/pre&gt;


&lt;p&gt;article_detail.html:&lt;/p&gt;


&lt;pre&gt;&amp;lt;div class=&amp;quot;article&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;標題: {{ object.title }}&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div class=&amp;quot;pub_date&amp;quot;&amp;gt;{{ object.published_at }}&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;{{ object.content }}&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div class=&amp;quot;category&amp;quot;&amp;gt;發表於: {{ object.category.name }}&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;/admin/blog/article/{{ object.id }}&amp;quot;&amp;gt;修改&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;/blog&amp;quot;&amp;gt;BACK&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;


&lt;p&gt;這樣很快就弄出一個很像樣的 blog （只是不能留言 XD），網址在 http://localhost:8000/blog/。&lt;/p&gt;
&lt;a href="http://www.zooomr.com/photos/ericsk/3783931/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783931_a4810ccd7e_m.jpg" alt="django7" height="186" width="240" /&gt;&lt;/a&gt; &lt;a href="http://www.zooomr.com/photos/ericsk/3783933/" rel="no-follow"&gt;&lt;img src="http://static.zooomr.com/images/3783933_cc9872bd0b_m.jpg" alt="django8" height="186" width="240" /&gt;&lt;/a&gt;
&lt;p&gt;很快吧！當然我忽略了美工，也沒有客製化一下後台，不過 Web 開發愈來愈可怕了&amp;hellip;.真怕這種開發框架愈來愈多，老板都覺得寫網頁沒什麼了呢！&lt;/p&gt;
&lt;p&gt;值得一提的是，django 在 runserver 之後，都會把程式碼 compile 成 pyc 檔，看起來效率應該還不錯，也許要等我多玩熟一點才能做些實驗囉。&lt;/p&gt;
&lt;p&gt;from http://blog.ericsk.org/archives/815&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>Python</category><category>dev</category><category>Django</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3412</guid><pubDate>Mon, 20 Oct 2008 08:58:36 GMT</pubDate></item><item><title>120+网页开发资源汇集</title><link>http://n23.appspot.com/blog/post/3411</link><description>&lt;p&gt;&amp;quot;工欲善其事，必先利其器。&amp;quot;花大量时间去找资源和工具是件令人痛苦的事，好在有大善人为我们做了这件事，&lt;a href="http://www.mashable.com/2007/07/28/web-development/" rel="no-follow" target="_blank"&gt;这里&lt;/a&gt;有超过 120 个网络开发资源，因篇幅过长，以下只是一部分，更多请见文末链接。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;参考手册和综合资源：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo8.yupoo.com/20070730/031748_834729650.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.techcheatsheets.com/" rel="no-follow" target="_blank"&gt;TechCheatSheets&lt;/a&gt;－收集各类编程的清单和参考指南。&lt;br /&gt; &lt;a href="http://www.creativecommons.org/" rel="no-follow" target="_blank"&gt;Creative Commons&lt;/a&gt;－用它给你做的网络应用程序授以部分或全部权限。&lt;br /&gt; &lt;a href="http://developer.yahoo.com/ypatterns" rel="no-follow" target="_blank"&gt;Yahoo! Design Pattern Library&lt;/a&gt;－雅虎设计模式库（带详解的常见问题最佳解决方案）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;综合开发工具：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo8.yupoo.com/20070730/031749_9906668.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://jandan.net/" rel="no-follow" target="_blank"&gt;TurboDbAdmin&lt;/a&gt;－一个基于浏览器、用来察看和编辑数据库且无需刷新和提交的解决方案&lt;br /&gt; &lt;a href="http://www.gennit.com/" rel="no-follow" target="_blank"&gt;GENNIT&lt;/a&gt;－帮您生成代码，节省大量时间&lt;br /&gt; &lt;a href="http://www.kaosweaver.com/extensions" rel="no-follow" target="_blank"&gt;Kaosweaver&lt;/a&gt;－Dreamwaver拓展，包括&amp;quot;高级随机图片&amp;quot;和&amp;quot;面包屑&amp;quot;（ Breadcrumbs ，&amp;quot;面包屑型&amp;quot;网站架构）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;应用程序开发工具：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo6.yupoo.com/20070730/031444_1153273400.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.coghead.com/" rel="no-follow" target="_blank"&gt;Coghead&lt;/a&gt;－用直观的界面开发基于网络的应用程序。&lt;br /&gt; &lt;a href="http://www.icebergondemand.com/" rel="no-follow" target="_blank"&gt;Iceberg On Demand&lt;/a&gt;－一个基于网络用来开发、分享和销售网络应用程序的平台。&lt;br /&gt; &lt;a href="http://www.nenest.com/" rel="no-follow" target="_blank"&gt;Nenest&lt;/a&gt;－一个网络应用程序框架，包括一个表单开发工具和数据库，且无需编程。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码片断（Code Snippets）、搜索引擎和宝库（Repositories）：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo8.yupoo.com/20070730/031445_1642718628.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.krugle.com/" rel="no-follow" target="_blank"&gt;krugle&lt;/a&gt;－一个代码搜索引擎。&lt;br /&gt; &lt;a href="http://www.allthecode.com/" rel="no-follow" target="_blank"&gt;All The Code&lt;/a&gt;－源码搜索引擎。&lt;br /&gt; &lt;a href="http://www.ohloh.net/" rel="no-follow" target="_blank"&gt;Ohloh&lt;/a&gt;－开源软件目录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开发环境及框架：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo8.yupoo.com/20070730/031444_699752547.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.backbase.com/" rel="no-follow" target="_blank"&gt;BackBase Ajax 360&lt;/a&gt;－一个企业级 Ajax 开发框架。&lt;br /&gt; &lt;a href="http://www.maguma.com/en/maguma-workbench.html" rel="no-follow" target="_blank"&gt;Maguma Workbench&lt;/a&gt;－全功能的 PHP &amp;amp; Python 集成开发平台&lt;br /&gt; &lt;a href="http://tapestry.apache.org/" rel="no-follow" target="_blank"&gt;Tapestry&lt;/a&gt;－用来开发动态、强健、高可拓展性 Java 网络应用程序的开源框架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;聚合（Mashup）与API：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo8.yupoo.com/20070730/031748_298837741.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.openkapow.com/" rel="no-follow" target="_blank"&gt;OpenKapow&lt;/a&gt;－聚合编辑器和主机寄存（hosting）服务。&lt;br /&gt; &lt;a href="http://www.dapper.net/" rel="no-follow" target="_blank"&gt;Dapper&lt;/a&gt;－允许你抓取来自任何网站的 RSS、XML 或任何其他类型的订阅，使之对你的聚合或其他应用程序有效。&lt;br /&gt; &lt;a href="http://www.openlayers.org/" rel="no-follow" target="_blank"&gt;OpenLayers&lt;/a&gt;－允许你把一个动态地图放置在任何网页上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试、查错和工程管理：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo6.yupoo.com/20070730/031750_1285375948.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.spigit.com/" rel="no-follow" target="_blank"&gt;spigit&lt;/a&gt;－它是一个可供开发者展示他们的新想法和开创一个专业的网络的社区。通过模拟，使你能在发布一个beta之前去开发和完善你的构想。&lt;br /&gt; &lt;a href="http://www.rainbow9.org/" rel="no-follow" target="_blank"&gt;Rainbow9&lt;/a&gt;－在线编码、测试 javascript、css和html。&lt;br /&gt; &lt;a href="http://www.16bugs.com/" rel="no-follow" target="_blank"&gt;16bugs&lt;/a&gt;－容易而不冒失的 bug 查找&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ruby &amp;amp; Ruby on Rails 资源及工具：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo8.yupoo.com/20070730/031750_1573608165.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.rubyonrails.com/" rel="no-follow" target="_blank"&gt;Ruby on Rails&lt;/a&gt;－一个偏爱常规的开源网络框架。&lt;br /&gt; &lt;a href="http://instantrails.rubyforge.org/" rel="no-follow" target="_blank"&gt;Instant Rails&lt;/a&gt;－一个&amp;quot;运行时&amp;quot;（runtime）方案，预置Ruby, Rails, Apache and MySQL，无需安装。&lt;br /&gt; &lt;a href="http://www.nitroproject.org/" rel="no-follow" target="_blank"&gt;Nitro&lt;/a&gt;－Ruby和Javascript网络应用程序框架，轻易创造出 Web 2.0 应用程序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ajax 资源及工具：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo6.yupoo.com/20070730/031443_74159897.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.ajaxload.info/" rel="no-follow" target="_blank"&gt;ajaxload.info&lt;/a&gt;－这个易上手的网络应用程序使你创造出基于AJAX的载入条、花朵（和其他形态的），用以显示网站载入状态。&lt;br /&gt; &lt;a href="http://www.radrails.org/" rel="no-follow" target="_blank"&gt;Aptana&lt;/a&gt;－免费、开源的以 Javascript 为中心创建 AJAX 应用程序的开发环境。（不错，我用过，也可编辑CSS）&lt;br /&gt; &lt;a href="http://www.miniajax.com/" rel="no-follow" target="_blank"&gt;Mini ajax&lt;/a&gt;－提供免费、简易、可下载的 ajax &amp;amp; dhtml 代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PHP 资源及工具：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo6.yupoo.com/20070730/031749_1905395261.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.phpobjectgenerator.com/" rel="no-follow" target="_blank"&gt;PHP Object Generator&lt;/a&gt;－生成完整的 PHP4/PHP5 面向对象代码。&lt;br /&gt; &lt;a href="http://www.symfony-project.com/" rel="no-follow" target="_blank"&gt;Symfony&lt;/a&gt;－一个 PHP5 工程专用的网络应用程序框架，有简单模版、Ajax 支持、智能 URL 等功能。&lt;br /&gt; &lt;a href="http://www.cakephp.org/" rel="no-follow" target="_blank"&gt;CakePHP&lt;/a&gt;－它是一个快速的PHP开发框架，提供结构化的框架使各种水平的 PHP 用户都能快速地开发出可伸缩性的网络应用程序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flash 资源及工具：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo6.yupoo.com/20070730/031445_972974204.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.flashvillage.com/" rel="no-follow" target="_blank"&gt;flashvillage&lt;/a&gt;－免费高质量 flash 模版。需注册才能下载。&lt;br /&gt; &lt;a href="http://www.dontclick.it/" rel="no-follow" target="_blank"&gt;Dontclick.it&lt;/a&gt;－一个用以创建免点击用户界面的框架。&lt;br /&gt; &lt;a href="http://www.adobe.com/devnet/flash/" rel="no-follow" target="_blank"&gt;Flash Developer Center&lt;/a&gt;－Adobe 公司的flash 开发者中心，提供下载、实例、快速启动和社区。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Python 资源及工具：&lt;/strong&gt;&lt;br /&gt; &lt;img src="http://photo8.yupoo.com/20070730/031749_1440495976.jpg" alt="" /&gt;&lt;br /&gt; &lt;a href="http://www.pylonshq.com/" rel="no-follow" target="_blank"&gt;Pylons&lt;/a&gt;－将 Ruby、Python &amp;amp; Perl 结合在一个轻量级的网络框架中，使之能在快速开发的同时，依然保持可拓展性。&lt;br /&gt; &lt;a href="http://www.zope.org/" rel="no-follow" target="_blank"&gt;zope&lt;/a&gt;－支持 Python 网络应用程序的开源应用程序服务器。&lt;br /&gt; &lt;a href="http://spyce.sourceforge.net/" rel="no-follow" target="_blank"&gt;Spyce&lt;/a&gt;－使网络开发又变得有趣。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://www.wujianrong.com/archives/2008/10/120.html&lt;/p&gt;</description><author>No.0023</author><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3411</guid><pubDate>Mon, 20 Oct 2008 01:00:27 GMT</pubDate></item><item><title>代码之美（精选版）</title><link>http://n23.appspot.com/blog/post/3210</link><description>&lt;p&gt;本迷你书是《代码之美》的精选版（&lt;a href="http://www.china-pub.com/37838" rel="no-follow" target="_blank"&gt;互动出版网购买&lt;/a&gt;）， 包括正则表达式匹配器、最美丽的代码、美丽测试、NASA火星漫步者任务中的高可靠企业系统、美丽的并发、以REST方式集成业务伙伴等。《代码之美》由 华章图书出版公司出版，全书收录的皆为软件设计领域中的一组大师级作品。每一章都是由一位或几位著名程序员针对某个问题给出的完美的解决方案，并且细述了 这些解决方案的巧妙之处。&lt;/p&gt;
&lt;p&gt;《Beautiful Code》是由Greg Wilson在2006年构思的，本书的初衷是希望从优秀的软件开发人员和计算机科学家中提炼出一些有价值的思想。他与助理编辑Andy Oram一起走访了世界各地不同技术背景的专家。一堆如雷贯耳的名字居然出现在同一本书中，怎能不令人兴奋？！ 你是程序员吗？你对代码之美的认识是什么？33位作者，33个来自不同开发领域的专业经验，33种不同的意见。你想知道牛人们对代码之美是怎么想的吗？ 其实，这本书最奇妙的地方还不在于这一点，而在于，如果你知道这些作者的名字，你肯定会忍不住去看一看。如果你不知道这些作者的名字，你更加会忍不住去看 一看。因为你知道这些人的观点肯定不会让你失望！&lt;/p&gt;
&lt;h2&gt;免费下载，购买原版《代码之美》&lt;/h2&gt;
&lt;p&gt;如果你喜欢本书，请通过&lt;a href="http://www.china-pub.com/37838" rel="no-follow" target="_blank"&gt;购买本书原版《代码之美》&lt;/a&gt;支持华章图书出版公司和InfoQ中文站。 	 	  		 &lt;a href="#void(0)"&gt; 免费下载这本书（PDF）&lt;/a&gt;   &lt;a href="http://www.infoq.com/resource/minibooks/beautiful-code/zh/pdf/Beautiful_Code_Minibook_by_InfoQ.pdf" rel="no-follow"&gt;免费下载这本书（PDF）&lt;/a&gt;  。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://www.infoq.com/cn/minibooks/beautiful-code&lt;/p&gt;</description><author>No.0023</author><category>dev</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3210</guid><pubDate>Sat, 18 Oct 2008 07:37:45 GMT</pubDate></item><item><title>hosts for GAE</title><link>http://n23.appspot.com/blog/post/3410</link><description>&lt;p&gt;Shell:~/dev/AppEngine/google_appengine/n23 &amp;gt;: tail -n 3 /etc/hosts&lt;br /&gt;209.85.171.118&amp;nbsp;&amp;nbsp;&amp;nbsp; n23.appspot.com&lt;br /&gt;64.233.189.99&amp;nbsp;&amp;nbsp; appengine.google.com&lt;br /&gt;#203.208.35.100&amp;nbsp; appengine.google.com&lt;br /&gt;Shell:~/dev/AppEngine/google_appengine/n23 &amp;gt;:&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3410</guid><pubDate>Fri, 17 Oct 2008 16:09:49 GMT</pubDate></item><item><title>GAE Secure_URLs</title><link>http://n23.appspot.com/blog/post/3209</link><description>&lt;p&gt;from http://code.google.com/appengine/docs/configuringanapp.html#Secure_URLs&lt;/p&gt;
&lt;p&gt;Shell:~/dev/AppEngine/google_appengine/n23 &amp;gt;: head -n 45 app.yaml&lt;br /&gt;application: n23&lt;br /&gt;version: 1&lt;br /&gt;runtime: python&lt;br /&gt;api_version: 1&lt;br /&gt;&lt;br /&gt;handlers:&lt;br /&gt;&lt;br /&gt;- url: /blog&lt;br /&gt;&amp;nbsp; script: blog.py&lt;br /&gt;&amp;nbsp; secure: always&lt;br /&gt;&lt;br /&gt;- url: /blog/.*&lt;br /&gt;&amp;nbsp; script: blog.py&lt;br /&gt;&amp;nbsp; secure: always&lt;br /&gt;&lt;br /&gt;- url: /themes/.+&lt;br /&gt;&amp;nbsp; script: cache.py&lt;br /&gt;&amp;nbsp; secure: always&lt;br /&gt;&lt;br /&gt;- url: /static/.+&lt;br /&gt;&amp;nbsp; script: cache.py&lt;br /&gt;&amp;nbsp; secure: always&lt;br /&gt;...&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3209</guid><pubDate>Fri, 17 Oct 2008 16:08:44 GMT</pubDate></item><item><title>count_history_cmd.py</title><link>http://n23.appspot.com/blog/post/3208</link><description>&lt;p&gt;#!/usr/bin/env python&lt;br /&gt;# -*- coding: UTF-8 -*-&lt;br /&gt;&lt;br /&gt;import os&lt;br /&gt;&lt;br /&gt;def f(his, n):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines = open(os.path.join(os.getenv('HOME'), his)).readlines()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d = {}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for line in lines:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; line = line.split()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not line: continue&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s = line[0]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if line[0] == 'sudo':&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; s = line[1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d[s] = d.get(s, 0) + 1 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; l = sorted(d.items(), key=lambda t: t[1], reverse=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for t in l[:n]:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '%s : %d' % (t[0].ljust(16), t[1])&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from optparse import OptionParser&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser = OptionParser()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser.add_option('-f', '--file', dest='f', default='.history', &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; help='the history file', metavar='FILE')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parser.add_option('-c', '--count', dest='c', type='int', default='30', &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; help='for display count', metavar='COUNT')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (options, args) = parser.parse_args()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f(options.f, options.c)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;运行结果：&lt;/p&gt;
&lt;p&gt;Shell:~ &amp;gt;: count_his_cmd &lt;br /&gt;cd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4895&lt;br /&gt;ls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4533&lt;br /&gt;vi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 988&lt;br /&gt;man&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 679&lt;br /&gt;hitfm&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 583&lt;br /&gt;cat&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 532&lt;br /&gt;ifconfig&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 414&lt;br /&gt;ant&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 401&lt;br /&gt;rm&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 386&lt;br /&gt;lt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 349&lt;br /&gt;ll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 341&lt;br /&gt;tmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 340&lt;br /&gt;svn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 333&lt;br /&gt;tlist&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 332&lt;br /&gt;top&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 311&lt;br /&gt;my&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 292&lt;br /&gt;exit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 278&lt;br /&gt;run&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 277&lt;br /&gt;unlcall&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 249&lt;br /&gt;pkg_list&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 249&lt;br /&gt;glib&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 242&lt;br /&gt;locate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 235&lt;br /&gt;shutdown&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 226&lt;br /&gt;bbs.sh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 220&lt;br /&gt;check&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 216&lt;br /&gt;ping&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 215&lt;br /&gt;pkill&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 198&lt;br /&gt;mv&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 196&lt;br /&gt;vpn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 190&lt;br /&gt;sock&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 186&lt;br /&gt;Shell:~ &amp;gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://code.google.com/p/mylibs/source/browse/trunk/tools/Python/count_history_cmd.py&lt;/p&gt;</description><author>No.0023</author><category>Python</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3208</guid><pubDate>Wed, 15 Oct 2008 14:21:44 GMT</pubDate></item><item><title>GAE SDK Release 1.1.5</title><link>http://n23.appspot.com/blog/post/3409</link><description>&lt;p&gt;Today is the release of the 1.1.5 SDK, which, as always, is &lt;a href="http://code.google.com/p/googleappengine/downloads/list" rel="no-follow" target="_blank"&gt;available for download&lt;/a&gt; on our Google hosting project. The &lt;a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes" rel="no-follow" target="_blank"&gt;release notes &lt;/a&gt; contain all of the nitty gritty details. Here's a summary:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For this release, we've added these features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Expando model and datastore: &lt;a href="http://code.google.com/appengine/docs/datastore/entitiesandmodels.html" rel="no-follow#Lists" target="_blank"&gt;Entity now allows lists containing different types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Memcache API now has the &lt;a href="http://code.google.com/appengine/docs/memcache/clientclass" rel="no-follow#Client_add_multi" target="_blank"&gt;add_multi&lt;/a&gt; and &lt;a href="http://code.google.com/appengine/docs/memcache/clientclass" rel="no-follow#Client_replace_multi" target="_blank"&gt;replace_multi functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The SDK also contains the following issue fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=415" rel="no-follow" target="_blank"&gt;StringListProperty is now a proper class&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=279" rel="no-follow" target="_blank"&gt;TimeProperty now correctly accepts datetime.time(0,0)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's also worth noting we released the 1.1.4 SDK on Friday, September 26, fixing two Windows SDK bugs: one issue with &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=711" rel="no-follow" target="_blank"&gt;escaping in the app.yaml file&lt;/a&gt;, and another fixing issues with the &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=710" rel="no-follow" target="_blank"&gt;datastore viewer on the SDK&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We'd love to hear your feedback on the &lt;a href="http://groups.google.com/group/google-appengine" rel="no-follow" target="_blank"&gt;Google group&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAppEngineBlog/~4/410736939" alt="" height="1" width="1" /&gt;&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3409</guid><pubDate>Sat, 04 Oct 2008 12:54:34 GMT</pubDate></item><item><title>Python 2.6 final release</title><link>http://n23.appspot.com/blog/post/3408</link><description>
&lt;blockquote&gt;We are pleased to announce the release of &lt;strong&gt;Python 2.6 (final)&lt;/strong&gt;, a new production-ready release, on October 1st, 2008.&lt;/blockquote&gt;
&lt;p&gt;There are a huge number of new features, modules, improvements and bug fixes. For information on what's changed, see:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Andrew Kuchling's guide to &lt;a href="http://docs.python.org/whatsnew/2.6.html" rel="no-follow"&gt;What's New in Python 2.6&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/download/releases/2.6/NEWS.txt" rel="no-follow"&gt;NEWS&lt;/a&gt; file contains a listing of everything that's new in each alpha, beta, and release candidate of Python 2.6.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/dev/peps/pep-0361/" rel="no-follow"&gt;PEP 361&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Please report bugs at &lt;a href="http://bugs.python.org/" rel="no-follow"&gt;http://bugs.python.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See also the &lt;a href="http://www.python.org/download/releases/2.6/license" rel="no-follow"&gt;license&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;&lt;a name="python-2-6-released-01-oct-2008"&gt;Python 2.6 Released: 01-Oct-2008&lt;/a&gt;&lt;/h3&gt;



&lt;h2&gt;&lt;a name="download"&gt;Download&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is a production release; we currently support these formats:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/2.6/Python-2.6.tgz" rel="no-follow"&gt;Gzipped source tar ball (2.6)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/2.6/Python-2.6.tgz.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/2.6/Python-2.6.tar.bz2" rel="no-follow"&gt;Bzipped source tar ball (2.6)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/2.6/Python-2.6.tar.bz2.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/2.6/python-2.6.msi" rel="no-follow"&gt;Windows x86 MSI Installer (2.6)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/2.6/python-2.6.msi.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/2.6/python-2.6.amd64.msi" rel="no-follow"&gt;Windows AMD64 MSI Installer (2.6)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/2.6/python-2.6.amd64.msi.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/ftp/python/2.6/python-2.6-macosx2008-10-01.dmg" rel="no-follow"&gt;Mac Installer disk image (2.6)&lt;/a&gt; &lt;a href="http://www.python.org/download/releases/2.6/python-2.6-macosx2008-10-01.dmg.asc" rel="no-follow"&gt;(sig)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;MD5 checksums and sizes of the released files:&lt;/p&gt;
&lt;pre&gt;837476958702cb386c657b5dba61cdc5  10957859  Python-2.6.tar.bz2&lt;br /&gt;d16d29a77db2cd3af882a591f431a403  13023860  Python-2.6.tgz&lt;br /&gt;fe34764ad0027d01176eb1b321dd20c5  14503936  python-2.6.amd64.msi&lt;br /&gt;6c62c123d248a48dccbaa4d3edc12680  14173184  python-2.6.msi&lt;br /&gt;29a1a22f8d9fd8a4501b30d97fbee61c  23593748  python-2.6-macosx2008-10-01.dmg&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;The signatures for the source tarballs above were generated with &lt;a href="http://www.gnupg.org/" rel="no-follow"&gt;GnuPG&lt;/a&gt; using release manager Barry Warsaw's &lt;a href="http://www.python.org/download" rel="no-follow#pubkeys"&gt;public key&lt;/a&gt; which has a key id of EA5BBD71. The Windows installers was signed by Martin von L&amp;amp;ouml;wis' &lt;a href="http://www.python.org/download" rel="no-follow#pubkeys"&gt;public key&lt;/a&gt; which has a key id of 7D9DC8D2. The signature on the Mac disk image was signed by Benjamin Peterson's public key which has a key id of A4135B38.&lt;/p&gt;


&lt;h2&gt;&lt;a name="vista-note"&gt;Vista Note&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Administrators installing Python for all users on Windows Vista either need to be logged in as Administrator, or use the runas command, as in:&lt;/p&gt;
&lt;pre&gt;runas /user:Administrator &amp;quot;msiexec /i &amp;lt;path&amp;gt;\&amp;lt;file&amp;gt;.msi&amp;quot;&lt;br /&gt;&lt;/pre&gt;


&lt;h2&gt;&lt;a name="documentation"&gt;Documentation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The documentation has also been updated.  You can &lt;a href="http://www.python.org/doc/2.6" rel="no-follow"&gt;browse the HTML on-line&lt;/a&gt; or &lt;a href="http://www.python.org/doc/2.6/download" rel="no-follow"&gt;download the HTML&lt;/a&gt;&lt;/p&gt;
</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3408</guid><pubDate>Fri, 03 Oct 2008 04:39:53 GMT</pubDate></item><item><title>API JAVA</title><link>http://n23.appspot.com/blog/post/4001</link><description>&lt;p&gt;http://api.java2000.net/&lt;/p&gt;</description><author>No.0023</author><category>java</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/4001</guid><pubDate>Thu, 02 Oct 2008 15:03:01 GMT</pubDate></item><item><title>pf-view-rule</title><link>http://n23.appspot.com/blog/post/3801</link><description>&lt;p&gt;Shell:~ &amp;gt;: pf-view-rule &lt;br /&gt;scrub in all fragment reassemble&lt;br /&gt;block drop log all&lt;br /&gt;pass quick on lo0 all flags S/SA keep state&lt;br /&gt;pass in on re0 inet from 192.168.1.0/24 to any flags S/SA keep state&lt;br /&gt;pass out on re0 inet from any to 192.168.1.0/24 flags S/SA keep state&lt;br /&gt;block drop in quick on tun0 inet from 127.0.0.0/8 to any&lt;br /&gt;block drop in quick on tun0 inet from 10.0.0.0/8 to any&lt;br /&gt;block drop in quick on tun0 inet from 172.16.0.0/12 to any&lt;br /&gt;block drop in quick on tun0 inet from 192.168.0.0/16 to any&lt;br /&gt;block drop out quick on tun0 inet from any to 127.0.0.0/8&lt;br /&gt;block drop out quick on tun0 inet from any to 10.0.0.0/8&lt;br /&gt;block drop out quick on tun0 inet from any to 172.16.0.0/12&lt;br /&gt;block drop out quick on tun0 inet from any to 192.168.0.0/16&lt;br /&gt;block drop in log quick on ! re0 inet from 192.168.1.0/24 to any&lt;br /&gt;block drop in log quick inet from 192.168.1.23 to any&lt;br /&gt;pass out on tun0 proto tcp all flags S/SA modulate state&lt;br /&gt;pass out on tun0 proto udp all keep state&lt;br /&gt;pass out on tun0 proto icmp all keep state&lt;br /&gt;pass out on tun0 proto esp all keep state&lt;br /&gt;pass out on tun1 proto tcp all flags S/SA modulate state&lt;br /&gt;pass out on tun1 proto udp all keep state&lt;br /&gt;pass out on tun1 proto icmp all keep state&lt;br /&gt;pass out on tun1 proto esp all keep state&lt;br /&gt;pass in on tun0 proto tcp from any to any port = 44123 flags S/SA keep state&lt;br /&gt;pass in on tun0 proto udp from any to any port = 44123 keep state&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3801</guid><pubDate>Tue, 30 Sep 2008 15:06:06 GMT</pubDate></item><item><title>OpenBSD manual files</title><link>http://n23.appspot.com/blog/post/3407</link><description>&lt;p&gt;Shell:~/mylibs/manual/OpenBSD &amp;gt;: ls&lt;br /&gt;A_Beginner_Guide_to_xDSL_Firewalling.html&lt;br /&gt;Install_and_run_MySQL_5.x_from_a_package_on_a_OpenBSD_3.9_and_later.html&lt;br /&gt;Linux_BSD_Shellcode.pdf&lt;br /&gt;OpenBSD FAQ - ChinaUnix Wiki.png&lt;br /&gt;OpenBSD_Desktop_For_Windows_Users_By_Roy_Morris.html&lt;br /&gt;OpenBSD_dns_server.pdf&lt;br /&gt;OpenBSD_firewalls.pdf&lt;br /&gt;OpenBSD_mail_server.pdf&lt;br /&gt;OpenBSD_proxy_server.pdf&lt;br /&gt;backup-with-dd-and-gzip.html&lt;br /&gt;diskless.pdf&lt;br /&gt;embedded_OpenBSD.pdf&lt;/p&gt;
&lt;p&gt;download from http://code.google.com/p/mylibs/source/browse/#svn/trunk/manual/OpenBSD&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3407</guid><pubDate>Fri, 26 Sep 2008 14:56:45 GMT</pubDate></item><item><title>ABAP ALV 报表刷新记录</title><link>http://n23.appspot.com/blog/post/3406</link><description>&lt;p&gt;FORM f_user_command USING&amp;nbsp; r_ucomm&amp;nbsp; LIKE sy-ucomm&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs_selfield TYPE slis_selfield.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; READ TABLE it_result INDEX rs_selfield-tabindex.&lt;br /&gt;&amp;nbsp; if sy-subrc &amp;lt;&amp;gt; 0 .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return.&lt;br /&gt;&amp;nbsp; endif.&lt;br /&gt;&amp;nbsp; CASE r_ucomm.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN '&amp;amp;IC1'.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;**select data again and refresh alv&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perform get_data.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;重新获取数据&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs_selfield-refresh = 'X'.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;设置刷新标记&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN OTHERS.&lt;br /&gt;&amp;nbsp; ENDCASE.&lt;br /&gt;ENDFORM.&lt;/p&gt;</description><author>No.0023</author><category>SAP</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3406</guid><pubDate>Fri, 26 Sep 2008 01:46:20 GMT</pubDate></item><item><title>神舟七号发射成功</title><link>http://n23.appspot.com/blog/post/3205</link><description>&lt;p&gt;m一下。&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3205</guid><pubDate>Thu, 25 Sep 2008 14:28:22 GMT</pubDate></item><item><title>Google 成立 10 周年：庆祝活动五彩缤纷！</title><link>http://n23.appspot.com/blog/post/3405</link><description>&lt;p&gt;Google 成立 10 周年：&lt;a href="http://www.google.cn/aclk?sa=L&amp;amp;amp" rel="no-follow;ai=BY_8onorbSIT5HZzs6AO_-cjmDIHxhXbr1biwCcHZnNkT0IYDEAEYASDBVDgAUOXSyNb______wFgnQE&amp;amp;num=1&amp;amp;sig=AGiWqtwiU-WNLjq3Pky_ogqbNbe_YXygyg&amp;amp;q=http://www.google.cn/tenthbirthday" rel="no-follow"&gt;庆祝活动五彩缤纷！&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3405</guid><pubDate>Thu, 25 Sep 2008 13:05:35 GMT</pubDate></item><item><title>QQ邮箱真不错</title><link>http://n23.appspot.com/blog/post/3404</link><description>&lt;p&gt;现在有了IMAP，全文搜索&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3404</guid><pubDate>Thu, 25 Sep 2008 01:34:09 GMT</pubDate></item><item><title>9月23号</title><link>http://n23.appspot.com/blog/post/3403</link><description>&lt;p&gt;今天9月23号，终于下了点小雨，温度终于回到30度了。&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3403</guid><pubDate>Tue, 23 Sep 2008 08:18:35 GMT</pubDate></item><item><title>PyConUK 2008</title><link>http://n23.appspot.com/blog/post/3204</link><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.simplistix.co.uk/presentations/python_excel_08/python_excel_08.pdf" rel="no-follow"&gt;Python and Excel&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.simplistix.co.uk/presentations/python_package_management_08/python_package_management_08.pdf" rel="no-follow"&gt;Python Package Management Sucks&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://freshfoo.com/presentations/PyCon_UK-2008/" rel="no-follow"&gt;Python on the Openmoko Neo Freerunner&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://clearclimatecode.org/doc/2008-09-11/pyconuk/" rel="no-follow"&gt;Getting Warmer with Python&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.slideshare.net/kamaelian/practical-concurrent-systems-made-simple-using-kamaelia-presentation" rel="no-follow"&gt;Concurrency in Python made Simple (using Kamaelia)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.slideshare.net/kamaelian/sharing-data-and-services-safely-in-concurrent-systems-using-kamaelia-presentation" rel="no-follow"&gt;Minimal Software Transactional Memory &amp;amp; Simplified SOA using Kamaelia&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://tartley.com/files/stretching_pyglets_wings/presentation/" rel="no-follow"&gt;Stretching pyglet&amp;amp;rsquo;s Wings&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://simonwillison.net/2008/talks/pyconuk-admin/" rel="no-follow"&gt;Making the most of the Django admin&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.slideshare.net/simon/i-love-zeppelins-and-you-should-too-presentation/" rel="no-follow"&gt;&amp;quot;I love Zeppelins, and you should too&amp;quot;&lt;/a&gt; - Simon Willison's not-Python-related talk&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.dabeaz.com/ply/PLYTalk.pdf" rel="no-follow"&gt;Writing Parsers and Compilers with PLY&lt;/a&gt; (PDF) - Originally at PyCON'07, but presented to fill a cancellation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.kryogenix.org/code/enso-pycon/" rel="no-follow"&gt;Enso Launcher&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.resolversystems.com/news/?p=67" rel="no-follow"&gt;Resolver One: Python Inside and Outside the Spreadsheet Grid&lt;/a&gt; (plus links to the slides for talks by other Resolver people)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://orestis.gr/blog/2008/09/15/pysmell-v05-released/" rel="no-follow"&gt;PySmell lightning talk&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.slideshare.net/onyame/organizing-the-data-chaos-of-scientists-presentation/" rel="no-follow"&gt;Organizing the Data Chaos of Scientists&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.comp.leeds.ac.uk/tony/PyCon/slides.pdf" rel="no-follow"&gt;Python in Higher Education ... One Year On&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.resolversystems.com/presentations/ironclad-lightning-20080914.odp" rel="no-follow"&gt;Ironclad lightning talk&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://drj11.files.wordpress.com/2008/09/pyembed-pyconuk.pdf" rel="no-follow"&gt;Embedded Programming with Python&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://clearclimatecode.org/doc/2008-09-11/pyconuk/" rel="no-follow"&gt;Clear Climate Code&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://jackdied.blogspot.com/2008/09/pycon-uk-class-decorators-radically.html" rel="no-follow"&gt;Class Decorators: Radically Simple&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.voidspace.org.uk/python/articles/five-minutes.shtml" rel="no-follow"&gt;Metaclasses in Five Minutes Lightning Talk&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.voidspace.org.uk/python/articles/testing/index.shtml" rel="no-follow"&gt;Testing Desktop Applications&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.mathtran.org/docs/pyconuk2008/" rel="no-follow"&gt;JavaScript for Python Programmers&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><author>No.0023</author><category>Python</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3204</guid><pubDate>Mon, 22 Sep 2008 07:33:45 GMT</pubDate></item><item><title>GAE SDK update</title><link>http://n23.appspot.com/blog/post/3202</link><description>&lt;p&gt;Notable new features in this SDK are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for zipimport and a new module, zipserve, which serves static files from a zip archive. These allow you to work past the 1000-file app deployment limit.&lt;/li&gt;
&lt;li&gt;The development console now includes a memcache viewer (you can use this by accessing http://localhost:8080/_ah/admin while your app is running on the SDK).&lt;/li&gt;
&lt;li&gt;URLFetch now allows users to disable automatically following HTTP redirects.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://googleappengine.blogspot.com/2008/08/couple-datastore-updates.html" rel="no-follow" target="_blank"&gt;We now allow composite indexes with repeated properties&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also includes the following issue fixes:&lt;/p&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=557" rel="no-follow" target="_blank"&gt;It correctly escapes path separators in static_dir path on windows&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=693" rel="no-follow" target="_blank"&gt;Sending email messages with unicode content now works&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed db.run_in_transaction so that it doesn't allow inserting two (or more) new root entities in a single transaction.&lt;/li&gt;
&lt;p&gt;The new SDK is available for &lt;a href="http://code.google.com/p/googleappengine/downloads/list" rel="no-follow" target="_blank"&gt;download&lt;/a&gt;, and as always, we welcome your feedback on the &lt;a href="http://groups.google.com/group/google-appengine" rel="no-follow" target="_blank"&gt;group!&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><category>Google</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3202</guid><pubDate>Fri, 19 Sep 2008 12:29:12 GMT</pubDate></item><item><title>An enhanced interactive Python shell</title><link>http://n23.appspot.com/blog/post/3201</link><description>&lt;p&gt;Shell:~/tmp &amp;gt;: rpm -qi ipython&lt;br /&gt;Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : ipython&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Relocations: (not relocatable)&lt;br /&gt;Version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0.8.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vendor: Fedora Project&lt;br /&gt;Release&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 1.fc9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Build Date: 2007年12月13日 星期四 09时21分06秒&lt;br /&gt;Install Date: 2008年09月19日 星期五 12时11分45秒&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Build Host: ppc4.fedora.phx.redhat.com&lt;br /&gt;Group&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Development/Libraries&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source RPM: ipython-0.8.2-1.fc9.src.rpm&lt;br /&gt;Size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4124412&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; License: BSD&lt;br /&gt;Signature&amp;nbsp;&amp;nbsp; : DSA/SHA1, 2008年04月11日 星期五 04时10分26秒, Key ID b44269d04f2a6fd2&lt;br /&gt;Packager&amp;nbsp;&amp;nbsp;&amp;nbsp; : Fedora Project&lt;br /&gt;URL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : http://ipython.scipy.org/&lt;br /&gt;Summary&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : An enhanced interactive Python shell&lt;br /&gt;Description :&lt;br /&gt;&lt;br /&gt;IPython provides a replacement for the interactive Python interpreter with&lt;br /&gt;extra functionality.&lt;br /&gt;&lt;br /&gt;Main features:&lt;br /&gt;&amp;nbsp;* Comprehensive object introspection.&lt;br /&gt;&amp;nbsp;* Input history, persistent across sessions.&lt;br /&gt;&amp;nbsp;* Caching of output results during a session with automatically generated&lt;br /&gt;&amp;nbsp;&amp;nbsp; references.&lt;br /&gt;&amp;nbsp;* Readline based name completion.&lt;br /&gt;&amp;nbsp;* Extensible system of 'magic' commands for controlling the environment and&lt;br /&gt;&amp;nbsp;&amp;nbsp; performing many tasks related either to IPython or the operating system.&lt;br /&gt;&amp;nbsp;* Configuration system with easy switching between different setups (simpler&lt;br /&gt;&amp;nbsp;&amp;nbsp; than changing $PYTHONSTARTUP environment variables every time).&lt;br /&gt;&amp;nbsp;* Session logging and reloading.&lt;br /&gt;&amp;nbsp;* Extensible syntax processing for special purpose situations.&lt;br /&gt;&amp;nbsp;* Access to the system shell with user-extensible alias system.&lt;br /&gt;&amp;nbsp;* Easily embeddable in other Python programs.&lt;br /&gt;&amp;nbsp;* Integrated access to the pdb debugger and the Python profiler.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;一定要装上这个...&lt;/p&gt;</description><author>No.0023</author><category>Python</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3201</guid><pubDate>Fri, 19 Sep 2008 04:38:02 GMT</pubDate></item><item><title>开源网络蜘蛛spider（转载）</title><link>http://n23.appspot.com/blog/post/3001</link><description>

&lt;p&gt;spider是搜索引擎的必须模块.spider数据的结果直接影响到搜索引擎的评价指标.&lt;/p&gt;
&lt;p&gt;第一个spider程序由MIT的&lt;a href="http://stuff.mit.edu/~mkgray/net/web-growth-summary.html" target="_blank"&gt;Matthew K Gray&lt;/a&gt;操刀该程序的目的是为了统计互联网中主机的数目&lt;/p&gt;
&lt;p&gt;spider定义(关于Spider的定义,有广义和狭义两种).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;狭义:利用标准的http协议根据超链和web文档检索的方法遍历万维网信息空间的软件程序.  &lt;/li&gt;
&lt;li&gt;广义:所有能利用http协议检索web文档的软件都称之为spider. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中Protocol Gives Sites Way To Keep Out The 'Bots Jeremy Carl, Web Week, Volume 1, Issue 7, November 1995 是和spider息息相关的协议,可以参考&lt;a href="http://www.robotstxt.org/wc/robots.html" rel="no-follow" target="_blank"&gt;robotstxt.org&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Heritrix &lt;/h4&gt;
&lt;p&gt;Heritrix is the Internet Archive's open-source, extensible, web-scale, archival-quality web crawler project.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Heritrix&lt;/em&gt; (sometimes spelled &lt;em&gt;heretrix&lt;/em&gt;, or misspelled or missaid as &lt;em&gt;heratrix&lt;/em&gt;/&lt;em&gt;heritix&lt;/em&gt;/ &lt;em&gt;heretix&lt;/em&gt;/&lt;em&gt;heratix&lt;/em&gt;) is an archaic word for &lt;em&gt;heiress&lt;/em&gt; (woman who inherits). Since our crawler seeks to collect and &lt;em&gt;preserve&lt;/em&gt; the digital artifacts of our culture for the benefit of future researchers and generations, this name seemed apt.&lt;/p&gt;
&lt;p&gt;语言:JAVA, (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=73833&amp;amp;amp" rel="no-follow;package_id=73980" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebLech URL Spider &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WebLech is a fully featured web site download/mirror tool in Java, which supports many features required to download websites and emulate standard web-browser behaviour as much as possible. WebLech is multithreaded and comes with a GUI console. &lt;/p&gt;
&lt;p&gt;语言:JAVA, (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=38170" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSpider&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A Java implementation of a flexible and extensible web spider engine. Optional modules allow functionality to be added (searching dead links, testing the performance and scalability of a site, creating a sitemap, etc .. &lt;/p&gt;
&lt;p&gt;语言:JAVA, (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=65617" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebSPHINX &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WebSPHINX is a web crawler (robot, spider) Java class library, originally developed by Robert Miller of Carnegie Mellon University. Multithreaded, tollerant HTML parsing, URL filtering and page classification, pattern matching, mirroring, and more. &lt;/p&gt;
&lt;p&gt;语言:JAVA, (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=48810" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PySolitaire &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PySolitaire is a fork of PySol Solitaire that runs correctly on Windows and has a nice clean installer. PySolitaire (Python Solitaire) is a collection of more than 300 solitaire and Mahjongg games like Klondike and Spider.&lt;/p&gt;

&lt;p&gt;语言:Python , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=86107" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Spider Web Network Xoops Mod Team&lt;/strong&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The Spider Web Network Xoops Module Team provides modules for the Xoops community written in the PHP coding language. We develop mods and or take existing php script and port it into the Xoops format. High quality mods is our goal.&lt;/p&gt;

&lt;p&gt;语言:php , (&lt;a href="http://sourceforge.net/projects/tswnmoddev" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fetchgals &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A multi-threaded web spider that finds free porn thumbnail galleries by visiting a list of known TGPs (Thumbnail Gallery Posts). It optionally downloads the located pictures and movies. TGP list is included. Public domain perl script running on Linux. &lt;/p&gt;
&lt;p&gt;语言:perl , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=110338" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where Spider&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The purpose of the Where Spider software is to provide a database system for storing URL addresses. The software is used for both ripping links and browsing them offline. The software uses a pure XML database which is easy to export and import. &lt;/p&gt;
&lt;p&gt;语言:XML , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=115931" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sperowider&lt;/strong&gt;&lt;/p&gt;
 
&lt;p&gt;Sperowider Website Archiving Suite is a set of Java applications, the primary purpose of which is to spider dynamic websites, and to create static distributable archives with a full text search index usable by an associated Java applet. &lt;/p&gt;
&lt;p&gt;语言:Java , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=90254" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SpiderPy&lt;/strong&gt;&lt;/p&gt;
 
&lt;p&gt;SpiderPy is a web crawling spider program written in Python that allows users to collect files and search web sites through a configurable interface. &lt;/p&gt;
&lt;p&gt;语言:Python , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=55531" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Spidered Data Retrieval&lt;/strong&gt;&lt;/p&gt;
 
&lt;p&gt;Spider is a complete standalone Java application designed to easily integrate varied datasources. * XML driven framework * Scheduled pulling * Highly extensible * Provides hooks for custom post-processing and configuration &lt;/p&gt;
&lt;p&gt;语言:Java , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=90769" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;webloupe&lt;/strong&gt;&lt;/p&gt;
 
&lt;p&gt;WebLoupe is a java-based tool for analysis, interactive visualization (sitemap), and exploration of the information architecture and specific properties of local or publicly accessible websites. Based on web spider (or web crawler) technology. &lt;/p&gt;
&lt;p&gt;语言:java , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=121963" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ASpider&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Robust featureful multi-threaded CLI web spider using apache commons httpclient v3.0 written in java. ASpider downloads any files matching your given mime-types from a website. Tries to reg.exp. match emails by default, logging all results using log4j.&lt;/p&gt;
&lt;p&gt;语言:java , (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=126578" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;larbin &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Larbin is an HTTP Web crawler with an easy interface that runs under Linux. It can fetch more than 5 million pages a day on a standard PC (with a good network).&lt;/p&gt;
&lt;p&gt;语言:C++, (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=42562" rel="no-follow" target="_blank"&gt;下载地址&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://www.wujianrong.com/archives/2008/09/spider.html&lt;/p&gt;

</description><author>No.0023</author><category>Python</category><category>dev</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/3001</guid><pubDate>Wed, 10 Sep 2008 00:44:01 GMT</pubDate></item><item><title>OpenBSD 4.4 is available for Preorder</title><link>http://n23.appspot.com/blog/post/2801</link><description>&lt;p&gt;&amp;nbsp;&lt;a href="http://www.openbsd.org/images/openbsd44_cover.gif" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.openbsd.org/images/cd44-s.gif" alt="OpenBSD 4.4 cover" height="127" width="90" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pre-orders &lt;a href="https://https.openbsd.org/cgi-bin/order?CD44=1&amp;amp;amp" rel="no-follow;CD44+=Add" target="_blank"&gt;are now being accepted&lt;/a&gt; (also in &lt;a href="http://www.msys.ch/obsd/" rel="no-follow" target="_blank"&gt;Switzerland&lt;/a&gt;) for &lt;a href="http://www.openbsd.org/44.html" rel="no-follow" target="_blank"&gt;OpenBSD 4.4&lt;/a&gt;, which is scheduled for release on November 1st, 2008.&lt;/p&gt;
&lt;p&gt;Again, the developers bring us an amazing amount of cool new stuff (&lt;a href="http://www.undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;amp" target="_blank"&gt;WPA&lt;/a&gt;, &lt;a href="http://www.undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;amp" target="_blank"&gt;DSR&lt;/a&gt;, &lt;a href="http://www.undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;amp" target="_blank"&gt;OpenSSH 5.1&lt;/a&gt;, &lt;a href="http://www.undeadly.org/cgi?action=article&amp;amp;amp" rel="no-follow;amp" target="_blank"&gt;a new malloc&lt;/a&gt; and &lt;a href="http://www.openbsd.org/44.html" rel="no-follow" target="_blank"&gt;lots more&lt;/a&gt;). There's also lots of third party software available pre-packaged for easy installation.&lt;/p&gt;
&lt;p&gt;This years theme touches on the special version number, 4.4, reminiscent of the historic release of 4.4BSD-Lite in June 1994. The release song (&lt;a href="ftp://ftp.openbsd.org/pub/OpenBSD/songs/song44.ogg" rel="no-follow" target="_blank"&gt;ogg&lt;/a&gt;, &lt;a href="ftp://ftp.openbsd.org/pub/OpenBSD/songs/song44.mp3" rel="no-follow" target="_blank"&gt;mp3&lt;/a&gt;) pays homage to the heroes of the CSRG at &lt;a href="http://berkeley.edu/" rel="no-follow" target="_blank"&gt;UCB&lt;/a&gt; (Keith Bostic, Mike Karel and Kirk McKusick).&lt;/p&gt;
&lt;p&gt;Of course, &lt;a href="http://www.openbsd.org/tshirts.html" rel="no-follow" target="_blank"&gt;a t-shirt&lt;/a&gt; and &lt;a href="http://www.openbsd.org/images/poster20.jpg" rel="no-follow" target="_blank"&gt;a poster&lt;/a&gt; are available too. Order your set &lt;a href="https://https.openbsd.org/cgi-bin/order?CD44=1&amp;amp;amp" rel="no-follow;CD44+=Add" target="_blank"&gt;NOW&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from &lt;a href="https://www.google.com/reader/view/feed/http://undeadly.org/cgi?action=rss" rel="no-follow" target="_blank"&gt;OpenBSD Journal&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2801</guid><pubDate>Fri, 05 Sep 2008 04:34:52 GMT</pubDate></item><item><title>SAP BOM详细解析</title><link>http://n23.appspot.com/blog/post/2404</link><description>&lt;p&gt;&lt;strong&gt;一、产品结构--BOM的重要性&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOM(Bill of Material) 叫做物料清单，也叫产品结构表、物料表等。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 将产品的原材料、零配件、组合件予以拆解，并将各单项物料按物料代码、品名、规格、单位用量、损耗等依制造流程的顺序记录下来，排列为一个清单，这就是物料清单，也就是BOM。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;BOM是：&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1) MRP的基础。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2) 制造令发料的计算依据。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (3) 本质上是一项工程文件，不但是产品的规范说明，而且是制造流程的依据。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (4) 用来核算产品成本的基础。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由以上知道BOM的重要性及其影响范围很大，故其内容必须随时保持正确及时。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp; 二、建立产品结构之要点&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1) BOM必须能显示制造层次。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2) BOM必须避免含意不清。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;BOM必须能显示制造层次&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 理想的BOM，不但应能具体显示产品的组成结构，而且还得说明该产品在制造过程中的阶段。也就是BOM必须从制造层次来界定产品，每一个层次分别代表制程中的某一个步骤的完成，而每一个存货项目，都在BOM的上下各层中有进库和出库的动作。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;BOM必须避免含意不清&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 作业的单元性是关键。一批组件，装配后，自成独立，是一个完整的单元，被送至库存或下一个工作站，则该项装配件便有定义一个料号的必要。如果不定义料号，则MRP将无法为该项组件产生必要的订单。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;三、产品结构的系统档案设计&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 虽然产品结构会有很多的层次，但在系统中我们以单层的方式记录，只需维护父项和子项两阶的关系，再经过串联，即可得到多阶层关系的产品结构。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以上是一个四阶层BOM，在ERP系统BOM资料表中只需建立相关的父子项关系，即可得到X产品的完整材料表。从上图可见，上一层结构的子项，在下一层结构中变成了父项BOM可分为多种类型。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1) 生产用BOM&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2) 销售用BOM&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (3) 包材用BOM；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (4) 海关用BOM。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;1、生产用的BOM&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 除了说明父子项的关系外，还有下列必备的字段，现一一说明如下:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1) 序号&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于工序不同或有效时段不同或插件位置不同，使得每一个父项下面可能有多个子项。这种情况不能通过单位用量来说明，父子项可能不惟一，因此同一个父项通过 序号惟一来描述。由于物料的性质或发料的优先次序而要求子项按一定的顺序排列，这些也通过序号来实现。 BOM展开时，也按序号排列。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2) 单位用量&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 表示每一库存单位父项需用到多少库存单位的子项，物料的库存单位在物料代码资料表中定义。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (3) 基数&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 表示父项的数量，如每个纸箱(A物料代码)，可存放100个手表(X)，则BOM中如下表示:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 父项:X　　　　序号1　　　　子项:A　　　　单位用量:1　　　　基数:100&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (4) 损耗率&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有些物料由于机器设备的原因，或由于装配的原因等等，正常的单位用量无法满足生产的需要，而要定义损耗的百分比率。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (5) 固定损耗量&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; (6) 生效日期和失效日期&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于工程变更或不同时期产品的结构不同而需指定生效日期和失效日期。如果一直有效，则不要指明失效日期，或指定一个很大的日期，或让失效日期＝&amp;ldquo;1900/1/1&amp;rdquo;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (7) 发料工序号码&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 每一个父项在物料代码公司资料表中定义了一条工艺路线，每条工艺路线在工艺路线资料表中需至少定义一道工序或多道工序，BOM不同子项发料时可能发到同一 道工序，也可能发到不同的工序，在此说明子项发料时应该发放到哪道工序。建立制造令生成用料明细时，如果BOM中没有指明工序号，则把工艺路线资料表中第 一道工序当做发料工序。&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (8) 状态&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOM有三种状态: 待确认 确认ok 取消 新增BOM子项时为待确认状态，只有确认OK的子项才可使用。待确认或确认ok的子项都可以取消。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (9) 客供品标志&lt;br /&gt;&lt;br /&gt;&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; (10) 制造厂商&lt;br /&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; (11) 插件位置&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 指明子项放在父项的哪个位置，如一电路板上在P11位置放一电容，指明插件位置为P11。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (12) 开始批号&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有的时候，BOM中的某个子项，只有指定的批号用到，而在其他批号中无效，可通过开始批号和结束批号说明。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注意只有下列情况才需进行批号控制:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1.当产品或材料有储存有效期限制时;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2.当产品有特殊要求或印刷包装不同而不用新增机种时,尽量不要使用批号控&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 制。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (13) 结束批号&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 参考上面开始批号。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (14) 备注&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 仅用于注解说明。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt; 2、销售BOM&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 也叫样品BOM，即零件明细表，仅描述一个成品(机型)的零件清单及标准单位用量，只有一层结构，不包含制造生产的讯息，其子项大都是最低层的零件，也可能是标准的装配件，或经加工的半成品。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但装配件或半成品在研发BOM中不再展开，把其当做零件看待。产品报价时参考销售BOM材料标准成本。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;3、包装BOM&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有的公司，成品出货时需按客户的要求进行包装，因此即使是同一机种型号，由于客户不同，订单不同，批号不同，而要求不同的包装材料和不同的包装工序。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果把这部份放在生产用BOM中，需要产生很多的成品物料代码。因此把这部分分开，使用同一个成品物料代码，用不同的客户，订单，批号标志，可以减少很多成品物料代码。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这并不是非常必要，如果包装变化不大，或机种型号本身不是很多，可以把包材部分放入生产用BOM中。包材BOM结构与生产用BOM结构大致相同，另加以下几个字段:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1) 客户代号&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果有指明，则子项只能用在指明的客户，如果没有指明，则所有客户都可用到这个子项。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2) 订单代号&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果有指明，则子项只能用在指明的订单代号，如果没有指明，则所有订单都可用到这个子项。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (3) 批号&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果有指明，则子项只能用在指明的批号上，如果没有指明批号，则都可用到这个子项。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://tech.it168.com/a2008/0901/202/000000202567.shtml&lt;/p&gt;</description><author>No.0023</author><category>SAP</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2404</guid><pubDate>Tue, 02 Sep 2008 03:30:17 GMT</pubDate></item><item><title>Python框架Django 1.0版将于9月2日发布</title><link>http://n23.appspot.com/blog/post/2606</link><description>&lt;p&gt;http://developer.51cto.com/art/200809/88029.htm&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2606</guid><pubDate>Mon, 01 Sep 2008 13:00:42 GMT</pubDate></item><item><title>谷歌Doodle集合</title><link>http://n23.appspot.com/blog/post/2403</link><description>&lt;p&gt;2008年8月8日，奥运会开幕式&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_0136a6d94e572bf6404700760c11d1f0.JPEG" alt="Google olympics08" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月9日，自行车&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_11.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_f9137d39bfa0e99ae991dc7e406676f3.GIF" alt="Google olympics08 cycling" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月10日，举重&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_1285.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_28336e6725087c8b3a03be20850f855c.GIF" alt="google-olympics08 weightlifting" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月11日，跳水&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_9115.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_7c288bd704ad42d7dee6aecc168d384b.GIF" alt="google olympics08 diving" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月12日，艺术体操&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_12.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_aa81de1b43e4b1e3bd68d6a39d512d1f.GIF" alt="google olympics08 rhythm" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月13日，吊环&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_13.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_a5d2787c057bb993fcaace5006c6f7c9.GIF" alt="google olympics08 rings" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月14日，篮球&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_14.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_829bf1a4191997941f2732ff081bb990.GIF" alt="google olympics08 basketball" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月15日，羽毛球&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_15.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_3ae00f5e7445bc5d8c2457b0f333cf31.GIF" alt="google-logos-olympics-2008-badminton" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月16日，足球&lt;br /&gt;&lt;br /&gt; &lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_f9b1a01605416c74ce7d106f33bdbfc1.GIF" alt="" /&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月17日，划艇&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_18.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_50e66c5cdb9d6f95ec7d567a14e7a780.GIF" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月18日，乒乓球&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_18.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_d2ec0dcdb2ff214eedd7d59a022d5298.GIF" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月19日，游泳&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_20.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_171532519c4c18db6894c910c37843bb.GIF" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月20日，田径&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_20.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_a8c63ee25781e5312c04c026ecf7cc33.GIF" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月21日，跳高&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_21.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_b0ee6a3006f077e397e1213fb89b1569.GIF" alt="google olympics08 highjump" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月22日&lt;br /&gt;&lt;br /&gt; &lt;a href="http://googlechinablog.com/2008/08/doodle-08_21.html" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_e2c7c55c8d64459375cf0c494cfa96dc.GIF" alt="google olympics08 martialarts" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月23日，棒球&lt;br /&gt;&lt;br /&gt; &lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_fe4d7d6a7dd7b1c56647bb049576ab1f.GIF" alt="google olympics08 baseball" /&gt;&lt;br /&gt;&lt;br /&gt; 2008年8月24日，奥运会毕幕式&lt;br /&gt;&lt;br /&gt; &lt;img src="http://www.gseeker.com/50226711/images/_doodle_2008_8244ae74bdb0a635ed1c61f6b34172b9.GIF" alt="google closing ceremonies" /&gt;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2403</guid><pubDate>Mon, 25 Aug 2008 11:51:02 GMT</pubDate></item><item><title>第29届奥运会中国金牌榜</title><link>http://n23.appspot.com/blog/post/2605</link><description>&lt;p&gt;&amp;nbsp;2008-08-24&lt;br /&gt;&amp;nbsp;男子拳击48KG:中国邹市明夺冠&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;男子拳击81KG:中国张小平夺冠&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;2008-08-23&lt;br /&gt;&amp;nbsp;男子双人划艇500米:中国队孟关良/杨文军夺冠&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; &lt;br /&gt;&amp;nbsp;2008-08-22&lt;br /&gt;&amp;nbsp;乒乓球女子单打:中国张怡宁夺冠 中国包揽前三&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;2008-08-21&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; &lt;br /&gt;&amp;nbsp;2008-08-20&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; &lt;br /&gt;&amp;nbsp;女子跆拳道49KG:中国吴静钰夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;2008-08-19&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; &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; &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; &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; &lt;br /&gt;&amp;nbsp;2008-08-18&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;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; &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; &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;2008-08-17&lt;br /&gt;&amp;nbsp;男子50米步枪三姿:中国邱健奇迹逆转夺冠&amp;nbsp;&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; &lt;br /&gt;&amp;nbsp;女子自由式摔跤72KG:中国王娇夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; &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; &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; &lt;br /&gt;&amp;nbsp;男子羽毛球单打:中国林丹2:0轻取李宗伟夺冠&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;女子3米跳板:中国郭晶晶折桂 吴敏霞获第三名&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;2008-08-16&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; &lt;br /&gt;&amp;nbsp;2008-08-15&lt;br /&gt;&amp;nbsp;女子举重75KG:中国曹磊夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;女子柔道78KG:中国佟文夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;男子举重85KG:中国陆永夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;于洋/杜婧2-0轻取韩国组合 获羽球女双冠军&amp;nbsp;&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;2008-08-14&lt;br /&gt;&amp;nbsp;女子200米蝶泳:刘子歌夺冠 中国选手包揽冠亚军&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;女子50米步枪三姿:中国杜丽夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; &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; &lt;br /&gt;&amp;nbsp;女子柔道78公斤级:杨秀丽拼尽全力 胜古巴选手摘金&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;2008-08-13&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;女子25米手枪:中国陈颖决赛逆转获冠军&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;男子跳水3米板双人:中国队续写神话 王峰/秦凯夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;女子举重69KG:中国刘春红破世界记录夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;2008-08-12&lt;br /&gt;&amp;nbsp;男子体操团体:中国队完美夺冠 你们是中国的骄傲!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;女子10米双人跳水:中国小将王鑫/陈若琳折桂&amp;nbsp;&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;男子佩剑:仲满夺冠 中国击剑24年梦圆&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;男子举重69KG:中国廖辉夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;2008-08-11&lt;br /&gt;&amp;nbsp;男子十米双人:中国林跃/火亮夺冠 为中国摘下第7金&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;女子举重58KG:中国陈艳青破奥运记录成功卫冕&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;男子举重62KG:张湘祥夺冠 中国军团收下第9金&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;2008-08-10&lt;br /&gt;&amp;nbsp;女子10米气手枪:郭文珺破奥运记录摘中国第三金&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;女子双人3米板:郭晶晶/吴敏霞夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;女子柔道52KG:中国选手冼东妹卫冕成功 为中国夺得第5金&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;男子举重56KG:中国选手龙清泉夺冠&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;2008-08-09&lt;br /&gt;&amp;nbsp;女举48KG夺冠,陈燮霞为中国摘取首金&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;中国军团再收一金,男子10米气手枪庞伟夺冠&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from bbs.newsmth.net&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2605</guid><pubDate>Mon, 25 Aug 2008 04:39:49 GMT</pubDate></item><item><title>fedora 回收站路径</title><link>http://n23.appspot.com/blog/post/2601</link><description>&lt;p&gt;回收站的路径：&lt;br /&gt;$HOME/.local/share/Trash/&lt;/p&gt;</description><author>No.0023</author><category>Linux</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2601</guid><pubDate>Fri, 22 Aug 2008 02:42:25 GMT</pubDate></item><item><title>jQuery 插件</title><link>http://n23.appspot.com/blog/post/2401</link><description>
&lt;h2&gt;文件上传(File upload)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.phpletter.com/Demo/AjaxFileUpload-Demo/" rel="no-follow"&gt;Ajax File Upload&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.pixeline.be/experiments/jqUploader/" rel="no-follow"&gt;jQUploader&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.fyneworks.com/jquery/multiple-file-upload/" rel="no-follow"&gt;Multiple File Upload plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.appelsiini.net/projects/filestyle" rel="no-follow"&gt;jQuery File Style&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jquery.com/plugins/project/InputFileCSS" rel="no-follow"&gt;Styling an input type file&lt;/a&gt;&lt;br /&gt; &lt;a href="http://digitalbush.com/projects/progress-bar-plugin" rel="no-follow"&gt;Progress Bar Plugin&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;表单验证(Form Validation)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/" rel="no-follow"&gt;jQuery Validation&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.dyve.net/jquery/?autohelp" rel="no-follow"&gt;Auto Help&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.willjessup.com/sandbox/jquery/form_validator/form_validate.html" rel="no-follow"&gt;Simple jQuery form validation&lt;/a&gt;&lt;br /&gt; &lt;a href="http://letmehaveblog.blogspot.com/2007/08/easy-client-side-web-forms-validations.html" rel="no-follow"&gt;jQuery XAV - form validations&lt;/a&gt;&lt;br /&gt; &lt;a href="http://itgroup.com.ph/alphanumeric/" rel="no-follow"&gt;jQuery AlphaNumeric&lt;/a&gt;&lt;br /&gt; &lt;a href="http://digitalbush.com/projects/masked-input-plugin" rel="no-follow"&gt;Masked Input&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.dennydotnet.com/post/TypeWatch-jQuery-Plugin.aspx" rel="no-follow"&gt;TypeWatch Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jquery.com/plugins/project/TextLimiter" rel="no-follow"&gt;Text limiter for form fields&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.shawngo.com/gafyd/index.html" rel="no-follow"&gt;Ajax Username Check with jQuery&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;表单－选取框(Form - Select Box stuff)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://jquery.sanchezsalvador.com/page/jquerycombobox.aspx" rel="no-follow"&gt;jQuery Combobox&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.ajaxray.com/blog/2007/11/08/jquery-controlled-dependent-or-cascading-select-list-2/" rel="no-follow"&gt;jQuery controlled dependent (or Cascadign) Select List&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.google.com/p/jqmultiselects/" rel="no-follow"&gt;Multiple Selects&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.texotela.co.uk/code/jquery/select/" rel="no-follow"&gt;Select box manipulation&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.google.com/p/jqueryselectcombo/" rel="no-follow"&gt;Select Combo Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.msxhost.com/jquery/linked-selects/json/ target="&gt;jQuery - LinkedSelect&lt;/a&gt; &lt;br /&gt; &lt;a href="http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/" rel="no-follow"&gt;Auto-populate multiple select boxes&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.sitespotting.it/esempi/002/" rel="no-follow"&gt;Choose Plugin (Select Replacement)&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;表单基本、输入框、选择框等(Form Basics, Input Fields, Checkboxes etc.)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.malsup.com/jquery/form/" rel="no-follow"&gt;jQuery Form Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.handlino.com/wiki/jquery-form" rel="no-follow"&gt;jQuery-Form&lt;/a&gt;&lt;br /&gt; &lt;a href="http://envero.org/jlook/" rel="no-follow"&gt;jLook Nice Forms&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.whitespace-creative.com/jquery/jNice/" rel="no-follow"&gt;jNice&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.brainfault.com/2007/07/07/pin-plugin-reloaded/" rel="no-follow"&gt;Ping Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://grzegorz.frydrychowicz.net/jquery_toggleformtext/" rel="no-follow"&gt;Toggle Form Text&lt;/a&gt;&lt;br /&gt; &lt;a href="http://thoughts.kuzemchak.net/entry/toggleval-for-jquery/" rel="no-follow"&gt;ToggleVal&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.pengoworks.com/workshop/jquery/field.plugin.htm" rel="no-follow"&gt;jQuery Field Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.befruit.com/" rel="no-follow"&gt;jQuery Form&amp;amp;rsquo;n Field plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.texotela.co.uk/code/jquery/checkboxes/" rel="no-follow"&gt;jQuery Checkbox manipulation&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.alcoholwang.cn/jquery/jTaggingDemo.htm" rel="no-follow"&gt;jTagging&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.google.com/p/labelcheck/" rel="no-follow"&gt;jQuery labelcheck&lt;/a&gt;&lt;br /&gt; &lt;a href="http://scott.sauyet.com/thoughts/archives/2007/03/31/overlabel-with-jquery/" rel="no-follow"&gt;Overlabel&lt;/a&gt;&lt;br /&gt; &lt;a href="http://blog.amicoimmaginario.it/2007/08/28/jquery-plugin-3-state-radio-buttons/" rel="no-follow"&gt;3 state radio buttons&lt;/a&gt;&lt;br /&gt; &lt;a href="http://sanisoft-demo.com/jquery/plugins/shiftcheckbox/" rel="no-follow"&gt;ShiftCheckbox jQuery Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://digitalbush.com/projects/watermark-input-plugin" rel="no-follow"&gt;Watermark Input&lt;/a&gt;&lt;br /&gt; &lt;a href="http://kawika.org/jquery/checkbox/" rel="no-follow"&gt;jQuery Checkbox (checkboxes with imags)&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.softwareunity.com/sandbox/jqueryspinbtn/" rel="no-follow"&gt;jQuery SpinButton Control&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.phpletter.com/form_builder/demo.html" rel="no-follow"&gt;jQuery Ajax Form Builder&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.texotela.co.uk/code/jquery/focusfields/" rel="no-follow"&gt;jQuery Focus Fields&lt;/a&gt; &lt;br /&gt; &lt;a href="http://home.iprimus.com.au/kbwood/jquery/timeEntry.html" rel="no-follow"&gt;jQuery Time Entry&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;时间、日期和颜色选取(Time, Date and Color Picker)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://marcgrabanski.com/code/ui-datepicker/" rel="no-follow"&gt;jQuery UI Datepicker&lt;/a&gt;&lt;br /&gt; &lt;a href="http://kelvinluck.com/assets/jquery/datePicker/" rel="no-follow"&gt;jQuery date picker plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.google.com/p/jquery-timepicker/" rel="no-follow"&gt;jQuery Time Picker&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.texotela.co.uk/code/jquery/timepicker/" rel="no-follow"&gt;Time Picker&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.oakcitygraphics.com/jquery/clockpick/ClockPick.cfm" rel="no-follow"&gt;ClickPick&lt;/a&gt;&lt;br /&gt; &lt;a href="http://labs.perifer.se/timedatepicker/" rel="no-follow"&gt;TimePicker&lt;/a&gt;&lt;br /&gt; &lt;a href="http://acko.net/dev/farbtastic" rel="no-follow"&gt;Farbtastic jQuery Color Picker Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.intelliance.fr/jquery/color_picker/" rel="no-follow"&gt;Color Picker by intelliance.fr&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;投票插件(Rating Plugins)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.phpletter.com/Demo/Jquery-Star-Rating-Plugin/" rel="no-follow"&gt;jQuery Star Rating Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.m3nt0r.de/devel/raterDemo/" rel="no-follow"&gt;jQuery Star Rater&lt;/a&gt;&lt;br /&gt; &lt;a href="http://riderdesign.com/articles/displayarticle.aspx?articleid=21" rel="no-follow"&gt;Content rater with asp.net, ajax and jQuery&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.learningjquery.com/2007/05/half-star-rating-plugin" rel="no-follow"&gt;Half-Star Rating Plugin&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;搜索插件(Search Plugins)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.vulgarisoip.com/2007/08/06/jquerysuggest-11/" rel="no-follow"&gt;jQuery Suggest&lt;/a&gt;&lt;br /&gt; &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/" rel="no-follow"&gt;jQuery Autocomplete&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.pengoworks.com/workshop/jquery/autocomplete.htm" rel="no-follow"&gt;jQuery Autocomplete Mod&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.ajaxdaddy.com/demo-jquery-autocomplete.html" rel="no-follow"&gt;jQuery Autocomplete by AjaxDaddy&lt;/a&gt;&lt;br /&gt; &lt;a href="http://dev.reach1to1.net/saurabh/jplugins/autocomplete/" rel="no-follow"&gt;jQuery Autocomplete Plugin with HTML formatting&lt;/a&gt;&lt;br /&gt; &lt;a href="http://interface.eyecon.ro/docs/autocomplete" rel="no-follow"&gt;jQuery Autocompleter&lt;/a&gt;&lt;br /&gt; &lt;a href="http://nodstrum.com/2007/09/19/autocompleter/" rel="no-follow"&gt;AutoCompleter (Tutorial with PHP&amp;amp;MySQL)&lt;/a&gt;&lt;br /&gt; &lt;a href="http://rikrikrik.com/jquery/quicksearch/" rel="no-follow"&gt;quick Search jQuery Plugin&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;编辑器(Inline Edit &amp;amp; Editors)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.jaysalvat.com/jquery/jtageditor/" rel="no-follow"&gt;jTagEditor&lt;/a&gt;&lt;br /&gt; &lt;a href="http://demo.wymeditor.org/demo.html" rel="no-follow"&gt;WYMeditor&lt;/a&gt;&lt;br /&gt; &lt;a href="http://garage.pimentech.net/scripts_doc_jquery_jframe/" rel="no-follow"&gt;jQuery jFrame&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.appelsiini.net/projects/jeditable" rel="no-follow"&gt;Jeditable - edit in place plugin for jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.dyve.net/jquery/?editable" rel="no-follow"&gt;jQuery editable&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.jdempster.com/category/jquery/disableTextSelect/" rel="no-follow"&gt;jQuery Disable Text Select Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://15daysofjquery.com/edit-in-place-with-ajax-using-jquery- -library/15/"&gt;Edit in Place with Ajax using jQuery&lt;/a&gt;&lt;br /&gt; &lt;a href="http://davehauenstein.com/blog/archives/28" rel="no-follow"&gt;jQuery Plugin - Another In-Place Editor&lt;/a&gt;&lt;br /&gt; &lt;a href="http://dev.iceburg.net/jquery/tableEditor/demo.php" rel="no-follow"&gt;TableEditor&lt;/a&gt;&lt;br /&gt; &lt;a href="http://joshhundley.com/teditable-in-place-editing-for-tables/" rel="no-follow"&gt;tEditable - in place table editing for jQuery&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;多媒体、视频、Flash等(Audio, Video, Flash, SVG, etc)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.contentwithstructure.com/extras/jmedia" rel="no-follow"&gt;jMedia - accessible multi-media embedding&lt;/a&gt;&lt;br /&gt; &lt;a href="http://sourceforge.net/projects/jbedit/" rel="no-follow"&gt;JBEdit - Ajax online Video Editor&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.sean-o.com/jquery/jmp3/" rel="no-follow"&gt;jQuery MP3 Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://malsup.com/jquery/media/" rel="no-follow"&gt;jQuery Media Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jquery.lukelutman.com/plugins/flash/index.html" rel="no-follow"&gt;jQuery Flash Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.solitude.dk/archives/embedquicktime/" rel="no-follow"&gt;Embed QuickTime&lt;/a&gt;&lt;br /&gt; &lt;a href="http://keith-wood.name/svg.html"&gt;SVG Integration&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;图片(Photos/Images/Galleries)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://jquery.com/demo/thickbox/" rel="no-follow"&gt;ThickBox&lt;/a&gt;&lt;br /&gt; &lt;a href="http://leandrovieira.com/projects/jquery/lightbox/" rel="no-follow"&gt;jQuery lightBox plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://blog.joshuaeichorn.com/archives/2007/01/11/jquery-image-strip/" rel="no-follow"&gt;jQuery Image Strip&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html" rel="no-follow"&gt;jQuery slideViewer&lt;/a&gt;&lt;br /&gt; &lt;a href="http://benjaminsterling.com/2007/09/09/jquery-jqgalscroll-photo-gallery/" rel="no-follow"&gt;jQuery jqGalScroll 2.0&lt;/a&gt;&lt;br /&gt; &lt;a href="http://benjaminsterling.com/2007/10/02/jquery-jqgalviewii-photo-gallery/" rel="no-follow"&gt;jQuery - jqGalViewII&lt;/a&gt;&lt;br /&gt; &lt;a href="http://benjaminsterling.com/2007/10/21/jqgalviewiii-proof-of-concept/" rel="no-follow"&gt;jQuery - jqGalViewIII&lt;/a&gt;&lt;br /&gt; &lt;a href="http://opiefoto.com/articles/photoslider" rel="no-follow"&gt;jQuery Photo Slider&lt;/a&gt;&lt;br /&gt; &lt;a href="http://joanpiedra.com/jquery/thumbs/" rel="no-follow"&gt;jQuery Thumbs - easily create thumbnails&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.texotela.co.uk/code/jquery/jQIR/" rel="no-follow"&gt;jQuery jQIR Image Replacement&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.gmarwaha.com/jquery/jcarousellite/index.php" rel="no-follow#what"&gt;jCarousel Lite&lt;/a&gt;&lt;br /&gt; &lt;a href="http://projects.sevir.org/storage/jpanview/index.html" rel="no-follow"&gt;jQPanView&lt;/a&gt;&lt;br /&gt; &lt;a href="http://sorgalla.com/projects/jcarousel/" rel="no-follow#Examples"&gt;jCarousel&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.intelliance.fr/jquery/imagebox/" rel="no-follow"&gt;Interface Imagebox&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.getintothis.com/blog/2006/10/12/image-gallery-using-jquery-interface-reflections/" rel="no-follow"&gt;Image Gallery using jQuery, Interface &amp;amp; Reflactions&lt;/a&gt;&lt;br /&gt; &lt;a href="http://realazy.org/lab/jquery/j-gallery/" rel="no-follow"&gt;simple jQuery Gallery&lt;/a&gt;&lt;br /&gt; &lt;a href="http://chicagosocial.com/gallery/" rel="no-follow"&gt;jQuery Gallery Module&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.eogallery.com/" rel="no-follow"&gt;EO Gallery&lt;/a&gt;&lt;br /&gt; &lt;a href="http://flesler.blogspot.com/search/label/jQuery.ScrollShow" rel="no-follow"&gt;jQuery ScrollShow&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.malsup.com/jquery/cycle/" rel="no-follow"&gt;jQuery Cycle Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.projectatomic.com/en/flickr.htm" rel="no-follow"&gt;jQuery Flickr&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.appelsiini.net/2007/9/lazy-load-images-jquery-plugin" rel="no-follow"&gt;jQuery Lazy Load Images Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.sunsean.com/zoomi/" rel="no-follow"&gt;Zoomi - Zoomable Thumbnails&lt;/a&gt;&lt;br /&gt; &lt;a href="http://remysharp.com/2007/03/19/a-few-more-jquery-plugins-crop-labelover-and-pluck/" rel="no-follow#crop"&gt;jQuery Crop - crop any image on the fly&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jquery.com/plugins/project/reflection" rel="no-follow"&gt;Image Reflection&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Google地图（Google Map）&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.dyve.net/jquery/?googlemaps" rel="no-follow"&gt;jQuery Plugin googlemaps&lt;/a&gt;&lt;br /&gt; &lt;a href="http://code.google.com/p/jmaps/" rel="no-follow"&gt;jMaps jQuery Maps Framework&lt;/a&gt;&lt;br /&gt; &lt;a href="http://projects.sevir.org/storage/jqmaps/index.html" rel="no-follow"&gt;jQmaps&lt;/a&gt;&lt;br /&gt; &lt;a href="http://olbertz.de/jquery/googlemap.html" rel="no-follow"&gt;jQuery &amp;amp; Google Maps&lt;/a&gt;&lt;br /&gt; &lt;a href="http://snippets.dzone.com/posts/show/4361" rel="no-follow"&gt;jQuery Maps Interface forr Google and Yahoo maps&lt;/a&gt;&lt;br /&gt; &lt;a href="http://webrocket.ulmb.com/jmaps/" rel="no-follow"&gt;jQuery J Maps - by Tane Piper&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;游戏(Games)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://fmarcia.info/jquery/tetris/tetris.html" rel="no-follow"&gt;Tetris with jQuery&lt;/a&gt;&lt;br /&gt; &lt;a href="http://64squar.es/" rel="no-follow"&gt;jQuery Chess&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.bennadel.com/blog/623-jQuery-Demo-Mad-Libs-Word-Game.htm" rel="no-follow"&gt;Mad Libs Word Game&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.alexatnet.com/node/68" rel="no-follow"&gt;jQuery Puzzle&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.willjessup.com/sandbox/jquery/solar_system/rotator.html" rel="no-follow"&gt;jQuery Solar System (not a game but awesome jQuery Stuff)&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;表格等(Tables, Grids etc.)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://docs.jquery.com/Plugins/Tablesorter" rel="no-follow"&gt;UI/Tablesorter&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.reconstrukt.com/ingrid/" rel="no-follow"&gt;jQuery ingrid&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.trirand.com/blog/?p=13" rel="no-follow"&gt;jQuery Grid Plugin&lt;/a&gt;&lt;br /&gt; &lt;a href="http://ideamill.synaptrixgroup.com/jquery/tablefilter/tabletest.htm" rel="no-follow"&gt;Table Filter - awesome!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://dev.iceburg.net/jquery/tableEditor/demo.php" rel="no-follow"&gt;TableEditor&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.hanpau.com/jquery/unobtrusivetreetable.php" rel="no-follow"&gt;jQuery Tree Tables&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.javascripttoolbox.com/jquery/" rel="no-follow#expandablerows"&gt;Expandable &amp;ldquo;Detail&amp;rdquo; Table Rows&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.remotesynthesis.com/blog/index.cfm/2007/9/25/Sortable-Table-ColdFusion-Custom-Tag-with-jQueryUI" rel="no-follow"&gt;Sortable Table ColdFusion Costum Tag with jQuery UI&lt;/a&gt;&lt;br /&gt; &lt;a href="http://flesler.blogspot.com/2007/10/jquerybubble.html" rel="no-follow"&gt;jQuery Bubbl&lt;/a&gt;&lt;br /&gt; &lt;a href="http://tablesorter.com/docs/" rel="no-follow"&gt;TableSorter&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.webtoolkit.info/demo/jquery/scrollable/demo.html" rel="no-follow"&gt;Scrollable HTML Table&lt;/a&gt; &lt;br /&gt; &lt;a href="http://p.sohei.org/stuff/jquery/columnmanager/demo/demo.html" rel="no-follow"&gt;jQuery column Manager Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://p.sohei.org/stuff/jquery/tablehover/demo/demo.html" rel="no-follow"&gt;jQuery tableHover Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://p.sohei.org/stuff/jquery/columnhover/demo/demo.html" rel="no-follow"&gt;jQuery columnHover Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://makoomba.altervista.org/grid/" rel="no-follow"&gt;jQuery Grid&lt;/a&gt; &lt;br /&gt; &lt;a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/" rel="no-follow"&gt;TableSorter plugin for jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://joshhundley.com/teditable-in-place-editing-for-tables/" rel="no-follow"&gt;tEditable - in place table editing for jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.hovinne.com/dev/jquery/chartotable/" rel="no-follow"&gt;jQuery charToTable Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ita.es/jquery/jquery.grid.columnSizing.htm" rel="no-follow"&gt;jQuery Grid Column Sizing&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ita.es/jquery/jquery.grid.rowSizing.htm" rel="no-follow"&gt;jQuery Grid Row Sizing&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;统计图(Charts, Presentation etc.)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://worcesterwideweb.com/2007/06/04/jquery-wizard-plugin/" rel="no-follow"&gt;jQuery Wizard Plugin &lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.reach1to1.com/sandbox/jquery/jqchart/" rel="no-follow"&gt;jQuery Chart Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://ejohn.org/apps/speed/" rel="no-follow"&gt;Bar Chart&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;边框、圆角、背景(Border, Corners, Background)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.malsup.com/jquery/corner/" rel="no-follow"&gt;jQuery Corner&lt;/a&gt; &lt;br /&gt; &lt;a href="http://blue-anvil.com/archives/anti-aliased-rounded-corners-with-jquery" rel="no-follow"&gt;jQuery Curvy Corner&lt;/a&gt; &lt;br /&gt; &lt;a href="http://dev.jquery.com/~paul/plugins/nifty/example.html"&gt;Nifty jQuery Corner&lt;/a&gt; &lt;br /&gt; &lt;a href="http://illandril.net/jQuery/transparentCorners/" rel="no-follow"&gt;Transparent Corners&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.methvin.com/jquery/jq-corner.html" rel="no-follow"&gt;jQuery Corner Gallery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://blog.brandonaaron.net/my-jquery-plugins/gradient/" rel="no-follow"&gt;Gradient Plugin&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;文字和超链接(Text and Links)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://wanderinghorse.net/computing/ /jquery/spoilers/demo.html"&gt;jQuery Spoiler plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://johannburkard.de/blog/programming/ /highlight- -text-higlighting-jquery-plugin.html"&gt;Text Highlighting&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.jdempster.com/category/jquery/disableTextSelect/" rel="no-follow"&gt;Disable Text Select Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.texotela.co.uk/code/jquery/newsticker/" rel="no-follow"&gt;jQuery Newsticker&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ollicle.com/2007/jun/03/jquery_lineheight_flexible.html" rel="no-follow"&gt;Auto line-height Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://agencenp.net/textgrad/textgrad.html" rel="no-follow"&gt;Textgrad - a text gradient plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://kawika.org/jquery/linklook/" rel="no-follow"&gt;LinkLook - a link thumbnail preview&lt;/a&gt; &lt;br /&gt; &lt;a href="http://rikrikrik.com/jquery/pager/" rel="no-follow#examples"&gt;pager jQuery Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://rikrikrik.com/jquery/shortkeys/" rel="no-follow"&gt;shortKeys jQuery Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ollicle.com/eg/jquery/biggerlink" rel="no-follow"&gt;jQuery Biggerlink&lt;/a&gt; &lt;br /&gt; &lt;a href="http://troy.dyle.net/linkchecker/" rel="no-follow"&gt;jQuery Ajax Link Checker&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;鼠标提示（Tooltips）&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/" rel="no-follow"&gt;jQuery Plugin - Tooltip&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.codylindley.com/blogstuff/js/jtip/" rel="no-follow"&gt;jTip - The jQuery Tool Tip&lt;/a&gt; &lt;br /&gt; &lt;a href="http://examples.learningjquery.com/62/demo/index.html" rel="no-follow#examplesection"&gt;clueTip&lt;/a&gt; &lt;br /&gt; &lt;a href="http://edgarverle.com/BetterTip/default.cfm" rel="no-follow"&gt;BetterTip&lt;/a&gt; &lt;br /&gt; &lt;a href="http://ioreader.com/2007/05/15/flash-tooltips-using-jquery/" rel="no-follow"&gt;Flash Tooltips using jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.texotela.co.uk/code/jquery/tooltipdemo/" rel="no-follow"&gt;ToolTip&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;菜单和导航(Menus, Navigations)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://stilbuero.de/jquery/tabs_3/" rel="no-follow"&gt;jQuery Tabs Plugin - awesome! &lt;/a&gt; . [&lt;a href="http://stilbuero.de/jquery/tabs_3/nested.html" rel="no-follow"&gt;demo nested tabs&lt;/a&gt; .]&lt;br /&gt; &lt;a href="http://blog.cutterscrossing.com/index.cfm/2007/6/15/Updated-JQuery-Nested-Tab-Set-with-Demo" rel="no-follow"&gt;another jQuery nested Tab Set example (based on jQuery Tabs Plugin)&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.sunsean.com/idTabs/" rel="no-follow"&gt;jQuery idTabs&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jdsharp.us/jQuery/plugins/jdMenu/" rel="no-follow"&gt;jdMenu - Hierarchical Menu Plugin for jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://be.twixt.us/jquery/suckerFish.php" rel="no-follow"&gt;jQuery SuckerFish Style&lt;/a&gt; &lt;br /&gt; &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/" rel="no-follow"&gt;jQuery Plugin Treeview&lt;/a&gt; &lt;br /&gt; &lt;a href="http://be.twixt.us/jquery/treeView.php" rel="no-follow"&gt;treeView Basic&lt;/a&gt; &lt;br /&gt; &lt;a href="http://labs.activespotlight.net/jQuery/menu_demo.html" rel="no-follow"&gt;FastFind Menu&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.getintothis.com/blog/2006/09/26/my-first-jquery-plugin-a-sliding-menu/" rel="no-follow"&gt;Sliding Menu&lt;/a&gt; &lt;br /&gt; &lt;a href="http://gmarwaha.com/blog/?p=7" rel="no-follow"&gt;Lava Lamp jQuery Menu&lt;/a&gt; &lt;br /&gt; &lt;a href="http://icon.cat/wiki/IconDock_En#iconDock_jQuery_Plugin"&gt;jQuery iconDock&lt;/a&gt; &lt;br /&gt; &lt;a href="http://cherne.net/brian/resources/jquery.variations.html" rel="no-follow"&gt;jVariations Control Panel&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.trendskitchens.co.nz/jquery/contextmenu/" rel="no-follow"&gt;ContextMenu plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://p.sohei.org/jquery-plugins/clickmenu/" rel="no-follow"&gt;clickMenu&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ndesign-studio.com/blog/mac/css-dock-menu" rel="no-follow"&gt;CSS Dock Menu&lt;/a&gt; &lt;br /&gt; &lt;a href="http://webexpose.org/2006/12/28/jquery-pop-up-menu-tutorial/" rel="no-follow"&gt;jQuery Pop-up Menu Tutorial&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.getintothis.com/blog/2006/09/26/my-first-jquery-plugin-a-sliding-menu/" rel="no-follow"&gt;Sliding Menu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://stilbuero.de/jquery/tabs_3/" rel="no-follow"&gt;http://stilbuero.de/jquery/tabs_3/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;幻灯、翻转等(Accordions, Slide and Toggle stuff)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-accordion/" rel="no-follow"&gt;jQuery Plugin Accordion&lt;/a&gt; &lt;br /&gt; &lt;a href="http://fmarcia.info/jquery/accordion.html" rel="no-follow"&gt;jQuery Accordion Plugin Horizontal Way&lt;/a&gt; &lt;br /&gt; &lt;a href="http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-accordion.html" rel="no-follow"&gt;haccordion - a simple horizontal accordion plugin for jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://dev.portalzine.de/index?/Horizontal_Accordion--print" rel="no-follow"&gt;Horizontal Accordion by portalzine.de&lt;/a&gt;&lt;br /&gt; &lt;a href="http://berndmatzner.de/jquery/hoveraccordion/" rel="no-follow"&gt;HoverAccordion&lt;/a&gt; &lt;br /&gt; &lt;a href="http://fmarcia.info/jquery/accordion.html" rel="no-follow"&gt;Accordion Example from fmarcia.info&lt;/a&gt; &lt;br /&gt; &lt;a href="http://blog.evaria.com/wp-content/themes/blogvaria/jquery/index.php" rel="no-follow"&gt;jQuery Accordion Example&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.com/files/demo/dl-done.html" rel="no-follow"&gt;jQuery Demo - Expandable Sidebar Menu&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.andreacfm.com/examples/jQpanels/" rel="no-follow"&gt;Sliding Panels for jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.andreaseberhard.de/toggleElements/" rel="no-follow"&gt;jQuery ToggleElements&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ndoherty.com/demos/coda-slider/" rel="no-follow"&gt;Coda Slider&lt;/a&gt; &lt;br /&gt; &lt;a href="http://sorgalla.com/projects/jcarousel/" rel="no-follow#Examples"&gt;jCarousel&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.reindel.com/accessible_news_slider/" rel="no-follow"&gt;Accesible News Slider Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://icant.co.uk/sandbox/jquerycodeview/" rel="no-follow"&gt;Showing and Hiding code Examples&lt;/a&gt; &lt;br /&gt; &lt;a href="http://gsgd.co.uk/sandbox/jquery/easing/" rel="no-follow"&gt;jQuery Easing Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://sonspring.com/journal/jquery-portlets" rel="no-follow"&gt;jQuery Portlets&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jdsharp.us/jQuery/plugins/AutoScroll/" rel="no-follow"&gt;AutoScroll&lt;/a&gt; &lt;br /&gt; &lt;a href="http://medienfreunde.com/lab/innerfade/" rel="no-follow"&gt;Innerfade&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;拖放插件(Drag and Drop)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://docs.jquery.com/UI/Draggables" rel="no-follow"&gt;UI/Draggables&lt;/a&gt; &lt;br /&gt; &lt;a href="http://fromvega.com/wordpress/2007/07/14/easydrag-jquery-plugin/" rel="no-follow"&gt;EasyDrag jQuery Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://sonspring.com/journal/jquery-portlets" rel="no-follow"&gt;jQuery Portlets&lt;/a&gt; &lt;br /&gt; &lt;a href="http://dev.iceburg.net/jquery/jqDnR/" rel="no-follow"&gt;jqDnR - drag, drop resize&lt;/a&gt; &lt;br /&gt; &lt;a href="http://interface.eyecon.ro/demos/drag.html" rel="no-follow"&gt;Drag Demos&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;XML XSL JSON Feeds&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.jongma.org/webtools/jquery/xslt/" rel="no-follow"&gt;XSLT Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://cgaskell.wordpress.com/2006/11/02/jquery-ajax-call-and-result-xml-parsing/" rel="no-follow"&gt;jQuery Ajax call and result XML parsing&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.com/plugins/project/xmlObjectifier" rel="no-follow"&gt;xmlObjectifier - Converts XML DOM to JSON&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.glyphix.com/" rel="no-follow"&gt;jQuery XSL Transform&lt;/a&gt; &lt;br /&gt; &lt;a href="http://malsup.com/jquery/taconite/" rel="no-follow"&gt;jQuery Taconite - multiple Dom updates&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.hovinne.com/blog/index.php/2007/07/15/132-jfeed-jquery-rss-atom-feed-parser-plugin" rel="no-follow"&gt;RSS/ATOM Feed Parser Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.malsup.com/jquery/gfeed/" rel="no-follow"&gt;jQuery Google Feed Plugin&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;浏览器(Browserstuff)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://noteslog.com/post/how-to-fix-the-resize-event-in-ie/" rel="no-follow"&gt;Wresize - IE Resize event Fix Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.khurshid.com/ifixpng.php" rel="no-follow"&gt;jQuery ifixpng&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.andreaseberhard.de/pngFix/" rel="no-follow"&gt;jQuery pngFix&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.crismancich.de/jquery/plugins/linkscrubber/" rel="no-follow"&gt;Link Scrubber - removes the dotted line onfocus from links&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.matthewjrichards.co.uk/articles/2007/06/25/jquery-perciformes-the-entire-suckerfish-familly-under-one-roof" rel="no-follow"&gt;jQuery Perciformes - the entire suckerfish familly under one roof&lt;/a&gt; &lt;br /&gt; &lt;a href="http://blog.brandonaaron.net/my-jquery-plugins/background-iframe/" rel="no-follow"&gt;Background Iframe&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.com/plugins/project/QinIE" rel="no-follow"&gt;QinIE - for proper display of Q tags in IE&lt;/a&gt; &lt;br /&gt; &lt;a href="http://webrocket.ulmb.com/ability/" rel="no-follow"&gt;jQuery Accessibility Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ogonek.net/mousewheel/jquery-demo.html" rel="no-follow"&gt;jQuery MouseWheel Plugin&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;对话框、确认窗口(Alert, Prompt, Confirm Windows)&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://trentrichardson.com/Impromptu/" rel="no-follow"&gt;jQuery Impromptu&lt;/a&gt; &lt;br /&gt; &lt;a href="http://nadiaspot.com/jquery/confirm" rel="no-follow"&gt;jQuery Confirm Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://dev.iceburg.net/jquery/jqModal/" rel="no-follow"&gt;jqModal&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.ericmmartin.com/projects/simplemodal/" rel="no-follow"&gt;SimpleModal&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;CSS&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.kelvinluck.com/article/switch-stylesheets-with-jquery" rel="no-follow"&gt;jQuery Style Switcher&lt;/a&gt; &lt;br /&gt; &lt;a href="http://andykent.bingodisk.com/bingo/public/jss/" rel="no-follow"&gt;JSS - Javascript StyleSheets&lt;/a&gt; &lt;br /&gt; &lt;a href="http://flesler.blogspot.com/2007/11/jqueryrule.html" rel="no-follow"&gt;jQuery Rule - creation/manipulation of CSS Rules&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.designerkamal.com/jPrintArea/" rel="no-follow"&gt;jPrintArea&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;DOM、AJAX和其它JQuery插件（DOM, Ajax and other jQuery plugins）&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://flydom.socianet.com/" rel="no-follow"&gt;FlyDOM&lt;/a&gt; &lt;br /&gt; &lt;a href="http://brandonaaron.net/docs/dimensions/" rel="no-follow#getting-started"&gt;jQuery Dimenion Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://happygiraffe.net/blog/articles/2007/09/26/jquery-logging" rel="no-follow"&gt;jQuery Loggin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.com/plugins/project/metadata" rel="no-follow"&gt;Metadata - extract metadata from classes, attributes, elements&lt;/a&gt; &lt;br /&gt; &lt;a href="http://johannburkard.de/blog/programming/ /inc-a-super-tiny-client-side-include- -jquery-plugin.html"&gt;Super-tiny Client-Side Include Javascript jQuery Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://humanized.com/weblog/2007/09/14/undo-made-easy-with-ajax-part-1/" rel="no-follow"&gt;Undo Made Easy with Ajax&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.jasons-toolbox.com/JHeartbeat/" rel="no-follow"&gt;JHeartbeat - periodically poll the server&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.appelsiini.net/projects/lazyload" rel="no-follow"&gt;Lazy Load Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://blog.brandonaaron.net/2007/08/19/new-plugin-live-query/" rel="no-follow"&gt;Live Query&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquery.offput.ca/every/" rel="no-follow"&gt;jQuery Timers&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.joanpiedra.com/jquery/shareit/" rel="no-follow"&gt;jQuery Share it - display social bookmarking icons&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.jdempster.com/category/code/jquery/cookiejar/" rel="no-follow"&gt;jQuery serverCookieJar&lt;/a&gt; &lt;br /&gt; &lt;a href="http://ideamill.synaptrixgroup.com/?p=3" rel="no-follow"&gt;jQuery autoSave&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.semicomplete.com/blog/geekery/jquery-interface-puffer.html" rel="no-follow"&gt;jQuery Puffer&lt;/a&gt; &lt;br /&gt; &lt;a href="http://33rockers.com/jquery/iframe-demo/" rel="no-follow"&gt;jQuery iFrame Plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.stilbuero.de/2006/09/17/ -plugin-for-jquery/"&gt;Cookie Plugin for jQuery&lt;/a&gt; &lt;br /&gt; &lt;a href="http://leftlogic.com/lounge/articles/jquery_spy2" rel="no-follow"&gt;jQuery Spy - awesome plugin&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.learningjquery.com/2007/01/effect-delay-trick" rel="no-follow"&gt;Effect Delay Trick&lt;/a&gt; &lt;br /&gt; &lt;a href="http://jquick.sullof.com/jquick/" rel="no-follow"&gt;jQuick - a quick tag creator for jQuery&lt;/a&gt; &lt;a href="http://noteslog.com/post/metaobjects-11-released-today/" rel="no-follow"&gt;&lt;br /&gt; Metaobjects&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.thunderguy.com/semicolon/2007/08/14/elementready-jquery-plugin/" rel="no-follow"&gt;elementReady&lt;/a&gt;&lt;/p&gt;
</description><author>No.0023</author><category>jQuery</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2401</guid><pubDate>Fri, 22 Aug 2008 01:47:48 GMT</pubDate></item><item><title>Gmail Tips</title><link>http://n23.appspot.com/blog/post/2378</link><description>&lt;p&gt;&lt;img src="http://pic.yupoo.com/watsonxu/5841060f446f/medium.jpg" alt="medium Gmail小技巧合集" /&gt;&lt;a href="http://gmailtips.com/" rel="no-follow" target="_blank"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Beta: First Impressions&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;How I &amp;amp;lsquo;Imported&amp;amp;rsquo; archived email into Gmail&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #1: All About Labels&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #2: &amp;amp;lsquo;Check&amp;amp;rsquo; Your Messages&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #3: How to Maintain &amp;amp;lsquo;Notes&amp;amp;rsquo;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #4: Formatting Your Name&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #5: The &amp;amp;lsquo;Plus&amp;amp;rsquo; Side of Gmail&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #6: Define a Signature!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #7: Quickly Addressing a Message&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #8: Working With Lots of Email&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #9: New Mail Notification!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #10: Some Tips About Conversations&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #11: Connecting Securely&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #12: &amp;amp;lsquo;Archiving&amp;amp;rsquo; Explained&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #13: Some More About Conversations&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #14: What Happens To Sent Messages?&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #15: New feature! Highlighting on/off!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #16: New feature! View or Download for attached images&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #17: Advanced Search - View Multiple Labels&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #18: Some Forwarding Idiosyncracies&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #19: Advanced Search - &amp;amp;lsquo;Query Words&amp;amp;rsquo;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #20: Why some attachments bounce&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #21: &amp;amp;lsquo;Official&amp;amp;rsquo; Features and Bugs Status Page&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #22: Advanced Search - Multi-Labeled and Un-Labeled Messages&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #23: Cleaning Your Contacts&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #24: New feature! Import Contacts&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #25: Find Your Unread Messages&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #26: Creating a Pseudo Address Group!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #27: Adding Hotmail Contacts to Gmail&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #28: &amp;amp;lsquo;Gmail Notifier&amp;amp;rsquo; released to beta!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #29: A Small Quirk With Gmail Notify&amp;amp;rsquo;s &amp;amp;lsquo;mailto:&amp;amp;rsquo; Handler&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #30: Removing a Label&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #31: Improved and New Contacts Features!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #32: Drafts!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #33: Auto-forward received Gmail!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #34: Gmail on your Palm!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #35: Gmail on your Palm! - Part 2&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #36: Some Email Management Tips&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #37: New Feature! Image Attachment Thumbnails&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #38: Google Gmail Minibrowser&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #39: New Feature! Gmail From Most Any Browser!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #40: New Feature! Rich formatting!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #41: How Much Space Do I Have?&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #42: A More Worldly View&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #43: Notes in Just Two Clicks!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #44: Using An Email Client&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #45: Backing Up Your Gmail Account&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #46: Creating a Map Repository&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #47: Gmail Adds Chat!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #48: Reply Without Scrolling&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #49: Moving the Chat Quick Contacts Box&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #50: Changing Subject Text When Replying or Forwarding&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #51: Keyboard Shortcuts&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #52: Can I &amp;ldquo;Delete all&amp;rdquo; Spam?&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #53: How Can I View Outlook Stationery In Gmail?&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #54: New Feature! Select ALL conversations&lt;/a&gt;&lt;br /&gt; &lt;a href="http://g04.com/misc/GmailTipsComplete.html" rel="no-follow" target="_blank"&gt;Gmail Tip #55: Excluding Chat from Search Results&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jimstips.com/gmailtips/_gmail_tip_58_gmail_now_opened_to_everyone.html" rel="no-follow" target="_blank"&gt;Gmail Tip #58: Gmail Now Opened to Everyone!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jimstips.com/gmailtips/gmail_tip_59_new_feature_gmail_adds_pop_mail_fetcher_.html" rel="no-follow" target="_blank"&gt;Gmail Tip #59: New Feature! Gmail adds POP &amp;ldquo;Mail Fetcher&amp;rdquo;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jimstips.com/gmailtips/_gmail_tip_60_deleting_a_message_and_moving_to_the_next.html" rel="no-follow" target="_blank"&gt;Gmail Tip #60: Deleting A Message And Moving To The Next&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jimstips.com/gmailtips/gmail_tip_61_enhancement_attachment_size_doubled_to_20mb.html" rel="no-follow" target="_blank"&gt;Gmail Tip #61: Enhancement: Attachment Size Doubled to 20MB!&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jimstips.com/gmailtips/gmail_tip_62_enhancement_univeral_navigation_bar_.html" rel="no-follow" target="_blank"&gt;Gmail Tip #62: Enhancement: &amp;ldquo;Univeral Navigation Bar&amp;rdquo;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jimstips.com/gmailtips/gmail_tip_63_gmail_and_your_blackberry.html" rel="no-follow" target="_blank"&gt;Gmail Tip #63: Gmail And Your Blackberry&lt;/a&gt;&lt;br /&gt; &lt;a href="http://jimstips.com/gmailtips/gmail_tip_64_gmail_rolls_out_imap.html" rel="no-follow" target="_blank"&gt;Gmail Tip #64: Gmail Rolls Out IMAP!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;链接：&lt;a href="http://gmailtips.com/" rel="no-follow" target="_blank"&gt;http://GmailTips.com&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2378</guid><pubDate>Wed, 20 Aug 2008 12:45:12 GMT</pubDate></item><item><title>try feedburner.com</title><link>http://n23.appspot.com/blog/post/2377</link><description>&lt;p&gt;test:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/n23blog" rel="no-follow" target="_blank"&gt;http://feeds.feedburner.com/n23blog&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>blog</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2377</guid><pubDate>Wed, 20 Aug 2008 12:39:44 GMT</pubDate></item><item><title>四项云计算服务大比拼</title><link>http://n23.appspot.com/blog/post/2373</link><description>&lt;p&gt;&lt;a href="http://cio.it168.com/a2008/0815/200/000000200771.shtml" rel="no-follow" target="_blank"&gt;这里&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2373</guid><pubDate>Fri, 15 Aug 2008 06:23:39 GMT</pubDate></item><item><title>n23.appspot.com</title><link>http://n23.appspot.com/blog/post/2356</link><description>&lt;p&gt;还能连得上，解析为：&lt;/p&gt;
&lt;p&gt;Shell:~/tmp &amp;gt;: ping -c 10 n23.appspot.com &lt;br /&gt;PING www4.l.google.com (209.85.171.118): 56 data bytes&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=0 ttl=240 time=374.904 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=1 ttl=240 time=375.877 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=2 ttl=240 time=376.054 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=3 ttl=240 time=374.873 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=4 ttl=240 time=374.891 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=5 ttl=240 time=374.040 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=6 ttl=240 time=374.947 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=7 ttl=240 time=375.835 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=8 ttl=240 time=373.769 ms&lt;br /&gt;64 bytes from 209.85.171.118: icmp_seq=9 ttl=240 time=374.430 ms&lt;br /&gt;--- www4.l.google.com ping statistics ---&lt;br /&gt;10 packets transmitted, 10 packets received, 0.0% packet loss&lt;br /&gt;round-trip min/avg/max/std-dev = 373.769/374.962/376.054/0.732 ms&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;go on...&lt;/p&gt;</description><author>No.0023</author><category>blog</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2356</guid><pubDate>Thu, 14 Aug 2008 15:07:48 GMT</pubDate></item><item><title>云计算</title><link>http://n23.appspot.com/blog/post/2354</link><description>&lt;p&gt;从两天的Google快讯中收到了五条关于云计算的新闻：&lt;/p&gt;
&lt;h1&gt;&lt;a href="http://server.it168.com/a2008/0811/200/000000200102.shtml" rel="no-follow" target="_blank"&gt;Google用&amp;ldquo;云计算&amp;rdquo;赶超微软&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;a href="http://server.it168.com/a2008/0811/200/000000200133.shtml" rel="no-follow" target="_blank"&gt;云计算 风云乍起&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;a href="http://server.it168.com/a2008/0811/200/000000200178.shtml" rel="no-follow" target="_blank"&gt;定义云计算&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;a href="http://server.it168.com/a2008/0811/200/000000200159.shtml" rel="no-follow" target="_blank"&gt;Google搜索引擎：迈向云计算的未来&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;a href="http://server.it168.com/a2008/0811/200/000000200132.shtml" rel="no-follow" target="_blank"&gt;云计算三架马车:Google、亚马逊和IBM&lt;/a&gt;&lt;/h1&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2354</guid><pubDate>Tue, 12 Aug 2008 13:36:11 GMT</pubDate></item><item><title>appspot.com</title><link>http://n23.appspot.com/blog/post/2372</link><description>&lt;p&gt;请两天假回来，收到了appspot已经非常不正常了，要用代理才能正常访问，&lt;/p&gt;
&lt;p&gt;试了一下，我的博客还可以连上，谢天谢地啊...&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>GAE</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2372</guid><pubDate>Tue, 12 Aug 2008 13:15:36 GMT</pubDate></item><item><title>2008-08-10 16:40:55</title><link>http://n23.appspot.com/blog/post/2371</link><description>&lt;p&gt;刚刚听到一个不好的消息...&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2371</guid><pubDate>Sun, 10 Aug 2008 09:01:08 GMT</pubDate></item><item><title>基于Java的操作系统--JNode 0.2.7发布</title><link>http://n23.appspot.com/blog/post/2370</link><description>&lt;p&gt;&lt;a href="http://www.cnbeta.com/topic.php?topicid=160" rel="no-follow" target="_blank"&gt;&lt;img src="http://img.cnbeta.com/topics/160_java.gif" alt="" width="screen.width*0.7;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;a href="http://www.jnode.org/" rel="no-follow" target="_blank"&gt;JNode&lt;/a&gt;是Java New Operating System Design Effort的缩写，是一个基于Java一发的操作系统(内核有很小一部分使用了汇编语言)，JNode的目标是易于使用、易于安装的个人操作系统。所有 的Java程序都可以在JNode上安全、快速地运行。&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; 要运行Jnode,官方推荐的最低配置是：&lt;/p&gt;
&lt;blockquote&gt;CPU:Pentium III 1Ghz&lt;br /&gt; 内存：512M&lt;br /&gt; 更详细的资料可以查看&lt;a href="http://www.jnode.org/node/573" rel="no-follow" target="_blank"&gt;硬件要求&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;本版的一个主要特点是全面提高了JNode的GUI，包括图像和字体的渲染，通用的VESA支持和图形控制台。最新的版本以及以前的旧版本都可以在&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=80882" rel="no-follow" target="_blank"&gt;sourceforge.net&lt;/a&gt;上下载。&lt;br /&gt; 下面是 JNode 0.2.7的截图：&lt;br /&gt; &lt;a href="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_11.jpg" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_11.jpg" alt="" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_21.jpg" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_21.jpg" alt="" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_31.jpg" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_31.jpg" alt="" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_41.jpg" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_41.jpg" alt="" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_51.jpg" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_51.jpg" alt="" height="400" width="500" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;a href="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_fbconsole1.jpg" rel="no-follow" target="_blank"&gt;&lt;img src="http://www.linusky.cn/wp-content/uploads/2008/08/jnode_fbconsole1.jpg" alt="" height="375" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from http://news.chinaunix.net/a/2008/08/09/1238884.shtml&lt;/p&gt;</description><author>No.0023</author><category>java</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2370</guid><pubDate>Sun, 10 Aug 2008 08:23:25 GMT</pubDate></item><item><title>强烈推荐: &lt;&lt;梦断代码&gt;&gt;</title><link>http://n23.appspot.com/blog/post/2368</link><description>&lt;p&gt;&lt;a href="http://www.douban.com/subject/3142280/" rel="no-follow"&gt;&lt;img src="http://otho.douban.com/mpic/s3177663.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作者: &lt;a href="http://www.douban.com/book/search/%ef%bc%88%e7%be%8e%ef%bc%89%e7%bd%97%e6%a3%ae%e4%bc%af%e6%a0%bc" rel="no-follow"&gt;（美）罗森伯格&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;译者: &lt;a href="http://www.douban.com/book/search/%e9%9f%a9%e7%a3%8a" rel="no-follow"&gt;韩磊&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ISBN: 9787121066795&lt;/p&gt;
&lt;p&gt;页数: 336&lt;/p&gt;
&lt;p&gt;出版社: 电子工业出版社&lt;/p&gt;
&lt;p&gt;装帧: 平装&lt;/p&gt;
&lt;p&gt;出版年: 2008-6-1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;简介:...&lt;/p&gt;
&lt;p&gt;软件乃是人类自以为最有把握，实则最难掌控的技术。本书作者罗森伯格对OSAF主持的Chandler项目进行田野调查，跟踪经年，试图借由Chandler的开发过程揭示软件开发中的一些根本性大问题。.&lt;br /&gt; 本书是讲一事，也是讲百千事；是写一软件，也是写百千软件；是写一群人，也是写百千万人。任何一个在软件领域稍有经验的技术人员看完本书，必掩卷长叹：做软件难。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;你住在一所还算舒适的房子里，发现冰箱可能有问题。冰块有时会融化，门也关不严实。修理工差不多个把月就得过来修一次。你注意到，这冰箱既笨重又费电，你 看上了希尔斯百货公司（Sears）里面陈列的那些新款冰箱。是时候了。你立即出发，先到几个州看地块，考虑建一所新房。你请到贝聿铭和另外几位大建筑 师，做了个初步设计。做这个花了点时间，所以你还得继续忍受那台旧冰箱，它发出烦人的噪音，在夜里叫人难以成眠。你看了几套方案，甚至建造了一、两个原 型。时间流逝，你终于选定了设计方案。开始建造前，举办了一场狂欢宴。开工。建屋。庆祝继续进行，每块砖都令人激动。然后你改变了注意。你其实是想要一所 铺着红木地板、有花园的日式房屋。你改造了已建好的部分。搬开一些砖块，铺上草皮。新房看起来真不错。某天晚上，你在新屋床上躺着，没听到冰箱发出的噪 音。出问题了。安静令你无法入眠。花了太多钱！你压根就不想搬家！孩子们也不喜欢住到新房里。你女儿还说：&amp;ldquo;我恨它。&amp;rdquo;你只好改弦更张，不搬了。15年过 去了，还花了几十亿美元，那老冰箱依然运转。大抵如此。 &lt;br /&gt; &lt;br /&gt;--书中引用的一名工程师对IBM AAS项目的形容，该项目从1981年启动，在花费了几十亿美元后于1994年宣告终止，颗粒无收。&lt;/p&gt;</description><author>No.0023</author><category>dev</category><category>Reader</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2368</guid><pubDate>Sun, 10 Aug 2008 08:06:10 GMT</pubDate></item><item><title>smtpClient</title><link>http://n23.appspot.com/blog/post/2353</link><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mv sendmail smtpClient&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; add Makefile for smtpClient&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;detail: http://code.google.com/p/mylibs/source/browse/#svn/trunk/tools/smtpClient&lt;/p&gt;</description><author>No.0023</author><category>unix</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2353</guid><pubDate>Sun, 10 Aug 2008 07:46:08 GMT</pubDate></item><item><title>Google资讯发布奥运会专栏</title><link>http://n23.appspot.com/blog/post/2352</link><description>&lt;p&gt;from http://www.williamlong.info/archives/1454.html&lt;/p&gt;
&lt;p&gt;今天，Google News（Google资讯）也发布了&lt;a href="http://news.google.com/news?topic=o" rel="no-follow" target="_blank"&gt;奥运会的专栏新闻版本&lt;/a&gt;（&lt;a href="http://news.google.cn/news?topic=o" rel="no-follow" target="_blank"&gt;中文版&lt;/a&gt;），世界各地的体育爱好者可以使用各种语言阅读他们喜欢的新闻，比如赛程进度、运动员等等。&lt;/p&gt;
&lt;p&gt;这个资讯工具会自动聚合和筛选最热门和流行的奥运新闻，并向用户显示2008奥运会的头条新闻，该栏目还在网页的右侧包含了两个小工具，一个是奥运奖牌榜，一个是奥运赛程表。&lt;/p&gt;
&lt;p&gt;可惜的是，可能是由于时差的原因，奥运奖牌榜的更新似乎并不及时，实际已经决出了两枚金牌了，而Google奥运奖牌榜的金牌数量还是0。&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.williamlong.info/upload/1454_1.jpg" alt="Google资讯发布奥运会专栏" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2352</guid><pubDate>Sat, 09 Aug 2008 08:58:08 GMT</pubDate></item><item><title>谷歌2008夏季赛事主页</title><link>http://n23.appspot.com/blog/post/2366</link><description>&lt;p&gt;&lt;a href="http://www.google.cn/intl/zh-CN/landing/summergames2008/" rel="no-follow" target="_blank"&gt;谷歌2008夏季赛事主页&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2366</guid><pubDate>Sat, 09 Aug 2008 05:00:38 GMT</pubDate></item><item><title>北京奥运会的谷歌Logo</title><link>http://n23.appspot.com/blog/post/2365</link><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;a href="http://www.google.cn/search?q=2008+%e5%8c%97%e4%ba%ac%e5%a5%a5%e8%bf%90&amp;amp;hl=zh-CN" target="_blank"&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_78cf9df7d88e3a553522db7fd79965dc.GIF" title="2008 北京奥运" height="128" width="286" alt="2008 北京奥运" /&gt;&lt;/a&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;回顾一下2004年雅典奥运会的&lt;/p&gt;
&lt;br /&gt;
&lt;img src="http://www.gseeker.com/50226711/images/_logo_d28d54194f9f165621af8b54c58417b5.GIF" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_9983bdc31d19d363f43015b2143da8a0.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_90cbab614aedeefadf0ac8dcb0bd797c.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_348803dc82b9a9b3815a2d168057627c.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_4c5eae60506b56e41e1c298c2fe22672.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_63d7c2dcc2efe12c93dbf9a7dacb6b28.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_6e94c823f8024b63f8755d34beb811e1.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_c3da3acdec166ee93e76e1251c50d2c3.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_162df3a6fed438b20c09642f72436937.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_4f3ca809d513f9e70d2d42304f2660d5.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_95bc9cbf4f682148d1dc0b2b4d87e266.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_fc7e7cfbad44b7966ba33248482cbe1f.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_00a0c542455a3fd4828c2c0ff8dc387f.GIF" alt="" /&gt;&lt;br /&gt;&lt;img src="http://www.gseeker.com/50226711/images/_logo_223d9b74f8ff166394104ca2356852d6.GIF" alt="" /&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2365</guid><pubDate>Fri, 08 Aug 2008 01:20:17 GMT</pubDate></item><item><title>Google 奥运短信提醒</title><link>http://n23.appspot.com/blog/post/2348</link><description>&lt;p&gt;&lt;a href="http://www.google.com/sms/alerts" rel="no-follow" target="_blank"&gt;这里&lt;/a&gt; 看起来不错，试试吧。&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2348</guid><pubDate>Thu, 07 Aug 2008 02:32:02 GMT</pubDate></item><item><title>Fedora 代号</title><link>http://n23.appspot.com/blog/post/2346</link><description>&lt;p&gt;Fedora Core 1: Yarrow&lt;br /&gt;Fedora Core 2: Tettnang&lt;br /&gt;Fedora Core 3: Heidelberg&lt;br /&gt;Fedora Core 4: Stentz&lt;br /&gt;Fedora Core 5: Bordeaux&lt;br /&gt;Fedora Core 6: Zod&lt;br /&gt;Fedora 7: Moonshine&lt;br /&gt;Fedora 8: Werewolf&lt;br /&gt;Fedora 9: Sulphur&lt;br /&gt;Fedora 10: Cambridge&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2346</guid><pubDate>Thu, 31 Jul 2008 06:58:51 GMT</pubDate></item><item><title>开源技术选型手册（提供电子书免费下载）</title><link>http://n23.appspot.com/blog/post/2362</link><description>&lt;p&gt;本迷你书是《开源技术选型手册》（&lt;a href="http://www.china-pub.com/39918" rel="no-follow" target="_blank"&gt;互动出版网购买&lt;/a&gt;） 的精选版，包括Web框架篇、动态语言篇、Ajax开发篇、版本控制篇、项目管理篇（AOP）、面向方面编程篇和面向服务架构篇（SOA）等，作者均为 InfoQ中文站编辑。《开源技术选型手册》由博文视点出版公司出版，全书共包含20个章节，由各领域的专家撰写而成，为中高级技术人员的技术选型工作提 供必要的参考。&lt;/p&gt;
&lt;p&gt;结合本书面向中高端技术人员选型手册的定位，编委会将本书的版式进行了严格统一，在每一个篇章开始部分你会先看到一个关于该 领域技术的综述，从中可以了解到该领域的过去、现在和未来；然后在对该领域单个技术的探讨中，你会看到该技术的活跃度，了解到它在社区中是否很受欢迎，文 档是否齐全等；通过简介和上手指南，你可以简单了解到该技术是什么，主要解决什么问题，使用是否方便等；资料参考一般包括网络和图书两部分，你可以了解到 目前社区对该技术的支持；最后的社区观点是告诉你使用该技术的人对其是如何评价的，有些评论来自于社区大牛，有的来自一线开发人员，它们可以作为你技术选 型的有力参考。&lt;/p&gt;
&lt;h2&gt;免费下载，购买原版《开源技术选型手册》&lt;/h2&gt;
&lt;p&gt;如果你喜欢本书，请通过&lt;a href="http://www.china-pub.com/39918" rel="no-follow" target="_blank"&gt;购买本书原版《开源技术选型手册》&lt;/a&gt;支持作者、博文视点出版社和InfoQ中文站。 	 		&lt;a href="http://www.infoq.com/resource/minibooks/open-source-tools-choice/zh/pdf/open-source-tools-choice.pdf" rel="no-follow"&gt;免费下载这本书（PDF）&lt;/a&gt; 。&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2362</guid><pubDate>Thu, 31 Jul 2008 00:54:53 GMT</pubDate></item><item><title>GAE 升级了</title><link>http://n23.appspot.com/blog/post/2345</link><description>&lt;ul&gt;
&lt;li&gt; More apps: Want to create more than 3 applications with your App Engine account?  Now you can now create up to 10!&lt;/li&gt;
&lt;li&gt;Time windows for Dashboard graphs: Zoom in on the data in your dashboard to get a more accurate picture of whats going on. You can zoom in to see graphs for the last 24, 12, and 6 hour periods. &lt;/li&gt;
&lt;li&gt; Logs export: You can now use appcfg.py to download your application's logs in plaintext format.  Use appcfg.py --help for more information on how to download your logs. &lt;/li&gt;
&lt;li&gt; Send email as logged in user: If you're using the users API, you can now send email from the email address of the currently-logged-in user.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;看到没有？10个application了。&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>GAE</category><category>Google</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2345</guid><pubDate>Sat, 26 Jul 2008 15:26:27 GMT</pubDate></item><item><title>第28届奥运会奖牌榜</title><link>http://n23.appspot.com/blog/post/2344</link><description>&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;名次&lt;/td&gt;
&lt;td&gt;奥运届次&lt;/td&gt;
&lt;td&gt;年份&lt;/td&gt;
&lt;td&gt;举办地&lt;/td&gt;
&lt;td&gt;国家&lt;/td&gt;
&lt;td&gt;金牌&lt;/td&gt;
&lt;td&gt;银牌&lt;/td&gt;
&lt;td&gt;铜牌&lt;/td&gt;
&lt;td&gt;奖牌总数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image003.gif" alt="" /&gt; 美国&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image005.gif" alt="" /&gt; 中国&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image006.gif" alt="" /&gt; 俄罗斯&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image007.gif" alt="" /&gt; 澳大利亚&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image008.gif" alt="" /&gt; 日本&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image009.gif" alt="" /&gt; 德国&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image010.gif" alt="" /&gt; 法国&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image012.gif" alt="" /&gt; 意大利&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image013.gif" alt="" /&gt; 韩国&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image014.gif" alt="" /&gt; 英国&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image015.gif" alt="" /&gt; 古巴&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image016.gif" alt="" /&gt; 乌克兰&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image017.gif" alt="" /&gt; 匈牙利&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image018.gif" alt="" /&gt; 罗马尼亚&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image019.gif" alt="" /&gt; 希腊&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image020.gif" alt="" /&gt; 挪威&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image021.gif" alt="" /&gt; 荷兰&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image022.gif" alt="" /&gt; 巴西&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image023.gif" alt="" /&gt; 瑞典&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image024.gif" alt="" /&gt; 西班牙&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image025.gif" alt="" /&gt; 加拿大&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image026.gif" alt="" /&gt; 土耳其&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image027.gif" alt="" /&gt; 波兰&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image028.gif" alt="" /&gt; 新西兰&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image029.gif" alt="" /&gt; 泰国&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image030.gif" alt="" /&gt; 白俄罗斯&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image031.gif" alt="" /&gt; 奥地利&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image032.gif" alt="" /&gt; 埃塞俄比亚&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image033.gif" alt="" /&gt; 伊朗&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image034.gif" alt="" /&gt; 斯洛伐克&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image035.gif" alt="" /&gt; 中国台北&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image036.gif" alt="" /&gt; 格鲁吉亚&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image037.gif" alt="" /&gt; 保加利亚&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image038.gif" alt="" /&gt; 牙买加&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image039.gif" alt="" /&gt; 乌兹别克斯坦&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image040.gif" alt="" /&gt; 摩洛哥&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image041.gif" alt="" /&gt; 丹麦&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image042.gif" alt="" /&gt; 阿根廷&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image043.gif" alt="" /&gt; 智利&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image044.gif" alt="" /&gt; 哈萨克斯坦&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image045.gif" alt="" /&gt; 肯尼亚&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image046.gif" alt="" /&gt; 捷克共和国&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image047.gif" alt="" /&gt; 南非&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image048.gif" alt="" /&gt; 克罗地亚&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image049.gif" alt="" /&gt; 立陶宛&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image050.gif" alt="" /&gt; 埃及&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image051.gif" alt="" /&gt; 瑞士&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image052.gif" alt="" /&gt; 印度尼西亚&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image053.gif" alt="" /&gt; 津巴布韦&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image054.gif" alt="" /&gt; 阿塞拜疆&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image055.gif" alt="" /&gt; 比利时&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image056.gif" alt="" /&gt; 巴哈马&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image057.gif" alt="" /&gt; 以色列&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image058.gif" alt="" /&gt; 喀麦隆&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image059.gif" alt="" /&gt; 阿联酋&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image060.gif" alt="" /&gt; 爱尔兰&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image061.gif" alt="" /&gt; 多米尼加共和国&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image062.gif" alt="" /&gt; 朝鲜&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image063.gif" alt="" /&gt; 拉脱维亚&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image064.gif" alt="" /&gt; 墨西哥&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image065.gif" alt="" /&gt; 葡萄牙&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image066.gif" alt="" /&gt; 芬兰&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image067.gif" alt="" /&gt; 塞黑&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image068.gif" alt="" /&gt; 斯洛文尼亚&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image069.gif" alt="" /&gt; 爱沙尼亚&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image070.gif" alt="" /&gt; 中国香港&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image071.gif" alt="" /&gt; 印度&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;68&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image072.gif" alt="" /&gt; 巴拉圭&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image073.gif" alt="" /&gt; 尼日利亚&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image074.gif" alt="" /&gt; 委内瑞拉&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image075.gif" alt="" /&gt; 哥伦比亚&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;72&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image076.gif" alt="" /&gt; 厄立特里亚&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image077.gif" alt="" /&gt; 蒙古&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image078.gif" alt="" /&gt; 叙利亚&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;雅典&lt;/td&gt;
&lt;td&gt;&lt;img src="http://datalib.sports.qq.com/olympic_country_rank/pic/info/country/image079.gif" alt="" /&gt; 特立尼达和多巴哥&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2344</guid><pubDate>Fri, 25 Jul 2008 15:10:10 GMT</pubDate></item><item><title>sf.net解封了</title><link>http://n23.appspot.com/blog/post/2361</link><description>&lt;p&gt;真是一个好消息啊。&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2361</guid><pubDate>Fri, 25 Jul 2008 14:33:33 GMT</pubDate></item><item><title>Add Gzip OutputFilter to Tomcat and Apache</title><link>http://n23.appspot.com/blog/post/2343</link><description>&lt;p&gt;vi tomcat/server.xml&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Connector port=&amp;quot;8080&amp;quot; protocol=&amp;quot;HTTP/1.1&amp;quot;&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; connectionTimeout=&amp;quot;20000&amp;quot;&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; redirectPort=&amp;quot;8443&amp;quot;&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; compression=&amp;quot;on&amp;quot;&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; compressionMinSize=&amp;quot;2048&amp;quot;&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; noCompressionUserAgents=&amp;quot;gozilla, traviata&amp;quot;&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; compressableMimeType=&amp;quot;text/html,text/xml,text/javascript,text/css,text/plain&amp;quot;&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;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Connector port=&amp;quot;8009&amp;quot; protocol=&amp;quot;AJP/1.3&amp;quot; redirectPort=&amp;quot;8443&amp;quot;&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; compression=&amp;quot;on&amp;quot;&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; compressionMinSize=&amp;quot;2048&amp;quot;&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; noCompressionUserAgents=&amp;quot;gozilla, traviata&amp;quot;&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; compressableMimeType=&amp;quot;text/html,text/xml,text/javascript,text/css,text/plain&amp;quot;&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;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vi apache/conf/httpd.conf&lt;/p&gt;
&lt;p&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DocumentRoot &amp;quot;/www/apache/htdocs&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Location &amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetOutputFilter DEFLATE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BrowserMatch ^Mozilla/4 gzip-only-text/html&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BrowserMatch ^Mozilla/4\.0[678] no-gzip&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BrowserMatch \bMSIE !no-gzip !gzip-only-text/html&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Header append Vary User-Agent env=!dont-vary&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Location&amp;gt;&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2343</guid><pubDate>Wed, 23 Jul 2008 04:14:06 GMT</pubDate></item><item><title>穿墙术之一</title><link>http://n23.appspot.com/blog/post/2326</link><description>&lt;p&gt;www.linkiedo.com 一个免费的VPN。具体操作参考网站的帮助文件，Windows下连接www.sf.net测试成功。&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2326</guid><pubDate>Tue, 22 Jul 2008 02:43:07 GMT</pubDate></item><item><title>豆瓣小组</title><link>http://n23.appspot.com/blog/post/2324</link><description>&lt;p&gt;今天新建了几个：&lt;/p&gt;
&lt;p&gt;http://www.douban.com/group/n23/&lt;br /&gt;http://www.douban.com/group/obsd/&lt;br /&gt;http://www.douban.com/group/gtk/&lt;br /&gt;http://www.douban.com/group/glib/&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;有空的过来玩...&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2324</guid><pubDate>Sat, 19 Jul 2008 14:18:08 GMT</pubDate></item><item><title>Firefox快捷键</title><link>http://n23.appspot.com/blog/post/2341</link><description>&lt;p&gt;1. ctrl + shift + t :: 打开最后关闭的tab &lt;br /&gt; 2. ctrl + 1 ... 9 :: 切换到某个tab &lt;br /&gt; 3. ctrl + k :: 进入google搜索输入焦点 &lt;br /&gt; 4. ctrl + w :: 关闭当前tab &lt;br /&gt; 5. ctrl + t :: 打开一个新tab &lt;br /&gt; 6. ctrl + l :: 进入地址栏 &lt;br /&gt; 7. ctrl + tab / ctrl + shift + tab :: 循环进入前/后tab &lt;br /&gt; 8. ctrl + f :: 查找&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2341</guid><pubDate>Wed, 16 Jul 2008 08:42:09 GMT</pubDate></item><item><title>vim没有菜单的问题</title><link>http://n23.appspot.com/blog/post/2322</link><description>&lt;p&gt;我的fedora9里的vim不知道从什么时候没有菜单了，都是在终端上使用vi没太注意，google一下，原来可以这样：&lt;/p&gt;
&lt;p&gt;vi $HOME/.gvimrc&lt;/p&gt;
&lt;p&gt;set encoding=utf8&lt;br /&gt;set langmenu=zh_CN.UTF-8&lt;br /&gt;set imcmdline&lt;br /&gt;source $VIMRUNTIME/delmenu.vim&lt;br /&gt;source $VIMRUNTIME/menu.vim&lt;/p&gt;
&lt;p&gt;就好了，嘿嘿～～&lt;/p&gt;</description><author>No.0023</author><category>Linux</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2322</guid><pubDate>Wed, 16 Jul 2008 08:17:01 GMT</pubDate></item><item><title>My Vimrc</title><link>http://n23.appspot.com/blog/post/2278</link><description>&lt;p&gt;set dir=~/.vim/swp&lt;br /&gt;set backup&lt;br /&gt;set backupdir=~/.vim/backup/&lt;br /&gt;set backupext=.bak&lt;br /&gt;&lt;br /&gt;set autoindent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;always set autoindenting on&lt;br /&gt;set smartindent&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;set smart indent&lt;br /&gt;set smarttab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;use tabs at the start of a line, spaces elsewhere&lt;br /&gt;set expandtab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;not use tab&lt;br /&gt;set tabstop=4 softtabstop=4 shiftwidth=4&lt;br /&gt;&lt;br /&gt;set smartcase&lt;br /&gt;set ignorecase&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; easier to ignore case for searching&lt;br /&gt;set incsearch&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; do incremental searching&lt;br /&gt;set hlsearch&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; highlighting the last used search pattern. or :noh&lt;br /&gt;&amp;quot;set list&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; show chars on end of line, whitespace, etc&lt;br /&gt;&amp;quot;set nowrap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; do not wrap lines&lt;br /&gt;&lt;br /&gt;set wildmenu&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; command-line completion operates in an enhanced mode&lt;br /&gt;set history=50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; keep 50 lines of command line history&lt;br /&gt;set mouse=a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; set mouse functions&lt;br /&gt;&lt;br /&gt;&amp;quot;don't make noise&lt;br /&gt;set noerrorbells&lt;br /&gt;set novisualbell&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;filetype on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; detect the type of file&lt;br /&gt;syntax on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; syntax highlighting on&lt;br /&gt;set fileformats=unix,dos&lt;br /&gt;set textwidth=80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;set ruler&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; show current positions along the bottom&lt;br /&gt;&lt;br /&gt;set foldenable&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; turn on folding&lt;br /&gt;set foldmethod=indent &amp;quot; make folding indent sensitive&lt;br /&gt;set foldlevel=100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; don't autofold anything&lt;br /&gt;set foldopen-=search&amp;nbsp; &amp;quot; don't open folds when you search into them&lt;br /&gt;set foldopen-=undo&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; don't open folds when you undo stuff&lt;br /&gt;&lt;br /&gt;&amp;quot;set encoding=prc&lt;br /&gt;&amp;quot;set fileencoding=prc&lt;br /&gt;&amp;quot;set fileencodings=prc&lt;br /&gt;&lt;br /&gt;set encoding=utf-8&lt;br /&gt;set fileencoding=utf-8&lt;br /&gt;set fileencodings=utf-8&lt;br /&gt;&lt;br /&gt;set guifont=Consolas\ 12&lt;br /&gt;&amp;quot;set gfn=Consolas:h12 gfw=Consolas:h12&lt;br /&gt;&lt;br /&gt;&amp;quot;auto change work dir&lt;br /&gt;set autochdir&lt;br /&gt;&lt;br /&gt;let Tlist_Ctags_Cmd = '/usr/bin/ctags'&lt;br /&gt;map &amp;lt;F5&amp;gt; :VTreeExplore&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;F6&amp;gt; :TlistToggle&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;C-T&amp;gt; :tabnew&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;C-W&amp;gt; :tabclose&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;S-Left&amp;gt; :tabprev&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;S-Right&amp;gt; :tabnext&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;Left&amp;gt; :bp&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;Right&amp;gt; :bn&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;F4&amp;gt; :bd&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;C-Q&amp;gt; :bdelete&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;C-C&amp;gt; &amp;quot;+y&amp;lt;CR&amp;gt;&lt;br /&gt;map &amp;lt;C-V&amp;gt; &amp;quot;+gP&amp;lt;CR&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;quot;A collection of C extension Vim syntax. $HOME/.vim/after/syntax&lt;br /&gt;let glib_enable_deprecated = 1&lt;br /&gt;let glib_deprecated_errors = 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;au BufEnter * if &amp;amp;textwidth &amp;gt; 0 | exec 'match Todo /\%&amp;gt;' . &amp;amp;textwidth . 'v.\+/' | endif&lt;br /&gt;au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set shiftwidth=4&lt;br /&gt;au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set softtabstop=4&lt;br /&gt;au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set tabstop=4&lt;br /&gt;au BufRead,BufNewFile *.py,*.pyw set expandtab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; not use tab&lt;br /&gt;au BufRead,BufNewFile *.c,*.h set noexpandtab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; use tab&lt;br /&gt;au BufRead,BufNewFile Makefile* set noexpandtab&lt;br /&gt;highlight BadWhitespace ctermbg=red guibg=red&lt;br /&gt;au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^\t\+/&lt;br /&gt;au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set textwidth=79&lt;br /&gt;au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;autocmd bufnewfile *.py call setline(1,'#! /usr/bin/env python') |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ call setline(2,'# -*- coding: utf-8 -*-') |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ call setline(3,'') |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ call setline(4, strftime(&amp;quot;# Create Date: %F %T&amp;quot;)) |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ call setline(5,'# Author: N23 &amp;lt;No.0023@gmail.com&amp;gt;') |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ call setline(6,'# Blog: http://n23.appspot.com/blog') |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ call setline(7,'') |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ call setline(8,'') |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ exe &amp;quot;normal G&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;quot;Python iMaps&lt;br /&gt;au FileType python inoremap &amp;lt;buffer&amp;gt; $r return&lt;br /&gt;au FileType python inoremap &amp;lt;buffer&amp;gt; $s self&lt;br /&gt;au FileType python inoremap &amp;lt;buffer&amp;gt; $c ##&amp;lt;cr&amp;gt;#&amp;lt;space&amp;gt;&amp;lt;cr&amp;gt;#&amp;lt;esc&amp;gt;kla&lt;br /&gt;au FileType python inoremap &amp;lt;buffer&amp;gt; $f from&lt;br /&gt;au FileType python inoremap &amp;lt;buffer&amp;gt; $i import&lt;br /&gt;au FileType python inoremap &amp;lt;buffer&amp;gt; $p print&lt;br /&gt;au FileType python inoremap &amp;lt;buffer&amp;gt; $d &amp;quot;&amp;quot;&amp;quot;&amp;lt;cr&amp;gt;&amp;quot;&amp;quot;&amp;quot;&amp;lt;esc&amp;gt;O&lt;br /&gt;&lt;br /&gt;&amp;quot;Java iMaps&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $pr private&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $r return&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $pu public&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $i import&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $b boolean&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $v void&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $s String&lt;br /&gt;autocmd FileType java inoremap &amp;lt;buffer&amp;gt; $e Exception&lt;br /&gt;&lt;br /&gt;augroup python_prog&lt;br /&gt;&amp;nbsp; au!&lt;br /&gt;&amp;nbsp; fun! Python_fold()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax clear pythonStatement'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax keyword pythonStatement break continue del'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax keyword pythonStatement except exec finally'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax keyword pythonStatement pass print raise'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax keyword pythonStatement return try'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax keyword pythonStatement global assert'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax keyword pythonStatement lambda yield'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax match pythonStatement /\&amp;lt;def\&amp;gt;/ nextgroup=pythonFunction skipwhite'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax match pythonStatement /\&amp;lt;class\&amp;gt;/ nextgroup=pythonFunction skipwhite'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax region pythonFold start=&amp;quot;^\z(\s*\)\%(.*:\s*\%(#.*$\)\?\)&amp;quot; end=&amp;quot;^\%(\n*\z1\s\)\@!&amp;quot; transparent fold'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; execute 'syntax sync minlines=2000 maxlines=4000'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set autoindent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set foldmethod=syntax&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; set foldopen=all foldclose=all&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set foldtext=substitute(getline(v:foldstart),'\\t','\ \ \ \ ','g').'\ \ ('.(v:foldend-v:foldstart+1).'\ lines)'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set fillchars=vert:\|,fold:\&lt;br /&gt;&amp;nbsp; endfun&lt;br /&gt;&amp;nbsp; autocmd FileType python call Python_fold()&lt;br /&gt;augroup END&lt;br /&gt;&lt;br /&gt;&amp;quot;Make dir $HOME/.vim/after/syntax&lt;br /&gt;&amp;quot;untar this file to $HOME/.vim/after/syntax&lt;br /&gt;&amp;quot;If you don't have $HOME/.vim/after/syntax/c.vim,&lt;br /&gt;&amp;quot;then copy c.vim.example to $HOME/.vim/after/syntax/c.vim&lt;br /&gt;&lt;br /&gt;&amp;quot;see :h mysyntaxfile-add&lt;br /&gt;&lt;br /&gt;&amp;quot;set csprg=/usr/local/bin/cscope&lt;br /&gt;&amp;quot;set csto=1&lt;br /&gt;&amp;quot;set nocsverb&lt;br /&gt;&amp;quot;set cst&lt;br /&gt;&amp;quot;cs add ~/.cscope/cscope.out&lt;br /&gt;&amp;quot; ctrl + ]&lt;br /&gt;&amp;quot; ctrl + t / ctrl + o&lt;br /&gt;&amp;quot; cs find&lt;br /&gt;&amp;quot; help cscope&lt;br /&gt;&lt;br /&gt;&amp;quot;this script use to excute make in vim and open quickfix window&lt;br /&gt;&amp;quot;map &amp;lt;C-M&amp;gt; :call Do_make()&amp;lt;CR&amp;gt;&amp;lt;CR&amp;gt;&amp;lt;CR&amp;gt;&lt;br /&gt;&amp;quot;nmap B :call Do_make()&amp;lt;cr&amp;gt;&amp;lt;cr&amp;gt;&amp;lt;cr&amp;gt;&lt;br /&gt;&amp;quot;nmap C :cclose&amp;lt;cr&amp;gt;&lt;br /&gt;&amp;quot;function Do_make()&lt;br /&gt;&amp;quot;&amp;nbsp; let filename = bufname(&amp;quot;%&amp;quot;)&lt;br /&gt;&amp;quot;&amp;nbsp; let suffix_pos = stridx(filename, &amp;quot;.c&amp;quot;)&lt;br /&gt;&amp;quot;&amp;nbsp; if suffix_pos == -1&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; return&lt;br /&gt;&amp;quot;&amp;nbsp; else&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; let target = strpart(filename,0,suffix_pos)&lt;br /&gt;&amp;quot;&amp;nbsp; endif&lt;br /&gt;&amp;quot;&amp;nbsp; let target = &amp;quot;make &amp;quot; . target&lt;br /&gt;&amp;quot;&amp;nbsp; execute target&lt;br /&gt;&amp;quot;&amp;nbsp; execute &amp;quot;copen&amp;quot;&lt;br /&gt;&amp;quot;endfunction&lt;br /&gt;&lt;br /&gt;&amp;quot;mkdir -p ~/.vim/templates&lt;br /&gt;&amp;quot;let g:template_load = 1&lt;br /&gt;&amp;quot;let g:template_tags_replacing = 1&lt;br /&gt;&amp;quot;let g:T_AUTHOR = &amp;quot;N23&amp;quot;&lt;br /&gt;&amp;quot;let g:T_AUTHOR_EMAIL = &amp;quot;No.0023@gmail.com&amp;quot;&lt;br /&gt;&amp;quot;let g:T_AUTHOR_WEBSITE = &amp;quot;http://blog.chinaunix.net/u1/42287/&amp;quot;&lt;br /&gt;&amp;quot;let g:T_DATE_FORMAT = &amp;quot;%F %T&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;quot;change work folder&lt;br /&gt;&amp;quot;cd ~/tmp&lt;br /&gt;&lt;br /&gt;&amp;quot;runtime! ftplugin/man.vim&lt;br /&gt;&amp;quot;use :Man&lt;br /&gt;&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp; vim *.c&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp; :argdo %s/oldvalue/newvalue/g&lt;br /&gt;&amp;quot;&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp; %&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp; =%&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp; gg, G&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp; [[, ]]&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp; :reg&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;a5yy&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;ap&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;A5yy&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; his c&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; his s&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :1,5 co 10&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :scriptnames&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :digraphs&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ga&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; hex&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :set noma&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; non modifiable&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :set ro&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; read only&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #session&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vim file1.c file2.c&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :mksession&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :q&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vim -S Session.vim&lt;br /&gt;&amp;quot;&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map : all&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nmap: normal map&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vmap: visual map&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imap: insert map&lt;br /&gt;&amp;quot;&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b:name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; buffer&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w:name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; window&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g:name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; global&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v:name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; vim&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a:name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; function param&lt;br /&gt;&amp;quot;&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :set all&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :list&lt;br /&gt;&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :augroup&lt;/p&gt;</description><author>No.0023</author><category>unix</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2278</guid><pubDate>Fri, 11 Jul 2008 15:36:53 GMT</pubDate></item><item><title>Porting legacy databases to Google App Engine</title><link>http://n23.appspot.com/blog/post/2133</link><description>&lt;p&gt;&lt;a href="http://thomas.broxrost.com/2008/06/15/porting-legacy-databases-to-google-app-engine/" rel="no-follow" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>GAE</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2133</guid><pubDate>Fri, 11 Jul 2008 01:53:47 GMT</pubDate></item><item><title>send mail command</title><link>http://n23.appspot.com/blog/post/2062</link><description>&lt;p&gt;/*&lt;br /&gt;&amp;nbsp;* Copyright 2008 N23 &amp;lt;No.0023@gmail.com&amp;gt;&lt;br /&gt;&amp;nbsp;* All rights reserved.&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;* Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;&amp;nbsp;* you may not use this file except in compliance with the License.&lt;br /&gt;&amp;nbsp;* You may obtain a copy of the License at&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;* Unless required by applicable law or agreed to in writing, software&lt;br /&gt;&amp;nbsp;* distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;&amp;nbsp;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;&amp;nbsp;* See the License for the specific language governing permissions and&lt;br /&gt;&amp;nbsp;* limitations under the License.&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;* Author:&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp; N23 &amp;lt;No.0023@gmail.com&amp;gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp; Blog: http://n23.appspot.com/blog/&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;* compile: cc -Wall -W $(pkg-config --cflags --libs glib-2.0) -o $HOME/bin/run&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;* vi $HOME/.LoginAccount.txt&lt;br /&gt;&amp;nbsp;* [mail]&lt;br /&gt;&amp;nbsp;* host = smtp.qq.com&lt;br /&gt;&amp;nbsp;* port = 25&lt;br /&gt;&amp;nbsp;* user = ***&lt;br /&gt;&amp;nbsp;* pass = ***&lt;br /&gt;&amp;nbsp;* fr = No.0023@qq.com&lt;br /&gt;&amp;nbsp;* to = No.0023@gmail.com&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;* $Id: mail.c 51 2008-07-16 15:03:37Z No.0023 $&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;#include &amp;lt;glib.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;netdb.h&amp;gt;&lt;br /&gt;#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;&lt;br /&gt;static const char *config_filename = &amp;quot;.LoginAccount.txt&amp;quot;;&lt;br /&gt;static const char *config_label = &amp;quot;mail&amp;quot;;&lt;br /&gt;static const char *end_flag = &amp;quot;\r\n&amp;quot;;&lt;br /&gt;static const char *email_flag = &amp;quot;===== Baby, I love you. ^-^ =====&amp;quot;;&lt;br /&gt;&lt;br /&gt;const char *log_time();&lt;br /&gt;int sendCmd(const int, const char*);&lt;br /&gt;int fetchCmd(const int, const char *);&lt;br /&gt;int conn(const char *, const int *);&lt;br /&gt;int login(const int, const char *, const char *, const char *);&lt;br /&gt;int sendmail_head (const int, const char *, const char *, const char *);&lt;br /&gt;void sendmail_file(const int, const char *);&lt;br /&gt;int sendmail_tail(const int);&lt;br /&gt;const char *get_sub_string(const char *, const gsize, const gsize);&lt;br /&gt;const void split_base64(const int, const char *, const gsize);&lt;br /&gt;void sendmail_data(const int, const char *);&lt;br /&gt;&lt;br /&gt;static void error_func(GOptionContext *context,&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; GOptionGroup *group,&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; gpointer data,&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; GError **error) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (*error &amp;amp;&amp;amp; (*error)-&amp;gt;message) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *progname = g_get_prgname();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_print(&amp;quot;%s: %s\nTry '%s --help' for more information.\n&amp;quot;,&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; progname,&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; (*error)-&amp;gt;message,&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; progname);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;main (int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GKeyFile *config;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *path = g_build_filename(g_get_home_dir(), config_filename, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; config = g_key_file_new();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_key_file_load_from_file(config, path, 0, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *host = g_key_file_get_string(config, config_label, &amp;quot;host&amp;quot;, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gint&amp;nbsp;&amp;nbsp; port = g_key_file_get_integer(config, config_label, &amp;quot;port&amp;quot;, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *user = g_key_file_get_string(config, config_label, &amp;quot;user&amp;quot;, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *pass = g_key_file_get_string(config, config_label, &amp;quot;pass&amp;quot;, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *fr = g_key_file_get_string(config, config_label, &amp;quot;fr&amp;quot;, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *to = g_key_file_get_string(config, config_label, &amp;quot;to&amp;quot;, NULL);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *addr = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gboolean&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag = FALSE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GOptionEntry&amp;nbsp;&amp;nbsp;&amp;nbsp; entries[] =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;quot;addr&amp;quot;, 'e', 0, G_OPTION_ARG_FILENAME, &amp;amp;addr,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;mail address&amp;quot;, &amp;quot;ADDR&amp;quot;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;quot;atta&amp;quot;, 'a', 0, G_OPTION_ARG_NONE, &amp;amp;flag,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;attachment flag&amp;quot;, NULL },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {NULL}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GOptionContext *context;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GError&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *error = NULL;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; context = g_option_context_new(&amp;quot;[args]&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_option_context_add_main_entries(context, entries, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_option_context_set_help_enabled(context, TRUE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_option_group_set_error_hook(g_option_context_get_main_group(context),&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; (GOptionErrorFunc)error_func);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_option_context_parse(context, &amp;amp;argc, &amp;amp;argv, &amp;amp;error);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (error) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror(error-&amp;gt;message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return error-&amp;gt;code;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_option_context_free(context);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc == 1) g_error(&amp;quot;No file to Send&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gint fd = conn(host, port);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (addr) g_stpcpy(to, addr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((login(fd, host, user, pass)) == -1) g_error(&amp;quot;Login failed&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (argv++; *argv != NULL; argv++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sendmail_head(fd, fr, to, *argv) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_error(&amp;quot;Sendmail header failed&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (flag) sendmail_atta(fd, *argv);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else sendmail_file(fd, *argv);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sendmail_tail(fd) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_error(&amp;quot;Sendmail header failed&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; close(fd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;sendCmd(const int fd, const char* s)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_printf(&amp;quot;%s%s%s%s%s&amp;quot;,&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;quot;Send: [&amp;quot;,&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; log_time(),&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;quot;] &amp;quot;,&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;quot;CMD=&amp;quot;,&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);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((bytes = send(fd, s, strlen(s), 0)) == -1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror(&amp;quot;send error&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return bytes;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;fetchCmd(const int fd, const char *cmd)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buff[1024];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *tmp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((bytes = recv(fd, buff, 1024, 0)) == -1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror(&amp;quot;recv error&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; buff[bytes] = '\0';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_printf(&amp;quot;%s%s%s%s%s&amp;quot;,&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;quot;Recv: [&amp;quot;,&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; log_time(),&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;quot;] &amp;quot;,&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;quot;Result=&amp;quot;,&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; buff);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = g_strndup(buff, 3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(tmp, cmd) != 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;const char *log_time()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ct;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; time_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = time(NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ct = ctime(&amp;amp;t);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(strchr(ct, '\n')) = '\0';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ct;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;conn(const char *host, const int *port)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sockfd;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct sockaddr_in server_addr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct hostent *server_ip;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((server_ip = gethostbyname(host)) == NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; herror(&amp;quot;gethostbyname error&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sleep(30);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror(&amp;quot;socket error&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server_addr.sin_family = AF_INET;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server_addr.sin_port = htons(port);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server_addr.sin_addr = *((struct in_addr *) server_ip-&amp;gt;h_addr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bzero(&amp;amp;(server_addr.sin_zero), 8);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (connect(sockfd, (struct sockaddr *)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; server_addr, sizeof(struct sockaddr)) == -1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror(&amp;quot;connect error&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(sockfd, &amp;quot;220&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sockfd;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;login(const int fd, const char *host, const char *user, const char *pass)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GString *s = g_string_new(&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;EHLO &amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, host);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;250&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;AUTH LOGIN&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;334&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s,&amp;nbsp; g_base64_encode(user, strlen(user)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;334&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s,&amp;nbsp; g_base64_encode(pass, strlen(pass)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;235&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_free(s, TRUE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int sendmail_head (const int fd,&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; const char *fr,&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; const char *to,&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; const char *subject)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GString *s = g_string_new(&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;MAIL FROM:&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;&amp;lt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, fr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;250&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;RCPT TO:&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;&amp;lt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, to);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;250&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;DATA&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;354&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;From:&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, fr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;To:&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, to);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Subject:&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, subject);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Mime-Version: 1.0&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Content-Type: multipart/mixed;Boundary=\&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, email_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_free(s, TRUE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;sendmail_file(const int fd, const char *file)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GString *s = g_string_new(&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;--&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, email_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Content-Type: text/plain; charset=\&amp;quot;utf-8\&amp;quot;;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Content-Transfer-Encoding: base64&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_free(s, TRUE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendmail_data(fd, file);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;sendmail_atta(const int fd, const char *file)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GString *s = g_string_new(&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;--&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, email_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Content-Type:application/octet-stream;name=\&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, file);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Content-Transfer-Encoding: base64&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;Content-Disposition:attachment;filename=\&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, file);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_free(s, TRUE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendmail_data(fd, file);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int sendmail_tail(const int fd)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GString *s = g_string_new(&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;--&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, email_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;--&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;.&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fetchCmd(fd, &amp;quot;250&amp;quot;) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_free(s, TRUE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;const char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;br /&gt;get_sub_string(const char *str, const gsize start, const gsize end)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gsize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n = end - start;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stbuf[256];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (start &amp;gt;= strlen(str)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strncpy(stbuf, str + start, n);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stbuf[n] = '\0';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return stbuf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;const void&lt;br /&gt;split_base64(const int fd, const char *text, const gsize len)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *code = g_base64_encode(text, len);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GString *s = g_string_new(&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gsize l = strlen(code);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; guint start = 0, end = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_printf(&amp;quot;split_base64 ...start\n&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(end = 78; start &amp;lt; l; start +=78, end += 78) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, get_sub_string(code, start, end));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, &amp;quot;\n&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((bytes = send(fd, s-&amp;gt;str, s-&amp;gt;len, 0)) == -1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_error(&amp;quot;send error in split_base64&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_printf(&amp;quot;split_base64 ...done\n&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_free(code);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_free(s, TRUE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void sendmail_data(const int fd, const char *file)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GString *s = g_string_new(&amp;quot;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gchar *text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GError *err = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gsize len;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (g_file_get_contents(file, &amp;amp;text, &amp;amp;len, &amp;amp;err))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; split_base64(fd, text, len);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_erase(s, 0, -1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_append(s, end_flag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendCmd(fd, s-&amp;gt;str);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_free(text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_string_free(s, TRUE);&lt;br /&gt;}&lt;/p&gt;</description><author>No.0023</author><category>unix</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2062</guid><pubDate>Thu, 10 Jul 2008 18:09:13 GMT</pubDate></item><item><title>JavaScript 解析日期字符串</title><link>http://n23.appspot.com/blog/post/2016</link><description>&lt;p&gt;function parseDate(str){&lt;br /&gt;&amp;nbsp; if(typeof str == 'string'){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) *$/);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(results &amp;amp;&amp;amp; results.length&amp;gt;3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new Date(results[1],results[2] -1,results[3]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(results &amp;amp;&amp;amp; results.length&amp;gt;6)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new Date(results[1],results[2] -1,results[3],results[4],results[5],results[6]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(results &amp;amp;&amp;amp; results.length&amp;gt;7)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new Date(results[1],results[2] -1,results[3],results[4],results[5],results[6],results[7]);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; return null;&lt;br /&gt;}&lt;/p&gt;</description><author>No.0023</author><category>javascript</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2016</guid><pubDate>Thu, 10 Jul 2008 16:56:45 GMT</pubDate></item><item><title>JavaScript 计算两个时期之间的天数</title><link>http://n23.appspot.com/blog/post/2028</link><description>&lt;p&gt;//+---------------------------------------------------&lt;br /&gt;//| format: YYYY-MM-dd&lt;br /&gt;//+---------------------------------------------------&lt;br /&gt;function daysBetween(DateOne,DateTwo)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)-Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Math.abs(cha);&lt;br /&gt;}&lt;/p&gt;</description><author>No.0023</author><category>javascript</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2028</guid><pubDate>Thu, 10 Jul 2008 16:54:24 GMT</pubDate></item><item><title>GAE 控制台</title><link>http://n23.appspot.com/blog/post/2024</link><description>&lt;p&gt;vi app.yaml&lt;/p&gt;
&lt;p&gt;- url: /_admin/.*&lt;br /&gt;&amp;nbsp; script: $PYTHON_LIB/google/appengine/ext/admin&lt;br /&gt;&amp;nbsp; login: admin&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>GAE</category><category>Google</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/2024</guid><pubDate>Thu, 10 Jul 2008 16:50:16 GMT</pubDate></item><item><title>IE6浏览这个博客终于正常了</title><link>http://n23.appspot.com/blog/post/1860</link><description>&lt;p&gt;div的不兼容，真讨厌啊，现在除了菜单还点问题，其他的...&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/1860</guid><pubDate>Thu, 10 Jul 2008 11:39:11 GMT</pubDate></item><item><title>真实</title><link>http://n23.appspot.com/blog/post/1541</link><description>&lt;p&gt;晴天，有雨&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;镜头是会骗人的，看起来好美好的事情，当你真正亲眼看到的时候，并不是那么美好的。&lt;/p&gt;
&lt;p&gt;故事都是充满误会，大千的世界到处都是诱惑，&lt;/p&gt;
&lt;p&gt;这个地方太复杂。&lt;/p&gt;</description><author>No.0023</author><category>journal</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/1541</guid><pubDate>Wed, 09 Jul 2008 14:38:59 GMT</pubDate></item><item><title>GAE的db.Model</title><link>http://n23.appspot.com/blog/post/1444</link><description>&lt;p&gt;难道只能有一千条记录？我的博客有一个叫做AccessLogger，想记录一下谁浏览过了，可是到了1000条以后，就不会记录了。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>GAE</category><category>Google</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/1444</guid><pubDate>Wed, 09 Jul 2008 07:04:02 GMT</pubDate></item><item><title>飞雪连天射白鹿，笑书神侠倚碧鸳</title><link>http://n23.appspot.com/blog/post/1085</link><description>&lt;p&gt;这是谁写的？&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/1085</guid><pubDate>Mon, 07 Jul 2008 09:45:10 GMT</pubDate></item><item><title>Java 多线程与并发编程专题</title><link>http://n23.appspot.com/blog/post/1074</link><description>&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/cn/java/j-concurrent/" rel="no-follow" target="_blank"&gt;这里&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>java</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/1074</guid><pubDate>Mon, 07 Jul 2008 09:17:10 GMT</pubDate></item><item><title>Tim 的剖析系列文章</title><link>http://n23.appspot.com/blog/post/1069</link><description>&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/theme/kernel/timseries.html" rel="no-follow" target="_self"&gt;这里&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>dev</category><category>Linux</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/1069</guid><pubDate>Mon, 07 Jul 2008 09:16:09 GMT</pubDate></item><item><title>SiteMap</title><link>http://n23.appspot.com/blog/post/856</link><description>&lt;p&gt;http://www.xml-sitemaps.com&lt;br /&gt;http://www.sitemapbuilder.net&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>dev</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/856</guid><pubDate>Sat, 05 Jul 2008 09:47:32 GMT</pubDate></item><item><title>分页器已经完成了</title><link>http://n23.appspot.com/blog/post/744</link><description>&lt;p&gt;还不错。&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>TODO</category><category>dev</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/744</guid><pubDate>Sat, 05 Jul 2008 04:09:27 GMT</pubDate></item><item><title>Google2008开发者大会资料集锦</title><link>http://n23.appspot.com/blog/post/608</link><description>&lt;p&gt;&lt;a href="http://sites.google.com/site/developerdaychina/" rel="no-follow" target="_blank"&gt;这里&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Google</category><category>dev</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/608</guid><pubDate>Fri, 04 Jul 2008 09:06:52 GMT</pubDate></item><item><title>我的sidebar代码</title><link>http://n23.appspot.com/blog/post/514</link><description>&lt;p&gt;&amp;lt;h2&amp;gt;Search&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;lt;!-- Search Google --&amp;gt;&lt;br /&gt;&amp;lt;center&amp;gt;&lt;br /&gt;&amp;lt;form method=&amp;quot;get&amp;quot; action=&amp;quot;http://www.google.cn/custom&amp;quot; target=&amp;quot;google_window&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;table bgcolor=&amp;quot;#ffffff&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td nowrap=&amp;quot;nowrap&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; height=&amp;quot;32&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;http://www.google.com/&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;img src=&amp;quot;http://www.google.com/logos/Logo_25wht.gif&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;Google&amp;quot; align=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;label for=&amp;quot;sbi&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;输入您的搜索字词&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;q&amp;quot; size=&amp;quot;8&amp;quot; maxlength=&amp;quot;255&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;sbi&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;label for=&amp;quot;sbb&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;提交搜索表单&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;sa&amp;quot; value=&amp;quot;搜索&amp;quot; id=&amp;quot;sbb&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;client&amp;quot; value=&amp;quot;pub-9368669963238958&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;forid&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;channel&amp;quot; value=&amp;quot;4224138149&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;ie&amp;quot; value=&amp;quot;GB2312&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;oe&amp;quot; value=&amp;quot;GB2312&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;safe&amp;quot; value=&amp;quot;active&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;cof&amp;quot; value=&amp;quot;GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;&lt;/p&gt;
&lt;p&gt;LBGC:215670;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;LH:45;LW:126;L:&lt;/p&gt;
&lt;p&gt;http://n23.appspot.com/themes/default/images/logo.gif;S:http://;FORID:1&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;hl&amp;quot; value=&amp;quot;zh-CN&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/center&amp;gt;&lt;br /&gt;&amp;lt;!-- Search Google --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h2&amp;gt;About Me&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;img src=&amp;quot;/static/images/logo/user.jpg&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pre style=&amp;quot;line-height: 150%; margin: 5px; &amp;quot; width=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;OS: OpenBSD, Fedroa&lt;br /&gt;Desktop: Gnome, Fluxbox&lt;br /&gt;Terminal: GnomeTerminal,Qterm&lt;br /&gt;Browser: Firefox, Opera&lt;br /&gt;Mail Client: Mutt, Gmail&lt;br /&gt;Editor: Vi, Gedit, Eclipse&lt;br /&gt;Dev: C, Python, Java, 4gl, Abap&lt;br /&gt;&lt;br /&gt;Email: No.0023@gmail.com&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/pre&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;{{ W.Tags }}&lt;br /&gt;{{ W.RecentPosts }}&lt;br /&gt;{{ W.RecentComments }}&lt;br /&gt;{{ W.Blogroll }}&lt;br /&gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h2&amp;gt;订阅博客&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://n23.appspot.com/blog/feed&amp;quot;&amp;gt;&amp;lt;img border=&amp;quot;0&amp;quot; alt=&amp;quot;订阅我的博客&amp;quot; src=&amp;quot;/static/images/logo/sub_rss.gif&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;nofollow&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://www.google.com/reader/view/feed/http://n23.appspot.com/blog/feed&amp;quot;&amp;gt;&amp;lt;img border=&amp;quot;0&amp;quot; alt=&amp;quot;通过Google订阅&amp;quot; src=&amp;quot;/static/images/logo/sub_google.gif&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;nofollow&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://add.my.yahoo.com/rss?url=http://n23.appspot.com/blog/feed&amp;quot;&amp;gt;&amp;lt;img border=&amp;quot;0&amp;quot; alt=&amp;quot;通过My yahoo订阅&amp;quot; src=&amp;quot;/static/images/logo/sub_yahoo.gif&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;nofollow&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://www.xianguo.com/subscribe.php?url=http://n23.appspot.com/blog/feed&amp;quot;&amp;gt;&amp;lt;img border=&amp;quot;0&amp;quot; alt=&amp;quot;通过鲜果订阅&amp;quot; src=&amp;quot;/static/images/logo/sub_xianguo.gif&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a rel=&amp;quot;nofollow&amp;quot; target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://www.zhuaxia.com/add_channel.php?url=http://n23.appspot.com/blog/feed&amp;quot;&amp;gt;&amp;lt;img border=&amp;quot;0&amp;quot; alt=&amp;quot;通过抓虾订阅&amp;quot; src=&amp;quot;/static/images/logo/sub_zhuaxia.gif&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;{{ W.BlogLogger}}&lt;br /&gt;&lt;br /&gt;&amp;lt;h2&amp;gt;Ads&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;google_ad_client = &amp;quot;pub-9368669963238958&amp;quot;;&lt;br /&gt;/* 200x200, 创建于 08-7-4 */&lt;br /&gt;google_ad_slot = &amp;quot;3861066075&amp;quot;;&lt;br /&gt;google_ad_width = 200;&lt;br /&gt;google_ad_height = 200;&lt;br /&gt;//--&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;src=&amp;quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/514</guid><pubDate>Fri, 04 Jul 2008 08:16:21 GMT</pubDate></item><item><title>Ads</title><link>http://n23.appspot.com/blog/post/458</link><description>&lt;p&gt;放了二个广告,哈哈～～&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/458</guid><pubDate>Fri, 04 Jul 2008 07:45:14 GMT</pubDate></item><item><title>统计信息</title><link>http://n23.appspot.com/blog/post/407</link><description>&lt;p&gt;completed.&lt;/p&gt;</description><author>No.0023</author><category>TODO</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/407</guid><pubDate>Fri, 04 Jul 2008 06:48:51 GMT</pubDate></item><item><title>add cache.py</title><link>http://n23.appspot.com/blog/post/247</link><description>&lt;p&gt;现在静态的图片，主题文件都有cache了。&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/247</guid><pubDate>Thu, 03 Jul 2008 09:45:57 GMT</pubDate></item><item><title>2008-07-02</title><link>http://n23.appspot.com/blog/post/135</link><description>&lt;p&gt;把一些文章从CU转了过来...&lt;/p&gt;</description><author>No.0023</author><category>journal</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/135</guid><pubDate>Wed, 02 Jul 2008 09:13:36 GMT</pubDate></item><item><title>老婆永远是对的</title><link>http://n23.appspot.com/blog/post/134</link><description>&lt;p&gt;1.老婆永远是对的.&lt;/p&gt;
&lt;p&gt;2.如果老婆错了，一定是我看错了.&lt;/p&gt;
&lt;p&gt;3.如果我没有看错，一定是我的想法错了&lt;/p&gt;
&lt;p&gt;4.如果我没有想错，只要老婆不认，老婆就没错.&lt;/p&gt;
&lt;p&gt;5.如果老婆不认错，我还说老婆错，那就是我的错.&lt;/p&gt;
&lt;p&gt;6.如果老婆认错了参考第一条，谢谢大家！！！&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt; ※ 来源:水木社区 newsmth.net&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/134</guid><pubDate>Wed, 02 Jul 2008 09:10:28 GMT</pubDate></item><item><title>HTTP协议精解</title><link>http://n23.appspot.com/blog/post/132</link><description>&lt;p&gt;WEB服务器和浏览器之间的一问一答的交互过程也得遵循一定的规则，这个规则就是HTTP协议。它是TCP/IP协议集中的一个应用层协议，用于定义浏览器和WEB服务器之间交换数据过程以及数据本身的格式。现在被广泛使用的HTTP/1.1相对HTTP/1.0而言，最大的特点就是支持持续连接。&lt;/p&gt;
&lt;p&gt;1.HTTP/1.0的会话方式：&amp;lt; /p&amp;gt;&lt;/p&gt;
&lt;p&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;lt;--------------------------------------------------------------------------&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 关闭连接，回送响应消息&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;每次连接只处理一个请求，即使是对同一个网站的每一个页面的访问，浏览器和WEB服务器都要建立一次单独的连接。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2.HTTP/1.1的会话方式：&amp;lt; /p&amp;gt;&lt;/p&gt;
&lt;p&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 建立连接，第1个请求信息&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;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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 发送第N请求信息&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;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; 回送第1次响应&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;lt;--------------------------------------------------------------------------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 回应第n次响应&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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;--------------------------------------------------------------------------&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 关闭连接&amp;nbsp;&amp;nbsp;&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;lt;--------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HTTP /1.1支持持久连接，在一个TCP连接上可以传送多个HTTP请求和响应，减少了建立和关闭连接的消耗和延迟。一个包含有许多图象的网页文件的多个请求和响应可以在一个连接中传输，但每个单独的网页文件的请求和响应仍然需要使用各自的连接，还允许客户端不用等待上一次请求结果返回就可以发送下一个请求。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HTTP消息的格式：&lt;br /&gt; 一个完整的请求消息包括：一个请求行、若干消息头、以及实体内容。&lt;br /&gt; 一个完整的响应消息包括：一个状态行、若干消息头、以及实体内容。&lt;br /&gt; 这在前面已经有过简单的介绍。下面对这几个部分再做个详细的解说：&lt;br /&gt; 1.请求行：包括三个部分，即请求方式、资源路径、以及使用的HTTP协议版本。语法如下：请求方式 资源路径 HTTP版本号&amp;lt;CRLF&amp;gt;,其中&amp;lt;CRLF&amp;gt;表示回车和换行这两个字符的组合。HTTP请求方式包括POST、GET、 HEAD、OPTIONS、DELETE、TRACE和PUT几种。常用的是前两种。&lt;br /&gt; 2.状态行：包括HTTP协议的版本号、一个状态码、以及对状态码进行描述的文本信息。&lt;br /&gt; 语法如下：HTTP版本号 状态码原因叙述&amp;lt;CRLF&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;使用GET和POST传递参数：&lt;br /&gt; 在URL地址后面可以附加一些参数，每个参数都由参数名和参数值组成，中间用＝分隔，各个参数用&amp;amp;分隔，URL地址和整个参数之间用？分隔，如下所示：&lt;br /&gt; &lt;a href="http://www.it315.org/servlet/ParamsServlet?param1=aaa&amp;amp;amp" rel="no-follow;param2=bbb"&gt;http://www.it315.org/servlet/ParamsServlet?param1=aaa&amp;amp;param2=bbb&lt;/a&gt;&lt;br /&gt; 使用GET传递参数的数据量是有限的，一般限制在1KB以下。使用POST比GET要大的多。是没有限制的。但是必须设置Content=Type消息头为&amp;amp;lsquo;application/x-www-form-urlencoded&amp;amp;rsquo;和设置Content-Length消息头为实体内容的长度。&amp;lt; /p&amp;gt;&lt;/p&gt;
&lt;p&gt;响应状态码：&lt;br /&gt; 200：表示一切正常，返回的是正常请求结果。&lt;br /&gt; 404：表示服务器上不存在客户机上所请求的资源，这个状态码在浏览网页时最常见的。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;通用信息头：&lt;br /&gt; Cache-Control：此字段用于通知客户机和服务器之间的代理服务器如何使用已缓存的页面。&lt;br /&gt; Connection：用于指定处理完本次请求/响应后，客户端和服务器是否还要继续保持连接。&lt;br /&gt; Date：用于表示HTTP消息产生的当前时间。&lt;br /&gt; Transfer-Encoding：用于指定实体内容的传输编码方式。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;请求头：&lt;br /&gt; Accept：用于指定客户端程序能够处理的MIME类型。有多个时用逗号隔开。&lt;br /&gt; Accept-Charset：指出客户端程序可以使用的字符集。有多个时用逗号隔开。&lt;br /&gt; Accept-Encoding：指定客户机能够进行解码的数据编码方式。有多个时用逗号隔开。&lt;br /&gt; Accept-Language：指定客户机期望服务器返回哪个国家语言的文档。有多个时用逗号隔开。&lt;br /&gt; Host：指定资源所在的主机名和端口号。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;响应头：&lt;br /&gt; Accept-Range：用于说明当前WEB服务器是否接受Range请求和Range请求中指定的数据的单位。&lt;br /&gt; Location：用于通知客户机应该到哪个新的地址去获取文档。由于当前响应并没有直接返回内容给客户机，所以使用Location头的HTTP消息不应该有实体内容，由此可见，在消息头中不能同时出现Location和Contect-Type这两个头自段。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;实体头：&lt;br /&gt; Allow：用于指定客户机请求的资源所支持的请求方法。&lt;br /&gt; Content-Encoding：用于指定实体内容的压缩编码方式。&lt;br /&gt; Content-Language：用于指定返回的网页文档的国家语言类型。&lt;br /&gt; Content-Length：用于指定实体内容的长度。&lt;br /&gt; Content-Location：用于指定响应消息中所封装的实体内容的实际位置路径。&lt;br /&gt; Content-Type：用于指定实体内容的MIME类型。客户机通过检查服务器响应消息的此字段中的MIME类型就能知道实体内容的数据格式和知道以何种方式来进行处理了。&amp;lt;Tomcat&amp;gt;安装目录下的conf目录下的web.xml文件里面就定义了很多的类型。&lt;br /&gt; Last-Modified：用于指定文档的最后修改时间。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;扩展头：&lt;br /&gt; Refresh：此字段告诉浏览器隔多长时间刷新。(转载)&lt;/p&gt;</description><author>No.0023</author><category>dev</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/132</guid><pubDate>Wed, 02 Jul 2008 09:05:05 GMT</pubDate></item><item><title>OpenBSD command: cdio</title><link>http://n23.appspot.com/blog/post/131</link><description>&lt;p&gt;Shell:~/tmp &amp;gt;: cdio&lt;br /&gt;No CD device name specified. Defaulting to cd0.&lt;br /&gt;Compact Disc Control utility, version 2.1&lt;br /&gt;Type `?' for command list&lt;br /&gt;&lt;br /&gt;cdio&amp;gt; ?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClOSE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEBuG on | off&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeVICE devname&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EjECT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HeLP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InFO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NeXT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAuSE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PlAY track1[.index1] [track2[.index2]]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PlAY [tr1] m1:s1[.f1] [tr2] [m2:s2[.f2]]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PlAY [#block [len]]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PReVIOUS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QuIT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RESEt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReSUME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; REPlAY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEt msf | lba&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StATUS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STOp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VoLUME &amp;lt;l&amp;gt; &amp;lt;r&amp;gt; | left | right | mute | mono | stereo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CDdBINFO [n]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CDId&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXiT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BlANK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CdRIP [[track1-trackN] ...]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CdPLAY [[track1-trackN] ...]&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The word &amp;quot;play&amp;quot; is not required for the play commands.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The plain target address is taken as a synonym for play.&lt;br /&gt;cdio&amp;gt; &lt;br /&gt;&lt;/p&gt;</description><author>No.0023</author><category>command</category><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/131</guid><pubDate>Wed, 02 Jul 2008 09:02:48 GMT</pubDate></item><item><title>OpenBSD command: biff</title><link>http://n23.appspot.com/blog/post/115</link><description>&lt;p&gt;BIFF(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenBSD Reference Manual&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BIFF(1)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; biff - be notified if mail arrives and who it is from&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; biff [n | y]&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; biff informs the system whether you want to be notified when mail arrives&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; during the current terminal session.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The options are as follows:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Disables notification.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enables notification.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When mail notification is enabled, the header and first few lines of the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message will be printed on your screen whenever mail arrives.&amp;nbsp; A ``biff&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y'' command is often included in the file .login or .profile to be exe-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cuted at each login.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; biff operates asynchronously.&amp;nbsp; For synchronous notification use the MAIL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; variable of sh(1) or the mail variable of csh(1).&lt;br /&gt;&lt;br /&gt;SEE ALSO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; csh(1), mail(1), sh(1), comsat(8)&lt;br /&gt;&lt;br /&gt;HISTORY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The biff command appeared in 4.0BSD.&amp;nbsp; &amp;quot;Biff&amp;quot; was Heidi Stettner's dog.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; He died in August 1993, at 15.&lt;br /&gt;&lt;br /&gt;OpenBSD 4.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; May 31, 2007&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;Shell:~/tmp &amp;gt;:&lt;/p&gt;</description><author>No.0023</author><category>command</category><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/115</guid><pubDate>Wed, 02 Jul 2008 09:01:58 GMT</pubDate></item><item><title>OpenBSD command: systrace</title><link>http://n23.appspot.com/blog/post/114</link><description>&lt;p&gt;SYSTRACE(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenBSD Reference Manual&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTRACE(1)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; systrace - generate and enforce system call policies&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; systrace [-AaCeitUuV] [-c user:group] [-d policydir] [-E logfile]&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; [-f file] [-g gui] [-p pid] command ...&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The systrace utility monitors and controls an application's access to the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system by enforcing access policies for system calls.&amp;nbsp; The systrace util-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ity might be used to trace an untrusted application's access to the sys-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tem.&amp;nbsp; Alternatively, it might be used to protect the system from software&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bugs (such as buffer overflows) by constraining a daemon's access to the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system.&amp;nbsp; Its privilege elevation feature can be used to obviate the need&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; to run large, untrusted programs as root when only one or two system&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; calls require root privilege.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The access policy can be generated interactively or obtained from a poli-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cy file.&amp;nbsp; Interactive policy generation will be performed by the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ``notification user agent'', normally xsystrace(1), unless text mode is&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; specified via -t.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When running in ``automatic enforcement'' mode, operations not covered by&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the policy raise an alarm and allow a user to refine the currently con-&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; figured policy.&lt;/p&gt;</description><author>No.0023</author><category>command</category><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/114</guid><pubDate>Wed, 02 Jul 2008 09:01:04 GMT</pubDate></item><item><title>在OpenBSD4.2安装显卡驱动</title><link>http://n23.appspot.com/blog/post/129</link><description>&lt;p&gt;我的显卡是Intel 965，已经从官方网站上看到，已经支持了，模块是i810，安装步骤如下：&lt;br /&gt;&lt;br /&gt;1， 下载src.tar.gz，sys.tar.gz，xenocara.tar.gz，解压到 /usr/src ：&lt;br /&gt; # tar -zxvf srs.tar.gz -C /usr/src&lt;br /&gt; # tar -zxvf sys.tar.gz -C /usr/src&lt;br /&gt; # tar -zxvf xenocara.tar.gz -C /usr/src&lt;br /&gt;&lt;br /&gt;2. 安装：&lt;br /&gt;&lt;br /&gt; # cd /usr/src/xenocara/driver/xf86-video-intel&lt;br /&gt; # rm -f obj&lt;br /&gt; # make -f Makefile.bsd-wrapper cleandir&lt;br /&gt; # mkdir XOBJDIR&lt;br /&gt; # make -f Makefile.bsd-wrapper obj&lt;br /&gt; # make -f Makefile.bsd-wrapper build&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;安装后从man手册页已经看到了：&lt;br /&gt;&lt;br /&gt; # man i810&lt;br /&gt;&lt;br /&gt;I810(4)                                                   I810(4)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt; i810 - Intel 8xx integrated graphics chipsets&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt; Section &amp;quot;Device&amp;quot;&lt;br /&gt; Identifier &amp;quot;devname&amp;quot;&lt;br /&gt; Driver &amp;quot;i810&amp;quot;&lt;br /&gt; ...&lt;br /&gt; EndSection&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt; i810  is  an  Xorg  driver  for  Intel integrated graphics&lt;br /&gt; chipsets.  The driver supports depths 8, 15,  16  and  24.&lt;br /&gt; All  visual  types  are  supported  in  depth  8.  For the&lt;br /&gt; i810/i815 other depths support the TrueColor  and  Direct-&lt;br /&gt; Color  visuals.   For  the i830M and later, only the True-&lt;br /&gt; Color visual is supported for depths greater than 8.   The&lt;br /&gt; driver  supports  hardware  accelerated  3D via the Direct&lt;br /&gt; Rendering Infrastructure (DRI), but only in depth  16  for&lt;br /&gt; the i810/i815 and depths 16 and 24 for the 830M and later.&lt;br /&gt;&lt;br /&gt;SUPPORTED HARDWARE&lt;br /&gt; i810 supports the i810, i810-DC100,  i810e,  i815,  i830M,&lt;br /&gt; 845G,  852GM, 855GM, 865G, 915G, 915GM, 945G, 945GM, 965G,&lt;br /&gt; 965Q and 946GZ chipsets.&lt;br /&gt;....&lt;br /&gt;&lt;/p&gt;</description><author>No.0023</author><category>OpenBSD</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/129</guid><pubDate>Wed, 02 Jul 2008 08:59:34 GMT</pubDate></item><item><title>SCIM 词码表 ---- 万能五笔</title><link>http://n23.appspot.com/blog/post/113</link><description>&lt;p&gt;&lt;br /&gt; Linux: &amp;nbsp;&lt;a href="http://blogimg.chinaunix.net/blog/upfile2/071109163319.gz" rel="no-follow" target="_blank"&gt; Wnwb-linux.tar.gz&lt;/a&gt;&lt;br /&gt;OpenBSD:&lt;a href="http://blogimg.chinaunix.net/blog/upfile2/071112165223.gz" rel="no-follow" target="_blank"&gt; Wnwb-OpenBSD.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;存放路径：&lt;br /&gt;Linux: &amp;nbsp;&amp;nbsp;/usr/share/scim/tables/&lt;br /&gt;OpenBSD:&amp;nbsp;/usr/local/share/scim/tables/&lt;br /&gt; &lt;br /&gt;下载后改文件扩展名为: *.tar.gz 后再解压，重启Xwindow后就可以看到了，万能五笔哦。&lt;/p&gt;</description><author>No.0023</author><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/113</guid><pubDate>Wed, 02 Jul 2008 08:58:07 GMT</pubDate></item><item><title>PGP PUBLIC KEY</title><link>http://n23.appspot.com/blog/post/111</link><description>&lt;p&gt;Here is my public PGP key:&lt;/p&gt;
&lt;p&gt;-----BEGIN PGP PUBLIC KEY BLOCK-----&lt;br /&gt;Version: GnuPG v1.4.8 (OpenBSD)&lt;br /&gt;&lt;br /&gt;mQGiBEiTdXsRBADbaQp99heFlinoOiJP8GZWcMIKXjelDZr9sWoTcfa7VL7CT2cf&lt;br /&gt;8Dd0zMEVJ3y0H1/ipuvxu3P+vGo01vwNDK5Gja+5PHLMkxayn/3KVccUeX+rBRbn&lt;br /&gt;51OuBr2WY+lPgJwOj7CqJ/S1QO0r5gRFWtq7TSvsOh1b0Fdttjnn2wbXGwCgr3n0&lt;br /&gt;4mA4ocipyYuxlb9YwvncXAMD/RIRzwyHls2FEOdrL7Lrz3/WTRE5jk0PwryeIUrH&lt;br /&gt;cdteiDuascqi16rvMNbcuOrUMP6LE4Rsn/XiXV+/cx6krYrieMYoQjgTDFyoxAc+&lt;br /&gt;eQoNEhyNokLW9q3YQhUAW8E6q4OvlZfFxhYMEkPspm6Vp2zGExpnv6SBlWdwkcCQ&lt;br /&gt;X4MoA/0WKKVtLhh0B9wfcmu7dbtAH9v+I4u3qlHreOuwStX5CJDfv9R5sSzhmVGs&lt;br /&gt;F0sl31vvva9nXaNsKQHYIknxOvpHODWgsBFy5c3QvnXhYisx+tKrvn6rf/9Buy/7&lt;br /&gt;NTBcpePH98IfqEItEh21zi6WMNl2Ne5u00QqoQR39Scw2pqj1rQvTjIzIENoYW4g&lt;br /&gt;KEdudVBHIC0tIE9wZW5CU0QpIDxOby4wMDIzQGdtYWlsLmNvbT6IYAQTEQIAIAUC&lt;br /&gt;SJN1ewIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEBuNoxTHQdpxOd4AoJqZ&lt;br /&gt;XLAIN+DGyKle4EbUZShy05GtAKCLOqAn8rn+ZLuSLmvZmeKQFbxYJLkCDQRIk3V7&lt;br /&gt;EAgAuGI+XQZwzC2x09naIO0CHiwdMNmgLsgOK9yLGkxcuZyS8U39LKIlKDQeBx9s&lt;br /&gt;LGbRm77Tju45cvIPKcErdTmmIpwztrhGwogqrEQeA8DQyu9KsabxOYNaoTK18XI2&lt;br /&gt;2t3WwrJ2NxB7nLPHH5ORnaZLq+DDEl0BYshgOI1XQ1VX2LalBInAoGNcTIHr7uuv&lt;br /&gt;zsuisaXObkUQ4dZchjkNWCUG0cs1XjnOuffoRk++i9MUSYBsiL4lXZ6vKGLUJKm1&lt;br /&gt;Pms8TOi6iv3oKb7y1Jp/utM3O2+jMM9ThcZsYCIUYXJ0DcHBu1WWavDdbY9G+OCa&lt;br /&gt;j0LB1dZ0Ki+MsBcjhdSRL01Y2wADBQgAn14YJfZJlzzsFHiBJalqpk/mokxpl13H&lt;br /&gt;IRyoov+CpNm0bXJXoadusffh0EYM19ftg5uonngM4nzni9Er8Zm1FC0lVU7+9UXs&lt;br /&gt;epbZgz+tBHvl6fNrBbCL+QdX9laysyYvPbKgujcxwpyzhMVeVfqfLZptQ9MxYKyO&lt;br /&gt;v1LvtGYWL3MmTdVf+XE7MNo+qbVF29y5sMhEG87EJRw253aFDPCPmGHyTkwgAz/n&lt;br /&gt;Uf7/3vjkYu5fxXT6qaCUR+pUOQ6iHsbvHu2LRzwauiGf2TjXGdmPazZJHvKgbn8d&lt;br /&gt;gMd0sT6ckJ1puyHopBttdwk7nlpEz5mMITUnmv2B1PCt5SbL2HBbQohJBBgRAgAJ&lt;br /&gt;BQJIk3V7AhsMAAoJEBuNoxTHQdpxhXwAoJX2uYi+Ui7udN8BZbyg/q8rrmXfAJ9G&lt;br /&gt;43s7DxS2guqPsADHkYeEzxrDLg==&lt;br /&gt;=TvaW&lt;br /&gt;-----END PGP PUBLIC KEY BLOCK-----&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;you can get it from server also, as:&lt;br /&gt;&lt;br /&gt;$ gpg --keyserver pgp.mit.edu --recv-keys C741DA71&lt;/p&gt;</description><author>No.0023</author><category>unix</category><category>others</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/111</guid><pubDate>Wed, 02 Jul 2008 08:54:42 GMT</pubDate></item><item><title>w3m</title><link>http://n23.appspot.com/blog/post/127</link><description>&lt;p&gt;w3mman:&lt;br /&gt;Shell:/var/db/pkg &amp;gt;: pkg_info -L w3m-0.5.1p2-image&lt;br /&gt;Information for w3m-0.5.1p2-image&lt;br /&gt;&lt;br /&gt;Files:&lt;br /&gt;/usr/local/bin/w3m&lt;br /&gt;/usr/local/bin/w3mman&lt;br /&gt;/usr/local/libexec/w3m/cgi-bin/dirlist.cgi&lt;br /&gt;/usr/local/libexec/w3m/cgi-bin/multipart.cgi&lt;br /&gt;/usr/local/libexec/w3m/cgi-bin/w3mbookmark&lt;br /&gt;/usr/local/libexec/w3m/cgi-bin/w3mhelp.cgi&lt;br /&gt;/usr/local/libexec/w3m/cgi-bin/w3mhelperpanel&lt;br /&gt;/usr/local/libexec/w3m/cgi-bin/w3mmail.cgi&lt;br /&gt;/usr/local/libexec/w3m/cgi-bin/w3mman2html.cgi&lt;br /&gt;/usr/local/libexec/w3m/inflate&lt;br /&gt;/usr/local/man/man1/w3m.1&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;&lt;img src="http://blogimg.chinaunix.net/blog/upfile/070821233809.jpg" alt="" /&gt;&lt;/p&gt;</description><author>No.0023</author><category>unix</category><category>command</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/127</guid><pubDate>Wed, 02 Jul 2008 08:53:23 GMT</pubDate></item><item><title>ssh 代理</title><link>http://n23.appspot.com/blog/post/124</link><description>&lt;pre&gt;如果你有一个ssh shell，比如： 192.168.1.23&lt;/pre&gt;
&lt;pre&gt;于是你随时拥有了一个socks5代理了： ssh -2CNf -D 3121 192.168.1.23&lt;/pre&gt;
&lt;pre&gt;端口为3121， 可以用来上QQ，MSN等等，如果你非要一个http代理，那就安装一个软件叫： privoxy&lt;/pre&gt;
&lt;pre&gt;写它的配置文件： &lt;/pre&gt;
&lt;pre&gt;vi /etc/privoxy/config:&lt;/pre&gt;
&lt;pre&gt;&lt;br /&gt;listen-address  127.0.0.1:3128&lt;/pre&gt;
&lt;pre&gt;permit-access 127.0.0.1&lt;/pre&gt;
&lt;pre&gt;forward-socks4 / 127.0.0.1:3121 .      # 注意有个句号哦。&lt;/pre&gt;
&lt;pre&gt;&lt;br /&gt;端口为3128。&lt;/pre&gt;
&lt;pre&gt;如果你的ssh shell在国外的话，你可以穿过那伟大的GFW。&lt;/pre&gt;</description><author>No.0023</author><category>unix</category><category>ssh</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/124</guid><pubDate>Wed, 02 Jul 2008 08:51:35 GMT</pubDate></item><item><title>Python Sites</title><link>http://n23.appspot.com/blog/post/123</link><description>&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;Python Sites&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.python.org" rel="no-follow" target="_blank"&gt;Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.python.org/dev/peps/" rel="no-follow" target="_blank"&gt;Python Enhancement Proposals&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.jython.org/" rel="no-follow" target="_blank"&gt;Jython&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.modpython.org/" rel="no-follow" target="_blank"&gt;Mod_python&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.boost.org/libs/python/doc/" rel="no-follow" target="_blank"&gt;Boost.Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.pygame.org/" rel="no-follow" target="_blank"&gt;pygame&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://developer.yahoo.com/python/" rel="no-follow" target="_blank"&gt;Yahoo! Developer Network&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chinese Community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://python.cn/" rel="no-follow" target="_blank"&gt;Python.cn&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.czug.org/" rel="no-follow" target="_blank"&gt;CZUG&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.woodpecker.org.cn/" rel="no-follow" target="_blank"&gt;WoodPecker&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Programming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://wiki.python.org/moin/CgiScripts" rel="no-follow" target="_blank"&gt;CGI Scripts&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.zope.org/" rel="no-follow" target="_blank"&gt;Zope&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.djangoproject.com/" rel="no-follow" target="_blank"&gt;Django&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.turbogears.org/" rel="no-follow" target="_blank"&gt;TurboGears&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://plone.org/" rel="no-follow" target="_blank"&gt;Plone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://pythonpaste.org/" rel="no-follow" target="_blank"&gt;Python Paste&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://pylonshq.com/" rel="no-follow" target="_blank"&gt;Pylons&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://pyxml.sourceforge.net/topics/" rel="no-follow" target="_blank"&gt;XML Processing&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.mems-exchange.org/software/quixote/" rel="no-follow" target="_blank"&gt;Quixote&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://karrigell.sourceforge.net/" rel="no-follow" target="_blank"&gt;Karrigell&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://webpy.org/" rel="no-follow" target="_blank"&gt;Webpy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.cherrypy.org/" rel="no-follow" target="_blank"&gt;CherryPy&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.myghty.org/" rel="no-follow" target="_blank"&gt;Myghty&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.cheetahtemplate.org/" rel="no-follow" target="_blank"&gt;Cheetah&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.webwareforpython.org/" rel="no-follow" target="_blank"&gt;Webware for Python&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://aquarium.sourceforge.net/" rel="no-follow" target="_blank"&gt;Aquarium&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.gosubway.org/" rel="no-follow" target="_blank"&gt;Subway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://spyce.sourceforge.net/" rel="no-follow" target="_blank"&gt;Spyce&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.ivy.fr/tahchee/" rel="no-follow" target="_blank"&gt;Tahchee&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.cs.virginia.edu/~lab2q/" target="_blank"&gt;Python CGI&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Databases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.python.org/doc/topics/database/modules/" rel="no-follow" target="_blank"&gt;Database Modules&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.python.org/doc/topics/database/persistence/" rel="no-follow" target="_blank"&gt;Persistence&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.python.org/dev/peps/pep-0249/" rel="no-follow" target="_blank"&gt;Standard Database API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.sqlobject.org/" rel="no-follow" target="_blank"&gt;SQLObject&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Networking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://twistedmatrix.com/trac/" rel="no-follow" target="_blank"&gt;Twisted&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.amk.ca/python/howto/sockets/" rel="no-follow" target="_blank"&gt;Sockets&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software Development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.edgewall.com/trac/" rel="no-follow" target="_blank"&gt;Trac&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://roundup.sourceforge.net/" rel="no-follow" target="_blank"&gt;Roundup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.scons.org/" rel="no-follow" target="_blank"&gt;SCons&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://buildbot.sourceforge.net/" rel="no-follow" target="_blank"&gt;Buildbot&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://gump.apache.org/" rel="no-follow" target="_blank"&gt;Apache Gump&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://sourceforge.net/projects/activegrid/" rel="no-follow" target="_blank"&gt;ActiveGrid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.easyeclipse.org/site/distributions/python.html" rel="no-follow" target="_blank"&gt;EasyEclipse&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://boa-constructor.sourceforge.net/" rel="no-follow" target="_blank"&gt;BoaConstructor&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/123</guid><pubDate>Wed, 02 Jul 2008 08:49:51 GMT</pubDate></item><item><title>Python一些网址</title><link>http://n23.appspot.com/blog/post/110</link><description>&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;Python: www.python.org&lt;br /&gt; ActivePython: www.activestate.com&lt;br /&gt; Stackless Python: www.stackless.com&lt;br /&gt; IronPython: www.ironpython.com&lt;br /&gt; PyPy: pypy.org&lt;br /&gt; &lt;br /&gt; Django: www.djangoproject.com&lt;br /&gt; Mod_Python: www.modpython.org&lt;br /&gt; Webware: www.webwareforpython.org&lt;br /&gt; CherryPy: www.cherrypy.org&lt;br /&gt; Web.py: webpy.org&lt;br /&gt; Zope: www.zope.org&lt;br /&gt; Turbogears: www.turbogears.org&lt;br /&gt; &lt;br /&gt; WxPython: www.wxpython.org&lt;br /&gt; PyGtk: www.pygtk.org&lt;br /&gt; PyQt: http://trolltech.com/products/qt&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; Python Documentation Online: http://pydoc.org, http://docs.python.org&lt;br /&gt; Python-cn: http://python.cn&lt;br /&gt; Pythonic: http://www.woodpecker.org.cn&lt;br /&gt; The Daily Python-URL: http://www.pythonware.com/daily/index.htm&lt;br /&gt; Python Package Index: http://pypi.python.org&lt;br /&gt; Planet Python: http://www.planetpython.org&lt;br /&gt; Pythonite: http://www.pythonite.org&lt;br /&gt; Useless Python: http://www.uselesspython.com&lt;br /&gt; Python Cookbook: http://aspn.activestate.com/ASPN/Cookbook/Python&lt;br /&gt; &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/110</guid><pubDate>Wed, 02 Jul 2008 08:48:25 GMT</pubDate></item><item><title>Python 邮件列表</title><link>http://n23.appspot.com/blog/post/109</link><description>&lt;p&gt;comp.lang.python                     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://groups.google.com/group/comp.lang.python&lt;/p&gt;
&lt;p&gt;python-chinese@lists.python.cn       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;中国Python用户组开发人员&lt;/p&gt;
&lt;p&gt;python-cn@googlegroups.com           &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chinese Python User Group&lt;/p&gt;
&lt;p&gt;CPUG@googlegroups.com                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; China Python User Group -- 华蟒用户组&lt;/p&gt;
&lt;p&gt;bpug@googlegroups.com                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;北京Python用户群&lt;/p&gt;
&lt;p&gt;zpug@googlegroups.com                &amp;nbsp;&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;/p&gt;
&lt;p&gt;szpug@googlegroups.com               &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;深圳 Python 用户组&lt;/p&gt;
&lt;p&gt;czug-org@googlegroups.com&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/109</guid><pubDate>Wed, 02 Jul 2008 08:47:29 GMT</pubDate></item><item><title>Python IAQ: 少有回答的问题</title><link>http://n23.appspot.com/blog/post/122</link><description>&lt;p&gt;&lt;a href="http://www.chenwy.com/python-iaq-cn.html" rel="no-follow" target="_blank"&gt;http://www.chenwy.com/python-iaq-cn.html&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/122</guid><pubDate>Wed, 02 Jul 2008 08:45:54 GMT</pubDate></item><item><title>Python Tutorials</title><link>http://n23.appspot.com/blog/post/121</link><description>&lt;p&gt;&lt;a href="http://www.awaretek.com/tutorials.html" rel="no-follow" target="_blank"&gt;http://www.awaretek.com/tutorials.html&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/121</guid><pubDate>Wed, 02 Jul 2008 08:44:08 GMT</pubDate></item><item><title>Python Books</title><link>http://n23.appspot.com/blog/post/107</link><description>&lt;p&gt;&lt;a href="http://www.pythonid.com/html/wendangxiazai/index.html" rel="no-follow" target="_blank"&gt;http://www.pythonid.com/html/wendangxiazai/index.html&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>Python</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/107</guid><pubDate>Wed, 02 Jul 2008 08:42:45 GMT</pubDate></item><item><title>Custom sidebar</title><link>http://n23.appspot.com/blog/post/80</link><description>&lt;p&gt;my custom sidebar values for this blog:&lt;/p&gt;
&lt;p&gt;{{ W.Tags }}&lt;br /&gt;{{ W.RecentPosts }}&lt;br /&gt;{{ W.RecentComments }}&lt;br /&gt;{{ W.Blogroll }}&lt;/p&gt;</description><author>No.0023</author><category>blog</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/80</guid><pubDate>Wed, 02 Jul 2008 05:35:36 GMT</pubDate></item><item><title>转载：《Spring Framework 2.5 Reference》中文版正式发布</title><link>http://n23.appspot.com/blog/post/103</link><description>&lt;p&gt;Spring中文参考手册得到Spring Framework开发团队的直接授权和大力的支持，其目的是在中文世界推广优秀的开源技术。&lt;/p&gt;
&lt;p&gt;本次翻译活动由满江红开放技术研究组织(&lt;a href="http://www.redsaga.com/" rel="no-follow"&gt;http://www.redsaga.com&lt;img src="http://wiki.redsaga.com/confluence/images/icons/linkext7.gif" alt="" height="7" width="7" /&gt;&lt;/a&gt;)和Spring中文论坛(&lt;a href="http://spring.jactiongroup.net/" rel="no-follow"&gt;http://spring.jactiongroup.net&lt;img src="http://wiki.redsaga.com/confluence/images/icons/linkext7.gif" alt="" height="7" width="7" /&gt;&lt;/a&gt;) 共同发起、组织。&lt;/p&gt;
&lt;p&gt;我们在此郑重宣布，本次翻译遵循原Spring Framework的授权协议，即Apache 2.0协议。在完整保留全部文本(包括本版权页)，&lt;/p&gt;
&lt;p&gt;并且不违反Apache 2.0协议的前提下，允许和鼓励任何人进行全文转载及推广，所有参与人员放弃除署名权外的一切权利。&lt;/p&gt;
&lt;p&gt;在线版本：  &lt;a href="http://www.redsaga.com/spring_ref/2.5/html/" rel="no-follow"&gt;HTML&lt;img src="http://wiki.redsaga.com/confluence/images/icons/linkext7.gif" alt="" height="7" width="7" /&gt;&lt;/a&gt; / &lt;a href="http://www.redsaga.com/spring_ref/2.5/html_single/" rel="no-follow"&gt;HTML Single&lt;img src="http://wiki.redsaga.com/confluence/images/icons/linkext7.gif" alt="" height="7" width="7" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载地址：  &lt;a href="http://www.redsaga.com/spring_ref/2.5/spring-reference.pdf" rel="no-follow"&gt;PDF(593页，4.41MB)&lt;img src="http://wiki.redsaga.com/confluence/images/icons/linkext7.gif" alt="" height="7" width="7" /&gt;&lt;/a&gt; / &lt;a href="http://www.redsaga.com/spring_ref/2.5/Spring-Reference_zh_CN.chm" rel="no-follow"&gt;CHM(2.08MB)&lt;img src="http://wiki.redsaga.com/confluence/images/icons/linkext7.gif" alt="" height="7" width="7" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;勘误表：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wiki.redsaga.com/confluence/pages/viewpage.action?pageId=3171" rel="no-follow"&gt;勘误表(Spring 2.5) &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;from &lt;a href="http://www.javaread.com/article/show/103" rel="no-follow" target="_blank"&gt;JavaRead.com&lt;/a&gt;&lt;/p&gt;</description><author>No.0023</author><category>spring</category><category>java</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/103</guid><pubDate>Wed, 02 Jul 2008 00:44:41 GMT</pubDate></item><item><title>Google 日历</title><link>http://n23.appspot.com/blog/post/76</link><description>&lt;p&gt;...&lt;/p&gt;</description><author>No.0023</author><category>TODO</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/76</guid><pubDate>Mon, 30 Jun 2008 15:32:57 GMT</pubDate></item><item><title>Tags &amp; Tags by month, year</title><link>http://n23.appspot.com/blog/post/101</link><description>&lt;p&gt;分类标签: completed.&lt;/p&gt;</description><author>No.0023</author><category>TODO</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/101</guid><pubDate>Mon, 30 Jun 2008 15:29:23 GMT</pubDate></item><item><title>About &amp; Author</title><link>http://n23.appspot.com/blog/post/75</link><description>&lt;p&gt;About Me: completed.&lt;/p&gt;</description><author>No.0023</author><category>TODO</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/75</guid><pubDate>Mon, 30 Jun 2008 15:28:13 GMT</pubDate></item><item><title>Pager</title><link>http://n23.appspot.com/blog/post/74</link><description>&lt;p&gt;...&lt;/p&gt;</description><author>No.0023</author><category>TODO</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/74</guid><pubDate>Mon, 30 Jun 2008 15:18:31 GMT</pubDate></item><item><title>EditComment</title><link>http://n23.appspot.com/blog/post/72</link><description>&lt;p&gt;...&lt;/p&gt;</description><author>No.0023</author><category>TODO</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/72</guid><pubDate>Mon, 30 Jun 2008 14:45:37 GMT</pubDate></item><item><title>一些常用的正则表达式</title><link>http://n23.appspot.com/blog/post/70</link><description>&lt;p&gt;正则表达式是一种通用的标准，大部分计算机语言都支持正则表达式，包括as3，这里转摘出了一些常用的正则表达式语句，&lt;br /&gt;大家用到的时候就不用自己写了 &lt;br /&gt;^\d+$　　//匹配非负整数（正整数 + 0）&amp;nbsp; &lt;br /&gt;^[0-9]*[1-9][0-9]*$　　//匹配正整数&amp;nbsp; &lt;br /&gt;^((-\d+)|(0+))$　　//匹配非正整数（负整数 + 0）&amp;nbsp; &lt;br /&gt;^-[0-9]*[1-9][0-9]*$　　//匹配负整数&amp;nbsp; &lt;br /&gt;^-?\d+$　　　　//匹配整数&amp;nbsp; &lt;br /&gt;^\d+(\.\d+)?$　　//匹配非负浮点数（正浮点数 + 0）&amp;nbsp; &lt;br /&gt;^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$　　//匹配正浮点数&amp;nbsp; &lt;br /&gt;^((-\d+(\.\d+)?)|(0+(\.0+)?))$　　//匹配非正浮点数（负浮点数 + 0）&amp;nbsp; &lt;br /&gt;^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$　　//匹配负浮点数&amp;nbsp; &lt;br /&gt;^(-?\d+)(\.\d+)?$　　//匹配浮点数&amp;nbsp; &lt;br /&gt;^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串&amp;nbsp; &lt;br /&gt;^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串&amp;nbsp; &lt;br /&gt;^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串&amp;nbsp; &lt;br /&gt;^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串&amp;nbsp; &lt;br /&gt;^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串&amp;nbsp; &lt;br /&gt;^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$　　　　//匹配email地址&amp;nbsp; &lt;br /&gt;^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$　　//匹配url &lt;br /&gt;匹配中文字符的正则表达式： [\u4e00-\u9fa5] &lt;br /&gt;匹配双字节字符(包括汉字在内)：[^\x00-\xff] &lt;br /&gt;匹配空行的正则表达式：\n[\s| ]*\r &lt;br /&gt;匹配HTML标记的正则表达式：/&amp;lt;(.*)&amp;gt;.*&amp;lt;\/&amp;gt;|&amp;lt;(.*) \/&amp;gt;/ &lt;br /&gt;匹配首尾空格的正则表达式：(^\s*)|(\s*$) &lt;br /&gt;匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* &lt;br /&gt;匹配网址URL的正则表达式：^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ &lt;br /&gt;匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$ &lt;br /&gt;匹配国内电话号码：(\d{3}-|\d{4}-)?(\d{8}|\d{7})? &lt;br /&gt;匹配腾讯QQ号：^[1-9]*[1-9][0-9]*$ &lt;br /&gt;&lt;br /&gt;下表是元字符及其在正则表达式上下文中的行为的一个完整列表：&amp;nbsp; &lt;br /&gt;\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。 &lt;br /&gt;^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性，^ 也匹配 &amp;amp;rsquo;\n&amp;amp;rsquo;&lt;br /&gt;&amp;nbsp; 或 &amp;amp;rsquo;\r&amp;amp;rsquo; 之后的位置。&lt;br /&gt;$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性，$ 也匹配 &amp;amp;rsquo;\n&amp;amp;rsquo;&lt;br /&gt;&amp;nbsp; 或 &amp;amp;rsquo;\r&amp;amp;rsquo; 之前的位置。&lt;br /&gt;* 匹配前面的子表达式零次或多次。&amp;nbsp; &lt;br /&gt;+ 匹配前面的子表达式一次或多次。+ 等价于 {1,}。&amp;nbsp; &lt;br /&gt;? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。&amp;nbsp; &lt;br /&gt;{n} n 是一个非负整数，匹配确定的n 次。 &lt;br /&gt;{n,} n 是一个非负整数，至少匹配n 次。&amp;nbsp; &lt;br /&gt;{n,m} m 和 n 均为非负整数，其中n &amp;lt;= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。 &lt;br /&gt;? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。&lt;br /&gt;&amp;nbsp; 非贪婪模式尽可能少的匹配所搜索的字符串，&lt;br /&gt;&amp;nbsp; 而默认的贪婪模式则尽可能多的匹配所搜索的字符串。&amp;nbsp; &lt;br /&gt;. 匹配除 &amp;quot;\n&amp;quot; 之外的任何单个字符。要匹配包括 &amp;amp;rsquo;\n&amp;amp;rsquo; &lt;br /&gt;&amp;nbsp; 在内的任何字符，请使用象 &amp;amp;rsquo;[.\n]&amp;amp;rsquo; 的模式。&amp;nbsp; &lt;br /&gt;(pattern) 匹配pattern 并获取这一匹配。&amp;nbsp; &lt;br /&gt;(?:pattern) 匹配pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。&amp;nbsp; &lt;br /&gt;(?=pattern) 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。&lt;br /&gt;&amp;nbsp; 这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。&amp;nbsp; &lt;br /&gt;(?!pattern) 负向预查，与(?=pattern)作用相反&amp;nbsp; &lt;br /&gt;x|y 匹配 x 或 y。&amp;nbsp; &lt;br /&gt;[xyz] 字符集合。&amp;nbsp; &lt;br /&gt;[^xyz] 负值字符集合。&amp;nbsp; &lt;br /&gt;[a-z] 字符范围，匹配指定范围内的任意字符。&amp;nbsp; &lt;br /&gt;[^a-z] 负值字符范围，匹配任何不在指定范围内的任意字符。&amp;nbsp; &lt;br /&gt;\b 匹配一个单词边界，也就是指单词和空格间的位置。 &lt;br /&gt;\B 匹配非单词边界。&amp;nbsp; &lt;br /&gt;\cx 匹配由x指明的控制字符。&amp;nbsp; &lt;br /&gt;\d 匹配一个数字字符。等价于 [0-9]。&amp;nbsp; &lt;br /&gt;\D 匹配一个非数字字符。等价于 [^0-9]。&amp;nbsp; &lt;br /&gt;\f 匹配一个换页符。等价于 \x0c 和 \cL。&amp;nbsp; &lt;br /&gt;\n 匹配一个换行符。等价于 \x0a 和 \cJ。&amp;nbsp; &lt;br /&gt;\r 匹配一个回车符。等价于 \x0d 和 \cM。&amp;nbsp; &lt;br /&gt;\s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。&amp;nbsp; &lt;br /&gt;\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。&amp;nbsp; &lt;br /&gt;\t 匹配一个制表符。等价于 \x09 和 \cI。&amp;nbsp; &lt;br /&gt;\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。&amp;nbsp; &lt;br /&gt;\w 匹配包括下划线的任何单词字符。等价于&amp;amp;rsquo;[A-Za-z0-9_]&amp;amp;rsquo;。&amp;nbsp; &lt;br /&gt;\W 匹配任何非单词字符。等价于 &amp;amp;rsquo;[^A-Za-z0-9_]&amp;amp;rsquo;。&amp;nbsp; &lt;br /&gt;\xn 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。 &lt;br /&gt;\num 匹配 num，其中num是一个正整数。对所获取的匹配的引用。&amp;nbsp; &lt;br /&gt;\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。&lt;br /&gt;&amp;nbsp; 否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。&amp;nbsp; &lt;br /&gt;\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个&lt;br /&gt;&amp;nbsp; 获取得子表达式，则 nm 为后向引用。&lt;br /&gt;&amp;nbsp; 如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，&lt;br /&gt;&amp;nbsp; 若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。 &lt;br /&gt;\nml 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八&lt;/p&gt;</description><author>No.0023</author><category>re</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/70</guid><pubDate>Mon, 30 Jun 2008 14:02:00 GMT</pubDate></item><item><title>GoogleCode SVN</title><link>http://n23.appspot.com/blog/post/98</link><description>&lt;p&gt;&lt;strong&gt;Shell:~/tmp/AppEngine/google_appengine &amp;gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;svn import n23 https://n23.googlecode.com/svn/trunk/ -m &amp;quot;initial import&amp;quot; --username No.0023&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;svn checkout https://n23.googlecode.com/svn/trunk/ n23 --username No.0023&lt;br /&gt;svn checkout http://n23.googlecode.com/svn/trunk/ n23-read-only&lt;/strong&gt;&lt;/p&gt;</description><author>No.0023</author><category>svn</category><category>googlecode</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/98</guid><pubDate>Mon, 30 Jun 2008 12:48:31 GMT</pubDate></item><item><title>Nice Name Test Again</title><link>http://n23.appspot.com/blog/post/93</link><description>&lt;p&gt;Testing&lt;/p&gt;</description><author>No.0023</author><category>test</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/93</guid><pubDate>Mon, 30 Jun 2008 03:03:07 GMT</pubDate></item><item><title>The new blog base on Plog</title><link>http://n23.appspot.com/blog/post/85</link><description>&lt;p&gt;Thanks to kommit...&lt;/p&gt;</description><author>No.0023</author><category>blog</category><category>plog</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/85</guid><pubDate>Sun, 29 Jun 2008 22:23:51 GMT</pubDate></item><item><title>测试了</title><link>http://n23.appspot.com/blog/post/84</link><description>&lt;p&gt;测试...&lt;/p&gt;</description><author>No.0023</author><category>test</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/84</guid><pubDate>Sun, 29 Jun 2008 22:22:55 GMT</pubDate></item><item><title>Testing</title><link>http://n23.appspot.com/blog/post/62</link><description>&lt;p&gt;Testing....&lt;/p&gt;</description><author>No.0023</author><category>test</category><guid isPermaLink="true">http://n23.appspot.com/blog/post/62</guid><pubDate>Sun, 29 Jun 2008 22:18:33 GMT</pubDate></item></channel></rss>