<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3065184863492159916</id><updated>2011-07-08T05:36:25.395+08:00</updated><category term='mobile'/><category term='ruby'/><category term='pc'/><category term='tech'/><category term='funny'/><category term='Email'/><category term='fp'/><category term='apple'/><category term='cartoon'/><category term='music'/><category term='blog'/><category term='medical'/><category term='movie'/><category term='cool'/><category term='travel'/><category term='city'/><category term='software'/><category term='festival'/><category term='unix'/><category term='mac'/><category term='internet'/><category term='video'/><category term='windows'/><category term='football'/><category term='kuso'/><category term='original'/><category term='fiction'/><category term='vista'/><category term='hardware'/><category term='science'/><category term='google'/><category term='skill'/><title type='text'>雅适慧</title><subtitle type='html'>jayesoui -- Ja , Yes , Oui!!!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1915429992072786206</id><published>2010-03-24T17:32:00.000+08:00</published><updated>2010-03-24T17:32:00.693+08:00</updated><title type='text'>test</title><content type='html'>test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- 发送自我的 iPhone&lt;br /&gt;&lt;p class='blogpress_location'&gt;位置:&lt;a href='http://maps.google.com/maps?q=%E6%B7%AE%E6%B5%B7%E4%B8%AD%E8%B7%AF,%E4%B8%8A%E6%B5%B7%E5%B8%82,%E4%B8%AD%E5%9B%BD%4031.224900%2C121.478864&amp;z=10'&gt;淮海中路,上海市,中国&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1915429992072786206?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1915429992072786206/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1915429992072786206' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1915429992072786206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1915429992072786206'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2010/03/test.html' title='test'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7209459218226538694</id><published>2007-05-19T16:26:00.001+08:00</published><updated>2007-05-19T16:26:49.075+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Starcraft 2 !!!</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aUXoekeDIW8"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/aUXoekeDIW8" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7209459218226538694?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7209459218226538694/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7209459218226538694' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7209459218226538694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7209459218226538694'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/05/starcraft-2.html' title='Starcraft 2 !!!'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6726241405520874266</id><published>2007-05-06T18:53:00.001+08:00</published><updated>2007-05-06T19:11:17.723+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>著名的浏览器插件免疫软件Upiea又开始更新了</title><content type='html'>现在网上流氓肆掠,很多是通过著名的IE插件侵入你的电脑的.&lt;br /&gt;这个小软件就是给你的IE加个保护伞,避免恶意插件的侵袭.&lt;br /&gt;&lt;br /&gt;Upiea Build 20070504&lt;br /&gt;&lt;br /&gt;绿色环保的软件。&lt;br /&gt;* 插件免疫&lt;br /&gt;* 插件卸载&lt;br /&gt;* 网站免疫&lt;br /&gt;* 系统设置&lt;br /&gt;* 隐私清理&lt;br /&gt;* 系统优化&lt;br /&gt;* 还有更多等您去发现...&lt;br /&gt;&lt;img src="http://www.lumix.cn/upiea/main.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;最近更新:Build 20070504&lt;br /&gt;增加自定义插件免疫&lt;br /&gt;解决被误报病毒问题&lt;br /&gt;其他修正...&lt;br /&gt;&lt;br /&gt;获取最新版本:&lt;a href="http://www.box.net/index.php?rm=box_download_shared_file&amp;file_id=f_59704836&amp;amp;shared_name=eo8t6vfex4" target="_blank"&gt;点我下载&lt;/a&gt;&lt;br /&gt;MD5：4a390efc523c3b292d9a89a28e552cb8&lt;br /&gt;其他下载:&lt;br /&gt;提示缺少dll文件,运行时错误13等&lt;br /&gt;  &lt;a href="http://www.box.net/index.php?rm=box_download_shared_file&amp;file_id=f_59727612&amp;amp;shared_name=kc6eheeuxe" target="_blank"&gt;下载运行库&lt;/a&gt;&lt;br /&gt;MD5：a0fdc879576c796912a758b973db2bfc&lt;br /&gt;合作下载点：&lt;a href="http://dl.pconline.com.cn/html_2/1/106/id=10294&amp;amp;pn=0.html" target="_blank"&gt;Pconline太平洋下载&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.onlinedown.net/soft/35733.htm" target="_blank"&gt;华军软件园下载&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.crsky.com/soft/4417.html" target="_blank"&gt;霏凡软件站&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.skycn.com/soft/21205.html" target="_blank"&gt;天空软件站&lt;/a&gt;&lt;br /&gt;联系邮箱:lumixcn@gmail.com&lt;br /&gt;&lt;br /&gt;via:&lt;a href="http://www.lumix.cn/upiea/"&gt;Upiea 官方网页&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6726241405520874266?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6726241405520874266/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6726241405520874266' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6726241405520874266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6726241405520874266'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/05/upiea.html' title='著名的浏览器插件免疫软件Upiea又开始更新了'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-8731384550934180777</id><published>2007-04-29T06:00:00.001+08:00</published><updated>2007-04-29T06:00:26.887+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Adobe的Flex正式开源了</title><content type='html'>http://labs.adobe.com/wiki/index.php/Flex:Open_Source&lt;br /&gt;&lt;br /&gt;Adobe决定在Mozilla Public License (MPL)协议下发布flex。&lt;br /&gt;&lt;br /&gt;微软的WPF刚刚更名为Silverlight（连名字都和Flash类似。典型的微软跟屁虫战略，别人创新开拓了市场，它就跟上去蚕食份额。）也开源了。说是跨平台还是不支持linux，M$对linux的态度之差由此可见。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-8731384550934180777?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/8731384550934180777/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=8731384550934180777' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8731384550934180777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8731384550934180777'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/04/adobeflex.html' title='Adobe的Flex正式开源了'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6697050617036647635</id><published>2007-04-28T00:14:00.001+08:00</published><updated>2008-11-15T16:05:57.435+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>徐静蕾发布个人字体 售价10元命名方正静蕾简体</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ygzfEy9Te6k/RjJzqk_Z6tI/AAAAAAAAATo/AvSrnauJBPs/s1600-h/%E5%9B%BE%E7%89%87+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_ygzfEy9Te6k/RjJzqk_Z6tI/AAAAAAAAATo/AvSrnauJBPs/s400/%E5%9B%BE%E7%89%87+2.png" alt="" id="BLOGGER_PHOTO_ID_5058232506811804370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;网易科技讯 4月26日消息，徐静蕾将于4月27日下午发布一款自己书写的个性化字体，此字体由方正电子根据徐静蕾的手写字体为其量身定做，被命名“方正静蕾简体”。用户下载安装此款字体后，可像使用其它字体一样使用徐静蕾“手写体”。&lt;br /&gt;&lt;br /&gt;对于徐静蕾的“方正静蕾简体”方正字库网站上这样介绍，这是一款影视明星徐静蕾的手写体。字体骨骼清秀、遒劲有力，清冽而又优雅、从容，令人赏心悦目。字如其人，心素如简，人淡如菊。特别适用于书写信函、报告、文章等。&lt;br /&gt;&lt;br /&gt;据了解，此款字体售价10元人民币，所有网友均可直接下载购买。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.foundertype.com.cn/agentmodel/hh_image/hh_bigsamplefont/xjl.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.foundertype.com.cn/agentmodel/hh_image/hh_bigsamplefont/xjl.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cimg2.163.com/tech/2007/4/26/20070426191619526c8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://cimg2.163.com/tech/2007/4/26/20070426191619526c8.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;方正静蕾简体广告图&lt;br /&gt;&lt;br /&gt;字体名： 方正静蕾简体&lt;br /&gt;编码：GB2312-80&lt;br /&gt;字体用途：书法字&lt;br /&gt;字体大小：5.7M&lt;br /&gt;价格：￥10.00&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;购买方式&lt;br /&gt;&lt;a href="http://www.foundertype.com/agentmodel/help.htm"&gt;http://www.foundertype.com/agentmodel/help.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;windows only (私下提示,能分离出TTF的...)&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6697050617036647635?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6697050617036647635/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6697050617036647635' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6697050617036647635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6697050617036647635'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/04/10.html' title='徐静蕾发布个人字体 售价10元命名方正静蕾简体'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ygzfEy9Te6k/RjJzqk_Z6tI/AAAAAAAAATo/AvSrnauJBPs/s72-c/%E5%9B%BE%E7%89%87+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6297114490370668620</id><published>2007-04-23T21:42:00.001+08:00</published><updated>2007-04-23T21:52:59.741+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>开源的跨平台飞行模拟器——FlightGear</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://flightgear.org/Gallery-v0.9.10/Large/bravo-cockpit.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://flightgear.org/Gallery-v0.9.10/Large/bravo-cockpit.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FlightGear是个跨平台(windows,macos,linux)的飞行模拟器。目标是创建一个用于研究或学术的成熟的飞行模拟器架构。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://flightgear.org/Gallery-v0.9.10/Source/Citation-II-weather.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://flightgear.org/Gallery-v0.9.10/Source/Citation-II-weather.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;官方网站:http://flightgear.org/&lt;br /&gt;&lt;br /&gt;下载地址：&lt;a href="http://sourceforge.net/project/downloading.php?groupname=macflightgear&amp;filename=FlightGear-0.9.10-full.dmg&amp;amp;use_mirror=nchc"&gt;sourceforge&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6297114490370668620?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6297114490370668620/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6297114490370668620' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6297114490370668620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6297114490370668620'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/04/flightgear_23.html' title='开源的跨平台飞行模拟器——FlightGear'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-5610086793707378599</id><published>2007-04-20T23:03:00.001+08:00</published><updated>2007-04-20T23:36:37.097+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>推荐一个windows xp 模仿 MacOS 外观的主题站</title><content type='html'>以前用Windows的时候也常常各种主题来装扮很呆的Windows操作系统.也常模仿MacOS,从Themen,wallpaper,字体,音效,鼠标,图标,窗口阴影...什么的都一一模仿. &lt;a href="http://www.nick-zone.com/mac/"&gt;http://www.nick-zone.com/mac/&lt;/a&gt; 这个站就是干这些的.&lt;br /&gt;&lt;br /&gt;现在主要用MacOS了,更专注于事务而不是去和操作系统这些服务基础搏斗了...美观也能解放生产力...&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-5610086793707378599?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/5610086793707378599/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=5610086793707378599' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5610086793707378599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5610086793707378599'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/04/windows-xp-macos.html' title='推荐一个windows xp 模仿 MacOS 外观的主题站'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-221973089576638033</id><published>2007-04-20T14:50:00.001+08:00</published><updated>2007-04-20T14:53:31.269+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Apple Mac's Chinese Input Method -- Fun Input Toy-FIT</title><content type='html'>&lt;a href="http://jayesoui.blogspot.com/2007/03/fun-input-toy-v010-beta.html"&gt;前面&lt;/a&gt;提到过新出的这个Mac中文输入法.&lt;br /&gt;&lt;br /&gt;现在升级到V0.7版了.加入了五笔输入法支持和打简出繁功能.經常使用繁體字的,港澳台及海外的Mac中文用戶現在多一種輸入法選擇了.&lt;br /&gt;&lt;br /&gt;另外V0.6時就推出了官方網站了: &lt;a href="http://fit.coollittlethings.com/"&gt;http://fit.coollittlethings.com/&lt;/a&gt;&lt;br /&gt;下載地址: &lt;a href="http://www.w18.net/attachment.php?aid=124&amp;v=0.7.0"&gt;点这里&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-221973089576638033?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/221973089576638033/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=221973089576638033' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/221973089576638033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/221973089576638033'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/04/apple-mac-chinese-input-method-fun.html' title='Apple Mac&amp;#39;s Chinese Input Method -- Fun Input Toy-FIT'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-44785255411483667</id><published>2007-04-16T12:08:00.000+08:00</published><updated>2007-04-16T13:02:30.710+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Ruby 新手须知事项(Things That Newcomers to Ruby Should Know)</title><content type='html'>作者: William Djaja Tjokroaminata&lt;br /&gt;原文: http://www.glue.umd.edu/~billtj/ruby.html&lt;br /&gt;译者: &lt;a href="http://jayesoui.blogspot.com"&gt;Johnson Qu&lt;/a&gt; http://jayesoui.blogspot.com&lt;br /&gt;&lt;br /&gt;前言: 资源&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    * 主页&lt;br /&gt;      http://www.ruby-lang.org/en/&lt;br /&gt;    * 常见问题与解答&lt;br /&gt;      http://www.rubycentral.com/faq/ (原文) 或&lt;br /&gt;      http://www.rubygarden.org/iowa/faqtotum (最新)&lt;br /&gt;    * 常见陷阱&lt;br /&gt;      http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=pitfall&lt;br /&gt;    * 在线指导,文档和书籍&lt;br /&gt;      http://www.rubycentral.com/book/&lt;br /&gt;    * 非常有用的忠告&lt;br /&gt;          o Programming Ruby -- David Thomas 和 Andrew Hunt 的书,&lt;br /&gt;            "When Trouble Strikes" 一章, "But It Doesn’t Work" 一节&lt;br /&gt;          o The Ruby Way -- Hal Fulton 的书,&lt;br /&gt;            第一章: "Ruby In Review"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;1.使用语法警告&lt;br /&gt; 用 "ruby -w"运行代码而不是简单的用"ruby"运行,以获得有用的警告. 如果不直接援用"ruby", 你可以设置环境变量 RUBYOPT 为 ‘w’:&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;Win32 环境下:&lt;br /&gt;  C:\&gt; set RUBYOPT=w&lt;br /&gt;  或者在Scite编辑器中按 F5 (来执行)会给你警告,F4会定位到问题行.&lt;br /&gt;   &lt;br /&gt; Unix 环境下:&lt;br /&gt;  sh# export RUBYOPT="w" &lt;br /&gt;  或:&lt;br /&gt;  csh# setenv RUBYOPT "w" &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2.交互式的壳(shell)&lt;br /&gt; Ruby有个交互式的壳; 试着援用命令 "irb" 而非 "ruby". "irb" 被很好的用来试验语言和类;你可以把东西在这个环境里弄清楚,然后再写到你的程序里.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; C:\&gt; irb&lt;br /&gt; irb(main):001:0&gt; def hello_world&lt;br /&gt; irb(main):002:1&gt;     puts "Hello, world!" &lt;br /&gt; irb(main):003:1&gt; end&lt;br /&gt; =&gt; nil&lt;br /&gt; irb(main):004:0&gt; hello_world&lt;br /&gt; Hello, world!&lt;br /&gt; =&gt; nil&lt;br /&gt; irb(main):005:0&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3.屏幕文档&lt;br /&gt; 要便利的屏显文档, 考虑使用 (如果必要的话并且安装) "ri",可以在下边找到:&lt;br /&gt; http://www.pragmaticprogrammer.com/ruby/downloads/ri.html&lt;br /&gt; 例如,查看File类的方法,运行"ri File". 阅读它的open方法, 输入 "ri File.open".&lt;br /&gt;&lt;br /&gt;4. Class#method 符号&lt;br /&gt; 文档里的"Klass#method"符号仅用来表示Klass类的一个对象的"实例方法";它根本不是Ruby的语法. 另一方面, 文档里的"类方法",通常表示为"Klass.method" (这个是有效的Ruby语法).&lt;br /&gt; &lt;br /&gt;5. 从字串中得到字符&lt;br /&gt; String#[Fixnum] 方法并不返回在Fixnum位置的"字符",而是返回这个位置ASCII字符的编码(然而,这将来可能改变). 目前,要得到字符本身,使用 String#[Fixnum,1] 来替代.&lt;br /&gt; 更进一步,如下有额外的 ASCII 码转换方法:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;     * 用 Integer#chr 来从ASCII码转换为字符&lt;br /&gt;            65.chr    # -&gt; "A" &lt;br /&gt;     * 用 ?chr 来从字符转换到ASCII码&lt;br /&gt;            ?A        # -&gt; 65&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; 例如,利用这些性质,可以"aString[-1, 1]" 或者 "aString[-1].chr"这么写来得到字串的最后一个字符.&lt;br /&gt;  &lt;br /&gt;6. 数组和散列(杂凑hash)的默认值&lt;br /&gt; 注意:&lt;br /&gt; # Array.new(2, Hash.new) # -&gt; [{}, {}]&lt;br /&gt; 上边的两个数组元素是同一个对象,而不是独立的两个散列.要建立有几个(独立)散列的数组,使用"map"或"collect"方法:&lt;br /&gt; arr = (1..2).map {Hash.new}&lt;br /&gt; 类似的,当建立数组的散列时,可能如下不是原始意图:&lt;br /&gt;&lt;pre&gt; &lt;br /&gt; hsh = Hash.new([])&lt;br /&gt; while line = gets&lt;br /&gt;   if line =~ /(\S+)\s+(\S+)/&lt;br /&gt;     hsh[$1] &lt;&lt; $2&lt;br /&gt;   end&lt;br /&gt; end&lt;br /&gt; puts hsh.length    # -&gt; 0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; 一个正确而简明的方法是 "(hash[key] ||= []) « value", 例如:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; hsh = Hash.new&lt;br /&gt; while line = gets&lt;br /&gt;   if line =~ /(\S+)\s+(\S+)/&lt;br /&gt;     (hsh[$1] ||= []) &lt;&lt; $2&lt;br /&gt;   end&lt;br /&gt; end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;7. 易变的(mutable)散列的键&lt;br /&gt; 当使用"易变的"对象作为散列的键时要小心.为得到期望的结果,要在访问散列元素前调用 Hash#rehash. 例如:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; s = "mutable" &lt;br /&gt; arr = [s]&lt;br /&gt; hsh = { arr =&gt; "object" }&lt;br /&gt; s.upcase!&lt;br /&gt; p hsh[arr]    # -&gt; nil (可能不是所期望的)&lt;br /&gt; hsh.rehash&lt;br /&gt; p hsh[arr]    # -&gt; "object" &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;8. 从文件中读取数字&lt;br /&gt; 从文件读取数据并把他们放到变量里以后,数据类型实际上是字串.要转换他们为数字,用 "to_i" 或 "to_f" 方法. 举个例子,如果你使用"+"操作符来加这些"数字"而没有调用转换方法, 你将只是简单的把字串连接起来.&lt;br /&gt; 另一个选择是使用(C风格的)"scanf" (http://www.rubyhacker.com/code/scanf).&lt;br /&gt; &lt;br /&gt;9. 前/后 增/减 操作符&lt;br /&gt; Ruby没有前/后,增/减操作符.例如, x++ 或 x-- 会解析出错. 更重要的是, ++x 或 --x 会什么也不做! 实际上,他们表现为多个一元前缀操作符: -x == ---x == -----x == ...要增加数字,直接写 x += 1.&lt;br /&gt; Ruby语言作者对这个语法设计的一个解释可以在下边找到:&lt;br /&gt;     http://www.ruby-talk.org/2710&lt;br /&gt;&lt;br /&gt;10. 块中的语汇范围(lexical scoping)&lt;br /&gt; 当心本地变量和块的本地变量间的语汇范围(lexical scoping)的相互影响. 如果一个本地变量已经在块前被定义, 那么块会使用(并且很可能修改)本地变量; 这样块并不引入一个新的范围. 例如:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  (0..2).each do |i|&lt;br /&gt;    puts "块内: i = #{i}" &lt;br /&gt;  end&lt;br /&gt;  puts "块外: i = #{i}"    # -&gt; 未定义的'i'&lt;br /&gt;&lt;br /&gt; 另一方面:&lt;br /&gt;  i = 0&lt;br /&gt;  (0..2).each do |i|&lt;br /&gt;    puts "块内: i = #{i}" &lt;br /&gt;  end&lt;br /&gt;  puts "块外: i = #{i}"    # -&gt; '块外: i = 2'&lt;br /&gt;&lt;br /&gt; 还有:&lt;br /&gt;  j = 0&lt;br /&gt;  (0..2).each do |i|&lt;br /&gt;    j = i&lt;br /&gt;  end&lt;br /&gt;  puts "块外: j = #{j}"    # -&gt; '块外: j = 2'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;11. 两套逻辑运算符&lt;br /&gt; Ruby里有两套逻辑操作符: [!, &amp;&amp;, ||] 和 [not, and, or]. [!, &amp;&amp;, ||]的优先级比赋值符(=, =, ~=, /=, 之类.)高,而 [not, and, or]的优先级却要低于赋值.同时要注意 &amp;&amp; 的优先级比 || 的高, and 的优先级和 or 的是一样的. 一个例子:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  a = 'test'&lt;br /&gt;  b = nil&lt;br /&gt;  both = a &amp;&amp; b       # both == nil&lt;br /&gt;  both = a and b      # both == 'test'&lt;br /&gt;  both = (a and b)    # both == nil&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; 这个语法设计的原因及一些例子可以在下面找到:&lt;br /&gt;      http://www.rubygarden.org/iowa/faqtotum/abN18mrYFE49E/c/1.13.3.3.5&lt;br /&gt;&lt;br /&gt;12. === 操作符和 case 语句&lt;br /&gt; 在 case 语句中:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  case obj&lt;br /&gt;   when obj_1&lt;br /&gt;     ...&lt;br /&gt;   when obj_k&lt;br /&gt;     ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; 涉及到"==="方法,而不是"=="方法.同时,顺序是"obj_k === obj"而不是"obj === obj_k".&lt;br /&gt; 用这种顺序是因为case语句可以以更灵活的方式"搭配" obj. 当 obj_k 是模块/类(Module/Class),正则表达式(Regexp), 或区间(Range)时有三种有趣的情形:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  * Module/Class 类定义 "===" 方法为测试obj是否是一个模块/类的实例或是它的子类&lt;br /&gt;      ("obj#kind_of? obj_k").&lt;br /&gt;  * Regexp 类定义  "===" 方法为测试obj是否匹配模式 &lt;br /&gt;      ("obj =~ obj_k").&lt;br /&gt;  * Range 类定义 "===" 方法为测试obj是否是区间里的一个元素 &lt;br /&gt;      ("obj_k.include? obj").&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;13. 空格&lt;br /&gt; 建议不要在方法调用的开始"("前写空格;否则, $VERBOSE 设置为 true 的 Ruby 可能会给你警告.&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;14. "点"方法调用操作符&lt;br /&gt; 方法调用的"点"是最强的操作符. 因此例如,在一些其他语言中浮点数的点后的数字是可选的,在Ruby中并不如此. 例如, "1.e6"会试图调用1对象的"e6"方法(是个Fixnum).你应该写成"1.0e6".&lt;br /&gt; 然而,注意虽然"点"是最强的操作符,它的优先级顾及到方法名可能会随不同的Ruby版本而不同. 至少在Ruby 1.6.7, "puts (1..3).length" 会给你个语法错误;你应该写"puts((1..3).length)"来代替.&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;15.区间对象(Range object)&lt;br /&gt; "0..k" 表示一个区间对象(Range object), 而 "[0..k]"表示一个只有单个区间类型的元素的数组. 例如, 如果&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  [0..2].each do |i|&lt;br /&gt;    puts "i = #{i}" &lt;br /&gt;  end&lt;br /&gt; 并不给出你的期望,可能你应该这么写:&lt;br /&gt;  (0..2).each do |i|&lt;br /&gt;    puts "i = #{i}" &lt;br /&gt;  end&lt;br /&gt; 或:&lt;br /&gt;  0.upto(2) do |i|&lt;br /&gt;    puts "i = #{i}" &lt;br /&gt;  end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; 来替代.同时注意Ruby没有"元组(Tuple)"类型的对象(也就是永远不变的数组).还有通常用圆括号括起区间对象来达到优先组合的目的(因为在上边的例子中"点"比"点点"更强).&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;16. 布尔值&lt;br /&gt; Ruby 中, 只有 false 和 nil 在布尔逻辑表达式中被认为是假. 特别的, 0 (零), "" 或者 '' (空字串), [] (空数组), 和 {} (空散列) 都被认为是真.&lt;br /&gt;&lt;br /&gt;17.变量,引用和对象&lt;br /&gt; Ruby变量保持对对象的引用并且 = 操作符拷贝引用.同时,例如a += b的自赋值实际上被翻译为a = a + b. 因此意识到在某个操作中你事实上是创建了新的对象还是修改了一个现存的对象是明智的.&lt;br /&gt; 例如, string &lt;&lt; "another" 比 string += "another" 更安全(不创建额外对象), 所以如果它存在的话你使用任何类定义的(class-defined)更新方法(update-method) 应该更好(如果那是真是你的意图). 然而,也要注意关连同一个对象的所有其他变量上的"副作用":&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  a = 'aString'&lt;br /&gt;  c = a&lt;br /&gt;  a += ' modified using +='&lt;br /&gt;  puts c    # -&gt; "aString" &lt;br /&gt;&lt;br /&gt;  a = 'aString'&lt;br /&gt;  c = a&lt;br /&gt;  a &lt;&lt; ' modified using &lt;&lt;'&lt;br /&gt;  puts c    # -&gt; "aString modified using &lt;&lt;" &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;18. 深拷贝(deep copy)&lt;br /&gt; Ruby 中没有内建的标准深拷贝. 达到类似效果的一个办法是用 serialization/marshalling. 因为在Ruby里一切都是引用, 当你想 "拷贝"(例如靠使用dup或clone方法)对象 时要小心, 特别是对于包含其他对象的对象(例如数组和散列)并且当包含不止一层时.&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;19. 类变量&lt;br /&gt; 一个类变量 is in general per-hierarchy, not per-class (就是说,类变量被父类和所有它的子类"共享",外加被所有那个类的实例共享). 有个微妙的例外是如果一个子类在它的父类之前创建了一个类变量. 例如,当一个父类首先创建了一个类变量:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  class Base&lt;br /&gt;    def initialize;     @@var = 'base'; end&lt;br /&gt;    def base_set_var;   @@var = 'base'; end&lt;br /&gt;    def base_print_var; puts @@var;     end&lt;br /&gt;  end&lt;br /&gt;  class Derived &lt; Base&lt;br /&gt;    def initialize;        super; @@var = 'derived'; end # 注意&lt;br /&gt;    def derived_set_var;   @@var = 'derived';        end&lt;br /&gt;    def derived_print_var; puts @@var;               end&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  d = Derived.new&lt;br /&gt;  d.base_set_var;    d.derived_print_var    # -&gt; 'base'&lt;br /&gt;                     d.base_print_var       # -&gt; 'base'&lt;br /&gt;  d.derived_set_var; d.derived_print_var    # -&gt; 'derived'&lt;br /&gt;                     d.base_print_var       # -&gt; 'derived'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; 上边的代码中,类变量 @@var 事实上被Base和Derived类"共享". 然而,现在看看当一个子类首先创建变量时会发生什么:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  class Base&lt;br /&gt;    def initialize;     @@var = 'base'; end&lt;br /&gt;    def base_set_var;   @@var = 'base'; end&lt;br /&gt;    def base_print_var; puts @@var;     end&lt;br /&gt;  end&lt;br /&gt;  class Derived &lt; Base&lt;br /&gt;    def initialize;        @@var = 'derived'; super; end # 改变了&lt;br /&gt;    def derived_set_var;   @@var = 'derived';        end&lt;br /&gt;    def derived_print_var; puts @@var;               end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  d = Derived.new&lt;br /&gt;  d.base_set_var;    d.derived_print_var    # -&gt; 'derived'&lt;br /&gt;                     d.base_print_var       # -&gt; 'base'&lt;br /&gt;  d.derived_set_var; d.derived_print_var    # -&gt; 'derived'&lt;br /&gt;                     d.base_print_var       # -&gt; 'base'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; 这样,父类和子类具有共用同一名字的两个独立的类变量.&lt;br /&gt;    &lt;br /&gt;20.替代反斜线&lt;br /&gt; 替代反斜线可能很微妙.例如:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  str = 'a\b\c'                     # -&gt; a\b\c&lt;br /&gt;  puts str.gsub(/\\/,'\\\\')        # -&gt; a\b\c&lt;br /&gt;  puts str.gsub(/\\/,'\\\\\\')      # -&gt; a\\b\\c&lt;br /&gt;  puts str.gsub(/\\/,'\\\\\\\\')    # -&gt; a\\b\\c&lt;br /&gt;  puts str.gsub(/\\/) { '\\\\' }    # -&gt; a\\b\\c&lt;br /&gt;  puts str.gsub(/\\/, '\&amp;\&amp;')       # -&gt; a\\b\\c&lt;br /&gt;&lt;/pre&gt;    &lt;br /&gt;21. 后记:知道有好处的东西&lt;br /&gt; Ruby 中"自赋值操作符"不止 +=, -=, *=, /=, %=. 特别是,像"||="这样的赋值符也是存在(但是目前不能用在没有先定义的类变量上;这点以后可能会改变).完整赋值符请看"Programming Ruby"这本书的表格18.4..&lt;br /&gt;&lt;br /&gt; 想要有许多算法和示例代码的"菜谱"可以考虑 PLEAC-Ruby:&lt;br /&gt;  http://pleac.sourceforge.net/pleac_ruby/t1.html&lt;br /&gt;&lt;br /&gt; 对于扩展数字运算考虑 Numerical Ruby:&lt;br /&gt;  http://www.ir.isas.ac.jp/~masa/ruby/index-e.html&lt;br /&gt;&lt;br /&gt; 对于消耗大量的内存和CPU时间的(数字)阵列,考虑 NArray ,它是 Numerical Ruby的一部分:&lt;br /&gt;     http://www.ir.isas.ac.jp/~masa/ruby/na/SPEC.en&lt;br /&gt;&lt;br /&gt; 要想加速你的部分Ruby代码可以把它们用C来写,考虑Inline:&lt;br /&gt;     http://sourceforge.net/projects/rubyinline/&lt;br /&gt;&lt;br /&gt; 想要把Ruby翻译为C考虑 rb2c:&lt;br /&gt;     http://easter.kuee.kyoto-u.ac.jp/~hiwada/ruby/rb2c/&lt;br /&gt;&lt;br /&gt; 对Ruby和C/C++的整合,考虑 SWIG:&lt;br /&gt;     http://www.swig.org/&lt;br /&gt;&lt;br /&gt; Ruby和Java的整合,考虑 JRuby:&lt;br /&gt;     http://jruby.sourceforge.net/&lt;br /&gt;&lt;br /&gt; Ruby和Delphi的整合,考虑 Apollo:&lt;br /&gt;     http://www.users.yun.co.jp/~moriq/apollo/index-en.html&lt;br /&gt;&lt;br /&gt; 对于在Ruby中嵌入Python,考虑 Ruby/Python:&lt;br /&gt;     http://www.ruby-lang.org/en/raa-list.rhtml?name=Ruby%2FPython&lt;br /&gt;&lt;br /&gt; 在Ruby中嵌入Lua, 考虑 Ruby-Lua:&lt;br /&gt;     http://ruby-lua.unolotiene.com/ruby-lua.whtm&lt;br /&gt;&lt;br /&gt; 创建独立的(Windows)可执行文件,考虑 exerb:&lt;br /&gt;     http://exerb.sourceforge.jp/index.en.html&lt;br /&gt;&lt;br /&gt; 要想操作原始的位(raw bits),而不使用Fixnums,考虑 BitVector:&lt;br /&gt;     http://www.ce.chalmers.se/~feldt/ruby/extensions/bitvector/&lt;br /&gt;&lt;br /&gt; For comments on this list, you may e-mail me directly at: billtj@glue.umd.edu&lt;br /&gt;    &lt;br /&gt;&lt;pre&gt;    &lt;br /&gt; Copyright notice&lt;br /&gt; Copyright © 2002-2006 William Djaja Tjokroaminata. All rights reserved.&lt;br /&gt; 本中文翻译版 Creative Commons &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;署名&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-44785255411483667?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/44785255411483667/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=44785255411483667' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/44785255411483667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/44785255411483667'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/04/ruby-things-that-newcomers-to-ruby.html' title='Ruby 新手须知事项(Things That Newcomers to Ruby Should Know)'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7561040347528312518</id><published>2007-03-29T21:00:00.001+08:00</published><updated>2007-04-16T12:33:08.020+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='original'/><category scheme='http://www.blogger.com/atom/ns#' term='skill'/><title type='text'>Ruby 实现 Eratosthenes筛法求素数 (性能相当于用定义求素数的C实现)</title><content type='html'>&lt;a href="http://on-ruby.blogspot.com/2006/07/rubyinline-making-making-things-faster.html"&gt;RubyInline, Making Making Things Faster Easier&lt;/a&gt;这篇文章用求素数这个例子来介绍用RubyInline在Ruby中混入C代码来提高性能.&lt;br /&gt;然而&lt;a href="http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/b1a4bbd4d9ec6246/949cbb0290ac7bef#949cbb0290ac7bef"&gt;"For Performance, Write it in C"&lt;/a&gt;只是选择之一,适当的选择算法有时来得更简单直接.&lt;br /&gt;下面我用Eratosthenes筛法求素数的Ruby实现计算10000以内的素数,同样达到了上边引文里的0.X秒的性能.&lt;br /&gt;如果用C来实现这个筛法,用链表而不是数组,性能可能还会提升很多.不过用上了Ruby就不会想回头了...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# 用Eratosthenes(埃拉托色尼,公元前三世纪的希腊天文学家、数学家和地理学家)筛&lt;br /&gt;# 法求素数:创建一个数组,以下面的方式将某些位置以空标记:从位置2开始,将所有2的倍数&lt;br /&gt;# 的位置标记为空,然后对2之后的素数3进行同样的操作这样就可以找到3之后未被标记的5, &lt;br /&gt;# 然后再将所有5的倍数记空,如此重复便可以找到数组中的所有素数。&lt;br /&gt;# Sieve of Eratosthenes prime numbers Ruby 实现&lt;br /&gt;def sieve(n)&lt;br /&gt;  r=1..n # 得到数列&lt;br /&gt;  a=r.to_a  # 将数列转化为数组&lt;br /&gt;  c=0  &lt;br /&gt;  i=0 # 数组下标从0开始,i+1对应数组成员2为素数&lt;br /&gt;  (1..n).each do # 遍历整个数组    &lt;br /&gt;    if a[i+=1]!=nil # i+1号数组成员如果没被当作合数划掉,执行下面的处理,同时移动数组下标指向下一个成员&lt;br /&gt;      print "#{a[i]}," ;c+=1# 打印这个素数&lt;br /&gt;      k=2 # 初始倍数     &lt;br /&gt;      while a[i]*k &lt;= n # 当素数的倍数小于既定范围时        &lt;br /&gt;        # a[(i+1)*k-1]=nil # 相应的素数的整数倍合数被从数组中划去,对应数组成员标记为空&lt;br /&gt;        # a.delete(a[i]*k) # 直接删去素数的倍数.执行性能差.&lt;br /&gt;        a[a[i]*k-1]=nil # 相应的素数的整数倍合数被从数组中划去,对应数组成员标记为空 &lt;br /&gt;        k+=1 # 加大倍数&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  puts "以上是#{n}以内的素数.共#{c}个."&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts"输入n"&lt;br /&gt;n=gets.to_i  # 得到求值范围&lt;br /&gt;if __FILE__ == $0&lt;br /&gt;  t1 = Time.now&lt;br /&gt;  sieve(n)  &lt;br /&gt;  print t2 = Time.now - t1 ,"秒内完成"&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;-----------------------&lt;br /&gt;07-4-16 edit&lt;br /&gt;-----------------------&lt;br /&gt;在 http://bohnsack.com/2006/02/13/cs-442-project-1-sieve-of-eratosthenes/ 里看到的:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;max = Integer(ARGV.shift || 10000)&lt;br /&gt; &lt;br /&gt;sieve = [nil, nil] + (2 .. max).to_a&lt;br /&gt; &lt;br /&gt;(2 .. Math.sqrt(max)).each do |i|&lt;br /&gt;  next unless sieve[i]&lt;br /&gt;  (i*i).step(max, i) do |j|&lt;br /&gt;    sieve[j] = nil&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt; &lt;br /&gt;puts sieve.compact.join(", ")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;10000内素数0.0X秒内就算出来了.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7561040347528312518?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7561040347528312518/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7561040347528312518' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7561040347528312518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7561040347528312518'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/eratosthenesrubyc.html' title='Ruby 实现 Eratosthenes筛法求素数 (性能相当于用定义求素数的C实现)'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-206098824612565491</id><published>2007-03-22T15:06:00.001+08:00</published><updated>2007-03-22T15:18:18.824+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>VNC: Remote Desktop for Free</title><content type='html'>&lt;br /&gt;&lt;p&gt;&lt;img class='image_float_right' alt='Remote Desktop' src='http://macapper.com/wp-content/uploads/2007/03/remotedesktop.jpg'&gt;&lt;/img&gt;&lt;br /&gt;&lt;br /&gt;	Have you ever been at school, work, or a friend’s house, and needed to get on your home computer? If so, you may want to set up a Remote Desktop system. Remote Desktop systems let you control your computer from other computers, giving you access to all your files and applications. You may even want to control computers on your home LAN. Apple’s &lt;a href='http://www.apple.com/remotedesktop/'&gt;Remote Desktop&lt;/a&gt; starts at $300, but there is a free and easy alternative.&lt;/p&gt; &lt;p&gt;&lt;a href='http://en.wikipedia.org/wiki/Vnc'&gt;VNC,&lt;/a&gt; or Virtual Network Computing, is a remote desktop protocol that many free clients and servers utilize. OSXVNc, the server I use, is available &lt;a href='http://www.redstonesoftware.com/products/vine/server/vineosx/index.html'&gt;here&lt;/a&gt;.&lt;br /&gt;When you start the app, you are given a preferences window, in which&lt;br /&gt;you can set the server password and more. Now, if you want to access your computer from outside your network, and you are using a router, you will need to forward the port 5900 to the computer on which the server is running. Note that in order to access your computer remotely, your computer must be on and connected to the internet.&lt;/p&gt; &lt;p&gt;On the client side, there are many options available.  If you are looking for a Mac VNC client, I have found &lt;a href='http://sourceforge.net/projects/cotvnc/'&gt;Chicken of the VNC&lt;/a&gt; the best, which is also free.  But if you are not on your own Mac, there is a very easy way to connect to your home computer.  &lt;a href='http://realvnc.com/'&gt;RealVNC&lt;/a&gt;, who makes VNC clients and servers for Linux and Windows, also makes a Java applet VNC client that can run on almost any computer. This &lt;a href='http://www.google.com/search?hl=en&amp;amp;q=inurl%3Ajava.vnc&amp;amp;btnG=Search'&gt;Google search&lt;/a&gt; will give you many mirrors for this Java applet. All you need to do is enter your IP or domain name, as well as your password. Speaking of IP addresses, if you don’t have a domain for your home network, you will need to remember or write down your IP address. If you plan to use VNC frequently, you may consider getting a free domain name from a service like &lt;a href='http://www.dyndns.org/'&gt;DynDNS&lt;/a&gt;. Also, your IP will most likely change every time you restart your modem, so you may want to grab a updating utility, which are also available at &lt;a href='http://www.dyndns.org/'&gt;DynDNS&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Remote Desktop may not work well with laptop owners and those who don’t keep their Macs running all the time, but nonetheless, VNC is a great, free solution.&lt;br&gt;&lt;/br&gt;&lt;/p&gt;&lt;p&gt;via：&lt;a href='http://macapper.com/2007/03/19/vnc-remote-desktop-for-free/'&gt;VNC: Remote Desktop for Free&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-206098824612565491?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/206098824612565491/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=206098824612565491' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/206098824612565491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/206098824612565491'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/vnc-remote-desktop-for-free.html' title='VNC: Remote Desktop for Free'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3657747614819752957</id><published>2007-03-21T22:24:00.001+08:00</published><updated>2007-03-21T22:24:21.379+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Windows Vista''落选''高清壁纸</title><content type='html'>&lt;p&gt;Windows Vista官方壁纸摄影师Hamad Darwish终于发布了'落选'的Windows Vista高清版壁纸图片. '这些照片都是在为Windows Vista拍摄壁纸的工作中拍摄的,微软只挑选了一部分,但是我认为剩下的部分也十分精彩.'Hamad Darwish表示.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Windows Vista官方壁纸摄影师Hamad Darwish终于发布了'落选'的Windows Vista高清版壁纸图片.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'这些照片都是在为Windows Vista拍摄壁纸的工作中拍摄的,微软只挑选了一部分,但是我认为剩下的部分也十分精彩.'Hamad Darwish表示.&lt;br /&gt;&lt;br /&gt;打包下载 ( 1920x1200 )&lt;br /&gt;&lt;a href="http://www.istartedsomething.com/uploads/hamadvistawallpapers%5Bhamaddarwish.com%5D.zip"&gt;Download&lt;/a&gt; (30.9MB) - Mirror #1 by www.istartedsomething.com&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vista4beginners.com/Vista-Wallpapers-Collection"&gt;Download&lt;/a&gt; (30.9MB) - Mirror #2 by www.vista4beginners.com&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chip.de/downloads/c1_downloads_24359304.html"&gt;Download&lt;/a&gt; (30.9MB) - Mirror #3 by www.chip.de&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3657747614819752957?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3657747614819752957/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3657747614819752957' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3657747614819752957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3657747614819752957'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/windows-vista.html' title='Windows Vista&amp;#39;&amp;#39;落选&amp;#39;&amp;#39;高清壁纸'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1972542829118969920</id><published>2007-03-20T15:29:00.001+08:00</published><updated>2007-04-14T06:27:12.344+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>新作发布: 苹果上的智能拼音输入法 Fun Input Toy v0.1.0 (Beta)</title><content type='html'>&lt;p&gt; 又一个Mac上的中文输入法诞生了，非windows平台的中文输入法一直不如windows上的多和好，现在这种情况在一点点转变，以前也看到过Apple在招中文输入法的开发人员，不知道他们做得如何了，MacOS 10.5里能不能拿得出手？不过现在不用管，直接用吧:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(Via &lt;a href="http://huajun.w18.net"&gt; To be continued&lt;/a&gt;.)&lt;br /&gt;先来介绍一下这个叫FIT(暂定名)的拼音输入法&lt;br /&gt;虽然只是一个v0.1.0的启始版本,但已经具有很多输入法的高级功能, 和紫光以及QIM有得一拼&lt;br /&gt;注: 不管是现在还是以后, 这个输入法都将对所有Mac OS X的用户免费发放, 希望更多用户能够体会到Mac的精彩世界&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://huajun.bloggerspaces.com/uploaded_images/file-799562.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://huajun.bloggerspaces.com/uploaded_images/file-799562.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;1. 模糊拼音&lt;br /&gt;我最需要的一个功能&lt;br /&gt;2. 自动记忆自定意词组&lt;br /&gt;3. 自动记忆词频, 动态调整&lt;br /&gt;你打得最多的词语会在前面, 基础词频来自权威统计资料&lt;br /&gt;4. 不完整拼音拼音&lt;br /&gt;5. 智能预测输入&lt;br /&gt;6. Univeral Binary 支持x86的Mac用户, 我知道现在有很多朋友在pc上用上了Mac, 作为一个老mac用户, 实在是太欢迎你们了&lt;br /&gt;现在知道的缺陷: 在Microsoft Office和Firefox这样的非Cocoa应用程序上好像不太Work&lt;br /&gt;&lt;br /&gt;我们将继续改善输入法的功能和兼容性, 稳定性, 使用上有任何问题或者建议请给我发邮件, 特别是要把Crash Report发给我, 帮助我继续改进输入法, 如果觉得好用请不要吝啬发邮件来表扬一下, 毕竟人都需要鼓励一下才能继续前进的&lt;br /&gt;相信这个对于我个人来说或者我们的Studio来说都是一个具有深远意义的作品, 这只是一个开始, 勉励一下自己和朋友们, 应该继续努力!&lt;br /&gt;这是一次原来以为的不可能任务, 再一次证明了, 为之则难者亦易矣, 不为则易者亦难矣, 记之&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1972542829118969920?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1972542829118969920/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1972542829118969920' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1972542829118969920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1972542829118969920'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/fun-input-toy-v010-beta.html' title='新作发布: 苹果上的智能拼音输入法 Fun Input Toy v0.1.0 (Beta)'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-543878673917140835</id><published>2007-03-20T13:45:00.001+08:00</published><updated>2008-11-15T16:05:57.689+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Acme 的三屏幕强化「可携式」台式机</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ygzfEy9Te6k/Rf90ut1MZdI/AAAAAAAAARo/YPTjP7x_A_E/s1600-h/acme01_440.jpeg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_ygzfEy9Te6k/Rf90ut1MZdI/AAAAAAAAARo/YPTjP7x_A_E/s400/acme01_440.jpeg" alt="" id="BLOGGER_PHOTO_ID_5043878453603755474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;这目前还只是个原型机，但看起来就算在电影里都很少出现这么豪华的可携式台式机。所谓的「强化」只是指它以强化铝化合金为骨架，不像 Panasonic 的 Toughbook 那样防水、防尘、还防飞弹（记得史密斯任务吗 XD）。不过和 Toughbook 相比，这台在电影上却上相得多，说不定不久之后就会出现在大银幕上了吧？&lt;br /&gt;&lt;br /&gt;顺带一提，它的两个侧屏幕是栓上去的。或许做成折叠式的会更帅...&lt;br /&gt;&lt;p&gt;(Via &lt;a href="http://www.engadget.com/2007/03/18/acmes-tri-fold-rugged-field-pc-beep-beep-zip-bang/"&gt;Engadget&lt;/a&gt;.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-543878673917140835?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/543878673917140835/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=543878673917140835' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/543878673917140835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/543878673917140835'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/acme-tri-fold-rugged-field-pc-beep-beep.html' title='Acme 的三屏幕强化「可携式」台式机'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ygzfEy9Te6k/Rf90ut1MZdI/AAAAAAAAARo/YPTjP7x_A_E/s72-c/acme01_440.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-2594448863904336582</id><published>2007-03-20T04:06:00.000+08:00</published><updated>2007-03-22T15:37:32.860+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='original'/><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><title type='text'>[原创连载]Get Back/Chapter 2</title><content type='html'>&lt;span style="font-weight: bold;"&gt;8号门&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;8号门此时已自动为我们开启.里面很黑,空气好像因长时间不流通,粗糙得跟纱布似的裹人脸.孩子湿汗的手紧紧抓住我不放.我俩小心的摸进去,门紧跟着在身后关闭.突然周围被照得雪亮,老半天睁不开眼.&lt;br /&gt;这是个长廊.&lt;br /&gt;这时我们才注意到入口左边墙上一突出的平台在吱吱往外吐纸.孩子说这就是流程表单.我哦了一声,好奇地走过去取表单.这表单上只写了'护送'二字,调过来翻过去得看也就这么两个字,这算什么表单?!&lt;br /&gt;我问孩子:什么意思?&lt;br /&gt;孩子道:我也不清楚,我姐姐来过图书馆一次,只是馆里的事都不记得了,只觉得很快就出来了.&lt;br /&gt;不管怎么样,我们往前走吧,有我在,不用怕!说这话我自己心里都没底.可是既然把孩子领来了,我有责任承担所有风险.&lt;br /&gt;孩子点点头.&lt;br /&gt;长廊里持续回荡着一快一慢两对脚步声,噼里啪啦砸在墙上.我没瞧见半个灯管,这耀眼的光像是从四壁包裹过来,所以倒不下人影来.瞧不见影子,走起路来竟不踏实,我开始眩晕像吐,而这光线仿佛能穿透衣服直接附到身上,只觉浑身被吸出一层细汗,好受多了.&lt;br /&gt;走了很久,这廊道不见尽头,回头时8号门也瞧不见了.我开始产生了对直线的恐惧.深呼吸了几下,问道:累么,小牙?累了就坐下歇歇.他摇摇头.我耸耸肩,继续走吧.&lt;br /&gt;慢慢的与其说是眼睛渐渐对四周那强烈的光线适应了,倒不如说,这光线暗下来了.走着走着,长廊里的东西渐渐丰富起来了,或者说变脏了,原本这长廊光秃地让人发毛.地上出现了烟头,墙上有了壁灯,蜘蛛网,白石灰掉落露出里面的红砖墙,令我激动的是我看见自己的影子了!牙一直低着头走路,一声不吭,好像心事重重,不过他该注意到周围的变化了.我的心情倒是越来越轻松了,只是对前面的未知有些不安.&lt;br /&gt;我想打断牙的沉思,跟他说说话,于是提了下他的手,他这才回过神,抬头看我.这一抬头我俩都惊得同时撒开手,互指对方:你的眼!短暂的不知所措后,我连忙蹲下来,一把把他拉过来,牙的瞳仁泛着血红的光芒,里面映射着另一对火红的眼球.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-2594448863904336582?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/2594448863904336582/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=2594448863904336582' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/2594448863904336582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/2594448863904336582'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/get-backchapter-2.html' title='[原创连载]Get Back/Chapter 2'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1227813154880857988</id><published>2007-03-19T18:22:00.000+08:00</published><updated>2007-03-22T15:48:51.446+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Apollo 发布，兼一个应用</title><content type='html'>&lt;a href="http://labs.adobe.com/technologies/apollo/"&gt;Apollo alpha 1&lt;/a&gt;提供下载了。这个东西是Adobe买下Macromedia后对Flash的继续发展。可以认为是个跨平台跨网络与桌面的多媒体基础平台。不是开发者目前不需要深入了解。&lt;br /&gt;&lt;br /&gt;普通用户用它就行了，随着发布的还有个应用例子：&lt;a href="http://www.teknision.com/preview/finetunedesktop/"&gt;Finetune Desktop。&lt;/a&gt;用来在线听英文歌曲还是不错的。这里推荐它一下。首先要先安装&lt;a href="http://labs.adobe.com/downloads/apolloruntime.html"&gt;Apollo的运行环境&lt;/a&gt;（相当于以前装的Flash插件）。&lt;br /&gt;&lt;br /&gt;至于&lt;a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_apollo"&gt;SDK开发套件&lt;/a&gt;，Flash开发者可以跟上了。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1227813154880857988?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1227813154880857988/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1227813154880857988' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1227813154880857988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1227813154880857988'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/apollo.html' title='Apollo 发布，兼一个应用'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-325799741074060981</id><published>2007-03-19T18:00:00.001+08:00</published><updated>2007-04-15T16:50:23.886+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Mac 上的Total Commander (TC)--Xfolders</title><content type='html'>在Windows上用过TC来管理各种多如牛毛的文件后，大多对其爱不释手，甚至有人离开它就不想用电脑...&lt;br /&gt;就算转移了平台也不断在寻找类似的软件。现在在MacOS上就有类似的软件－－&lt;a href="http://www.kai-heitkamp.com/"&gt;Xfolders&lt;/a&gt;&lt;br /&gt;而且是免费的。自我介绍说是仿Norton Commander写的。我没用过NC，也没考证到底NC，TC谁先出来，反正三个都应该类似...&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;&lt;br /&gt;- Completely for Tiger re-written cocoa application.&lt;br /&gt;- Uses the new technology of Mac OS X Tiger.&lt;br /&gt;- Full integration of the Finder, thus support of all file operations from and to the Finder.&lt;br /&gt;- Drag &amp; Drop between both filelists and the Finder.&lt;br /&gt;- Support for all important file operations.&lt;br /&gt;- Info dialoge for simply changing the file and folder attributes.&lt;br /&gt;- Intelligent path navigators for both file lists.&lt;br /&gt;- Bookmarks &amp;amp; manager for folders.&lt;br /&gt;- Direct access to importend system utilities.&lt;br /&gt;- Navigation with the keyboard ala Norton Commander.&lt;br /&gt;- Integrated, detailed Spotlight search.&lt;br /&gt;- Integrated image browser.&lt;br /&gt;- Integrated terminal.&lt;br /&gt;- Versatile search and compare possibilities.&lt;br /&gt;- Zip archive support.&lt;br /&gt;- Flat or 3D Unified look.&lt;br /&gt;- Supports the following languages: [English] [German] [Italian] [French] [Spanish]&lt;br /&gt;- Optimized for the PowerPC G5 processor, but remains compatible to G3 and G4 processors!&lt;br /&gt;- Universal binary: Compatible with Intel based Macs!&lt;br /&gt;- Xfolders is freeware!&lt;br /&gt;&lt;br /&gt;System Requirements:&lt;br /&gt;&lt;br /&gt;- Apple PowerPC or Intel based Mac with Mac OS X 10.4 Tiger&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kai-heitkamp.de/xfolders/xfolders_en.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.kai-heitkamp.de/xfolders/xfolders_en.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;另外，Unix下也有类似的软件，就在Xfolders的网站上，叫做Qfolders（Qt上写成的）。因为用的Qt库，所以跨平台，Vista上都能用。&lt;br /&gt;&lt;br /&gt;Planned features:&lt;br /&gt;&lt;br /&gt;- Completely new written native C++ application for Unix, Mac OS X and Windows.&lt;br /&gt;- Uses the new technology of Qt4.&lt;br /&gt;- Supports all important file operations.&lt;br /&gt;- Drag &amp; Drop between both filelists.&lt;br /&gt;- Navigation with the keyboard ala Norton Commander.&lt;br /&gt;- Some useful tools.&lt;br /&gt;- Qfolders is licensed under the GPL!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System requirements:&lt;br /&gt;&lt;br /&gt;- Unix (Linux, Solaris, HP-UX, IRIX, AIX, many other Unix variants)&lt;br /&gt;- Mac OS X 10.3 "Panther" (ppc only)&lt;br /&gt;- Mac OS X 10.4 "Tiger" (universal binary)&lt;br /&gt;- Windows (Vista, Server 2003, XP, 2000, NT4, Me/98)&lt;br /&gt;- Qt4 toolkit (currently 4.2.3)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kai-heitkamp.de/qfolders/qfolders_windows.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.kai-heitkamp.de/qfolders/qfolders_windows.png" alt="" border="0" /&gt;&lt;/a&gt;On Windows (Vista)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kai-heitkamp.de/qfolders/qfolders_mac.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.kai-heitkamp.de/qfolders/qfolders_mac.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On Mac OS X 10.4 "Tiger" (Aqua)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kai-heitkamp.de/qfolders/qfolders_linux.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.kai-heitkamp.de/qfolders/qfolders_linux.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On Linux (openSuSE 10.2)&lt;br /&gt;&lt;br /&gt;最后，Mac上还有个类似的商业软件，disk order： http://www.likemac.ru/english/&lt;br /&gt;&lt;br /&gt;------------&lt;br /&gt;又：最近又有个类似的软件ForkLift在Beta中&lt;br /&gt;http://www.binarynights.com/&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-325799741074060981?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/325799741074060981/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=325799741074060981' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/325799741074060981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/325799741074060981'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/mactotal-command-tc-xfolders.html' title='Mac 上的Total Commander (TC)--Xfolders'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-88463279007206006</id><published>2007-03-19T09:18:00.001+08:00</published><updated>2007-04-16T10:34:25.454+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skill'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>[zt]我的硬盘我做主----找回失去的硬盘空间</title><content type='html'>上次简单翻译了 &lt;a href="http://jayesoui.blogspot.com/2007/03/mac.html"&gt;简单五步回收你的Mac硬盘空间&lt;/a&gt;， 现在再转一篇文章，里边提到另一些回收Mac硬盘空间的方法。&lt;br /&gt;&lt;p&gt;我的硬盘我做主:----找回失去的硬盘空间(form:http://www.macx.cn/a/a.asp?B=100&amp;ID=266610)&lt;br /&gt;&lt;span style="color:royalblue;"&gt;&lt;br /&gt;对小白用户来说，捉襟见肘的硬盘空间经常令人头疼。如果你使用的是20或者30G的硬盘，平时1G左右的剩余更是常有的事。刚接触Mac的新手经常会惊讶于迅速消失掉的硬盘空间：明明昨天还有4G的，今天怎么只剩一半了？究竟是哪只看不见的手动了我们的硬盘？&lt;br /&gt;如果你也像狮子一样经常对着“启动磁盘上的空间不足”的警告抓头的话，请follow下面的步骤，保证让这讨厌的警告从此乖乖消失：&lt;br /&gt;首先 清洁小白的屏幕 直到没有任何灰尘为止&lt;br /&gt;然后 擦净鼠标（MM鼠的清洁方式请搜索论坛）&lt;br /&gt;最后 清理键盘 ：试试把键盘翻过来晃几晃，看看都会掉出什么来&lt;br /&gt;好了，现在我们开始动手 ：&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;第一步   清空系统日志。&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;如果你已经用了苹果一年而从来没听说过日志文件的话，恭喜: 你至少能从这上面回收上G的空间。OSX运行的时候会不断的把许多信息写入日志文件，而系统默认是不会自动清理庞大的日志数据的，这东西对我们普通用户也没什么用处，安全删除之！&lt;br /&gt;方法：&lt;br /&gt;A 找到主目录下的 library(资源库）目录，然后是logs子目录，就是它了。全选里面的文件，删除。&lt;br /&gt;B 运行 "应用程序:实用程序:控制台" ，然后选择菜单 "文件＝》打开控制台日志"   (如图）按苹果＋删除键，再选择"文件＝》打开系统日志" , 按苹果＋删除键。注意是按键盘操作而不是按程序界面上的清除按钮。那个按钮只是清空显示，不会删除文件。&lt;br /&gt;&lt;img src="http://www.macx.cn/images/upload/2006/08/22/103659.png" /&gt;&lt;br /&gt;方法B只是删除了体积最大的两个日志文件，不会删除其他小体积文件如应用程序崩溃报告等。所以如果你追求完美请用方法A。&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;第二步   删除不用的语言包&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;OS X 对多语言的支持堪称完美，而坏消息是这些语言包会吃掉大量的空间。大部分的程序都内置了我们从来不会用到的多种语言包，白白浪费磁盘。删除不用的语言包大约可以收回2G左右的空间。下面这两个软件都可以帮助你：&lt;br /&gt;&lt;a href="http://www.versiontracker.com/php/search.php?mode=basic&amp;amp;action=search&amp;str=delocalizer&amp;amp;plt%5B%5D=macosx&amp;amp;amp;amp;amp;x=0&amp;y=0" target="_blank"&gt;&lt;span style="color:blue;"&gt;DeLocalizer 1.1&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Monolingual 1.3.2&lt;br /&gt;&lt;a target="_blank" href="http://www.wally.in/soft508.htm"&gt;http://www.wally.in/soft508.htm&lt;/a&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;第三步 找出漏网之鱼&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;对系统文件的清理告一段落，下面我们找一找硬盘里的大体积文件。&lt;br /&gt;打开finder, 按苹果键+F 打开查找功能，设置一个合适的数值（比如5MB）找出你硬盘里所有体积大于这个数的文件。如图：&lt;br /&gt;&lt;img src="http://www.macx.cn/images/upload/2006/08/22/103712.png" /&gt; 确定你知道自己要删除的是什么。&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;另一种方法是（狮子比较偏爱这个）使用Disk Inventory X 这个软件。它的功能非常有趣，会把你硬盘里所有的文件以彩色方格的形式直观显示出来。具体使用方法参考我的另一篇贴子：&lt;/span&gt;&lt;span style="color:blue;"&gt;Disk Inventory X ---- 透视你的硬盘&lt;/span&gt;&lt;br /&gt;&lt;img src="http://www.macx.cn/images/upload/2006/08/22/103706.png" /&gt;&lt;br /&gt;&lt;img witdth="400" src="http://www.macx.cn/images/upload/2006/08/22/102247.jpg" height="300" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;第四步 压缩文件&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;电子书等目录结构复杂，文件琐碎的文件可以选择压缩保存。&lt;br /&gt;我们有三种格式选择: zip(不是坛子里的那个 :p) , rar 和dmg。偶推荐使用dmg。&lt;br /&gt;A  zip: 最通用的压缩格式，选择一个目录/文件按右键，选择"归档"即可。但是这样创建的zip文件压缩比不大，而且在pc上经常会发生打不开的情况。所以如果你经常使用zip格式，请下载一个合适的软件。狮子推荐"ZipIt"，它使用很方便。但是不支持压缩中文名字的文件。&lt;br /&gt;B  rar: 亚洲比较常见的压缩格式。优点是压缩比较大，缺点是苹果上需要另外下载软件支持。比如"UnrarX" ,它支持中文密码。&lt;br /&gt;C  dmg: 我们经常下载到的文件都是这个格式的。严格来说它并不是压缩包，而是磁盘映像。但是它是压缩保存的，所以也可以帮我们节省磁盘空间。使用这个格式的好处是需要用的时候不需要解压缩，直接装载就可以了，目录结构，图标什么的会被完整保留。 软件推荐使用"EasyDmg" ,一个拖拽动作搞定一切。当然高手也可以选择系统附带的磁盘工具来做。&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;第五步 释放临时空间&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;如果你浏览了大量的网页，safari可能会吃掉上G的硬盘作为虚拟&lt;/span&gt;内存&lt;span style="color:steelblue;"&gt;。注销(apple+option+shift+Q)然后重登陆就可以释放这些空间，作为救急手段很有效。&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;最后一步 硬盘不是垃圾站&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;删除那些你安装了但是从来不用的软件(比如Garageband就占了1G多的空间，而大部分人甚至不知道自己安装了这个程序。但是注意别删错了!)，安装的游戏超过3个的话请只留下最常玩的2－3个。长期不使用的文件请刻录保存。申请一个网上空间把硬盘里你觉得鸡肋的多媒体文件放上去。&lt;br /&gt;好了，清理的差不多了，现在看看你的剩余空间，是不是有地方放新的垃圾了呢&lt;br /&gt;我们的口号是：&lt;/span&gt;&lt;span style="color:gold;"&gt;&lt;br /&gt;“只有找不着，没有删不掉。”&lt;br /&gt;“空间就像海绵里的水，只要愿挤，总是有的。”&lt;br /&gt;“以节省空间为荣，以浪费空间为耻。”&lt;br /&gt;“不清理硬盘的苹果迷是不合格的苹果迷。”&lt;br /&gt;......&lt;/span&gt;&lt;span style="color:steelblue;"&gt;&lt;br /&gt;此线下为热心网友的补充, 欢迎您回贴，和大家共享一下经验吧&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr style="color: rgb(0, 0, 0);font-size:78%;" &gt;&lt;span style="color:cadetblue;"&gt;by 小贝壳：&lt;br /&gt;其實在老虎肚子裡還有很多可以刪除的文件&lt;br /&gt;比如自帶的壁紙 屏保之類的 還有一些iLife的聲音組件&lt;br /&gt;還有很多軟體的pdf說明文檔之類的&lt;br /&gt;總之定期的在電腦裡清理一些不用的資源是完全應該&lt;/span&gt;&lt;br /&gt;&lt;p&gt;(Via &lt;a href="http://www.macx.cn/a/a.asp?B=100&amp;amp;ID=266610"&gt;MacX.cn&lt;/a&gt;.)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-88463279007206006?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/88463279007206006/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=88463279007206006' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/88463279007206006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/88463279007206006'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/zt.html' title='[zt]我的硬盘我做主----找回失去的硬盘空间'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3534746506277501208</id><published>2007-03-18T11:25:00.001+08:00</published><updated>2007-03-18T11:25:17.272+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='tech'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>MIT sketching</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NZNTgglPbUA"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NZNTgglPbUA" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;「手绘二维力学仿真器」。只要在这纸上画上物体，然后按下仿真钮，举凡万有引力、动能转移( 碰撞 )、力矩、或是弹簧简谐运动，都能活生生地在这纸上动了起来。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3534746506277501208?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3534746506277501208/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3534746506277501208' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3534746506277501208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3534746506277501208'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/mit-sketching.html' title='MIT sketching'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3285438152381244995</id><published>2007-03-18T10:47:00.001+08:00</published><updated>2007-03-18T15:24:52.674+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='original'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google导航 VS Baidu hao123</title><content type='html'>&lt;a href="http://daohang.google.cn/"&gt;谷歌导航&lt;/a&gt;是中国市场才有的，专门针对百度的同类服务&lt;a href="http://hao123.com/"&gt;hao123&lt;/a&gt;的。&lt;br /&gt;相当年yahoo就是靠网址导航起的家，那时互联网信息少，人工都能编个目录。现在信息爆炸，垃圾泛滥，没有点金刚钻门户是立不起来的。&lt;br /&gt;现在机器的代码替代了人工的编目，google获得了空前的成功（atlervista虽然是先驱，但这个项目的初衷只是为了证明SUN的大型机的强大，工具的目的不是服务人最终得不到人的认可）。既然靠搜索就能得到接近完美的信息，那么还需要网址导航干什么？以google的强大需要搞这么个鸡肋玩意？&lt;br /&gt;回应对手可能是个最主要的目的，在中国市场上google还不是一超独霸。在美国市场传统做软件的微软也是处处针对google推出网络服务（虽然都不怎么样）。&lt;br /&gt;其次也算是照顾刚刚接触互联网的用户，也算是一种人文关怀吧。网址用daohang.google.cn这个汉语拼音（谷歌其他本地服务都是这样）也体现对目标客户的人文关照。&lt;br /&gt;总之产品为人服务，不是人去伺候产品。再牛的高技术公司都躲不开这个规律。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3285438152381244995?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3285438152381244995/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3285438152381244995' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3285438152381244995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3285438152381244995'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/google-vs-baidu-hao123.html' title='Google导航 VS Baidu hao123'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6440526679051355564</id><published>2007-03-17T17:50:00.001+08:00</published><updated>2007-03-18T15:25:29.798+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tech'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>谷歌热榜，Google用户貌似比百度有钱</title><content type='html'>&lt;p&gt;&lt;a href="http://solidot.org/articles/07/03/16/0228212.shtml"&gt;Solidot 文章： 谷歌热榜，Google用户貌似比百度有钱&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.google.cn/rebang/home"&gt;谷歌热榜：&lt;/a&gt;&lt;br /&gt;众多热门榜单、最新流行尽在掌握&lt;/p&gt;&lt;p&gt;看了一下，似乎是用RoR开发的，连SAP都用RoR了，Google就是搞网络的，能不用吗。&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6440526679051355564?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6440526679051355564/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6440526679051355564' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6440526679051355564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6440526679051355564'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/solidot-google.html' title='谷歌热榜，Google用户貌似比百度有钱'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1557959387675636188</id><published>2007-03-17T05:32:00.001+08:00</published><updated>2007-03-17T10:19:03.707+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>各种Linux发行版</title><content type='html'>&lt;img style="cursor: pointer; width: 400px;" src="http://lh4.google.com/image/johnsonqu/RfsOWYN_iCI/AAAAAAAAANw/xCTOw8T55kw/Linux%E5%8F%91%E8%A1%8C%E7%89%88.jpeg"  /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1557959387675636188?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1557959387675636188/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1557959387675636188' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1557959387675636188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1557959387675636188'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/linux_17.html' title='各种Linux发行版'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-8415968176729619183</id><published>2007-03-16T17:51:00.001+08:00</published><updated>2007-03-17T20:51:59.491+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>电脑操作之道</title><content type='html'>为无为　事无事　味无味　&lt;br /&gt;大小多少　报怨以德　图难于其易　为大于其细&lt;br /&gt;天下难事　必作于易　天下大事　必作于细&lt;br /&gt;&lt;br /&gt;Act without doing;&lt;br /&gt;work without effort.&lt;br /&gt;&lt;br /&gt;Think of the small as large&lt;br /&gt;and the few as many.&lt;br /&gt;&lt;br /&gt;Confront the difficult&lt;br /&gt;while it is still easy;&lt;br /&gt;&lt;br /&gt;accomplish the great task&lt;br /&gt;by a series of small acts.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.robinlu.com/blog/archives/34"&gt;道&lt;/a&gt;这个帖子里赞了一下Quicksilver－－水银，mac下的一个很好的快捷启动程序的软件。上边老子的话就是在这个软件的自述里的。有了它，手几乎可以不离开键盘。&lt;br /&gt;不过Mac里还是不能完全脱离鼠标操作，这点不如windows。在windows下没有鼠标我也能凑合着几乎和用鼠标一样用电脑。mac下不知道能不能，反正我还是不行。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-8415968176729619183?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/8415968176729619183/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=8415968176729619183' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8415968176729619183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8415968176729619183'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_5960.html' title='电脑操作之道'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1648650921066841813</id><published>2007-03-16T07:27:00.000+08:00</published><updated>2007-03-16T09:00:53.658+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='tech'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Opera CTO演示OLPC笔记本</title><content type='html'>Opera CTO在一次&lt;a target="_blank" href="http://blog.wired.com/monkeybites/2007/03/opera_visits_wi.html"&gt;技术爱好者聚会&lt;/a&gt;上演示了&lt;a target="_blank" href="http://laptop.org/" title="OLPC是“每个儿童一台笔记本电脑”(One Laptop per Child)的简称" &gt;OLPC&lt;/a&gt;笔记本的使用。真是非常棒的“玩具”。&lt;br /&gt;&lt;embed src="http://www.youtube.com/v/3IORykJgZ2o" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1648650921066841813?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1648650921066841813/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1648650921066841813' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1648650921066841813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1648650921066841813'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/opera-ctoolpc.html' title='Opera CTO演示OLPC笔记本'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3148753349300414824</id><published>2007-03-16T06:44:00.001+08:00</published><updated>2007-03-16T06:58:01.880+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Bleezer- 免费的跨平台博客写作客户端</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://larryborsato.com/bleezer/SamplePost.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://larryborsato.com/bleezer/SamplePost.jpg" alt="" border="0" /&gt;&lt;/a&gt;为什么用Bleezer写博客? &lt;ul&gt;&lt;li&gt;可以从任何平台写博客. 工作于 Windows, OS X, Linux和BSD.&lt;/li&gt;&lt;li&gt;可用于任何博客服务. 你想到的都有，甚至Blogger.&lt;/li&gt;&lt;li&gt;所见即所得的编辑. 按实际显示效果来编辑你的帖子.&lt;/li&gt;&lt;li&gt;图片上传. 图片会被自动上传到你的服务器.&lt;/li&gt;&lt;li&gt;分类支持.支持多重分类.&lt;/li&gt;&lt;li&gt;添加标签到任何标签服务. Technorati, del.icio.us, 或者其&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://larryborsato.com/bleezer/ExistingPosts.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://larryborsato.com/bleezer/ExistingPosts.jpg" alt="" border="0" /&gt;&lt;/a&gt;他任何的.&lt;/li&gt;&lt;li&gt;创建自定标记.为自定HTML标记定义你自己的组合键.&lt;/li&gt;&lt;li&gt;拼写检查. （仅适于西文）.&lt;/li&gt;&lt;li&gt;推广. 侦测（Ping） Technorati, weblogs.com, ping-o-matic, Pingoat, 或者其他服务.&lt;/li&gt;&lt;li&gt;可离线或在线工作. 离线创作帖子当需要时再贴出来.&lt;/li&gt;&lt;li&gt;我提过Bleezer是免费的吗?&lt;/li&gt;&lt;/ul&gt;PS.可惜在Mac上对中文输入法不支持，没法用中文写作。这篇帖子虽然是Bleezer发出来的，但我是用另外的文本编辑器写的。就算粘贴到Bleezer里发出来，到后台看看帖子的源码你会大吃一惊的。&lt;br /&gt;&lt;br /&gt;下载地址： &lt;a href="http://larryborsato.com/bleezer/"&gt;点这里&lt;/a&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;div class="bleezer-tags:software,apple,pc,unix"&gt;&lt;p style="font-size: 10px; text-align: right;"&gt;Technorati: &lt;a href="http://www.technorati.com/tag/software" rel="tag"&gt;software&lt;/a&gt; &lt;a href="http://www.technorati.com/tag/apple" rel="tag"&gt;apple&lt;/a&gt; &lt;a href="http://www.technorati.com/tag/pc" rel="tag"&gt;pc&lt;/a&gt; &lt;a href="http://www.technorati.com/tag/unix" rel="tag"&gt;unix&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="bleezer-powered"&gt;&lt;p style="font-size: 10px; text-align: right;"&gt;&lt;i&gt;Powered by &lt;a href="http://www.bleezer.com/"&gt;Bleezer&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3148753349300414824?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3148753349300414824/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3148753349300414824' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3148753349300414824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3148753349300414824'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/bleezer.html' title='Bleezer- 免费的跨平台博客写作客户端'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6854704277745432244</id><published>2007-03-16T03:50:00.000+08:00</published><updated>2007-03-16T03:59:17.543+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tech'/><title type='text'>嫦娥一号推迟到下半年发射 火箭发射基地初定海南</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chinaneast.xinhuanet.com/jszb/2007-03/15/xinsrc_330304150902859131416.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://chinaneast.xinhuanet.com/jszb/2007-03/15/xinsrc_330304150902859131416.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;前天，国防科工委主任张云川接受媒体记者采访时表示，“嫦娥一号”绕月卫星将在下半年发射飞往月球轨道。&lt;br /&gt;&lt;br /&gt;  张云川表示，发射时间的选择对于月球卫星来说是比较苛刻的。为了让“嫦娥一号”能够在地球、月球、太阳之间找到最佳的角度，使它比较顺利地进入月球轨道，要选择一个最为有利的发射时间。目前“嫦娥一号”的各项准备工作都在按预定计划执行，预计会在今年下半年发射升空。&lt;br /&gt;&lt;br /&gt;  全国人大代表、中国航天科技集团公司第六研究院顾问、原党委书记戴证良昨天透露，“嫦娥一号”曾计划今年上半年发射，但是由于一些工作任务环节的因素，将发射时间推迟到下半年，大约会在9月份左右发射。&lt;br /&gt;&lt;br /&gt;  此外，戴证良代表介绍，我国将用于空间站发送的大运载火箭的发动机研制已经完成，目前进入试样阶段，预计明年可以生产使用。他介绍，大运载火箭直径有5米左右，而现在的运载火箭直径为3米左右。戴证良介绍，5米的直径使大运载火箭在内陆地区运输困难，因此国家已将大运载火箭的发射基地初步定于海南岛，便于海上运输。（ 2007-03-15 来源：京华时报    记者 郭莹）&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6854704277745432244?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6854704277745432244/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6854704277745432244' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6854704277745432244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6854704277745432244'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_16.html' title='嫦娥一号推迟到下半年发射 火箭发射基地初定海南'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-5137165631628170555</id><published>2007-03-16T03:08:00.000+08:00</published><updated>2007-03-16T03:10:33.433+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><title type='text'>Microsoft UniveRSS v0.8.0.0 微软的3D RSS阅读器</title><content type='html'>UniveRSS - a 3D Vista RSS reader&lt;br /&gt;&lt;br /&gt;&lt;table class="contentTable515Body" background="../_img/bg_515content.gif" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div class="textBold"&gt;What is it for?&lt;/div&gt;&lt;div class="text"&gt;UniveRSS is a 3D RSS feed reader for Windows Vista. It leverages the &lt;a href="http://msdn.microsoft.com/windowsvista/prodinfo/what/about/default.aspx#wpfx" target="_blank"&gt;Windows Presentation Foundation&lt;/a&gt; and provides a stunning way of visualizing RSS feeds and their content. It introduces a full-screen 3D universe where galaxies represent the folders of your RSS feed directory, and the stars are represented by the spinning cubes that hold the feed information. Size and position of the feed cubes indicate how many unread items they contain.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td&gt;&lt;div class="imgBox"&gt;&lt;img src="https://www.microsoft.com/emea/msdn/thepanel/_img/img_universs1.jpg" alt="" border="0" height="356" width="445" /&gt;&lt;div class="imgDesc"&gt;RSS feeds are represented as 3D cubes spinning in a universe.&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td&gt;&lt;div class="imgBox"&gt;&lt;img src="https://www.microsoft.com/emea/msdn/thepanel/_img/img_universs2.jpg" alt="" border="0" height="356" width="445" /&gt;&lt;div class="imgDesc"&gt;The cube's faces are used for displaying item lists, item content and media.&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td&gt;&lt;div class="text"&gt;You navigate through the feed galaxies in a game-like environment, freely moving in all three dimensions. Selecting items in lists will turn the cube to the next side displaying the item's content including images. Just click the right mouse buttons and you turn back to the list view or to the galaxy.&lt;br /&gt;&lt;br /&gt;UniveRSS is a showcase application that demonstrates the use of several WPF features, 3D animations, data binding, and data visualization. Currently UniveRSS uses the RSS Feed Store managed through Internet Explorer 7. Later versions will allow you to manage the Feed Store from within the UniveRSS application.&lt;br /&gt;&lt;br /&gt;Please note: We expect RSS feeds to become visually more appealing in the future. Today a lot of feeds don't provide any logo or feed picture yet. In such cases the cubes only display a generic feed icon. So make sure to use a list of feeds that provide logos to generate the best experience (e.g. most podcasts).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td&gt;&lt;div class="textBold"&gt;What do you need?&lt;/div&gt;&lt;div class="text"&gt;Since this is a WPF showcase using 3D models and animations, we strongly recommend to install UniveRSS on PCs ready for Windows Vista Premium. This includes PCs with the following specifications:&lt;ul&gt;&lt;li&gt;1 GHz 32-bit (x86) or 64-bit (x64) processor&lt;/li&gt;&lt;li&gt;1 GB of system memory&lt;/li&gt;&lt;li&gt;Support for DirectX 9 graphics with a WDDM driver, 128 MB of graphics memory (minimum), Pixel Shader 2.0 and 32 bits per pixel.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="text"&gt;You will find the complete list of requirements &lt;a href="http://www.microsoft.com/windowsvista/getready/capable.mspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td&gt;&lt;div class="textBold"&gt;Road map - what comes next?&lt;/div&gt;&lt;div class="text"&gt;UniveRSS is an evolving showcase application which will continuously be developed and enhanced with new features. It will update itself through the ClickOnce deployment service. You will also find regular articles on the development and how to's from a developer's perspective. Updates will be announced through the MSDN Flash newsletter. By registering for the Panel website you will receive updates via MSDN Flash.&lt;br /&gt;&lt;br /&gt;Over the next months you will see enhancements and additional features like:&lt;ul&gt;&lt;li&gt;alternative ways to navigate in UniveRSS&lt;/li&gt;&lt;li&gt;further customization features and RSS feed management information&lt;/li&gt;&lt;li&gt;advanced search and sorting possibilities&lt;/li&gt;&lt;li&gt;more-advanced physical animation model&lt;/li&gt;&lt;li&gt;integration of Live services&lt;/li&gt;&lt;li&gt;additional layouts&lt;/li&gt;&lt;li&gt;and many more …&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td&gt;&lt;div class="textBold"&gt;How is it done?&lt;/div&gt;&lt;div class="text"&gt;With the release of version 1.0 you will find documentation and descriptions on how UniveRSS was built.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div id="intro"&gt; &lt;p&gt; UniveRSS是一款用于Windows Vista的3D RSS feed阅读器。该程序借助Windows Presentation Foundation能以图形化的方式展示RSS Feed及其内容。 &lt;/p&gt; &lt;/div&gt;  &lt;div class="entry"&gt;   &lt;p&gt;在UniveRSS中，我们可以看到一个3D的“宇宙”空间，“银河”代表RSS feed目录，而立方体形状的“星星”代表单个feed。feed立方体的大小和位置取决于内含多少为阅读的项目。&lt;br /&gt;另外用户可以通过网站logo或feed图片来辨别各个feed。 &lt;/p&gt; &lt;p&gt; 微软表示在这种环境中的操作有点像玩游戏，“选择列表中的项目将把立方体转到另一面，显示出包括图片在内的项目内容”，“点击鼠标右键就可以回到列表视图或者返回银河。” &lt;/p&gt; &lt;p&gt; 微软建议UniveRSS安装在Windows Vista Premium-ready PC中，硬件配置为1Ghz以上CPU，1GB内存，支持DirectX 9并具备WDDM驱动的显卡，128MB显存，支持Pixel Shader 2.0以及32位色深。 &lt;/p&gt; &lt;p&gt; UniveRSS未来计划中的功能包括其他的导航方式，高级搜索和分类，和微软Live平台向集成以及更多的个性化选项。 &lt;/p&gt; &lt;p&gt; 官网：https://www.microsoft.com/emea/msdn/thepanel/featured/universs.aspx &lt;/p&gt;     &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-5137165631628170555?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/5137165631628170555/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=5137165631628170555' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5137165631628170555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5137165631628170555'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/microsoft-universs-v0800-3d-rss.html' title='Microsoft UniveRSS v0.8.0.0 微软的3D RSS阅读器'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1124848209299200178</id><published>2007-03-13T22:09:00.000+08:00</published><updated>2007-03-14T07:01:34.958+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><title type='text'>世界最长双洞秦岭终南山公路隧道 全长18公里</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chinaneast.xinhuanet.com/jszb/2007-01/18/xin_0301041808253431150419.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://chinaneast.xinhuanet.com/jszb/2007-01/18/xin_0301041808253431150419.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chinaneast.xinhuanet.com/jszb/2007-01/18/xin_2701041909375312880039.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://chinaneast.xinhuanet.com/jszb/2007-01/18/xin_2701041909375312880039.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chinaneast.xinhuanet.com/jszb/2007-01/18/xin_240104190937328615337.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://chinaneast.xinhuanet.com/jszb/2007-01/18/xin_240104190937328615337.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chinaneast.xinhuanet.com/jszb/2007-01/20/xin_2101042013150781978027.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://chinaneast.xinhuanet.com/jszb/2007-01/20/xin_2101042013150781978027.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;    新华网西安１月２０日电（记者储国强、梁娟）中国工程技术人员历时４年零9个多月创造的一项世界之最使中国南北分界线秦岭天堑变通途。全长 １８．０２公里的秦岭终南山公路隧道２０日正式通车，这是中国自行设计施工的世界最长的双洞单向公路隧道，人们驱车１５分钟就可以穿越秦岭这一天然屏障。 &lt;/p&gt;&lt;p&gt;    秦岭终南山公路隧道，北起西安市长安区青岔，南至商洛市所辖的柞水县营盘镇，是国家规划的包头至北海、银川至武汉两条公路西部大 通道共用的“咽喉工程”，是沟通黄河经济圈与长江经济圈的交通枢纽，也是陕西“三纵四横五辐射”公路网西安至安康高速公路的重要组成部分。 &lt;/p&gt;&lt;p&gt;    据介绍，这条穿越秦岭的公路隧道，设计等级为高速公路，采用双洞单向四车道，设计时速８０公里，全长１８．０２公里，双洞总长３６．０４公里。工程２００２年３月开工建设，总投资３１．９３亿元。  &lt;/p&gt;&lt;p&gt;    这个项目总设计师、铁道第一勘察设计院桥梁隧道处总工程师赵秋林介绍，此前，中国最长的高速公路隧道是总长５．２公里的山西雁门关 隧道，双洞单向四车道；亚洲最长的公路隧道为总长１０．９公里的日本关越隧道，双洞单向四车道；&lt;span style="color: rgb(255, 102, 0);"&gt;世界最长的单洞双向公路隧道是总长２４．５公里的挪威洛达 尔隧道&lt;/span&gt;。秦岭终南山公路隧道是目前世界上第一座采用双洞单向行驶的特长山岭公路隧道，双洞总长远高于洛达尔隧道，建设规模居世界第一。 &lt;/p&gt;&lt;p&gt;    “中国最长的公路隧道——秦岭终南山公路隧道建成通车是公路建设史和隧道建设史上的一件大事。” 交通部部长李盛霖说：“它攻克了一系列世界性难题，提前１０个月完成，在交通建设史上创造了新的纪录，在隧道建设史上谱写了新的篇章，是中国交通史上的一 座里程碑。” &lt;/p&gt;&lt;p&gt;    陕西省代省长袁纯清说：“秦岭终南山隧道的建成通车，方便了群众安全快捷出行，节约了运输成本，对促进西部大开发战略的实施和陕西省与周边省市的经济交流具有十分重要的意义。”  &lt;/p&gt;&lt;p&gt;    据了解，这一工程克服了地质断层、涌水、岩爆等施工中的难题，借鉴日本、美国、奥地利、德国、挪威等国家的特长隧道建设经验，吸取 了欧洲三起隧道大火灾经验教训，破解通风、火灾、监控等运营中的重大技术难题，使秦岭终南山公路隧道具有国际领先的防灾救援系统、监控管理系统和运营服务 系统。 &lt;/p&gt;&lt;p&gt;    赵秋林说，这条公路隧道在设计上处处体现了人性化的理念。隧道里专门设置了３个１５０米长的特殊灯光带，通过不同的灯光和幻灯图案变化，驾驶员和乘客将看到“蓝天”“白云”“彩虹”等景象，减轻司机在特长隧道行车的单调，缓解驾驶疲劳。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1124848209299200178?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1124848209299200178/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1124848209299200178' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1124848209299200178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1124848209299200178'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/18.html' title='世界最长双洞秦岭终南山公路隧道 全长18公里'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6394752943317270175</id><published>2007-03-13T21:52:00.000+08:00</published><updated>2007-03-13T22:05:42.088+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>MacOS 10.5 Leopard 的一个新屏保</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thinksecret.com/archives/leopard9a343/image/14.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://thinksecret.com/archives/leopard9a343/image/14.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;10.4.x里有个RSS阅读器的屏保，效果很cool。&lt;br /&gt;10.5里的这个屏保又酷又实用：Security is a clever screensaver that takes images when movement is detected and displays those images on screen with a faux security camera look.&lt;br /&gt;&lt;br /&gt;Security是个智能屏保，可以把你电脑    前的移动物体给拍下来。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6394752943317270175?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6394752943317270175/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6394752943317270175' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6394752943317270175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6394752943317270175'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/macos-105-leopard.html' title='MacOS 10.5 Leopard 的一个新屏保'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-5847670658382486221</id><published>2007-03-13T21:26:00.000+08:00</published><updated>2007-03-13T21:33:16.237+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='medical'/><title type='text'>反物质具有潜在治疗癌症的能力</title><content type='html'>BBC报道，欧洲粒子物理研究所（CERN）的原子物理学家正在开发&lt;a href="http://news.bbc.co.uk/2/hi/health/6403737.stm"&gt;新一代的癌症治疗设备&lt;/a&gt;用于取代有较大副作用的放射性疗法，也许有一天医生会用反物质来治疗癌症患者。早在去年，CERN科学家发表了一篇关于&lt;a href="http://press.web.cern.ch/Press/PressReleases/Releases2006/PR15.06E.html"&gt;反物质和癌症治疗的研究&lt;/a&gt;。癌细胞是反物质亚粒子的一个极好靶子，能在细胞内部引发强烈的生物损伤从而导致细胞死亡。这项研究确实引起了医学界的兴趣，反物质疗法在很多方面都比X光治疗有更多好处。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-5847670658382486221?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/5847670658382486221/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=5847670658382486221' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5847670658382486221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5847670658382486221'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_13.html' title='反物质具有潜在治疗癌症的能力'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-4323957196678104124</id><published>2007-03-13T21:08:00.000+08:00</published><updated>2008-11-15T16:05:58.802+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><title type='text'>MultipleIEs -- 把多个IE装在你的系统上</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ygzfEy9Te6k/Rfai6YN_h8I/AAAAAAAAANE/EIH519r9p6U/s1600-h/j20073139115.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_ygzfEy9Te6k/Rfai6YN_h8I/AAAAAAAAANE/EIH519r9p6U/s400/j20073139115.JPG" alt="" id="BLOGGER_PHOTO_ID_5041395956705101762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;MultipleIEs 内置了从IE3.01到IE6.0 所有版本。方便网页设计师对网页在不同的版本的IE同时进行调试。&lt;br /&gt;下载地址: &lt;a href="http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe" target="_blank"&gt;http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-4323957196678104124?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/4323957196678104124/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=4323957196678104124' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4323957196678104124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4323957196678104124'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/multipleies-ie.html' title='MultipleIEs -- 把多个IE装在你的系统上'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ygzfEy9Te6k/Rfai6YN_h8I/AAAAAAAAANE/EIH519r9p6U/s72-c/j20073139115.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-4803837591863380705</id><published>2007-03-12T20:38:00.000+08:00</published><updated>2007-03-12T21:56:04.587+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>无线供电</title><content type='html'>现代生活少不了电器，问题这电器一多，电线就多，我写字台旁边就是一堆“电线色拉”，占地方不美观不说，还七缠八绕，分离移动都不方便。Technology Review里看到这么篇关于无线充电技术的文章。&lt;br /&gt;2002年的一晚，MIT的物理学家Marin Soljacˇic´听到自己的手机吱吱叫唤，又没电了。心烦之余他开始思考给是否存在更方便地给手机充电的物理原理，于是接下来的三年Soljacˇic´和他的学生开始琢磨给电器无线充电的理论方案。他们构思开发无线电源(power base station)，更类似Wi-Fi base station，但只能够在有限距离内提供密集能量，像手机，本本这类电器只要进入该范围就可以充电。&lt;br /&gt;今天一种叫电感耦合的能量传输设备已经可以用来给电动牙刷充电。原理是通过牙刷充电基座里的电流产生电磁场，磁场在牙刷柄里激发电流，从而达到给电池充电目的。不过充电距离十分有限。&lt;br /&gt;Soljacˇic´解释在他的无线能量系统里，无线电源(base station)会提供低频电磁场，也就几兆赫兹范围内。电器也要安装接收能量设备。Soljacˇic´设计的回路会在无线电源的辐射频率共振，这样只要电器进入几米范围内，回路就可以吸收能量，达到充电目的。这种系统可以给像电视，吐司机大功率电器供电。辐射被控制在几米范围内，Soljacˇic´计算就以知的无线电波对人体的影响，这种无线供电设计不会对人或其他生物有害。目前这个设计还在理论阶段，Soljacˇic´已申请了专利。&lt;br /&gt;想象装个无线电源家里还真会简洁很多。&lt;br /&gt;&lt;br /&gt;link: &lt;a href="http://www.technologyreview.com/read_article.aspx?id=18341"&gt;Wireless Power :: New physics theory could cut the cord on power chargers for gadgets&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-4803837591863380705?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/4803837591863380705/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=4803837591863380705' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4803837591863380705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4803837591863380705'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_12.html' title='无线供电'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7347800787452694714</id><published>2007-03-12T04:24:00.000+08:00</published><updated>2007-03-12T04:52:00.360+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>Test any website and see real-time if it's censored in China</title><content type='html'>http://greatfirewallofchina.org/&lt;br /&gt;&lt;br /&gt;just test it&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7347800787452694714?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7347800787452694714/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7347800787452694714' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7347800787452694714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7347800787452694714'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/test-any-website-and-see-real-time-if.html' title='Test any website and see real-time if it&apos;s censored in China'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7104055183543706826</id><published>2007-03-12T00:33:00.000+08:00</published><updated>2007-03-12T07:27:11.130+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><title type='text'>【zt】System Repair Engineer (SREng) 2.4 正式发布 [2007/3/10]</title><content type='html'>System Repair Engineer (SREng) 是一款计算机安全辅助和系统维护辅助软件。主要用于发现、发掘潜在的系统故障和大多数由于计算机病毒造成的破坏，并提供一系列的修改建议和自动修复方法。 该软件是由 KZTechs.COM 网站站长 Smallfrogs 开发的，能够运行在所有主流的 Windows 操作系统上。&lt;br /&gt;System Repair Engineer (SREng) 2.4 版本在以往版本的基础上，继续增强了危险性检测和扩展功能，增加了Win32 API HOOK详细信息显示功能、Win32 API HOOK入口点修复功能、可疑文件自动提取功能、增加隐藏进程扫描功能等20余项修改和增强，在安全判断方面和自动处理方面继续完善，提供了一套全新的系 统扫描、配置功能，并提供了对第三方插件支持，同时继续提供对 Windows Vista 操作系统的支持。&lt;br /&gt;在 System Repair Engineer (SREng) 的帮助下，您可以自己诊断您操作系统可能存在的普遍性问题，即使您是计算机的初学者，您也可以使用 System Repair Engineer (SREng) 的智能扫描功能将您系统的概况生成一份简要的日志，然后将该日志传送给对操作系统。在 System Repair Engineer (SREng) 2.4 版本里面，主要发生的变化有以下一些方面：&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.4.12.806 发行说明&lt;/b&gt;&lt;br /&gt;-------------------------------------------------------&lt;br /&gt;1.增加API HOOK详细信息显示功能：能够智能显示被HOOK的API是由哪个模块进行HOOK的。&lt;br /&gt;2.增加入口点修复功能：能够自动修复System Repair Engineer (SREng) 进程中被HOOK的所有受支持的API入口点，解决由于API HOOK带来的文件、注册表等关键信息被隐藏的问题。&lt;br /&gt;3.增加API 安全等级显示：能够显示被HOOK的API是否属于高危API，如果属于高危API，则会以红色高亮显示。&lt;br /&gt;4.增加受信任HOOK模式：对于系统进行的HOOK，自动添加到受信任模式列表里面，同时自动降低被HOOK API 安全等级。&lt;br /&gt;5.扩展API HOOK检测范围：在 System Repair Engineer (SREng) 2.4 版本里面，扩大了API HOOK检测范围。&lt;br /&gt;6.提高API HOOK检测精确性：在 System Repair Engineer (SREng) 2.4 版本里面，采用了新的检测方法，提高了API HOOK的检测精确性和稳定性。&lt;br /&gt;7.增加可疑文件自动提取功能：能够根据扫描结果自动的将日志里面的可疑文件自动提取到指定目录。支持注册表启动项、启动文件夹项目、服务应用程序、进程模块、API HOOK模块、可疑进程、Autorun.inf等20个种类。&lt;br /&gt;8.增加可疑文件自动分类功能：能够根据扫描类别自动分类，并且支持同一份内容文件只保留一份，能够自动删除冗余文件。&lt;br /&gt;9.增加数字签名发行者信息显示功能：能够直接显示被数字签名签署的文件是具体的签署者，能够更准确的判定被检测的文件是否安全。&lt;br /&gt;10.增加隐藏进程扫描功能：对于无法通过正常途径检测到的进程，能够自动发出警告提示信息。&lt;br /&gt;11.扩大扫描范围：增加对Installed Components等新的启动类型的扫描功能。&lt;br /&gt;12.增加对Userinit和Shell两个启动键值的自动修复功能。&lt;br /&gt;13.优化泡泡窗口显示模式：对于高危紧急通知，显示橘红色背景，否则以显示蓝色背景。&lt;br /&gt;14.调整插件管理器工作模式：增加插件不全时引导下载功能。&lt;br /&gt;15.增强System Repair Engineer (SREng)自身抗修改能力，当发现System Repair Engineer (SREng)进程空间里面有可疑数据时，能够自动警示用户。以缓解System Repair Engineer (SREng)被恶意修改导致无法正常工作的现象。&lt;br /&gt;16.优化在线版本检测方式：新的方式优化了检测方法，能够更有效的检测线上新版本。同时增加了紧急更新模式。&lt;br /&gt;17.增加网络活动监视器：能够监视TCP/UDP协议的连接情况。&lt;br /&gt;18.修正以往版本里面存在的几个BUG。&lt;br /&gt;19.提高了软件的稳定性&lt;br /&gt;20.调整插件用导出函数定义。System Repair Engineer (SREng) 2.4版本导出函数只提供ANSI接口。&lt;br /&gt;&lt;br /&gt;from: &lt;a href="http://www.kztechs.com/" target="_blank"&gt;http://www.kztechs.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;软件下载：&lt;a href="http://www.kztechs.com/sreng/" target="_blank"&gt;http://www.KZTechs.com/sreng/&lt;/a&gt;&lt;br /&gt;发行说明：&lt;a href="http://www.kztechs.com/sreng/ReleaseNotes2.htm" target="_blank"&gt;http://www.kztechs.com/sreng/ReleaseNotes2.htm&lt;/a&gt;&lt;br /&gt;在线手册：&lt;a href="http://www.kztechs.com/sreng/help2/" target="_blank"&gt;http://www.kztechs.com/sreng/help2/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7104055183543706826?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7104055183543706826/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7104055183543706826' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7104055183543706826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7104055183543706826'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/ztsystem-repair-engineer-sreng-24.html' title='【zt】System Repair Engineer (SREng) 2.4 正式发布 [2007/3/10]'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6160657453604628915</id><published>2007-03-10T22:26:00.000+08:00</published><updated>2007-03-10T22:28:13.209+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fp'/><title type='text'>函数式编程另类指南</title><content type='html'>&lt;p&gt;原文链接：&lt;a href="http://www.defmacro.org/ramblings/fp.html"&gt;Functional Programming For The Rest of Us&lt;/a&gt;&lt;br /&gt;原文作者：Vyacheslav Akhmechet&lt;br /&gt;翻译：lihaitao (电邮: lihaitao在gmail.com)&lt;br /&gt;校对：刘凯清&lt;/p&gt; &lt;p&gt;程序员拖沓成性，每天到了办公室后，泡咖啡，检查邮箱，阅读 RSS feed，到技术站点查阅最新的文章，在编程论坛的相关版面浏览公共讨论，并一次次地刷新以免漏掉一条信息。然后是午饭，回来后盯了IDE没几分钟，就再 次检查邮箱，倒咖啡。最后在不知不觉中，结束了一天。&lt;/p&gt; &lt;p&gt;不平凡的事是每隔一段时间会跳出一些很有挑战性的文章。如果没错，这些天你至少发现了一篇这类文章——很难快速通读它们，于是就将之束之高阁，直到 突然你发现自己已经有了一个长长的链接列表和一个装满了PDF文件的目录，然后你梦想着到一个人迹罕至的森林里的小木屋苦读一年以期赶上，要是每天清晨你 沿着那里的林中小溪散步时会有人带来食物和带走垃圾就更好了。&lt;/p&gt; &lt;p&gt;虽然我对你的列表一无所知，但我的列表却是一大堆关于函数式编程的文章。而这些基本上是最难阅读的了。它们用枯燥的学院派语言写成，即使“在华尔街 行业浸淫十年的专家（veterans）”也不能理解函数式编程（也写作FP）都在探讨些什么。如果你去问花旗集团（Citi Group）或德意志银行（Deutsche Bank）的项目经理[&lt;a href="http://chn.blogbeta.com/232.html#footer"&gt;1&lt;/a&gt;]，为什么选择了 JMS 而不 Erlang，他们可能回答不能在产业级的应用中使用学院派语言。问题是，一些最为复杂的，有着最严格需求的系统却是用函数式编程元素写成。有些说法不能让人信服。&lt;/p&gt; &lt;p&gt;的确，关于函数式编程的文章和论文难于理解，但他们本来不必这么晦涩。这一知识隔阂的形成完全是历史原因。函数式编程的概念本身并不困难。这篇文章 可以作为“简易的函数式编程导引”。是一座从我们命令式（imperative）的思维模式到函数式编程的桥梁。去取杯咖啡回来继续读下去吧。可能你的同 事很快就会开始取笑你对函数式编程发表的观点了。&lt;/p&gt; &lt;p&gt;那么什么是函数式编程呢？它怎么产生？它可以被掌握吗（Is it edible)？如果它真如其倡导者所言，为什么没有在行业中得到更广泛的使用？为什么好像只有那些拿着博士学位的人才使用它？最要紧的是，为什么它就 TMD 这么难学？这些 closure, continuation, currying，惰性求值和无副作用等等究竟是些什么东西？没有大学参与的项目怎么使用它？为什么它看上去这么诡异于和我们命令式思想友好，圣洁和亲近 的一切的一切？我们将于不久扫清这些疑问。首先让我来解释形成实际生活和学界文章之间巨大隔阂的缘起，简单得像一次公园的散步。&lt;/p&gt; &lt;h3&gt;信步游园&lt;/h3&gt; &lt;p&gt;启动时间机器，我们散步在两千多年以前的一个被遗忘了太久的春季明媚的日子，那是公元前380年。雅典城墙外的橄榄树树荫里，柏拉图和一个英俊的奴隶小男孩朝着学院走去。“天气真好”，“饮食不错”，然后话题开始转向哲思。&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;“瞧那两个学生，”为了使问题更容易理解，柏拉图仔细地挑选着用词，“你认为谁更高呢？”&lt;br /&gt;小男孩看着那两个人站着的水漕说，“他们差不多一样高”。&lt;br /&gt;柏拉图说：“你的差不多一样是什么意思？”。“我在这里看他们是一样高的，不过我肯定如果走近些就会看出他们高度的差别。”&lt;br /&gt;柏拉图笑了，他正把这个孩子带到正确的方向。“那么你是说，我们这个世界没有完全的等同了？”&lt;br /&gt;小男孩想了一会儿回答，“对，我不这样认为，任何事物总有一些区别，即使我们看不到它。”&lt;br /&gt;这句话非常到位！“那么如果这世上没有完全的相等，你又是如何理解‘完全’相等这个概念的呢？”&lt;br /&gt;小男孩迷惑得说：“我不知道。”最初尝试着理解数学的本源（nature）时也会产生这种疑惑。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;柏拉图暗示这个世上的万物都只是一个对完美的近似。他还认识到我们即使没有接触到完美但依然可以理解这一概念。所以他得出结论，完美的数学形式只能 存在于另一个世界，我们通过和那个世界的某种联系在一定程度上知晓他们。很明显我们不能看到完美的圆，但我们可以理解什么是完美的圆并用数学公式将它表达 出来。那么，什么是数学？为什么宇宙可以用数学定理描述？数学可以描述宇宙中的所有现象吗？[&lt;a href="http://chn.blogbeta.com/232.html#footer"&gt;2&lt;/a&gt;]&lt;/p&gt; &lt;p&gt;数学哲学是一个很复杂的课题。像大多数哲学学科一样它更倾向于提出问题而不是给出解答。这些意见中很多都循回绕转于一个事实，即数学实际上是一个谜 语：我们设置了一系列基本的不冲突的原理和一些可以施加于这些原理的操作规则，然后我们就能堆砌这些规则以形成更复杂的规则。数学家把这种方法叫做“形式 系统”或“演算”。如果愿意，我们可以很快写出一个关于 Tetris（译者注：一种通常被称为俄罗斯方块的游戏）的形式系统。实际上，工作中的 Tetris 实现就是一个形式系统，只是被指定使用了个不常见的表现形式。&lt;/p&gt; &lt;p&gt;人马座的那个生物文明也许不能理解我们的 Tetris 和圆的范式，因为可能他们唯一的感知输入是气味香橙的橘子。他们也许永远不会发现 Tetris 范式，但很可能会有一个圆的范式。我们也可能将无法阅读它，因为我们的嗅觉没有那么复杂，可是一旦我们理解(pass)了那一范式的表示形式（通过这种传 感器和标准解码技术来理解这种语言），其底层的概念就可被任何智能文明所理解。&lt;/p&gt; &lt;p&gt;有趣的是如果从来没有智能文明存在，Tetris 和圆的范式仍然严密合理，只是没有人注定将会发现他们。如果产生了一种智能文明，他就会发现一些形式系统来帮助描述宇宙的规律。但他还是不大可能发现 Tetris 因为宇宙中再没有和它相似的事物。在现实世界中这类无用的形式系统或迷题的例子数不胜数，Tetris 只是其中的一个典型。我们甚至不能确定自然数是否是对客观世界的完整近似，至少我们可以简单的想像一个很大的数它不能用宇宙中任何东西描述，因为它以近乎 无穷。&lt;/p&gt; &lt;h3&gt;历史一瞥[&lt;a href="http://chn.blogbeta.com/232.html#footer"&gt;3&lt;/a&gt;]&lt;/h3&gt; &lt;p&gt;再次启动时间机器，这一次的旅行近了很多，我们回到 1930 年代。大萧条正在蹂躏着那个或新或就的时代。空前的经济下挫影响着几乎所有阶层的家庭生活，只有少数人还能够保持着饥谨危机前的安逸。一些人就如此幸运地位列其中，我们关心的是普林斯顿大学的数学家们。&lt;/p&gt; &lt;p&gt;采用了歌特式风格设计建造的新办公室给普林斯顿罩上天堂般的幸福光环，来自世界各地的逻辑学家被邀请到普林斯顿建设一个新的学部。虽然彼时的美国民 众已难能弄到一餐的面包，普林斯顿的条件则是可以在高高的穹顶下，精致雕凿的木质墙饰边上整日的品茶讨论或款款慢步于楼外的林荫之中。&lt;/p&gt; &lt;p&gt;阿隆左·丘奇就是一个在这种近于奢侈的环境中生活着的数学家。他在普林斯顿获得本科学位后被邀留在研究生院继续攻读。阿隆左认为那里的建筑实属浮 华，所以他很少一边喝茶一边与人讨论数学，他也不喜欢到林中散步。阿隆左是一个孤独者：因为只有一个人时他才能以最高的效率工作。虽然如此，他仍与一些普 林斯顿人保持的定期的联系，其中包括阿兰·图灵，约翰·冯·诺依曼，和 kurt Grodel。&lt;/p&gt; &lt;p&gt;这四个人都对形式系统很感兴趣，而不太留意现实世界，以便致力于解决抽象的数学难题。他们的难题有些共同之处：都是探索关于计算的问题。如果我们有 了无限计算能力的机器，哪些问题可以被解决？我们可以使他们自动地得以解决吗？是否还是有些问题无法解决，为什么？不同设计的各种机器是否具有相同的计算 能力？&lt;/p&gt; &lt;p&gt;通过和其它人的合作，阿隆左·丘奇提出了一个被称为 lambda 演算的形式系统。这个系统本质上是一种虚拟的机器的编程语言，他的基础是一些以函数为参数和返回值的函数。函数用希腊字母 lambda 标识，这个形式系统因此得名[&lt;a href="http://chn.blogbeta.com/232.html#footer"&gt;4&lt;/a&gt;]。利用这一形式系统，阿隆左就可以对上述诸多问题推理并给出结论性的答案。&lt;/p&gt; &lt;p&gt;独立于阿隆左，阿兰·图灵也在进行着相似的工作，他提出了一个不同的形式系统（现在被称为图灵机），并使用这一系统独立得给出了和阿隆左相似的结论。后来被证明图灵机和 lambda 演算能力等同。&lt;/p&gt; &lt;p&gt;我们的故事本可以到此结束，我会就此歇笔，而你也将浏览到下一个页面，如果第二次世界大战没有在那时打响。整个世界笼罩在战争的火光和硝烟之中，美 国陆军和海军前所未有的大量使用炮弹，为了改进炮弹的精确度，部队组织了大批的科学家持续地计算微分方程以解出弹道发射轨迹。渐渐意识到这个任务用人力手 工完成太耗精力后，人们开始着手开发各种设备来攻克这个难关。第一个解出了弹道轨迹的机器是 IBM 制造的 Mark I —— 它重达5吨，有75万个组件，每秒可以完成三次操作。&lt;/p&gt; &lt;p&gt;竞争当然没有就此结束，1949年，EDVAC（Electronic Discrete Variable Automatic Computer，爱达瓦克）被推出并获得了极大的成功。这是对冯·诺依曼架构的第一个实践实例，实际上也是图灵机的第一个现实实现。那一年好运与阿隆左 ·丘奇无缘。&lt;/p&gt; &lt;p&gt;直到1950年代将尽，一位 MIT 的教授John McCarthy（也是普林斯顿毕业生）对阿隆左·丘奇的工作产生了兴趣。1958年，他公开了表处理语言 Lisp。Lisp 是对阿隆左·丘奇的 lambda 演算的实现但同时它工作在冯·诺依曼计算机上！很多计算机科学家认识到了 Lisp 的表达能力。1973年，MIT人工智能实验室的一组程序员开发了被称为Lisp机器的硬件－阿隆左 lambda 演算的硬件实现！&lt;/p&gt; &lt;p&gt;&lt;strong&gt;函数式编程&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;函数式编程是对阿隆左·丘奇理论的实践应用。但也并非全部 lambda 演算都被应用到了实践中，因为 lambda 演算不是被设计为在物理局限下工作的。因此，象面向对象的编程一样，函数式编程是一系列理念，而不是严格的教条。现在有很多种函数式编程语言，他们中的大 多数以不同方式完成不同任务。在本文中我将就最广泛使用的源自函数式编程的思想作一解释，并将用Java语言举例。(的确，你可以用Java写出函数式的 程序如果你有显著的受虐倾向）。在下面的小节中，我将会把Java作为一种函数式语言，并对其稍加修改使它成为一种可用的函数式语言。现在开始吧。&lt;/p&gt; &lt;p&gt;lambda 演算被设计用来探询关于计算的问题，所以函数式编程主要处理计算，并惊人地用函数来完成这一过程。函数是函数式编程的基本单位，函数几乎被用于一切，包括 最简单的计算，甚至变量都由计算取代。在函数式编程中，变量只是表达式的别名（这样我们就不必把所有东西打在一行里）。变量是不能更改的，所有变量只能被 赋值一次。用 Java 的术语来说，这意味着所有单一变量都被声明为 final（或 C++ 的 const）。在函数式编程中没有非 final 的变量。&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;final int i = 5;&lt;br /&gt;final int j = i + 3;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;因为函数式编程中所有变量都是 final 的，所以可以提出这样两个有趣的表述：没有必要总是写出关键字 final，没有必要把变量再称为变量。那么现在我们对Java作出两个修改：在我们的函数式 Java 中所有变量默认都是 final的，我们将变量（variable）称为符号（symbol）。&lt;/p&gt; &lt;p&gt;就此你也许会质疑，用我们新创造的语言还能写出有些复杂度的程序吗？如果每个符号都是不可变更(non-mutalbe)的，那么就无法改变任何状 态！其实事实并非完全如此。在阿隆左研究其 lambda 演算时，他并不想将某个状态维护一段时间以期未来对其进行修改。他关注的是对数据的操作（也通常被称为”演算体 caculating stuff”）。既然已被证明lambda演算与图灵机等价，它可以完成所有命令式编程语言能够完成的任务。那么，我们怎么才能做到呢？&lt;/p&gt; &lt;p&gt;答案是函数式程序能保存状态，只是它并非通过变量而是使用函数来保存状态。状态保存在函数的参数中，保存在堆栈上。如果你要保存某个状态一段时间并 时不时地对其进行一些修改，可以写个递归函数。举个例子，我们写个函数来翻转 Java 的字符串。记住，我们声明的每个变量默认都是 final 的。[&lt;a href="http://chn.blogbeta.com/232.html#footer"&gt;5&lt;/a&gt;]&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;String reverse(String arg) {&lt;br /&gt;if(arg.length == 0) {&lt;br /&gt;return arg;&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;return reverse(arg.substring(1, arg.length)) + arg.substring(0,1);&lt;br /&gt;}}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这个函数很慢因为它不断地调用自己[6]，它还也是个嗜内存魔因为要持续分配对象。不过它的确是在用函数式风格。你可能会问，怎么有人会这样写程序？好的，我这就慢慢讲来：&lt;/p&gt; &lt;h3&gt;函数式编程的优点&lt;/h3&gt; &lt;p&gt;你可能会认为我根本无法对上面那个畸形的函数给出个合理的解释。我开始学习函数式编程时就是这么认为的。不过我是错了。有很好的理由使用这种风格， 当然其中一些属主观因素。例如，函数式程序被认为更容易阅读。因为每个街区的孩子都知道，是否容易理解在旁观者的眼中，所以我将略去这些主观方面的理由。 幸运的是，还有很多的客观理由。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;单元测试&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;因为函数式编程的每一个符号都是 final 的，没有函数产生过副作用。因为从未在某个地方修改过值，也没有函数修改过在其作用域之外的量并被其他函数使用（如类成员或全局变量）。这意味着函数求值的结果只是其返回值，而惟一影响其返回值的就是函数的参数。&lt;/p&gt; &lt;p&gt;这是单元测试者的梦中仙境(wet dream)。对被测试程序中的每个函数，你只需在意其参数，而不必考虑函数调用顺序，不用谨慎地设置外部状态。所有要做的就是传递代表了边际情况的参 数。如果程序中的每个函数都通过了单元测试，你就对这个软件的质量有了相当的自信。而命令式编程就不能这样乐观了，在 Java 或 C++ 中只检查函数的返回值还不够——我们还必须验证这个函数可能修改了的外部状态。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;调试&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;如果一个函数式程序不如你期望地运行，调试也是轻而易举。因为函数式程序的 bug 不依赖于执行前与其无关的代码路径，你遇到的问题就总是可以再现。在命令式程序中，bug 时隐时现，因为在那里函数的功能依赖与其他函数的副作用，你可能会在和 bug 的产生无关的方向探寻很久，毫无收获。函数式程序就不是这样——如果一个函数的结果是错误的，那么无论之前你还执行过什么，这个函数总是返回相同的错误结 果。&lt;/p&gt; &lt;p&gt;一旦你将那个问题再现出来，寻其根源将毫不费力，甚至会让你开心。中断那个程序的执行然后检查堆栈，和命令式编程一样，栈里每一次函数调用的参数都 呈现在你眼前。但是在命令式程序中只有这些参数还不够，函数还依赖于成员变量，全局变量和类的状态（这反过来也依赖着这许多情况）。函数式程序里函数只依 赖于它的参数，而那些信息就在你注视的目光下！还有，在命令式程序里，只检查一个函数的返回值不能够让你确信这个函数已经正常工作了，你还要去查看那个函 数作用域外数十个对象的状态来确认。对函数式程序，你要做的所有事就是查看其返回值！&lt;/p&gt; &lt;p&gt;沿着堆栈检查函数的参数和返回值，只要发现一个不尽合理的结果就进入那个函数然后一步步跟踪下去，重复这一个过程，直到它让你发现了 bug 的生成点。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;并行&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;函数式程序无需任何修改即可并行执行。不用担心死锁和临界区，因为你从未用锁！函数式程序里没有任何数据被同一线程修改两次，更不用说两个不同的线程了。这意味着可以不假思索地简单增加线程而不会引发折磨着并行应用程序的传统问题。&lt;/p&gt; &lt;p&gt;事实既然如此，为什么并不是所有人都在需要高度并行作业的应用中采用函数式程序？嗯，他们正在这样做。爱立信公司设计了一种叫作 Erlang 的函数式语言并将它使用在需要极高抗错性和可扩展性的电信交换机上。还有很多人也发现了 Erlang 的优势并开始使用它。我们谈论的是电信通信控制系统，这与设计华尔街的典型系统相比对可靠性和可升级性要求高了得多。实际上，Erlang 系统并不可靠和易扩展，Java 才是。Erlang 系统只是坚如磐石。&lt;/p&gt; &lt;p&gt;关于并行的故事还没有就此停止，即使你的程序本身就是单线程的，那么函数式程序的编译器仍然可以优化它使其运行于多个CPU上。请看下面这段代码：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;String s1 = somewhatLongOperation1();&lt;br /&gt;String s2 = somewhatLongOperation2();&lt;br /&gt;String s3 = concatenate(s1, s2);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;在函数编程语言中，编译器会分析代码，辨认出潜在耗时的创建字符串s1和s2的函数，然后并行地运行它们。这在命令式语言中是不可能的，因为在那 里，每个函数都有可能修改了函数作用域以外的状态并且其后续的函数又会依赖这些修改。在函数式语言里，自动分析函数并找出适合并行执行的候选函数简单的像 自动进行的函数内联化！在这个意义上，函数式风格的程序是“不会过时的技术(future proof)”(即使不喜欢用行业术语，但这回要破例一次)。硬件厂商已经无法让CPU运行得更快了，于是他们增加了处理器核心的速度并因并行而获得了四 倍的速度提升。当然他们也顺便忘记提及我们的多花的钱只是用在了解决平行问题的软件上了。一小部分的命令式软件和 100% 的函数式软件都可以直接并行运行于这些机器上。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;代码热部署&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;过去要在 Windows上安装更新，重启计算机是难免的，而且还不只一次，即使是安装了一个新版的媒体播放器。Windows XP 大大改进了这一状态，但仍不理想（我今天工作时运行了Windows Update，现在一个烦人的图标总是显示在托盘里除非我重启一次机器）。Unix系统一直以来以更好的模式运行，安装更新时只需停止系统相关的组件，而 不是整个操作系统。即使如此，对一个大规模的服务器应用这还是不能令人满意的。电信系统必须100%的时间运行，因为如果在系统更新时紧急拨号失效，就可 能造成生命的损失。华尔街的公司也没有理由必须在周末停止服务以安装更新。&lt;/p&gt; &lt;p&gt;理想的情况是完全不停止系统任何组件来更新相关的代码。在命令式的世界里这是不可能的。考虑运行时上载一个Java类并重载一个新的定义，那么所有 这个类的实例都将不可用，因为它们被保存的状态丢失了。我们可以着手写些繁琐的版本控制代码来解决这个问题，然后将这个类的所有实例序列化，再销毁这些实 例，继而用这个类新的定义来重新创建这些实例，然后载入先前被序列化的数据并希望载入代码可以恰到地将这些数据移植到新的实例。在此之上，每次更新都要重 新手动编写这些用来移植的代码，而且要相当谨慎地防止破坏对象间的相互关系。理论简单，但实践可不容易。&lt;/p&gt; &lt;p&gt;对函数式的程序，所有的状态即传递给函数的参数都被保存在了堆栈上，这使的热部署轻而易举！实际上，所有我们需要做的就是对工作中的代码和新版本的 代码做一个差异比较，然后部署新代码。其他的工作将由一个语言工具自动完成！如果你认为这是个科幻故事，请再思考一下。多年来 Erlang工程师一直更新着他们的运转着的系统，而无需中断它。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;机器辅助的推理和优化&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;函数式语言的一个有趣的属性就是他们可以用数学方式推理。因为一种函数式语言只是一个形式系统的实现，所有在纸上完成的运算都可以应用于用这种语言书写的程序。编译器可以用数学理论将转换一段代码转换为等价的但却更高效的代码[&lt;a href="http://chn.blogbeta.com/232.html#footer"&gt;7&lt;/a&gt;]。多年来关系数据库一直在进行着这类优化。没有理由不能把这一技术应用到常规软件上。&lt;/p&gt; &lt;p&gt;另外，还能使用这些技术来证明部分程序的正确，甚至可能创建工具来分析代码并为单元测试自动生成边界用例！对稳固的系统这种功能没有价值，但如果你 要设计心房脉冲产生器 (pace maker)或空中交通控制系统，这种工具就不可或缺。如果你编写的应用程序不是产业的核心任务，这类工具也是你强于竞争对手的杀手锏。&lt;/p&gt; &lt;p&gt;高阶函数&lt;/p&gt; &lt;p&gt;我记得自己在了解了上面列出的种种优点后曾想：“那都是非常好的特性，可是如果我不得不用天生就不健全的语言编程，把一切变量声明为&lt;br /&gt;final 产生的代码将是垃圾一堆。” 这其实是误解。在如Java 这般的命令式语言环境里，将所有变量声明为 final 没有用，但是在函数式语言里不是这样。函数式语言提供了不同的抽象工具它会使你忘记你曾经习惯于修改变量。高阶函数就是这样一种工具。&lt;/p&gt; &lt;p&gt;函数式语言中的函数不同于 Java 或 C 中的函数，而是一个超集——它有着 Java 函数拥有的所有功能，但还有更多。创建函数的方式和 C 中相似:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;int add(int i, int j) {&lt;br /&gt;return i + j;&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这意味着有些东西和同样的 C 代码有区别。现在扩展我们的 Java 编译器使其支持这种记法。当我们输入上述代码后编译器会把它转换成下面的Java代码（别忘了，所有东西都是 final 的）：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;class add_function_t {&lt;br /&gt;int add(int i, int j) {&lt;br /&gt;return i + j;&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;add_function_t add = new add_function_t();&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这里的符号 add 并不是一个函数。这是一个有一个成员函数的很小的类。我们现在可以把 add 作为函数参数放入我们的代码中。还可以把它赋给另一个符号。我们在运行时创建的 add_function_t 的实例如果不再被使用就将会被垃圾回收掉。这些使得函数成为第一级的对象无异于整数或字符串。（作为参数）操作函数的函数被称为高阶函数。别让这个术语吓 着你，这和 Java 的 class 操作其它 class（把它们作为参数）没有什么区别。我们本可以把它们称为“高阶类”但没有人注意到这个，因为 Java 背后没有一个强大的学术社区。&lt;/p&gt; &lt;p&gt;那么怎样，何时应该使用高阶函数呢？我很高兴你这样问。如果你不曾考虑类的层次，就可能写出了一整团堆砌的代码块。当你发现其中一些行的代码重复出 现，就把他们提取成函数（幸运的是这些依然可以在学校里学到）。如果你发现在那个函数里一些逻辑动作根据情况有变，就把他提取成高阶函数。糊涂了？下面是 一个来自我工作的实例：假如我的一些 Java 代码接受一条信息，用多种方式处理它然后转发到其他服务器。&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;class MessageHandler {&lt;br /&gt;void handleMessage(Message msg) {&lt;br /&gt;// …&lt;br /&gt;msg.setClientCode(”ABCD_123″);&lt;br /&gt;// …&lt;/p&gt; &lt;p&gt;sendMessage(msg);&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;// …&lt;/p&gt; &lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;现在假设要更改这个系统，现在我们要把信息转发到两个服务器而不是一个。除了客户端的代码一切都像刚才一样——第二个服务器希望这是另一种格式。怎么处理这种情况？我们可以检查信息的目的地并相应修改客户端代码的格式，如下：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;class MessageHandler {&lt;br /&gt;void handleMessage(Message msg) {&lt;br /&gt;// …&lt;br /&gt;if(msg.getDestination().equals(”server1″) {&lt;br /&gt;msg.setClientCode(”ABCD_123″);&lt;br /&gt;} else {&lt;br /&gt;msg.setClientCode(”123_ABC”);&lt;br /&gt;}&lt;br /&gt;// …&lt;/p&gt; &lt;p&gt;sendMessage(msg);&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;// …&lt;/p&gt; &lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;然而这不是可扩展的方法，如果加入了更多的服务器，这个函数将线性增长，更新它会成为我的梦魇。面向对象的方法是把MessageHandler作为基类，在导出类中专业化客户代码操作：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;abstract class MessageHandler {&lt;br /&gt;void handleMessage(Message msg) {&lt;br /&gt;// …&lt;br /&gt;msg.setClientCode(getClientCode());&lt;br /&gt;// …&lt;/p&gt; &lt;p&gt;sendMessage(msg);&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;abstract String getClientCode();&lt;/p&gt; &lt;p&gt;// …&lt;/p&gt; &lt;p&gt;}&lt;/p&gt; &lt;p&gt;class MessageHandlerOne extends MessageHandler {&lt;br /&gt;String getClientCode() {&lt;br /&gt;return “ABCD_123″;&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;}&lt;/p&gt; &lt;p&gt;class MessageHandlerTwo extends MessageHandler {&lt;br /&gt;String getClientCode() {&lt;br /&gt;return “123_ABCD”;&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;现在就可以对每一个服务器实例化一个适合的类。添加服务器的操作变得容易维护了。但对于这么一个简单的修改仍然要添加大量的代码。为了支持不同的客户代码我们创建了两个新的类型！现在我们用高阶函数完成同样的功能：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;class MessageHandler {&lt;br /&gt;void handleMessage(Message msg, Function getClientCode) {&lt;br /&gt;// …&lt;br /&gt;Message msg1 = msg.setClientCode(getClientCode());&lt;br /&gt;// …&lt;/p&gt; &lt;p&gt;sendMessage(msg1);&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;// …&lt;/p&gt; &lt;p&gt;}&lt;/p&gt; &lt;p&gt;String getClientCodeOne() {&lt;br /&gt;return “ABCD_123″;&lt;/p&gt; &lt;p&gt;}&lt;/p&gt; &lt;p&gt;String getClientCodeTwo() {&lt;br /&gt;return “123_ABCD”;&lt;/p&gt; &lt;p&gt;}&lt;/p&gt; &lt;p&gt;MessageHandler handler = new MessageHandler();&lt;br /&gt;handler.handleMessage(someMsg, getClientCodeOne);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;没有创建新的类型和新的class层次，只是传入合适的函数作为参数，完成了面向对象方式同样的功能，同时还有一些额外的优点。没有使自己囿于类的 层次之中：可以在运行时传入函数并在任何时候以更高的粒度更少的代码修改他们。编译器高效地为我们生成了面向对象的“粘合”代码！除此之外，我们还获得了 所有函数式编程的其他好处。当然函数式语言提供的抽象不只这些，高阶函数只是一个开始：&lt;/p&gt; &lt;p&gt;currying&lt;/p&gt; &lt;p&gt;我认识的大多数人都读过“四人帮”的那本设计模式，任何自重的程序员都会告诉你那本书是语言中立的(agnostic)，模式在软件工程中是通用的，和使用的语言无关。这个说法颇为高贵，故而不幸的是，有违现实。&lt;/p&gt; &lt;p&gt;函数式编程极具表达能力。在函数式语言中，语言既已达此高度，设计模式就不再是必需，最终你将设计模式彻底消除而以概念编程。适配器 (Adapter)模式就是这样的一个例子。(究竟适配器和 Facade 模式区别在哪里？可能有些人需要在这里再多费些篇章)。一旦语言有了叫作 currying 的技术，这一模式就可以被消除。&lt;/p&gt; &lt;p&gt;currying.&lt;/p&gt; &lt;p&gt;适配器模式最有名的是被应用在 Java 的“默认”抽象单元——class 上。在函数式编程里，模式被应用到函数。模式带有一个接口并将它转换成另一个对他人有用的接口。这有一个适配器模式的例子：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;int pow(int i, int j);&lt;br /&gt;int square(int i)&lt;br /&gt;{&lt;br /&gt;return pow(i, 2);&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;上面的代码把一个整数幂运算接口转换成为了一个平方接口。在学术文章里，这个雕虫小技被叫作currying(得名于逻辑学家Haskell&lt;br /&gt;Curry，他曾将相关的数学理论形式化 )。因为在函数式编程中函数（反之如class)被作为参数来回传递，currying 很频繁地被用来把函数调整为更适宜的接口。因为函数的接口是他的参数，使用 currying 可以减少参数的数目(如上例所示)。&lt;/p&gt; &lt;p&gt;函数式语言内建了这一技术。不用手动地创建一个包装了原函数的函数，函数式语言可以为你代劳。同样地，扩展我们的语言，让他支持这个技术：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;square = int pow(int i, 2);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这将为我们自动创建出一个有一个参数的函数 square。他把第二个参数设置为 2 再调用函数 pow。这行代码会被编译为如下的 Java 代码：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;class square_function_t {&lt;br /&gt;int square(int i) {&lt;br /&gt;return pow(i, 2);&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;square_function_t square = new square_function_t();&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;正如你所见，通过简单地创建一个对原函数的包装，在函数式编程中，这就是 currying —— 快速简易创建包装的捷径。把精力集中在你的业务上，让编译器为你写出必要的代码！什么时候使用 currying？这很简单，任何时候你想要使用适配器模式（包装）时。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;惰性求值&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;惰性（或延迟）求值这一技术可能会变得非常有趣一旦我们采纳了函数式哲学。在讨论并行时已经见过下面的代码片断：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;String s1 = somewhatLongOperation1();&lt;br /&gt;String s2 = somewhatLongOperation2();&lt;br /&gt;String s3 = concatenate(s1, s2);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;在一个命令式语言中求值顺序是确定的，因为每个函数都有可能会变更或依赖于外部状态，所以就必须有序的执行这些函数：首先是&lt;br /&gt;somewhatLongOperation1，然后 somewhatLongOperation2，最后 concatenate，在函数式语言里就不尽然了。&lt;/p&gt; &lt;p&gt;前面提到只要确保没有函数修改或依赖于全局变量，somewhatLongOperation1 和 somewhatLongOperation2 可以被并行执行。但是如果我们不想同时运行这两个函数，还有必要保证有序的执行他们呢？答案是不。我们只在其他函数依赖于s1和s2时才需要执行这两个函 数。我们甚至在concatenate调用之前都不必执行他们——可以把他们的求值延迟到concatenate函数内实际用到他们的位置。如果用一个带 有条件分支的函数替换concatenate并且只用了两个参数中的一个，另一个参数就永远没有必要被求值。在 Haskell 语言中，不确保一切都（完全）按顺序执行，因为 Haskell 只在必要时才会对其求值。&lt;/p&gt; &lt;p&gt;惰性求值优点众多，但缺点也不少。我们会在这里讨论它的优点而在下一节中解释其缺点。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;优化&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;惰性求值有客观的优化潜力。惰性编译器看函数式代码就像数学家面对的代数表达式————可以注销一部分而完全不去运行它，重新调整代码段以求更高的 效率，甚至重整代码以降低出错，所有确定性优化(guaranteeing optimizations)不会破坏代码。这是严格用形式原语描述程序的巨大优势————代码固守着数学定律并可以数学的方式进行推理。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;抽象控制结构&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;惰性求值提供了更高一级的抽象，它使得不可能的事情得以实现。例如，考虑实现如下的控制结构：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;unless(stock.isEuropean()) {&lt;br /&gt;sendToSEC(stock);&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;我们希望只在祖先不是欧洲人时才执行sendToSEC。如何实现 unless？如果没有惰性求值，我们需要某种形式的宏（macro）系统，但&lt;br /&gt;Haskell 这样的语言不需要它。把他实现为一个函数即可：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;void unless(boolean condition, List code) {&lt;br /&gt;if(!condition)&lt;br /&gt;code;&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;注意如果条件为真代码将不被执行。我们不能在一个严格（strict）的语言中再现这种求值，因为 unless 调用之前会先对参数进行求值。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;无穷(infinite)数据结构&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;惰性求值允许定义无穷数据结构，对严格语言来说实现这个要复杂的多。考虑一个 Fibonacci 数列，显然我们无法在有限的时间内计算出或在有限的内存里保存一个无穷列表。在严格语言如 Java 中，只能定义一个能返回 Fibonacci 数列中特定成员的 Fibonacci 函数，在 Haskell&lt;br /&gt;中，我们对其进一步抽象并定义一个关于 Fibonacci 数的无穷列表，因为作为一个惰性的语言，只有列表中实际被用到的部分才会被求值。这使得可以抽象出很多问题并从一个更高的层次重新审视他们。（例如，我们可以在一个无穷列表上使用表处理函数）。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;缺点&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;当然从来不存在免费的午餐。惰性求值有很多的缺点，主要就在于，懒。有很多现实世界的问题需要严格求值。例如考虑下例：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;System.out.println(”Please enter your name: “);&lt;br /&gt;System.in.readLine();&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;在惰性求值的语言里，不能保证第一行会在第二行之前执行！那么我们就不能进行输入输出操作，不能有意义地使用本地（native）接口（因为他们相 互依赖其副作用必须被有序的调用），从而与整个世界隔离。如果引入允许特定执行顺序的原语又将失去数学地推理代码的诸多好处（为此将葬送函数式编程与其相 关的所有优点）。幸运的是，并非丧失了一切，数学家为此探索并开发出了许多技巧来保证在一定函数设置下(function setting)代码以一特定的顺序执行。这样我们就赢得了两个世界。这些技术包括 continuation， monad 和 uniqueness typing&lt;br /&gt;（一致型别）。我只会在本文中解释continuation，把 monad 和 uniqueness typing 留到将来的文章中。有趣的是，除了确保函数求值顺序， continuation 在很多别的情况下也很有用。这点等一会儿就会提到。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Continuations&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Continuations 对于程序设计的意义，就像《达芬奇密码》对人类历史的意义：即对人类最大秘密的惊人揭示。也许不是，但他在概念上的突破性至少和揭示了负数的平方根意义等同。&lt;/p&gt; &lt;p&gt;我们在学习函数时，只是学到了一半的事实，因为我们基于一个错误的假定:函数只能将结果返回到它的调用函数。在这个意思上continuation 是广义的函数。函数不必要返回到其调用函数而可以返回到程序的任何地方。我们把”continuation” 作为参数传给一个函数，它指定了这个函数返回的位置。这个描述可能听起来更加复杂。看一下下面的代码：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;int i = add(5, 10);&lt;br /&gt;int j = square(i);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;函数 add 在其被调用的位置将结果 15 赋给了 i，接下来 i 的值被用来调用 square。注意所有的惰性求值编译器都不能调整这几行代码因为第二行依赖着第一行的成功求值。下面用 continuation 风格又称 CPS (Continuation Programming Style) 来重写这段代码，这里函数 add 会将结果返回到 square 而不是原来的调用函数。&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;int j = add(5, 10, square);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这个例子中 add 有了另一个参数 —— 一个 add 必须在它求值结束时用其返回值调用的函数。这里 square 是 add 的一个 continuation。这两种情况下，j 都将等于 255。&lt;/p&gt; &lt;p&gt;这就是强制使惰性语言有序地求值两个表达式的第一个技巧。考虑下面这个（熟悉的）IO代码：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;System.out.println(”Please enter your name: “);&lt;br /&gt;System.in.readLine();&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这两行不相依赖所以编译器会自由的重新调整他们的执行顺序。然而，如果我们用 CPS 来重写这段代码，就会有一个依赖，编译器会因此而强制对这两行代码有序执行！&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;System.out.println(”Please enter your name: “, System.in.readLine);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这里 println 需要用自己的返回结果作为参数去调用 readLine 并将 readLine 返回值作为自己的返回值。这样就能确保这两行被有序执行而且 readLine 一定被执行（因为整个计算期望最后的结果为结果）。Java 的 println 返回 void 但如果它返回的是一个抽象值（readLine所期待的），我们就解决了这个问题！当然这样的链接函数调用很快就会使代码难以读懂，不过这个可以避免。比 如我们可以给语言添加些语法甜点(syntactic sugar)就可以简单的按顺序输入表达式，然后由编译器自动为我们链接这些函数调用。这样就可以如愿地使用期望的求值顺序并保留一切函数式编程的好处 （包括数学地对我们程序进行推理的能力）！如果还是有迷惑，记住函数是只有一个成员的类的实例。重写上述代码使得 println 和 readLine 成为类的实例，这样就对一切都清楚了。&lt;/p&gt; &lt;p&gt;如果我在此结束本节，那将仅仅涉及到 continuation 最浅显的应用。用 CPS 重写整个程序，那里所有的函数都增加一个额外的 continuation 参数并把函数结果传给它。也可以通过简单地把函数当作 continuation 函数（总是返回到调用者的函数）的特殊实例来将程序转为 CPS 风格。这种转换很容易被自动化（事实上，许多编译器就是这么做的）。&lt;/p&gt; &lt;p&gt;一旦我们将一个程序转为了CPS，那么很明显每个指令都将有些 continuation, 这是一个该指令在执行结束时会用其执行结果调用的函数，通常的程序中，这是一个它要返回的地址。从上面的例子中随便举个例子，比如 add(5, 10)。在用CPS风格写的程序里，add 的continuation很明显——这是一个 add 在其执行结束时会调用的函数。那么如果在非CPS的程序里，它是什么呢？当然我们可以把程序转为 CPS ，但有这个必要吗？&lt;/p&gt; &lt;p&gt;其实没有必要。仔细看一下我们的 CPS 转换过程。如果尝试为它写一个编译器，然后经过长期的思考后，你意识到这个 CPS 的版本根本不需要栈！没有函数会以传统的意义“返回”，它只是用结果调用了另一个函数。我们无需在调用时将函数参数压栈再于调用结束时弹出栈，而只是简单 的把他们保存在一大块内存中，然后使用跳转指令。不再需要原来的参数——他们不会再次被用到，因为没有函数会返回！&lt;/p&gt; &lt;p&gt;所以，用 CPS 风格写成的程序没有堆栈，但每个函数却有一个额外的参数可被调用。不是 CPS 风格的程序没有可以被调用的这个参数，但却有栈。栈中存放着什么？只是参数和一个指向函数返回地址的指针。你看到光了吗？栈中只是放着 continuation 的信息！ 栈中指向返回指令的指针本质上和 CPS 程序里将被调用的函数是等价的。如果你想探究 add(5,10) 的 continuation，只要简单地检查它在堆栈的执行点！&lt;/p&gt; &lt;p&gt;这的确很简单。continuation 和栈上指向返回地址的指针是等价的，只是 continuation 是被显式传递，所以不必和函数被调用点是同一位置。如果还记得 continuation 就是一个函数，并且在我们的语言里，函数被编译为一个类的实例，你就会理解指向栈中返回指令的指针实际就是传递给 continuation 的参数，因为我们的函数（就像一个类的实例）只是一个指针。这意味着给定程序中任意时间和任意位置，你都可以去请求一个当前的 continuation (current continuation)（它就是当前的栈的信息）。&lt;/p&gt; &lt;p&gt;好的，这样我们就知道了什么是 current continuation。他有什么意义？一旦我们得到了当前的 continuation 并将它保存在某处，我们就最终将程序当前的状态保存了下来——及时地冷冻下来。这就像操作系统将其置为休眠状态。一个 continuation 对象里保存了在我们获得它的地方重新启动程序的必要信息。操作系统在每次发生线程间的上下文切换时也是如此。唯一的区别是它保留着全部控制。请求一个 continuation 对象（在Scheme里，可以调用 call-with-current-continuation 函数）后，你就会获得一个包括了当前 continuation&lt;br /&gt;的对象——堆栈（或者在CPS情况下则是下一个要调用的函数）。可以把这个对象保存在一个变量（或者是磁盘）里。当你用这 continuation “重启”程序时，就会转回到处你取得这个对象的那个状态。这就象切换回一个被挂起的线程或唤醒休眠着的操作系统，区别是用 continuation，你可以多次地重复这一过程。当操作系统被唤醒时，休眠信息就被销毁了。但如果那些信息没有被销毁，你也就可以一次次地将它唤醒 到同一点，就象重返过去一样。有了 continuation 你就有了这个控制力！&lt;/p&gt; &lt;p&gt;Continuation 应该在什么情况下使用呢？通常在尝试模拟一个本质上是无状态的应用时可以简化你的任务。Continuation 很适合在Web应用程序中使用。微软公司的 ASP.NET 技术极尽苦心地模拟状态以便你在开发 Web 应用时少费周折。可如果 C# 支持了continuation，ASP.NET 的复杂度就可以减半——你只需要保存一个 continuation，当用户下次发出 web 请求时重启它即可。对程序员来说，web 应用程序将不再有中断——程序只是简单的从下一行重启！利用 continuation 这一抽象解决问题真是令人难以置信的便利。考虑到越来越多的胖客户端应用程序正在向服务器端转移，将来 continuation 也会变得越来越重要。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;模式匹配&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;模式匹配不是什么新的创新的特性。事实上，它和函数式编程的关系不大。把产生模式匹配归因于函数式编程的唯一的原因是函数式语言一度提供了模式匹配，然而现在的命令式语言还做不到。&lt;/p&gt; &lt;p&gt;让我们用一个例子深入了解一下模式匹配。这是一个Java的Fibonacci函数：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;int fib(int n) {&lt;br /&gt;if(n == 0) return 1;&lt;br /&gt;if(n == 1) return 1;&lt;/p&gt; &lt;p&gt;return fib(n - 2) + fib(n - 1);&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;让我们从Java衍生出的语言来支持模式匹配：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;int fib(0) {&lt;br /&gt;return 1;&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;int fib(1) {&lt;br /&gt;return 1;&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;int fib(int n) {&lt;br /&gt;return fib(n - 2) + fib(n - 1);&lt;/p&gt; &lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;两者有什么区别？编译器为我们实现了分支。这有什么大不了？的确没什么。有人注意到很多函数包括了复杂的 swith 语句（尤其是在函数式程序中）所以认为这种抽象形式很好。我们把一个函数定义分离成多个，然后把模式置于参数中（有点象重载）。当这个函数被调用时，编译 器使其比较参数和其运行时的定义然后选择其中正确的一个。这一般是通过选择可选的最特定的定义来完成。例如，int fib(int n) 可以以 n 等于 1 被调用，但是实际上 fib(n) 没有被调用，因为 fib(1) 更加特定。&lt;/p&gt; &lt;p&gt;模式匹配通常要比我这个例子复杂，比如，高级模式匹配系统可以让我们这样做：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;int f(int n &lt; 10) { ... }&lt;br /&gt;int f(int n) { ... }&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;模式匹配什么时候适用？情况太多了！每当你有一个嵌套着 if 的复杂的数据结构，这时就可以用模式匹配以更少的代码完成得更好。一个很好的例子闪现在我脑海，这就是所有 Win32 平台都提供了的标准的 WinProc 函数（即使它通常被抽象了）。通常模式匹配系统能检测集合也可以应付简单的值。例如，当传给函数一个数组后，就可以找出所有首元素为 1 第三个元素大于 3 的所有数组。&lt;/p&gt; &lt;p&gt;模式匹配还有一个好处即如果需要增加或修改条件，那么不必对付一个巨大的函数。只需增加或修改适合的定义即可。这消除了“四人帮”（GoF）书中的一大类设计模式。条件越复杂，模式匹配就越有用。一旦习惯了它，你就会担心没有了模式匹配的日子如何打发。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Closures&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;到此我们已经讨论了纯的函数式语言——实现了lambda演算又不包括与丘奇形式系统矛盾的语言——环境里的特性，可是还有很多在lambda演算 框架之外的函数语言的有用特征。虽然一个公理系统的实现可以让我们象数学表达式那样思考程序但它未必是实际可行的。许多语言选择去合并一些函数式的元素而 没有严格的坚持函数式的教条。很多象这样的语言（如Common Lisp）不要求变量是 final 的——可以即处对其修改。他们还不要求函数只依赖于其参数——允许函数访问外部状态。但这些语言也的确包含着函数式的特征——如高阶函数，在非纯粹的函数 式语言里传递函数作为参数和限制在 lambda 演算系统中的作法有些不同，它需要一种常被称为词法（lexical）closure 的有趣特性。下面我给出几个例子。记住，这里变量不再是final的，函数可以引用其作用域外的变量： &lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;Function makePowerFn(int power) {&lt;br /&gt;int powerFn(int base) {&lt;br /&gt;return pow(base, power);&lt;br /&gt;}&lt;br /&gt;return powerFn;&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;Function square = makePowerFn(2);&lt;br /&gt;square(3); // returns 9&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;函数 make-power-fn 返回了一个函数，它有一个参数，并对这个参数进行一定阶的幂运算。如果对 square(3) 求值会有什么结果？变量 power 不在 powerFn 的作用域中，因为 makePowerFn 已经返回它的栈桢而不复存在。那么square如何工作？一定是这个语言以某种方式将power的值保存了起来以便 square 使用。如果我们再新建一个函数cube，用来计算参数的立方又会怎样？运行环境必须存储两个power的拷贝，每个我们用 make-power-fn 生成的函数都用一个拷贝。保存这些值的现象就被称为 closure。 closure 不只保存宿主函数的参数。例如，closure可能会是这样：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;Function makeIncrementer() {&lt;br /&gt;int n = 0;&lt;/p&gt; &lt;p&gt;int increment() {&lt;br /&gt;return ++n;&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;Function inc1 = makeIncrementer();&lt;br /&gt;Function inc2 = makeIncrementer();&lt;/p&gt; &lt;p&gt;inc1(); // returns 1;&lt;br /&gt;inc1(); // returns 2;&lt;br /&gt;inc1(); // returns 3;&lt;br /&gt;inc2(); // returns 1;&lt;br /&gt;inc2(); // returns 2;&lt;br /&gt;inc2(); // returns 3;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;运行时已保存了n，所以递增器可以访问它，而且运行时为每个递增器都保存了一个 n 的拷贝，即使这些拷贝本应在 makeIncrementer&lt;br /&gt;返回时消失。这些代码被如何编译？closure 在底层是如何工作的？很幸运，我们可以去幕后看看。&lt;/p&gt; &lt;p&gt;一点常识会很有帮助，首先会注意到的是局部变量的生命期不再由简单的作用域限定而是不确定的。那么显然可以由此得出结论它们不再被保存在栈上——反之必须被保存在堆上[&lt;a href="http://chn.blogbeta.com/232.html#footer"&gt;8&lt;/a&gt;]。这样一来，closure 的实现就象我们前面讨论的函数一样了，只是它还有一个指向周围变量的引用。&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;class some_function_t {&lt;br /&gt;SymbolTable parentScope;&lt;/p&gt; &lt;p&gt;// …&lt;/p&gt; &lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;当一个 closure 引用了一个不在其作用域的变量时，它会在其祖先作用域中查找这个引用。就是这样！Closure 将函数式和面向对象的世界紧密结合。当你创建了一个包含了一些状态的类并把它传到别处时，考虑一下 closure。Closure 就是这样在取出作用域中的变量的同时创建“成员变量”，所以你不必亲自去做这些！&lt;/p&gt; &lt;p&gt;&lt;strong&gt;下一步的计划？&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;关于函数式编程，本文作了浅显地讨论。有时候一次粗浅的射猎可能会进展为重大的收获与我也受益匪浅。将来我还计划写写 category 理论，monad，函数式数据结构，函数式语言中的类型(type)体系，函数式并发，函数式数据库等等还有很多。如果我得以（在学习的过程中）写出了上 述诸多主题中的一半，我的生命就会完整了。还有，Google 是我们的朋友。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;评论&lt;/strong&gt;？&lt;/p&gt; &lt;p&gt;如果你有任何问题，意见或建议，请发到邮箱 coffee…@gmail.com。很高兴收到你的反馈&lt;/p&gt; &lt;p&gt;===========================&lt;/p&gt; &lt;p&gt;[1] 我在2005年找工作时常常提出这个问题，当时我得到的是数量可观的一脸茫然。想像一下，这些人至少每人会得到30万美元，如果他们理解了他们可以得到的大部分工具。&lt;/p&gt; &lt;p&gt;[2] 这像是个悖论。物理学家和数学家被迫确认他们还不完全清楚是否宇宙万物遵循着可以被数学描述的规则。&lt;/p&gt; &lt;p&gt;[3] 我一直厌恶提供了一堆枯燥的日期，人名和地点的纪年式历史课。对我而言，历史是改变了这个世界的人的生活，是他们行为之后的个人动机，是他们得以影响亿万生灵的体制。所以这个关于历史的小节注定无法完整，只讨论了于此关系及其密切的人物与事件。&lt;/p&gt; &lt;p&gt;[4] 我在学习函数式编程的时候，很不喜欢术语 lambda，因为我没有真正理解它的意义。在这个环境里，lambda 是一个函数，那个希腊字母只是方便书写的数学记法。每当你听到 lambda 时，只要在脑中把它翻译成函数即可。&lt;/p&gt; &lt;p&gt;[5] 有趣的是 Java 的字符串是不可变更的，探讨这一离经叛道的设计的原因也非常有趣，不过在这里会分散我们对原目标的注意力&lt;/p&gt; &lt;p&gt;[6] 大多数函数式编程语言的编译器能通过将递归尽可能转为迭代来进行优化，这被称为尾递归。&lt;/p&gt; &lt;p&gt;[7] 相反未必成立，虽然有时可以证明两端代码等价，但这不是所有情况下都成立。&lt;/p&gt; &lt;p&gt;[8] 这实际上不比存储在栈上慢，因为一旦引入了垃圾回收器，内存分配就成为了一个O(1)的操作。 &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6160657453604628915?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://chn.blogbeta.com/232.html/trackback/' title='函数式编程另类指南'/><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6160657453604628915/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6160657453604628915' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6160657453604628915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6160657453604628915'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_10.html' title='函数式编程另类指南'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-8225040194131657250</id><published>2007-03-10T22:08:00.000+08:00</published><updated>2007-03-12T07:21:21.399+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fp'/><title type='text'>The Nature of Lisp</title><content type='html'>作者 Slava&lt;br /&gt;译者 Alec Jang&lt;br /&gt;&lt;p&gt;出处: http://www.defmacro.org/ramblings/lisp.html&lt;/p&gt;&lt;p&gt;简介&lt;/p&gt;&lt;p&gt;最初在web的某些角落偶然看到有人赞美Lisp时, 我那时已经是一个颇有经验的程序员。在我的履历上, 掌握的语言范围相当广泛, 象C++, Java, C#主流语言等等都不在话下, 我觉得我差不多知道所有的有关编程语言的事情。对待编程语言的问题上, 我觉得自己不太会遇到什么大问题。其实我大错特错了。&lt;/p&gt;&lt;p&gt;我试着学了一下Lisp, 结果马上就撞了墙。我被那些范例代码吓坏了。我想很多初次接触Lisp语言的人, 一定也有过类似的感受。Lisp的语法太次了。一个语言的发明人, 居然不肯用心弄出一套漂亮的语法, 那谁还会愿意学它。反正, 我是确确实实被那些难看的无数的括号搞蒙了。&lt;/p&gt;&lt;p&gt;回过神来之后, 我和Lisp社区的那伙人交谈, 诉说我的沮丧心情。结果, 立马就有一大套理论砸过来, 这套理论在Lisp社区处处可见, 几成惯例。比如说: Lisp的括号只是表面现象; Lisp的代码和数据的表达方式没有差别, 而且比XML语法高明许多, 所以有无穷的好处; Lisp有强大无比的元语言能力, 程序员可以写出自我维护的代码; Lisp可以创造出针对特定应用的语言子集; Lisp的运行时和编译时没有明确的分界; 等等, 等等, 等等。这么长的赞美词虽然看起来相当动人, 不过对我毫无意义。没人能给我演示这些东西是如何应用的, 因为这些东西一般来说只有在大型系统才会用到。我争辩说, 这些东西传统语言一样办得到。在和别人争论了数个小时之后, 我最终还是放弃了学Lisp的念头。为什么要花费几个月的时间学习语法这么难看的语言呢? 这种语言的概念这么晦涩, 又没什么好懂的例子。也许这语言不是该我这样的人学的。&lt;/p&gt;&lt;p&gt;几个月来, 我承受着这些Lisp辩护士对我心灵的重压。我一度陷入了困惑。我认识一些绝顶聪明的人, 我对他们相当尊敬, 我看到他们对Lisp的赞美达到了宗教般的高度。这就是说, Lisp中一定有某种神秘的东西存在, 我不能忍受自己对此的无知, 好奇心和求知欲最终不可遏制。我于是咬紧牙关埋头学习Lisp, 经过几个月的时间费劲心力的练习, 终于,我看到了那无穷无尽的泉水的源头。在经过脱胎换骨的磨练之后, 在经过七重地狱的煎熬之后, 终于, 我明白了。&lt;/p&gt;&lt;p&gt;顿悟在突然之间来临。曾经许多次, 我听到别人引用雷蒙德(译者注: 论文&amp;lt;&amp;lt;大教堂和市集&amp;gt;&amp;gt;的作者, 著名的黑客社区理论家)的话: "Lisp语言值得学习。当你学会Lisp之后, 你会拥有深刻的体验。就算你平常并不用Lisp编程, 它也会使你成为更加优秀的程序员"。过去, 我根本不懂这些话的含义, 我也不相信这是真的。可是现在我懂得了。这些话蕴含的真理远远超过我过去的想像。我内心体会到一种神圣的情感, 一瞬间的顿悟, 几乎使我对电脑科学的观念发生了根本的改变。&lt;/p&gt;&lt;p&gt;顿悟的那一刻, 我成了Lisp的崇拜者。我体验到了宗教大师的感受: 一定要把我的知识传布开来, 至少要让10个迷失的灵魂得到拯救。按照通常的办法, 我把这些道理(就是刚开始别人砸过来的那一套, 不过现在我明白了真实的含义)告诉旁人。结果太令人失望了, 只有少数几个人在我坚持之下, 发生了一点兴趣, 但是仅仅看了几眼Lisp代码, 他们就退却了。照这样的办法, 也许费数年功夫能造就了几个Lisp迷, 但我觉得这样的结果太差强人意了, 我得想一套有更好的办法。&lt;/p&gt;&lt;p&gt;我深入地思考了这个问题。是不是Lisp有什么很艰深的东西, 令得那么多老练的程序员都不能领会? 不是, 没有任何绝对艰深的东西。因为我能弄懂, 我相信其他人也一定能。那么问题出在那里? 后来我终于找到了答案。我的结论就是, 凡是教人学高级概念, 一定要从他已经懂得的东西开始。如果学习过程很有趣, 学习的内容表达得很恰当, 新概念就会变得相当直观。这就是我的答案。所谓元编程, 所谓数据和代码形式合一, 所谓自修改代码, 所谓特定应用的子语言, 所有这些概念根本就是同族概念, 彼此互为解释, 肯定越讲越不明白。还是从实际的例子出发最有用。&lt;/p&gt;&lt;p&gt;我把我的想法说给Lisp程序员听, 遭到了他们的反对。"这些东西本身当然不可能用熟悉的知识来解释, 这些概念完全与众不同, 你不可能在别人已有的经验里找到类似的东西",可是我认为这些都是遁词。他们又反问我, "你自己为啥不试一下?" 好吧, 我来试一下。这篇文章就是我尝试的结果。我要用熟悉的直观的方法来解释Lisp, 我希望有勇气的人读完它, 拿杯饮料, 深呼吸一下, 准备被搞得晕头转向。来吧, 愿你获得大能。&lt;/p&gt;&lt;p&gt;重新审视XML&lt;/p&gt;&lt;p&gt;千里之行始于足下。让我们的第一步从XML开始。可是XML已经说得更多的了, 还能有什么新意思可说呢? 有的。XML自身虽然谈谈不上有趣, 但是XML和Lisp的关系却相当有趣。XML和Lisp的概念有着惊人的相似之处。XML是我们通向理解Lisp的桥梁。好吧, 我们且把XML当作活马医。让我们拿好手杖, 对XML的无人涉及的荒原地带作一番探险。我们要从一个全新的视角来考察这个题目。&lt;/p&gt;&lt;p&gt;表面上看, XML是一种标准化语法, 它以适合人阅读的格式来表达任意的层次化数据(hirearchical data)。象任务表(to-do list), 网页, 病历, 汽车保险单, 配置文件等等, 都是XML用武的地方。比如我们拿任务表做例子:&lt;/p&gt;&lt;p&gt;&amp;lt;todo name="housework"&amp;gt;&lt;br /&gt;   &amp;lt;item priority="high"&amp;gt;Clean the house.&amp;lt;/item&amp;gt;&lt;br /&gt;   &amp;lt;item priority="medium"&amp;gt;Wash the dishes.&amp;lt;/item&amp;gt;&lt;br /&gt;   &amp;lt;item priority="medium"&amp;gt;Buy more soap.&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/todo&amp;gt;&lt;/p&gt;&lt;p&gt;解析这段数据时会发生什么情况? 解析之后的数据在内存中怎样表示? 显然, 用树来表示这种层次化数据是很恰当的。说到底, XML这种比较容易阅读的数据格式, 就是树型结构数据经过序列化之后的结果。任何可以用树来表示的数据, 同样可以用XML来表示, 反之亦然。希望你能懂得这一点, 这对下面的内容极其重要。&lt;/p&gt;&lt;p&gt;再进一步。还有什么类型的数据也常用树来表示? 无疑列表(list)也是一种。上过编译课吧? 还模模糊糊记得一点吧? 源代码在解析之后也是用树结构来存放的, 任何编译程序都会把源代码解析成一棵抽象语法树, 这样的表示法很恰当, 因为源代码就是层次结构的: 函数包含参数和代码块, 代码快包含表达式和语句, 语句包含变量和运算符等等。&lt;/p&gt;&lt;p&gt;我们已经知道, 任何树结构都可以轻而易举的写成XML, 而任何代码都会解析成树, 因此,任何代码都可以转换成XML, 对不对? 我举个例子, 请看下面的函数:&lt;/p&gt;&lt;p&gt;int add(int arg1, int arg2)&lt;br /&gt;{&lt;br /&gt;return arg1+arg2;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;能把这个函数变成对等的XML格式吗? 当然可以。我们可以用很多种方式做到, 下面是其中的一种, 十分简单:&lt;/p&gt;&lt;p&gt;&amp;lt;define-function return-type="int" name="add"&amp;gt;&lt;br /&gt;   &amp;lt;arguments&amp;gt;&lt;br /&gt;       &amp;lt;argument type="int"&amp;gt;arg1&amp;lt;/argument&amp;gt;&lt;br /&gt;       &amp;lt;argument type="int"&amp;gt;arg2&amp;lt;/argument&amp;gt;&lt;br /&gt;   &amp;lt;/arguments&amp;gt;&lt;br /&gt;   &amp;lt;body&amp;gt;&lt;br /&gt;       &amp;lt;return&amp;gt;&lt;br /&gt;           &amp;lt;add value1="arg1" value2="arg2" /&amp;gt;&lt;br /&gt;       &amp;lt;/return&amp;gt;&lt;br /&gt;   &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/define&amp;gt;&lt;/p&gt;&lt;p&gt;这个例子非常简单, 用哪种语言来做都不会有太大问题。我们可以把任何程序码转成XML,也可以把XML转回到原来的程序码。我们可以写一个转换器, 把Java代码转成XML, 另一个转换器把XML转回到Java。一样的道理, 这种手段也可以用来对付C++(这样做跟发疯差不多么。可是的确有人在做, 看看GCC-XML(http://www.gccxml.org)就知道了)。进一步说,凡是有相同语言特性而语法不同的语言, 都可以把XML当作中介来互相转换代码。实际上几乎所有的主流语言都在一定程度上满足这个条件。我们可以把XML作为一种中间表示法,在两种语言之间互相译码。比方说, 我们可以用Java2XML把Java代码转换成XML, 然后用XML2CPP再把XML转换成C++代码, 运气好的话, 就是说, 如果我们小心避免使用那些C++不具备的Java特性的话, 我们可以得到完好的C++程序。这办法怎么样, 漂亮吧?&lt;/p&gt;&lt;p&gt;这一切充分说明, 我们可以把XML作为源代码的通用存储方式, 其实我们能够产生一整套使用统一语法的程序语言, 也能写出转换器, 把已有代码转换成XML格式。如果真的采纳这种办法, 各种语言的编译器就用不着自己写语法解析了, 它们可以直接用XML的语法解析来直接生成抽象语法树。&lt;/p&gt;&lt;p&gt;说到这里你该问了, 我们研究了这半天XML, 这和Lisp有什么关系呢? 毕竟XML出来之时,Lisp早已经问世三十年了。这里我可以保证, 你马上就会明白。不过在继续解释之前, 我们先做一个小小的思维练习。看一下上面这个XML版本的add函数例子, 你怎样给它分类, 是代码还是数据? 不用太多考虑都能明白, 把它分到哪一类都讲得通。它是XML, 它是标准格式的数据。我们也知道, 它可以通过内存中的树结构来生成(GCC-XML做的就是这个事情)。它保存在不可执行的文件中。我们可以把它解析成树节点, 然后做任意的转换。显而易见, 它是数据。不过且慢, 虽然它语法有点陌生, 可它又确确实实是一个add函数, 对吧?  一旦经过解析, 它就可以拿给编译器编译执行。我们可以轻而易举写出这个XML 代码解释器, 并且直接运行它。或者我们也可以把它译成Java或C++代码, 然后再编译运行。所以说, 它也是代码。&lt;/p&gt;&lt;p&gt;我们说到那里了? 不错, 我们已经发现了一个有趣的关键之点。过去被认为很难解的概念已经非常直观非常简单的显现出来。代码也是数据, 并且从来都是如此。这听起来疯疯癫癫的, 实际上却是必然之事。我许诺过会以一种全新的方式来解释Lisp, 我要重申我的许诺。但是我们此刻还没有到预定的地方, 所以还是先继续上边的讨论。&lt;/p&gt;&lt;p&gt;刚才我说过, 我们可以非常简单地实现XML版的add函数解释器, 这听起来好像不过是说说而已。谁真的会动手做一下呢? 未必有多少人会认真对待这件事。随便说说, 并不打算真的去做, 这样的事情你在生活中恐怕也遇到吧。你明白我这样说的意思吧, 我说的有没有打动你? 有哇, 那好, 我们继续。&lt;/p&gt;&lt;p&gt;重新审视Ant&lt;/p&gt;&lt;p&gt;我们现在已经来到了月亮背光的那一面, 先别忙着离开。再探索一下, 看看我们还能发现什么东西。闭上眼睛, 想一想2000年冬天的那个雨夜, 一个名叫James Duncan Davidson 的杰出的程序员正在研究Tomcat的servlet容器。那时, 他正小心地保存好刚修改过的文件, 然后执行make。结果冒出了一大堆错误, 显然有什么东西搞错了。经过仔细检查, 他想, 难道是因为tab前面加了个空格而导致命令不能执行吗? 确实如此。老是这样, 他真的受够了。乌云背后的月亮给了他启示, 他创建了一个新的Java项目, 然后写了一个简单但是十分有用的工具, 这个工具巧妙地利用了Java属性文件中的信息来构造工程, 现在James可以写makefile的替代品, 它能起到相同的作用, 而形式更加优美, 也不用担心有makefile那样可恨的空格问题。这个工具能够自动解释属性文件, 然后采取正确的动作来编译工程。真是简单而优美。&lt;/p&gt;&lt;p&gt;(作者注: 我不认识James, James也不认识我, 这个故事是根据网上关于Ant历史的帖子虚构的)&lt;/p&gt;&lt;p&gt;使用Ant构造Tomcat之后几个月, 他越来越感到Java的属性文件不足以表达复杂的构造指令。文件需要检出, 拷贝, 编译, 发到另外一台机器, 进行单元测试。要是出错, 就发邮件给相关人员, 要是成功, 就继续在尽可能高层的卷(volumn)上执行构造。追踪到最后, 卷要回复到最初的水平上。确实, Java的属性文件不够用了, James需要更有弹性的解决方案。他不想自己写解析器(因为他更希望有一个具有工业标准的方案)。XML看起来是个不错的选择。他花了几天工夫把Ant移植到XML，于是，一件伟大的工具诞生了。&lt;/p&gt;&lt;p&gt;Ant是怎样工作的？原理非常简单。Ant把包含有构造命令的XML文件(算代码还是算数据, 你自己想吧)，交给一个Java程序来解析每一个元素，实际情况比我说的还要简单得多。一个简单的XML指令会导致具有相同名字的Java类装入，并执行其代码。&lt;/p&gt;&lt;p&gt;    &amp;lt;copy todir="../new/dir"&amp;gt;&lt;br /&gt;       &amp;lt;fileset dir="src_dir" /&amp;gt;&lt;br /&gt;   &amp;lt;/copy&amp;gt;&lt;/p&gt;&lt;p&gt;这段文字的含义是把源目录复制到目标目录，Ant会找到一个"copy"任务(实际上就是一个Java类), 通过调用Java的方法来设置适当参数(todir和fileset)，然后执行这个任务。Ant带有一组核心类, 可以由用户任意扩展, 只要遵守若干约定就可以。Ant找到这些类, 每当遇到XML元素有同样的名字, 就执行相应的代码。过程非常简单。Ant做到了我们前面所说的东西: 它是一个语言解释器, 以XML作为语法, 把XML元素转译为适当的Java指令。我们可以写一个"add"任务, 然后, 当发现XML中有add描述的时候, 就执行这个add任务。由于Ant是非常流行的项目, 前面展示的策略就显得更为明智。毕竟, 这个工具每天差不多有几千家公司在使用。&lt;/p&gt;&lt;p&gt;到目前为之, 我还没有说Ant在解析XML时所遇到困难。你也不用麻烦去它的网站上去找答案了, 不会找到有价值的东西。至少对我们这个论题来说是如此。我们还是继续下一步讨论吧。我们答案就在那里。&lt;/p&gt;&lt;p&gt;为什么是XML&lt;/p&gt;&lt;p&gt;有时候正确的决策并非完全出于深思熟虑。我不知道James选择XML是否出于深思熟虑。也许仅仅是个下意识的决定。至少从James在Ant网站上发表的文章看起来, 他所说的理由完全是似是而非。他的主要理由是移植性和扩展性, 在Ant案例上, 我看不出这两条有什么帮助。使用XML而不是Java代码, 到底有什么好处? 为什么不写一组Java类, 提供api来满足基本任务(拷贝目录, 编译等等), 然后在Java里直接调用这些代码? 这样做仍然可以保证移植性, 扩展性也是毫无疑问的。而且语法也更为熟悉, 看着顺眼。那为什么要用 XML呢? 有什么更好的理由吗?&lt;/p&gt;&lt;p&gt;有的。虽然我不确定James是否确实意识到了。在语义的可构造性方面, XML的弹性是Java望尘莫及的。我不想用高深莫测的名词来吓唬你, 其中的道理相当简单, 解释起来并不费很多功夫。好, 做好预备动作, 我们马上就要朝向顿悟的时刻做奋力一跃。&lt;/p&gt;&lt;p&gt;上面的那个copy的例子, 用Java代码怎样实现呢? 我们可以这样做:&lt;/p&gt;&lt;p&gt;    CopyTask copy = new CopyTask();&lt;br /&gt;   Fileset fileset = new Fileset();&lt;/p&gt;&lt;p&gt;    fileset.setDir("src_dir");&lt;br /&gt;   copy.setToDir("../new/dir");&lt;br /&gt;   copy.setFileset(fileset);&lt;/p&gt;&lt;p&gt;    copy.excute();&lt;/p&gt;&lt;p&gt;这个代码看起来和XML的那个很相似, 只是稍微长一点。差别在那里? 差别在于XML构造了一个特殊的copy动词, 如果我们硬要用Java来写的话, 应该是这个样子:&lt;/p&gt;&lt;p&gt;    copy("../new/dir");&lt;br /&gt;   {&lt;br /&gt;       fileset("src_dir");&lt;br /&gt;   }&lt;/p&gt;&lt;p&gt;看到差别了吗? 以上代码(如果可以在Java中用的化), 是一个特殊的copy算符, 有点像for循环或者Java5中的foreach循环。如果我们有一个转换器, 可以把XML转换到Java, 大概就会得到上面这段事实上不可以执行的代码。因为Java的技术规范是定死的, 我们没有办法在程序里改变它。我们可以增加包, 增加类, 增加方法, 但是我们没办法增加算符, 而对于XML, 我们显然可以任由自己增加这样的东西。对于XML的语法树来说, 只要原意, 我们可以任意增加任何元素, 因此等于我们可以任意增加算符。如果你还不太明白的话, 看下面这个例子, 加入我们要给Java引入一个unless算符:&lt;/p&gt;&lt;p&gt;    unless(someObject.canFly())&lt;br /&gt;   {&lt;br /&gt;       someObject.transportByGround():&lt;br /&gt;   }&lt;/p&gt;&lt;p&gt;在上面的两个例子中, 我们打算给Java语法扩展两个算符, 成组拷贝文件算符和条件算符unless, 我们要想做到这一点, 就必须修改Java编译器能够接受的抽象语法树, 显然我们无法用Java标准的功能来实现它。但是在XML中我们可以轻而易举地做到。我们的解析器根据 XML元素, 生成抽象语法树, 由此生成算符, 所以, 我们可以任意引入任何算符。&lt;/p&gt;&lt;p&gt;对于复杂的算符来说, 这样做的好处显而易见。比如, 用特定的算符来做检出源码, 编译文件, 单元测试, 发送邮件等任务, 想想看有多么美妙。对于特定的题目, 比如说构造软件项目, 这些算符的使用可以大幅减低少代码的数量。增加代码的清晰程度和可重用性。解释性的XML可以很容易的达到这个目标。XML是存储层次化数据的简单数据文件, 而在Java中, 由于层次结构是定死的(你很快就会看到, Lisp的情况与此截然不同), 我们就没法达到上述目标。也许这正是Ant的成功之处呢。&lt;/p&gt;&lt;p&gt;你可以注意一下最近Java和C#的变化(尤其是C#3.0的技术规范), C#把常用的功能抽象出来, 作为算符增加到C#中。C#新增加的query算符就是一个例子。它用的还是传统的作法:C#的设计者修改抽象语法树, 然后增加对应的实现。如果程序员自己也能修改抽象语法树该有多好! 那样我们就可以构造用于特定问题的子语言(比如说就像Ant这种用于构造项目的语言), 你能想到别的例子吗? 再思考一下这个概念。不过也不必思考太甚, 我们待会还会回到这个题目。那时候就会更加清晰。&lt;/p&gt;&lt;p&gt;离Lisp越来越近&lt;/p&gt;&lt;p&gt;我们先把算符的事情放一放, 考虑一下Ant设计局限之外的东西。我早先说过, Ant可以通过写Java类来扩展。Ant解析器会根据名字来匹配XML元素和Java类, 一旦找到匹配, 就执行相应任务。为什么不用Ant自己来扩展Ant呢? 毕竟核心任务要包含很多传统语言的结构(例如"if"), 如果Ant自身就能提供构造任务的能力(而不是依赖java类), 我们就可以得到更高的移植性。我们将会依赖一组核心任务(如果你原意, 也不妨把它称作标准库), 而不用管有没有Java 环境了。这组核心任务可以用任何方式来实现, 而其他任务建筑在这组核心任务之上, 那样的话, Ant就会成为通用的, 可扩展的, 基于XML的编程语言。考虑下面这种代码的可能性:&lt;/p&gt;&lt;p&gt;    &amp;lt;task name="Test"&amp;gt;&lt;br /&gt;       &amp;lt;echo message="Hello World" /&amp;gt;&lt;br /&gt;   &amp;lt;/task&amp;gt;&lt;br /&gt;   &amp;lt;Test /&amp;gt;&lt;/p&gt;&lt;p&gt;如果XML支持"task"的创建, 上面这段代码就会输出"Hello World!". 实际上, 我们可以用Java写个"task"任务, 然后用Ant-XML来扩展它。Ant可以在简单原语的基础上写出更复杂的原语, 就像其他编程语言常用的作法一样。这也就是我们一开始提到的基于XML的编程语言。这样做用处不大(你知道为甚么吗?), 但是真的很酷。&lt;/p&gt;&lt;p&gt;再看一回我们刚才说的Task任务。祝贺你呀, 你在看Lisp代码!!! 我说什么? 一点都不像Lisp吗? 没关系, 我们再给它收拾一下。&lt;/p&gt;&lt;p&gt;比XML更好&lt;/p&gt;&lt;p&gt;前面一节说过, Ant自我扩展没什么大用, 原因在于XML很烦琐。对于数据来说, 这个问题还不太大, 但如果代码很烦琐的话, 光是打字上的麻烦就足以抵消它的好处。你写过Ant 的脚本吗? 我写过, 当脚本达到一定复杂度的时候, XML非常让人厌烦。想想看吧, 为了写结束标签, 每个词都得打两遍, 不发疯算好的!&lt;/p&gt;&lt;p&gt;为了解决这个问题, 我们应当简化写法。须知, XML仅仅是一种表达层次化数据的方式。我们并不是一定要使用尖括号才能得到树的序列化结果。我们完全可以采用其他的格式。其中的一种(刚好就是Lisp所采用的)格式, 叫做s表达式。s表达式要做的和XML一样, 但它的好处是写法更简单, 简单的写法更适合代码输入。后面我会详细讲s表达式。这之前我要清理一下XML的东西。考虑一下关于拷贝文件的例子:&lt;/p&gt;&lt;p&gt;    &amp;lt;copy toDir="../new/dir"&amp;gt;&lt;br /&gt;       &amp;lt;fileset dir="src_dir"&amp;gt;&lt;br /&gt;   &amp;lt;/copy&amp;gt;&lt;/p&gt;&lt;p&gt;想想看在内存里面, 这段代码的解析树在内存会是什么样子? 会有一个"copy"节点, 其下有一个 "fileset"节点, 但是属性在哪里呢? 它怎样表达呢? 如果你以前用过XML, 并且弄不清楚该用元素还是该用属性, 你不用感到孤单, 别人一样糊涂着呢。没人真的搞得清楚。这个选择与其说是基于技术的理由, 还不如说是闭着眼瞎摸。从概念上来讲, 属性也是一种元素, 任何属性能做的, 元素一样做得到。XML引入属性的理由, 其实就是为了让XML写法不那么冗长。比如我们看个例子:&lt;/p&gt;&lt;p&gt;    &amp;lt;copy&amp;gt;&lt;br /&gt;       &amp;lt;toDir&amp;gt;../new/dir&amp;lt;/toDir&amp;gt;&lt;br /&gt;       &amp;lt;fileset&amp;gt;&lt;br /&gt;           &amp;lt;dir&amp;gt;src_dir&amp;lt;/dir&amp;gt;&lt;br /&gt;       &amp;lt;/fileset&amp;gt;&lt;br /&gt;   &amp;lt;/copy&amp;gt;&lt;/p&gt;&lt;p&gt;两下比较, 内容的信息量完全一样, 用属性可以减少打字数量。如果XML没有属性的话, 光是打字就够把人搞疯掉。&lt;/p&gt;&lt;p&gt;说完了属性的问题, 我们再来看一看s表达式。之所以绕这么个弯, 是因为s表达式没有属性的概念。因为s表达式非常简练, 根本没有必要引入属性。我们在把XML转换成s表达式的时候, 心里应该记住这一点。看个例子, 上面的代码译成s表达式是这样的:&lt;/p&gt;&lt;p&gt;    (copy         (todir "../new/dir")        (fileset (dir "src_dir")))&lt;/p&gt;&lt;p&gt;仔细看看这个例子, 差别在哪里? 尖括号改成了圆括号, 每个元素原来是有一对括号标记包围的, 现在取消了后一个(就是带斜杠的那个)括号标记。表示元素的结束只需要一个")"就可以了。不错, 差别就是这些。这两种表达方式的转换, 非常自然, 也非常简单。s表达式打起字来, 也省事得多。第一次看s表达式(Lisp)时, 括号很烦人是吧? 现在我们明白了背后的道理, 一下子就变得容易多了。至少, 比XML要好的多。用s表达式写代码, 不单是实用, 而且也很让人愉快。s表达式具有XML的一切好处, 这些好处是我们刚刚探讨过的。现在我们看看更加Lisp风格的task例子:&lt;/p&gt;&lt;p&gt;    (task (name "Test")&lt;br /&gt;       (echo (message "Hellow World!")))&lt;br /&gt;   (Test)&lt;/p&gt;&lt;p&gt;用Lisp的行话来讲, s表达式称为表(list)。对于上面的例子, 如果我们写的时候不加换行, 用逗号来代替空格, 那么这个表达式看起来就非常像一个元素列表, 其中又嵌套着其他标记。&lt;/p&gt;&lt;p&gt;    (task, (name, "test"), (echo, (message, "Hello World!")))&lt;/p&gt;&lt;p&gt;XML自然也可以用这样的风格来写。当然上面这句并不是一般意义上的元素表。它实际上是一个树。这和XML的作用是一样的。称它为列表, 希望你不会感到迷惑, 因为嵌套表和树实际上是一码事。Lisp的字面意思就是表处理(list processing), 其实也可以称为树处理, 这和处理XML节点没有什么不同。&lt;/p&gt;&lt;p&gt;经受这一番折磨以后, 现在我们终于相当接近Lisp了, Lisp的括号的神秘本质(就像许多Lisp狂热分子认为的)逐渐显现出来。现在我们继续研究其他内容。&lt;/p&gt;&lt;p&gt;重新审视C语言的宏&lt;/p&gt;&lt;p&gt;到了这里, 对XML的讨论你大概都听累了, 我都讲累了。我们先停一停, 把树, s表达式,Ant这些东西先放一放, 我们来说说C的预处理器。一定有人问了, 我们的话题和C有什么关系? 我们已经知道了很多关于元编程的事情, 也探讨过专门写代码的代码。理解这问题有一定难度, 因为相关讨论文章所使用的编程语言, 都是你们不熟悉的。但是如果只论概念的话, 就相对要简单一些。我相信, 如果以C语言做例子来讨论元编程, 理解起来一定会容易得多。好, 我们接着看。&lt;/p&gt;&lt;p&gt;一个问题是, 为什么要用代码来写代码呢? 在实际的编程中, 怎样做到这一点呢? 到底元编程是什么意思? 你大概已经听说过这些问题的答案, 但是并不懂得其中缘由。为了揭示背后的真理, 我们来看一下一个简单的数据库查询问题。这种题目我们都做过。比方说, 直接在程序码里到处写SQL语句来修改表(table)里的数据, 写多了就非常烦人。即便用C#3.0的LINQ, 仍然不减其痛苦。写一个完整的SQL查询(尽管语法很优美)来修改某人的地址, 或者查找某人的名字, 绝对是件令程序员倍感乏味的事情, 那么我们该怎样来解决这个问题? 答案就是: 使用数据访问层。 &lt;/p&gt;&lt;p&gt;概念挺简单, 其要点是把数据访问的内容(至少是那些比较琐碎的部分)抽象出来, 用类来映射数据库的表, 然后用访问对象属性访问器(accessor)的办法来间接实现查询。这样就极大地简化了开发工作量。我们用访问对象的方法(或者属性赋值, 这要视你选用的语言而定)来代替写SQL查询语句。凡是用过这种方法的人, 都知道这很节省时间。当然, 如果你要亲自写这样一个抽象层, 那可是要花非常多的时间的--你要写一组类来映射表, 把属性访问转换为SQL查询, 这个活相当耗费精力。用手工来做显然是很不明智的。但是一旦你有了方案和模板, 实际上就没有多少东西需要思考的。你只需要按照同样的模板一次又一次重复编写相似代码就可以了。事实上很多人已经发现了更好的方法, 有一些工具可以帮助你连接数据库, 抓取数据库结构定义(schema), 按照预定义的或者用户定制的模板来自动编写代码。&lt;/p&gt;&lt;p&gt;如果你用过这种工具, 你肯定会对它的神奇效果深为折服。往往只需要鼠标点击数次, 就可以连接到数据库, 产生数据访问源码, 然后把文件加入到你的工程里面, 十几分钟的工作, 按照往常手工方式来作的话, 也许需要数百个小时人工(man-hours)才能完成。可是,如果你的数据库结构定义后来改变了怎么办? 那样的话, 你只需把这个过程重复一遍就可以了。甚至有一些工具能自动完成这项变动工作。你只要把它作为工程构造的一部分, 每次编译工程的时候, 数据库部分也会自动地重新构造。这真的太棒了。你要做的事情基本上减到了0。如果数据库结构定义发生了改变, 并在编译时自动更新了数据访问层的代码,那么程序中任何使用过时的旧代码的地方, 都会引发编译错误。&lt;/p&gt;&lt;p&gt;数据访问层是个很好的例子, 这样的例子还有好多。从GUI样板代码, WEB代码, COM和CORBA存根, 以及MFC和ATL等等。在这些地方, 都是有好多相似代码多次重复。既然这些代码有可能自动编写, 而程序员时间又远远比CPU时间昂贵, 当然就产生了好多工具来自动生成样板代码。这些工具的本质是什么呢? 它们实际上就是制造程序的程序。它们有一个神秘的名字, 叫做元编程。所谓元编程的本义, 就是如此。&lt;/p&gt;&lt;p&gt;元编程本来可以用到无数多的地方, 但实际上使用的次数却没有那么多。归根结底, 我们心里还是在盘算, 假设重复代码用拷贝粘贴的话, 大概要重复6,7次, 对于这样的工作量,值得专门建立一套生成工具吗? 当然不值得。数据访问层和COM存根往往需要重用数百次,甚至上千次, 所以用工具生成是最好的办法。而那些仅仅是重复几次十几次的代码, 是没有必要专门做工具的。不必要的时候也去开发代码生成工具, 那就显然过度估计了代码生成的好处。当然, 如果创建这类工具足够简单的话, 还是应当尽量多用, 因为这样做必然会节省时间。现在来看一下有没有合理的办法来达到这个目的。&lt;/p&gt;&lt;p&gt;现在, C预处理器要派上用场了。我们都用过C/C++的预处理器, 我们用它执行简单的编译指令, 来产生简单的代码变换(比方说, 设置调试代码开关), 看一个例子:&lt;/p&gt;&lt;p&gt;    #define triple(X) X+X+X&lt;/p&gt;&lt;p&gt;这一行的作用是什么? 这是一个简单的预编译指令, 它把程序中的triple(X)替换称为X+X+X。例如, 把所有的triple(5)都换成5+5+5, 然后再交给编译器编译。这就是一个简单的代码生成的例子。要是C的预处理器再强大一点, 要是能够允许连接数据库, 要是能多一些其他简单的机制, 我们就可以在我们程序的内部开发自己的数据访问层。下面这个例子, 是一个假想的对C宏的扩展:&lt;/p&gt;&lt;p&gt;    #get-db-schema("127.0.0.1")&lt;br /&gt;   #iterate-through-tables&lt;br /&gt;   #for-each-table&lt;br /&gt;       class #table-name&lt;br /&gt;           {&lt;br /&gt;           };&lt;br /&gt;   #end-for-each&lt;/p&gt;&lt;p&gt;我们连接数据库结构定义, 遍历数据表, 然后对每个表创建一个类, 只消几行代码就完成了这个工作。这样每次编译工程的时候, 这些类都会根据数据库的定义同步更新。显而易见, 我们不费吹灰之力就在程序内部建立了一个完整的数据访问层, 根本用不着任何外部工具。当然这种作法有一个缺点, 那就是我们得学习一套新的"编译时语言", 另一个缺点就是根本不存在这么一个高级版的C预处理器。需要做复杂代码生成的时候, 这个语言(译者注: 这里指预处理指令, 即作者所说的"编译时语言")本身也一定会变得相当复杂。它必须支持足够多的库和语言结构。比如说我们想要生成的代码要依赖某些ftp服务器上的文件, 预处理器就得支持ftp访问, 仅仅因为这个任务而不得不创造和学习一门新的语言,真是有点让人恶心(事实上已经存在着有此能力的语言, 这样做就更显荒谬)。我们不妨再灵活一点, 为什么不直接用 C/C++自己作为自己的预处理语言呢?  这样子的话, 我们可以发挥语言的强大能力, 要学的新东西也只不过是几个简单的指示字 , 这些指示字用来区别编译时代码和运行时代码。&lt;/p&gt;&lt;p&gt;    &amp;lt;%&lt;br /&gt;       cout&amp;lt;&amp;lt;"Enter a number: ";&lt;br /&gt;       cin&amp;gt;&amp;gt;n;&lt;br /&gt;   %&amp;gt;&lt;br /&gt;   for(int i=0;i&amp;lt; &amp;lt;% n %&amp;gt;;i++)&lt;br /&gt;   {&lt;br /&gt;       cout&amp;lt;&amp;lt;"hello"&amp;lt;&amp;lt;endl;&lt;br /&gt;   }&lt;/p&gt;&lt;p&gt;你明白了吗? 在&amp;lt;%和%&amp;gt;标记之间的代码是在编译时运行的, 标记之外的其他代码都是普通代码。编译程序时, 系统会提示你输入一个数, 这个数在后面的循环中会用到。而for循环的代码会被编译。假定你在编译时输入5, for循环的代码将会是:&lt;/p&gt;&lt;p&gt;    for(int i=0;i&amp;lt;5; i++)    {        cout&amp;lt;&amp;lt;"hello"&amp;lt;&amp;lt;endl;    }&lt;/p&gt;&lt;p&gt;又简单又有效率, 也不需要另外的预处理语言。我们可以在编译时就充分发挥宿主语言( 此处是C/C++)的强大能力, 我们可以很容易地在编译时连接数据库, 建立数据访问层, 就像JSP或者ASP创建网页那样。我们也用不着专门的窗口工具来另外建立工程。我们可以在代码中立即加入必要的工具。我们也用不着顾虑建立这种工具是不是值得, 因为这太容易了, 太简单了。这样子不知可以节省多少时间啊。&lt;/p&gt;&lt;p&gt;你好, Lisp&lt;/p&gt;&lt;p&gt;到此刻为止, 我们所知的关于Lisp的指示可以总结为一句话: Lisp是一个可执行的语法更优美的XML, 但我们还没有说Lisp是怎样做到这一点的, 现在开始补上这个话题。 &lt;/p&gt;&lt;p&gt;Lisp有丰富的内置数据类型, 其中的整数和字符串和其他语言没什么分别。像71或者"hello"这样的值, 含义也和C++或者Java这样的语言大体相同。真正有意思的三种类型是符号(symbol), 表和函数。这一章的剩余部分, 我都会用来介绍这几种类型, 还要介绍Lisp环境是怎样编译和运行源码的。这个过程用Lisp的术语来说通常叫做求值。通读这一节内容, 对于透彻理解元编程的真正潜力, 以及代码和数据的同一性, 和面向领域语言的观念, 都极其重要。万勿等闲视之。我会尽量讲得生动有趣一些, 也希望你能获得一些启发。那好, 我们先讲符号。&lt;/p&gt;&lt;p&gt;大体上, 符号相当于C++或Java语言中的标志符, 它的名字可以用来访问变量值(例如currentTime, arrayCount, n, 等等), 差别在于, Lisp中的符号更加基本。在C++或Java里面, 变量名只能用字母和下划线的组合, 而Lisp的符号则非常有包容性, 比如, 加号(+)就是一个合法的符号, 其他的像-, =, hello-world, *等等都可以是符号名。符号名的命名规则可以在网上查到。你可以给这些符号任意赋值, 我们这里先用伪码来说明这一点。假定函数set是给变量赋值(就像等号=在C++和Java里的作用), 下面是我们的例子:&lt;/p&gt;&lt;p&gt;    set(test, 5)            // 符号test的值为5&lt;br /&gt;   set(=, 5)               // 符号=的值为5&lt;br /&gt;   set(test, "hello")      // 符号test的值为字符串"hello"&lt;br /&gt;   set(test, =)            // 此时符号=的值为5, 所以test的也为5&lt;br /&gt;   set(*, "hello")         // 符号*的值为"hello"&lt;/p&gt;&lt;p&gt;好像有什么不对的地方? 假定我们对*赋给整数或者字符串值, 那做乘法时怎么办? 不管怎么说, *总是乘法呀? 答案简单极了。Lisp中函数的角色十分特殊, 函数也是一种数据类型, 就像整数和字符串一样, 因此可以把它赋值给符号。乘法函数Lisp的内置函数, 默认赋给*, 你可以把其他函数赋值给*, 那样*就不代表乘法了。你也可以把这函数的值存到另外的变量里。我们再用伪码来说明一下:&lt;/p&gt;&lt;p&gt;    *(3,4)          // 3乘4, 结果是12&lt;br /&gt;   set(temp, *)    // 把*的值, 也就是乘法函数, 赋值给temp&lt;br /&gt;   set(*, 3)       // 把3赋予*&lt;br /&gt;   *(3,4)          // 错误的表达式, *不再是乘法, 而是数值3&lt;br /&gt;   temp(3,4)       // temp是乘法函数, 所以此表达式的值为3乘4等于12&lt;br /&gt;   set(*, temp)    // 再次把乘法函数赋予*&lt;br /&gt;   *(3,4)          // 3乘4等于12&lt;/p&gt;&lt;p&gt;再古怪一点, 把减号的值赋给加号:&lt;/p&gt;&lt;p&gt;    set(+, -)       // 减号(-)是内置的减法函数&lt;br /&gt;   +(5, 4)         // 加号(+)现在是代表减法函数, 结果是5减4等于1&lt;/p&gt;&lt;p&gt;这只是举例子, 我还没有详细讲函数。Lisp中的函数是一种数据类型, 和整数, 字符串, 符号等等一样。一个函数并不必然有一个名字, 这和C++或者Java语言的情形很不相同。在这里函数自己代表自己。事实上它是一个指向代码块的指针, 附带有一些其他信息(例如一组参数变量)。只有在把函数赋予其他符号时, 它才具有了名字, 就像把一个数值或字符串赋予变量一样的道理。你可以用一个内置的专门用于创建函数的函数来创建函数,然后把它赋值给符号fn, 用伪码来表示就是:&lt;/p&gt;&lt;p&gt;    fn [a]&lt;br /&gt;   {&lt;br /&gt;       return *(a, 2);&lt;br /&gt;   }&lt;/p&gt;&lt;p&gt;这段代码返回一个具有一个参数的函数, 函数的功能是计算参数乘2的结果。这个函数还没有名字, 你可以把此函数赋值给别的符号:&lt;/p&gt;&lt;p&gt;    set(times-two, fn [a] {return *(a, 2)})&lt;/p&gt;&lt;p&gt;我们现在可以这样调用这个函数:&lt;/p&gt;&lt;p&gt;    time-two(5)         // 返回10&lt;/p&gt;&lt;p&gt;我们先跳过符号和函数, 讲一讲表。什么是表? 你也许已经听过好多相关的说法。表, 一言以蔽之, 就是把类似XML那样的数据块, 用s表达式来表示。表用一对括号括住, 表中元素以空格分隔, 表可以嵌套。例如(这回我们用真正的Lisp语法, 注意用分号表示注释):&lt;/p&gt;&lt;p&gt;    ()                      ; 空表&lt;br /&gt;   (1)                     ; 含一个元素的表&lt;br /&gt;   (1 "test")              ; 两元素表, 一个元素是整数1, 另一个是字符串&lt;br /&gt;   (test "hello")          ; 两元素表, 一个元素是符号, 另一个是字符串&lt;br /&gt;   (test (1 2) "hello")    ; 三元素表, 一个符号test, 一个含有两个元素1和2的&lt;br /&gt;                           ; 表, 最后一个元素是字符串&lt;/p&gt;&lt;p&gt;当Lisp系统遇到这样的表时, 它所做的, 和Ant处理XML数据所做的, 非常相似, 那就是试图执行它们。其实, Lisp源码就是特定的一种表, 好比Ant源码是一种特定的XML一样。Lisp执行表的顺序是这样的, 表的第一个元素当作函数, 其他元素当作函数的参数。如果其中某个参数也是表, 那就按照同样的原则对这个表求值, 结果再传递给最初的函数作为参数。这就是基本原则。我们看一下真正的代码:&lt;/p&gt;&lt;p&gt;    (* 3 4)                 ; 相当于前面列举过的伪码*(3,4), 即计算3乘4&lt;br /&gt;   (times-two 5)           ; 返回10, times-two按照前面的定义是求参数的2倍&lt;br /&gt;   (3 4)                   ; 错误, 3不是函数&lt;br /&gt;   (time-two)              ; 错误, times-two要求一个参数&lt;br /&gt;   (times-two 3 4)         ; 错误, times-two只要求一个参数&lt;br /&gt;   (set + -)               ; 把减法函数赋予符号+&lt;br /&gt;   (+ 5 4)                 ; 依据上一句的结果, 此时+表示减法, 所以返回1&lt;br /&gt;   (* 3 (+ 2 2))           ; 2+2的结果是4, 再乘3, 结果是12&lt;/p&gt;&lt;p&gt;上述的例子中, 所有的表都是当作代码来处理的。怎样把表当作数据来处理呢? 同样的,设想一下, Ant是把XML数据当作自己的参数。在Lisp中, 我们给表加一个前缀'来表示数据。&lt;/p&gt;&lt;p&gt;    (set test '(1 2))       ; test的值为两元素表&lt;br /&gt;   (set test (1 2))        ; 错误, 1不是函数&lt;br /&gt;   (set test '(* 3 4))     ; test的值是三元素表, 三个元素分别是*, 3, 4&lt;/p&gt;&lt;p&gt;我们可以用一个内置的函数head来返回表的第一个元素, tail函数来返回剩余元素组成的表。&lt;/p&gt;&lt;p&gt;    (head '(* 3 4))         ; 返回符号*&lt;br /&gt;   (tail '(* 3 4))         ; 返回表(3 4)&lt;br /&gt;   (head (tal '(* 3 4)))   ; 返回3&lt;br /&gt;   (head test)            ; 返回*&lt;/p&gt;&lt;p&gt;你可以把Lisp的内置函数想像成Ant的任务。差别在于, 我们不用在另外的语言中扩展Lisp(虽然完全可以做得到), 我们可以用Lisp自己来扩展自己, 就像上面举的times-two函数的例子。Lisp的内置函数集十分精简, 只包含了十分必要的部分。剩下的函数都是作为标准库来实现的。&lt;/p&gt;&lt;p&gt;Lisp宏&lt;/p&gt;&lt;p&gt;我们已经看到, 元编程在一个类似jsp的模板引擎方面的应用。我们通过简单的字符串处理来生成代码。但是我们可以做的更好。我们先提一个问题, 怎样写一个工具, 通过查找目录结构中的源文件来自动生成Ant脚本。&lt;/p&gt;&lt;p&gt;用字符串处理的方式生成Ant脚本是一种简单的方式。当然, 还有一种更加抽象, 表达能力更强, 扩展性更好的方式, 就是利用XML库在内存中直接生成XML节点, 这样的话内存中的节点就可以自动序列化成为字符串。不仅如此, 我们的工具还可以分析这些节点, 对已有的XML文件做变换。通过直接处理XML节点。我们可以超越字符串处理, 使用更高层次的概念, 因此我们的工作就会做的更快更好。&lt;/p&gt;&lt;p&gt;我们当然可以直接用Ant自身来处理XML变换和制作代码生成工具。或者我们也可以用Lisp来做这项工作。正像我们以前所知的, 表是Lisp内置的数据结构, Lisp含有大量的工具来快速有效的操作表(head和tail是最简单的两个)。而且, Lisp没有语义约束, 你可以构造任何数据结构, 只要你原意。&lt;/p&gt;&lt;p&gt;Lisp通过宏(macro)来做元编程。我们写一组宏来把任务列表(to-do list)转换为专用领域语言。&lt;/p&gt;&lt;p&gt;回想一下上面to-do list的例子, 其XML的数据格式是这样的:&lt;/p&gt;&lt;p&gt;    &amp;lt;todo name = "housework"&amp;gt;&lt;br /&gt;       &amp;lt;item priority = "high"&amp;gt;Clean the hose&amp;lt;/item&amp;gt;&lt;br /&gt;       &amp;lt;item priority = "medium"&amp;gt;Wash the dishes&amp;lt;/item&amp;gt;&lt;br /&gt;       &amp;lt;item priority = "medium"&amp;gt;Buy more soap&amp;lt;/item&amp;gt;&lt;br /&gt;   &amp;lt;/todo&amp;gt;&lt;/p&gt;&lt;p&gt;相应的s表达式是这样的:&lt;/p&gt;&lt;p&gt;    (todo "housework"&lt;br /&gt;       (item (priority high) "Clean the house")&lt;br /&gt;       (item (priority medium) "Wash the dishes")&lt;br /&gt;       (item (priority medium) "Buy more soap"))&lt;/p&gt;&lt;p&gt;假设我们要写一个任务表的管理程序, 把任务表数据存到一组文件里, 当程序启动时, 从文件读取这些数据并显示给用户。在别的语言里(比如说Java), 这个任务该怎么做? 我们会解析XML文件, 从中得出任务表数据, 然后写代码遍历XML树, 再转换为Java的数据结构(老实讲, 在Java里解析XML真不是件轻松的事情), 最后再把数据展示给用户。现在如果用Lisp, 该怎么做?&lt;/p&gt;&lt;p&gt;假定要用同样思路的化, 我们大概会用Lisp库来解析XML。XML对我们来说就是一个Lisp 的表(s表达式), 我们可以遍历这个表, 然后把相关数据提交给用户。可是, 既然我们用Lisp, 就根本没有必要再用XML格式保存数据, 直接用s表达式就好了, 这样就没有必要做转换了。我们也用不着专门的解析库, Lisp可以直接在内存里处理s表达式。注意, Lisp 编译器和.net编译器一样, 对Lisp程序来说, 在运行时总是随时可用的。&lt;/p&gt;&lt;p&gt;但是还有更好的办法。我们甚至不用写表达式来存储数据, 我们可以写宏, 把数据当作代码来处理。那该怎么做呢? 真的简单。回想一下, Lisp的函数调用格式:&lt;/p&gt;&lt;p&gt;    (function-name arg1 arg2 arg3)&lt;/p&gt;&lt;p&gt;其中每个参数都是s表达式, 求值以后, 传递给函数。如果我们用(+ 4 5)来代替arg1, 那么, 程序会先求出结果, 就是9, 然后把9传递给函数。宏的工作方式和函数类似。主要的差别是, 宏的参数在代入时不求值。&lt;/p&gt;&lt;p&gt;    (macro-name (+ 4 5))&lt;/p&gt;&lt;p&gt;这里, (+ 4 5)作为一个表传递给宏, 然后宏就可以任意处理这个表, 当然也可以对它求值。宏的返回值是一个表, 然后有程序作为代码来执行。宏所占的位置, 就被替换为这个结果代码。我们可以定义一个宏把数据替换为任意代码, 比方说, 替换为显示数据给用户的代码。&lt;/p&gt;&lt;p&gt;这和元编程, 以及我们要做的任务表程序有什么关系呢? 实际上, 编译器会替我们工作, 调用相应的宏。我们所要做的, 仅仅是创建一个把数据转换为适当代码的宏。&lt;/p&gt;&lt;p&gt;例如, 上面曾经将过的C的求三次方的宏, 用Lisp来写是这样子:&lt;/p&gt;&lt;p&gt;    (defmacro triple (x)&lt;br /&gt;       `(+ ~x ~x ~x))&lt;/p&gt;&lt;p&gt;(译注: 在Common Lisp中, 此处的单引号应当是反单引号, 意思是对表不求值, 但可以对表中某元素求值, 记号~表示对元素x求值, 这个求值记号在Common Lisp中应当是逗号。反单引号和单引号的区别是, 单引号标识的表, 其中的元素都不求值。这里作者所用的记号是自己发明的一种Lisp方言Blaise, 和common lisp略有不同, 事实上, 发明方言是lisp高手独有的乐趣, 很多狂热分子都热衷这样做。比如Paul Graham就发明了ARC, 许多记号比传统的Lisp简洁得多, 显得比较现代)&lt;/p&gt;&lt;p&gt;单引号的用处是禁止对表求值。每次程序中出现triple的时候, &lt;/p&gt;&lt;p&gt;    (triple 4)&lt;/p&gt;&lt;p&gt;都会被替换成:&lt;/p&gt;&lt;p&gt;    (+ 4 4 4)&lt;/p&gt;&lt;p&gt;我们可以为任务表程序写一个宏, 把任务数据转换为可执行码, 然后执行。假定我们的输出是在控制台:&lt;/p&gt;&lt;p&gt;    (defmacro item (priority note)&lt;br /&gt;       `(block&lt;br /&gt;           (print stdout tab "Prority: " ~(head (tail priority)) endl)&lt;br /&gt;           (print stdout tab "Note: " ~note endl endl)))&lt;/p&gt;&lt;p&gt;我们创造了一个非常小的有限的语言来管理嵌在Lisp中的任务表。这个语言只用来解决特定领域的问题, 通常称之为DSLs(特定领域语言, 或专用领域语言)。&lt;/p&gt;&lt;p&gt;特定领域语言&lt;/p&gt;&lt;p&gt;本文谈到了两个特定领域语言, 一个是Ant, 处理软件构造。一个是没起名字的, 用于处理任务表。两者的差别在于, Ant是用XML, XML解析器, 以及Java语言合在一起构造出来的。而我们的迷你语言则完全内嵌在Lisp中, 只消几分钟就做出来了。&lt;/p&gt;&lt;p&gt;我们已经说过了DSL的好处, 这也就是Ant用XML而不直接用Java的原因。如果使用Lisp, 我们可以任意创建DSL, 只要我们需要。我们可以创建用于网站程序的DSL, 可以写多用户游戏, 做固定收益贸易(fixed income trade), 解决蛋白质折叠问题, 处理事务问题, 等等。我们可以把这些叠放在一起, 造出一个语言, 专门解决基于网络的贸易程序, 既有网络语言的优势, 又有贸易语言的好处。每天我们都会收获这种方法带给我们的益处, 远远超过Ant所能给予我们的。&lt;/p&gt;&lt;p&gt;用DSL解决问题, 做出的程序精简, 易于维护, 富有弹性。在Java里面, 我们可以用类来处理问题。这两种方法的差别在于, Lisp使我们达到了一个更高层次的抽象, 我们不再受语言解析器本身的限制, 比较一下用Java库直接写的构造脚本和用Ant写的构造脚本其间的差别。同样的, 比较一下你以前所做的工作, 你就会明白Lisp带来的好处。&lt;/p&gt;&lt;p&gt;接下来&lt;/p&gt;&lt;p&gt;学习Lisp就像战争中争夺山头。尽管在电脑科学领域, Lisp已经算是一门古老的语言, 直到现在仍然很少有人真的明白该怎样给初学者讲授Lisp。尽管Lisp老手们尽了很大努力,今天新手学习Lisp仍然是困难重重。好在现在事情正在发生变化, Lisp的资源正在迅速增加, 随着时间推移, Lisp将会越来越受关注。&lt;/p&gt;&lt;p&gt;Lisp使人超越平庸, 走到前沿。学会Lisp意味着你能找到更好的工作, 因为聪明的雇主会被你与众不同的洞察力所打动。学会Lisp也可能意味着明天你可能会被解雇, 因为你总是强调, 如果公司所有软件都用Lisp写, 公司将会如何卓越, 而这些话你的同事会听烦的。Lisp值得努力学习吗? 那些已经学会Lisp的人都说值得, 当然, 这取决于你的判断。&lt;/p&gt;&lt;p&gt;你的看法呢?&lt;/p&gt;&lt;p&gt;这篇文章写写停停, 用了几个月才最终完成。如果你觉得有趣, 或者有什么问题, 意见或建议, 请给我发邮件coffeemug@gmail.com, 我会很高兴收到你的反馈。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-8225040194131657250?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tb.donews.net/TrackBack.aspx?PostId=896935' title='The Nature of Lisp'/><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/8225040194131657250/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=8225040194131657250' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8225040194131657250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8225040194131657250'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/lispthe-nature-of-lisp.html' title='The Nature of Lisp'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7353004854023230077</id><published>2007-03-09T03:47:00.000+08:00</published><updated>2007-03-17T20:31:23.447+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skill'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>简单五步回收你的Mac硬盘空间</title><content type='html'>原文地址: http://www.techpwn.com/?p=235&lt;br /&gt;以下是简单摘要翻译:&lt;br /&gt;&lt;br /&gt;1.清理默认打印机驱动.&lt;br /&gt;在 /Library/Printers 里把不需要的打印机驱动删除能回收2G的空间.误删的话需要重装打印机驱动.&lt;br /&gt;&lt;br /&gt;2.用智能文件夹寻找大文件.&lt;br /&gt;一些不常用或是无用的大的文件时间长了忘记放哪了,可以用智能文件夹来管理.打开你的Finder，点击“文件”, 然后点 “新建智能文件夹”. 在第一个下拉菜单里, 选择 “大小”然后设置一个你相要的大小.找到不需要的大文件就删了吧,比如看过了的电影之类.&lt;br /&gt;&lt;br /&gt;3. 清理你的应用程序 .&lt;br /&gt;很容易积累一些你不再使用的程序.清理这些很能腾出空间.但你直接把它们删除还会留下些文件在系统里.删除这些文件的最好方法是用专门的卸载工具来删除程序. AppZapper不错, 但最好的免费的替代品是AppDelete.&lt;br /&gt;&lt;br /&gt;4. 清理缓存.&lt;br /&gt;很多程序都会使用缓存,如果不清里就会积累. 例如浏览器缓存,但其他程序或者系统的缓存不好弄.市面上有些程序能自动帮你搞定这些,例如Cocktail,但要花钱. 你也可以自己清理缓存. 这样做没多大风险,因为大多程序运行时会自动建立缓存. Mac 的缓存文件位于 /Library/Caches. 要记住一旦清除了浏览器的缓存,访问网站会要你重新输入密码,没什么大不了的…&lt;br /&gt;&lt;br /&gt;5. 控制你的媒体文件 .&lt;br /&gt;媒体文件大多很大,用iTunes的时候要注意不要无意间复制了这些文件.用iDupe能完美的找出iTunes里的重复文件. 如果你有重复的图片可以试试 “Duplicate Annihilator”,它像iDupe处理音乐一样处理你的图片.另一些清理媒体文件的方法是删除陈旧的 podcasts并且确保不为了同一景点存了13张图片,挑张最好的就行了.同时, 如果你有外接硬盘, 把你的图片和电影都搬过去, 会节省你很多的电脑空间.&lt;br /&gt;&lt;br /&gt;额外提示:可以用&lt;a href="http://monolingual.sourceforge.net/"&gt;Monoligual&lt;/a&gt;删除OSX里不必要的语言.它可以节约到2.2 GB以上的空间.(当然了,对我们中文用户就节约不了那么多...)但要小心按程序的提示使用,因为一旦你删了不该删的语言,你可能会后悔. 按提示使用会很顺利的.&lt;br /&gt;&lt;br /&gt;以上就是简单的翻译.如果你空间实在是腾不开,我还有一招,删除不需要的字体.更狠的还有,删除一些你用不到的东西,如Python,Perl,Ruby等等...不过应该还不至于如此.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7353004854023230077?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7353004854023230077/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7353004854023230077' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7353004854023230077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7353004854023230077'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/mac.html' title='简单五步回收你的Mac硬盘空间'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3311016716022223317</id><published>2007-03-07T22:55:00.000+08:00</published><updated>2008-11-15T16:05:59.197+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>实物复印机?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ygzfEy9Te6k/Re7SgmdVhjI/AAAAAAAAAME/kvwQE-YLHt8/s1600-h/attachment-10.jpeg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_ygzfEy9Te6k/Re7SgmdVhjI/AAAAAAAAAME/kvwQE-YLHt8/s400/attachment-10.jpeg" alt="" id="BLOGGER_PHOTO_ID_5039196490595403314" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3311016716022223317?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3311016716022223317/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3311016716022223317' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3311016716022223317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3311016716022223317'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_7490.html' title='实物复印机?'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ygzfEy9Te6k/Re7SgmdVhjI/AAAAAAAAAME/kvwQE-YLHt8/s72-c/attachment-10.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1752444669993444425</id><published>2007-03-07T22:40:00.000+08:00</published><updated>2008-11-15T16:05:59.312+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>羊树,不是杨树</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ygzfEy9Te6k/Re7PBGdVhiI/AAAAAAAAAL8/1jDUYlLGDyg/s1600-h/attachment-9.jpeg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_ygzfEy9Te6k/Re7PBGdVhiI/AAAAAAAAAL8/1jDUYlLGDyg/s400/attachment-9.jpeg" alt="" id="BLOGGER_PHOTO_ID_5039192650894640674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;goats in tree...&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1752444669993444425?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1752444669993444425/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1752444669993444425' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1752444669993444425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1752444669993444425'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_6690.html' title='羊树,不是杨树'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ygzfEy9Te6k/Re7PBGdVhiI/AAAAAAAAAL8/1jDUYlLGDyg/s72-c/attachment-9.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6927718615067419434</id><published>2007-03-07T20:54:00.000+08:00</published><updated>2007-03-09T01:24:24.958+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>好莱坞没有遵守的9个物理法则</title><content type='html'>列出了9个好莱坞电影或者电视里完全无视的9个物理学法则。一般情况下，好莱坞的制片人会遵守物理学法则因为没有其它选择可选。问题在于当人们被电影里的特技欺骗时他们似乎真的忘记了现实世界是怎么运作的。&lt;br /&gt;&lt;br /&gt;1.汽车爆炸&lt;br /&gt;经常会在动作片里看到，坠毁的汽车，或者泄露的汽油一点点火苗就会引发它爆炸。现实是汽油只有在混合了93%空气的时候才有可能爆炸。一般情况下，如果遇到车祸不要太着急，那样反而会容易受到伤害。&lt;br /&gt;&lt;br /&gt;2.声音和光同时发生&lt;br /&gt;电影里雷声不会紧跟着闪电到来（现实是声音比较慢）。其实它们是同时发生的，无论是炸药爆炸还是火山爆发，声音和光是同时出现的。&lt;br /&gt;&lt;br /&gt;3.放射性的神话&lt;br /&gt;电影里似乎让你相信放射性会传染，在黑暗中会让你发亮。现实是除非身上沾上放射性微粒，不会表现出放射性迹象。放射性也不会传染，如果人暴露在放射性中子照射下，那他会有细微的放射性。至于发光，除非衣服是磷做的。&lt;br /&gt;&lt;br /&gt;4.散弹枪和中国功夫会把人踢到空中&lt;br /&gt;一些香港动作片或者黑客帝国确实很好看。但是作用力和反作用力是同时发生的，从技术上说，如果你看到目标靶子被踢飞（或在被枪轰飞），那个踢的人也应该朝相反的方向飞出去，除非靠着墙。"&lt;br /&gt;&lt;br /&gt;5.下降的传说&lt;br /&gt;动作片里汽车常常会飞越过一个裂口（比如桥），在现实中不要进行此类尝试，你只会掉下缺口而不是飞过去，物理学法则告诉我们重力加速度会让你下降。1989年旧金山地震发生时，一个在高架桥上驾车的人试图这么做，结果可想。&lt;br /&gt;&lt;br /&gt;6.声音的科学&lt;br /&gt;声音不会一成不变，听说过多普勒效应吧。如果从桥上掉下去，喊叫的声音女人的听起来会像男人，男人的听起来会像基辛格（?）。&lt;br /&gt;&lt;br /&gt;7.炮弹爆炸方向&lt;br /&gt;战争片里主角的周围落下的炮弹似乎总是向上爆炸，因为导演安排了地下爆炸，实际上爆炸的方向是四面八方。&lt;br /&gt;&lt;br /&gt;8.子弹的火花&lt;br /&gt;枪里的子弹射出去不会有火花。硬质金属表面摩擦会产生火花，但是铅子弹（铜子弹）密度大，又软，摩擦不会出现火花，火花是电影特技虚构。&lt;br /&gt;&lt;br /&gt;9.太空里的声音传播&lt;br /&gt;声音传播需要介质。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6927718615067419434?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6927718615067419434/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6927718615067419434' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6927718615067419434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6927718615067419434'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/9.html' title='好莱坞没有遵守的9个物理法则'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-2562182410657722297</id><published>2007-03-07T18:41:00.000+08:00</published><updated>2007-03-09T01:28:31.593+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><title type='text'>光影魔术手 nEO iMAGING</title><content type='html'>一款Windows PC上的图像后期处理软件.非常方便易用.有中英文版.&lt;br /&gt;功能丰富:&lt;br /&gt;&lt;table style="color: rgb(153, 153, 153); width: 450px; height: 109px;" align="center" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height="21"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w01"&gt;正片效果&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="21"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w02"&gt;数码补光&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="21"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w03"&gt;晚霞渲染&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="21"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w04"&gt;褪色旧相&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="21"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w05"&gt;黑白效果&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="21"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w06"&gt;正片负冲&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="21"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w07"&gt;负片效果&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;               &lt;/tr&gt;               &lt;tr&gt;                  &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w08"&gt;夜景效果&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w09"&gt;白平衡一指键&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w10"&gt;CCD死点修复&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td colspan="2" height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w11"&gt;界面：对比模式和处理模式&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w12"&gt;色阶和曲线&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w13"&gt;人像褪黄&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;               &lt;/tr&gt;               &lt;tr&gt;                  &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w14"&gt;水印&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w15"&gt;花样边框&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w16"&gt;撕边效果&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w17"&gt;数码减光&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w18"&gt;变形校正&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w19"&gt;证件照排版&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w20"&gt;制作组合图&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;               &lt;/tr&gt;               &lt;tr&gt;                  &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w21"&gt;高ISO去噪&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w22"&gt;柔光镜模拟&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w23"&gt;包围曝光三合一&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td colspan="2" height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt; &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w24"&gt;严重白平衡错误校正&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w25"&gt;红饱和衰减&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w26"&gt;人像美容&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;               &lt;/tr&gt;               &lt;tr&gt;                  &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w27"&gt;IE魔术图&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w28"&gt;去红眼&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w29"&gt;影楼风格人像&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;                 &lt;td height="22"&gt;&lt;span style="color: rgb(153, 153, 153);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;¤&lt;/span&gt;                    &lt;a href="http://www.yourdigi.com/2005/neoimaging/index1.htm#w30"&gt;素描&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;官方地址: http://www.neoimaging.cn/&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-2562182410657722297?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/2562182410657722297/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=2562182410657722297' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/2562182410657722297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/2562182410657722297'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/neo-imaging.html' title='光影魔术手 nEO iMAGING'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-4301743783240326221</id><published>2007-03-07T12:58:00.000+08:00</published><updated>2007-03-08T22:00:54.127+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>七款嵌入式Linux操作系统简介</title><content type='html'>除了智能数字终端领域以外，Linux在移动计算平台、智能工业控制、金融业终端系统，甚至军事领域都有着广泛的应用前景。这些Linux被统称为“嵌入式Linux”。下面就来看看都有哪些嵌入式Linux在以上领域纵横驰骋吧！&lt;br /&gt;&lt;br /&gt;   RT-Linux&lt;br /&gt;&lt;br /&gt;这是由美国墨西哥理工学院开发的嵌入式Linux操作系统。到目前为止，RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特 技图像处理等广泛领域。RT-Linux开发者并没有针对实时操作系统的特性而重写Linux的内核，因为这样做的工作量非常大，而且要保证兼容性也非常 困难。为此，RT-Linux提出了精巧的内核，并把标准的Linux核心作为实时核心的一个进程，同用户的实时进程一起调度。这样对Linux内核的改 动非常小，并且充分利用了Linux下现有的丰富的软件资源。&lt;br /&gt;&lt;br /&gt;   uClinux&lt;br /&gt;&lt;br /&gt;uCLinux是Lineo公司的主打产品，同时也是开放源码的嵌入式Linux的典范之作。uCLinux主要是针对目标处理器没有存储管理单元MMU （Memory Management Unit）的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU，其多任务的实现需要一定技巧。uCLinux是一种优秀的嵌入式 Linux版本，是micro-Conrol-Linux的缩写。它秉承了标准Linux的优良特性， 经过各方面的小型化改造，形成了一个高度优化的、代码紧凑的嵌入式Linux。虽然它的体积很小，却仍然保留了Linux的大多数的优点：稳定、良好的移 植性、优秀的网络功能、对各种文件系统完备的支持和标准丰富的API。它专为嵌入式系统做了许多小型化的工作，目前已支持多款CPU。 其编译后目标文件可控制在几百KB数量级，并已经被成功地移植到很多平台上。&lt;br /&gt;&lt;br /&gt;   Embedix&lt;br /&gt;&lt;br /&gt;Embedix是由嵌入式Linux行业主要厂商之一Luneo推出的，是根据嵌入式应用系统的特点重新设计的Linux发行版本。Embedix提供了 超过25种的Linux系统服务，包括Web服务器等。系统需要最小8MB内存，3MB ROM或快速闪存。Embedix基于Linux 2.2内核，并已经成功地移植到了Intel x86和PowerPC处理器系列上。像其它的Linux版本一样，Embedix可以免费获得。Luneo还发布了另一个重要的软件产品，它可以让在 Windows CE上运行的程序能够在Embedix上运行。Luneo还将计划推出Embedix的开发调试工具包、基于图形界面的浏览器等。可以说，Embedix 是一种完整的嵌入式Linux解决方案。&lt;br /&gt;&lt;br /&gt;   XLinux&lt;br /&gt;&lt;br /&gt;XLinux是由美国网虎公司推出，主要开发者是陈盈豪。他在加盟网虎几个月后便开发出了基于XLinux的、号称是世界上最小的嵌入式Linux系统， 内核只有143KB，而且还在不断减小。XLinux核心采用了“超字元集”专利技术，让Linux核心不仅可能与标准字符集相容，还含盖了12个国家和 地区的字符集。因此，XLinux在推广Linux的国际应用方面有独特的优势。&lt;br /&gt;&lt;br /&gt;   PoketLinux&lt;br /&gt;&lt;br /&gt;PoketLinux由Agenda公司采用、作为其新产品“VR3 PDA”的嵌入式Linux操作系统。它可以提供跨操作系统构造统一的、标准化的和开放的信息通信基础结构，在此结构上实现端到端方案的完整平台。 PoketLinux资源框架开放，使普通的软件结构可以为所有用户提供一致的服务。PoketLinux平台使用户的视线从设备、平台和网络上移开，由 此引发了信息技术新时代的产生。在PoketLinux中，称之为用户化信息交换（CIE），也就是提供和访问为每个用户需求而定制的“主题”信息的能 力，而不管正在使用的设备是什么。&lt;br /&gt;&lt;br /&gt;   MidoriLinux&lt;br /&gt;&lt;br /&gt;由Transmeta公司推出的MidoriLinux操作系统代码开放，在GUN普通公共许可（GPL）下发布，可以在http: //midori.transmeta.com上立即获得。该公司有个名为“MidoriLinux计划”。“MidoriLinux”这个名字来源于日 本的“绿色”——Midori，用来反映其Linux操作系统的环保外观。&lt;br /&gt;&lt;br /&gt;   红旗嵌入式Linux&lt;br /&gt;&lt;br /&gt;由北京中科院红旗软件公司推出的嵌入式Linux是国内做得较好的一款嵌入式操作系统。目前，中科院计算所自行开发的开放源码的嵌入式操作系统—— Easy Embedded OS(EEOS)也已经开始进入实用阶段了。该款嵌入式操作系统重点支持p-Java。系统目标一方面是小型化，另一方面能重用Linux的驱动和其它模 块。由于有中科院计算所的强大科研力量做后盾，EEOS有望发展成为功能完善、稳定、可靠的国产嵌入式操作系统平台。&lt;br /&gt;&lt;br /&gt;   思考与展望&lt;br /&gt;&lt;br /&gt;   以上列举的众多嵌入式Linux操作系统中，国内对于uClinux和RT-Linux研究的较多，很多基于它们的产品已经面世，比如华恒公司已经把uClinux成功移植，并投放到市场。&lt;br /&gt;&lt;br /&gt;正是由于Linux开放源代码的特点，所以全世界的开发厂商都站在同一个起跑线上。国内的研究机构和企业也正在积极投入人力、物力，力争在嵌入式操作系统 上有所为。但应该清醒认识到，绝大多数的嵌入式系统的硬件平台还掌握在外国公司的手中。国产的嵌入式操作系统在技术含量、兼容性、市场运作模式等方面还有 很多工作要做。国家对嵌入式领域的发展也极为重视。信息产业部《2003年度电子发展基金项目指南》在软件类重点产品项目中，第五小类就是关于嵌入式软件 与系统开发的，并提出要重点进行如下重点项目的研制与开发：嵌入式实时操作系统、嵌入式软件集成开发平台和嵌入式数据库管理软件。由于嵌入式系统研发在国 内起步比较晚，我国目前还基本处于实验室阶段。但是嵌入式操作系统的巨大的商业价值和Linux的开放性，为民族软件产业的发展提供了难得的机会。在跟踪 国外嵌入式操作系统最新技术的同时，国内厂商要坚持自主产权，力争找到自己的突破点，探索出一条适合中国国情的嵌入式操作系统的发展道路。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-4301743783240326221?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/4301743783240326221/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=4301743783240326221' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4301743783240326221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4301743783240326221'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/linux.html' title='七款嵌入式Linux操作系统简介'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3543994798298433190</id><published>2007-03-07T04:47:00.000+08:00</published><updated>2008-11-15T16:05:59.479+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='city'/><title type='text'>重庆杨家坪</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://x.bbs.sina.com.cn/forum/pic/4c5247ee010394b6"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://x.bbs.sina.com.cn/forum/pic/4c5247ee010394b6" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ygzfEy9Te6k/Re3UQ2dVhhI/AAAAAAAAAL0/E4suCPDxQx8/s1600-h/attachment.jpeg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_ygzfEy9Te6k/Re3UQ2dVhhI/AAAAAAAAAL0/E4suCPDxQx8/s400/attachment.jpeg" alt="" id="BLOGGER_PHOTO_ID_5038916944059008530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Yangjiaping Chongqing, China...&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3543994798298433190?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3543994798298433190/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3543994798298433190' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3543994798298433190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3543994798298433190'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_07.html' title='重庆杨家坪'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ygzfEy9Te6k/Re3UQ2dVhhI/AAAAAAAAAL0/E4suCPDxQx8/s72-c/attachment.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3825150466431020339</id><published>2007-03-06T14:33:00.000+08:00</published><updated>2007-03-06T14:34:56.575+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>Hide Blogspot's navbar</title><content type='html'>&lt;p&gt;进入后台，在 &lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;Template-&gt;Edit HTML&lt;/span&gt; 中，将&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="color: rgb(153, 51, 0);"&gt;#navbar {&lt;br /&gt;width: 0px;&lt;br /&gt;height: 0px;&lt;br /&gt;}&lt;/blockquote&gt;添加到 &lt;span style="color: rgb(153, 51, 0);"&gt;/* Variable definitions ..... */&lt;/span&gt; 下面即可&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3825150466431020339?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3825150466431020339/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3825150466431020339' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3825150466431020339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3825150466431020339'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/hide-blogspots-navbar.html' title='Hide Blogspot&apos;s navbar'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3869346057717205365</id><published>2007-03-06T14:04:00.000+08:00</published><updated>2007-03-06T14:40:38.579+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>诺基亚的10个花絮事实</title><content type='html'>10. 诺基亚(Nokia)镇的名字来自流经当地的一条河流。这条河名为“Nokianvirta”，在芬兰古语种是黑貂的意思，这种动物现在已经绝迹。&lt;br /&gt;&lt;br /&gt;　　9. 诺基亚有时候被非诺基亚用户和移动软件开发人员称做“aikon”(就是把“Nokia”反过来写)，因为“aikon”被用在许多SDK软件包中，包括诺基亚自己的 的Symbian S60 SDK。&lt;br /&gt;&lt;br /&gt;　　8. 和其他手机不同，诺基亚的通话计时器不会在通话连接的时候自动开启，而是在通话开始的时候开启(除了S60系列手机，比如诺基亚6600)。&lt;br /&gt;&lt;br /&gt;　　7. 诺基亚名列《财富》2006年最受推崇企业第20名(网络通讯行业中的第1，非美国公司中的第4)。&lt;br /&gt;&lt;br /&gt;　　6. 在亚洲，数字4打头的手机从来没有出现在诺基亚手机，因为4在南亚和东亚的许多地区被认为是不吉利的。&lt;br /&gt;&lt;br /&gt;　　5. 诺基亚公司字体是AgfaMonotype Nokia Sans字体，最初由Eric Spiekermann设&lt;br /&gt;计。此前在广告和手机用户手册中，诺基亚最常用的是Agfa Rotis Sans字体。&lt;br /&gt;&lt;br /&gt;　　4. 诺基亚手机收到短信时的“特殊”铃声是摩斯密码的“SMS”(短信服务)，“渐强”短信铃声是摩斯密码的“Connecting People”(当时是翻译成“科技以人为本”来着吗？)，“标准”短信铃声是摩斯密码的“M”(代表“Message”，“信息”)。　　&lt;br /&gt;&lt;br /&gt;     3. 诺基亚现在是世界上最大的数码相机制造商，因为它的拍照手机销售量超过了任何一个相机厂商。&lt;br /&gt;&lt;br /&gt;　　2. 实际上第一个商用GSM通话是1991年在赫尔辛基通过诺基亚支持的网络打出的，打电话的人是芬兰副总理Harri Holkeri，用的是一个诺基亚手机。&lt;br /&gt;&lt;br /&gt;　　1. 诺基亚标志性的铃声"Nokia tune"实际上是改编自19世纪的吉他作品《Gran Vals》，作者是西班牙音乐家Francisco Tárrega。这个铃声在诺基亚手机中最早名为“Grande Valse”。在1998年，这支铃声已经广为人知并被称做“Nokia Tune”，诺基亚将其改名并沿用至今。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3869346057717205365?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3869346057717205365/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3869346057717205365' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3869346057717205365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3869346057717205365'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/10.html' title='诺基亚的10个花絮事实'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3113505972638940719</id><published>2007-03-05T21:04:00.000+08:00</published><updated>2007-03-05T21:48:02.403+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Email'/><title type='text'>How to read your Hotmail from Gmail</title><content type='html'>&lt;img src="http://lifehacker.com/assets/resources/2007/03/gmailIzz2.JPG" height="250" width="475" /&gt;&lt;br /&gt;终于你也开始使用Gmail了, 可出于某种原因你还得常检查Hotmail邮箱. Javed Mandary介绍了一个用Gmail接收Hotmail邮件的办法.&lt;br /&gt;大家都知道Hotmail不支持POP3. 不过Javed用&lt;a href="http://pop3hot.com/how.aspx"&gt;IzyMail&lt;/a&gt;实现了Hotmail POP3, 然后只要用Gmail Fetcher获取信息就可以了.&lt;br /&gt;&lt;br /&gt;原文: &lt;a href="http://javedmandary.blogspot.com/2007/03/reading-your-hotmail-email-directly.html"&gt;Reading your Hotmail email directly from Gmail&lt;/a&gt; [Javed Mandary :: Dodo Unleashed]&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3113505972638940719?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3113505972638940719/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3113505972638940719' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3113505972638940719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3113505972638940719'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/how-to-read-your-hotmail-from-gmail.html' title='How to read your Hotmail from Gmail'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7681446139093173775</id><published>2007-03-04T14:58:00.000+08:00</published><updated>2007-04-15T17:04:13.473+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kuso'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>中国版《惊声尖笑》——《大电影之数百亿》: Scary Movie v.s. Big Movie</title><content type='html'>Scary Movie已经出到4了，这个系列主要是恶搞恐怖片，而中国版的则是恶搞近年第X代导演们的"国产大片"。&lt;br /&gt;编剧宁财神和阿甘,导演阿甘;演员也是喜剧路线的演员，像是郭芙蓉--姚晨,黑皮--黄渤,曾志伟就不说了。&lt;br /&gt;&lt;br /&gt;就像Scary Movie, Big Movie恶搞了很多其他电影,可以去数数看.不像Scary Movie的是Big Movie还想表达自己的主题.&lt;br /&gt;既要轻松搞笑又要加入自己的观点,而且是宁财神写的第一部电影?这样下来确实不好组织,最后拍出来的效果就仁着见仁了,不过要达到《疯狂石头》那样既叫好又叫座是不太现实了。最失败的可能要算生插进去的讽刺其他电影的部分了，而且全片开头就是...对情节起的作用很少...&lt;br /&gt;(这篇文章和我观点相似:http://dieseldeng.spaces.live.com/Blog/cns!74D89289F8EA7E5B!1787.entry)&lt;br /&gt;&lt;br /&gt;总得来说星期二去影院看看还行，如果全篇都如片尾那段恶搞那么制作细致，并且编剧连接过渡多学点Scary Movie，成熟点，那么其他时间去看也是值得的(其实Scary Movie在IMDB里评分也不怎样)。 或者你就从电影里恶搞的一段字幕那样的渠道去看吧。不得不说这个有争议的恶搞很有意思。&lt;br /&gt;&lt;br /&gt;最后来点搞笑台词(声音效果不好,听不确切)：&lt;br /&gt;&lt;br /&gt;第一段:&lt;br /&gt;&lt;br /&gt;跑什么跑，前面出什么事了？是不是打起来了？&lt;br /&gt;打你个头啊，温州人来啦！&lt;br /&gt;温州人来了？喂，温州人怎么了？&lt;br /&gt;温州人打架，把头都打爆了~&lt;br /&gt;打爆了！？&lt;br /&gt;爆头了？温州人发飚一枪爆头啦！&lt;br /&gt;啊，爆头了？温州人打CS，小手枪单挑MP5了！&lt;br /&gt;MP4，温州人5折倾销MP4！跳楼吐血大甩卖啦！&lt;br /&gt;温州人炒房失败了，跳楼自杀满地是血脑浆流了一地啊~~&lt;br /&gt;温州鞋给烧了~~&lt;br /&gt;&lt;br /&gt;有没有搞错啊，造谣也要讲诚信嘛！用的着这么离谱吗？！&lt;br /&gt;&lt;br /&gt;第二段:&lt;br /&gt;&lt;br /&gt;主持人兴奋的吼叫着：&lt;br /&gt;&lt;br /&gt;打架了，打架了，打架了&lt;br /&gt;房地产商动粗了，不再给房奴任何机会，伟大的销售人员，他们继承了无商不奸的光荣传统，实力雄厚的开发商和炒房团，内定的物业公司，收了红包的经济学家和媒体的枪手，在这一刻灵魂附体，潘志强一个人，他代表了，黑心房地产商的光荣传统，在这个时刻，他不是一个人在战斗！&lt;br /&gt;　　&lt;br /&gt;安德森，安德森面对这套烂到家的房子，面对全世界所有房奴的目光和期待，你怎么可以获胜，无论时局如何变化，房价是跌是涨，最后的胜利永远，属于那些缺了大德的地产商，属于不作为的物业公司，属于良心喂了拉布拉多的经济学家，属于所有躺在家理，闭着眼睛就想挣大钱的兄弟姐妹！&lt;br /&gt;&lt;br /&gt;再来一段:&lt;br /&gt;&lt;br /&gt;黑皮: 为了我和小怡的幸福,你必须死!&lt;br /&gt;曾志伟: 为了展现男儿的尊严,你必须死!&lt;br /&gt;黑皮: 为了地球的生存环境,你必须死!&lt;br /&gt;曾志伟: 为了火星的移民计划,你必须死!&lt;br /&gt;黑皮: 为了国产电影的片头广告,可以快速跳进,你必须死!&lt;br /&gt;曾志伟: 为了1区DTS带花絮全程导演评论音轨,你必须死!&lt;br /&gt;黑皮: 为了打击盗版,你必须死!&lt;br /&gt;曾志伟: 为海外发行,你必须死!&lt;br /&gt;黑皮: 为了投资人邓先生,你必须死!&lt;br /&gt;曾志伟: 为金狮银熊,你必须死~~~恩~!&lt;br /&gt;黑皮: 为了柏林嘎纳...&lt;br /&gt;曾志伟: 哎哟~为了奥斯卡~,啊. 奥斯卡我看是没戏了.为了我们这个戏今天一定能够杀青,你必须死!&lt;br /&gt;黑皮: 为了这个影片能够公映,你必须死!&lt;br /&gt;......&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7681446139093173775?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7681446139093173775/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7681446139093173775' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7681446139093173775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7681446139093173775'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/scary-movie-vs-big-movie.html' title='中国版《惊声尖笑》——《大电影之数百亿》: Scary Movie v.s. Big Movie'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-5313255001330031393</id><published>2007-03-04T06:12:00.000+08:00</published><updated>2007-03-04T06:27:16.316+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='cartoon'/><title type='text'>Funny White Bear</title><content type='html'>&lt;embed src="http://www.myvideo.de/movie/76489" width="425" height="367" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;embed src="http://images.soapbox.msn.com/flash/soapbox1_1.swf" quality="high" width="412" height="362" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://macromedia.com/go/getflashplayer" flashvars="c=v&amp;v=932c935e-45af-4cad-80ef-e0e5c5ab62d3" &gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-5313255001330031393?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/5313255001330031393/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=5313255001330031393' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5313255001330031393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5313255001330031393'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/funny-white-bear.html' title='Funny White Bear'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-5564015742714163520</id><published>2007-03-03T17:32:00.000+08:00</published><updated>2007-03-06T22:41:55.247+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>Blogger的限制</title><content type='html'>http://help.blogger.com/bin/answer.py?answer=42348&amp;topic=8915&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;strong&gt;我的 Blogger 帐户有什么限制吗？&lt;/strong&gt;&lt;/h2&gt; &lt;p&gt;我们尽量给您更多的空间让您在 Blogger 中畅游，因此，您会发现这里许多重要的"限制"其实并没有真正限制什么。但是，如果您想知道，以下是关于单个 Blogger 帐户应保留的信息。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Blog 的数量：&lt;/strong&gt;在一个帐户中，你可以有任意多的 Blog。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;帖子数：&lt;/strong&gt;在一个 Blog 上，对您可以发布的帖子数量没有限制。无论您正在发布什么样的帖子（存档或未存档），它们都将被保存在您的帐户中（除非您手动删除它们）。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;帖子大小：&lt;/strong&gt;单个帖子没有指定的大小限制，但是过大的帖子可能会与页面限制大小相抵触。（查看下一项。）&lt;/p&gt; &lt;p&gt;&lt;strong&gt;页面大小：&lt;/strong&gt;单个页面（Blog 的主页面或是存档页面）最大为 1MB。这一限制对于一个几百页的文字还可以实行，但如果在 Blog 的首页列出数十万帖子，恐怕就是个问题了。如果您超过这一限制，您将看到一个错误信息"006 请联系 Blogger 支持"。您可以通过&lt;a href="http://help.blogger.com/bin/answer.py?answer=77"&gt;在您的主页上减少帖子数量&lt;/a&gt;来解决此问题，这样做也可以加快页面加载的速度，从而增添了另一好处。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;评论数量：&lt;/strong&gt;一个帖子可以有无数评论。和存档帖子一样，即使您选择隐藏 Blog 上的评论，所有以前出现的评论仍将保存在您的帐户中。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;图片数：&lt;/strong&gt;如果您正通过 Hello 张贴图片到免费的 BlogSpot Blog，那么将没有限制。如果您将它们张贴到以 FTP 发布的 Blog 上，那么服务器的可用空间大小就会受到限制。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;图片大小：&lt;/strong&gt;如果您正通过移动 Blogger 张贴图片，每张图片最大不能超过 250K。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;团队成员：&lt;/strong&gt;对于每个 Blog，成员或管理员数量是没有限制的。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Blog 说明：&lt;/strong&gt;仅限 500 个字符，&lt;span style="color: rgb(255, 0, 0);"&gt;不能使用 HTML&lt;/span&gt;。附加字符或 HTML 可能会导致它恢复原有设置。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;"我的简介"个人资料信息：&lt;/strong&gt;最多 1200 个字符。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;个人资料中的兴趣和爱好：&lt;/strong&gt;最多 20 项，每项最多 60 个字符。&lt;/p&gt;&lt;hr /&gt;&lt;br /&gt;也不是完全不能用Html.&lt;br /&gt;Blogger和LiveSpace一样,对Html有很多限制,只能用一些基本的标记.连&lt;hr /&gt;水平分割线都不能用,实在太受限制了.&lt;br /&gt;要加入一些多媒体内容就没戏了.好在图片不受什么限制.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;Edit:看了模板的CSS,发现&lt;hr /&gt;水平线不能显示是在模板里写了hr {display:none;},去掉就可以了.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-5564015742714163520?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/5564015742714163520/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=5564015742714163520' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5564015742714163520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/5564015742714163520'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blogger.html' title='Blogger的限制'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6916605748269970807</id><published>2007-03-03T15:26:00.000+08:00</published><updated>2007-03-18T09:33:58.089+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>用Windows自带的画图程序你能画什么?</title><content type='html'>有人用Windows画图画了个一般大家用Photoshop,Illustrator,Painter,CorelDraw等等专业软件才能画出的效果.&lt;br /&gt;没图没真相,不是图,是两段视频:&lt;br /&gt;&lt;a style="left: 0px ! important; top: 15px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/eFV9-RuVYRU"&gt;&lt;/a&gt;&lt;br /&gt;&lt;embed src="http://www.youtube.com/v/eFV9-RuVYRU" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/ElrldD02if0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;embed src="http://www.youtube.com/v/ElrldD02if0" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6916605748269970807?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6916605748269970807/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6916605748269970807' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6916605748269970807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6916605748269970807'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/windows.html' title='用Windows自带的画图程序你能画什么?'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7535596625337057683</id><published>2007-03-03T06:31:00.000+08:00</published><updated>2008-11-15T16:05:59.938+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><title type='text'>Villa Hügel</title><content type='html'>晴朗多云，天像被打了粉底，光线被抹的均匀淡柔。很快来到了Villa Hügel，据宝简单介绍，此别墅本是德国克虏伯（Krupp）大家族的官邸。克虏伯是德国统一前最后一个割据皇帝，而后这个家族和希特勒关系不错，在二战时期作军火生意发了家。后来家产被捐出，毕竟是不义之财。而官邸也就是这栋别墅现成了博物馆，象征性征收门票1欧。&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.villahuegel.de/images/villa1.jpg" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;这个别墅规模相当大，囊括了一座小山，公路盘旋到上面，停车场前面就是克虏伯的铜像。别墅就坐落在半山位置。这白色长房体建筑外表朴素，并无多少雕花装饰，如要继续端详，从墙壁色泽来看古旧程度，像40多岁女人，此外有嚼冰块的感觉。走进去，别墅分两层，地板，油画，橱柜，桌椅，壁炉，吊灯，壁灯，镂花屋顶，螺旋木梯，三角钢琴，大理石门，谈不上奢华，但庄重大气，容不下半点轻浮。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_j3vTtarNSys/RewJN1VymiI/AAAAAAAABZI/Zhg-qI1iThQ/s1600-h/60.%E7%9B%B4%E6%A0%91%E5%8F%82%E5%A4%A9.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_j3vTtarNSys/RewJN1VymiI/AAAAAAAABZI/Zhg-qI1iThQ/s320/60.%E7%9B%B4%E6%A0%91%E5%8F%82%E5%A4%A9.JPG" alt="" id="BLOGGER_PHOTO_ID_5038412216382167586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j3vTtarNSys/RewIeFVymhI/AAAAAAAABZA/efawAFX8re4/s1600-h/63.%E9%9B%85%E8%87%B4%E4%B9%8B%E7%AC%94.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_j3vTtarNSys/RewIeFVymhI/AAAAAAAABZA/efawAFX8re4/s320/63.%E9%9B%85%E8%87%B4%E4%B9%8B%E7%AC%94.JPG" alt="" id="BLOGGER_PHOTO_ID_5038411396043414034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;决定四下溜溜，外面还有几处未对外开放的克虏伯家族的的宅第。我们找到了那个低头吃草的铁铸大黑马。条条山路像一锅面倒在地上，错综曲折，剩下的全是植被。以别墅为中心越往周围树林越深幽，粗木参天，有皱巴巴裙带寄生的，有光溜溜笔直耸立的；杂草遍地，灌木夹道，簇簇花丛信手点缀，沟坡起伏，间或茅屋凉亭；下面挤挤挨挨，上面勾肩搭背，仰望斑斑掏挖出的天空，有被包于林中的感觉。四人游走不在话下。&lt;br /&gt;出来右手就是紧挨着的希腊餐馆，露天用餐后Baldeney湖边漫步。正赶上国际皮艇水球锦标赛（Int. Kanupolo Tunier），沿湖划分出十余块赛场，也算拼得紧张刺激，德国队挺出彩。岸边有看台，人流自行车滑轮穿梭热闹。见球员们的扎营区，各色帐篷，还见一布吊床。一救生狗在主人命令下积极训练。首次看到德国水坝等等。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7535596625337057683?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7535596625337057683/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7535596625337057683' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7535596625337057683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7535596625337057683'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/villa-hgel.html' title='Villa Hügel'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_j3vTtarNSys/RewJN1VymiI/AAAAAAAABZI/Zhg-qI1iThQ/s72-c/60.%E7%9B%B4%E6%A0%91%E5%8F%82%E5%A4%A9.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-8992989060280716361</id><published>2007-03-03T06:01:00.000+08:00</published><updated>2007-03-05T19:45:27.253+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><title type='text'>The Story of a Begger</title><content type='html'>车等来时发现自己衣服忘拿了，眼巴巴错过一班车。我说不管是你错过了飞机、火车还是汽车，感觉都是一样沮丧。如果你要坐飞机去伦敦参加一个重要会议，一个乞丐拉住你跟你拉家常，你发现这个乞丐与众不同，于是聊了起来，当然你不会因为跟他聊得投机而忘了按时登机，况且还有广播提示。这乞丐有什么办法能让我心甘情愿去错过这班飞机并沮丧呢？&lt;br /&gt;他告诉我他提前在飞机里配好了液体炸弹，我这才仔细打量他，这乞丐到并不邋遢，当然也不至于干净，灰尘覆盖度大概相当于工厂里干了一天活的工人，但他和工人的区别是你一眼就能看出来他是个乞丐，这种人的眼睛一直在漫无目的地搜寻着什么，在他看来，周围走动的人是一群动物也未尝不可，由于长时间对外界的漠不关心，他的眼球已不再聚焦，而是成片成片得看东西。而当这眼球十分靠近你时，你倒是会被吸引，你会想象那里长时间不打扫而落满了灰结满了网，可从某一角度看它毕竟还有一丝光亮，这光亮在你好奇地转动角度时变得更明显，你不得不去猜想，假如花心思去刨开这东西，然后打磨出五十七个面，镶成在戒指里会是什么效果。&lt;br /&gt;我不知道他为什么找我攀谈，但凡事都不是完全无原因的。昆虫为什么会被蜘蛛网网住？随机倒霉。不全是，据说蜘蛛网会发出种射线，这种射线会吸引昆虫。就是说我身上有这么种射线，对他来说。我嗅了嗅自己，今天喷了香水，气味不可能。尽管自己衣冠也不大整洁，但还不至于令人不满。我再一低头，原来手里托着半袋黄油牛奶面包，算是早餐随便垫下肚子。登机前我没什么胃口，看着窗外细嚼慢咽的雨，总觉得吃了蘸了雨水的面包。我正要往包里收起这半袋面包时，他过来了。啊，这么回事。&lt;br /&gt;他看看我，然后眼球往下微挪，这表明他视线移向了我手里。他嘴里蠕动了两下，不知道他在说什么，他似乎也没打算要对我说什么，那就是对面包说的。我是个神秘的托架，上面放着这半袋面包，我猜他这么看我，他在努力回想什么，思考如何取这块面包，由于某种古老的原因，随便动这面包可能会触动机关而有生命危险。我坐在候机椅上，他就站在我面前，这么相持了十秒。我心里的发条一震，停止了早上到现在持续的漫不经心。我把面包递给了他，倒不是出于同情，我只是觉得每个人都有吃饱肚子的权力，如果你饿极了就去抢好了，至少我会这么做。他仪式般的缓缓接过面包，微微点点头，不知道算不算谢我，其实就是他什么也不表示我也没觉不妥。你跟人打招呼是不是也同样期待对方的回应？跟人道谢，也有愿意听到对方慷慨回应的倾向？我倒希望这乞丐保持那独特的漠视一切的气质。他在我旁边坐下开始细嚼慢咽起这面包，我开始觉得这候机室也在下雨了。其实他很饿，从咀嚼的幅度可以看出来，但他还是吃得那么从容，也许他已习惯长期忍受饥饿，并不急于摆脱它。&lt;br /&gt;他吃完了，像是恢复了神智，跟我聊了起来，我也突然觉得他成了个普通人，那种独特的乞丐气质也消失了。当时聊了什么印象全无，只记得他说了炸弹的事。上厕所回来时他已不在了，我总觉得他是凭空消失的。我突然开始怀疑刚才是否碰到这么一乞丐，是否有过谈话。面包可能是我自己吃掉的。我后来没登机。&lt;br /&gt;等了半小时下一班夜车才来，看到打常班的同事也下班了来坐车了，问我怎么还在这，然后有说有笑不提。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-8992989060280716361?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/8992989060280716361/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=8992989060280716361' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8992989060280716361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/8992989060280716361'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/story-of-begger.html' title='The Story of a Begger'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-7197099084228496784</id><published>2007-03-02T18:35:00.000+08:00</published><updated>2007-03-05T19:32:24.503+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Ottmar Liebert 《Nouveau Flamenco 新佛朗明哥》</title><content type='html'>最近听了这张ＣＤ，第一次听在众多ＣＤ中还是有点特别，再听就喜欢上了。&lt;br /&gt;&lt;br /&gt;佛朗明哥是西班牙传统艺术形式，音乐伴舞？吉他是重要乐器。看去过西半牙的人说是要晚上十点钟才开始？吉他音量小晚上才发力？白天太热，晚上才出来乘凉娱乐？欢迎对佛朗明哥感兴趣或了解的看官留言。&lt;br /&gt;&lt;br /&gt;拉丁音乐很热情奔放的（和他们的气候有关？），当你处于某些情绪，或者正在做一些需要inspire和热情的事情的时候，听这张专辑再合适不过了。&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------&lt;br /&gt;&lt;br /&gt;简介：&lt;br /&gt;原CD HIGHER OCTAVE 1990年出品。此碟为现代吉他高手Ottmar Liebert的佛朗明哥音乐专集，原CD名为：Nouveau Flamenco。“Nouveau‘是”新“的意思。&lt;br /&gt;新世紀音樂的吉他手OTTMAR LIEBERT自1990年出道到現在，每一張作品除了是BILLBOARD雜誌NEW AGE榜上的常勝軍長年盤據榜上不下，並跨越至流行榜上外，也始終是樂評們一致推崇的最佳藝人及專輯。&lt;br /&gt;OTTMAR 集中、德、匈牙利血統於一身，11歲便於吉他結緣，18歲完成正統古典吉他學業之后，便展開其浪跡天涯的音樂之旅，足跡遍及歐、亞及美洲各地，先後加入JAZZ.FUNK.POP.POPROCK等風格的樂團，接受各種文化衝擊與音樂薰陶。如此豐富的血統與閱歷，交融結合而成一個才華洋溢的OTTMAR及其獨特珍貴的音樂風格。&lt;br /&gt;從其音樂中，除了可感受到來自於JAZZ' BLUES'POP及古典等音樂的影響，亦自然流露出西班牙、德國及中國的傳統音樂氣息。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nouveau Flamenco  Ottmar Liebert&lt;br /&gt;&lt;br /&gt;Album Details:&lt;br /&gt;Release Date: May 7 1990&lt;br /&gt;Total Running Time: 50:05 &lt;br /&gt;Label: HIGHER OCTAVE&lt;br /&gt;Catalog No.: 77520 &lt;br /&gt;&lt;br /&gt; 1.   Barcelona Nights 4:02&lt;br /&gt; 2.   Heart Still/Beating 4:06&lt;br /&gt; 3.   3 Women Walking 4:21&lt;br /&gt; 4.   2 the Night (Fast Cars/4 Frank) 4:19&lt;br /&gt; 5.   Passing Storm 3:54&lt;br /&gt; 6.   Santa Fe 4:17&lt;br /&gt; 7.   Surrender 2 Love 4:29&lt;br /&gt; 8.   Waiting 4 Stars 2 Fall 4:54&lt;br /&gt; 9.   Road 2 Her Home 4:14&lt;br /&gt;10.   After the Rain 3:16&lt;br /&gt;11.   Flowers of Romance 3:13&lt;br /&gt;12.   Moon over Trees 1:46&lt;br /&gt;13.   Shadows 3:14&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-7197099084228496784?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/7197099084228496784/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=7197099084228496784' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7197099084228496784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/7197099084228496784'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/ottmar-liebert-nouveau-flamenco.html' title='Ottmar Liebert 《Nouveau Flamenco 新佛朗明哥》'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6216895012310150668</id><published>2007-03-02T18:18:00.000+08:00</published><updated>2007-03-18T09:35:10.335+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>很Cool的吸烟室屋顶</title><content type='html'>&lt;img src="http://japanese.engadget.com/images/2006/06/coolceiling.jpg"&gt;&lt;br /&gt;&lt;p / &gt;&lt;br /&gt;在里边吸烟还是有点压力吧~呵呵&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6216895012310150668?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6216895012310150668/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6216895012310150668' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6216895012310150668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6216895012310150668'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/cool.html' title='很Cool的吸烟室屋顶'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-3425547272316517075</id><published>2007-03-02T18:01:00.000+08:00</published><updated>2007-03-18T15:26:42.249+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Earth 里的有趣坐标</title><content type='html'>虽然出现在网上有段时间了,这里还是转贴复习一下.图就不贴了,把坐标复制到Google Earth或者Google,MSN,Yahoo的Maps里慢慢看吧.&lt;br /&gt;&lt;br /&gt;94.32319167E,42.54462222N&lt;br /&gt;94.243125E,42.46101389N&lt;br /&gt;94.14704444E,42.45335556N&lt;br /&gt;94.26648611E,42.65985833N&lt;br /&gt;94.17217222E,42.655625N&lt;br /&gt;99.69783333E,27.86808444N&lt;br /&gt;37°14'18.05"N115°48'52.17"W 51区&lt;br /&gt;37°38'44.05"N115°48'6.40"W 被涂抹的地方 其他一些好玩的东西&lt;br /&gt;41°13'07.74"N 112°01'37.90"W 一个农田上的画&lt;br /&gt;13°35'42.03N 20°00'23.40E 一个莫名其妙的地方，周围都模模糊糊，就这里超级清楚 53°31'55.63"N 1°21'25.19"W 麦田怪圈&lt;br /&gt;29°58'33N 31°07'50E 金字塔&lt;br /&gt;41°53'24N 12°29'31E 罗马圆形决斗场&lt;br /&gt;27 58'41.20''N,86 55'18.31''E 珠穆朗玛峰&lt;br /&gt;29°58'33.82"N 31° 8'13.62"E 狮身人面像和胡夫金字塔&lt;br /&gt;48°51'28''N,10°12'18''E 一个非常巨大昆虫实体，不知道是怎么回事&lt;br /&gt;中国的标语&lt;br /&gt;42°39'33.78"N, 94°15'59.20"E 只争朝夕&lt;br /&gt;27°51'29.88"N, 99°43'13.73"E 香格里拉&lt;br /&gt;42 27'12.08"n,94 08'49.36"e 排除万难去争取胜利&lt;br /&gt;42 27'40.95"n,94 14'36.80"e 向斗争中学习&lt;br /&gt;42 32'33.95"n,94 19'36.80"e 为人民服务&lt;br /&gt;42 39'18.85"n,94 10'00.80"e 毛主席万岁&lt;br /&gt;99.69783333E,27.86808444N 香格里拉-松赞林寺(经文)&lt;br /&gt;32.76685200/96.98219800 NOKIA Theatre&lt;br /&gt;53 31'54.33N,1 21'22.63W 麦田怪圈&lt;br /&gt;14°41'11.61"S,75°10'23.26"W Nazca lines 秘鲁神秘巨型地表图案&lt;br /&gt;51°52'17.78"N,0°34'0.13"W Nazca lines 秘鲁神秘巨型地表图案&lt;br /&gt;37°39'56.22"N116° 1'30.90"W 大三角图案&lt;br /&gt;37°50'38.81"N116°43'53.01"W 核设施??&lt;br /&gt;40.09505600/128.34080800 北韩核反应堆&lt;br /&gt;47.62778500/-122.24189100 比尔盖茨豪宅&lt;br /&gt;22°57'5.72"S,43°12'36.65"W 里约热内卢-耶稣山&lt;br /&gt;37°58'18.87"N,23°43'32.81"E 雅典-卫城&lt;br /&gt;35°15'7.56"N,139° 9'12.81"E 宛如龟甲-小田原城&lt;br /&gt;34°41'16.16"N,135°31'29.36"E 丰臣秀吉-大阪城&lt;br /&gt;3° 3'53.24"S,37°20'56.85"E 赤道雪-乞力马扎罗&lt;br /&gt;40°45'52.01"N 74° 0'1.23"W 黑鸟战机+航母+潜艇+战舰&lt;br /&gt;51°10'44.32"N,1°49'43.38"W 英国的巨石阵&lt;br /&gt;13° 09'48.07"S,72°32'44.69"W 印加遗迹:马丘比丘&lt;br /&gt;34°08'02.97"N,118°19'17.94"W Hollywood Hills&lt;br /&gt;25°55'46.42"N 80° 7'49.58"W 断桥&lt;br /&gt;49°16'35.34"N 123° 6'17.00"W 马戏团1&lt;br /&gt;45°30'26.40"N 73°32'52.94"W 马戏团2&lt;br /&gt;32°40'33.99"N117° 9'27.87"W 卐标志&lt;br /&gt;41°49'10.99"N 86°12'12.60"E 有大字标语的水库，位于新疆库尔勒市郊.附近还有一个空军基地.&lt;br /&gt;Davis Monthan AFB 戴维斯空军基地&lt;br /&gt;32.165978,-110.854884 慕尼黑安联体育场（开幕式）&lt;br /&gt;48.219147789,11.6263784774 柏林奥林匹克体育场（决赛）&lt;br /&gt;52.5133561136,13.2398110056 汉诺威AWD竞技场&lt;br /&gt;52.3599290703,9.73288538378 汉堡世界杯体育场&lt;br /&gt;53.5869222364,9.9012440719 多特蒙德维斯特法伦体育场&lt;br /&gt;51.4927357971,7.45381528043 盖尔森基奥夫沙尔克竞技场&lt;br /&gt;51.5537521117,7.06907863308 凯泽斯劳滕沃尔特体育场&lt;br /&gt;49.4337693907,7.77715096552 纽伦堡法兰克人体育场&lt;br /&gt;49.4259497861,11.1241851189 斯图加特戈特利布戴姆勒体育场&lt;br /&gt;48.7931489667,9.23328332718 莱比锡中央体育场（改建前）&lt;br /&gt;51.3464198348,12.3509946539 法兰克福森林体育场（改建前）&lt;br /&gt;50.0696330234,8.64661484093 科隆联合电力体育场（改建前）&lt;br /&gt;50.9334895375,6.87657386777&lt;br /&gt;25.006753 54.990356&lt;br /&gt;25.118512 55.133180 以上两个是棕榈树岛&lt;br /&gt;25.219119 55.162449 这个是地球村，人工岛组成一个世界地图的形状&lt;br /&gt;25.141085 55.185426 这个就是7星级饭店&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-3425547272316517075?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/3425547272316517075/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=3425547272316517075' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3425547272316517075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/3425547272316517075'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/google-earth.html' title='Google Earth 里的有趣坐标'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-6987244134004567621</id><published>2007-03-02T17:57:00.000+08:00</published><updated>2007-03-05T19:27:39.511+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><title type='text'>一千种开啤酒瓶的办法</title><content type='html'>http://stuff.twoday.net/ 很有意思,里边各种花样开啤酒瓶的办法,就是没有用开瓶器的.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-6987244134004567621?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/6987244134004567621/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=6987244134004567621' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6987244134004567621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/6987244134004567621'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_6827.html' title='一千种开啤酒瓶的办法'/><author><name>jayesoui</name><uri>http://www.blogger.com/profile/04406655611258211349</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-4922680730386413136</id><published>2007-03-02T05:35:00.001+08:00</published><updated>2007-03-05T19:27:17.170+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='original'/><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><title type='text'>Get Back (Chapter 1)</title><content type='html'>这里是中央图书馆，它内部结构之复杂不亚于一个机械表。总之我就是被一个孩子领到这里，他恳求我帮助他寻找一样东西。&lt;br /&gt;我只记得那东西在很高的地方，孩子肯定的对我说。&lt;br /&gt;我和他孤零零站在圆形大厅中央，这图书馆人很多，较嘈杂。环视了一圈，再抬头仰望竟不见顶，着实高。&lt;br /&gt;我们乘电梯吧，我有点迷茫。&lt;br /&gt;我放开孩子的手，顺着大厅边缘找电梯入口，竟没有。那孩子早不在我身边，竟自走到了大厅一侧的信息柜台。对啊，问问怎么上去。我拍了下脑袋，朝那方向走去。&lt;br /&gt;孩子说，我有种快捷的方法可以上去。&lt;br /&gt;你怎么不早说？！&lt;br /&gt;他吐吐舌头。&lt;br /&gt;我跟那柜台的工作人员点点头，说明了来意。S.先生，他胸前标签这么写，冲我简短地微笑了下，也许那跟氧化了的橡胶皮似的眼角经不起长时间的挤压，显然孩子已经把事说清楚了。他不紧不慢往电脑里键入了点东西，然后把液晶屏转过来，“准备好了么？” 孩子深吸口气，点点头。&lt;br /&gt;S敲下回车键，孩子立刻紧张地往电脑里敲东西。我注意到屏幕上在倒计时，只有三分钟。我在旁边屏息凝视，没多问什么。&lt;br /&gt;一分钟多后就有结果了。聪明的孩子总是讨人喜欢的，S看了眼孩子，此时也未能掩饰嘴角的一丝舒展。&lt;br /&gt;“8号门，流程表单请在那取，祝你好运！”语气里的温和给得很勉强。&lt;br /&gt;我这才留意到大厅周边标号的门。我和孩子道谢后径直向8号门走去。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-4922680730386413136?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/4922680730386413136/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=4922680730386413136' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4922680730386413136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4922680730386413136'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/get-back-chapter-1.html' title='Get Back (Chapter 1)'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-4667093722466164440</id><published>2007-03-02T05:32:00.001+08:00</published><updated>2007-03-05T19:26:35.988+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>Das Parfüm</title><content type='html'>一个嗅觉比狗还灵的男人，一个天生的香水调配师，为制作他心目中完美的香水而杀害了不计其数的处女，包括修女，香水制成的时候也是他被几十把毛色枪顶入死牢的时候。可香水最终征服了所有人，杀人犯穿戴华丽，在狱卒前呼后拥下乘马车来到了刑场，即将处决他的刽子手也跪下为他说情，甚至死者的父亲还要认他做儿子，香水激起的情欲把满广场围观着叫嚣要把杀人犯凌迟的群众送入幻境，接着他们开始集体云雨，连主持行刑的主教也痛快失身。这段我不喜欢。&lt;br /&gt;总得来说还不错，结局没猜到，主角没死在刽子手的棒下，他本来可以和教皇商量换人选，让各国王宫贵族轻吻他的鞋子，让全世界的人为他倾倒，然而这万能的香水只有一件事实现不了，他不再会爱，也不可能得到他当初心仪的却不幸丧生在他手下的少女的爱，绝望的他觉得这世界没什么好留恋，这个被呼唤为天使的杀人犯选择回到了他从前被母亲遗弃的巴黎那个鱼市。。。他把剩下的香水全部倾倒在自己身上，结果被疯狂的人群掩埋，人们满意散去时除了天使的衣服和鞋子什么都没留下。最后镜头拉近到那个丢在鱼市中央土地上的空香水瓶，随着瓶口最后一滴暗褐色香水落入土里，字幕已迫不及待地往上滚了，留下的是无限遐想，挺荒谬的，但还是一部可看的电影。&lt;br /&gt;还有观看到后面心里希望男主角成功杀害最后一个女人，完成他的杰作。觉得自己有点残忍。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-4667093722466164440?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/4667093722466164440/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=4667093722466164440' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4667093722466164440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4667093722466164440'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/das-parfm.html' title='Das Parfüm'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-553184153242910006</id><published>2007-03-02T05:24:00.000+08:00</published><updated>2007-03-05T19:20:52.753+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='city'/><title type='text'>Little Town</title><content type='html'>帮朋友搬家，在这么好的天给了我个外出的借口。此朋友住明斯特边远小镇，坐公交也要一节课。他家没去过几次，而且是晚上，所以对那地带生得很，如果说城市到夜晚才点亮她的妩媚，小镇却只白天能让人浏览她的身段。犯了致命错误，手机忘带，之前也没问好，主要去他家的站名还记得的，就是说靠他接是不可能了，得自己摸去。房子越来越稀，路越来越窄，看见了麦田，感觉似在火车上，觉得前一站地形好像有点熟悉，就印象不是朋友家那站名，开始怀疑自己是不是记错了站，开始心理斗争，下车折回去还是继续坐，记忆压倒了印象，没时间犹豫，坐下去。还是有点心虚，这是跨区域车，我怕坐得太远。终于到站了，"从前的邮局"这站叫。应该是朋友住的小镇。光天化日下，我竟无从下足，有那么一瞬我开始怀疑自己出来干嘛来了。时间也不早了，本来约9点，前面一药店门口悬挂的时钟已10 点半了。抬头瞅见教堂尖顶，这是镇中心的标志。突然有个想法，既然来了不管怎样溜达下小镇，时间差不多折回家，再给朋友电话，so nah und doch so fern(这么相近，却又如此遥远)，不甘心也没办法。小镇吸引了我，整洁干净，红砖墙是典型德国小镇的建筑材料，教堂周围是文文静静的商店和不紧不慢的微笑的镇民，然后是绿化，修剪讲究的植木，有花，不显眼，但必须，算是往绿的甜腻里撒点盐。这里的生活挺有质量，服装店里的衣服就很考究，其实店主在店面的布置上花了更多的心思，其他店都是如此。有露天市场，摆满了新鲜的水果蔬菜，看老人们买东西时跟摊主细碎聊天你也会放松心情。&lt;br /&gt;小镇里漫步时我开始有目的的往车站那边靠，记起去朋友家的那条长径，我慢悠悠走到尽头，惊奇地发现正是那长径，鬼使神差我找着了朋友家。后来才发现，离车站很近，不过被一排树掩着了。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-553184153242910006?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/553184153242910006/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=553184153242910006' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/553184153242910006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/553184153242910006'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/little-town.html' title='Little Town'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-4623887148530257866</id><published>2007-03-02T05:21:00.000+08:00</published><updated>2008-11-15T16:06:00.523+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='city'/><title type='text'>One Day in Hamburg</title><content type='html'>应该算是汉堡一日一夜游。天气还是不错的。&lt;br /&gt;&lt;br /&gt;白天逛就懒得多说什么了，汉堡这城市我想象中如白切面包一样单调。事实相反，古雅与时尚并存，繁华里揣着闲适，另外够大，百万富翁云集。生平第一次和法拉利合影。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j3vTtarNSys/RewN4VVymlI/AAAAAAAABZg/wPzXWpjd8b0/s1600-h/hamburg+069.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_j3vTtarNSys/RewN4VVymlI/AAAAAAAABZg/wPzXWpjd8b0/s320/hamburg+069.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5038417344573119058" /&gt;&lt;/a&gt;&lt;br /&gt;去了游乐园。也疯狂了把，被转轮甩得漫天嗷嗷叫，坐了久违的碰碰车，怀念小时候在逍遥津的日子。见着冰河世纪里那个性松鼠的大布偶，NND要20欧，没舍得买。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j3vTtarNSys/RewOXFVymmI/AAAAAAAABZo/Np2bxWiXwrE/s1600-h/hamburg+200.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_j3vTtarNSys/RewOXFVymmI/AAAAAAAABZo/Np2bxWiXwrE/s320/hamburg+200.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5038417872854096482" /&gt;&lt;/a&gt;&lt;br /&gt;去汉堡那能不去红灯区，欧洲第二大。St. Pauli街号称淫街，world of sex就可概括，再提我嫌腻味。经过甲壳虫的成名酒吧Grosse Freiheit 36。脱衣酒吧坐了会，看了几把脱衣秀，从侍者口中得到橱窗妓女大概位置，这是女性游客的禁区，不过殷姐还是稍微遮掩就轻松混了进去。街百米来长，规模确不比阿姆斯特丹，沿街全是隔间橱窗，里面全是妩媚的比基尼妓女，身材都一级棒，有站着骚首弄姿的，有坐着优雅吸烟的，有温柔和嫖客谈价钱的。同行两哥们儿也去和一看着顺眼的搭讪，一问50欧一小时半，囊中羞涩。&lt;br /&gt;晚上兵分两路，我和森、迪在迪厅蹦到3点半。其他人挤回旅馆睡觉。出来后聊天到天亮，KFC简单吃了早餐。仨一夜没睡，倦得不行。第二天无心再玩，提前去了不来梅等候队伍汇合。车上睡得不省人事。火车站前椅子上头一耷拉，又昏迷20分钟。人要不喊我，我得死那了。杂事不提。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-4623887148530257866?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/4623887148530257866/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=4623887148530257866' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4623887148530257866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4623887148530257866'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/one-day-in-hamburg.html' title='One Day in Hamburg'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_j3vTtarNSys/RewN4VVymlI/AAAAAAAABZg/wPzXWpjd8b0/s72-c/hamburg+069.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-4506047345802262685</id><published>2007-03-02T05:12:00.000+08:00</published><updated>2007-03-05T19:33:24.725+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>About Rock</title><content type='html'>正式接触摇滚才两个月，还是先想跟大家伙说说我怎么听上摇滚的。这里要提到我的朋友航。以前刚认识他时，隐约听说他听摇滚，也没怎么在意，只是挺好玩的，说老实话像他这个年龄的人还听摇滚在国内可能真是不多，就是20出头的，我周围的同学没有多少正儿八经听的。显然从某种程度上摇滚已经是吵闹音乐的代名词了，恐怕也就是些愤世嫉俗的家伙乱吼吼，发泄下对这个世界的不满，从而引发听众共鸣。听众也许是年少气盛的年轻人居多，要么就是常需要宣泄压力的人。总之有些“心照不宣”的理由没让我们就摇滚谈下去。&lt;br /&gt;有天航拉我给他剪头，打发无聊放起了他硬盘里的摇滚。我本身不怕吵闹，无所谓啊，听归听，还是没什么感觉，就是没法挠得我心痒。航给我换了好些听，时不时略作评论介绍，而一边的我只是有些不耐烦。虽隐约能感觉到这里有好多经典的曲目，感慨自己听歌听的太少，但兴趣还是不浓。&lt;br /&gt;航在德国同事那人缘不错，最先谈到音乐时就很合拍。我渐渐发现摇滚在欧洲是家常便饭，我的许多德国同学在高中音乐课里都有学电吉他，我上学期数学练习的领班就是贝斯手，大学里也有些搞得很专业出专辑的摇滚乐队，而且这些人生活中都是很理智的人，并不狂热躁动。我开始思考，摇滚凭什么那么吸引人，难道是文化差异，外国人就是喜欢吵闹音乐？好像也不全吵闹。那么摇滚怎么去界定它呢？我有点好奇了。于是我去请教航，试着想用心去听，希望能找到答案。面对滚轮滚几圈才到底的音乐目录有点不知所措，如何切入就比较重要。&lt;br /&gt;反正我最先接触七八九十年代的摇滚，现在看来并不系统，但到底是个入门的历程。乐队以后还会单独专门介绍。&lt;br /&gt;&lt;br /&gt;U2: 航的最爱，那会儿U2还是典型的非主流摇滚乐队，而20年后的今天已是大红大紫的格莱美（Grammy）常客，逐渐变成了主流乐队。摇滚这种东西一旦打上了流行的烙印多半要挨同行骂的说，也许摇滚注定是固执的。不过U2对骂声毫不理睬，还针对性地灌了《Pop》这张专辑，并特地加进了很多流行元素，比如电子合成，事实证明也是成功的，就是要坚持自己的，做自己的音乐，而不是迎合大众。现在的欧美流行乐也越来越多地插入了摇滚元素，所以不容易，也没有必要去界定什么是流行，什么是摇滚。U2的主唱很能吼，而且越老越能吼，注意这里吼不是吵闹。U2早期的专辑里，电吉他仅是伴奏不定调，调全是唱出来的，有难度。在我看来歌曲么，当然是听人家唱了，嗓音唱功好坏一直是我过去衡量歌曲好坏得标准，这点上U2是令我满意的，最喜欢的是1980－1990的精选。上次卡拉OK比赛我选的就是U2的一首，然后就被淘汰了，表笑我。&lt;br /&gt;&lt;br /&gt;关于流行乐: 该指出的是流行乐不是音乐形式，顾名思义，流行乐就是许多人都喜欢听的音乐。中世纪古典盛行，那么古典就是当时的流行乐，很多人听蓝调，那么蓝调就是最近的流行，很多人听摇滚，那么摇滚就流行了，一旦成为了流行的主导，他的一些元素必定会有影响力，就是说你想流行就得朝我靠拢。&lt;br /&gt;关于精选集: 每个乐队都出过很多专辑，都听？不大现实，所以对入门来说，最方便快捷的就是听精选了，有一定导航作用，实在喜欢就可以细听个别专辑了。&lt;br /&gt;关于专辑: 史诗级的摇滚专辑（从甲壳虫的《Seagent pepper's longly heart club》开始）都是在同一主题下一根主线贯穿下来不可分割的整体，类似于古典里的乐章，上下承接起来，从而整体得表达乐队的思想和世界观；而普通流行专辑充其量只是歌曲大杂烩，弄首推销主打就胡乱打包了。&lt;br /&gt;建议 入门听歌时，建议到手的歌喜欢不喜欢至少听三遍，要还不喜欢，甩掉好了。&lt;br /&gt;&lt;br /&gt;枪炮与玫瑰（Guns N' Roses）: 下简称枪花。已经算是流行摇滚（可以归结为：具有朋克精神的重金属流行摇滚）了。开始对主唱Axl Rose（长相ber帅，不知怎么后来蓄起了胡子）的声音特别不适应，声线较尖，不过听着听着就习惯了，那的确是副好嗓子。听枪花时我开始把欣赏侧重点从嗓音唱功上转移到乐器演奏上。主音吉他手Slash是大师级，他的大段华彩（solo，独奏）跟天马流星指似的。为培养兴趣我开始细听里面的吉他演奏，里面有两把吉他（Slash和Dizzy），有分有合，十分协调，听进去了绝对是享受，顺便训练下耳朵。像枪花这种大牌摇滚，都会有长达十多分钟的“史诗级”曲目（如枪花的《November Rain》，Led zepplin的《Stairway to heaven》，Queen的《Bohemian Rapsody》等等），邀请交响乐团做背景烘托。&lt;br /&gt;&lt;br /&gt;关于吉他和贝斯: 一般来说贝斯是起定调作用的，四根粗弦，就是背景里“BengBengBeng”的声音，偶尔贝斯声可能藏到鼓声里，或紧贴着电吉他，刚开始听的时候可以学着提取，就当是培养兴趣，不过对没玩过乐器的人来说有点难度，我开始就老混淆。如果说贝斯是基准线，电吉他就像画心电图一样在基准线上欢快跳跃了。&lt;br /&gt;&lt;br /&gt;Metallica: 看名字里含metal就知道是什么了。心脏病高血压严禁入内（速度金属摇滚的代表乐队）。值得一提的是，Metallica让我接触了主音贝斯（lead bass）这个概念。贝斯一般都是背景辅助的，虽也重要，却不像电吉他那么出彩。而主音贝斯手Cliff Burton竟能让贝斯成为主角，就我听来，他在很短的时间内可以变化出许多排山倒海的节奏型，其他都成了他的陪衬，如果说吉他是柳条在空中抽得呜呜响，那么他的贝斯就是一根粗木在轰轰狂舞，横行过境，片甲不留，如果每下扫弦就有一排树被齐根削倒，照他那速度亚马逊河沿岸的原始森林一上午就被剔干净了。所以Metallica又有推土机的绰号。可惜天妒英才，这位天才贝斯大师丧身于一次车祸，年仅23。Metallica不建议一次听太多，容易窒息到吐。不过我个人比较喜欢。&lt;br /&gt;&lt;br /&gt;Green Day: 典型的朋克（Punk）。这里不多介绍，比较流行，估计大家也听过。&lt;br /&gt;&lt;br /&gt;关于朋克: 朋克运动的兴起和影响主要在英国，背景是73年经济危机。朋克音乐是摇滚的一个分支，当时青少年用大喊大叫，古怪造型表达对现实的不满，甚至绝望的心情。朋克摇滚降低技术门槛，往往一首曲子只单调重复几个和弦。所以在朋克中，音乐似乎是最不重要的，重要的是你想恶心什么人。不过呢拿来听听还是不错的，管那么多干嘛。&lt;br /&gt;&lt;br /&gt;考虑大家找歌下歌可能会比较麻烦，这里给大家介绍下PANDORA。这个网站做得很精致，你可以在播放界面里输入歌曲名或艺术家名，播放器会建立一个广播站，里面就开始播放相关曲目，并智能匹配相似风格的歌曲连续播放。速度相当快，就试听来说很理想。当然只支持英文歌曲的，免费注册。缺点是一般不能播放指定歌曲，而是随机抽取艺术家一张专辑里的一个曲目。不过你可以点进专辑里，或进去后选取其他专辑，然后找到你要听的曲目，可惜只能试听一段Sample。不管怎样试着玩玩看吧，蛮有意思，就是平时当广播听也挺好的。&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-4506047345802262685?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/4506047345802262685/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=4506047345802262685' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4506047345802262685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/4506047345802262685'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post_02.html' title='About Rock'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1307399031504576116</id><published>2007-03-02T05:05:00.000+08:00</published><updated>2008-11-15T16:06:01.044+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='football'/><title type='text'>Worldcup 2006</title><content type='html'>&lt;div&gt;&lt;span style="font-weight: bold;"&gt;The First Day&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;世界杯第一天。&lt;/div&gt; &lt;div&gt;早上起来写了会作业，宝来电话约去多蒙看球，世界杯第一场球。现场在慕尼黑，去多蒙当然是看大背投了。整装出发，马路上就已经感受到世界杯的气氛，球迷统一白色国家队战袍，他们脸上涂着国旗，手里挥舞着国旗，肩上披着国旗，头戴象征国旗的三色假发、三色高帽或三色小丑帽，有喝得差不多的年轻人已经当街合唱起来了，要么就有节奏的高喊Deutschland！Deutschland！情绪激昂却有秩序。天气又是这么的好，让人有发泄的欲望。到火车站15：39，差一分钟错过辆直达，难道要等一小时？宝电话叫我Hamm转，我打了车表，16： 04的车，果然还来得及，赶到站台车已候着了。顺利转车，抵达Dortmund。&lt;/div&gt; &lt;div&gt;车站人流攒动，很多是专赶来看球的。人们脸上都刻着这么个表情：今天是世界杯第一天。 越往门口越接近嘈杂兴奋的热流，正如离海老远就能闻到海腥味儿一样，直到你整个人暴露在大太阳下，排排世界杯热浪潮就劈头盖脸地朝你掀过来了。车辆举步维艰，有的车上插了好些国旗，招惹了些热心球迷过去栏车拉司机一起喊口号，并要在脸上画国旗，他们有种三色颜料块，脸上这么一划拉就是国旗了--我想到了中国国旗，画起来恐怕不易。司机也不急了，有节奏地和着球迷的高喊摁着喇叭：滴滴~滴滴滴~滴滴滴滴~&lt;/div&gt; &lt;div&gt;问宝去哪，宝说跟着人和国旗走就没错了。满世界都是国旗，以白色队服为主色调夹杂少许奇装异服，一路都是此起彼伏的高唱。人们有三五成群的，有单个的，情侣结伴的，家长拉着孩子，推着婴儿车的，席地而坐的，有东跑西窜的，德国人一到这种日子最开心了。&lt;/div&gt; &lt;div&gt;人流最后都往大背投所在的广场汇合。那儿早已汪洋一片，泛滥成灾了。靠外面有铁栏，进 广场都得被搜身，搜身的大叔好像对我特别感兴趣，先重重地拍了我一下肩膀，然后慢慢顺着肋骨摸下去，又在腰上重拍了下，吓了我一跳，不禁一缩身子，接着他又查了我的包，饮料是不准带进去的，直接扔旁边垃圾箱。&lt;/div&gt; &lt;div&gt;想象来到海边，想找个地方下水，先用脚在水里淌了淌，就扑通一下跳下去了。然后就是人 挤人，人挨人，人压人，期间你会和不同的皮肤狠命的摩擦：光滑的、干涩的、柔软的、粘粘的、湿热的、冰凉的，还有不同的汗味儿：清新的、浓郁的、腥的、刺鼻的、酸的、皮革味的，此外还夹杂着经过加温的香烟、啤酒、各式香水的味儿。空气虽混浊也不至于闷死人，偶尔会吹来一阵凉风，卷走部分热浪，而热浪仍在不 断产生，像刚揭开锅的米饭冒着腾腾热气，用手扇过去，热气就蓦地散开，而后又从下面慢慢聚拢上升。人群每时每刻都在增多，如有新的支流汇入，不时出现局部漩涡，我俩只能在漩涡的掩护下勉强朝中间挤挪，而两反向旋涡一旦交汇，会出现短暂的紊流，并荡起一层波，同时向四周推开，所播及的地方人群东倒西歪，抱怨 声不绝于耳。好容易站定了地方，偶尔还有轻微扰动，稍作调整。此时你听到了什么大脑可能都不会去处理，因为光应付看到的就很吃力了。&lt;/div&gt; &lt;div&gt;德国对哥斯达尼加比赛开始！热情的球迷们早就等的不耐烦了：Jetzt geht's los！Jetzt geht's los！（开始！开始！）球一开好像一滴水落进油锅里炸开了花：喊叫、吼叫、尖叫、喇叭、口哨、气棒拍击声一齐迸射出来，大大小小的三色旗顿时在空中拼凑成巨浪，暗地昏天地翻滚，那里还能看到什么大屏幕，天都快被淹没了，持续了好阵子才算平息下来。歌声开始从后面穿过来，开始是小范围，然后慢慢变厚，紧接着猛地袭过我，变成了全场的高唱，我要是身上长满叶子，刚才准被刮得光秃秃的了。德国人编的球歌还真多，还变着花样唱，仔细听才听懂，就不一一细说了。不久德国队就率先进了一球，请把油锅加热到冒青烟，然后泼上一杯凉水。。。此时掀起飓风，挤压在一起的人群干脆都搂起来，煮开了似的举着旗子窜跳，人在其中犹如坠入万丈深渊，稍作平息又是及其默契的节奏击掌，啪啪~啪啪啪~啪啪啪啪~&lt;/div&gt; &lt;div&gt;德国球迷素质还是不错的，随后虽然哥斯达尼加进球了，人群里只有齐声哎叹，并无咒骂。还是静静看球，唱歌，击掌，再唱歌，再击掌。每到罚角球，任意球时球迷们会不约而同举起双手在空中摇晃嘴里呜呜的像是在念叨天灵灵地灵灵一样，然后球起的一瞬，哗的一下收起。&lt;/div&gt; &lt;div&gt;4：2因该说赢得漂亮，尤其是最后一粒进球，一脚漂亮的远射。到下半场已略微心不在焉 开始聊天的的球迷们又来了精神，又是一阵齐声高唱：Ist so schön, ist so schön, so was hat man lange nicht gesehen!（太漂亮了，太漂亮了，这么漂亮的球好久没见了！）&lt;/div&gt; &lt;div&gt;我和宝提前挤了出来，打道回府。一路上德国人情绪高涨也不再细述，他们高唱：Berlin,Berlin,Wir fahren nach Berlin！（我们开往柏林！意思是他们将会进入决赛）。那么祝福德国队吧！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tears of England&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;跟殷姐说好今天下午去Gelsenkirche看球。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j3vTtarNSys/RewQflVymqI/AAAAAAAABaI/rIGAbmhXjM8/s1600-h/England%26Portgual+004.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_j3vTtarNSys/RewQflVymqI/AAAAAAAABaI/rIGAbmhXjM8/s320/England%26Portgual+004.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5038420217906240162" /&gt;&lt;/a&gt;&lt;br /&gt;火车站全是英格兰球迷。英国足球流氓早久仰了，今天和他们在一起要悠着点。球迷群里到处是英格兰国家队标志，整个一浩浩荡荡红十字军团。英格兰国家队队服靠右肩的红十字像把锐利的血匕首，有锐不可当的气势，搭配雪白的衬底冷酷而不可侵犯。进说国旗里含十字是有宗教渊源的，红十字总让我联想到中世纪残酷的宗教净化。英国球迷还有个特点，他们多半赤裸上身，当然天热也是个原因的，更主要的是秀他们五花八门的纹身。英国球迷的歌响亮有压迫感，身处千百人的大合唱里当然能倍感压力。不得不提下十字军里不时传出来的粗犷英国口音，和美音比起来多棱角，更铿锵，因为发音时口腔更扩张，还有舌摆得平，擦音擦得重，想象下用大拇指用力弹射一个硬币的感觉。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_j3vTtarNSys/RewQGFVympI/AAAAAAAABaA/jc24ZSflrvM/s1600-h/England%26Portgual+072.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_j3vTtarNSys/RewQGFVympI/AAAAAAAABaA/jc24ZSflrvM/s320/England%26Portgual+072.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5038419779819575954" /&gt;&lt;/a&gt;&lt;br /&gt;随十字军队伍来到了专为他们预定的大屏幕草场。实际是个露天标准球场，边上架设了两个大屏幕。同样是搜身入场。球场边缘有卖世界杯球迷道具服装，当然主要带英格兰标志，有卖啤酒、卖面食肉肠的棚子，比较显眼的是一排排临时摆放的厕所箱，电话亭大小。而球场中间就是几万摩拳擦掌的十字军们了。他们爱憎分明，面对敌人是千万个fuck，百般的挑衅，对支持自己球队的外国人十二分友好，又是握手又是击掌，或干脆搂抱。殷姐还被送了顶印有英格兰标志的塑料头盔，就是貌似二战德军戴的钢盔，戴着这头盔一路往屏幕前凑，一路就会挨球迷拍，他们是表示友好，握手击掌不提。人虽多，但球场也大，所以人站得比较开，越靠近大屏幕红色火苗窜动得越旺。几颗球被踢得满场飞，想象自己是这球，俯视下面不安躁动的红与白，镜头反复地拉远又拉近，会眩晕到吐。满地的塑料杯，另外手里拿着的，鞋子里插着的，球迷怎能少得了啤酒？尤其在这么火力十足的太阳下。解渴是必要的，一定程度的迷糊与兴奋对他们来说也是必需的。可能天太热了，球迷们的兴奋劲还是被酷热摁得难以动弹，可这就已经足够沸腾了。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_j3vTtarNSys/RewRGlVymrI/AAAAAAAABaQ/jLt3kBCbTRs/s1600-h/England%26Portgual+045.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_j3vTtarNSys/RewRGlVymrI/AAAAAAAABaQ/jLt3kBCbTRs/s320/England%26Portgual+045.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5038420887921138354" /&gt;&lt;/a&gt;&lt;br /&gt;英格兰踢得很卖力，这种高水平的比赛实力自然是不相上下的。都有很多机会，可进球还是不易。点球大战无疑是将赛况猛加温到炽热。英格兰最终还是折了翅膀。&lt;br /&gt;英格兰球迷对输球是必须发泄的，赛场的闹事是必然的，而我看到了眼泪，大屏幕里的眼泪，我身边的眼泪。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j3vTtarNSys/RewPsVVymoI/AAAAAAAABZ4/x2jvFX1CQ_k/s1600-h/England%26Portgual+077.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_j3vTtarNSys/RewPsVVymoI/AAAAAAAABZ4/x2jvFX1CQ_k/s320/England%26Portgual+077.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5038419337437944450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1307399031504576116?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1307399031504576116/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1307399031504576116' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1307399031504576116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1307399031504576116'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/blog-post.html' title='Worldcup 2006'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_j3vTtarNSys/RewQflVymqI/AAAAAAAABaI/rIGAbmhXjM8/s72-c/England%26Portgual+004.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3065184863492159916.post-1368442213916911587</id><published>2007-03-02T04:51:00.000+08:00</published><updated>2007-03-05T19:30:45.835+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='festival'/><category scheme='http://www.blogger.com/atom/ns#' term='city'/><title type='text'>Eurocity</title><content type='html'>&lt;div&gt;晚 上和航去看欧洲节（Eurocity），欧洲节是明斯特一年一度的庆祝节日，主要是在市中心分开搭建七八个露天舞台，不同风格歌手乐队们在上面表演。虽然 下雨--记得去年也是下雨--出来凑热闹的人依然很多，各种风味的小吃摊位早早就搭建起来了，德国人一到这种日子肯定离不开啤酒，总是喝的晕晕乎乎的。谁 说德国人保守？绝对方的开啊！尤其是喝了酒。。。这酒一喝多吧，就要过来搂住你跟你找话说了，要么就跟你干一杯。挺喜欢这种轻松的气氛，一种文明的宣泄方 式。&lt;/div&gt; &lt;div&gt;首先来到Domplatz找了个地方停了自行车，哟，Neuser都已经唱上了。20：00-22：00这个摊位归他们，这个是个好地段，背靠 大教堂，前面有空旷，可容纳好些人。天还没全黑呢，舞台灯光效果这时候还没出来，台下反正是黑压压一大片了，对不起，是黄压压一大片。听起来像 Poprock，空气中这时候已略漂浮着啤酒香了，但人群大都还没high起来。只是跟着旋律摇头晃脑。你要问我唱得怎么样？我说你自己去现场看看吧，现 场就是由这种魔力，你会不知不觉被卷进去，你会不自觉地跟着摇摆，不晃动你会难受。你能想象站在两个约长三米高五米的开到最大音量的音箱前的感受么？你能 想象在炮雨里奔跑时不断承受爆炸所产生的冲击波时的感受么？是的，你的胸口会不断被空气撞击，你可能会不自觉得用手去挡胸口，这时你才发现，那重低音是直 接在你心里爆炸的，去蹦去跳吧！歌他们当然都是原创了，我喜欢一首“世界停止”--高潮部分唱得我心直痒痒，经不住也跟着唱了起来--和一首“如果能从头 开始”。&lt;/div&gt; &lt;div&gt;没有不散的晚会，结束后我俩查查小册子看了节目单对了下地点，又接着寻着其他舞台去了。这些搭建的舞台就好比原子的中心，人群就好比电子云，越 往中心约密集。我在前面开路，航跟我后面。经过了个唱爵士的，又像是黑人灵歌，我倒是直勾勾盯着那个戴墨镜的萨克斯美女，好像那白析的皮肤本身就在释放着 音符。&lt;/div&gt; &lt;div&gt;换地方，下个舞台比较好玩，都是老头老太在唱，叫the Lightning，航说有可能是一家人吧，谁知道呢？这是六七十年代的打击摇滚。老头吉他弹得没治了，老太太起码50了，声线极具爆发力。在其间我也首 次看到了吉它现场的solo，那感觉就像把一个身材极棒的美女从上摸到下面，再从下摸到上面，如此反复几次才算完，就是很爽了。旁边一个喝多了的大叔时不 时跟着吼两句，高潮时还往前晃两步转过来面向大家，领大家打拍手打节奏呢。好了，别去管这位可爱的大叔了。&lt;/div&gt; &lt;div&gt;我们还想看看其他舞台的状况，就挤出了一个原子，又钻进了另外一个原子。这个叫Maraton，唱得是按航的话说舞厅里最讨好的歌，什么 Green Day，罗比威廉姆斯，U2啦之类的，航还评价说，看来现在德国的流行乐配置基本和摇滚没多少区别了，不同处也就是期间键盘所占的比例及运用方式了，剩下 的就是架子鼓，电吉他，电贝司。两个主唱，一男一女，相当不错，一看就是舞台经验非常丰富了。歌声磁不磁性咱不管了，反正每当高潮麦克风里喊出的词曲踏着 狠命重击出的鼓点不断挑逗着人浪，尖叫，挥舞手臂，跳跃，最前面的两排看上去也就高中生样子的小P孩们更是闹腾得一塌糊涂，稀里哗啦，就差没鼻青脸肿了。 不久到了终场休息，继续兜圈子。&lt;/div&gt; &lt;div&gt;回到Domplatz，这是已经换了个黑人歌手，典型的黑人爵士嗓子，连我这个爵士盲都被吸引得恍惚了一小阵子，不过呢毕竟对这种音乐形式不发 烧，最后还是决定回去看Maraton。后来一个老大妈还搂着航伴着曲子摇晃，称这是她们年轻时候听得歌曲，航觉纳闷，罗比威廉姆斯是你们那年代的？老大 妈立刻改口，除了这首。。。哎，不一一细说啦。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3636516799874996";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3065184863492159916-1368442213916911587?l=jayesoui.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jayesoui.blogspot.com/feeds/1368442213916911587/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3065184863492159916&amp;postID=1368442213916911587' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1368442213916911587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3065184863492159916/posts/default/1368442213916911587'/><link rel='alternate' type='text/html' href='http://jayesoui.blogspot.com/2007/03/eurocity.html' title='Eurocity'/><author><name>choffen</name><uri>http://www.blogger.com/profile/06279947377999640656</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
