<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
				  >
<channel>
<title><![CDATA[Saturn's Weblog]]></title>
<link>http://www.cnsaturn.com/</link>
<description><![CDATA[Saturn's weblog, STBlog官方站点]]></description>
<language>zh-CN</language>
<pubDate>Sat, 31 Jul 2010 16:57:27 -0400</pubDate>
<item>
<title><![CDATA[近况]]></title>
<link>http://www.cnsaturn.com/posts/58</link>
<pubDate>Sun, 04 Jul 2010 20:13:00 -0400</pubDate>
<description><![CDATA[<div class="text-article" id="blogContent">
 <p>
  当身边一群妹子都在喊你哥的时候，你就无法避免的真的沦为哥了。</p>
 <p>
  现在已经很少在公开网络写生活日记了，可能也是年龄慢慢变大的缘故。现在觉得这种类型的文章有种无病呻吟的感觉，就好像凤姐希望别人关注，生怕别人不知道自己 寂寞难耐。</p>
 <p>
  即将离开墨尔本回国，希望若干年之后还能发现这点文字记录（当然如果人人网那时候还存在的话），所以就有了今天这篇呻吟。</p>
 <p>
  实 话说，我非常喜欢澳洲的生活方式和自然环境，在这里大家互相尊重，彼此感恩。但这并不代表你能融入它的文化，文化这东西有时候就象水中月，镜中花可望而不 可及。换言之，什么式归属感？归属感决定你是否融入了这个社会。如果在一个没有归属感的国度里，纵使整天声色犬马，你又能得到什么？虽然在中国社会，我同 样没有多少归属感。比如，他们在选举国^家^主^席的时候，就从没有问过我等草民。但至少我还有父母，有家人。</p>
 <p>
  在墨尔本留学的这一年半，可 以说是我二十多年人生经历中异常珍贵的片段，我的性格也因此改变许多。感谢墨尔本，感谢Monash Uni，感谢所有在墨尔本的朋友，感谢我自己，当然还要感谢我父母，没有他们我也出不来。</p>
 <p>
  我也实现了我的承诺，8月中杀回广州， 作为创业者和尚未谋面的团队汇合。虽然创业绝对不会太顺利，但还是祝自己顺利些。</p>
 <p>
  马云说的好：今天很黑暗，明天更黑暗，后天就是光明。</p>
 <p>
  虽 然99％创业的人都死在明天晚上，但是总觉得年轻就是要折腾一下，不折腾就不知道自己又几斤几两。失败了怕啥，光脚不怕穿鞋的。本来就不曾拥有什么，也就 不怕失去了。</p>
 <p>
  Good luck to myself!</p>
</div>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/58</guid>
</item>
<item>
<title><![CDATA[使用回溯（Backtracking）算法解决狼，羊和卷心菜过河问题]]></title>
<link>http://www.cnsaturn.com/posts/using-backtracking-algorithm-to-solve-wolf-sheep-cabbage-problem</link>
<pubDate>Wed, 09 Jun 2010 15:03:00 -0400</pubDate>
<description><![CDATA[<p>
 <a href="http://en.wikipedia.org/wiki/Backtracking">回溯算法（Backtracking algorithm）</a>是机器搜索（Search）的基本算法之一，通常用于解决具有唯一解，但有多个限制条件的复杂问题。</p>
<p>
 以下是狼，羊和卷心菜问题的描述：</p>
<p>
 一个人需要用一条船将狼，羊河卷心菜运送到一条河的对岸。限制条件如下：</p>
<ul>
 <li>
  这条船比较小，每次仅能运送一个物体，且船的运行都需要人来控制</li>
 <li>
  当没人看管的时候，狼会吃羊，而羊会吃卷心菜。</li>
</ul>
<p>
 如何将这些这三个物体安全送到河的对岸？</p>
<p>
 对这个问题感兴趣的朋友可以<a href="http://www.plastelina.net/examples/games/CHN.html">玩玩这个逻辑游戏</a>，看你玩多少次能够将他们成功运送到对岸。</p>
<p>
 下面看看，如何使用Backtrack算法合理的分析和解决这个问题：</p>
<p>
 首先，我们对这个问题里面涉及到的状态图形化（State Representation），这样有助于我们理解问题和编写程序解决问题。</p>
<p style="text-align: center;">
 <img alt="start-goal.png" src="http://www.cnsaturn.com/uploads/start-goal.png" /></p>
<p>
 上图分别描述了我们的初始状态和目标状态，其中的字母和数字分别表示：</p>
<ul>
 <li>
  B 表示船的位置，在左边那个栏位时，表示船在起始岸边；反之，表示船在目标岸边；</li>
 <li>
  C表示cabbage（卷心菜），W表示wolf（狼），S表示sheep（羊）。</li>
 <li>
  数字表示在当前岸边物体的个数</li>
</ul>
<p>
 其次，我们要确定能够对状态进行的操作（Operators），显而易见，不管穿在那边，都可以进行如下四种操作：</p>
<ul>
 <li>
  M(W)：将狼运到对岸</li>
 <li>
  M(S): 将羊运到对岸</li>
 <li>
  M(C)：将卷心菜运到对岸</li>
 <li>
  M()：不运送任何东西，只将穿运送到对岸</li>
</ul>
<p>
 然后，我们要知道某个状态是否成功，即当前状态就是目标状态，还需要一个目标测试函数（Goal test），这个问题比较简单，不需要函数来表达，简单来说判断一个状态是否成功，需要判断起始岸的狼，羊和卷心菜数量之和为0，即以下函数：</p>
<p>
 N(C @ start) ＋ N(W @ start) + N(S @ start) = 0</p>
<p>
 以上函数，N表示数量，如N(C @ start)表示在起始岸上C的数目。</p>
<p>
 最后，在真正应用回溯（backtrack）算法之前，我们还需要确定一个或多个启发函数（heuristic function），这个函数如其名，用来指导和推测整个推导过程是否朝着正确的方向执行。这个案例的启发函数可以简单描述为：让目标岸边的狼，羊，卷心菜之和最大，即为3。</p>
<p>
 这是我们能从问题中发现的最直接的推导，好像没什么用。但对于一些没有固定答案的问题来说，它却是我们判断程序运行是否结束的依据（如果你将这种问题丢给程序去运行解决的话）。</p>
<p>
 那么没有这个函数，我们如何找出更有用的启发函数让程序知道如何最快的找到最优解。这个就需要分析具体问题了，如果你认真分析过这个问题，你会得到以下隐含条件：</p>
<p>
 <strong>狼是重口味，它不管在岸的哪一边都是不会吃卷心菜的。</strong><strong>所以，<span style="color: rgb(255, 0, 0);">我们需要先将狼和卷心菜运送到对岸。</span></strong></p>
<p>
 这实际上我们能找到的另一个heuristic function，也可以称为一个子目标（sub goal）。有了它做指导，这个问题就迎刃而解了。</p>
<p>
 有了以上分析，我们只需要从初始状态开始，依次应用上面描述过的4个操作。如果该操作违反了问题中的限制条件，则需要将状态回推到上一个状态，并应用下一个操作。直到我们找到最后的目标状态，再将所有成功状态连在一起，就是我们的解决方案了。</p>
<p>
 （To be updated：需要补上backtrack流程图）</p>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/using-backtracking-algorithm-to-solve-wolf-sheep-cabbage-problem</guid>
</item>
<item>
<title><![CDATA[在Stblog中定制你的代码高亮功能]]></title>
<link>http://www.cnsaturn.com/posts/55</link>
<pubDate>Tue, 25 May 2010 00:20:00 -0400</pubDate>
<description><![CDATA[<p>
 <strong>首先感谢目前正在使用stblog的朋友，正是你们的使用和批评才有了我不断改进-&gt;思考-&gt;改进的动力。当前版本还有诸多BUG和不完善的地方，我会在最近发布一个新的patch修正和完善这些功能。希望大家多提建议，感谢大家！<br />
 </strong></p>
<p>
 国内玩博客的人大部分都是Geek，他们的特点大多是：个性，最求完美，而且或多或少懂些编程的知识。这就是为什么我在开发stblog的第一个版本就引入了代码高亮功能。</p>
<p>
 <a href="http://code.google.com/p/stblog/">stblog</a>的代码高亮采用JavaScript渲染工具<a href="http://code.google.com/p/syntaxhighlighter/">SyntaxHighlighter</a>，使用和Hack方法也与其一致。</p>
<p>
 具体来说，要在stblog中定制和高亮你所需的代码，仅需要在模板中添加和删除对应高亮语法JS文件即可。</p>
<p>
 比如，朋友 <cite class="comment-author"><a href="http://www.rockics.com" rel="external nofollow">rockics</a></cite>提到，当他在后台编辑器中添加C++代码时出现如下弹窗错误：</p>
<p>
 <strong>&ldquo;can&#39;t find brush for ：cpp&rdquo;</strong></p>
<p>
 这是因为没有引入Cpp的高亮语法，解决方法很简单。</p>
<p>
 用支持代码编辑的文本编辑器（请勿使用windows自带的记事本）打开模板文件：</p>
<p>
 <strong>./themes/default/footer.php</strong></p>
<p>
 找到如下代码并修改：</p>
<pre class="brush:xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shCore.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushPhp.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushXml.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushCSharp.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushCss.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushJava.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushJScript.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushSql.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushBash.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushPython.js&quot;&gt;&lt;/script&gt;
 &lt;script type=&quot;text/javascript&quot;&gt;
  SyntaxHighlighter.config.clipboardSwf = &#39;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/clipboard.swf&#39;;
  SyntaxHighlighter.all();
 &lt;/script&gt;
</pre>
<p>
 加入你需要的高亮语法JS文件，比如这里是C++的，那么加入：</p>
<pre class="brush:xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo base_url(). ST_PLUGINS_DIR;?&gt;/editor/syntaxhighlighter/scripts/shBrushCpp.js&quot;&gt;&lt;/script&gt;
</pre>
<p>
 请注意以上<strong>shBrushCpp.js</strong>，这里是我们要引入的Cpp高亮语法JS文件。对应SyntaxHighlighter所支持的语法，请详见<a href="http://github.com/stblog/Stblog/tree/master/st_plugins/editor/syntaxhighlighter/scripts/">./st_plugins/editor/syntaxhighlighter/scripts目录</a>或<a href="http://code.google.com/p/stblog/">参考SyntaxHighilighter的说明</a>。</p>
<p>
 修改完成后，请上传至服务器并覆盖掉原文件。</p>
<p>
 <strong>Update：</strong>本来修改模板文件可以在后台进行，不过现在发现在后台修改模板会将部分代码转义，从而使模板功能失效。这里证实是一个BUG（下一个小版本中修正），请手动修改并上传服务器。</p>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/55</guid>
</item>
<item>
<title><![CDATA[不用持久化Mysql连接(Persistent Connection)的几种情况]]></title>
<link>http://www.cnsaturn.com/posts/when-not-to-use-persistent-connection-in-php-mysql</link>
<pubDate>Wed, 19 May 2010 09:09:00 -0400</pubDate>
<description><![CDATA[<p>
 一直对PHP提供的持久化连接（Persistent Connection）的使用将信将疑，今天算是彻底做了个research，对其使用和应用场景清晰了很多，特此记录。</p>
<p>
 今天在<a href="http://codeigniter.org.cn/forums/thread-5683-1-1.html">CI论坛上有个帖子讨论PHP连接数据库时持久化链接</a>的问题，<strike>我在这里做个总结</strike> （就在写这篇文章的时候发现已经有人总结的很好了，于是直接转帖过来，没有必要重复劳动）。</p>
<p>
 以下内容来自PHP官方站点<a href="http://www.php.net/manual/en/function.mysql-pconnect.php#85670">关于persistent connection的评论</a>。</p>
<p>
 <strong>不使用持久化数据库连接的诸多理由和场景：<br />
 </strong></p>
<p>
 <code><span class="html">* When you lock a table, normally it is unlocked when the connection closes, but since persistent connections do not close, any tables you accidentally leave locked will remain locked, and the only way to unlock them is to wait for the connection to timeout or kill the process. The same locking problem occurs with transactions. (See comments below on 23-Apr-2002 &amp; 12-Jul-2003)<br />
 <br />
 * Normally temporary tables are dropped when the connection closes, but since persistent connections do not close, temporary tables aren&#39;t so temporary. If you do not explicitly drop temporary tables when you are done, that table will already exist for a new client reusing the same connection. The same problem occurs with setting session variables. (See comments below on 19-Nov-2004 &amp; 07-Aug-2006)<br />
 <br />
 * If PHP and MySQL are on the same server or local network, the connection time may be negligible, in which case there is no advantage to persistent connections.<br />
 <br />
 * Apache does not work well with persistent connections. When it receives a request from a new client, instead of using one of the available children which already has a persistent connection open, it tends to spawn a new child, which must then open a new database connection. This causes excess processes which are just sleeping, wasting resources, and causing errors when you reach your maximum connections, plus it defeats any benefit of persistent connections. (See comments below on 03-Feb-2004, and the footnote at <a href="http://devzone.zend.com/node/view/id/686#fn1" rel="nofollow" target="_blank">http://devzone.zend.com/node/view/id/686#fn1</a>)</span></code></p>
<p>
 <code><span class="html">参考：</span></code></p>
<p>
 <a href="http://www.php.net/manual/en/features.persistent-connections.php"><code><span class="html">Persistent Database Connections</span></code> （PHP.net）<br />
 </a></p>
<p>
 <a href="http://www.php.net/manual/en/function.mysql-pconnect.php">mysql_pconnect (PHP手册)<br />
 </a></p>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/when-not-to-use-persistent-connection-in-php-mysql</guid>
</item>
<item>
<title><![CDATA[正式开始学习Python]]></title>
<link>http://www.cnsaturn.com/posts/start-learning-python</link>
<pubDate>Mon, 10 May 2010 05:39:00 -0400</pubDate>
<description><![CDATA[<p>
 Python之名如雷贯耳，但一直没时间来学。今天一口气看了8个小时Python的<a href="http://docs.python.org/">Docs</a>，从目前的想法来看：它的表现高于我的预期。</p>
<p>
 简单，优雅，够DRY（Don&#39;t Repeat Yourself），特别适合快速开发，是我喜欢它的地方。如果将其所有优点融入Agile开发的理念中，相信会大大促进一个团队的开发效率。毕竟开发效率从做产品的角度来说，远远比其他因素重要，特别是对互联网应用。</p>
<p>
 目前唯一不太适应的是，它的&ldquo;缩进即语法&rdquo;这一规定，看来要花一段时间习惯。毕竟已经太过习惯.NET/PHP/JAVA这样的语法了。</p>
<pre class="brush:python;">print &#39;Hello, Python&#39;</pre>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/start-learning-python</guid>
</item>
<item>
<title><![CDATA[使用PHP和Python查找100以内的所有质数]]></title>
<link>http://www.cnsaturn.com/posts/prime_numbers_algorithm_in_php_and_python</link>
<pubDate>Mon, 10 May 2010 04:41:00 -0400</pubDate>
<description><![CDATA[<p>
 质数(Prime Numbers)就是只能被1和它本身整出的自然数。本文描述查找100以内质数的算法分别在PHP和Python中的实现，仅作记录。</p>
<p>
 PHP版查找100以内的所有质数：</p>
<pre class="brush:php;">&lt;?php
//script by Saturn @ cnsaturn.com
for($i=2; $i&lt; 100; $i++)
{
  //$count is used to check whether or not the internal loop is exhausted 
  $count = 0;

  for($j = 2; $j &lt; $i; $j++)
  {
    if($i % $j == 0)
    {
      $count ++; 
      echo &quot;$i = $j * &quot; . $i/$j .&quot;.\n&quot;;
      break;
    }
  }
        
  if($count == 0)
  {
    echo &quot;$i is a prime number. \n&quot;;
  }
}
</pre>
<p>
 Python版（<a href="http://docs.python.org/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops">via</a>）查找100以内的所有质数：</p>
<pre class="brush:python;">for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, &#39;equals&#39;, x, &#39;*&#39;, n/x
            break
    else:
       # loop fell through without finding a factor
       print n, &#39;is a prime number&#39;</pre>
<p>
 可以看到虽然两种语言对质数查找的实现都比较简单，但相比PHP而言，Python更简洁，语义化更明显。</p>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/prime_numbers_algorithm_in_php_and_python</guid>
</item>
<item>
<title><![CDATA[在PHP中数组进行二分法查找]]></title>
<link>http://www.cnsaturn.com/posts/binary-search-alogrithm-in-php</link>
<pubDate>Sun, 25 Apr 2010 05:28:00 -0400</pubDate>
<description><![CDATA[<p>
 二分法查找（Binary Search）是一种搜索算法（平均的时间复杂度为<a href="http://en.wikipedia.org/wiki/Big_O_notation#Orders_of_common_functions" title="Big O notation"><i>O</i>(log <i>n</i>)</a>），支持对一个有序列表中的某个元素进行快速查找。更多二分法查找的解释和例子可以参考<a href="http://en.wikipedia.org/wiki/Binary_search_algorithm">维基百科的说明</a>。</p>
<p>
 这里我只写出其在PHP中的算法实现，仅作记录。如果你有更好的实现方法，请在下方留言与我交流。</p>
<pre class="brush:php;">//script by Saturn from cnsaturn.com

function binarySearch($searchArray, $targetValue)
{
    //初始范围为全部数组
    $startIndex = 0;
    $endIndex = count($searchArray) - 1;
    //初始中间位置的元素索引
    $middle = round(($endIndex - $startIndex) / 2);
 
    //如果要搜索的元素在初始开始位置，则直接返回
    if($targetValue == $searchArray[$startIndex])
    {
       return $startIndex;
     }
 
    //如果要搜索的元素在初始结束位置，则直接返回
    if($targetValue == $searchArray[$endIndex])
    {
       return $endIndex;
    }
 
    //循环查找
    while($searchArray[$middle] !== $targetValue &amp;&amp; $startIndex &lt; $endIndex)
    {
       //调整搜索起止范围
       if($searchArray[$middle] &gt; $targetValue)
       {
          $endIndex = $middle;
       }
       else if($searchArray[$middle] &lt; $targetValue)
       {
          $startIndex = $middle;
       }
  
      //调整中间位置元素的索引，注意获得索引值的方法
      $middle = round(($endIndex - $startIndex) /2) + $startIndex;   
   }
 
   //返回目标值的索引，如果未找到则返回-1
   return ($searchArray[$middle] == $targetValue) ? $middle : -1;
}
</pre>
<p>
 创建一个数组和一个目标值来测试上述查找算法：</p>
<pre class="brush:php;">$array = array(1,2,3,4,5,6,7,8);

//echo 4;
echo binarySearch($array, 5);</pre>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/binary-search-alogrithm-in-php</guid>
</item>
<item>
<title><![CDATA[Hello, Stblog]]></title>
<link>http://www.cnsaturn.com/posts/hello_stblog</link>
<pubDate>Mon, 19 Apr 2010 02:33:00 -0400</pubDate>
<description><![CDATA[<p>
 时间过的真快，来墨尔本已经一年多了，而距离我写的上一篇日志也有半年多了。这段时间感悟很多，有一堆东西想写下来，不过还是手懒了。</p>
<p>
 目前你所看到的这段文字，来自<a href="http://github.com/stblog/Stblog/network/members">我和CI中国其他几位成员</a>目前正在开发的基于<a href="http://codeigniter.org.cn">Codeigniter (PHP MVC框架)</a>开发的一套博客程序&mdash;&mdash;<a href="http://code.google.com/p/stblog/">Stblog</a>，目前的最新版为 v0.1.2。写这套程序的原因，<a href="http://codeigniter.org.cn/forums/thread-4968-1-1.html">我写在了这里</a>，就不转载过来了。</p>
<p>
 正在学习PHP和Codeigniter的朋友，我推荐你们下载和试用这套程序，但目前暂不推荐使用在真实的环境当中，因为它有诸多地方需要完善。待程序和相关文档成熟之后，在使用也不迟。</p>
<p>
 Stblog开发相关动态：</p>
<p>
 项目主页：<a href="http://code.google.com/p/stblog/">http://code.google.com/p/stblog/</a></p>
<p>
 程序下载：<a href="http://code.google.com/p/stblog/">http://code.google.com/p/stblog/downloads/list</a></p>
<p>
 Bug提交：<a href="http://code.google.com/p/stblog/">http://code.google.com/p/stblog/issues/list</a></p>
<p>
 安装方法/插件/主题开发教程：<a href="http://code.google.com/p/stblog/w/list">http://code.google.com/p/stblog/w/list</a></p>
<p>
 注意：STBlog的协作开发和版本控制工具为Git (没有使用SVN)，目前被托管在Github.com。请移步 <a href="http://github.com/stblog/Stblog">http://github.com/stblog/Stblog</a>&nbsp; 了解最新开发动态，以及checkout最新开发版本。</p>]]></description>
<author><![CDATA[Saturn]]></author>
<guid isPermaLink="true" >http://www.cnsaturn.com/posts/hello_stblog</guid>
</item>
<item>
<title><![CDATA[胡言乱语之一]]></title>
<link>http://www.cnsaturn.com/posts/saturn-says-no-one</link>
<pubDate>Thu, 24 Sep 2009 12:19:00 -0400</pubDate>
<description><![CDATA[<p>
 这是我的胡言乱语系列的开篇文章，主要记录自己日常中因为某些事件而&ldquo;触发&rdquo;的一些想法。如果有人赞同，那固然很好；如果没有，权当练习写作和思维；若干年之后看这个系列应该会感觉很有意思。</p>
<p>
 总之，欢迎拍砖与探讨。版权的，没有；拷贝的，欢迎。</p>
<p>
 <strong>#1 寂寞的中国互联网</strong></p>
<p>
 国内现在有个很搞笑的现象，当<a href="http://tech.sina.com.cn/i/2009-09-11/23493432100.shtml">国内媒体热衷报道国外的创新性互联网产品如Twitter</a>时，郁闷的网民却发现<a href="http://www.google.com/search?q=twiiter+访问不了&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:zh-CN:official&client=firefox-a" target="_blank">这些网站根本就访问不</a>了。于是乎，此类新闻就彻底沦为炒作和噱头，只是不知道这些炒作的对象是谁？</p>
<p>
 不过这还是有好处的，至少它给了一小撮模仿起家的翻墙精英以机会。因为只有他们，能够第一时间翻过墙去，COPY那些国外的先进理论。然后就有了非死不可中国版人人网，推特中国版（现在仍然被维护）的饭否们。</p>
<p>
 国家一直鼓励创新，尤其是在互联网这个人才辈出的新兴行业。但在目前这个并不开放的互联网大环境下，何以创新，以何创新？或许，大部分创新已经都被扼杀在了它们的初级阶段了。</p>
<p>
 没有一个开放的环境，在我看来，很难出现百花齐放的创新性互联网。</p>
<p>
 <strong>#2 没落的博客</strong></p>
<p>
 <a href="http://www.auiou.com/">志勇兄</a>博文《<a href="http://www.auiou.com/relevant/00000562.jsp" target="_blank">流量</a>》一文再次引发了我对国内独立博客未来的思考。我这里所谈到的博客，是指独立架设博客，非第三方BSP<a href="http://blog.sina.com.cn/" target="_blank">新浪博客</a>之流，那里是炒作、绯闻以及&ldquo;名人&rdquo;之间骂战的起源地。当然不能一棍子打死一船人，但总的来说，我给新浪博客下的定义是&ldquo;名人博客&rdquo;：80%的草根给20%的&ldquo;名人&rdquo;捧场吆喝。这又一个墨菲法则的典型案例。</p>
<p>
 在国内写博客真的是一件吃力不讨好的事情。首先，你很难因此赚到钱，就算赚到钱也很难以此糊口。其次，你需要时不时担心自己的某些文字是否触犯了神秘机构&ldquo;有关部分&rdquo;的潜规则，进而被悄无声息的拔掉网线？就算你将服务器迁至国外，你也要承担被GWFed的风险&hellip;&hellip;</p>
<p>
 在我看来，这都不是目前博客没落的最大杀手；最大杀手是对版权的藐视，这可以说是中国互联网的特色之一。想必大多数写博客的人都碰到过这样的情况：你花了大半天写完了一篇博客文章，第二天却欣喜的发现这篇文章只字未改的出现在某知名网站上，只是作者变了个人。</p>
<p>
 于是乎，博客作者们仅剩的一点动力也被无情的扼杀了。所以，下次你发现一个博客几年没有更新，千万别惊讶。</p>
<p>
 开放与尊重，是博客价值体系的基石，破坏了它，想不没落都不行。</p>
<p>
 </p>]]></description>
