<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet of Woodpecker.org.cn for CPUG</title>
	<link>http://www.woodpecker.org.cn/</link>
	<language>en</language>
	<description>Planet of Woodpecker.org.cn for CPUG - http://www.woodpecker.org.cn/</description>

<item>
	<title>Gawain's Jail: 留学回国人太少</title>
	<guid>http://blog.khsing.net/2009/04/post-3.html</guid>
	<link>http://blog.khsing.net/2009/04/post-3.html</link>
	<description>&lt;a href=&quot;http://news.163.com/09/0402/06/55SIQ4RF0001124J.html&quot;&gt;教育部透露30年来逾百万留学生留在国外&lt;/a&gt;，这新闻想起了《论语》里的一句话：
&lt;blockquote&gt;
孔子曰：&quot;求，君子疾夫舍曰欲之，而必为之辞。丘也，闻有国有家者，不患寡而患不均，不患贫而患不安，盖均无贫，和无寡，安无倾。夫如是，&lt;strong&gt;故远人不服，则修文德以来之。&lt;/strong&gt;既来之，则安之。今由与求也，相夫子，远人不服而不能来也，邦分崩离析而不能守也，而谋动干戈于邦内，吾恐季孙之忧，不在颛臾，而在萧墙之内也。&quot;
&lt;/blockquote&gt;
人家出去了不回来到底是谁的原因？</description>
	<pubDate>Fri, 03 Apr 2009 03:57:32 +0000</pubDate>
</item>
<item>
	<title>80's Blog: Silverlight 3 新特性</title>
	<guid>http://blog.80s.net.cn/?p=521</guid>
	<link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/195769316/4919905/1/item.html</link>
	<description>&lt;p&gt;上次在twitter上说了一下Silverlight3的新功能被微软的人看见后因为是NDA的内容, 马上删除了. 这次发布后就可以随便说了, 其实也就差几天的时间. &lt;img src=&quot;http://blog.80s.net.cn/wp-includes/images/smilies/icon_sad.gif&quot; alt=&quot;:(&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Video/Audio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Silverlight除VC-1外还支持H.264视频格式。这是YouTube等使用的新兴业界标准格式，并在很多设备上有硬解码。Silverlight也支持AAC音频。二者都以MP4容器格式实现(如.MP4或.M4A格式文件)。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;另外还支持F4v, Adobe的高清格式. 可惜的是在3.0这个版本中Silverlight还不支持Camera. 听说下一个版本会加入, 大家还需等待一年.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GPU Acceleration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是Silverlight 3运行时中opt-in的特性，in-browser和out-of-browser都可以。在HTML中的Silverlight tag中，添加一个EnableGPUAcceleration=true参数来启用GPU加速。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3D Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Silverlight 3带有透视3D，对于一个父元素，你使用一个Projection attached property，如：&lt;/p&gt;
&lt;p&gt;&amp;lt;Border.Projection&amp;gt;&lt;br /&gt;
   &amp;lt;PlaneProjection x:Name=”p3” RotationY=”-30” /&amp;gt;&lt;br /&gt;
&amp;lt;/Border.Projection&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;这个perspective 3D也只是将平面对象转换成立体的对象, 而非真正的3D渲染引擎. 而Silverlight中还没出现Flash中的pv3d一类的3D engines.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;strong&gt;Animation Easing&lt;/strong&gt;
&lt;p&gt;新加入了很多easing的function, &lt;em&gt;和Flash里的Tween类似&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom Dialogs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Silvelright 3现在支持SaveFileDialog。出于安全原因，我们不返回路径给开发者，相反，你可以从结果中打开文件：&lt;/p&gt;
&lt;p&gt;mySaveFileDialog.Show();&lt;br /&gt;
if (mySaveFileDialog == true)&lt;br /&gt;
  return mySaveFileDialog.OpenFile();&lt;/p&gt;
&lt;p&gt;&lt;em&gt;正好相反, Flash中可以返回路径, 但是不支持打开. 另外我觉得如果禁止修改的, 打开文件也可以加上.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effects&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Silverlight 3中引入的Effects提供低级手段来影响视觉效果。我们内置提供阴影和模糊两个效果，你也可以创建自己的效果。自定义效果以HLSL Shaders来实现——用DirectX SDK工具编译成byte code供Silverlight 3使用。Shaders允许开发者在UI元素渲染前修改每个像素。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;如果Silverlight也支持bitmapdata的话, 那么Effects的加入会对它的绘图功能提高很多.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pixel和Media APIs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你现在可以从位图中读/写像素。这个功能有两种使用方式：in-memory位图或保存visual到位图。同时支持的还有raw audio/video API实现动态声音生成，自定义视频codec，或者alpha video channels。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;in-memory位图或保存visual到位图, 这个就是微软学习FlashPlayer的bitmap的方式加入的新功能, 效率问题还没有测试.&lt;br /&gt;
另外动态声音生成在新版本的FlashPlayer 10 也加入了.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local Messaging&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在多个Silverlight插件间传递消息曾是个挑战。现在我们支持类似&amp;#8221;命名管道&amp;#8221;的消息，不但垮同一网页上的对象，甚至跨多浏览器的多个Silverlight实例。例如一个Chrome实例中的Silverlight和Firefox中的另一个实例通信。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Flash中用localConnection来实现, 另外Flash中的localConnection还有垃圾收集的特别功效, 这点微软好像没有加入哟 :).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Out of Browser&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通过一个manifest对每个应用程序启用(标准Silverlight 3模板中就有这个段落，你只要uncomment它)。一个用户可以右击Silverlight内容，或者点击应用里的一个按钮来启动Silverlight out-of-browser应用。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;这个功能很不错, 可以让用户将web应用部署到本地, 增加用户对当前web应用的依赖. 不知道Adobe会不会加上, 其实就是在它的swf文件和AIR文件中做一下关联, 在发布的时候同时发布两个文件, 然后用户可以将这两个文件同时部署到Server side上. 就类似Flex中的view source功能一样.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tooling&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Silverlight 3工具会包含新的压缩算法，XAP文件的大小会缩小10~30%。&lt;/p&gt;
&lt;p&gt;感谢&lt;a target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/cqwang/archive/2009/04/01/mix09-silverlight-3.aspx&quot;&gt;Felix Wang的提供&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2009年03月03日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=519&quot; title=&quot;Silverlight toolkit&quot;&gt;Silverlight toolkit (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年10月24日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=507&quot; title=&quot;AOL Mail RIA Beta! base on Silverlight&quot;&gt;AOL Mail RIA Beta! base on Silverlight (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年10月08日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=503&quot; title=&quot;关于JavaScript,Flash/Flex/AIR以及Silverlight/WPF&quot;&gt;关于JavaScript,Flash/Flex/AIR以及Silverlight/WPF (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年09月10日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=497&quot; title=&quot;Silverlight3.0将会支持高清的Flash Video&quot;&gt;Silverlight3.0将会支持高清的Flash Video (7)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年06月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=486&quot; title=&quot;CSDN（SD俱乐部第4期）下一代用户体验设计&quot;&gt;CSDN（SD俱乐部第4期）下一代用户体验设计 (1)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/491318eb4213b4fd38f5265445f0241d&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/491318eb4213b4fd38f5265445f0241d/s.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description>
	<pubDate>Thu, 02 Apr 2009 00:31:40 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 一个记录地球变化的blog</title>
	<guid>http://blog.khsing.net/2009/03/blog-1.html</guid>
	<link>http://blog.khsing.net/2009/03/blog-1.html</link>
	<description>&lt;a href=&quot;http://jackos.org&quot;&gt;Jackos&lt;/a&gt;最近整了一个专门记录地球变化的blog－－&lt;a href=&quot;http://www.think-earth.org&quot;&gt;暴风地球&lt;/a&gt;，域名是刚刚的(www.think-earth.org)。</description>
	<pubDate>Wed, 25 Mar 2009 10:27:57 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: Real world haskell 前言</title>
	<guid>http://www.kamang.net/229 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/229</link>
	<description>&lt;p&gt;做个约定吧！&lt;/p&gt;
&lt;p&gt;Haskell是门深刻的语言，学习它将使一个非常有价值的经历。我们集中在三点来解释其原因。首先是新颖：我们请你从一个不同而有价值的视角来看待编程。其次是强大：我们将向你展示如何创建更短更快更安全的软件。最后，可以给你很多乐趣：用美丽的编程技术来解决实际问题的愉悦。&lt;/p&gt;
&lt;p&gt;新颖&lt;/p&gt;
&lt;p&gt;Haskell很可能与你曾经用过的任何语言都很不同。与程序员脑中通常的概念相比，函数式编程让我们看待软件有一个深刻的不同方式。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/229&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 22 Mar 2009 06:52:55 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 测试视频：Emacs编辑PHP代码段</title>
	<guid>http://www.kamang.net/228 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/228</link>
	<description>&lt;p&gt;&lt;br /&gt;


&lt;/p&gt;</description>
	<pubDate>Fri, 13 Mar 2009 05:03:37 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 终于下定决心清理spam回复了</title>
	<guid>http://www.kamang.net/227 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/227</link>
	<description>&lt;p&gt;恼人到机器人广告回复，今天终于下定决心城管一下了：&lt;/p&gt;
&lt;p&gt;delete FROM `drupal_comments` WHERE cid &amp;gt; 900&lt;/p&gt;
&lt;p&gt;有几条被误删到留言，各位见谅了。&lt;/p&gt;</description>
	<pubDate>Fri, 13 Mar 2009 04:13:26 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 毒的下半部分是毋还是母</title>
	<guid>http://blog.khsing.net/2009/03/post-2.html</guid>
	<link>http://blog.khsing.net/2009/03/post-2.html</link>
	<description>2会上有个人大代表提了个废除简体字的案，想起几年前有篇《简化汉字到底简化了什么》里提到的&quot;毒&quot;字。查&lt;a href=&quot;http://dict.revised.moe.edu.tw/&quot;&gt;国语辞典&lt;/a&gt;：
&lt;blockquote&gt;
毒，部首：毋，部首外筆畫：4，總筆畫：8
&lt;/blockquote&gt;
查&lt;a href=&quot;http://fawen.cn/hanyu-zidian.html&quot;&gt;汉语在线词典&lt;/a&gt;
&lt;blockquote&gt;
会意。从屮(象草木初生),毒声。本义:毒草滋生。
&lt;/blockquote&gt;
再查&lt;a href=&quot;http://zhongwen.com&quot;&gt;zhongwen.com&lt;/a&gt;的&lt;a href=&quot;http://zhongwen.com/d/172/d114.gif&quot;&gt;释意&lt;/a&gt;里有这样一句。
&lt;blockquote&gt;
bottom usually written as 母
&lt;/blockquote&gt;
&quot;下半部通常写作母&quot;，看来毒的下半部确实是毋，但无论是现行的繁体字和简体字都是写做母的。</description>
	<pubDate>Fri, 13 Mar 2009 04:10:16 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: Jolt !! Real World Haskell</title>
	<guid>http://www.kamang.net/226 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/226</link>
	<description>&lt;p&gt;恭喜 Real World Haskell 捧回 Jolt 大奖！&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.earthtimes.org/articles/show/techweb-announces-winners-of-the,746892.shtml&quot;&gt;获奖宣告&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.realworldhaskell.org/blog/2009/03/12/we-won-a-jolt-award/&quot;&gt;RealWorldHaskell官方blog的声明&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是对于孤独坚持的一种安慰。也是对中国主流技术的嘲讽。&lt;/p&gt;
&lt;h1&gt;获奖名单&lt;/h1&gt;
&lt;pre&gt;
1.  General Books
Jolt Winner:
  Adrenaline Junkies and Template Zombies: Understanding Patterns of
  Project Behavior by Tom Demarco, Peter Hruschka, Tim Lister, Suzanne
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/226&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;&lt;/pre&gt;</description>
	<pubDate>Fri, 13 Mar 2009 03:21:45 +0000</pubDate>
</item>
<item>
	<title>Limodou: Jython中数组的生成</title>
	<guid>http://hi.baidu.com/limodou/blog/item/4ffd1138918cdbfab311c71d.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/4ffd1138918cdbfab311c71d.html</link>
	<description>比如在Java中有byte []，那么如果需要在Jython中传入这样的参数怎么办呢？可以使用jarray模块。如：&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;0&quot;&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;
            &lt;pre&gt;&lt;font color=&quot;#000000&quot;&gt;  1 &lt;br /&gt;  2 &lt;br /&gt;  3 &lt;br /&gt;  4 &lt;br /&gt;  5 &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td valign=&quot;top&quot;&gt;
            &lt;pre&gt;&lt;font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;jarray&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;s&lt;/font&gt; &lt;font color=&quot;#0000c0&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#0000c0&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#0080c0&quot;&gt;10&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0080c0&quot;&gt;20&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;]&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt; &lt;font color=&quot;#0000c0&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;jarray&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;s&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#804000&quot;&gt;'b'&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#804000&quot;&gt;'b'&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000c0&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#0080c0&quot;&gt;10&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0080c0&quot;&gt;20&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
使用jarray.array就可以生成数组。而且它是一个通用的功能，根据第二个参数的不同，可以生成不同的类型。对于不同的类型，可以使用不同的类型代码，如：&lt;br /&gt;
&lt;br /&gt;
z Boolean&lt;br /&gt;
c char&lt;br /&gt;
b byte&lt;br /&gt;
h short&lt;br /&gt;
i int&lt;br /&gt;
l long&lt;br /&gt;
f float&lt;br /&gt;
d double&lt;br /&gt;
&lt;br /&gt;
如果要转换的没有对应的类型代码，可以直接使用类，比如：java.lang.Byte。&lt;br /&gt;
&lt;br /&gt;
不过对于byte，Python中没有分得很细，要么是字符串，要么是整数。而Java中的byte是带符号的，因此，如果你把一个16进制的字符串想转为一个Byte，怎么做？&lt;br /&gt;
&lt;br /&gt;
int('0xff', 16)&lt;br /&gt;
&lt;br /&gt;
这样得到一个整数。然后：&lt;br /&gt;
&lt;br /&gt;
java.lang.Byte(int('0xff', 16))&lt;br /&gt;
&lt;br /&gt;
但是直接使用java.lang.Byte对象来生成数组是不行的，如：&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;0&quot;&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;
            &lt;pre&gt;&lt;font color=&quot;#000000&quot;&gt;  1 &lt;br /&gt;  2 &lt;br /&gt;  3 &lt;br /&gt;  4 &lt;br /&gt;  5 &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td valign=&quot;top&quot;&gt;
            &lt;pre&gt;&lt;font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;java&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;jarray&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;java&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;lang&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Byte&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#0080c0&quot;&gt;255&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#804000&quot;&gt;'b'&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;Traceback&lt;/font&gt; &lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;most&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;recent&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;call&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;last&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;:&lt;/font&gt;&lt;br /&gt;  &lt;font color=&quot;#000000&quot;&gt;File&lt;/font&gt; &lt;font color=&quot;#804000&quot;&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;line&lt;/font&gt; &lt;font color=&quot;#0080c0&quot;&gt;1&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/font&gt; &lt;font color=&quot;#0000c0&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;module&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;TypeError&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;:&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;Type&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;compatible&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;with&lt;/strong&gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;array&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;type&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
可以看到类型不对。这时可以使用java.lang.Byte的intValue()就可以了，如：&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;0&quot;&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;
            &lt;pre&gt;&lt;font color=&quot;#000000&quot;&gt;  1 &lt;br /&gt;  2 &lt;br /&gt;  3 &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;
            &lt;/td&gt;
            &lt;td valign=&quot;top&quot;&gt;
            &lt;pre&gt;&lt;font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;java&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;jarray&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;java&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;lang&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Byte&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#0080c0&quot;&gt;255&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;intValue&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#804000&quot;&gt;'b'&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#804000&quot;&gt;'b'&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000c0&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;-&lt;/font&gt;&lt;font color=&quot;#0080c0&quot;&gt;1&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#0000c0&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
BTW: 刚看到3月9日，Jython 2.5b3发布了，修复了我以前说的关于from xxx import *的Bug。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Jython&quot;&gt;Jython&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/4ffd1138918cdbfab311c71d.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Fri, 13 Mar 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: StyledTextCtrl语法高亮使用的探讨</title>
	<guid>http://hi.baidu.com/limodou/blog/item/1e8ad5077200fdc57a8947c7.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/1e8ad5077200fdc57a8947c7.html</link>
	<description>原来是想投稿的，但是编辑们认为太具体了，范围太窄，没人采用。所以一直也没有发表过，也不曾公开过。不过正好有网友问到这个问题，我找了出来放到网上。从这里&lt;a href=&quot;https://www.box.net/shared/508zt4amao&quot; target=&quot;_blank&quot;&gt;下载&lt;/a&gt;。有文章和源码。&lt;br /&gt;
&lt;br /&gt;
文章描述了内置的Lexer的使用和自定义的Lexer的使用。不过它是一个精简版本，Ulipad对于自定义Lexer作了增强。有兴趣可以去看Ulipad的源码。主要是 NCustomLexer.py ，可以使自定义语法高亮更容易。同时在Ulipad的英文文档 howto_write_custom_syntax_support.htm 中我也写过如何使用它，可以看一看。另外有许多Lexer就是使用NCustomLexer来处理的都可以看，比如：&lt;br /&gt;
&lt;br /&gt;
mixins/LexerRst.py  处理reStructuredText&lt;br /&gt;
plugins/djangoproj/DjangoTMPLexer.py 处理Django模板&lt;br /&gt;
plugins/mako_plugin/MakoTMPLexer.py 处理Mako模板&lt;br /&gt;
&lt;br /&gt;
等等。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Ulipad&quot;&gt;Ulipad&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/1e8ad5077200fdc57a8947c7.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Wed, 11 Mar 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: StyledTextCtrl不支持screen reader :(</title>
	<guid>http://hi.baidu.com/limodou/blog/item/1be4d788e30e9f9ca4c272be.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/1be4d788e30e9f9ca4c272be.html</link>
	<description>今天一位外国朋友问我的UliPad不支持screen reader，刚开始不太明白，于是我试了灵格斯，可以抓文字。但是我问了他什么叫screen reader，才搞明白screen reader大部分是给盲人和弱视的群体使用的软件，因为他们无法阅读屏幕，所以需要读屏的软件。这种软件可以把你的屏幕直接读出来，比如：鼠标的移动会有不同的声音，让你很容易就知道大概的位置。鼠标放在某个窗口就可以自动将内容读出来。他还特别告诉我了两个软件：Jaws和nvda。而且nvda是使用Python开发的。不过大部分的软件对于微软的控件支持比较好。而Ulipad是使用了Scintilla的版本StyledTextCtrl。&lt;br /&gt;
&lt;br /&gt;
那么为了测试，我下载了nvda，是从一个叫&lt;a href=&quot;http://www.mangren.org/&quot; target=&quot;_blank&quot;&gt;自强盲人网&lt;/a&gt;的地方。以前我从来没有去过这样的地方。甚至还搜到一个叫晴天小站的Blog，他的作者杨永全就是一位盲人。这里有他的一份&lt;a href=&quot;http://www.qt06.com/read.php/1.htm&quot; target=&quot;_blank&quot;&gt;介绍&lt;/a&gt;。看到他的眼睛让我有一种说不出的感觉。我感谢我现在生活得很好。&lt;br /&gt;
&lt;br /&gt;
还是说一说nvda吧。启动后，鼠标的移动有声音，自动念的中文，不过效果不是太好。放在Ulipad中不知道念得什么，反正不是文件的内容。但是使用EditPlus打开相同的内容却可以自动念。因此我想，这个可能才是那位外国朋友想要的功能。于是在google上查了一下，很早就有这个问题，说是Scintilla的1.62版本就可以解决。不过现在版本应该早就过了，但是还是有这样的问题。很失望。&lt;br /&gt;
&lt;br /&gt;
很希望Ulipad可以让帮助更多的人。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Ulipad&quot;&gt;Ulipad&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/1be4d788e30e9f9ca4c272be.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Mon, 09 Mar 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 备份很重要</title>
	<guid>http://blog.khsing.net/2009/03/backup-is-important.html</guid>
	<link>http://blog.khsing.net/2009/03/backup-is-important.html</link>
	<description>周末，机器硬盘挂了，只有DB做了备份，所以&lt;a href=&quot;http://blog.khsing.net&quot;&gt;blog&lt;/a&gt;还在，其他的&lt;a href=&quot;http://wiki.khsing.net&quot;&gt;wiki&lt;/a&gt;呀，&lt;a href=&quot;http://www.khsing.net&quot;&gt;www&lt;/a&gt;呀全挂了。备份真的很重要。</description>
	<pubDate>Thu, 05 Mar 2009 02:00:41 +0000</pubDate>
</item>
<item>
	<title>80's Blog: Silverlight toolkit</title>
	<guid>http://blog.80s.net.cn/?p=519</guid>
	<link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/195769317/4919905/1/item.html</link>
	<description>&lt;p&gt;Silverlight toolkit是一套微软提供的control和component集合, 类似的Flex SDK中的mx package. 对大家都开发很有用, 这次在MVP Summit 2009里听了这个session, 感觉有个不少更新, 更贴近了开发者的需求, 帮助设计师和开发者进行了不少基础工作, 提高了效率. 他们最近还会加入不少的controls, 大家可以关注这个blog: &lt;a href=&quot;http://www.jeff.wilcox.name/&quot;&gt;http://www.jeff.wilcox.name/&lt;/a&gt; jeff wilcox是微软总部silverlight toolkit development team的成员.&lt;/p&gt;
&lt;p&gt;resources:&lt;/p&gt;
&lt;p&gt;download the latest version:&lt;br /&gt;
&lt;a href=&quot;http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19172&quot;&gt;http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19172&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;online sample(类似Flex的components explorer):&lt;br /&gt;
&lt;a href=&quot;http://silverlight.net/samples/sl2/toolkitcontrolsamples/run/default.html&quot;&gt;http://silverlight.net/samples/sl2/toolkitcontrolsamples/run/default.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Silverlight toolkit overview part 2 chart:&lt;br /&gt;
&lt;a href=&quot;http://silverlight.codeplex.com/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%202&amp;referringTitle=Home&quot;&gt;http://silverlight.codeplex.com/Wiki/View.aspx?title=Silverlight%20Toolkit%20Overview%20Part%202&amp;amp;referringTitle=Home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Codeplex上的Silverlight toolkit page(这个toolkit是开源的, 大家可以看到source code, 大家不妨看看微软是怎么实现这个庞大的组件架构的, 很有帮助,另外所有的微软开源程序例如那个linux上的Silverlight - moonlight就是在这里发布的):&lt;br /&gt;
&lt;a href=&quot;http://www.codeplex.com/Silverlight&quot;&gt;http://www.codeplex.com/Silverlight&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2009年04月02日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=521&quot; title=&quot;Silverlight 3 新特性&quot;&gt;Silverlight 3 新特性 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年10月24日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=507&quot; title=&quot;AOL Mail RIA Beta! base on Silverlight&quot;&gt;AOL Mail RIA Beta! base on Silverlight (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年10月08日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=503&quot; title=&quot;关于JavaScript,Flash/Flex/AIR以及Silverlight/WPF&quot;&gt;关于JavaScript,Flash/Flex/AIR以及Silverlight/WPF (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年09月10日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=497&quot; title=&quot;Silverlight3.0将会支持高清的Flash Video&quot;&gt;Silverlight3.0将会支持高清的Flash Video (7)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年06月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=486&quot; title=&quot;CSDN（SD俱乐部第4期）下一代用户体验设计&quot;&gt;CSDN（SD俱乐部第4期）下一代用户体验设计 (1)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/3428dab2fe19a0756b3dfe7c2c31246e&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/3428dab2fe19a0756b3dfe7c2c31246e/s.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description>
	<pubDate>Mon, 02 Mar 2009 23:46:38 +0000</pubDate>
</item>
<item>
	<title>Limodou: 关于Learning Uliweb的邮件回复－－uliweb区别于其它框架的特点</title>
	<guid>http://hi.baidu.com/limodou/blog/item/4ffd1138b2d6fafab311c75b.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/4ffd1138b2d6fafab311c75b.html</link>
	<description>写得很匆忙，也有不少错字，主要是基于我对django和web2py的体验，其它的象tg, pylons实在是没有用过。贴在下面：&lt;br /&gt;
&lt;br /&gt;
－－－－－－－－－－－－－－－－－－－－－－－&lt;br /&gt;
&lt;br /&gt;
&amp;gt; 首先向Limodou表示一下敬意。能够长期从事开源软件开发的爱好者不多，而其中大多数人往往更愿意写code而不太愿意写好文档。Limodou为 Uliweb动手著书，实在是有大气。&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 关于Uliweb，想提个问题。我不止一次在Limodou介绍uliweb的片言只字里看到这样的提法：&amp;ldquo;我用过xx框架，但后来有许多设计上的观点不被接受，于是我渐渐远离了xx&amp;rdquo;。那么能否先高屋建瓴地对比一下uliweb与其它框架的不同之处、uliweb的某个特别设计又好在什么地方呢？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
在uliweb的文档architecure.rst中我描述了uliweb的整个架构。说简单也简单，就是将app的管理机制尽可能的做到独立。一个app就是一个开发单位，这种设计并不是uliweb新创造出来的，也是在我学习了django之后学过来的。正象在书中许我地方，我也会强调某个点是从哪个框架学来的，这是很正常的。除了app的机制外，还把其它框架中我认为好的地方尽可能的集中起来，不能说uliweb就一定比其它的好，只不过从个人角度来说，我认为是不错的。&lt;br /&gt;
&lt;br /&gt;
1. app管理。 django的app管理正如你下面所写的，我认为不完善。这一点其实在邮件列表中也有多次讨论。当然也并不是大家都赞同，许多人还是认为django的好。所以，选择一个框架最重要的是先要选择它的思想，思想对路的话，你可能会接受它的缺点，但是思想不对路，你可能只看到缺点。而uliweb也是这样的，它只是我个人web开发经验（其实我的经验可能不如你们许多人，只不过我希望把我的一些开发经验通过框架形成一种重用的形式，再尽可能让大家利用这种重用来积累经验。许多框架也都是这样，但是重用与重用是不同的，有些易于重用，有些不易于重用。这就是设计上的区别了）。对于django（0.97版之后就没有怎么研究了），app只能重用象template, views, urls，而static，配置都没有重用的机制。所以uliweb在这点上做了扩展。主要原因就是一个app是开发单位，而一个功能的实现除了有模板，view的处理，url的映射，还有象css, image之类的资源文件和配置信息。这些能做到重用，才会使用app的重用更方便。这里与django的比较主要是从哪个更方便来说的。&lt;br /&gt;
&lt;br /&gt;
再说一说与web2py的比较。web2py也有阵子没有关注了，虽然我经常在看。它的app是运行单位，不是功能或开发单位。所以app之间的重用很麻烦，不符合我的要求。这是最主要我离开web2py的原因。&lt;br /&gt;
&lt;br /&gt;
2. views的方便性。这一点是从web2py来的。在web2py中不需要定义request, response等变量，可以直接使用。这就减少了象django中的要定义request参数的麻烦。也许不是一个很重要的变化，但的确可以减少代码。同时，response也是自动有一个缺省的，这样你可以直接使用，并不需要象django一样，一定要定义一个Response对象。所以这块也有简单。再有就是模板的自动映射。在web2py和uliweb中，当返回一个dict时，会自动查找一个同名的模板文件，因此非常方便。而django是要指定的，我认为麻烦一些。同时response.template可以更换模板文件。最差的也可以调用模板函数手动去处理，就和django没什么区别了。&lt;br /&gt;
&lt;br /&gt;
3. url的映射。我使用的是werkzeug的route模块。它的定义类似于django，但是它基本上不需要写正则表达式，比如&amp;lt;filename&amp;gt;这就是一个匹配，在django中是要写成正则式的，这一点比较麻烦。同时werkzeug还支持一些参数，如定义GET,POST等，可以实现REST的方式。还提供了url_for这种机制(这是后来django才有的)。所以从url的定义上，我认为django的还不够方便，许多route库都不需要定义原始的正则式。这块django做得还不够方便。&lt;br /&gt;
&lt;br /&gt;
再说一说映射。我是定义了一个decorator，可以在views中对view函数进行修饰，也支持自动生成urls.py，在urls.py中集中定义，因此没有单独的urls.py，也不存在include的功能。因为url的绑定是放在views.py中的，因此当复用app时，并不需要修改集中的urls.py(一般也没有）。另django则需要修改。&lt;br /&gt;
&lt;br /&gt;
但是web2py的方式我也不喜欢。首先它是controller/action/function的方式，你并不需要绑定url，它是固定格式。但一旦你想写的话，就是写一个route.py的文件，里面面用正则式来写如何转换。曾经我写过一个使用其它的route的模块来处理url，但是要修改核心，作者不同意。&lt;br /&gt;
&lt;br /&gt;
4. 模板。这是我在邮件列表中讨论过多次了。django的模板看上去是挺好，但是由于象if, for,基于是不能动态创建变量这种基本功能的缺失，在处理复杂处理时，而这些处理正好是为了显示才做的，非常麻烦，甚至要手写tag。现在django的tag不可谓不多了，已经是一门独立的语言了，看一看djangosnippets就知道了，有好有坏，django的团队我看是基本上不关注的。我还曾经想，会不会定期把一些好的tag合到django中去，但是没有见过有这样的行为，也许是我没有看到。为此我还写过一些tag，还有一些外国朋友问把我的expr之类的tag加入他们的项目需要什么样的license。如果django的模板稍微多一点工作，我写的许多的tag都没有存在的必要。所以我最终选择了web2py的模板。它支持python代码的嵌入，支持必要的tag，如extend, include等。语法一致，如都是放在{{}}中的。而django是使用{%%}和{{}}来区分。在web2py中都一样。同时使web2py，不用关心缩近，它会自动处理，但是要在块结束的位置加上pass，这是python的空语句。&lt;br /&gt;
&lt;br /&gt;
但是web2py的模板不支持block，我认为这是django模板中一个非常好的功能，于是我做了扩展，加上这一功能，但是这一功能我在一个web2py的邮件中作了回复，没有感兴趣。现在我还扩展了支持自定义tag，不过比较简单。因为可以使用python代码这一功能基本上不需要。你也可以向模析台注入新的方法和函数在模板中直接使用。另外web2py的模板可以编辑成py代码，象mako一样可以存在一个临时目录，不过这也是我扩展的。现在的uliweb的模板是从web2py模板发展来的，但是做了许多的改进。&lt;br /&gt;
&lt;br /&gt;
5. settings 在django中是使用python源码，很多人都喜欢。我原来也喜欢。但是前面说到了一个原因是每个app没有自已的setting，因此限制了重用的方便性。同时python源码造成它的形式会非常灵活，而不方便通过程序进行改写，如果你想写一些安装工具时，这种方式非常困难。其实许多的框架都使用ini形式的配置文件，如tg, pylons。我曾经向django建议，结果得到了很强列的反对。tg有阵子来考虑使用我的dict4ini来处理ini，不过没有使用，后来使用了ConfigObj，后来就不太清楚了。最早uliweb也是使用py文件，但是后来我还是改成了ini格式，不过可以支持基本的python语法，只不过不能使用import之类的。所以可以看成是ini与python表达式的结合。而且还支持了#coding=这种编码的定义和_()的国际化处理支持（当然要与uliweb相结合)。web2py这一点不让我满意，因为它的一个设计思想就是0配置，在我看来，一个灵活的框架与配置本来就不可分，0配置表示用户很难灵活的架建自已想要的框架，所以这也是我离开web2py的原因。再有就是web2py的作者过于强调语法的向前兼容，在我看来这是很好的，但不应是一种教条，一旦绝对化，对于以后的优化没有什么好处。&lt;br /&gt;
&lt;br /&gt;
6. ORM其实这倒没什么。web2py和django都是自已的。于是uliweb也搞了一个，基本语法是参考GAE的，许多代码是从GAE学来的，而GAE又是学Django的。不过我的低层是使用的sqlalchemy。所以语法也基本上是sqlalchemy。目前也支持manytoone, onetoone, manytomany,不过开发时间不长，还没有人使用，所以可能与其它的比不了。功能也不一样完整。不过与django的区别是：在django中，表级别的操作要通过manager，即Model.objects来操作，而Uliweb的ORM是直接Model.all()之类就可以了。因为它使用了descriptor来处理，所以可以直接在model类上进行，而django没有使用，所以不得以使用manger的方式，当然这也造成，你可以构造新的manager。不过在uliweb上想做也是可以的，就是在类上定义一个类方法就好了。web2py原来叫ORM，但是后来是认没有ORM的功能，所以改为DAL（数据库抽象层）。可比性不高。&lt;br /&gt;
&lt;br /&gt;
7. i18n。都有这功能。uliweb的i18n是自已做的，但对于翻译函数的处理是学django的。不过因为uliweb的模板可以转换为python代码，所以处理上要比django简单。而web2py的国际化处理并没有使用标准的gettext，是通过定义一个T，然后自动抽取，处理模式不同。uliweb的i18n处理学习了django的，可以从cookie,&lt;br /&gt;
session, 配置中得到语言设置。&lt;br /&gt;
&lt;br /&gt;
8. uliweb有一个form库，是自已写的。可以不用。支持象django一样的定义，校验，validator的使用，比效OO。而web2py则看上去是HTML代码与form处理的一个混合体，不是很OO。&lt;br /&gt;
&lt;br /&gt;
9. 其它uliweb的特点。有一些是别的框架已经有的：&lt;br /&gt;
&lt;br /&gt;
* django风格的middleware&lt;br /&gt;
* wsgi middleware的支持，目前测试比较少，现在的staticfiles就是一个middleware&lt;br /&gt;
* app之间可以定义依赖，放在config.ini中，这样在导入一个模板时将自动将依赖的app自动添加。而django没有这种机制。这样可以简化对settings.ini的修改。&lt;br /&gt;
* 部分地方使用pkg_resource进行处理。django从使用setuptools后来放弃了，改成原来的disutils。&lt;br /&gt;
&lt;br /&gt;
&amp;gt; 就目前我从《Learning Uliweb》中感觉到的，貌似Uliweb的重点在于追求重用，实现这一点的手段就是settings.ini。不知道这个理解是否片面？&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 摘录《Learning Uliweb》中的一小段。&lt;br /&gt;
&amp;gt; 在前面你看到app可以有自已的settings.ini，可能你会问为什么这样设计？答案是：为了重用。在Django中你做不到，甚至django中不提供static目录的支持。那么这样的结果是：所有的app的配置信息都放在了settings.py中，所以有app相关的静态文件被放在了一起。对于单个项目是没有关系，但是一旦你想把其中的某个app拿出来复用就会非常麻烦，你可能很难找到哪些是与这个app相关的。而一个app的功能是&lt;br /&gt;
&amp;gt; 多方面的，需要的资源也是多样的，配置信息就是其中一种。因此，这就是Uliweb的设计。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
重用在其它的地方，如GUI之类的似乎要容易得多，而web开发要复杂得多，因为一个功能可能涉及到许多的内容，如css, images, template, views, url等等。虽然它们分散存在，但是却是为了完成一个功能。所以这就是uliweb对app的理解。而前面所说的app的依赖的处理也是充分了考虑重用也设计出来的。为什么软件开发做不到象盖房子那样，一方面创造性，不缺定性造成的，另一方面我认为可能还是重用性设计得不够。&lt;br /&gt;
&lt;br /&gt;
以上只是匆忙想到的，主要是个人主观感受。一个框架必然有它的思想在里面，所以uliweb不会适合每一个人。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;update 2009.3.1 又新添加了些回复，主要是针对于web2py的：&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt; 谢谢Limodou推心置腹的交流。我没有用过Django，近期用得多的是web2py，所以以下对Limodou提到的方面，说说我在使用web2py过程中的理解或者处理手法，请Limodou指点。&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 1. 关于app的管理，或者说关于&amp;ldquo;重用&amp;rdquo;。不错，和GUI相比，WEB开发之中， 涉及到&amp;quot;css, images, template, views, url等等，虽然它们分散存在，但是却是为了完成一个功能&amp;rdquo;。而我觉得app就是包含以上各&lt;br /&gt;
&amp;gt; 个内容的超集，所以完全可以把完成某种通用功能的一批css,images,template,views等东西组织在一个通用app之中，然后其它的业务app通过类似webservice的方式来调用通用app中的内容。感觉上这样的效果也许用起来不如uliweb本身内建重用机制那么天然，但最终实际效果差不多。况且从我的个人体会来看，web开发要用到的个把css或image之类的，不就是几个文件嘛，大不了就手动copy一个副本，这样至少有一个好处是一个app按自己需求调整个把css，也不会影响到其它的app。追求重用是好，但如果过了头，那么紧耦合的一些缺点也会出现。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
重用并不表示不可以调整。就象我前面所写的，重用与重用不同，有些重用简单，有些重用要手工改许多东西。易用性的差别往往就那么一点。这么多的框架，从功能上讲那个都差不到哪里去，但是为什么有人喜欢这个，有人喜欢那个，可能就是因为这一点点。web2py的service是应用级别的重用，从更高层的划分它只是一种重用的方式。其实在许多时候我们只想要重用一些静态文件，功能，并不是一个完整的service级别的重用，因此web2py的这种重用对于这种情况很麻烦。所以效果差不多要看具体的情况，我不认为差不多。至于拷贝文件，正是许多人认为无所谓破坏了易用性。对于已经非熟的人，你怎么做都会认为无所谓，因为everything in the control，但是对于初学者这之前的差异就很大。甚至到了一些UI的交互设计上，甚至要考虑如何减少一次点击，少一次按键。也许是过头，但是如何表示这种设计就是过头了呢？何况这种设计，你可以看到，并不是很困难。许多时候，开发者多想一点，多做一点，就会给使用者非常大的方便。让别人方便我不认为是过头。而紧耦合性的缺点也只是理论上，如果有，自然要想办法去解决了。所以有问题并不可怕，这正好是设计与实用性的一个平衡问题。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 另外，如果Limodou有持续关注web2py的话，可能也已经注意到它先后发展出的T2、T3插件。简单来说就是从&amp;ldquo;模式&amp;rdquo;的高度去定义并实现了WEB开发过程当中的一些常见需求，例如用户认证、极限管理、数据搜索、分页呈现……等等。看来web2py不是不重视重用，但走的是另外一种路子，重用的是模式。&lt;br /&gt;
这些我了解得很少T2我看了一点文档。未来uliweb可能也会向这方向来走。不过我以前在blog也说过，框架应该是分层的，最底层是给平台构建人员使用的，将用来构建满足自已团队需要的环境。然后是最终用户，他们将在新的平台上进行工作。所以uliweb目前还主要在完成底层的构建，对于平台还在摸索和积累中。而web2py已经在开始提供我认为的平台层了。这是更高层的复用，这一点我并不否认。只不过要看它是以何种方式来复用，是通过app还是别的。这一点我的确没有太多了解。因为web2py的app是独立可运行的，从这一点它很难做到细粒度的功能复用。因为它里面的功能并没有分开，所以与我的要求不满足。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 2. uliweb的view方面和web2py的controller看来是差不多，就不说什么了。&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 3. url映射。django的url映射要用到正则表达式，这是我从一开始就没有选择学习django的最大原因。:) 正则表达式的功能是强大，但学习起来的门槛也较高。君不见咱这python-cn列表，问django里怎么写某个URL或者问怎么写正则的邮件，多了去了。在合适的场合用正则，事半功倍；在不必要的场合用正则，自讨苦吃。&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 扯远了。说回web2py的url映射，固然是固定了只能用/app/controller/function的方式，但实际使用之中也没觉得有什么不方便呀。无非就是对于那些访问了不存在的路径的请求，无法全部捕获并转到某个通用的错误处理函数罢了。也基本不影响使用，因为正常情况下用户是在我们app的菜单之中选择操作，不应该需要自己输入某个错误的URL的。在这里我没有领会到要有更灵活的url映射机制的必要性，权当是一种锦上添花的功能吧。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
web2py也支持将/app/controller/function映射为其它的url的形式，但是需要定义一个route.py，而且要使用正则式。uliweb则使用简单的route规则，比正则式要简单，所以我认为是一个比django正则式更好的方案。而且uliweb的expose函数，有一个特点，比如&lt;br /&gt;
&lt;br /&gt;
@expose&lt;br /&gt;
def index()&lt;br /&gt;
&lt;br /&gt;
可以看到，我并没有指定url，但它可以直接映射为/app/views/function，很象web2py。灵活性是功能的要求，而不是个人的要求。当然也可以看到是我的要求。虽然你不需要，但并不表示我或其它人不需要。在django中专门就url有一个说明，它说好的url是设计出来的，我很赞同。另外就是uliweb的expose支持一些方法，如是否只匹配GET或POST，可以实现REST的风格。这又可以让一些人高兴。框架虽然不会让每个人高兴，但是如何可以让更多人高兴，为什么不去做呢？我反正是很少坚持我个人的哲学（当然我也会有），但是如果改动不大，我很乐意考虑加入一个新特性。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 4. 模板。web2py的模板倒是有extend和include的指令，本来就是用于扩展缺省layout模板的。和block的效果有点接近吧。&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 另外就是可能在MVC（或MTV）分层思路的角度，template里通常不应该存在太复杂的业务逻辑，所以估计不支持block的实际影响也不大。&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extend和include在django中也有。但它是文件级别的。而block是一个文件中的一部分。在web2py中处理起来很麻烦。因为它只能定义一个{{include}}。但是一个模板可能有许多地方是可以让用户来替换的，在web2py中就不方便。这并不是什么业务逻辑，这是模板替换的要求，在实际中有这样的需求。这一点是我认为django不错的。所以我也扩展了一下。对我影响很大。比如我有一个layout模板，上面有一个{{block title}}untitle{{end}}。这个意思是说我希望title是可以替换的。但是在这个模板中至少还有{{block main}}{{end}}用来输出页面的内容。因此一个页面就有两个内容可能需要替换。那么在web2py中会怎么做？&lt;br /&gt;
&lt;br /&gt;
用函数吗？如果子模板没有定义怎么办？使用block时，如果子模板没有定义相应的block，则可以使用block中原来的内容。所以block一方面是指定了可以替换的内容块，另一方面还起到提供缺省值的作用。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 5. settings。估计你说的setting是指配置文件。虽然web2py没有显式的setting机制，但事实上由于它在每次执行一个app时都会先导入所有相关的model文件，所以客观上开发者可以定义额外的model文件，在里面定义当前app范围内的配置项，当成配置文件那样使用。&lt;br /&gt;
&amp;gt; 这在web2py圈子已经是惯例了，事实上web2py的作者Massimo自己也这么干。:) 所以setting的问题应该是互相等价吧。&lt;br /&gt;
你说的model是指什么？是数据库定义的model还是什么？这一功能是与app复用相关的，但是由于web2py不支持细粒度的复用，所以这一功能对于web2py的意义不大。因为它的一个app就是一个运行单位，而且一个app内部又没有细分，所以不存在我说的情况。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 至于说web2py是否&amp;ldquo;过于&amp;rdquo;强调语法的向前兼容，这个见仁见智了。不过要看到，web2py在承诺保证对1.0版的所有语法都永远保持兼容的前提下，也以极快的速度增加新功能。手法很简单，新的东西以新的API出现，但旧的东西保持不变。我认为这很好地平衡了兼容性和扩展性。&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这一点我曾经向作者建议过。有时候为了引入新功能，兼容性的破坏是可以接受的。甚至如果用户都说无所谓，作为开发者一定要坚持是否有必要，更何况以前的版本还有多少个人在用。是否兼容我看是要看以前的版本是否还需要继续支持，不然，没人用的东西我还坚持它作什么？现在的软件更新都很快，大家也喜欢用新的版本。特别是对于一个新生的框架，用的人没几个，考虑太多反而没有必要。所以坚持不坚持要看实际的情况，不是一成不变的。如果以前的版本仍然有许多人在用，是可以考虑兼容性的。我并没有说一定不兼容，只不过不希望兼容变成框架发展的一个限制而已。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; 其它的好象差别不大，就不多说了。&lt;br /&gt;
&lt;br /&gt;
谢谢交流。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/4ffd1138b2d6fafab311c75b.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sat, 28 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 将Learning Uliweb中的配套代码放在了uliweb-tests中了</title>
	<guid>http://hi.baidu.com/limodou/blog/item/e2c10d33496317ff1a4cffb5.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/e2c10d33496317ff1a4cffb5.html</link>
	<description>可以从 http://code.google.com/p/uliweb-tests 中找到。现在第4章已经基本完成。越往后可能进度越慢，因为一方面讲得东西会越来越多，越来越深，另一方面测试的代码会越来越复杂。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/e2c10d33496317ff1a4cffb5.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Wed, 25 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 使用Ulipad的Python代码渲染功能</title>
	<guid>http://hi.baidu.com/limodou/blog/item/5e6b7acbc00a0b18be09e692.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/5e6b7acbc00a0b18be09e692.html</link>
	<description>在 17xie 上已经开始了《Learning Uliweb》的写作，到目前已经进入第三章的写作，不过是最简单的Hello的讲解。那么我遇到一个问题是代码高亮怎么办。后来想起来Ulipad本身就有代码转换成HTML的功能，并且可以直接打开浏览器看到结果。所以就用它将转换代码，然后贴到web编辑器中。效果还不错。百度的Blog也可以这么干。&lt;br /&gt;
&lt;br /&gt;
使用方法：&lt;br /&gt;
&lt;br /&gt;
1. 先选中要处理的Python代码&lt;br /&gt;
2. 点右键在弹出菜单中选Convert-&amp;gt;Output to HTML Window(或在Edit菜单也可以找到Convert菜单)，这只是一个配置项，是不能输出的&lt;br /&gt;
3. 然后再点右键，在弹出菜单中选Convert-&amp;gt;Py to HTML，就可以看到弹出一个HTML窗口，有转换后的Python高亮代码。选中，拷贝就行了。&lt;br /&gt; 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Ulipad&quot;&gt;Ulipad&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/5e6b7acbc00a0b18be09e692.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Tue, 24 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>80's Blog: 80s on NewWebPick</title>
	<guid>http://blog.80s.net.cn/?p=518</guid>
	<link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/195769318/4919905/1/item.html</link>
	<description>&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.80s.net.cn&quot;&gt;80s studio 2009&lt;/a&gt;已经被&lt;a target=&quot;_blank&quot; href=&quot;http://www.newwebpick.com/_webpick/webpick.php?categories=all&amp;id=25725&quot;&gt;NewWebPick&lt;/a&gt;收录, 挺荣幸.&lt;/p&gt;
&lt;p&gt;已经在首页加入了&lt;a target=&quot;_blank&quot; href=&quot;http://www.newwebpick.com/_webpick/webpick.php?categories=all&amp;id=25725&quot;&gt;NewWebPick&lt;/a&gt;的logo.&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.newwebpick.com/_webpick/webpick.php?categories=all&amp;id=25725&quot;&gt;&lt;img border=&quot;0&quot; width=&quot;214&quot; src=&quot;http://www.newwebpick.com/images/nwplogo.gif&quot; height=&quot;49&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;感觉人家做设计的比较会截图, screen shot比我截的有感觉.&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.80s.net.cn&quot;&gt;&lt;img border=&quot;0&quot; width=&quot;160&quot; src=&quot;http://www.newwebpick.com/sitephoto/id25725.jpg&quot; height=&quot;120&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;另外两则消息:&lt;/p&gt;
&lt;p&gt;1. &lt;a href=&quot;http://www.80s.net.cn/&quot;&gt;The Legend Returns|80s studio 2009 &lt;/a&gt;会有一些修改, 比如会支持3D动画的播放控制.&lt;/p&gt;
&lt;p&gt;2. 下月会在&lt;a target=&quot;_blank&quot; href=&quot;http://www.riameeting.cn/?p=141&quot;&gt;RIAMeeting&lt;/a&gt;上讲一下Flash 3D相关的topic. 大家有什么意见和想法请去&lt;a target=&quot;_blank&quot; href=&quot;http://www.riameeting.cn/?p=141&quot;&gt;RIAMeeting&lt;/a&gt;投票或者在下面留言&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年10月15日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=505&quot; title=&quot;Flash CS4彩蛋&quot;&gt;Flash CS4彩蛋 (5)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年10月08日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=503&quot; title=&quot;关于JavaScript,Flash/Flex/AIR以及Silverlight/WPF&quot;&gt;关于JavaScript,Flash/Flex/AIR以及Silverlight/WPF (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年09月28日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=502&quot; title=&quot;Open Source Flash Media Server&quot;&gt;Open Source Flash Media Server (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年09月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=500&quot; title=&quot;Adobe CS4 Launch Broadcast&quot;&gt;Adobe CS4 Launch Broadcast (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年09月10日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=497&quot; title=&quot;Silverlight3.0将会支持高清的Flash Video&quot;&gt;Silverlight3.0将会支持高清的Flash Video (7)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/96b6896e4fde1fda6564187ac9b17893&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/96b6896e4fde1fda6564187ac9b17893/s.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description>
	<pubDate>Mon, 23 Feb 2009 10:24:13 +0000</pubDate>
</item>
<item>
	<title>Limodou: 开始写《Learning Uliweb》</title>
	<guid>http://hi.baidu.com/limodou/blog/item/acbe94ca93575081c817682c.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/acbe94ca93575081c817682c.html</link>
	<description>地址在&lt;a href=&quot;http://www.17xie.com/book-32498995.html&quot; target=&quot;_blank&quot;&gt;这里&lt;/a&gt;。这是一个写书的网站很有意思，因此打算试一试。进度要看时间了，想到什么写什么。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/acbe94ca93575081c817682c.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Mon, 23 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: pygettext不支持ngettext</title>
	<guid>http://hi.baidu.com/limodou/blog/item/f5788c100794cc06203f2e42.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/f5788c100794cc06203f2e42.html</link>
	<description>Uliweb中使用修改过的pygettext版本，但是现在发现它不支持ngettext(msg1, msg2, n)这种形式。在网上也查到了这个问题，现在许多是使用xgettext工具。之所以使用pygettext是因为它是源码的，可以方便处理模板中的翻译字符串，且不需要安装其它的软件。现在先这样用吧。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/f5788c100794cc06203f2e42.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sun, 22 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 增加Timezone功能</title>
	<guid>http://hi.baidu.com/limodou/blog/item/0e35a5c22364261c0ff47747.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/0e35a5c22364261c0ff47747.html</link>
	<description>把timezone功能加进去了，结合前面我对pytz的研究，我写了一个date.py的模块，可以进行有关时区的转换。比如通过：date.set_timezone(tzname)可以设置一个缺省的时间，它可以对其它的有间函数起作用。&lt;br /&gt;
&lt;br /&gt;
几个有用的函数：&lt;br /&gt;
&lt;br /&gt;
now(tzinfo=None)可以得到当前时间&lt;br /&gt;
today(tzinfo=None)可以得到当前的日期&lt;br /&gt;
to_timezone(dt, tzinfo=None)可以将一个datetime对象转为指定的时区&lt;br /&gt;
to_date(dt, tzinfo=None)将一个datetime对象转为date对象&lt;br /&gt;
to_time(dt, tzinfo=None)将一个datetime对象转为time对象&lt;br /&gt;
to_datetime(dt, tzinfo=None, format=None)将一个date, time, datetime, string对象转为datetime对象&lt;br /&gt;
&lt;br /&gt;
以上方法当tzinfo为None时使用的是缺省的__timezone__值。而这个值是可以通过set_timezone(tzname)来设置的。&lt;br /&gt;
&lt;br /&gt;
那么这个功能是在SimpleFrame.Dispatch初始化时，根据settings.ini中的TIME_ZONE的值，调用date.set_timezone(settings.GLOBAL.TIMEZONE)来设置的。缺省是UTC时间。&lt;br /&gt;
&lt;br /&gt;
因此当你想使用这种功能时，一定要使用date提供的方法来生成时间对象。&lt;br /&gt; 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/0e35a5c22364261c0ff47747.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sun, 22 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 关于pytz的一些记录(续)</title>
	<guid>http://hi.baidu.com/limodou/blog/item/987ea8ec3dfa902063d09ff7.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/987ea8ec3dfa902063d09ff7.html</link>
	<description>在昨天与了关于pytz的东西后，还是发现一些问题。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import pytz, datetime&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tz = pytz.timezone('Asia/Shanghai')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tz&lt;br /&gt;
&amp;lt;DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
可以看到，它有一个&lt;strong&gt;LMT&lt;/strong&gt;，这是Local Mean Time的缩写，网上查一查意思是本地平均时。而且时间是+8:06，说明与UTC的时差不是8个小时整。先不管它，让我们转换一下试试。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; d = datetime.datetime(2009,2,21,23,18,5,tzinfo=tz)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; d&lt;br /&gt;
datetime.datetime(2009, 2, 21, 23, 18, 5, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
好，时区与tz是一样的，没什么。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x = d.astimezone(pytz.utc)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x&lt;br /&gt;
datetime.datetime(2009, 2, 21, 15, 12, 5, tzinfo=&amp;lt;UTC&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
我们转为了UTC时区，时间上有差异，没问题。&lt;br /&gt;
&lt;br /&gt;
让我们再转回来。&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x.astimezone(tz)&lt;br /&gt;
datetime.datetime(2009, 2, 21, 23, 12, 5, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
奇怪，看到了吧，变成了&lt;strong&gt;CST&lt;/strong&gt;了。时差也成了+8:00了。CST就是Central Standard Time的意思。但这样就造成了转换的不一致。我们应该使用CST标准才对。&lt;br /&gt;
&lt;br /&gt;
让我们再看一下：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.datetime.now(tz)&lt;br /&gt;
datetime.datetime(2009, 2, 22, 11, 11, 2, 125000, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD&amp;gt;)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.time(23, 18, 5, tzinfo=tz)&lt;br /&gt;
datetime.time(23, 18, 5, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
可以看到now()函数得到的是CST的，而time传入tzinfo是LMT的。（date不支持tzinfo参数）所以我们要进行修订，怎么做，使用timezone对象的localize()方法，如：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; d = datetime.datetime(2009,2,21,23,18,5)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tz.localize(d)&lt;br /&gt;
datetime.datetime(2009, 2, 21, 23, 18, 5, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
所以我才明白pytz的文档上说的：&lt;br /&gt;
&lt;br /&gt;
Creating localtimes is also tricky, and the reason why working with local times is not recommended. Unfortunately, you cannot just pass a &amp;lsquo;tzinfo&amp;rsquo; argument when constructing a datetime.&lt;br /&gt;
&lt;br /&gt;
所以我的建议是生成带时区的时间时，一定要使用timezone.localize()来生成。不要在时间对象的构造函数中传入tzinfo的方式来实现，为些我封装了一些函数放在了uliweb/utils/date.py中。&lt;br /&gt;
&lt;br /&gt;
另外关于北京时间。在pytz中，我无法找到Asia/Beijing和GMT+8这样的时区设置，但是有些时间转换的工具却有。按理说pytz使用的是标准的时区数据库，我特意下载了查看，的确是没有。&lt;br /&gt;
&lt;br /&gt;
时区处理的确是挺麻烦的事。象有些数据库也支持这样的功能，如postgres支持set timezone的命令，这是在django中看到的。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt; 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/987ea8ec3dfa902063d09ff7.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sun, 22 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 关于pytz的一些记录</title>
	<guid>http://hi.baidu.com/limodou/blog/item/1e8ad507440417ca7a8947c3.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/1e8ad507440417ca7a8947c3.html</link>
	<description>如果你的程序要考虑时区，可以使用pytz。datetime模块中有tzinfo相关的东西，但是它是一个抽象类，文档上说：&lt;br /&gt;
&lt;br /&gt;
&lt;tt class=&quot;class&quot;&gt;tzinfo&lt;/tt&gt; is an abstract base clase, meaning that this class  should not be instantiated directly. You need to derive a concrete subclass, and  (at least) supply implementations of the standard &lt;tt class=&quot;class&quot;&gt;tzinfo&lt;/tt&gt;  methods needed by the &lt;tt class=&quot;class&quot;&gt;datetime&lt;/tt&gt; methods you use. The &lt;tt class=&quot;module&quot;&gt;datetime&lt;/tt&gt; module does not supply any concrete subclasses of &lt;tt class=&quot;class&quot;&gt;tzinfo&lt;/tt&gt;. &lt;br /&gt;
&lt;br /&gt;
上面是说tzinfo是一个抽象类，不应该被直接实例化。你需要派生子类，提供相应的标准方法。datetime模块并不提供tzinfo的任何子类。&lt;br /&gt;
&lt;br /&gt;
所以你可能会使用pytz这个模块。通过easy_install可以安装。目前它的最新文档在&lt;a href=&quot;http://pytz.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;这里&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
关于时区使用的几点想法：&lt;br /&gt;
&lt;br /&gt;
1. 如果你的网站可能有来自其它时区的，可能你要考虑这个问题。都是一个地区的话，还要看服务器是否与用户在一个地区，如果不在，也要考虑。&lt;br /&gt;
2. 因此，基本上要考虑服务器时区与用户时区。服务器时区可以配置在系统中，全局生效。而用户时区则与用户相关，可以由用户自已进行设置。&lt;br /&gt;
3. 在生成相关时间对象时要加入时区的信息，并在输出时进行合适的转换。&lt;br /&gt;
&lt;br /&gt;
而pytz提供了创建某个时区对象的方法，如，中国时区：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import pytz&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; pytz.country_timezones('cn')&lt;br /&gt;
['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']&lt;br /&gt;
&lt;br /&gt;
可以看到，中国的时区可能有：'Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing'，最后两个不知道是什么。我们可能使用的'Asia/Shanghai'比较多。&lt;br /&gt;
&lt;br /&gt;
因此可以创建一个时区对象：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tz = pytz.timezone('Asia/Shanghai')&lt;br /&gt;
&lt;br /&gt;
然后在创建时间对象时进行指定：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import datetime&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.datetime.now(tz)&lt;br /&gt;
datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD&amp;gt;)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=tz)&lt;br /&gt;
datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD&amp;gt;)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.date(2009, 2, 21, tzinfo=tz)&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
TypeError: 'tzinfo' is an invalid keyword argument for this function&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; datetime.time(15, 12, 33, tzinfo=tz)&lt;br /&gt;
datetime.time(15, 12, 33, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
从上面可以看出now(), datetime(), time()都是可以指定tzinfo信息的，而date是不行的，不知道为什么。所以最好的方法是内部使用datetime对象，需要时进行时区转换，然后再输出。&lt;br /&gt;
&lt;br /&gt;
时区转换：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; utc = pytz.utc&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; n = datetime.datetime.now(tz)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; n&lt;br /&gt;
datetime.datetime(2009, 2, 21, 15, 16, 41, 843000, tzinfo=&amp;lt;DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD&amp;gt;)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; new = n.astimezone(utc)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; new&lt;br /&gt;
datetime.datetime(2009, 2, 21, 7, 16, 41, 843000, tzinfo=&amp;lt;UTC&amp;gt;)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; utc.normalize(n.astimezone(utc))&lt;br /&gt;
datetime.datetime(2009, 2, 21, 7, 16, 41, 843000, tzinfo=&amp;lt;UTC&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://zh.wikipedia.org/wiki/UTC&quot; target=&quot;_blank&quot;&gt;utc&lt;/a&gt;是世界标准时间。&lt;br /&gt;
&lt;br /&gt;
上面的代码通过astimezone(utc)将中国时间转为utc标准时间，可以看到不同的时区时间已经不一样了。不过在pytz的文档上说：&lt;br /&gt;
&lt;br /&gt;
Converting between timezones also needs special attention. This also needs to use the normalize method to ensure the conversion is correct.&lt;br /&gt;
&lt;br /&gt;
要注意什么呢？是 daylight savings time，中文叫&lt;a href=&quot;http://zh.wikipedia.org/w/index.php?title=%E6%97%A5%E5%85%89%E7%AF%80%E7%B4%84%E6%99%82%E9%96%93&amp;variant=zh-cn&quot; target=&quot;_blank&quot;&gt;日光节约时间&lt;/a&gt;或夏令时。对于有采用了夏时制的要使用normzlize来处理，不采用的，直接使用astimezone来处理。所以在通常情况下使用astimezone()就足够了。&lt;br /&gt;
&lt;br /&gt;
另外pytz还提供了全部的timezone信息，如：&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from pytz import all_timezones&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; len(all_timezones)&lt;br /&gt;
559&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from pytz import common_timezones&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; len(common_timezones)&lt;br /&gt;
393&lt;br /&gt;
&lt;br /&gt;
可以看到有很多。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/1e8ad507440417ca7a8947c3.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sat, 21 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 有趣的devthought上的天气效果</title>
	<guid>http://hi.baidu.com/limodou/blog/item/cab76c228709d1a34623e889.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/cab76c228709d1a34623e889.html</link>
	<description>&lt;a target=&quot;_blank&quot; href=&quot;http://devthought.com/&quot;&gt;devthought.com&lt;/a&gt;  真有趣，有一个天气显示的效果，不过不是与真正的天气对应。它的云彩是可以动的，并且当你把鼠标放到云彩上时，会有下雨的效果。点击右上角天气的链接会有一个说明。在说明中说到：当在这个页面上没有鼠标活动时，云彩是不会动的。它是使用mootools来实现的。非常有趣，大家可以看一看。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Mootools&quot;&gt;Mootools&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/cab76c228709d1a34623e889.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sat, 21 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: User manager test added in uliweb-tests</title>
	<guid>http://hi.baidu.com/limodou/blog/item/09ab18d8f976593233fa1c95.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/09ab18d8f976593233fa1c95.html</link>
	<description>In this test, you can see the: register, login, logout, settings(change password and change email, and portrait). Yes, this test support user portrait, and it'll automatically resize the uploaded image to (50, 50) size. There is a screenshot you can see:&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://hiphotos.baidu.com/limodou/pic/item/dbc7d1162eb19c38962b4332.jpg&quot; target=&quot;_blank&quot;&gt;
&lt;div align=&quot;center&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://hiphotos.baidu.com/limodou/pic/item/dbc7d1162eb19c38962b4332.jpeg&quot; class=&quot;blogimg&quot; /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;div align=&quot;left&quot;&gt;If you want to use it, you should also install PIL package, using easy_install PIL is ok.&lt;/div&gt;
&lt;/div&gt; 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/09ab18d8f976593233fa1c95.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Tue, 17 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>80's Blog: The Legend Returns[80s Studio 2009回归]</title>
	<guid>http://blog.80s.net.cn/?p=515</guid>
	<link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/195769319/4919905/1/item.html</link>
	<description>&lt;p&gt;经历了2008年的沉寂后, 我们决定回来了. 80s studio(&lt;a href=&quot;http://www.80s.net.cn/&quot;&gt;www.80s.net.cn&lt;/a&gt;)已经很久没有更新了,甚至出现了只有80s team blog 而不见主站的局面. 以至于圈里的很多新来的朋友都问我80s是不是就一个blog, 没有其他的东西了. 这次80s studio的回归就是我给大家最好的答案.&lt;/p&gt;
&lt;p&gt;这次我们采用了Bruce Lee的创意, 虽然比较简单, 但是从中大家足以见到我们的用心, 希望我们的作品能给大家带来一些新鲜感 &amp;#8211; 原来Flash还可以做这个, 原来Flash还可以这样做.&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.80s.net.cn&quot;&gt;&lt;img src=&quot;http://blog.80s.net.cn/wp-content/uploads/2009/02/screen_shot_002.jpg&quot; alt=&quot;screen_shot_002.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.80s.net.cn&quot;&gt;&lt;img src=&quot;http://blog.80s.net.cn/wp-content/uploads/2009/02/screen_shot_001.jpg&quot; alt=&quot;screen_shot_001.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下是将我们的创意分阶段实施的步骤:&lt;/p&gt;
&lt;p&gt;第一阶段/Phase 1:&lt;br /&gt;
用户可以看到一个真正的3D李小龙并且可以任意的切换视角, 选择李小龙的动作.&lt;br /&gt;
For user can realize the Flash is ready to create a real 3D web&lt;br /&gt;
application without any activeX or Plugin.&lt;br /&gt;
第二阶段/Phase 2:&lt;br /&gt;
用户可以用我们动作库中的很多李小龙的标志性动作自己创建李小龙动画并且可以把完成好的动画发给朋友&lt;br /&gt;
User can access the website to customize their own Bruce Lee real time&lt;br /&gt;
3D animation with lots of landmark actions from our action library.&lt;br /&gt;
And send the completion animation to friends.&lt;br /&gt;
第三阶段/Phase 3:&lt;br /&gt;
用户可以上传自己的照片替换掉李小龙的脸,制作真正意义上的&amp;#8221;自己的李小龙&amp;#8221;.&lt;br /&gt;
User can make an own Bruce Lee by uploading their own profile photos.&lt;/p&gt;
&lt;p&gt;您现在正在观看的是我们计划的第一阶段.&lt;br /&gt;
Now all you can see on the web page is Phase One.&lt;/p&gt;
&lt;p&gt;因为时间和精力有限, 整个site在创意和实施过程中的时间都比较紧促, 有什么不足还请大家发意见给我们. 下面就请大家来欣赏[&lt;a target=&quot;_blank&quot; href=&quot;http://www.80s.net.cn&quot;&gt;The Legend Returns|80s studio 2009&lt;/a&gt;]&lt;/p&gt;
&lt;h3&gt;随机日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2005年08月08日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=242&quot; title=&quot;模仿大师的效果（3）&quot;&gt;模仿大师的效果（3） (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2004年11月30日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=169&quot; title=&quot;IKEA(宜家)的在线展示应用&quot;&gt;IKEA(宜家)的在线展示应用 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2005年08月08日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=244&quot; title=&quot;欢迎Flash 8(STUDIO 8)&quot;&gt;欢迎Flash 8(STUDIO 8) (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2004年11月04日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=139&quot; title=&quot;RIA的到来(译)&quot;&gt;RIA的到来(译) (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2005年03月08日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=211&quot; title=&quot;《Flash mx 2004 游戏开发》一书中的错误代码（1）&quot;&gt;《Flash mx 2004 游戏开发》一书中的错误代码（1） (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/468dfedd41786178f8272f60daef5020&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/468dfedd41786178f8272f60daef5020/s.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description>
	<pubDate>Sun, 15 Feb 2009 11:43:04 +0000</pubDate>
</item>
<item>
	<title>Limodou: Mootools正在征求志愿翻译者</title>
	<guid>http://hi.baidu.com/limodou/blog/item/30b3c9fca64926fafd037f54.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/30b3c9fca64926fafd037f54.html</link>
	<description>Mootools是一个象jQuery一样的Ajax框架，我已经开始学，不过忙于Uliweb所以学得不深，还不会用它做些什么。它的一些想法是更接近于Prototype.js的，即修改原生的类。而jQuery则不对原生的javascript类做变化。所以对于喜欢面向方式的人可能更容易接受Prototype.js或Mootools。&lt;br /&gt;
&lt;br /&gt;
现在1.3版就要发布了，有一些是在more的包中的东西。核心作者&lt;span class=&quot;HcCDpe&quot;&gt;&lt;span class=&quot;EP8xU&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;Aaron Newton在邮件列表中写了一封邮件征求志愿翻译者，因为有一些本地化的东西可能需要翻译，原文如下：&lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;Hi all,&lt;br /&gt;
&lt;br /&gt;
We've been hard at work on the next version of MooTools &amp;quot;More&amp;quot; - the&lt;br /&gt;
official plugins for MooTools. The new version includes at least two&lt;br /&gt;
plugins that create messages (a form validator that displays errors&lt;br /&gt;
and a date plugin that has the days of the week, the months, etc). The&lt;br /&gt;
new plugins also include a localization system so that these can be&lt;br /&gt;
translated into various languages.&lt;br /&gt;
&lt;br /&gt;
What we need are people who speak languages other than English to help&lt;br /&gt;
us translate these words and phrases as they come up. As of today we&lt;br /&gt;
have numerous translations for portions of these plugins but some are&lt;br /&gt;
incomplete and new additions will require help as well.&lt;br /&gt;
&lt;br /&gt;
If you'd like to help us with this task, please join the Google Group&lt;br /&gt;
we've created for this purpose:&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://groups.google.com/group/mootools-lang&quot;&gt;http://groups.google.com/group/mootools-lang&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
We'll post requests and instructions there as they arise.&lt;br /&gt;
&lt;br /&gt;
所以你有兴趣欢迎加入为Mootools作些贡献。现在我看到有人已经报名准备为：法语，俄语，葡萄牙语，丹麦语，波兰语进行翻译了。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Mootools&quot;&gt;Mootools&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/30b3c9fca64926fafd037f54.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sun, 15 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 关于Grady写的《uliweb guestbook 排错》的回复</title>
	<guid>http://hi.baidu.com/limodou/blog/item/39dfcb806646e9d09023d943.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/39dfcb806646e9d09023d943.html</link>
	<description>&lt;a href=&quot;http://blog.csdn.net/oncoding/archive/2009/02/15/3893576.aspx&quot; target=&quot;_blank&quot;&gt;原文&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
看到文章后拿guestbook的demo试了试，真是有问题，是因为ORM模块调整造成的。但是因为auto_now和auto_now_add的生成是使用当前时间，因此我的ORM的测试中是不包含这块东西的，结果就出了错。这块本来是要放到Model中的_get_data()方法中的，结果只处理了auto_now，但是auto_now_add没有处理。现在在svn中已经修复了，感谢Grady。&lt;br /&gt;
&lt;br /&gt;
这两者的区别是：auto_now是只要保存就会修改这个值，而auto_now_add是只有当第一次插入时会生成日期值，以后则不会变化。这一点应该是与django一致的。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/39dfcb806646e9d09023d943.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sun, 15 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 发现一个新的关于Ulipad的视频</title>
	<guid>http://hi.baidu.com/limodou/blog/item/83da0308c599efd663d98673.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/83da0308c599efd663d98673.html</link>
	<description>是在Showmedo上，见&lt;a href=&quot;http://showmedo.com/videos/video?name=4520000&amp;fromSeriesID=452&quot; target=&quot;_blank&quot;&gt;这里&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
不过很简单，是讲如何在Ulipad中切换2.5和3.0解释器的。有兴趣可以看一看，是一位外国朋友做的，我不认识。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Ulipad&quot;&gt;Ulipad&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/83da0308c599efd663d98673.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Sun, 15 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: Jython 2.5b1中from java.xxx import *的bug</title>
	<guid>http://hi.baidu.com/limodou/blog/item/e2c2f724812dd2348744f993.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/e2c2f724812dd2348744f993.html</link>
	<description>今天在试验jython时，我使用的是2.5b1版本，结果发现在使用：&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  from java.lang import *&lt;br /&gt;
&lt;br /&gt;
时，得到的东西都是NoneType。结果我只好换成2.2版本就没有这个问题。&lt;br /&gt;
&lt;br /&gt;
到了晚上终于搜到了：有人报告到jython的问题中，编号是 &lt;a href=&quot;http://bugs.jython.org/issue1230&quot; target=&quot;_blank&quot;&gt;#1230&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
这个问题已经被修复，见&lt;a href=&quot;http://fisheye3.atlassian.com/changelog/jython/?cs=5957&quot; target=&quot;_blank&quot;&gt;这里&lt;/a&gt;。于1月21日改的。改动就是两行，但是太影响使用了。&lt;br /&gt;
&lt;br /&gt;
如果你不想换回老版本(因为新版本有许多特性)，那么可以：&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  from java.lang import Class&lt;br /&gt;
&lt;br /&gt;
之类的，这样就没有问题，不过就是有些麻烦。希望早些得到新版本。&lt;br /&gt; 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/e2c2f724812dd2348744f993.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Thu, 12 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: 阅读《Django到底有什么好?》</title>
	<guid>http://hi.baidu.com/limodou/blog/item/9691e8247a5073064d088d17.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/9691e8247a5073064d088d17.html</link>
	<description>原文： &lt;a target=&quot;_blank&quot; href=&quot;http://ch-linghu.3322.org/blog/entry/249&quot;&gt;Django到底有什么好?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
看到这篇之后的确想起令狐虫是对当时我的推荐有不同的意见。其实从个人角度来说，一个框架会面临许许多多的使用者，他们的层次不同，要求不同，水平不同。而django的特点就是统一，集成，功能完备，admin是极为出色的一个亮点。这许多的功能让它与其它的python web框架一比就耀眼得多。但是我也不想说什么django太多的优点，更何况我是认为django有许多缺点了，但相比其它的框架，就不能要求太高了。&lt;br /&gt;
&lt;br /&gt;
不过从文章中我们可以看出，令狐同学的功力比较深，所以他喜欢先定置，然后在此基础之上再进行开发。但他也说到，这种定制需要花精力，对项目也有一些影响。这一点与我在前面所写的&lt;a target=&quot;_blank&quot; href=&quot;http://hi.baidu.com/limodou/blog/item/8a9a5ab5a9a462c936d3ca93.html&quot;&gt;《merb的不可知--与uliweb框架的走向》&lt;/a&gt;的观点比较接近。太灵活等于没做完，就象werkzeug一样：我不是一个框架，但是我搜集了许多web开发相关的工具，可以让你自已组建。但是并不是人人都能做，都想做，或做得好的。因为框架的成熟，稳定，成长是需要时间的。两三天做出来的可能只够自已用。因些在灵活的基础之上，再应该有一些定制的东西，可以让用户快速上手。再用户越来越熟悉之后，再进行定制，这样比较好。&lt;br /&gt;
&lt;br /&gt;
现在许多开发都讲究快节奏，都希望立杆见影。比如我有时看到一个东西，总想看一看有没有demo, screenshots之类的，先有个初步感觉后再进行深入。框架也不例外，因为选择太多，如果你不方便让人家上手，人家可没时间陪你玩啊，谁的时间不宝贵啊。（虽然有些急功近利的意思，但是也说明发展的趋势）&lt;br /&gt;
&lt;br /&gt;
所以目前我对uliweb的想法就是，灵活能做多少做多少，同时要尽可能的将做过的经验以app的形式保存起来，以方便重用。只有这样，再开发才能真正提高效率，让更多的注意力在新的东西上。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/9691e8247a5073064d088d17.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Wed, 11 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: uliweb-tests可以访问了</title>
	<guid>http://hi.baidu.com/limodou/blog/item/5058d62a96edff2ad52af13a.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/5058d62a96edff2ad52af13a.html</link>
	<description>昨天我创建了uliweb-tests项目，地址在： &lt;a target=&quot;_blank&quot; href=&quot;http://code.google.com/p/uliweb-tests&quot;&gt;http://code.google.com/p/uliweb-tests&lt;/a&gt;, 它将用来存放我写的一些简单的测试程序，大家可以下载并运行看到一些执行结果和代码示例。&lt;br /&gt;
&lt;br /&gt;
欢迎大家加入这个项目，如果感兴趣你可以向其中贡献代码，不需要是完整的，代码片段也是可以的，但希望是可以运行的。&lt;br /&gt;
&lt;br /&gt;
如果你想加入，只要告诉我你的gmail邮箱，我会把你加入项目中， 这样你就可以提交代码了。 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/5058d62a96edff2ad52af13a.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Wed, 11 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: django m2m自包含</title>
	<guid>http://blog.khsing.net/2009/02/django-m2m.html</guid>
	<link>http://blog.khsing.net/2009/02/django-m2m.html</link>
	<description>设计一个group，可以包含user也可以包含group。user和group都可以被多个group包含。
&lt;pre&gt;
class Group(models.Model):
    users = models.ManyToManyField(User)
    groups = models.ManyToManyField('self')
&lt;/pre&gt;
update: &lt;code&gt;ManyToMany&lt;/code&gt;对象有一个&lt;code&gt;symmetrical&lt;/code&gt;的参数，当为&lt;code&gt;True&lt;/code&gt;时的意思是对象间有互相拥有的关系，是双向的，反之为&lt;code&gt;False&lt;/code&gt;时就是单向的。</description>
	<pubDate>Tue, 10 Feb 2009 07:12:34 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 大裤叉配楼火灾</title>
	<guid>http://blog.khsing.net/2009/02/post-1.html</guid>
	<link>http://blog.khsing.net/2009/02/post-1.html</link>
	<description>引自《阿房宫赋》：
&lt;blockquote&gt;
楚人一炬，可怜焦土！
&lt;/blockquote&gt;</description>
	<pubDate>Tue, 10 Feb 2009 06:49:38 +0000</pubDate>
</item>
<item>
	<title>Limodou: 如何用logging输出一条有用的日志</title>
	<guid>http://hi.baidu.com/limodou/blog/item/dbc7d1168f02731f972b43ab.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/dbc7d1168f02731f972b43ab.html</link>
	<description>平时logging模块我用得不多，不过在GAE上有时进行测试，我发现它可以输出执行的程序名。其实这一点并不困难，下面就是告诉你如何做。这里我今天在uliweb中修改的一段代码。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   import logging&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   log = None&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   FORMAT = &amp;quot;%(levelname)-8s %(asctime)-15s %(filename)s,%(lineno)d] %(message)s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   def get_logger(format=FORMAT, datafmt=None):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   global log&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   handler = logging.StreamHandler()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   fmt = logging.Formatter(format, datafmt)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   handler.setFormatter(fmt)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   log = logging.getLogger('uliweb')&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   log.addHandler(handler)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   log.setLevel(logging.INFO)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   return log&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   if __name__ == '__main__':&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   log = get_logger()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   log.error('This is an error %s', 'aaaa')&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   log.warning('This is an warning')&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   try:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   1/0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   except Exception, e:&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;   log.exception(e)&lt;br /&gt;
&lt;br /&gt;
每个Handler可以设置自已的日志格式，上面我预定义了一个FORMAT，其中%(asctime)-15s用来输出日，精确到毫秒，%(filename)s 输出文件主名，%(lineno)d为执行的行号，%(message)是用来输出用户的日志。这些参数都是logging自带的，在logging.py中的Formatter类中的详细的描述：&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(name)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Name of the logger (logging channel)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(levelno)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Numeric logging level for the message (DEBUG, INFO,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   WARNING, ERROR, CRITICAL)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(levelname)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Text logging level for the message (&amp;quot;DEBUG&amp;quot;, &amp;quot;INFO&amp;quot;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;quot;WARNING&amp;quot;, &amp;quot;ERROR&amp;quot;, &amp;quot;CRITICAL&amp;quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(pathname)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Full pathname of the source file where the logging&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   call was issued (if available)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(filename)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Filename portion of pathname&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(module)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Module (name portion of filename)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(lineno)d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Source line number where the logging call was issued&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   (if available)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(funcName)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Function name&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(created)f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Time when the LogRecord was created (time.time()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   return value)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(asctime)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Textual time when the LogRecord was created&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(msecs)d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Millisecond portion of the creation time&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(relativeCreated)d Time in milliseconds when the LogRecord was created,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   relative to the time the logging module was loaded&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   (typically at application startup time)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(thread)d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Thread ID (if available)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(threadName)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Thread name (if available)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(process)d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Process ID (if available)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   %(message)s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   The result of record.getMessage(), computed just as&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   the record is emitted&lt;br /&gt;
&lt;br /&gt;
比文档好象详细多了。&lt;br /&gt;
&lt;br /&gt;
上面的测试代码输出结果为：&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;   2009-02-10 10:03:10,733 log.py,19] This is an error aaaa&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   WARNING  2009-02-10 10:03:10,733 log.py,20] This is an warning&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;   2009-02-10 10:03:10,733 log.py,24] integer division or modulo by zero&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   Traceback (most recent call last):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   File &amp;quot;D:\project\svn\uliweb\uliweb\utils\log.py&amp;quot;, line 22, in &amp;lt;module&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   1/0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   ZeroDivisionError: integer division or modulo by zero&lt;br /&gt; 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/dbc7d1168f02731f972b43ab.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Tue, 10 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 厚积薄发之MapReduce算法的快速构建</title>
	<guid>http://www.kamang.net/223 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/223</link>
	<description>&lt;p&gt;读者是没有耐心的，我也没有，所以先说结论：你可以不用编程序，只要鼠标点几下拖动些图标，改改参数，就能完成过亿数据的分布处理程序。&lt;/p&gt;
&lt;p&gt;当然，这么理想的目标现在还没有达到，但路已经明明白白的展现在面前了，至少我们已经走了接近一半了。&lt;/p&gt;
&lt;p&gt;首先说明， MapReduce算法本身就来自于函数式编程，因此用FP的思路来进行算法构建是再合理不过的事情。之前的程序是用Haskell开发的，现在用Python重新写了一个版本。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/223&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 06 Feb 2009 05:28:53 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 对待平等</title>
	<guid>http://blog.khsing.net/2009/02/post.html</guid>
	<link>http://blog.khsing.net/2009/02/post.html</link>
	<description>&lt;p&gt;云风的一篇&lt;a href=&quot;http://blog.codingnow.com/2009/02/equality.html&quot;&gt;平等&lt;/a&gt;讲述了他们团队对平等的一些理解。&lt;a href=&quot;http://herock.net/2009/02/post_16.html&quot;&gt;herock&lt;/a&gt;又对平等产生了许些质疑。我从电影&lt;a href=&quot;http://www.douban.com/subject/1308837/&quot;&gt;King Arthur&lt;/a&gt;里觉的人与人之间的平等是重要的，也是人与人之间互相尊敬的一个基础。其实真正的平等并不存在，herock重在说明这一情况（唯物）。而云风则更注重人对人的平等，且不论平等是否存在（唯心）。&lt;/p&gt;
&lt;p&gt;摘电影里的一句话&lt;/p&gt;
&lt;blockquote&gt;
Every man must be equal.
&lt;/blockquote&gt;
&lt;p&gt;我当时取名Gawain(圆桌骑士之一)即是受这部电影的影响。&lt;/p&gt;</description>
	<pubDate>Fri, 06 Feb 2009 02:07:57 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 一个safari地址栏的小技巧</title>
	<guid>http://blog.khsing.net/2009/02/safari.html</guid>
	<link>http://blog.khsing.net/2009/02/safari.html</link>
	<description>&lt;p&gt;按Command(⌘)和L是移动焦点到地址栏，然后再按Command(⌘)和分号(; semicolon)就是修改当前地址的各个部分了，多按几次修改的部分就不同&lt;/p&gt;</description>
	<pubDate>Fri, 06 Feb 2009 01:12:05 +0000</pubDate>
</item>
<item>
	<title>Limodou: A great article about &amp;#34;with&amp;#34; syntax</title>
	<guid>http://hi.baidu.com/limodou/blog/item/0ba35baf02e980fcfaed50eb.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/0ba35baf02e980fcfaed50eb.html</link>
	<description>The original article title is &amp;quot;&lt;a target=&quot;_blank&quot; href=&quot;http://jessenoller.com/2009/02/03/get-with-the-program-as-contextmanager-completely-different/&quot;&gt;Get with the program as contextmanager&lt;/a&gt;&amp;quot; wirtten by jesse. This article talks about the &amp;quot;with&amp;ldquo; usage, it illustrates with many examples. If you have interesting in this, you should read it carefully. 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/0ba35baf02e980fcfaed50eb.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Wed, 04 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: New &amp;#34;Django Step by Step 1.0.2&amp;#34; tutorial</title>
	<guid>http://hi.baidu.com/limodou/blog/item/59b708243ee25d2cd50742c7.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/59b708243ee25d2cd50742c7.html</link>
	<description>I saw 浊风 has begun to revise my old &amp;quot;Django Step to Step&amp;quot; tutorial, my old tutorial is written at 2006.8, and at that time, the Django version is still 0.96. Later, I revised it to 0.97, but I've not maintained it any more. Because I'm working my own Python web framework -- Uliweb -- now. And some places in the tutorial can not be run in lastest 1.0.2 version, so 浊风's work is great! He doesn't just fix the problem in the tutorial, but rewrite it at all, and the main part are similar with the old one.&lt;br /&gt;
&lt;br /&gt;
So I'm thinking maybe I should write a tutorial about Uliweb just like &amp;quot;Django Step to Step&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[Link]&lt;a target=&quot;_blank&quot; href=&quot;http://www.7blog.org/archives/django-step-by-step-102/&quot;&gt;Django Step by Step 1.0.2&lt;/a&gt; The new tutorial is not finished yet. 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/59b708243ee25d2cd50742c7.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Wed, 04 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: How to display table creation SQL statement in SQLAlchemy</title>
	<guid>http://hi.baidu.com/limodou/blog/item/1be4d78851644d93a5c27260.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/1be4d78851644d93a5c27260.html</link>
	<description>I asked this question in sqlalchemy mail list, and got the answer, you can find in sqlalchemy &lt;a target=&quot;_blank&quot; href=&quot;http://www.sqlalchemy.org/trac/wiki/FAQ#HowcanIgettheCREATETABLEDROPTABLEoutputasastring&quot;&gt;FAQ&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I copied the example in here:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  from sqlalchemy import *&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    from StringIO import StringIO&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    buf = StringIO()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    engine = create_engine('postgres://', strategy='mock', executor=lambda s, p='': buf.write(s + p))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    meta = MetaData()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    t1 = Table('sometable', meta, Column('foo', String(30)))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    meta.create_all(engine)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    print buf.getvalue()&lt;br /&gt;
&lt;br /&gt;
The most important thing in above example is the create_engine invoking.&lt;br /&gt;
&lt;br /&gt;
The example uses 'postgress://', and I've tested it with 'sqlite://', and it's different in some column definition. And the strategy='mock' will prevent the tables creation exactly.&lt;br /&gt;
&lt;br /&gt;
So with this help I also added an 'sql' command in Uliweb, so that you can see the creation SQL. 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/1be4d78851644d93a5c27260.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Wed, 04 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: django login</title>
	<guid>http://blog.khsing.net/2009/02/django-login.html</guid>
	<link>http://blog.khsing.net/2009/02/django-login.html</link>
	<description>&lt;p&gt;最近写一个django项目的时候犯懒，把admin的login form给简单的扒出来用了用，感觉还不错。&lt;/p&gt;
&lt;p&gt;先把&lt;code&gt;display_login_form&lt;/code&gt;给扒出来&lt;/p&gt;
&lt;pre&gt;
def display_login_form(request, error_message='', extra_context=None):
    request.session.set_test_cookie()
    context = {
        'title': 'Log in',
        'app_path': request.get_full_path(),
        'error_message': error_message,
        'root_path': '',
    }
    context.update(extra_context or {})
    return render_to_response('admin/login.html', context,
        context_instance=template.RequestContext(request)
    )
&lt;/pre&gt;
&lt;p&gt;然后自己再写一个&lt;code&gt;login&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;
def login(request):
    if request.POST:
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None and user.is_active:
            auth.login(request, user)
            return http.HttpResponseRedirect(request.get_full_path())
        else:
            return display_login_form(request,&quot;Login error!&quot;)
    else:
        return display_login_form(request)
&lt;/pre&gt;
&lt;p&gt;需要认证的地方就这样写&lt;/p&gt;
&lt;pre&gt;
def login_test(request):
    if not request.user.is_authenticated():
        return login(request)
    else:
        return http.HttpResponse(&quot;Welcome %s&quot; % request.user)
&lt;/pre&gt;

update: 上面那个方法还是不够懒，细读了一下文档，可以这样写。
&lt;ul&gt;
&lt;li&gt;settings.py&lt;/li&gt;
&lt;pre&gt;
LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/'
&lt;/pre&gt;
&lt;li&gt;urls.py&lt;/li&gt;
&lt;pre&gt;
    (r'^login/','django.contrib.auth.views.login',{'template_name': 'admin/login.html'}),
    (r'^logout/','superman.lib.views.logout'),
&lt;/pre&gt;
&lt;/ul&gt;</description>
	<pubDate>Tue, 03 Feb 2009 06:48:48 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 易用的touchpad</title>
	<guid>http://blog.khsing.net/2009/02/usability-of-touchpad.html</guid>
	<link>http://blog.khsing.net/2009/02/usability-of-touchpad.html</link>
	<description>&lt;p&gt;有个朋友最近入手一台二手&lt;a href=&quot;http://support.apple.com/kb/SP68&quot;&gt;iBook(Late 2004)&lt;/a&gt;。试用了一下，发现Touchpad不支持双个手指滚动的功能，立时感到易用性下降许多。&lt;/p&gt;
&lt;p&gt;我用的是&lt;a href=&quot;http://support.apple.com/kb/SP43&quot;&gt;Mid 2005&lt;/a&gt;版，有双个手指滚动的功能，很方便。以前有一个单键的Apple Pro Mouse，但是很不好用，后来索性把鼠标拨了不用了，直接用Touchpad。键盘使用的频率要比鼠标高的多，要用到鼠标，手掌就会离开托手的位置，之后再回到托手的位置，Touchpad虽然精度不高但是手掌不用离开托手（我是懒人）。如果仅是如此还是不够，要拖动滚动条的时候还是麻烦，Touchpad远不如鼠标的滚轮方便，但是Apple近乎完美的解决了这个问题，就是用两个手指滚动，这远比其他厂商采用的右侧滚动区(HP等)或第三键滚动(IBM)方便的多。&lt;/p&gt;
&lt;p&gt;虽然现在的&lt;a href=&quot;http://www.apple.com/support/macbook/&quot;&gt;MacBook&lt;/a&gt;都有了Multi-Touch，其易用性也已经不可同日而语了，但我觉的最重要的还是两个手指(two finger)滚动(两个手指还可以当右键使two finger+单击)。&lt;/p&gt;</description>
	<pubDate>Tue, 03 Feb 2009 05:00:52 +0000</pubDate>
</item>
<item>
	<title>Limodou: Fwd: Debugging doctests interactively</title>
	<guid>http://hi.baidu.com/limodou/blog/item/74be4034fa7df849241f1444.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/74be4034fa7df849241f1444.html</link>
	<description>The artical is at &lt;a href=&quot;http://farmdev.com/thoughts/69/debugging-doctests-interactively/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can use this module to interactive when you are testing with doctest.&lt;br /&gt;
&lt;br /&gt;
There are also some tests in Uliweb, and some of them are implemented by doctest, but some times, it's not easy to inspect the variables, run some other code when you executing the test, and this tool will help me a lot.&lt;br /&gt;
&lt;br /&gt;
It's simple to use, just add below code in your doctest:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;gt;&amp;gt;&amp;gt; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;gt;&amp;gt;&amp;gt; import interlude&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;gt;&amp;gt;&amp;gt; interlude.interact(locals())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;gt;&amp;gt;&amp;gt; ...&lt;br /&gt;
&lt;br /&gt;
Remember, you should install interlude first, you can use:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  easy_install interlude&lt;br /&gt;
&lt;br /&gt;
to install it. 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/74be4034fa7df849241f1444.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Tue, 03 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Limodou: Simple Admin App Launched</title>
	<guid>http://hi.baidu.com/limodou/blog/item/7f856a6008a74243eaf8f859.html</guid>
	<link>http://hi.baidu.com/limodou/blog/item/7f856a6008a74243eaf8f859.html</link>
	<description>Yesterday, I added a new app named Admin to Uliweb. You can use this simple app to explore some internal information of your project. If you want to use it, just run below command:&lt;br /&gt;
&lt;br /&gt;
uliweb runadmin&lt;br /&gt;
&lt;br /&gt;
This command will automatically add admin app to your project, so you can use http://localhost:8000/admin to visit admin app.&lt;br /&gt;
&lt;br /&gt;
Of cause you can add 'uliweb.contrib.admin' to INSTALLED_APPS like normal apps, but above command shows that you can add new apps to SimpleFrame.Dispatcher class(it's the core application class of Uliweb). And in this app, I also used yaml css framework, and I also wrap it to a yaml app, so that you can use it in your project. But for now, yaml app just includes static files, so you should write your own layout template first, and arrange the basic layout in this file, maybe we can do better later, for example, provide some finished layout template. But for now you can see the &lt;a href=&quot;http://www.yaml.de/en/&quot; target=&quot;_blank&quot;&gt;yaml&lt;/a&gt; examples and copy them into your project. &lt;br /&gt;
&lt;br /&gt;
So the admin app will depend on yaml app, and yaml app will depend on uliweb.contrib.staticfiles app. But you don't need to include all these app, just admin app enough, because Uliweb will automatically process these dependencies for you according the config.ini. 
		
		&lt;br /&gt;&lt;b&gt;类别：&lt;/b&gt;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/category/Uliweb&quot;&gt;Uliweb&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://hi.baidu.com/limodou/blog/item/7f856a6008a74243eaf8f859.html#comment&quot;&gt;查看评论&lt;/a&gt;</description>
	<pubDate>Mon, 02 Feb 2009 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 备案警告</title>
	<guid>http://blog.khsing.net/2009/01/beian-notice.html</guid>
	<link>http://blog.khsing.net/2009/01/beian-notice.html</link>
	<description>刚才想down个驱动，上了nVidia，最后&lt;a href=&quot;http://cn.download.nvidia.com/Windows/nForce/15.24/15.24_nforce_winvista32_international_whql.exe&quot;&gt;打开的下载地址&lt;/a&gt;竟然是：
&lt;blockquote&gt;
警告：该网站未备案，按照国家相关法律法规，该网站被临时屏蔽，请网站拥有者尽快到国家工业和信息化部备案网站http://www.miibeian.org.cn对网站进行备案!
联系方式：+8622-27234501
&lt;/blockquote&gt;
&lt;p&gt;算你狠！！&lt;/p&gt;
&lt;p&gt;update: 房东同学告诉我这个www.miibeian.org.cn的网站不是工信部的，域名被截了？今晚回家看看。&lt;/p&gt;</description>
	<pubDate>Sat, 31 Jan 2009 12:25:51 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 本命年来了</title>
	<guid>http://blog.khsing.net/2009/01/my-year-is-coming.html</guid>
	<link>http://blog.khsing.net/2009/01/my-year-is-coming.html</link>
	<description>&lt;p&gt;过了春节就是牛年了，所有的广告都开始加上一句Happy牛year了，特别是蒙牛。不巧本人正是在牛年生的，是牛尾（腊月），所以荣幸的明年是我的本命年。都说本命年不顺，要系红腰带、穿红袜子，总之就是要穿红才能顺，我自然也逃不过，家里人已经替我预备好了，就等大年三十晚上换上了。&lt;/p&gt;
&lt;p&gt;受中国文化影响较深的国家的人都会在过年的时候回家，不知道其它国家的春运搞的怎么样，我们是相当的火爆啊。我从15号开始买24号的票，连排了三天都无果，最后还是找了个黄牛，听说今年的学生更惨都不能站着回家了，深表同情。&lt;/p&gt;
&lt;p&gt;明天就回家了，上网的机会就不多了。愿本命年的人顺顺当当的过一年，阿门！&lt;/p&gt;</description>
	<pubDate>Fri, 23 Jan 2009 15:26:21 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 开写从Windows转投Mac怀抱</title>
	<guid>http://blog.khsing.net/2009/01/switch-to-mac-1.html</guid>
	<link>http://blog.khsing.net/2009/01/switch-to-mac-1.html</link>
	<description>&lt;p&gt;我是一个Mac Fans，周围的朋友买了Mac有用的很开心的，也有用了一段时间又回到了Windows的。使用电脑会养成很多的习惯，比如启动程序的方法，文件管理的方法，命名的规则等等。而这些习惯一旦养成就不太容易改变，从Windows转向Mac的时候其实就是使用习惯的改变。我写这个系列是希望能帮助到从Windows投向Mac怀抱的人们。&lt;/p&gt;

&lt;p&gt;Link:&lt;a href=&quot;http://wiki.khsing.net/wiki/Mac/SwitchToMacOSX&quot;&gt;从Windows转投MacOSX怀抱&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 23 Jan 2009 05:21:41 +0000</pubDate>
</item>
<item>
	<title>HuangYi 's Blog: 所谓日久生情</title>
	<guid>tag:blogger.com,1999:blog-33791960.post-3715058342621257522</guid>
	<link>http://codeplayer.blogspot.com/2009/01/blog-post.html</link>
	<description>不要怀疑，这个日就是你心里想的那个日，而且是被。&lt;br /&gt;意思是说，再郁闷的东西，被郁闷久了，也总能从中发掘出一些稍微好玩一点的东西出来。&lt;br /&gt;&lt;a href=&quot;http://huangyilib.googlecode.com/svn/trunk/doc/js_best_practice.html&quot;&gt;http://huangyilib.googlecode.com/svn/trunk/doc/js_best_practice.html&lt;/a&gt;&lt;br /&gt;当然，玩python的兄弟就不要点了，主要是用来忽悠没玩过动态语言的朋友的。</description>
	<pubDate>Tue, 20 Jan 2009 07:20:00 +0000</pubDate>
	<author>noreply@blogger.com (黄毅)</author>
</item>
<item>
	<title>Gawain's Jail: 从播放器说起</title>
	<guid>http://blog.khsing.net/2009/01/start-from-player.html</guid>
	<link>http://blog.khsing.net/2009/01/start-from-player.html</link>
	<description>&lt;p&gt;国内视频分享网站的播放器与&lt;a href=&quot;http://www.youtube.com&quot;&gt;YouTube&lt;/a&gt;的相比，少了一个功能：点击视频，回到YouTube本站该视频的页面。痴迷PV的国内网站为什么会少了这样一个功能呢？&lt;/p&gt;
&lt;p&gt;当我看到好的视频，就会点回到YouTube去收藏该视频。在我看来这显然是一举两得，即增加了PV，又拉到了用户。可是国内的网站为什么不做呢？&lt;a href=&quot;http://blog.donews.com/keso&quot;&gt;keso&lt;/a&gt;一语道破：&lt;/p&gt;
&lt;blockquote&gt;
他们要观众，要广告受众，不要用户。
&lt;/blockquote&gt;</description>
	<pubDate>Tue, 20 Jan 2009 03:48:00 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 周末小记</title>
	<guid>http://blog.khsing.net/2009/01/weekend.html</guid>
	<link>http://blog.khsing.net/2009/01/weekend.html</link>
	<description>&lt;p&gt;周末和&lt;a href=&quot;http://blog.sina.com.cn/wudi&quot;&gt;老婆&lt;/a&gt;去三里屯看了《非诚勿扰》，台词的彩头较多，剧情较差，140分钟有些太长了。有个笑场的地方是，葛尤说了一句：&quot;孽缘啊！&quot;，本不可乐，但是影院里有个小孩重复了这句话，一个童音版的话外音引得大家暴乐。从影院出来就去了&lt;a href=&quot;http://http://www.apple.com.cn/retail/sanlitun/&quot;&gt;Apple Store&lt;/a&gt;，老婆看上了&lt;a href=&quot;http://www.apple.com/macbookair/&quot;&gt;MacBook Air&lt;/a&gt;和&lt;a href=&quot;http://www.apple.com/ipodtouch/&quot;&gt;iPod Touch&lt;/a&gt;，我依然对&lt;a href=&quot;http://www.apple.com/macbookpro&quot;&gt;MacBook Pro&lt;/a&gt;心往神怡，新的unibody做工真是不可同日而语。质感！质感！无奈手中拮据，不能立时拍下这三样，日后一一置办吧！&lt;/p&gt;</description>
	<pubDate>Mon, 12 Jan 2009 01:12:17 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 第三章： 定义类型，流式函数</title>
	<guid>http://www.kamang.net/221 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/221</link>
	<description>&lt;p&gt;定义新的数据类型&lt;/p&gt;
&lt;p&gt;虽然列表和元组很有用，我们还是经常想要构建自己的数据类型。这可以我们在的程序的值上增加结构。可以把相关的值集合起来给一个名字，与其他类型相区分，来替代匿名元组的使用。定义自己的类型也可以提升代码的类型安全性：Haskell不会让我们偶尔把两个结构相似但类型名不同值弄混。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/221&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 10 Jan 2009 04:23:52 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: route flags in FreeBSD and Linux</title>
	<guid>http://blog.khsing.net/2009/01/route-flags-in-freebsd-and-lin.html</guid>
	<link>http://blog.khsing.net/2009/01/route-flags-in-freebsd-and-lin.html</link>
	<description>对比一下FreeBSD和Linux的关于路由表Flags的定义
相同的有
&lt;pre&gt;
U	Up: The route is active.
H	Host: The route destination is a single host.
G	Gateway: Send anything for this destination on to this remote system, which will figure out from there where to send it.
&lt;/pre&gt;
FreeBSD独有的:
&lt;pre&gt;
S	Static: This route was configured manually, not automatically generated by the system.
C	Clone: Generates a new route based upon this route for machines we connect to. This type of route is normally used for local networks.
W	WasCloned: Indicated a route that was auto-configured based upon a local area network (Clone) route.
L	Link: Route involves references to Ethernet hardware.
&lt;/pre&gt;
Linux独有的：
&lt;pre&gt;
R (reinstate route for dynamic routing)
D (dynamically installed by daemon or redirect)
M (modified from routing daemon or redirect)
A (installed by addrconf)
C (cache entry)
!  (reject route)
&lt;/pre&gt;
&lt;p&gt;FreeBSD里常看到的是UC, UHLW, UGS, UGHS这几种。UC根据本地网络配置自动生成的，UHLW是由UC根据连接情况自动生成的，UGS是手工配置的段网关路由，UGHS是手工配置的主机网关路由。&lt;/p&gt;
&lt;p&gt;Linux里常看到的是U, UG, UGH这几种。U和BSD的UC是一样的，UG和UGS一样，UGH和UGHS一样，没有UHLW。&lt;/p&gt;
&lt;p&gt;BSD明确区别了手工添加和自动生成，Linux则没有。还是BSD强大呀，XD&lt;/p&gt;
Ref:
&lt;ul&gt;
&lt;li&gt;FreeBSD Handbook: &lt;a href=&quot;http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-routing.html&quot;&gt;Gateways and Routes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux man page: &lt;a href=&quot;http://linux.die.net/man/8/route&quot;&gt;route(8)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Fri, 09 Jan 2009 07:43:27 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 为啥随手发的牢骚有人看，辛苦写的文章没人看呢……</title>
	<guid>http://www.kamang.net/220 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/220</link>
	<description>&lt;p&gt;看来大家都很忙。&lt;/p&gt;</description>
	<pubDate>Fri, 09 Jan 2009 05:38:21 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 牢骚</title>
	<guid>http://www.kamang.net/219 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/219</link>
	<description>&lt;p&gt;金山内部有很多富有创造力的人，为什么公司整体上却显得那么平庸缺乏创新呢？技术人员无出路。&lt;/p&gt;</description>
	<pubDate>Fri, 09 Jan 2009 03:10:05 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 第二章 类型与函数</title>
	<guid>http://www.kamang.net/218 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/218</link>
	<description>&lt;p&gt;为何关心类型？&lt;/p&gt;
&lt;p&gt;Haskell中任何一个表达式和函数都有类型。比如，逻辑值True是Bool类型，&quot;foo&quot;的类型是String。一个值的类型说明它与同类型的其他值共享一些特定的属性。例如，可以把数字相加，可以把列表进行连接，这些操作是这些类型的属性。我们说一个表达式“有一个类型X”或者“类型是X”。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/218&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 08 Jan 2009 08:37:30 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 第一章 快速上手</title>
	<guid>http://www.kamang.net/217 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/217</link>
	<description>&lt;p&gt;第一章 快速上手&lt;/p&gt;
&lt;p&gt;请注意在阅读本书前面几章时，我们有时会用受限制的简单的形式来介绍一些概念。Haskell是一种很有深度的语言，如果一次把给定主题的所有方面都展现出来的话，会压得初学者喘不过气来。当我们建立了Haskell的坚实基础后，我们会从最初的解释向上扩展。 &lt;/p&gt;
&lt;p&gt;Haskell环境&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/217&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 08 Jan 2009 08:36:39 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: Real World Haskell 中文版翻译</title>
	<guid>http://www.kamang.net/216 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/216</link>
	<description>&lt;p&gt;终于下决心开始了 Real World Haskell 的中文翻译。本博将公布此书中文版翻译的一部分内容，供大家预览。&lt;/p&gt;</description>
	<pubDate>Thu, 08 Jan 2009 08:35:52 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 使用Haskell在Hadoop上应用MapReduce算法处理关联数据统计</title>
	<guid>http://www.kamang.net/215 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/215</link>
	<description>&lt;p&gt;前一篇blog介绍了Haskell配合Hadoop进行MapReduce编程的基础，这两天实际应用此模式来处理一个将近2000万行记录的数据集的统计分析。&lt;/p&gt;
&lt;p&gt;几点感受：&lt;/p&gt;
&lt;p&gt;1. 开发确实简单，mapper和reducer加起来不到30行，完成了计数和关联列表的统计。（当然，Haskell程序里一行所包含的信息量是一般程序无法相比的）&lt;/p&gt;
&lt;p&gt;2 方便调试。 准备一个小的数据集，用一条shell命令串起来就可以调试了：&lt;br /&gt;
cat test.data | ./mapper | sort | ./reducer&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/215&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 07 Jan 2009 15:18:55 +0000</pubDate>
</item>
<item>
	<title>Gawain's Jail: 用sed从ifconfig取IP和mac地址</title>
	<guid>http://blog.khsing.net/2009/01/use-sed-to-got-mac-and-ip-from-ifconfig.html</guid>
	<link>http://blog.khsing.net/2009/01/use-sed-to-got-mac-and-ip-from-ifconfig.html</link>
	<description>作弊条一个，Linux下
&lt;pre&gt;
ifconfig | sed -e '/.*inet addr:/!d;s///;s/ .*//'
ifconfig | sed -e '/.*HWaddr \([:[:xdigit:]\-]*\).*/{s//\1/;p}'
&lt;/pre&gt;
FreeBSD下
&lt;pre&gt;
ifconfig | sed -e '/.*inet /!d;s///;s/ .*//'
ifconfig | sed -e '/.*ether/!d;s///;'
&lt;/pre&gt;
都要在sh或bash里执行。</description>
	<pubDate>Wed, 07 Jan 2009 07:28:54 +0000</pubDate>
</item>
<item>
	<title>AlbertLee 's Blog: 用 Haskell 在 Hadoop 之上实现 MapReduce 算法</title>
	<guid>http://www.kamang.net/214 at http://www.kamang.net</guid>
	<link>http://www.kamang.net/node/214</link>
	<description>&lt;p&gt;Hadoop 是相当优秀的开源 MapReduce 的实现。&lt;/p&gt;
&lt;p&gt;Hadoop提供了坚实高效的MapReduce 基础框架，应用时把算法转成 map 和  reduce 两部分，开发两个函数。Hadoop是用Java开发的，但是它的job程序不一定要用Java。它提供了两种与其他语言扩展的方式：&lt;/p&gt;
&lt;p&gt;1. Hadoop Streaming&lt;br /&gt;
读写都通过基本输入输出，因此原则上任意程序都可以与Hadoop交互&lt;/p&gt;
&lt;p&gt;2. Swig ， C++ 的接口（不是通过 JNI)&lt;/p&gt;
&lt;p&gt;这里使用第一种方式，实现一个入门的 WordCount 的  Haskell版本程序。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kamang.net/node/214&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 05 Jan 2009 08:53:39 +0000</pubDate>
</item>

</channel>
</rss>
