<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Fantasy Soft</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/1822/rss</id><updated>2011-05-15T07:24:43Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/1822/rss"/><entry><id>http://www.cnblogs.com/perhaps/archive/2010/11/15/1877653.html</id><title type="text">PHP菜鸟手记——如何解决无法装载动态链接库的问题</title><summary type="text">为了兑现&amp;#8220;做最懂技术的产品经理&amp;#8221;的诺言，我上周开始捣腾PHP了。虽然早在大学读书的时候，我也曾经玩过一小段时间的PHP，不过到如今，也忘得一干二净了。所以，偶和一个PHP菜鸟无异。既然是菜鸟，自然先从搭建PHP开发环境开始了。首先，从PHP的官方网站下载了PHP 5.2.14 For Windows的压缩包，解压至D盘的PHP目录；随后下载了Apache HTTP Serv...</summary><published>2010-11-15T06:26:00Z</published><updated>2010-11-15T06:26:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/11/15/1877653.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/11/15/1877653.html"/><content type="html">&lt;p&gt;为了兑现&amp;#8220;做最懂技术的产品经理&amp;#8221;的诺言，我上周开始捣腾PHP了。虽然早在大学读书的时候，我也曾经玩过一小段时间的PHP，不过到如今，也忘得一干二净了。所以，偶和一个PHP菜鸟无异。既然是菜鸟，自然先从搭建PHP开发环境开始了。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;首先，从&lt;a href="http://www.php.net/" target="_blank"&gt;PHP的官方网站&lt;/a&gt;下载了&lt;a href="http://windows.php.net/downloads/releases/php-5.2.14-Win32-VC6-x86.zip" target="_blank"&gt;PHP 5.2.14 For Windows的压缩包&lt;/a&gt;，解压至D盘的PHP目录；随后下载了&lt;a href="http://httpd.apache.org/download.cgi" target="_blank"&gt;Apache HTTP Server的最新版本&amp;#8212;&amp;#8212;2.2.17&lt;/a&gt;，是MSI格式的，安装也非常简单。接着就是将PHP与HTTP Server关联起来&amp;#8212;&amp;#8212;让HTTP Server能够处理php请求，其实也就是修改httpd.conf文件了。有关这一点，网上的资料已经非常详细，&lt;a href="http://php.net/manual/en/install.windows.apache2.php" target="_blank"&gt;官方的介绍在这里&lt;/a&gt;。环境搭建好了之后，为了让PHP能够更强大，接下来就是通过修改PHP.ini文件来装载所需的PHP Extention（PHP扩展）了，而这些扩展在Windows平台下就是一个个动态链接库（DLL文件）。这下老大难的问题来了&amp;#8212;&amp;#8212;无法装载某些动态链接库（&lt;strong&gt;PHP startup: Unable to load dynamic library&lt;/strong&gt;）。对于这个问题，我们通过Google能够找到如下的解决方案：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;ol&gt;&lt;li&gt;切记修改Windows的环境变量，在PATH环境变量当中增加PHP所在的路径以及PHP扩展所在的路径；&lt;/li&gt;&lt;li&gt;如果第一点做了之后，仍然无法解决，就要留意被加载的动态链接库所依赖的DLL文件是否缺失。PHP官方提供了一个&lt;a href="http://php.net/manual/en/install.windows.extensions.php" target="_blank"&gt;在Windows下安装PHP扩展的指南&lt;/a&gt;，里面指出了依赖关系。&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;通常上述两个方案就能解决无法装载动态链接库的问题了，但是也会有例外的。上个星期我在搭建PHP开发环境的时候，就遇到了无法装载php_curl.dll动态链接库的问题。不管是环境变量还是依赖的DLL文件（官方文档指出：php_curl.dll所依赖的文件是&lt;span  style="font-family: verdana, arial, helvetica, sans-serif; line-height: normal; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;var &gt;libeay32.dll&lt;/var&gt;,&amp;nbsp;&lt;var &gt;ssleay32.dll&lt;/var&gt;&lt;/span&gt;）都是齐备的，这让我百思不得其解。我把网上能够找到的办法都试了个遍，甚至还把相关的dll文件全部复制到了Windows的system32目录当中（其实这样做是毫无意义的）。这个小问题让我整个周末如鲠在喉，甚是不爽。经过一番思考，我还是把问题定位到了&lt;span style="color: red; "&gt;&lt;strong&gt;动态链接库所依赖的DLL文件缺失上。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;尽管官方文档告诉我php_curl只依赖上述两个DLL文件，但这是真的么？于是，我在下载了查看DLL依赖关系的软件&amp;#8212;&amp;#8212;&lt;a href="http://www.dependencywalker.com/" target="_blank"&gt;Dependency Walker&lt;/a&gt;。用这个软件一看，果然不出我所料：&lt;/span&gt;&lt;span style="color: #ff0000; "&gt;&lt;strong&gt;php_curl.dll所依赖的zlib.dll不存在！&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;找到问题根源，接下来的事情都好办了，通过Google找到&lt;a href="http://www.zlib.net/" target="_blank"&gt;zlib的老巢&lt;/a&gt;，下载最新的zlib.dll，然后将该文件放到PHP的安装目录下即可（这里仍然需要注意两点，&lt;/span&gt;&lt;strong&gt;一是对于下载的DLL文件，如果文件名不是zlib.dll，需要改为zlib.dll&lt;/strong&gt;&lt;span&gt;；二是PHP安装的目录必须加入到PATH环境变量中）。至此，问题解决！&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1877653.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/11/15/1877653.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/09/07/1820262.html</id><title type="text">穿在身上的手机——M-Dress</title><summary type="text">8月28日，新浪微博一周年了；8月23日出版的《三联生活周刊》第592期的封面故事&amp;#8212;&amp;#8212;《被微博、短信、MSN改变的秩序》谈的就是微博。不管情愿不情愿，以微博为代表的新一代互联网工具在极力地分散每个人的注意力，同时也让世界更加扁平，人们疯狂地要求将自己每时每刻连线外面的世界，或通过短信、邮件，或通过各种IM，亦或者通过时下火热的微博。有关这些先进的技术如何如何让人们逐渐丧失独...</summary><published>2010-09-07T00:41:00Z</published><updated>2010-09-07T00:41:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/09/07/1820262.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/09/07/1820262.html"/><content type="html">&lt;p style="text-align: left;"&gt;&lt;a href="http://t.sina.com.cn/zt/yizhounian" target="_blank"&gt;&lt;font  color="#000000"&gt;8月28日，新浪微博一周年了&lt;/font&gt;&lt;/a&gt;；8月23日出版的&lt;a href="http://www.lifeweek.com.cn/iRelease/jsp/other/IssueView.jsp?issueid=592" target="_blank"&gt;&lt;font  color="#000000"&gt;《三联生活周刊》第592期的封面故事&amp;#8212;&amp;#8212;《被微博、短信、MSN改变的秩序》&lt;/font&gt;&lt;/a&gt;谈的就是微博。不管情愿不情愿，以微博为代表的新一代互联网工具在极力地分散每个人的注意力，同时也让世界更加扁平，人们疯狂地要求将自己每时每刻连线外面的世界，或通过短信、邮件，或通过各种IM，亦或者通过时下火热的微博。有关这些先进的技术如何如何让人们逐渐丧失独处的能力，有兴趣的朋友可以看看《三联生活周刊》的专题报道。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;也许大家对于疯狂地时刻连线还没有太深刻的体会，但是对于那些&amp;#8220;&lt;a href="http://www.hudong.com/wiki/%E5%BE%AE%E5%8D%9A%E6%8E%A7" target="_blank"&gt;&lt;font  color="#000000"&gt;微博控&lt;/font&gt;&lt;/a&gt;&amp;#8221;而言，每隔三五分钟就要刷新微博页面，生怕漏掉什么新鲜的信息，这样的情形已经司空见惯了。我们可以将其称为&amp;#8220;微博强迫症&amp;#8221;。不过，这还不算最疯狂的，来自英国伦敦的高科技时装设计公司&lt;a href="http://www.cutecircuit.com/" target="_blank"&gt;&lt;font  color="#000000"&gt;CuteCircuit&lt;/font&gt;&lt;/a&gt;新近推出的产品&lt;a href="http://www.cutecircuit.com/products/mdress/" target="_blank"&gt;&lt;font  color="#000000"&gt;M-Dress&lt;/font&gt;&lt;/a&gt;真正诠释了什么叫连线狂！&#xD;
&lt;/p&gt;&#xD;
&lt;p style="text-align:center"&gt;&lt;img src="http://www.fantasysoft.cn/wp-content/uploads/2010/08/m-dress.jpg" alt="" width="453" height="401" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从外表上看，这件黑色礼服并没有特别的地方，但是，它除了可以穿之外，本身还是一个移动电话！是的，您没有看错，它是一件衣服也是一部手机。我们可以给M-Dress插入普通的Sim卡，穿着这件衣服就可以接听来电了。您会忘记带手机，但是绝对不会忘记穿衣服！这就是M-Dress设计师的初衷：为了不错过任何一个来电。女孩子为了时尚，性感的衣服上都没有口袋用于装手机，因此，她们不得不将手机放到包包里。这样一来，有可能会忘了带手机，或者在嘈杂的环境下压根就听不到来电铃声。有了M-Dress，就等于将手机穿在身上，女孩子们既可以保持时尚，又可以时时刻刻与外界连线了。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;M-Dress所使用的技术除了软电路之外，还有手势识别。在电话铃声响起的时候，穿着M-Dress的女孩子只要将手靠近耳朵（如上图所示），电话就接通了；聊完电话之后，将手自然垂下，电话就挂断。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;对于这样的产品，Michael不得不拍案叫绝：这真的是将连接需求发挥到极致的产品！它将无线通话的需求与每日穿衣戴帽的习惯结合到了一起，这确实是个奇思妙想。但是，这会不会有点过犹不及呢？我该把M-Dress称为&amp;#8220;可以打电话的衣服&amp;#8221;还是&amp;#8220;可以穿的手机&amp;#8221;呢？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[注：]本文首发个人博客&lt;a href="http://www.fantasysoft.cn/" target="_blank"&gt;Fantasysoft&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1820262.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/09/07/1820262.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/08/29/1812126.html</id><title type="text">团购之道——双赢才是核心</title><summary type="text">有关团购的话题，在今年以来就一直都没有消停过。从Groupon获得巨额风投到王兴创办美团网，从百&amp;#8220;团&amp;#8221;大战再到团购网站抄袭成风，团购网站以闪电般的速度占据了所有互联网人士聊天的话题。Michael在上个周末和两位IT资深人士一起聊天，就团购的话题足足谈了四个小时，小有心得，遂与大家分享之。团购模式之所以得到众多互联网创业者的青睐，最重要的就是良好的现金流。搞互联网创业的，有...</summary><published>2010-08-29T15:08:00Z</published><updated>2010-08-29T15:08:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/08/29/1812126.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/08/29/1812126.html"/><content type="html">&lt;img style="float: right;" title="groupbuy" src="http://www.fantasysoft.cn/wp-content/uploads/2010/08/groupbuy-294x300.jpg" alt="" width="235" height="240" /&gt;&#xD;
&lt;p&gt;有关团购的话题，在今年以来就一直都没有消停过。从&lt;a href="http://tech.qq.com/a/20100419/000252.htm" target="_blank"&gt;&lt;font  color="#000000"&gt;Groupon获得巨额风投&lt;/font&gt;&lt;/a&gt;到&lt;a href="http://it.sohu.com/20100304/n270582583.shtml" target="_blank"&gt;&lt;font  color="#000000"&gt;王兴创办美团网&lt;/font&gt;&lt;/a&gt;，从&lt;a href="http://tech.qq.com/a/20100619/000008.htm" target="_blank"&gt;&lt;font  color="#000000"&gt;百&amp;#8220;团&amp;#8221;大战&lt;/font&gt;&lt;/a&gt;再到&lt;a href="http://iove.net/2712/" target="_blank"&gt;&lt;font  color="#000000"&gt;团购网站抄袭成风&lt;/font&gt;&lt;/a&gt;，团购网站以闪电般的速度占据了所有互联网人士聊天的话题。Michael在上个周末和两位IT资深人士一起聊天，就团购的话题足足谈了四个小时，小有心得，遂与大家分享之。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;团购模式之所以得到众多互联网创业者的青睐，最重要的就是良好的现金流。搞互联网创业的，有多少不是需要相当长的一段烧钱期呢？烧小钱不要紧，一烧都是百万、千万级别的，到了最后得到的就是一个半死不活的网站，这般景象在国内甚至国外都不少见。裤兜朝天的苦日子过久了，就盼着那种今天早上投入，晚上就能有收益的商业模式。如今，团购横空出世，不管是纯种的还是变种的，从整个团购流程来看，抓着现金时间最长的人就是团购网站。一开始，用户要通过网上支付将钱交给团购网站；对于商家而言，要等到团购结束了，网站才会将发生的款项结算给商家。当然，网站已经从这桩团购发生的总金额当中扣除了一定比例的佣金，据说高达30%到50%！&#xD;
&lt;a href="http://t.sina.com.cn/kaifulee" target="_blank"&gt;&lt;font  color="#000000"&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;单纯这么看团购的商业模式，网站确实可以赚得盆满钵满了。不过，它赚的钱主要来自商家支付的佣金，而团购网站的竞争又日趋白热化，大家都争相以低折扣来揽客，商家在团购过程中几乎没有盈利甚至是亏本。这样的生意，商家又怎么可能愿意长久做下去呢？也许您会认为，商家做团购活动收到了广告的效果，所以不赚钱甚至赔本都是值得的，省下高额的广告费就返利给了用户。但是，这种以低折扣为噱头的所谓的广告真的有效果么？根据Michael对传统行业的了解，定价就是定天下，低折扣的团购活动无疑对价格体系有着极大的杀伤力，特别是餐饮业。我们可以设想一下，在一次团购活动中，消费者以3折的价钱尝到了某个菜，那么在所有看到这个团购活动的消费者心目中，这个菜就只值3折的价钱了，哪怕商家对天发誓&amp;#8220;这个价钱是亏的&amp;#8221;，估计也没人相信了。在Michael看来，现在的团购模式无异于杀鸡取卵，尽管用户对团购网站趋之若鹜，却是以损害商家的利润作为代价的。如果商家对所谓的&amp;#8220;广告费用返利&amp;#8221;如梦方醒，那么团购的游戏就无法再玩下去了。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;这样说来，团购模式是不是就没有可取之处呢？当然不是！Groupon大受追捧就证明了这种模式是有价值的。我们可以对Groupon上的团购项目进行分析，它们很多是一些&amp;#8220;稀奇古怪deals&amp;#8221;（语出&lt;a href="http://t.sina.com.cn/kaifulee" target="_blank"&gt;李开复微博&lt;/a&gt;），而不像国内那样多是餐饮类的团购。Michael认为，并不是所有产品都适合做团购的，尤其是夹杂着服务在其中的产品，譬如餐饮。最适合团购的产品应该具有以下特性：&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;1、它必须是一个具有标准的产品，用户可以很容易地感知产品的好坏；&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;2、具有一定的可定制性；&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;3、高附加值，即单个购买价格昂贵，当数量达到某个数量级之后，成本急剧下降。&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;以上三个特性，最重要的是第三点。Michael身在广州，接触过不少生产制造商。他们告诉我：很多产品的生产都需要起模具，而起模费通常都很贵，如果生产数量不多，模具又无法重复利用，那么起模费分摊到每一件成品上就相当客观了。此时，团购平台的优势就能大展拳脚了。我们可以通过它来集合一些个性化的需求，从而产生规模效应，赚取中间的成本差。这么一来，客户能够低价得到产品、商家也能多接订单，真正实现了双赢。我想，这个才是团购网站能够细水长流的核心价值吧！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[注：]本文首发个人博客&lt;a href="http://www.fantasysoft.cn/" target="_blank"&gt;Fantasysoft&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1812126.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/08/29/1812126.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/08/24/1807205.html</id><title type="text">Demand Media——深谙中庸之道的新媒体</title><summary type="text">Demand Media之所以吸引了我的眼球，除了月初它向美国证券交易委员会（SEC）提交了IPO申请，很有可能成为继Google之后科技公司里首个10亿美元级的IPO，更重要的是它的商业模式。如果说Twitter以及SNS网站在某种程度上解决了信息传播的问题，那么，Demand Media则是从内容的生产以及组织入手去解决信息去噪音化的问题。我们都知道，随着互联网的普及，各种各样的新媒体不断涌现...</summary><published>2010-08-24T06:06:00Z</published><updated>2010-08-24T06:06:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/08/24/1807205.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/08/24/1807205.html"/><content type="html">&lt;img style="float: right;" title="DemandMedia" src="http://www.fantasysoft.cn/wp-content/uploads/2010/08/DemandMedia.jpg" alt="" width="328" height="77" /&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.demandmedia.com/" target="_blank"&gt;Demand Media&lt;/a&gt;之所以吸引了我的眼球，除了&lt;a href="http://tech.sina.com.cn/i/2010-08-07/12284518884.shtml" target="_blank"&gt;月初它向美国证券交易委员会（SEC）提交了IPO申请&lt;/a&gt;，很有可能成为继Google之后科技公司里首个10亿美元级的IPO，更重要的是它的商业模式。如果说Twitter以及SNS网站在某种程度上解决了信息传播的问题，那么，Demand Media则是从内容的生产以及组织入手去解决信息去噪音化的问题。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们都知道，随着互联网的普及，各种各样的&lt;a href="http://www.fantasysoft.cn/archives/tag/%E6%96%B0%E5%AA%92%E4%BD%93" target="_blank"&gt;新媒体&lt;/a&gt;不断涌现，大至门户网站，小至个人博客和Twitter这样的自媒体，都对传统媒体造成了非常大的冲击。得益于Web 2.0模式，整个互联网从&amp;#8220;只读&amp;#8221;变成了&amp;#8220;可读写&amp;#8221;，从而让个体通过网络掌握了话语权，信息源也从单一走向无处不在。传统媒体与新媒体的这场竞争似乎印证了中国的一句俗话&amp;#8212;&amp;#8212;三个臭皮匠，赛过诸葛亮。如果把传统媒体出版商当作诸葛亮，那么，身为臭皮匠的You数以亿计，这场竞争的胜负似乎也已经毫无悬念了。然而，臭皮匠实在是太多了，人们陷入了急剧碎片化的信息海洋当中而无法自拔，以Google为代表的搜索引擎那小小的搜索框成为了人们挖掘有效信息的诺亚方舟，或者只能称为救命稻草。反观传统媒体，尽管在内容数量上无法与互联网上那浩如烟海的信息相匹敌，但是，它们拥有一群很专业很牛B的编辑，每天都在为我们对信息进行过滤、提炼以及深化，最终形成了捧在手上的报纸与杂志。所以，天天泡网络的我同样离不开报纸与杂志，因为它们给了我一个深度挖掘以及学习的导向，而这个&lt;a href="http://www.fantasysoft.cn/archives/23" target="_blank"&gt;导向正是新旧媒体争夺的焦点&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;很显然，Demand Media深谙&amp;#8220;导向作为核心竞争力&amp;#8221;的重要性，&lt;strong&gt;尽管它是一个新媒体，却走着传统媒体的路线&lt;/strong&gt;。创始人罗森布拉特也依靠网络上成千上万的写手来生产内容，这是Web 2.0的一个显著特性&amp;#8212;&amp;#8212;UGC（User Generated Content）；但是，和典型的Web 2.0网站不同的是：&lt;strong&gt;控制内容导向的编辑仍然存在，只不过，这个编辑从以往的精英团队变成了SEO&lt;/strong&gt;。在Demand Media，写手们并不能天马行空，爱写啥就写啥，而是Demand Media根据自己的SEO算法，每天都评估哪些话题在网络上最热门，哪些关键字广告最值钱，从而发布各种各样的话题，让写手们认领并且撰写。这样一来与传统媒体创造导向性内容不同，Demand Media则是放大了由SEO获得的导向性，充其量只能算是导向的追随者了。虽然Demand Media并不能做到&amp;#8220;语不惊人死不休&amp;#8221;，但是，这样的中庸之道为它带来了巨大的财富。由于&lt;strong&gt;使用了SEO算法代替人力来选择写作的主题&lt;/strong&gt;，Google等搜索引擎对Demand Media旗下的65个社会化媒体眷顾有加，为它们带来了巨大的流量，广告点击收益自然也就水涨船高了。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;暂且不说Demand Media是否最终能够上市，造就又一个财富神话，光看它的模式都极具吸引力了。也许您会不屑于这种简单的模式，但它确实在某种程度上解决了UGC无法赚钱的老大难问题。Michael认为，Demand Media与其它Web 2.0网站一样，充分利用了网络的扁平性，以低成本获得了高质量的内容。而由于很精妙地解决了导向的问题，Demand Media一开始得到的就是极具价值的内容，就是24K纯金；反观其它UGC网站，内容虽多却良莠不齐。没错，是金子总会发光，网站也得有&amp;#8220;吹尽狂沙&amp;#8221;的能力才可以将金子呈现给用户啊。Michael相信，从内容生产的源头去解决信息去噪音化问题会得到越来越多的重视，而Demand Media模式的商业价值也会随之剧增。&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;参考阅读&lt;/strong&gt;：《&lt;a href="http://weiwuhui.com/3475.html" target="_blank"&gt;Demand Media：一个按什么需的媒体&lt;/a&gt;》、《&lt;a href="http://money.163.com/10/0702/09/6AJ1K6U700253G87.html" target="_blank"&gt;Demand Media：写作工厂&lt;/a&gt;》、《&lt;a href="http://www.businessinsider.com/why-demand-media-and-similar-models-will-succeed-2010-8" target="_blank"&gt;Why Demand Media (And Similar Models) will succeed&lt;/a&gt;》&lt;/li&gt;&lt;li&gt;[注：]本文首发个人博客&lt;a href="http://www.fantasysoft.cn/" target="_blank"&gt;Fantasysoft&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&#xD;
&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1807205.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/08/24/1807205.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/08/23/1806836.html</id><title type="text">云中谁寄锦书来，盛大也！</title><summary type="text">今天中午，盛大公布了万众瞩目的锦书（Bambook）的最终售价&amp;#8212;&amp;#8212;999元！这个价格让总算没有辜负Michael对其的喜爱，于是第一时间到锦书的官网上排队预订，凑个热闹，排到了第1328位。就在完成支付的两三分钟之内，在Michael的后面又多了23位同好者参与排队，锦书的受欢迎程度可见一斑了。（截止本文发布，已有6600多人参与了锦书预订。您可以通过点击之里查看现在的排队...</summary><published>2010-08-23T14:58:00Z</published><updated>2010-08-23T14:58:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/08/23/1806836.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/08/23/1806836.html"/><content type="html">&lt;p&gt;今天中午，盛大公布了万众瞩目的锦书（Bambook）的最终售价&amp;#8212;&amp;#8212;999元！这个价格让总算没有辜负Michael对其的喜爱，于是第一时间到&lt;a href="http://bambook.sdo.com/" target="_blank"&gt;&lt;font  color="#000000"&gt;锦书的官网&lt;/font&gt;&lt;/a&gt;上排队预订，凑个热闹，排到了第1328位。就在完成支付的两三分钟之内，在Michael的后面又多了23位同好者参与排队，锦书的受欢迎程度可见一斑了。（截止本文发布，已有6600多人参与了锦书预订。您可以通过&lt;a href="http://bambook.sdo.com/SeqOrder/SeqIndex.aspx" target="_blank"&gt;&lt;font  color="#000000"&gt;点击之里&lt;/font&gt;&lt;/a&gt;查看现在的排队情况哦！）&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;img  title="queue" src="http://www.fantasysoft.cn/wp-content/uploads/2010/08/queue.jpg" alt="" width="487" height="71" /&gt;&lt;/p&gt;&#xD;
&lt;img style="float: right;" title="Bambook" src="http://www.fantasysoft.cn/wp-content/uploads/2010/08/Bambook-239x300.jpg" alt="" width="239" height="300" /&gt;&lt;p&gt;说实在的，锦书的定价可谓吊足了胃口。早期微博上的宣传、业内的测评让Michael对这款能够使用太阳能、有强大内容支撑的电子书产品垂涎三尺，颇想先用为快。但是，随着内测活动的推出，Michael一下子没了兴趣。尽管内测的价格998元远低于同类产品，但是就在这火爆的&amp;#8220;998元&amp;#8221;旁边赫然写着&amp;#8220;原价3280元&amp;#8221;！这样的价格怎能点燃电子书市场，带动整个产业链的发展呢？在接下来的日子里，有很多朋友对这样的定价提出了质疑，甚至是批评，一时间，对锦书的定价众说纷纭。最终的结果，大家也知道了。我相信，这是一个厚道的价格，它让更多人能够拥有电子书，让捧着电子书进行阅读成为一种习惯，而不仅仅是一种时尚。&#xD;
Michael相信，盛大今年乃至未来几年，锦书都将是最为人津津乐道的产品。在国内其它诸如汉王、翰林等传统电子书厂商都只靠卖硬件盈利的时候，盛大抛出了低价铺货的杀手锏，成为了这个市场的搅局者：一方面压缩了其它电子厂商的盈利空间；而另一方面为内容盈利模式打下坚实的基础。在得终端者得天下的年代，如果锦书成为了电子书市场占有率最高的终端，那么手握国内原创文学市场份额的80%以上的盛大文学将会迎来丰硕的收割期。当Michael还在为锦书那高昂的&amp;#8220;原价&amp;#8221;扼腕的时候，盛大早已按照自己原先的布局在行动了，争议只会吸引更多的眼球，&amp;#8220;原价&amp;#8221;给我们开了一个小小的玩笑。&#xD;
说到这里，我不禁要对盛大的运筹帷幄而拍手称道了。早在2004年，&lt;a href="http://home.donews.com/donews/article/6/68552.html" target="_blank"&gt;&lt;font  color="#000000"&gt;盛大就收购了当时在国内领先的原创文学门户网站&amp;#8212;&amp;#8212;起点中文网&lt;/font&gt;&lt;/a&gt;，随后又在2007年、2008年相继收购了晋江原创网与红袖添香网。Michael并没有完全看懂这些收购事件，权将此作为盛大盒子失败之后，盛大为其夸下的海口&amp;#8212;&amp;#8212;打造&amp;#8220;网上迪斯尼&amp;#8221;而作的权宜之策。但是，从&lt;a href="http://tech.sina.com.cn/i/2008-07-04/15382305236.shtml" target="_blank"&gt;&lt;font  color="#000000"&gt;盛大文学的成立&lt;/font&gt;&lt;/a&gt;，到去年圣诞节前夕，&lt;a href="http://tech.sina.com.cn/i/2009-12-23/10433703043.shtml" target="_blank"&gt;&lt;font  color="#000000"&gt;盛大文学啃下了大名鼎鼎的榕树下&lt;/font&gt;&lt;/a&gt;，再到今年2月份，&lt;a href="http://tech.sina.com.cn/i/2010-02-11/01353853097.shtml" target="_blank"&gt;&lt;font  color="#000000"&gt;盛大文学将小说阅读网纳入麾下&lt;/font&gt;&lt;/a&gt;。此时，Michael才幡然醒悟，盛大是在打造一个原创内容的帝国。为了完成内容层面的资本积累，盛大花了整整六年时间！而今，有了内容作为坚强后盾，攻占终端市场成为了盛大的首要任务，锦书999元的定价无疑是一个点燃电子书市场的重磅炸弹。也许，中国电子书市场乃至出版业的历史就此改写！&#xD;
接下来，锦书是否能够坐上电子书终端的头把交椅呢？内容创富的行动是否从此不再局限于网络文学？传统的出版商们又该如何应对？这是一场精彩异常的好戏。也许，在不久的将来，我们会拿着锦书X.0来回味这段历史。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;[注：]本文首发个人博客&lt;a href="http://www.fantasysoft.cn/" target="_blank"&gt;Fantasysoft&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1806836.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/08/23/1806836.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/08/19/1804054.html</id><title type="text">《黑客》月刊中文版第一期正式发布，很给力！推荐围观！</title><summary type="text">[注：]首先说明一下，这不知道算不算广告贴，但是所介绍的月刊，不管中英文版都真的很给力，推荐大家下载阅读！您听说过《黑客》月刊么？这是一本在今年六月份才创刊的杂志，虽然只是初出茅庐，但是它的来头可不小哦！《黑客》月刊的内容正是来自著名的创业孵化公司Y-Combinator旗下的一个类似Digg的分站点&amp;#8212;&amp;#8212;Hacker News。在国外，Hacker News是一个在程序员以...</summary><published>2010-08-19T15:43:00Z</published><updated>2010-08-19T15:43:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/08/19/1804054.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/08/19/1804054.html"/><content type="html">&lt;p&gt;[注：]首先说明一下，这不知道算不算广告贴，但是所介绍的月刊，不管中英文版都真的很给力，推荐大家下载阅读！&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;您听说过&lt;a href="http://hackermonthly.com/" target="_blank"&gt;《黑客》月刊&lt;/a&gt;么？这是一本在今年六月份才创刊的杂志，虽然只是初出茅庐，但是它的来头可不小哦！《黑客》月刊的内容正是来自著名的创业孵化公司Y-Combinator旗下的一个类似Digg的分站点&amp;#8212;&amp;#8212;&lt;a href="http://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt;。在国外，Hacker News是一个在程序员以及创业者当中十分流行的网站，享有盛誉。于是乎，Lim Cheng Soon冒出了要将Hacker News中月度最受欢迎的文章编辑成册的念头。在Y-Combinator的老板Paul Graham的支持下，Lim Cheng Soon从一个没有任何杂志出版经验的新手成为了《黑客》月刊的总编。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;到现在为止，《黑客》月刊已经出版了三期，&lt;a href="http://hackermonthly.com/reviews.html" target="_blank"&gt;好评如潮&lt;/a&gt;。我们可以通过&lt;a href="http://hackermonthly.com/" target="_blank"&gt;《黑客》月刊&lt;/a&gt;的官方网站上免费下载到完整的版本，而国内热心的黑客爱好者&amp;#8212;&amp;#8212;&lt;a href="http://linux.cn/home/space-3971.html" target="_blank"&gt;吴安寿&lt;/a&gt;将《黑客》月刊第一期翻译成中文，并且&lt;a href="http://linux.cn/home/space-3971-do-thread-id-4586.html" target="_blank"&gt;在昨天早上正式发布&lt;/a&gt;了，欢迎大家下载阅读（&lt;a href="http://code.google.com/p/hackerzhcn/downloads/detail?name=cn%231hacker.pdf&amp;amp;can=2&amp;amp;q=#makechanges" target="_blank"&gt;下载网址在此&lt;/a&gt;），多多支持！真的非常敬佩吴安寿童鞋所付出的努力，让更多的程序员能够第一时间发现来自国外的新鲜思想，而我本人也正是受益者，但愿这个翻译项目能够持之以恒，越来越受关注。在此，我把《黑客》月刊中文版的主编吴安寿在中文版写下的&amp;#8220;译者后语&amp;#8221;转载于此，希望更多的朋友可以加入到这个项目中来：&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;strong&gt;译者后语&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;致歉&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;说点个人的事，因为我把我的女朋友得罪了，惹她不高兴了，我心里十分愧疚，在此向我的女朋友说一声：&amp;#8220;宝贝，对不起！&amp;#8221;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;感谢&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;正值《黑客》简体中文非官方翻译第一期的发布，我向所有为这个项目做出贡献的人们表示最衷心的感谢！ 感谢《HACKER&amp;nbsp;MONTHLY》，感谢Lim Cheng Soon 主编，感谢所有翻译文章的兄弟姐妹们，感谢所有向我们提出问题、建议的网友们，感谢《HACKER&amp;nbsp;MONTHLY》英文版的赞助商们，感谢LINUX 上的管理员和网友们，感谢译言网上的网友们，感谢GOOGLE 公司为我们提供的CODE 托管平台，感谢所有围观、下载、转载、传播、宣传、讨论等我们《黑客》中文的网友们&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&lt;p&gt;我衷心地感谢你们，感谢你们的帮助和支持！再次感谢你们！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;缘起&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;7 月30 日我看到了《HACKER MONTHLY》的新闻，并下载了PDF版本的杂志，看了前面的几页，觉得这杂志真不错，要是有中文版的该有多好呀！要是能让所有想看《HACKER MONTHLY》的华人都能看到中文版的《黑客》那该有多好呀！可惜官方没有发布中文版的，于是就试图在互联网上寻找翻译好的文章，有幸的是，我居然真找到了几篇，可是仍然有很多没有中文版呀！怎么办呢？翻译吧！我就试着翻译了一篇，然后就发布到*LINUX 上。当然，本人翻译得质量肯定不怎么样，我也就翻译个大概意思。因为我当年考了四次英语六级都没有过，而我更非计算机专业的，因此在翻译质量上还请大家见谅，也欢迎大家提供指正。&lt;/p&gt;&#xD;
&lt;p&gt;随后我又翻译了几篇都发布在*LINUX 上，随后我就想起了版权的事情，于是就向Lim Cheng Soon 主编发EMAIL 请求翻译杂志的授权。Lim Cheng Soon 主编很快就给我回复，鼓励我做中文翻译，并在其官方的TWITTER 为中文翻译做宣传。后来，我就在GOOGLE CODE上创立了《黑客》中文项目，并在译言网上建立了项目，并申请了《黑客》中文项目的官方电邮：hackermonthlyzhcn@gmail.com 。&lt;/p&gt;&#xD;
&lt;p&gt;在接下来的日子里，多位志愿者朋友加入了我们的队伍，其中最为优秀的便是胡良辉和abctfq2008 。他们为杂志的发布做出了杰出的贡献。在大家的共同努力下，《黑客》中文第一期诞生了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;展望&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;真的希望以后我们的队伍能够壮大，要是有30 个人的话，我想我们的发布进度就能够和官方基本同步了。另外也希望有美工好的，排版好的志愿者加入，这样我们就能把更加精美的杂志呈现在大家面前了。&lt;/p&gt;&#xD;
&lt;p&gt;真的希望我们的翻译工作能够得到大家的认可和认同。真的希望《黑客》中文的下载量能够很大很大，能够传播得很远很远。真的希望大家能够通过《黑客》中文了解真正的黑客及黑客文化，将黑客与那些专搞破坏的&amp;#8220;骇客&amp;#8221;区分开来。&lt;/p&gt;&#xD;
&lt;p&gt;未来是美好的，未来是需要我们共同去开创的。&lt;/p&gt;&#xD;
&lt;p&gt;广大朋友们，让我们一起共同努力，将《黑客》中文项目进行到底！&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&lt;p style="text-align: right;"&gt;吴安寿&lt;/p&gt;&#xD;
&lt;p style="text-align: right;"&gt;2010 年8 月18 日凌晨&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1804054.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/08/19/1804054.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/08/17/1801902.html</id><title type="text">比尔•盖茨：未来最好的教育来自互联网</title><summary type="text">[注：] 本文首发个人博客&amp;#8212;&amp;#8212;Fantasysoft比尔&amp;#8226;盖茨从Microsoft退休之后，并没有过上悠闲的日子，他还像原来那样忙碌，一刻都不曾停歇。除了和妻子一起经营他们的基金之余，还积极地倡导大家关注非洲贫困地区的生活状况，关注学生们所接受的教育。继去年在TED大会上大谈教育之后，比尔&amp;#8226;盖茨在本月初出席了在加州太浩湖举行的Techonomy会议，...</summary><published>2010-08-17T14:42:00Z</published><updated>2010-08-17T14:42:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/08/17/1801902.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/08/17/1801902.html"/><content type="html">&lt;p&gt;[注：] 本文首发个人博客&amp;#8212;&amp;#8212;&lt;a href="http://www.fantasysoft.cn/"&gt;Fantasysoft&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;比尔&amp;#8226;盖茨从Microsoft退休之后，并没有过上悠闲的日子，他还像原来那样忙碌，一刻都不曾停歇。除了和妻子一起经营他们的基金之余，还积极地倡导大家关注非洲贫困地区的生活状况，关注学生们所接受的教育。继去年在&lt;a href="http://www.fantasysoft.cn/archives/218" target="_blank"&gt;&lt;font  color="#000000"&gt;TED大会上大谈教育&lt;/font&gt;&lt;/a&gt;之后，比尔&amp;#8226;盖茨在本月初出席了在加州太浩湖举行的&lt;a href="http://techonomy.com/" target="_blank"&gt;&lt;font  color="#000000"&gt;Techonomy&lt;/font&gt;&lt;/a&gt;会议，并且在会上提出有关未来教育的新观点&amp;#8212;&amp;#8212;在未来几年，人们学习的最主要场所将不再是大学，而是互联网。&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;img  title="GatesAtTechonomy" src="http://www.fantasysoft.cn/wp-content/uploads/2010/08/GatesAtTechonomy.jpg" alt="" width="500" height="287" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;比尔&amp;#8226;盖茨在会上说：&amp;#8220;&lt;strong&gt;未来五年之内，我们将可以从互联网免费获得世界上最好的课程，这会比任何一所大学所提供的课程要好得多。&lt;/strong&gt;&amp;#8221;对于这样的观点，您会不会觉得有点不可思议呢？Michael联想到了&lt;a href="http://www.fantasysoft.cn/archives/207" target="_blank"&gt;在之前一篇文章&lt;/a&gt;所提到的Open Course Ware，通过这个计划，我们现在可以看到来自世界一流大学的教学视频、课堂笔记以及习题。您可以从&lt;a href="http://www.ocwconsortium.org/members/" target="_blank"&gt;这里&lt;/a&gt;看到这个计划包括了发起者麻省理工学院、著名的加州大学、密歇根大学等等让人心驰向往的求学圣地，而且参与计划的大学遍布全球。有了OCW，是不是就意味着互联网就会代替大学成为提供高等教育的场所呢？&#xD;
对于互联网这所最开放的大学，它依然面临很多问题：&lt;strong&gt;首先是学历的问题：&lt;/strong&gt;如果我认真学完了麻省理工学院某个专业的课程，能得到让人梦寐以求的学历证或者学位证么？答案是否定的。这在一定程度上挫伤了很多人学习的积极性；&lt;strong&gt;第二是学习场所的问题：&lt;/strong&gt;尽管学习可以无处不在，但是集中的学习方式能够让学生更专心，并且能够一起讨论，真正提高学习的效率。没有了集中的学习场所，能够认真学完课程的人可谓寥若晨星了。实际上，既提供网络课程，并且能够为完成学业的学生颁发证书的教育系统已经存在了：&lt;a href="http://www.open.ac.uk/" target="_blank"&gt;The Open University&lt;/a&gt;。但是，由它颁发出来的证书又具有怎样的权威性呢？&#xD;
&lt;/p&gt;&lt;p&gt;互联网要代替大学成为学习的主要场所，还有很长的路要走。不过，Michael倒是觉得开放的态度让更多的人可以拥有受教育的权利，这是一个非常伟大的进步。我们现在还不能指望中国有哪所大学加入到OCW，但是，各种各样的广播电视大学是否可以藉此为自己提升一个档次呢？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;文中图片：&lt;/strong&gt;来自&lt;a href="http://www.flickr.com/photos/jurvetson/4866317693" target="_blank"&gt;Flickr&lt;/a&gt;，由&lt;a href="hhttp://www.flickr.com/people/jurvetson/" target="_blank"&gt;Steve Jurvetson&lt;/a&gt;于2010年8月6日上传，原作者选用的CC协议为&amp;#8220;&lt;a href="http://creativecommons.org/licenses/by/2.0/deed.zh" target="_blank"&gt;署名&lt;/a&gt;&amp;#8221;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1801902.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/08/17/1801902.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/07/10/1775053.html</id><title type="text">CaptureDeviceManager.getDeviceList方法返回null对象问题探究</title><summary type="text">最近由于项目的需要，偶开始倒腾Java的媒体框架&amp;#8212;&amp;#8212;Java Media Framework（缩写为JMF）。在编写一个实时语音聊天的程序的时候，需要使用以下方法获得音频采集设备的列表：CaptureDeviceManager.getDeviceList(Formatformat) 这是一个很简单的方法。但是，当我在Eclipse中将代码编译完毕并且运行之，这个方法却返回了...</summary><published>2010-07-10T15:49:00Z</published><updated>2010-07-10T15:49:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/07/10/1775053.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/07/10/1775053.html"/><content type="html">&lt;p&gt;最近由于项目的需要，偶开始倒腾Java的媒体框架&amp;#8212;&amp;#8212;&lt;a href="http://java.sun.com/javase/technologies/desktop/media/jmf/" target="_blank"&gt;Java Media Framework（缩写为JMF）&lt;/a&gt;。在编写一个实时语音聊天的程序的时候，需要使用以下方法获得音频采集设备的列表：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;span style="color: #000000"&gt;CaptureDeviceManager.getDeviceList(Format&amp;nbsp;format)&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;这是一个很简单的方法。但是，当我在Eclipse中将代码编译完毕并且运行之，这个方法却返回了null，而不是所预期的音频采集设备列表！通过搜索，我发现也有不少朋友也遇到了这样的问题，更是有朋友发现在IDE中运行JMF程序的时候，该方法返回null，但是在命令行的状态下运行程序却能得到正确的结果。于是乎，我把问题锁定到classpath上面，毕竟在IDE中运行程序，所使用的classpath是有IDE本身确定的。以Eclipse为例，我们可以在RUN Configurations中对classpath进行设置如下图所示： &lt;/p&gt;&#xD;
&lt;div align="center"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/perhaps/classpath.jpg" width="600" height="416" /&gt;&lt;/div&gt;&#xD;
&lt;p&gt;那么，我们又该对classpath进行怎样的设置呢？原来，出现这样的问题是在于JMF无法找到自己安装时所生成的jmf.properties文件（位于JMF安装目录下的lib中）。在IDE中运行程序的时候，classpath并没有指向JMF安装目录下lib中的jmf.jar，所以，程序就找不到jmf.properties文件，也就没法获得设备列表了。将jmf.jar加入至classpath，程序运行正常。&lt;/p&gt;&#xD;
&lt;p&gt;该问题的解决方案虽然很简单，但是，Michael觉得有必要将其记录下来，毕竟它的出现确实让人太迷惑了。&lt;s&gt;因为在默认的JRE System Library中就包含了jmf.jar&lt;/s&gt;（除了jmf.jar之外，还有sound.jar，这两个位于jdk.home/jre/lib/ext目录下的jar包实际上是在安装JMF的时候，安装程序复制到该目录下的），也就是说，我们并不需要添加其它的jar都可以编译并且运行基于JMF的程序了。这无疑为问题的解决平添了一道屏障，而中文的论坛以及博客也没有给出该问题的解决方案。有关该问题解答的英文版本在&lt;a href="http://forums.sun.com/thread.jspa?threadID=5405224" target="_blank"&gt;这里&lt;/a&gt;。（补充：&lt;strong&gt;为了能够同时使用开源的FMJ和JMF对项目进行测试，最简单的办法就是将位于jdk.home/jre/lib/ext目录下的jmf.jar以及sound.jar删除&lt;/strong&gt;）&lt;/p&gt;&#xD;
&lt;p&gt;这个问题让Michael了解到：在编写以及发布JMF程序的时候，我们需要关注jmf.properties文件的位置以及如何根据不同的机器生成该文件。毕竟不是没一台机器都安装的jmf，如果需要发布基于JMF的程序，我们又应该做足哪些准备工作呢？这是由该问题引发的疑问，您是否有答案呢？欢迎您的回复，谢谢！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1775053.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/07/10/1775053.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/06/20/1761263.html</id><title type="text">为了生活更美好，玩游戏吧！</title><summary type="text">[注：] 本文首发Metaidea.cn在Tony之前发表的一篇题为《TED怎么应用于课堂》的文章中，我们可以看到台湾的一位设计师在课堂上将TED演讲的视频应用到了教学上。这是一件非常有意义的事情，值得每一位老师去借鉴与学习，因此，Tony在文中讲述了&amp;#8220;基于TED演讲的课堂&amp;#8221;的构思。这是一篇引人入胜的文章，除了Tony漂亮的构思之外，还有那被作为典范的TED演讲&amp;#8212...</summary><published>2010-06-20T03:05:00Z</published><updated>2010-06-20T03:05:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/06/20/1761263.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/06/20/1761263.html"/><content type="html">&lt;p&gt;[注：] 本文首发&lt;a href="http://www.metaidea.cn/archives/430" target="_blank"&gt;Metaidea.cn&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在Tony之前发表的一篇题为&lt;a href="http://www.metaidea.cn/archives/424" target="_blank"&gt;《TED怎么应用于课堂》&lt;/a&gt;的文章中，我们可以看到台湾的一位设计师在课堂上将TED演讲的视频应用到了教学上。这是一件非常有意义的事情，值得每一位老师去借鉴与学习，因此，Tony在文中讲述了&amp;#8220;基于TED演讲的课堂&amp;#8221;的构思。这是一篇引人入胜的文章，除了Tony漂亮的构思之外，还有那被作为典范的TED演讲&amp;#8212;&amp;#8212;&lt;a href="http://www.ted.com/talks/lang/chi_hans/jane_mcgonigal_gaming_can_make_a_better_world.html" target="_blank"&gt;《游戏创造美好生活》&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p align="center"&gt;&lt;embed height="326" type="application/x-shockwave-flash" width="446" src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" flashvars="vu=http://video.ted.com/talks/dynamic/JaneMcGonigal_2010-medium.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/JaneMcGonigal-2010.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=799&amp;amp;introDuration=15330&amp;amp;adDuration=4000&amp;amp;postAdDuration=830&amp;amp;adKeys=talk=jane_mcgonigal_gaming_can_make_a_better_world;year=2010;theme=design_like_you_give_a_damn;theme=new_on_ted_com;theme=media_that_matters;theme=what_s_next_in_tech;theme=the_rise_of_collaboration;theme=art_unusual;theme=a_taste_of_ted2010;event=TED2010;" allowscriptaccess="always" allowfullscreen="true" bgcolor="#ffffff" wmode="transparent" pluginspace="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/embed&gt;Michael是70后和80后的骑墙派，小的时候也非常喜欢电子游戏，红白机、Gameboy，坦克大战、超级玛丽、魂斗罗、世嘉与任天堂都是儿时的记忆。但是，父母还有老师都告诉我，好孩子不能玩电子游戏。各种各样的媒体都在大肆渲染电子游戏如何如何让孩子误入歧途。一时间，人们对电子游戏这个舶来之物的恐惧有如瘟疫，严厉并且彻底地压制孩子对电子游戏的兴趣；但是另一方面，孩子们在重压之下对电子游戏依旧趋之若鹜。父母在游戏机室门前痛打孩子的一幕在那个年代可谓司空见惯了。随着时间的推移，当年的孩子长大成人，也为人父母了，对游戏的爱并没有消退；而互联网的普及、盛大的造富传奇也为游戏的正名起到了推波助澜的作用。现在，孩子们玩电子游戏已经不再是什么大逆不道的事情了，但是，我们对电子游戏是否有了正确的认识，是否能够扩大电子游戏的积极影响，而不至于玩物丧志呢？&lt;/p&gt;&#xD;
&lt;p&gt;《游戏创造美好生活》的演讲者&lt;a href="http://www.avantgame.com/" target="_blank"&gt;Jane McGonigal&lt;/a&gt;是一位游戏设计师，她提出了一个让人惊讶的观点：现在人们用在网络游戏的时间可以达到每周30亿小时（这个数字也太恐怖了吧！生活中有那么多紧迫的问题需要去解决呢，大家还花费那么多时间去玩游戏，这不是舍本逐末吗？），但是，这些时间一点都不多，对于解决现实生活中的问题还远远不够呢！&lt;strong&gt;为了能够更好地在地球上生存，我们需要大量地增加游戏时间，每周需要210亿小时！也就是说，为了解决诸如饥饿、贫困、气候变化、全球冲突等问题，我们应当鼓励大家花更多时间去玩游戏，至少每周210亿小时。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这个观点着实让Michael为之瞠目结舌：太不可思议了！对于这样的论断，Jane自然有她的诠释。在虚拟的游戏世界中，每个玩家都会有自己的角色，他们需要完成一些任务来提升自己的经验值，当经验值达到一定数值之后，等级就会提升，角色也会发生变换，这是一个量变到质变的过程。游戏的设计者并不会要求玩家们去做那些与自己角色等级不匹配的事情，譬如去打一个不可能打败的怪兽，那么，&lt;strong&gt;玩家们很容易就得到相应的成就感&lt;/strong&gt;；此外，玩家们的目标很明确，他们会将所有精力都集中于解决某个难题，并且会为了实现这个目标而组建团队，&lt;strong&gt;把协作精神发挥到极致&lt;/strong&gt;；在游戏世界里，每个玩家都会觉得可以做到更好的自己，极力去帮助有需要的人，并且能够持之以恒地解决一个问题。&lt;strong&gt;面对挫折与失败，他们会毫无畏惧，持续奋斗&lt;/strong&gt;。对于玩家们的努力，虚拟的游戏世界会给予持续的反馈，这是虚拟世界最为吸引人的地方。然而，在现实生活中，我们遇到困难和挫折，就不会是处于游戏世界中的那种感觉了，会觉得很压抑、迷茫、不知所措，甚至灰心丧气，对生活失去信心。&lt;/p&gt;&#xD;
&lt;p&gt;事实上，全球5亿多的游戏玩家是一个极其专注、拥有专属技能并且相信自己能够改变世界的人群，只是他们一直都困扰于&amp;#8220;虚拟世界优于现实世界&amp;#8221;的问题，他们无法将虚拟世界的成就感带到现实生活中来。也就说，只要能够填补虚拟世界与现实世界的鸿沟，这5亿多的玩家就会成为现实世界的&amp;#8220;救世主&amp;#8221;。为此，Jane所在的&lt;a href="http://iftf.org/" target="_blank"&gt;未来研究所&lt;/a&gt;发明了三种网络游戏：&amp;#8220;&lt;a href="http://worldwithoutoil.org/" target="_blank"&gt;World Without Oil&lt;/a&gt;&amp;#8221;，&amp;#8220;&lt;a href="http://www.superstructgame.org/" target="_blank"&gt;Superstruct&lt;/a&gt;&amp;#8221;，以及最近推出的&lt;a href="http://www.urgentevoke.com/" target="_blank"&gt;Evoke&lt;/a&gt;。这些都是与现实世界紧密相关的游戏，尽管里面的场景在现实生活中并不存在，却是我们未来肯定会遇到的，譬如石油耗尽（World Without Oil），人类在地球上只有23年的生存时间（Superstruct）。这样的网络游戏潜移默化地改变了玩家们的生活方式，他们在游戏中所获得的经验值在现实世界中，同样适用。&lt;/p&gt;&#xD;
&lt;p&gt;Michael认为：这是一个非常棒的演讲，因为Jane史无前例地将网络游戏摆在了无比重要的位置。网络游戏消耗着人们大量的时间，常理会认为玩物丧志，而Jane却告诉我们，网络游戏能够拯救世界。我喜欢这样的观点，里面充满了辨证的思维以及创新的思考。总之，这是一个值得反复观看的演讲，相信我。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1761263.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/06/20/1761263.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/perhaps/archive/2010/05/16/1736804.html</id><title type="text">三言两语话委托</title><summary type="text">几天前，Michael向大家推荐了刚发布的IronPython Tools for Visual Studio。不知道这个消息是否能够为大家学习IronPython注入少许动力呢？有了IDE的支持，Michael的学习热情也随之高涨了，把若干年前的随笔翻箱倒柜的看了个遍，那个感慨啊&amp;#8230;&amp;#8230;对技术充满激情的岁月或许再也回不去了。咳，别感春悲秋嘛，这可是在写技术随笔哦！好吧，让我们...</summary><published>2010-05-16T08:18:00Z</published><updated>2010-05-16T08:18:00Z</updated><author><name>FantasySoft</name><uri>http://www.cnblogs.com/perhaps/</uri></author><link rel="alternate" href="http://www.cnblogs.com/perhaps/archive/2010/05/16/1736804.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/perhaps/archive/2010/05/16/1736804.html"/><content type="html">&lt;p&gt;几天前，Michael&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/05/11/1732203.html" target="_blank"&gt;向大家推荐了刚发布的IronPython Tools for Visual Studio&lt;/a&gt;。不知道这个消息是否能够为大家学习IronPython注入少许动力呢？有了IDE的支持，Michael的学习热情也随之高涨了，把若干年前的随笔翻箱倒柜的看了个遍，那个感慨啊&amp;#8230;&amp;#8230;对技术充满激情的岁月或许再也回不去了。咳，别感春悲秋嘛，这可是在写技术随笔哦！好吧，让我们回归正题。&lt;/p&gt;&#xD;
&lt;p&gt;在翻箱倒柜过程中，我看到了在2007年2月发表的&lt;a href="http://www.cnblogs.com/perhaps/archive/2007/02/07/642785.html" target="_blank"&gt;《不谈模式，只谈实现》&lt;/a&gt;。这是受到&lt;a href="http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html" target="_blank"&gt;Justin一篇美文&lt;/a&gt;的启发，我所写的当年唯一一篇有关程序设计的文章。对于这篇随笔，老赵给我留下了这样的评论：&lt;/p&gt;&#xD;
&lt;blockquote style="margin-right: 0px" dir="ltr"&gt;&#xD;
&lt;p&gt;&amp;#8220;这就是动态语言啊，相当于保留函数指针。 &lt;br /&gt;C#里面很像函数指针的是什么的呢？就是delegate。 &lt;br /&gt;而delegate的典型应用是什么呢？就是事件机制。 &lt;br /&gt;那么Java里的事件机制是怎么做到的呢？就是定义EventListener然后实现相应的方法。这就是和那个OO的Duck类似的实现了，一个Duck和一个EventListener在这个方面有些接近。 &lt;br /&gt;如果不熟悉Java的Event Listener的话也可以用传统的Observer模式来看，而且其实Event Listener等等，其实不就是用了Observer模式嘛。&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;说实在话，由于自己水平有限，偶对这个评论并不能完全理解，特别是老赵提到了我并不是非常熟悉的delegate。到三年后的今天，偶再次阅读这条评论的时候，不得不由衷赞叹：老赵的评论字字珠玑！对于偶这个Java开发者来说，委托（delegate）是一个相对陌生的概念，即便是&lt;a href="http://www.cnblogs.com/perhaps/archive/2005/09/01/228302.html" target="_blank"&gt;动态代理&lt;/a&gt;也并非委托在Java世界里的孪生兄弟。事实上，Java语言为什么能够如此流行，&lt;span style="color: red"&gt;抛弃了难以驾驭的指针，降低了学习门槛&lt;/span&gt;是重要原因之一。但是，没了指针，也直接导致无法使用函数指针，这让很多C++开发人员使用Java就等于丧失了大半功力。C#作为Java后来者，在灵活性和简单之间取得了良好的平衡点，譬如，&lt;a href="http://www.cnblogs.com/perhaps/archive/2004/07/14/23957.html" target="_blank"&gt;在方法参数上，Java只能传值，而C#既可以传值也可以传引用&lt;/a&gt;。对于函数指针，C#则创造了新的机制与之对应&amp;#8212;&amp;#8212;那就是委托了。如果您和我一样，对委托了解得不够深入的话，建议您将&lt;a href="http://www.cnblogs.com/JimmyZhang" target="_blank"&gt;JimmyZhang&lt;/a&gt;的经典文章&amp;#8212;&amp;#8212;&lt;a href="http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html" target="_blank"&gt;《C# 中的委托和事件》&lt;/a&gt;反复研读几遍，就会对委托有充分的了解了。如果您也和我一样，对为什么需要委托也心存疑虑的话，建议您阅读老赵的美文&amp;#8212;&amp;#8212;&lt;a href="http://www.infoq.com/cn/articles/higher-order-function" target="_blank"&gt;《高阶函数、委托与匿名方法》&lt;/a&gt;，这也是一篇值得反复品味的文章。看了上述两篇文章之后，我们可以得出这样的结论：&lt;span style="color: red"&gt;委托类型实现了强类型函数指针的功能，通过委托类型，我们可以将某个函数封装起来作为另外一个函数的参数&lt;/span&gt;。这个特点在函数编程语言（譬如IronPython）中则不是什么新鲜事了，对照《C# 中的委托和事件》中的第一个完整的范例，使用IronPython实现之：&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
--&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;EnglishGreeting(name):&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Morning,&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;name)&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ChineseGreeting(name):&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;早上好,&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;name)&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;GreetPeople(name,&amp;nbsp;MakeGreeting):&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MakeGreeting(name)&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;GreetPeople(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Jimmy&amp;nbsp;Zhang&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;EnglishGreeting)&lt;br /&gt;Morning,Jimmy&amp;nbsp;Zhang&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;GreetPeople(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;张子阳&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;ChineseGreeting)&lt;br /&gt;早上好,张子阳&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;由于IronPython是一门动态语言，并且支持函数编程范式，所以我们可以直接将函数（方法）作为参数传递给另外一个函数（方法）。而在C#中，要实现这一点就需要使用委托类型了。&lt;/p&gt;&#xD;
&lt;p&gt;接下来，既然C#创造了委托类型，那么它的应用又在哪呢？是的，正如老赵的评论所言，&lt;span style="color: red"&gt;事件机制是委托最典型的应用&lt;/span&gt;。有很多朋友都会觉得委托的使用有些多此一举，直接调用不就好了，那么兜兜转转干嘛呢？实际上，如果您希望直接调用也没啥问题，但是当需求改变的时候，您发现代码有无数的地方需要修改，那个时候就估计一个头两个大了。&lt;span style="color: red"&gt;通过委托，我们可以更好地实现Observer模式，而这个模式定义了对象之间一对多的&lt;/span&gt;&lt;span style="color: red"&gt;依赖关系，当一个对象改变了状态，那么所依赖的多个对象就会收到通知并且更新状态。&lt;/span&gt;要更好地了解Observer这个模式，除了《C# 中的委托和事件》中的讲解之外，仍旧是JimmyZhang的力作&amp;#8212;&amp;#8212;&lt;a href="http://www.cnblogs.com/JimmyZhang/archive/2008/06/18/1225061.html" target="_blank"&gt;《重温Observer模式--热水器&amp;#183;改》&lt;/a&gt;。文中给出了不使用委托实现Observer的方法，大家可以对比一下，繁简立现！看到文中IObservable接口的Register(IObserver obj)和Unregister(IObserver obj)方法，大家会联想到什么？是的，就是在.NET事件机制的典型应用当中，经常出现的+=和-=操作符，它们的作用在于更改委托对象所引用的方法列表。如果不使用委托，那么我们并不能直接对引用的方法列表进行操作，而要面向接口进行编程了。而对于IronPython来说，既然函数是一等公民，可以作为方法的参数，那么通过list的append方法就能轻松操作引用的方法列表了。参照JimmyZhang的两篇文章，我们也可以使用IronPython实现类似的热水器功能：&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;makeAlarm(temperature):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Alarm:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;str(temperature))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;showMsg(temperature):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;print&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Display:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;str(temperature))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Heater:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;__init__&lt;/span&gt;&lt;span style="color: #000000"&gt;(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.event&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;[]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;def&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;boilWater(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;range(&lt;/span&gt;&lt;span style="color: #000000"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.temperature&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;self.temperature&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;95&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[m(self.temperature)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;m&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;self.event]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;heater&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Heater()&lt;br /&gt;heater.event.append(makeAlarm)&lt;br /&gt;heater.event.append(showMsg)&lt;br /&gt;heater.boilWater()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;上述代码中的[m(self.temperature)&amp;nbsp;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;m&amp;nbsp;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&amp;nbsp;self.event]使用了IronPython强大的列表内涵特性，self.event是一个list，其中的元素就是makeAlarm和showMsg这两个函数。通过m(self.temperature)就能够以self.temperature为参数调用上述两个函数了。大家是否觉得使用IronPython所编写的代码会更加短小精悍呢？&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;综上所述，如果您不明白什么是委托，那么您可以把它看作强类型的函数指针；如果您不知道什么是函数指针，那么您可以把它看作将函数（方法）作为参数传递的一种机制；如果您不了解为什么需要委托，那么您可以参考一下使用与不使用委托来实现Observer模式之间的区别；如果您不知道为啥需要Observer模式，那么您可以进而了解一下&lt;a href="http://www.cnblogs.com/perhaps/archive/2004/08/15/33515.html" target="_blank"&gt;Law of Demeter&lt;/a&gt;；如果您仍然不知道为啥需要遵循Law of Demeter，那么您就可以思考一下封装性为啥是面向对象编程核心要素之一了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/perhaps/aggbug/1736804.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/perhaps/archive/2010/05/16/1736804.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
