<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-6184036</id><updated>2009-01-04T17:49:01.843+08:00</updated><title type='text'>Tinyfool的开发日记(blog)</title><subtitle type='html'>路漫漫其修远兮，吾将上下而求索&lt;br/&gt;本Blog内容均可转载，但是作者不放弃版权，转载必须标明作者和原文地址。</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/diary.htm'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.tinydust.net/prog/diary/atom.xml'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>248</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6184036.post-2898331697743068697</id><published>2008-12-29T20:50:00.003+08:00</published><updated>2008-12-29T20:59:42.735+08:00</updated><title type='text'>{资料} 顶级期刊《Machine Learning》 1986-2007 全部论文的合集</title><content type='html'>今天，&lt;span class="HcCDpe"&gt;&lt;span class="lDACoc"&gt;&lt;a href="http://blog.csdn.net/pongba"&gt;pongba&lt;/a&gt;发现了这个非常好的资料，并在&lt;a href="http://groups.google.com/group/pongba"&gt;他的论坛&lt;/a&gt;共享出来。&lt;br /&gt;地址是：&lt;br /&gt;http://gigapedia.org/items/62699/machine-learning--1986---2007--collection-of-journals--springer-&lt;br /&gt;&lt;br /&gt;不过这个下载地址有点麻烦，需要你注册&lt;/span&gt;&lt;/span&gt;&lt;span class="HcCDpe"&gt;&lt;span class="lDACoc"&gt;gigapedia.org才能看到下载链接，然后还要去ifile-it网站才能开始真正的下载。所以，我下载了一份，在电驴共享出来，欢迎大家使用电驴来下载。&lt;br /&gt;&lt;br /&gt;地址是：&lt;br /&gt;ed2k://|file|ml.zip|512062790|3E9F4EEF83BD6996FA2CE1A9BC026B2B|/&lt;br /&gt;&lt;br /&gt;欢迎下载也欢迎一起做源，现在下载速度很一般，不过只要做源的人多很快就会快起来的。&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/2898331697743068697/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=2898331697743068697' title='3 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/2898331697743068697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/2898331697743068697'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2008/12/machine-learning-1986-2007.html' title='{资料} 顶级期刊《Machine Learning》 1986-2007 全部论文的合集'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-5826701776391860358</id><published>2008-04-26T02:16:00.005+08:00</published><updated>2008-06-26T01:41:09.388+08:00</updated><title type='text'>Google、微软还是好耶的黑色幽默？</title><content type='html'>刚才要下载Mac版本的Mysql，所以去Google搜索Mysql，不过突然搜索结果右边的广告吸引了我。微软买了Mysql这个关键字，还要在广告里跟IBM的数据产品叫板多好玩啊。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.tinydust.net/prog/diary/uploaded_images/database-703200.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.tinydust.net/prog/diary/uploaded_images/database-703068.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;可是，我点了之后，居然只看到一条错误信息：&lt;br /&gt;Database not found!totaldb=0 dbname[1]=&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.tinydust.net/prog/diary/uploaded_images/result-703268.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.tinydust.net/prog/diary/uploaded_images/result-703256.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;我靠，难道是跟IBM比谁更幽默么？那估计微软要赢了。仔细一看地址是&lt;br /&gt;http://mccannafa7.allyes.cn/main/adfclick?db=mccannafa7&amp;amp;bid=12680,6073,50&amp;amp;cid=6371,289,1&amp;amp;sid=12210&amp;amp;show=ignore&amp;amp;url=http://www.microsoft.com/china/sql/prodinfo/compare/default.mspx&lt;br /&gt;&lt;br /&gt;原来问题出在好耶身上，微软的地址 http://www.microsoft.com/china/sql/prodinfo/compare/default.mspx 其实可以访问。&lt;br /&gt;&lt;br /&gt;只是在宣传数据库的广告上，广告系统的数据库崩溃了，总让我觉得很有点黑色幽默。这更说明了数据库的重要性，不过好耶的数据库用的是谁家的，我还真是不太清楚，哈哈。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/好耶" rel="tag"&gt;好耶&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/微软" rel="tag"&gt;微软&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/5826701776391860358/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=5826701776391860358' title='7 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/5826701776391860358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/5826701776391860358'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2008/04/google.html' title='Google、微软还是好耶的黑色幽默？'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-3410332674203295449</id><published>2008-03-15T21:11:00.005+08:00</published><updated>2008-06-26T01:42:29.728+08:00</updated><title type='text'>DreamHost值得推荐吗？我看不值得！</title><content type='html'>之前有不少Blog用了&lt;a href="http://www.dreamhost.com/"&gt;DreamHost&lt;/a&gt;，还做了推荐，我的Blog一直在国外，所以也就没有凑热闹。&lt;br /&gt;&lt;br /&gt;所以，头些日子听说DreamHost摆了一个大乌龙的时候，我自然可以幸灾乐祸一番。上次的乌龙不清楚的朋友，可以看看这篇文章《&lt;a href="http://blog.htmlor.com/2008/01/17/dreamhost_nightmare_and_responses/"&gt;DreamHost 大乌龙事件及众生相&lt;/a&gt;》。大概过程就是DreamHost的联合创始人乔希·琼斯在对2007年欠费用户催缴时，写错了程序的参数，把2007写成了2008，这样本来不需要付款的无数用户就自动被扣了11个月的租用费，这是个 7,500,000 美元，甚至引发了些用户对网络服务自动扣款是否安全的讨论。&lt;br /&gt;&lt;br /&gt;这当然是无心之失，虽然对很多客户损失重大（可能会造成一些客户信用卡透支），但是我认为还是可以原谅的，因为总归不是故意的，成熟商业社会里，只要生意还做得下去，估计没人会白痴到故意提前扣款，那么多用户，与其提前扣款赚一笔跑路，自然不如老老实实的服务客户，争取让客户多享受几年服务。&lt;br /&gt;&lt;br /&gt;问题是这样的，头两天有个朋友告诉我他的blog被Google清出索引有些日子了，他怀疑是Google认为他的链接太多了。&lt;br /&gt;&lt;br /&gt;我看了看链接其实不算多，而且也没有任何明显的作弊的迹象，这位哥们人品虽然谈不上值得称道，但是多半也是不会作弊的。&lt;br /&gt;&lt;br /&gt;那么帮他申请个&lt;a href="http://www.google.com/sitemaps"&gt;Google Sitemap&lt;/a&gt;，看看他的网站到底出了什么问题吧。谁知道，一确认，才发现GoogleBot报警说，无法访问他的网站，错误号是403。&lt;br /&gt;&lt;br /&gt;网站访问毫无问题，那么看来这个403是专门针对GoogleBot的，你不让人家抓你，人家凭什么索引你呢，呵呵。&lt;br /&gt;&lt;br /&gt;问问哥们，他说自己没做过任何的设置，那么多半就是空间服务商干的了。哥们说，他在用DreamHost，在Google一搜“&lt;a href="http://www.google.com/search?q=dreamhost+403+googlebot&amp;amp;hl=en"&gt;dreamhost 403 googlebot&lt;/a&gt;”，马上就找到了两篇文章《&lt;a href="http://www.quickonlinetips.com/archives/2007/04/errors-with-htaccess-site-down-with-403-forbidden-errors/"&gt;Errors with .htaccess : Site Down with 403 Forbidden Errors&lt;/a&gt;》和《&lt;a href="http://forums.digitalpoint.com/showthread.php?t=206600&amp;amp;page=2"&gt;Is Dreamhost support stupid or am i missing something?&lt;/a&gt;》。&lt;br /&gt;&lt;br /&gt;一看才知道，果然是DreamHost干的，他们刻意在一些客户的根目录的.htaccess文件中加入&lt;br /&gt;&lt;blockquote&gt;&amp;lt;limit&amp;gt;&lt;br /&gt;order allow,deny&lt;br /&gt;deny from 66.249&lt;br /&gt;&amp;lt;/limit&amp;gt;&lt;/blockquote&gt;&lt;code&gt;&lt;/code&gt;服务器有过多的GoogleBot访问造成压力，临时做些解决方案，暂时封锁GoogleBot倒是不稀奇的。但是，一来，做这个操作完全不通知客户，太不负责任；二来，我那哥们的blog已经很久不能被Google访问了，看来DreamHost的如意算盘是如果客户不知道，就这么一辈子节省流量，反正客户发现Google不收录，多半以为自己有什么操作过分了，或者直接以为Google抽风了。&lt;br /&gt;&lt;br /&gt;So，DreamHost的行为是故意的，而且完全不考虑客户的利益和感受，十分卑鄙，值得鄙视，不值得推荐。另外，DreamHost中国人用得极多，容易被GFW，也不值得被推荐。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/DreamHost" rel="tag"&gt;DreamHost&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/htaccess" rel="tag"&gt;htaccess&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/3410332674203295449/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=3410332674203295449' title='10 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3410332674203295449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3410332674203295449'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2008/03/dreamhost.html' title='DreamHost值得推荐吗？我看不值得！'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-5284106712390311104</id><published>2007-12-28T01:40:00.001+08:00</published><updated>2008-06-26T01:48:19.890+08:00</updated><title type='text'>程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰</title><content type='html'>原文：&lt;a href="http://www.tinydust.net/prog/diary/2007/12/blog-post.html" title="external link"&gt;程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最近，有两位&lt;a href="http://www.codechina.org/doc/google/gmapapi/"&gt;Google Maps API&lt;/a&gt;的初学者向我请教他们按照最简单例子写的程序为什么不能正常的运行。&lt;br /&gt;&lt;br /&gt;其中一位用GTalk跟我交流，我仔细了看了他的代码，没看出问题，把代码保存在本地，打开Firefox的错误控制台，用Firefox打开他的页面。出错的那一行被清晰的显示出来，我再仔细端详那句话，原来有两个应该是英文逗号的地方，写上了中文逗号。&lt;br /&gt;&lt;br /&gt;另一位，&lt;a href="http://www.codechina.org/bbs/thread-10-1-1.html"&gt;在我的论坛跟我交流他的Google Maps API中遇到的问题&lt;/a&gt;，我看他代码的时候也没有马上发现问题。然而，同样在用Firefox打开后，问题很明显的找到了，原来是一个方法openInfoWindow被他写成OpenInfoWindow了。&lt;br /&gt;&lt;br /&gt;在我帮助别人解决的程序调试问题中，这是非常常见的。人人都可能打出中文逗号，人人都可能把大小写写错。但是在我帮助他们解决问题以后，他们总是感慨的说，谢谢我解决了这个问题，这个问题困扰了他们几个小时，甚至是几天。&lt;br /&gt;&lt;br /&gt;这其实并不是只有初学者才会遇到的问题，我还帮助过些有非常丰富经验的工程师解决问题，有时候问题仅仅出自某个参数没有传递进来，或者是拼接字符串的时候少些了一个冒号，或者是拼接地址的时候漏掉了http:。我甚至帮助一些人调试一些我根本不懂的语言的程序，因为多半出现的问题，都和语言特性无关，不是程序员写错了字符，就是写错了逻辑，或者是错误理解了一个函数。&lt;br /&gt;&lt;br /&gt;出问题是正常的，写程序是一个复杂的边思考边打字的过程，笔误和一时糊涂都是难以避免的。程序员一般把这种问题叫做低级问题，因为这类问题跟你的智商完全无关，任何人都可能犯。&lt;br /&gt;&lt;br /&gt;但是，问题在于，有时候即使是很优秀的程序员，也会被一个低级错误困扰，可能会几天都解决不了。所以，关键在于，如何找到问题。&lt;br /&gt;&lt;br /&gt;遇到问题的时候：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;不要怨天怨地。&lt;/span&gt;出了问题，当然有可能是系统的bug，API的问题，但是那些几率往往比你犯低级错误的几率要低多了，先从自己身上找原因，是不是自己写错了。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;要掌握工具。&lt;/span&gt;最低限度你要会写Log，最好是Log和调试器结合。好 的工具可以大大的提高效率。以前有人跟我说，Dll不能调试，我发现可以；有人说多线程不能调试，我发现可以；有人说COM不能调试，我发现可以；有人说 IE插件不能调试，我发现可以；有人说OE插件不能调试，我发现也可以。当然，你确实会遇到不能调试的时候，当年我们做东芝芯片的嵌入程序，一个组都没有 一个仿真器和调试器，但是至少可以用Log嘛，无非是麻烦点。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;分析问题要有逻辑。&lt;/span&gt;遇到问题可以先把所有的可能性都列出来，然后一个一个分析，肯定能找到原因的。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;要学会隔离问题。&lt;/span&gt;问题涉及到的代码越多，越难以理解，问题越难以解决。遇到这样的情况，可以利用Log或者调试器，一行代码一行代码的给它们洗清嫌疑，这样很快你就可以找到出问题的地方。如果代码特别长，程序特别复杂，可以用二分法来做，效率很高。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;千万不要懒惰，不要事事求别人。&lt;/span&gt;一次复杂的调试过程就像一部侦探剧，如果你有非常好的逻辑性，那这部剧的主角就是福尔摩斯，剧情一定非常精彩。我说这个是有巨大风险的，说真的我帮人调东西挺上瘾的，很有意思。但是我还是要告诉大家，一次高难度的调试之后，你的满足感绝对不亚于写了一个伟大的程序。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;要想不遇到问题，写代码的时候：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;要对写出来的代码负责。&lt;/span&gt;我很佩服那些写代码写100行都不执行一次的 高手，如果他们最后不被低级错误困扰的话我就更加的佩服了。我写程序几乎是写一行两行就要执行一次，每句话我都要确保执行效果跟我的预期一致。没错这样写的时候 可能慢一些，但是调试的时候很轻松，我可以很简单的确定哪些代码绝对没有问题。所以我写代码整体速度比一般人高。很多人学习新东西的时候喜欢把例子抄一遍，运行一下，改改，再运行。我喜欢一句一句的抄例子，抄一句两句执行一次，这样可以把例子透彻的理解，而且很难会遇到出现了问题找不到原因的时候。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;函数体功能块不要过长。&lt;/span&gt;我认为我的智商并不高，我很难接受一个程序的一个函数体或者一个功能块超越3屏（当然逻辑真的有那么复杂除外，你会发现越是简单的逻辑越是容易被人写的冗长）。很多人对面向对象耳熟能详，对封装继承看起来驾轻就熟。但是动不动就写出来个函数体超长的程序。这就像写本书从头到尾不点句号一样，会累死读者的。自己看的时候，估计也会被累的喘不过来气。这是我对基础教育的微词所在，他们连教会学生写函数都没教会，虽然表面上他们连面向对象这么高深的东西都教。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;缩进要对。&lt;/span&gt;这点很重要，虽然大部分语言不是像Python那样用缩进来决定逻辑块的位置，但是人看到缩进的时候，总是会以为这些缩进位置跟逻辑相关。尤其是在有大量的ifelse或者for循环等等的嵌套逻辑的时候，如果缩进错了，可能会直接让人把程序的逻辑读错。所以我拿到别人的代码，第一件事情就是整理缩进。我见过一些比较优秀的页面工程师，他们会在div结束的位置用注释写上这个div的id，这样层级关系就一目了然了。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;不断重构。&lt;/span&gt;随着程序的不断修改，有些部分会不断的增长，原来看着清晰的架构可能因为问题的复杂而慢慢模糊，也可能被修正bug的权宜之计弄的面目全非。不信你找一个经过多次修改的程序看看，是不是满目疮痍，是不是都很难认出是你自己的作品了。这在多人参与的项目中更加严重，每个人有不同的代码风格，经过多次杂交后，你肯定认不出你的代码是骡子是马，还是四不像了。随着程序的慢慢成长，原来有些函数体会慢慢膨胀，需要拆分；有些原来简单的功能块四处都需要，应该被提炼成函数或者方法，等等。现在不重构，未来等到代码复杂到无法控制的时候，重构的工作就会变得更加困难。我见过最强的案例是，一个几千行的电子辞典配套联机软件，经过无数次的改版，变成了一个几乎无法维护的主窗体的cpp有1万8千行的怪物。最后经过复杂的重构，才变成一个出新版本只需要新增一个驱动程序的可以维护的几千行的程序。这个故事详见：&lt;a href="http://www.tinydust.net/prog/diary/2004/09/blog-post_27.html" title="external link"&gt;一个具体项目的重构（一）&lt;/a&gt; ，&lt;a href="http://www.tinydust.net/prog/diary/2005/10/blog-post.html" title="external link"&gt;一个具体项目的重构（二）&lt;/a&gt;，&lt;a href="http://www.tinydust.net/prog/diary/2005/10/blog-post_30.html" title="external link"&gt;一个具体项目的重构（三）&lt;/a&gt;。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/log" rel="tag"&gt;log&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/调试" rel="tag"&gt;调试&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/重构" rel="tag"&gt;重构&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/5284106712390311104/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=5284106712390311104' title='5 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/5284106712390311104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/5284106712390311104'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/12/blog-post.html' title='程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-3358139254851316571</id><published>2007-12-22T18:30:00.001+08:00</published><updated>2008-06-26T01:44:40.549+08:00</updated><title type='text'>对Java处理XML性能的比较（DOM和SAX）</title><content type='html'>测试数据是结构很简单的一个20M的XML文档，里面的数据来自我的一个项目。测试程序很简单，就是读取这个XML文件，把里面的链接写入到一个文本文件。然后把数据原样重复了一遍，然后又测试了一次，下面是测试结果。&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table style="width: 427px; height: 128px;" id="qjtg" border="1" bordercolor="#000000" cellpadding="3" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color: rgb(102, 204, 204);" width="20%"&gt;&lt;strong&gt;方法&lt;/strong&gt;&lt;/td&gt;&lt;td style="background-color: rgb(102, 204, 204);" width="20%"&gt;&lt;b&gt;数据大小&lt;/b&gt;&lt;/td&gt;&lt;td style="background-color: rgb(102, 204, 204);" width="20%"&gt;&lt;b&gt;内存峰值&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;&lt;td style="background-color: rgb(102, 204, 204);" width="20%"&gt;&lt;b&gt;CPU峰值&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;&lt;td style="background-color: rgb(102, 204, 204);" width="20%"&gt;&lt;b&gt;耗时&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;SAX&lt;/td&gt;        &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;20M&lt;br /&gt;&lt;/td&gt;        &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;20M&lt;br /&gt;&lt;/td&gt;        &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;30%&lt;br /&gt;&lt;/td&gt;        &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;142秒&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;          &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;DOM&lt;br /&gt;&lt;/td&gt;          &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;20M&lt;br /&gt;&lt;/td&gt;          &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;152M&lt;br /&gt;&lt;/td&gt;          &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;100%&lt;br /&gt;&lt;/td&gt;          &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;171秒&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;            &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;SAX&lt;br /&gt;&lt;/td&gt;            &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;40M&lt;br /&gt;&lt;/td&gt;            &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;20M&lt;br /&gt;&lt;/td&gt;            &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;30%&lt;br /&gt;&lt;/td&gt;            &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;290秒&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;              &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;DOM&lt;br /&gt;&lt;/td&gt;              &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;40M&lt;br /&gt;&lt;/td&gt;              &lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;345M&lt;br /&gt;&lt;/td&gt;&lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;100%&lt;br /&gt;&lt;/td&gt;&lt;td style="background-color: rgb(255, 255, 255);" width="20%"&gt;376秒&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;表1 SAX和DOM的性能比较&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;结论：SAX的内存消耗稳定，CPU占用率低，耗时短，大数据量XML的简单处理一定首选SAX。DOM的性能受到内存的严重影响，内存消耗受到数据量的影响，大数据量XML的读处理最好不要用DOM。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/dom" rel="tag"&gt;dom&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/sax" rel="tag"&gt;sax&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/xml" rel="tag"&gt;xml&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/3358139254851316571/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=3358139254851316571' title='6 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3358139254851316571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3358139254851316571'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/12/javaxmldomsax.html' title='对Java处理XML性能的比较（DOM和SAX）'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-3416269519340099920</id><published>2007-11-12T03:50:00.001+08:00</published><updated>2008-06-26T01:47:24.754+08:00</updated><title type='text'>我最近关于Google Maps API的几篇文章</title><content type='html'>最近，因为做了一个讲座，感受到了大家对&lt;a href="http://www.codechina.org/doc/google/gmapapi/"&gt;Google Maps API&lt;/a&gt;的热情，我又开始比较勤奋的更新我&lt;a href="http://www.tinydust.net/gmapblogcn/"&gt;Google Maps Api中文非官方Blog&lt;/a&gt;，希望给对Google Maps API感兴趣的朋友更多帮助。&lt;br /&gt;&lt;br /&gt;最近更新的文章有：&lt;br /&gt;&lt;a href="http://www.tinydust.net/gmapblogcn/2007/11/google-maps-api.html" title="external link"&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tinydust.net/gmapblogcn/2007/11/google-maps-api.html" title="external link"&gt;如何在Google Maps API中使用谷歌地图的数据&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tinydust.net/tinygoogle/2007/11/google-maps-apiadsense.html" title="external link"&gt;地图盈利之道──Google Maps API中的Adsense&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;翻译的文章有：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tinydust.net/gmapblogcn/2007/11/googlebar.html" title="external link"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;[翻译]对GoogleBar的介绍&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tinydust.net/gmapblogcn/2007/11/phpmysql.html" title="external link"&gt;[翻译]呼叫所有的PHP/MySQL开发者：这里有给你们的例子代码&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;也欢迎大家订阅&lt;a href="http://www.tinydust.net/gmapblogcn/"&gt;Google Maps Api中文非官方Blog&lt;/a&gt;，订阅地址是&lt;a href="http://feeds.feedburner.com/GoogleMapsApiblog"&gt;http://feeds.feedburner.com/GoogleMapsApiblog&lt;/a&gt;。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/google maps api" rel="tag"&gt;google maps api&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/3416269519340099920/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=3416269519340099920' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3416269519340099920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3416269519340099920'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/11/google-maps-api.html' title='我最近关于Google Maps API的几篇文章'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-3820302733240779779</id><published>2007-11-02T10:14:00.001+08:00</published><updated>2008-06-26T01:36:19.437+08:00</updated><title type='text'>10月27日Google Maps API讲座PPT下载</title><content type='html'>上周六，也就是10月27日，应&lt;a href="http://www.csdn.net/"&gt;CSDN&lt;/a&gt;之邀做了&lt;a href="http://news.csdn.net/n/20071022/109822.html"&gt;一个Google Maps API的简单讲座&lt;/a&gt;。讲得很粗，一方面是我的准备有点仓促（最近对Hadoop/&lt;a href="http://www.tinydust.net/prog/diary/2006/06/mapreduce-google.html"&gt;Mapreduce&lt;/a&gt;太着迷，一天到晚的在研究），一方面是我对下面听众的JavaScript应用水平不甚了解，再有一方面，我觉得&lt;a href="http://www.codechina.org/doc/google/gmapapi/"&gt;Google Maps API&lt;/a&gt;实际上太简单，而且概念少，代码多，讲座的形式不太好交流（下面的听众都说看不请投影的代码，这我可怎么办）。&lt;br /&gt;&lt;br /&gt;但是还是承蒙很多听众的厚爱，写信跟我索要讲座的ppt，我本无藏私之念，只是总是觉得自己的东西写得太粗陋进不得高人的法眼，所以没有把&lt;a href="http://www.zmap.org/"&gt;ZMap&lt;/a&gt;开源。这次讲座，我把ZMap的核心代码全盘拖出，心中释然，丑已经丢了，就不畏惧开源了，这个事情总算可以放到议事日程里了。但是，诚心请求直接扒ZMap的JavaScript代码的朋友们，注意把我的Google统计代码去掉，这多让人啼笑皆非啊。&lt;br /&gt;&lt;br /&gt;ppt的下载地址为：&lt;a href="http://www.zmap.org/temp/ppt.zip"&gt;http://www.zmap.org/temp/ppt.zip&lt;/a&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/csdn" rel="tag"&gt;csdn&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/google maps api" rel="tag"&gt;google maps api&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/ppt" rel="tag"&gt;ppt&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/zmap" rel="tag"&gt;zmap&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/3820302733240779779/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=3820302733240779779' title='4 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3820302733240779779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3820302733240779779'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/11/1027google-maps-apippt.html' title='10月27日Google Maps API讲座PPT下载'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-1892996633355701408</id><published>2007-10-07T05:19:00.001+08:00</published><updated>2008-06-26T01:51:52.925+08:00</updated><title type='text'>为自己设定一个极限是愚蠢的行为</title><content type='html'>最近一段日子的深夜或者凌晨，我总是在美剧的陪伴下仔细阅读和翻译&lt;a href="http://www.codechina.org/doc/google/gfs-paper/"&gt;《Google文件系统》的论文&lt;/a&gt;。翻译我做得不够完美，甚至谈不上好，但是这份工作带来的巨大的得道般的满足感一直支撑着我，让我不觉得疲倦。这本是我觉得自己不可能读懂的文档，但是真正深入的时候，我发现阅读它令我很快乐。&lt;br /&gt;&lt;br /&gt;倒推10个月，在我和&lt;a href="http://blog.devep.net/virushuo/"&gt;霍炬&lt;/a&gt;创办&lt;a href="http://www.yinxingtech.com/"&gt;银杏技术咨询&lt;/a&gt;之前，我一直认为自己的性格不适合创业。但是现在我们用10个月良好的收入状况和日益增长的口碑，证明了我的论断是错误的。&lt;br /&gt;&lt;br /&gt;再倒推到我的大学时代，我曾经认为自己会永远仅是一个VB高手。事实上后来，我轻松的学会了Asp，用它在大学赢了一个网站设计比赛，轻松学会BCB用它找了我职业生涯的前两个工作，轻松学会了Vc开发了365kit的outook插件，等等。而VB几乎已经7-8年没怎么用过了。&lt;br /&gt;&lt;br /&gt;甚至，在某次刻骨铭心的恋爱失败后，6年中我以为自己会孤独一生，但我现在还是找到了相信可以步入结婚殿堂的人。&lt;br /&gt;&lt;br /&gt;每次回想到这些，还有其他的一些另我自己唏嘘的往事，发现原来阻碍自己进步的，往往不是自己的能力和机遇，而是自己给自己设置的极限，而是自己以为的自己可以做到的最高点。&lt;br /&gt;&lt;br /&gt;记得好像是&lt;a href="http://www.luanxiang.org/"&gt;李卫公同志&lt;/a&gt;哪篇blog提过龟兔佯谬，话说是只有学了极限才能最好的理解这个问题的实质。其实，这个有问题有个思维逻辑上面的解决方法，那就是你把过程抛弃，直接看N秒后，按速度×时间，很容易算出兔子一定在乌龟前面。&lt;br /&gt;&lt;br /&gt;那么中间是怎么超越的呢，可以给出的一个简单的答案是，如果你太关心怎么超越的细节，你可能就真的很难超越了。So，把对手先隐去，跑吧！&lt;br /&gt;&lt;br /&gt;所以，最好的对手是自己，最好的目标是无限远处……&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/极限" rel="tag"&gt;极限&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/目标" rel="tag"&gt;目标&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/1892996633355701408/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=1892996633355701408' title='4 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/1892996633355701408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/1892996633355701408'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/10/blog-post.html' title='为自己设定一个极限是愚蠢的行为'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-7433080176343394424</id><published>2007-08-16T02:13:00.001+08:00</published><updated>2008-06-26T01:38:01.373+08:00</updated><title type='text'>错误信息org.xml.sax.SAXParseException:Parser has reached the entity expansion limit "64,000" set by the Application.啥意思？</title><content type='html'>最近一个处理非常大的XML的程序遭遇了如下的异常：&lt;br /&gt;&lt;br /&gt;org.xml.sax.SAXParseException:Parser has reached the entity expansion limit "64,000" set by the Application.&lt;br /&gt;&lt;br /&gt;查了查，原来是在单个xml文件中实体引用超过了默认值64000个。你用dom和sax解析XML都可能会遇到这个问题，这印证了我的猜测，java的dom是用sax来实现的。&lt;br /&gt;&lt;br /&gt;解决方法很简单，运行Java的时候，加上参数&lt;span style="color: rgb(0, 0, 173);"&gt;-DentityExpansionLimit=xxxxx&lt;/span&gt;，你也可以在代码中解析XML前，用代码设置这个参数&lt;span style="color: rgb(255, 0, 0);"&gt;System.setProperty("entityExpansionLimit", "xxxxx");&lt;/span&gt;。xxxxx代表设定的单文件实体引用数最大值。&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;&lt;br /&gt;那么这个xxxxx该怎么选择呢？&lt;br /&gt;&lt;br /&gt;其实也很简单，选择你认为可能出现的最大值就好了，比你的文件里面的实体数多，自然就没问题了。&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;&lt;br /&gt;那么如果你想知道某个文件里面有多少个实体引用该怎么办呢（放心我肯定不建议你去数）？&lt;br /&gt;&lt;br /&gt;对，也很简单，首先我们知道实体引用都是“&amp;"开头“;”结尾，所以我们可以用如下命令来计算：&lt;br /&gt;&lt;br /&gt;grep -c "&amp;.*;" yourfile.xml&lt;br /&gt;&lt;br /&gt;其实，&amp;在xml里表示为&amp;amp;的形式，所以，一个合法的xml内，有多少&amp;就有多少实体引用，so，上面的命令效率更高的版本是：&lt;br /&gt;&lt;br /&gt;grep -c "&amp;amp;" yourfile.xml&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;&lt;br /&gt;为什么会对最大的实体引用数做出限制呢？这点我有些疑惑，难道要为解析实体引用准备缓存空间？但是做出来自动增长的缓存也不是不可能的啊。DentityExpansionLimit参数的问题是，如果要处理无法预期大小的xml文件怎么办？你设置为100万，xml文件里面有200万个实体引用，你有办法么？&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/DentityExpansionLimit" rel="tag"&gt;DentityExpansionLimit&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/dom" rel="tag"&gt;dom&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/java异常" rel="tag"&gt;java异常&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/sax" rel="tag"&gt;sax&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/SAXParseException" rel="tag"&gt;SAXParseException&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/xml" rel="tag"&gt;xml&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/7433080176343394424/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=7433080176343394424' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/7433080176343394424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/7433080176343394424'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/08/orgxmlsaxsaxparseexceptionparser-has.html' title='错误信息org.xml.sax.SAXParseException:Parser has reached the entity expansion limit &quot;64,000&quot; set by the Application.啥意思？'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-8484593580135580273</id><published>2007-07-27T02:23:00.001+08:00</published><updated>2008-06-26T01:39:14.559+08:00</updated><title type='text'>Java网络服务如何能长时间稳定运行呢？</title><content type='html'>今天，把Code里面的e.printStackTrace全部用自己的log函数替换掉了，因为貌似System.out.println很浪费时间，而且大量的异常输出到控制台会降低程序的稳定性。&lt;br /&gt;&lt;br /&gt;我们的项目里面需要一个webserver，但是我实在对Jsp+Tomcat的性能不放心，自己写了一个非常精简的webserver。性能我很满意，用ab进行测试，速度可以跟同台服务器上lighttpd静态文件的速度媲美。&lt;br /&gt;&lt;br /&gt;在每日访问量10万以内的情况下，服务两个星期左右会产生一次锁死，kill也无法关闭进程。只有利用kill -9才能关闭进程。说实话，这种锁死频率倒还可以接受。然而在每日访问量峰值达到20万的时候，高峰日可能会有2-3次的锁死，这让我很挠头。我想了很多办法，还是没有明显的改善。&lt;br /&gt;&lt;br /&gt;今天去掉了e.printStackTrace，希望明天webserver的稳定性可以提高。&lt;br /&gt;&lt;br /&gt;有对这方面经验丰富的朋友么？请告诉我Java网络服务如何能长时间稳定运行呢？谢谢！&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/java" rel="tag"&gt;java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/log" rel="tag"&gt;log&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/printStackTrace" rel="tag"&gt;printStackTrace&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/System.out.println" rel="tag"&gt;System.out.println&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/webserver" rel="tag"&gt;webserver&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/8484593580135580273/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=8484593580135580273' title='5 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/8484593580135580273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/8484593580135580273'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/07/java.html' title='Java网络服务如何能长时间稳定运行呢？'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-7935201695196713462</id><published>2007-07-23T11:28:00.001+08:00</published><updated>2008-06-26T01:01:18.019+08:00</updated><title type='text'>正式发布Google混搭编辑器(Google Mashup Editor)中文文档</title><content type='html'>查看地址：            &lt;a href="http://www.codechina.org/doc/google/gme/"&gt;Google混搭编辑器(Google Mashup Editor)中文文档&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codechina.org/doc/google/gme/index.html"&gt;Google混搭编辑器(Google Mashup Editor)&lt;/a&gt;是一套用来开发混搭应用的Web开发工具，它是一套函数库，也是一个IDE。不管你的应用本身多复杂，用了多高深的技术，值得庆幸的的是我们有Rss/ATOM，利用他们我们可以举重若轻的把不同公司，不同利益集团的产品粘合在一起，创造新的视角，新的应用模式。这就是&lt;a href="http://www.codechina.org/doc/google/gme/index.html"&gt;Google混搭编辑器(Google Mashup Editor)&lt;/a&gt;的意义。&lt;br /&gt;&lt;br /&gt;为了便于国内的开发者使用Google混搭编辑器(Google Mashup Editor)，我在学习过程中制作了&lt;a href="http://www.codechina.org/doc/google/gme/index.html"&gt;这个中文文档&lt;/a&gt;，完全翻译了&lt;a href="http://www.codechina.org/doc/google/gme/index.html"&gt;产品概述&lt;/a&gt;和&lt;a href="http://www.codechina.org/doc/google/gme/gettingstarted.html"&gt;入门指南&lt;/a&gt;两个部分，因为这两个部分可以让你充分了解&lt;a href="http://www.codechina.org/doc/google/gme/index.html"&gt;Google混搭编辑器(Google Mashup Editor)&lt;/a&gt;的思想和用法。标签参考文档、操作数据、过滤数据、事件处理以及JavaScript API，留待日后慢慢翻译完善。&lt;br /&gt;&lt;br /&gt;之前，我还翻译了Google Maps API的文档，地址在&lt;a href="http://www.codechina.org/doc/google/gmapapi/"&gt;Google Maps API中文同步文档&lt;/a&gt;。欢迎有兴趣的朋友查看。&lt;br /&gt;&lt;br /&gt;今后的翻译计划是            &lt;a href="http://code.google.com/apis/ajaxsearch/"&gt;Google AJAX Search API&lt;/a&gt;文档和            &lt;a href="http://code.google.com/apis/ajaxfeeds/"&gt;Google AJAX Feed API&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/ajax" rel="tag"&gt;ajax&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/ document" rel="tag"&gt; document&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/ feed" rel="tag"&gt; feed&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/ maps" rel="tag"&gt; maps&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/ Mashup" rel="tag"&gt; Mashup&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/ search" rel="tag"&gt; search&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/7935201695196713462/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=7935201695196713462' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/7935201695196713462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/7935201695196713462'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/07/googlegoogle-mashup-editor.html' title='正式发布Google混搭编辑器(Google Mashup Editor)中文文档'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-7168660676967388502</id><published>2007-07-15T18:34:00.001+08:00</published><updated>2008-06-26T01:46:32.300+08:00</updated><title type='text'>[搜索引擎友好之路]搜索引擎优化常见问题与回答</title><content type='html'>[搜索引擎友好之路]是我准备写的一本书，现在大部分网站都有丰富的内容，但是他们为了得到流量去尝试那些搜索引擎作弊方法，往往是一时得到好处，最后被搜索引擎屏蔽。我们倡导的与搜索引擎友好的优化方式就是试图更好的展现你的内容，达到网站和搜索引擎共赢的局面。下面的问题是一次去给客户做培训后，客户提出的问题和我们的回答。&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;   1、程序生成很多的静态内容链接自己，算不算作弊？ &lt;/h3&gt;     一个行为算不算作弊，主要是度的问题。生成很多垃圾的静态内容（采集来的，胡乱生成的），只要达到一定的量，一般是会被判定为内容重复或者作弊的，可能会 被降低权重或者删除索引。实际上我们知道现在很多网站自己的内容很丰富，把自己的内容展现好了，就会带来很多好处，不需要去胡乱采集。&lt;br /&gt;&lt;h3&gt;   2、flash对网站收录的影响 &lt;/h3&gt;     flash本身没有任何不好的影响。而常见的错误的行为是对flash的滥用。&lt;br /&gt;  比如，整站全部用flash，设计者或者唯界面论者可能会这么做。其实这样并不好，第一是速度往往会很慢，而且有可能会长时间等待；第二是干扰用户习惯， 很多人打着提高用户感受的旗号去滥用flash，那样做出来的作品，如果说欣赏或者只是试用往往还不错，长期使用用户往往忍受不了；第三是整站所有的内容 无法被搜索引擎收录。&lt;br /&gt;  还有很常见的滥用是内容页面很丰富，但是首页只有一个flash而没有任何文本链接可以帮助用户进入下一级页面。这类问题往往出现在一些大公司的网站中。 虽然确实很美观，但是问题也很多。第一也是速度，网民多数没有耐心，看到一个长长的loading条就会迅速离开；第二，如果用户不安装flash插件， 就无法看到首页，从而无法进入本无需flash的内容页；第三，搜索引擎无法穿过首页去访问后面的页面。所以我们会发现很多公司的网站pagerank很 高，但是内容页面完全没有pagerank。所以在搜索引擎搜索产品名字，往往是第三方的网站排在前面。这类网站最好在下端放一个二级栏目的导航条，至少 也要放一个“点击这里跳过flash直接进入内容”的链接。&lt;br /&gt;&lt;h3&gt;   3、no script有用么？ &lt;/h3&gt;     当然有用。现在很多网站喜欢用Javascript特殊效果或者Ajax，这本身没并不是问题。但是，如果用Javascript来显示网站的导航，就有 两个问题，第一，对于不打开Javascript的用户，他们无法进入网站的内部；第二，搜索引擎往往无法收录Javascript展现的链接。no script可以解决这个问题。&lt;noscript&gt;&lt;/noscript&gt;包含在 noscript标记内的代码会在不打开Javascript的用户的浏览器上面展现，搜索引擎也可以从中获取导航信息。&lt;br /&gt;  但是，最好的选择还是，导航本身使用标准HTML代码，导航的特殊效果用css和Javascript实现。以后我们会有专门的文章阐述Ajax网站如何进行搜索引擎优化。&lt;br /&gt;&lt;h3&gt;   4、更新频率应该多高才适合？ &lt;/h3&gt;     更新频率理论上当然是越快越好，但是并不推荐没有内容胡乱更新。现在大部分网站的内容都很丰富，更新频率已经足够了。&lt;br /&gt;&lt;h3&gt;   5、js生成的更新，能不能被收录？ &lt;/h3&gt;     跟Javascript有关的问题，答案其实都一样，用Javascript生成的链接，大部分搜索引擎的爬虫不会去抓取，自然也就不会被收录了。&lt;br /&gt;&lt;h3&gt;   6、不愿和外部网站交换链接会有什么影响？ &lt;/h3&gt;     不愿意交换链接自然对Pagerank有不好的影响。但是如果你的内容确实好，自然会有用户主动链接你的页面，这样你的PageRank自然会得到提高。&lt;br /&gt;&lt;h3&gt;   7、抓外站新闻对SEO有用么？ &lt;/h3&gt;     用处不大，抓外站新闻得到的内容实际上都是所谓的重复内容，价值并不高。&lt;br /&gt;&lt;h3&gt;   8、和外站交换链接，放什么位置重要么？ &lt;/h3&gt;     重要，当然是Pagerank越高的页面越好，位置越前越好。&lt;br /&gt;&lt;h3&gt;   9、大型网站会给其他网站做链接么？要多少钱？ &lt;/h3&gt;     交换链接一般是双赢，所以只要你的网站质量达到一定水平，交换链接并不难。一般不要钱，要钱的反而需要警惕，这是搜索引擎禁止的行为。&lt;br /&gt;&lt;h3&gt;   10、在网站中，同一级的页面，是PageRank越高，抓取频率越高么？ &lt;/h3&gt;     对，Pagerank、整站信用级别和页面更新频率共同影响抓取频率，所以Pagerank越高抓取频率越高。&lt;br /&gt;&lt;h3&gt;   11、Robot.txt对SEO有什么影响？ &lt;/h3&gt;     Robot.txt很有价值，但是一般被站长低估和误解。很多人认为只有防止搜索引擎技术抓取的时候才有用。但是实际上正确使用Robot.txt对 SEO很有好处，比如重复内容用不同形式表现是经常需要的，而这种情况很容易被搜索引擎判定为重复内容堆砌。正确利用Robot可以引导搜索引擎只收录首 选内容这样就不会有作弊嫌疑了。（参见：google网站管理员blog的文章“&lt;a href="http://www.googlechinawebmaster.com/%e5%b7%a7%e5%a6%99%e5%9c%b0%e5%a4%84%e7%90%86%e5%86%85%e5%ae%b9%e5%a4%8d%e5%88%b6/" rel="bookmark" title="到“巧妙地处理内容重复”的永久链接"&gt;巧妙地处理内容重复&lt;/a&gt;”）&lt;br /&gt;  除了处理重复外，Yahoo允许你在Robot.txt文件里面用Crawl-delay:参数设定抓取频率（参看：&lt;a href="http://ysearchblog.cn/2006/07/yahoo_slurp.html" target="_blank"&gt;如何控制Yahoo! Slurp蜘蛛的抓取频度&lt;/a&gt;）。Sitemap协议支持你在Robot.txt文件里填写Sitemap参数（参看：&lt;a name="submit_robots"&gt;&lt;/a&gt;&lt;a title="Specifying the Sitemap location in your robots.txt file" href="http://www.sitemaps.org/zh_CN/protocol.php#submit_robots"&gt;Specifying the Sitemap location in your robots.txt file&lt;/a&gt;）。&lt;br /&gt;&lt;h3&gt;   12、二级域名能有多大的好处？&lt;/h3&gt;    好处不大，如果用户喜欢的话，就用吧。&lt;br /&gt;&lt;h3&gt;   13、用户页面的url，用文字还是数字好？&lt;/h3&gt;    如果用户名不允许中文，那么文字比较好，虽然汉字也可以用在url中，但是总是有些浏览器的支持不够好。如果用户名允许中文，就用数字吧。基本上这不是一个很重要的选择，虽然搜索引擎技术也会把url里面的文字当作可被查询的内容。&lt;br /&gt;&lt;h3&gt;   14、flash meta data对SEO有何影响？&lt;/h3&gt;    未来可能很重要，但是现在应该还没有多少搜索引擎支持这项技术。&lt;br /&gt;&lt;h3&gt;   15、爬虫有没有关于Ajax的抓取计划？&lt;/h3&gt;    Googlebot也就是Google的标准蜘蛛，是不支持Javascript的。但是Mediapartners-Google也就是Google Adsense的爬虫，实际上是支持Javascript的。这也就是说技术层面考虑支持Javascript并不是一个问题。但是限于效率和任务优先级 的考虑，Google暂时还没打算让标准蜘蛛Googlebot支持Javascript。&lt;br /&gt;  百度的爬虫支持一部分Javascript，但是由于技术和效率的限制，相信百度也不能抓取100%的Javascript内容。&lt;br /&gt;&lt;h3&gt;   16、在js代码中放url有用么？ &lt;/h3&gt;     答案显而易见，没用。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.devep.net/virushuo/"&gt;Virushuo对本文亦有贡献&lt;/a&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/flash" rel="tag"&gt;flash&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/noscript" rel="tag"&gt;noscript&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Pagerank" rel="tag"&gt;Pagerank&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Robot.txt" rel="tag"&gt;Robot.txt&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/seo" rel="tag"&gt;seo&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/搜索引擎优化" rel="tag"&gt;搜索引擎优化&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/搜索引擎友好" rel="tag"&gt;搜索引擎友好&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/7168660676967388502/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=7168660676967388502' title='9 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/7168660676967388502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/7168660676967388502'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/07/blog-post.html' title='[搜索引擎友好之路]搜索引擎优化常见问题与回答'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-160529372777040414</id><published>2007-06-17T21:18:00.001+08:00</published><updated>2008-06-26T01:33:24.555+08:00</updated><title type='text'>在CSDN与David Intersimone同志的合影</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/chinapodcast/559863304/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1421/559863304_704e51f920.jpg" alt="在CSDN与David Intersimone同志的合影" height="333" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;相关：&lt;a href="http://www.tinydust.net/prog/diary/2007/06/csdndavid-iborland-code-gear.html" title="external link"&gt;CSDN举行的David I见面会(borland-&gt;code gear)&lt;/a&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/borland" rel="tag"&gt;borland&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/codegear" rel="tag"&gt;codegear&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/csdn" rel="tag"&gt;csdn&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/David" rel="tag"&gt;David&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Intersimone" rel="tag"&gt;Intersimone&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/tinyfool" rel="tag"&gt;tinyfool&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/160529372777040414/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=160529372777040414' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/160529372777040414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/160529372777040414'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/06/csdndavid-intersimone.html' title='在CSDN与David Intersimone同志的合影'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-1678914051122053149</id><published>2007-06-15T09:31:00.001+08:00</published><updated>2008-06-26T01:36:40.826+08:00</updated><title type='text'>CSDN上我的专访</title><content type='html'>&lt;a href="http://news.csdn.net/n/20070614/105339.html"&gt;专访郝培强：两周精通Python的技术达人&lt;br /&gt;http://news.csdn.net/n/20070614/105339.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;题目比较狂，呵呵，下面骂声一篇，还好我脸皮厚，也不觉得什么。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/csdn" rel="tag"&gt;csdn&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/tinydust" rel="tag"&gt;tinydust&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/tinyfool" rel="tag"&gt;tinyfool&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/郝培强" rel="tag"&gt;郝培强&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/1678914051122053149/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=1678914051122053149' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/1678914051122053149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/1678914051122053149'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/06/csdn.html' title='CSDN上我的专访'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-3634742894373428017</id><published>2007-06-01T15:20:00.001+08:00</published><updated>2008-06-26T01:34:50.693+08:00</updated><title type='text'>CSDN举行的David I见面会(borland-&gt;code gear)</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/chinapodcast/524513940/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/217/524513940_50d7e0499d.jpg" alt="CSDN举行的David I见面会(borland-&amp;gt;code gear)" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/chinapodcast/524516910/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/210/524516910_251fdd70e4.jpg" alt="CSDN举行的David I见面会(borland-&amp;gt;code gear)" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/chinapodcast/524525662/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/253/524525662_eb87d2b125.jpg" alt="CSDN举行的David I见面会(borland-&amp;gt;code gear)" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;我提的问题是：&lt;br /&gt;1、在我看来Borland曾经的危机，主要来自于产品过渡绑定于Windows平台，而这个平台的控制者也在做开发工具生意。请问Code Gear认同这个观点么？&lt;br /&gt;2、基于前面的看法，我认为Code Gear想要发展壮大，应该努力让自己的产品不在依赖于单一平台。而且刚才David I谈到了两点，Code Gear百分之百关注开发者，以及Code Gear开始关注web开发者。基于这个观点，我认为Code Gear更需要努力扩展到更多的平台。因为Php的开发者/Ruby on rails开发者中非Windows平台的开发者比例都是比较高的。我个人就是一个例子，自从把个人主要技术方向转移到Web方向后，立刻就买了一个MacBook。请问David I怎么看这点？&lt;br /&gt;&lt;br /&gt;他的回答太长了，我记不住，所以等到Csdn出了新闻稿，我再贴出来。&lt;br /&gt;大意是：&lt;br /&gt;1、他不认为Borland曾经有了一场危机，只是Borland准备更加关注企业级应用，项目生命周期管理，而成立Code Gear是为了关注于开发者的需求。&lt;br /&gt;2、太长了，实在记不住。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/borland" rel="tag"&gt;borland&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/code gear" rel="tag"&gt;code gear&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/csdn" rel="tag"&gt;csdn&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/David" rel="tag"&gt;David&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/3634742894373428017/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=3634742894373428017' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3634742894373428017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3634742894373428017'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/06/csdndavid-iborland-code-gear.html' title='CSDN举行的David I见面会(borland-&gt;code gear)'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-117776474249190782</id><published>2007-04-24T00:51:00.000+08:00</published><updated>2007-04-24T00:56:12.982+08:00</updated><title type='text'>4月24日 优酷星期二活动主题：虚拟现实技术在web 3D上的应用</title><content type='html'>貌似比较有意思，有兴趣的朋友可以考虑参加，地点和联系方式如下：&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/chinapodcast/470112301/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/221/470112301_d54488a0a0_o.jpg" alt="优酷星期二" height="740" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/117776474249190782/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=117776474249190782' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/117776474249190782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/117776474249190782'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/04/424-web-3d.html' title='4月24日 优酷星期二活动主题：虚拟现实技术在web 3D上的应用'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-8699542495348313845</id><published>2007-04-13T05:15:00.001+08:00</published><updated>2008-06-26T01:35:30.514+08:00</updated><title type='text'>shell脚本批量更改文件扩展名(unix/linux/bsd)</title><content type='html'>此例为把.htm改为.html(红色部分为原扩展名和现扩展名)&lt;br /&gt;&lt;br /&gt;for i in *.&lt;span style="color: rgb(255, 0, 0);"&gt;htm&lt;/span&gt;;  do mv $i ${i%%\.*}.&lt;span style="color: rgb(255, 0, 0);"&gt;html&lt;/span&gt;; done&lt;br /&gt;&lt;br /&gt;#todo 先记录于此，有时间的时候再具体解释是怎么写出来的。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/bsd" rel="tag"&gt;bsd&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/linux" rel="tag"&gt;linux&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/shell" rel="tag"&gt;shell&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/unix" rel="tag"&gt;unix&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/8699542495348313845/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=8699542495348313845' title='6 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/8699542495348313845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/8699542495348313845'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/04/shellunixlinuxbsd.html' title='shell脚本批量更改文件扩展名(unix/linux/bsd)'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-8894422082016650230</id><published>2007-04-07T00:01:00.001+08:00</published><updated>2008-06-26T01:36:59.772+08:00</updated><title type='text'>CSDN 2007英雄大会印象</title><content type='html'>早晨8点多，我就出门坐300路从双井出发，只奔遥远的中关村方向而去。不是去上班（我和霍炬开的公司，我们都不坐班，平时在家或者各大小有无线网络覆盖的咖啡厅办公），不是去见客户，而是去参加CSDN 2007英雄大会。虽然我每天即使最晚8点半也起来了，但是，已经至少有半年，我没有在早晨11点之前离开过家了。&lt;br /&gt;&lt;br /&gt;会场在原来的天鸿科园，我在那里参加过很多IT方面的会议，几乎每次三楼的主会场人数至少都要超员一倍左右。而这次CSDN的英雄大会，主会场站着的人并不多。我想，程序员是多么散漫的人们啊，即使被称做了英雄，大家还是那么的不积极。&lt;br /&gt;&lt;br /&gt;然而最后我发现我错了，所有其他我参加的那些会议，虽然开幕的时候人山人海，但是两个演讲后，会场就会空置大半。但是这次CSDN的英雄大会，从9点半开幕，到下午结束，人始终是那么多。我想这能说明这个会凝聚力很大。&lt;br /&gt;&lt;br /&gt;凝聚力很大，一方面当然是要称赞CSDN这个活动搞的好啊；而另外一方面，就要批评CSDN同类活动搞的少了。很多朋友即使神交，网聊很久，没有这样的会往往也难得一见。这也就怪不得程序员们逮到了这种机会就三五成群神聊起来了。&lt;br /&gt;&lt;br /&gt;这样的活动，按我的想法，一个月搞一次都嫌少，呵呵。&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/csdn" rel="tag"&gt;csdn&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/英雄大会" rel="tag"&gt;英雄大会&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/8894422082016650230/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=8894422082016650230' title='4 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/8894422082016650230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/8894422082016650230'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/04/csdn-2007.html' title='CSDN 2007英雄大会印象'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-3758824730509897590</id><published>2007-02-23T12:54:00.001+08:00</published><updated>2008-06-26T01:49:18.762+08:00</updated><title type='text'>对lucene进行了一番性能测试</title><content type='html'>首先，我模仿lucene的Demo写了一个MakeIndex程序，其中也有类似Demo中的FileDocument类，分词采用的是IK_CAnalyzer 1.4。&lt;br /&gt;&lt;br /&gt;然后，我对IndexWriter的合并因子对索引速度的影响进行了测试，同时我也测试了内存索引和硬盘索引的速度差别。测试文档为两份，3838个文件和11500个文件。数据如下：&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://farm1.static.flickr.com/79/399466697_3f66fa9e31_o.png" /&gt;&lt;/div&gt;&lt;br /&gt;结论如下：&lt;br /&gt;&lt;blockquote style="color: rgb(255, 0, 0);"&gt;在需索引文件数不大的情况下，合并因子对性能影响并不大。至少在万级水平，较大的合并因子才会对性能带来显著改进。这与我对合并因子的理解基本上一致。&lt;br /&gt;&lt;br /&gt;内存索引在某些情况下居然会比硬盘索引慢，可能的原因是：1、内存在堆内频繁分配释放，浪费时间；2、本地文件读取在这次测试中耗时最多，索引时间较少，故而结果受到本地文件读取速度影响较大，所以测试时间颠簸超过了内存和硬盘的速度差。&lt;br /&gt;&lt;br /&gt;总之可以证明硬盘索引效率很高跟内存效率差异不大。内存如果作为缓冲，而且尺寸选择得当应该会大幅提高效率，时间不足，就不做更细节的测试了。&lt;/blockquote&gt;接下来，我进行了不同索引方式（是否保存被索引的全文文本在索引中）的性能测试，测试文件是我收藏的中文小说的纯文本文件，经过分割和复制，有183888个，总尺寸为1207M，测试结果如下：&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://farm1.static.flickr.com/177/399466700_7549bb3a89_o.png" /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;结论如下：&lt;br /&gt;&lt;blockquote style="color: rgb(255, 0, 0);"&gt;最快的是不保存耗时2930113/1000/60=48.8分钟，最慢的是4030653/1000/60=67.3分钟，效率还是另人满意的。压缩保存的时间开销完全可以接受，带来的膨胀率也完全可以接受。应该是最佳的选择。&lt;/blockquote&gt;以上程序，在我的MacBook上面开发，第一个测试在我的MacBook进行，Mac book的jdk版本为1.5，很稳定。第二个在我们的linux服务器上进行。Linux服务器原安装的是jdk 1.6，程序频繁无故锁死，找不到原因。后换为jdk 1.43，程序很稳定运行下去了。&lt;br /&gt;&lt;br /&gt;我的估计是jdk 1.6还不够稳定，&lt;a href="http://blog.devep.net/virushuo/"&gt;霍炬&lt;/a&gt;估计是程序中有跟jdk 1.6不兼容的部分，存疑与此。&lt;br /&gt;&lt;br /&gt;update:在服务器安装了jdk 1.5也会频繁发生锁死，看来出现的问题可能跟1.5以后的机制改变有关，继续存疑。&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/lucene" rel="tag"&gt;lucene&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/压缩" rel="tag"&gt;压缩&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/合并因子" rel="tag"&gt;合并因子&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/索引" rel="tag"&gt;索引&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/3758824730509897590/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=3758824730509897590' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3758824730509897590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/3758824730509897590'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2007/02/lucene.html' title='对lucene进行了一番性能测试'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-981220933471021327</id><published>2006-11-30T14:09:00.001+08:00</published><updated>2008-06-26T01:45:23.356+08:00</updated><title type='text'>php和.net中的Md5函数如何兼容</title><content type='html'>最近在做一个php和.net共同组成的项目，接收.net部分传送过来的一个经md5过的数据，我惊奇的发现，居然和php进行md5的结果不同，这是为啥呢？&lt;br /&gt;&lt;br /&gt;.net端程序是这么写的：&lt;br /&gt;&lt;blockquote&gt;System.Text.ASCIIEncoding  encoding=new System.Text.ASCIIEncoding();&lt;br /&gt;byte[] bytesSrc = encoding.GetBytes("xutf");&lt;br /&gt;System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();&lt;br /&gt;byte[] result = md5.ComputeHash(bytesSrc);&lt;br /&gt;string keyMd5=Convert.ToBase64String(result);&lt;/blockquote&gt;输入的"xutf"，得出的结果是"5j1NYFDLhM9dc/XOfRwkyg=="。&lt;br /&gt;&lt;br /&gt;php端程序是这么写的：&lt;br /&gt;&lt;blockquote&gt;$keymd5=base64_encode(md5("xutf"));&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;同样输入"xutf"，得出来的结果却是"ZTYzZDRkNjA1MGNiODRjZjVkNzNmNWNlN2QxYzI0Y2E="。&lt;br /&gt;&lt;br /&gt;这样下去，程序没法写了，同样的操作为什么结果不同呢？&lt;br /&gt;&lt;br /&gt;原来php的md5函数输出的结果是转换成16位表示的md5结果，而.net的md5.ComputeHash方法输出的结果是原始的md5结果。（注：php5的md5函数string &lt;b class="methodname"&gt;md5&lt;/b&gt; ( string str [, bool raw_output] )开始支持输出原始结果，参数raw_output只支持php5，但是我在使用php4）&lt;br /&gt;&lt;br /&gt;如果想让php的结果等同于.net的结果，那么需要对md5函数的结果进行16进制字符串到标准字符串的转换。&lt;br /&gt;那么php程序应改为：&lt;br /&gt;&lt;blockquote&gt;$md5hex=md5("xutf");&lt;br /&gt;$len=strlen($md5hex)/2;&lt;br /&gt;$md5raw="";&lt;br /&gt;for($i=0;$i&lt;$len;$i++) {     $md5raw=$md5raw . chr(hexdec(substr($md5hex,$i*2,2))); } $keyMd5=base64_encode($md5raw);&lt;/blockquote&gt;&lt;br /&gt;如果想让.net的结果等同于php的结果，那么需要把md5.ComputeHash方法输出的结果转换成16进制字符串，那么.net程序应该改为：&lt;br /&gt;&lt;blockquote&gt;System.Text.ASCIIEncoding  encoding=new System.Text.ASCIIEncoding();&lt;br /&gt;byte[] bytesSrc = encoding.GetBytes("xutf");&lt;br /&gt;System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();&lt;br /&gt;byte[] result = md5.ComputeHash(bytesSrc);&lt;br /&gt;&lt;br /&gt;StringBuilder sb = new StringBuilder();&lt;br /&gt;for (int i = 0; i &lt; result.Length; i++)&lt;br /&gt;    sb.AppendFormat("{0:x2}", result[i]);&lt;br /&gt; string s1=sb.ToString();&lt;br /&gt;byte[] bytesmd5 = encoding.GetBytes(s1);&lt;br /&gt;string keymd5=Convert.ToBase64String(bytesmd5);&lt;/blockquote&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/dotnet" rel="tag"&gt;dotnet&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/md5" rel="tag"&gt;md5&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/php" rel="tag"&gt;php&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/981220933471021327/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=981220933471021327' title='9 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/981220933471021327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/981220933471021327'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2006/11/phpnetmd5.html' title='php和.net中的Md5函数如何兼容'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-387989227675882763</id><published>2006-11-15T11:20:00.001+08:00</published><updated>2008-06-26T01:50:10.673+08:00</updated><title type='text'>[广告]雅虎寻找搜索竞价的福尔摩斯--竞价防作弊分析工程师</title><content type='html'>&lt;p&gt;昨天跟车东还有一班雅虎搜索的高手们见了个面，聊了聊，他们正在努力与竞价广告中的作弊者作斗争，需要福尔摩斯的加盟，如何，你有兴趣么？&lt;br /&gt;&lt;/p&gt;&lt;p&gt;-------------&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(现在是广告时间)&lt;/p&gt;  &lt;p&gt;如果你对&lt;strong&gt;海量数据&lt;/strong&gt;有较强的分析处理能力，能够透过数据发现一些潜在的问题；&lt;br /&gt;如果你有超强的&lt;strong&gt;逻辑推理能力&lt;/strong&gt;，能够敏锐的寻找到支持你论据的特征值，&lt;strong&gt;还原案发现场&lt;/strong&gt;；&lt;br /&gt;如果你对 &lt;acronym title="Search Engine Optimization"&gt;SEO&lt;/acronym&gt; 或者点击器有一定的了解，做过这方面的探索研究或者是实践；&lt;br /&gt;如果你曾经是一名站长，厌倦了江湖争斗，希望成为&lt;strong&gt;网络秩序的捍卫者&lt;/strong&gt;...&lt;/p&gt;  &lt;p&gt;那么你就是我们最合适的人选，我们诚邀你加盟我们(&lt;a href="http://www.yahoo.cn/"&gt;雅虎中国&lt;/a&gt;)的竞价防作弊Team，还我们的客户一个明亮纯洁的广告投放空间。&lt;/p&gt;  &lt;p&gt;如果你不具备以上的条件，只要你有一颗正直的心，同时有希望成长为一个经验丰富的网络安全卫士的决心和勇气。当你具备以下技能后，你仍然可以加入我们的队伍。&lt;/p&gt;  &lt;p&gt;1. 1 年以上工作经验。&lt;br /&gt;2. 半年以上 Linux 使用经验。&lt;br /&gt;3. 开发语言：Perl/&lt;acronym title="PHP (Personal Home Pages) Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt;/Shell，熟练掌握其中至少1种。&lt;br /&gt;4. 了解 &lt;acronym title="HyperText Markup Language"&gt;HTML&lt;/acronym&gt;/JavaCcript 网站制作技术，具有网站制作、开发经验。&lt;br /&gt;5. 有过海量(百万以上)数据统计、分析经验更佳。&lt;br /&gt;6. 有一定的沟通能力，具有协同工作经验。&lt;/p&gt;  &lt;p&gt;来吧！&lt;strong&gt;惩恶扬善，维护世界和平的重任就落在你的肩上了&lt;/strong&gt;!&lt;/p&gt;  &lt;p&gt;此时此刻，非你莫属!&lt;br /&gt;感兴趣的朋友给车东发电子邮件吧: &lt;span style="font-size:100%;"&gt;&lt;img _fcksavedurl="http://www.chedong.com/images/gmail.png" src="http://www.chedong.com/images/gmail.png" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img id="image329" src="http://freehogg.files.wordpress.com/2006/04/technorati.gif" alt="Technorati" /&gt; technorati tags: &lt;a href="http://www.technorati.com/tags/yahoo" rel="tag"&gt;yahoo&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/广告" rel="tag"&gt;广告&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/387989227675882763/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=387989227675882763' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/387989227675882763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/387989227675882763'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2006/11/blog-post.html' title='[广告]雅虎寻找搜索竞价的福尔摩斯--竞价防作弊分析工程师'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-116226097046897962</id><published>2006-10-31T10:12:00.000+08:00</published><updated>2006-11-12T10:00:08.493+08:00</updated><title type='text'>随想</title><content type='html'>我们往往以为一个新技术，或者一个老技术的新用法出现以后，我们应该努力推广它，以免他的好处被浪费。然而，最后现实会告诉我们，不如留点力气用来劝阻那些初学者，把那些新技术用在所有他以为可以用在的地方，这往往是灾难性的。&lt;br /&gt;&lt;br /&gt;Ajax就如是，它被滥用的例子简直是漫山遍野，因为流行，所以使用者总是那么的肆无忌惮，虽然它很好用，但是仍旧带来了灾难。&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/116226097046897962/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=116226097046897962' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/116226097046897962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/116226097046897962'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2006/10/blog-post.html' title='随想'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-115739177778865049</id><published>2006-09-05T01:42:00.000+08:00</published><updated>2006-11-12T10:00:08.299+08:00</updated><title type='text'>我翻译的Google Maps API中文同步文档正式发布了</title><content type='html'>详情请见 ：&lt;a href="http://googlemapsapicn.blogspot.com/2006/09/google-maps-api.html"&gt;http://googlemapsapicn.blogspot.com/2006/09/google-maps-api.html&lt;/a&gt;&lt;br /&gt;&lt;!-- ckey="28F36817" --&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/115739177778865049/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=115739177778865049' title='13 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/115739177778865049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/115739177778865049'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2006/09/google-maps-api.html' title='我翻译的Google Maps API中文同步文档正式发布了'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-115564939556368794</id><published>2006-08-15T21:24:00.000+08:00</published><updated>2006-11-12T10:00:07.961+08:00</updated><title type='text'>每个Python程序员都应该买个Nokia手机,哦不,每个程序员都应该买个Nokia手机</title><content type='html'>昨天我问几个朋友下面的程序是做啥的。&lt;br /&gt;&lt;br /&gt;import camera&lt;br /&gt;import graphics&lt;br /&gt;img=camera.take_photo()&lt;br /&gt;img.save("test.jpg")&lt;br /&gt;&lt;br /&gt;每个人都知道这是一个Python程序，但是他们多数猜测这是某个好用的图形库而已。当我告诉他们这是用&lt;a href="http://www.forum.nokia.com/info/sw.nokia.com/id/ee447e84-2851-471a-8387-3434345f2eb0/Python_for_S60.html"&gt;Nokia S60 Python&lt;/a&gt;开发的最简单的照相程序的时候，他们都很惊奇。是啊，我也很惊奇，4行就可以写个照相机出来，这是多么令人惊叹的。&lt;br /&gt;&lt;br /&gt;其实事情的由头是从做&lt;a href="http://www.zmap.org/"&gt;全能之眼&lt;/a&gt;这个网站开始的，我希望创造一个&lt;a href="http://www.zmap.org/"&gt;大众的地理信息的交换系统&lt;/a&gt;。&lt;a href="http://tinyfool.vox.com/library/post/gps%E6%9A%B4%E8%B5%B0%E5%87%86%E5%A4%87%E4%B8%AD.html"&gt;最近我给全能之眼加上了照片集的功能，我想在业余时间四处乱跑，给各个地标点照照片，然后发布在全能之眼上。&lt;/a&gt;这就需要我能够保存我拍照的地点的经纬度信息。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/chinapodcast/215963675/" title="Photo Sharing"&gt;&lt;img src="http://static.flickr.com/65/215963675_5c4f5044c2_m.jpg" alt="Nokia GPS LD-1W" height="240" width="180" style="border:0;float:left;margin:5px;"/&gt;&lt;/a&gt;于是周日我买了一个蓝牙Gps，然后开始开发一个叫做&lt;a href="http://code.google.com/p/gpscamera/"&gt;Gps Camera&lt;/a&gt;的应用程序，它可以在我拍照的同时记录下我的经纬度，并且可以直接用GPRS发送到我的Flickr。本来我打算用那个令人挠头的Symbian C++来开发这个程序。而上天很眷顾我，在我准备开工之前，突然想到把Nokia S60 Python，果然很不错，这是一个高效开发和运行的平台，上天真是眷顾我们啊。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://my.donews.com/virushuo/"&gt;火炬同学&lt;/a&gt;本来想买个新的Plam手机的，经我介绍Nokia S60 Python，也大为喜爱，打消了离开Nokia大家庭的念头，省了不少钱，善哉善哉。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/gpscamera/"&gt;Gps Camera&lt;/a&gt;尚未完成目前是托管于Google Code的开源项目，授权协议是&lt;a href="http://www.apache.org/licenses/" rel="nofollow"&gt;Apache License 2.0&lt;/a&gt;，有可以使用的版本的时候我会在这里通知，现在有愿意提出意见建议的也可以看看，呵呵。&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/gps" rel="tag"&gt;gps&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/camera" rel="tag"&gt;camera&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/%E5%85%A8%E8%83%BD%E4%B9%8B%E7%9C%BC" rel="tag"&gt;全能之眼&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/symbian" rel="tag"&gt;symbian&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/nokia" rel="tag"&gt;nokia&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/python" rel="tag"&gt;python&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/115564939556368794/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=115564939556368794' title='14 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/115564939556368794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/115564939556368794'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2006/08/pythonnokianokia.html' title='每个Python程序员都应该买个Nokia手机,哦不,每个程序员都应该买个Nokia手机'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6184036.post-115503197262249912</id><published>2006-08-08T18:08:00.000+08:00</published><updated>2006-11-12T10:00:07.685+08:00</updated><title type='text'>用Shell脚本查看哪些页面已经被Googlebot抓取，数量是多少。</title><content type='html'>grep Googlebot %1 | cut -d" " -f7 | sort | uniq &gt; %1.urls.txt&lt;br /&gt;wc -l %1.urls.txt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;xxx.urls.txt 就是不重复的排序后的地址列表&lt;br /&gt;而页面数量会直接在运行后显示。&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://www.tinydust.net"&gt;Tinydust studio&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/115503197262249912/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6184036&amp;postID=115503197262249912' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/115503197262249912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6184036/posts/default/115503197262249912'/><link rel='alternate' type='text/html' href='http://www.tinydust.net/prog/diary/2006/08/shellgooglebot.html' title='用Shell脚本查看哪些页面已经被Googlebot抓取，数量是多少。'/><author><name>tiny</name><uri>http://www.blogger.com/profile/14126154625633923315</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>