<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>叶落花开</title>
	<atom:link href="http://yekai.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://yekai.net</link>
	<description>Catge&#039;s blog, about web design&#38;develop.</description>
	<lastBuildDate>Thu, 15 Jul 2010 11:10:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>玩手机是一种寂寞，珍爱生命，远离手机</title>
		<link>http://yekai.net/?p=246</link>
		<comments>http://yekai.net/?p=246#comments</comments>
		<pubDate>Thu, 15 Jul 2010 11:10:20 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=246</guid>
		<description><![CDATA[“侧方位停车”最后一圈半总被我打反方向，师傅训斥我“练车不专心，别人开的时候就在旁边好好学，不要只顾玩手机！”。 这句话让我为之一怔。当玩手机变成一种习惯，而我自己又不曾发觉的时候，这是多么可怕的一件事情。 记得上周末和@dfdou等一行六人去川味观吃饭，沿着桌子做好后，我们不约而同拿起各自的手机check in起来，街旁、大众点评、foursquare。讨论了一下服务员MM胸很大以后，就各自玩起手机。当时我微微一笑，“还好我也有手机玩”。 这是一个很有趣的现象。当我在前公司的时候，每周五下午会有一次团队的例会。周会上10多人，其中1/4的人会玩BMP，2/4的人会玩手机，于是老板一次次“规定”不许带电脑，不许玩手机。（可是guiding只是乌龟的屁股） 仔细想想你会发现，通常玩手机的时候会是吃饭前等菜、会议中、坐车等，分析下动机无非是：我觉得无聊，如果不玩手机就会浪费时间。 @hhshushu 在上海上班，通常一个月能出差来次杭州，当我们一起吃饭的时候，不会玩手机，因为我们有太多需要交流的内容。dc 在的时候，给我们做过很多次前端技术分享，我脑海中始终还记得他那简单而又优雅的PPT风格，这种风格，我只在上届D2上@kejunz的分享上看到过。听他们的分享，我不会玩手机。当然后来做的很多次有关static和arale的分享（或者说应该是规定），我能玩手机就尽量玩。 前不久我看到陈果老师在优酷上的一节课程视频，她谈到孤独与寂寞的区别─“孤独是自成世界的独处，寂寞是迫于无奈的虚无”。正如阿桑在《叶子》中唱到“孤单是一个人的狂欢、狂欢是一群人的孤单”。据此推测，那些手机控恐怕就是寂寞党吧。 之前有位友人告诉我，她决定停止使用手机，原因是觉得“《手机》会带来太多的欺骗和不安…它带来的价值远大于它的负面影响”。一开始，我极力反对她的观点，大肆描述出游时手机上的google map和大众点评给我带来的好处。然而最后还是不得不同意：原本以为通过手机可以增强人际关系，却发现有了手机后与人交流反而更少。手机给人带来的错觉是：以为有一个号码在手，好像我就和这个人一直在保持联系着。然而，想想有多少号码，自己未曾拨打过，其中是否包括自己的亲人？ 这是一种不安的现实。正如互联网的出现给知识带来的冲击如出一辙。以为有了google，自己就NB了，却不知骨子里依然是个SB。 昨天我学dc在自己的hosts上加上了一行： 0.0.0.0 t.qq.com t.sina.com.cn twitter.com renren.com 因为我花了一天时间refresh这些站点，这是一种温水煮青蛙的阴谋。坐在电脑前“不停地忙碌”就好像自己真的在忙碌，没有在浪费时间。然而，看似“狂欢”实则“孤单”。玩手机又何尝不是如此？ 最后点这个链接看看伦敦的人在车上玩什么：） http://www.flickr.com/photos/cocoarmani/2120868475/]]></description>
			<content:encoded><![CDATA[<p><a title="Mobile phones and the Japanese by Cocoarmani, on Flickr" href="http://www.flickr.com/photos/cocoarmani/1315402174/"><img src="http://farm2.static.flickr.com/1414/1315402174_84d1627a5b.jpg" alt="Mobile phones and the Japanese" width="500" height="421" /></a></p>
<p>“侧方位停车”最后一圈半总被我打反方向，师傅训斥我“练车不专心，别人开的时候就在旁边好好学，不要只顾玩手机！”。</p>
<p>这句话让我为之一怔。<strong>当玩手机变成一种习惯，而我自己又不曾发觉的时候，这是多么可怕的一件事情。</strong></p>
<p>记得上周末和<a href="http://nwhy.org/">@dfdou</a>等一行六人去川味观吃饭，沿着桌子做好后，我们不约而同拿起各自的手机check in起来，街旁、大众点评、foursquare。讨论了一下服务员MM胸很大以后，就各自玩起手机。当时我微微一笑，“还好我也有手机玩”。</p>
<p>这是一个很有趣的现象。当我在前公司的时候，每周五下午会有一次团队的例会。周会上10多人，其中1/4的人会玩BMP，2/4的人会玩手机，于是老板一次次“规定”不许带电脑，不许玩手机。（可是guiding只是乌龟的屁股）</p>
<p>仔细想想你会发现，通常玩手机的时候会是吃饭前等菜、会议中、坐车等，分析下动机无非是：<strong>我觉得无聊，如果不玩手机就会浪费时间</strong>。</p>
<p>@hhshushu 在上海上班，通常一个月能出差来次杭州，当我们一起吃饭的时候，不会玩手机，因为我们有太多需要交流的内容。<a href="http://wi2ard.com/blog/">dc</a> 在的时候，给我们做过很多次前端技术分享，我脑海中始终还记得他那简单而又优雅的PPT风格，这种风格，我只在上届D2上@kejunz的分享上看到过。听他们的分享，我不会玩手机。当然后来做的很多次有关static和arale的分享（或者说应该是规定），我能玩手机就尽量玩。</p>
<p>前不久我看到<a href="http://v.youku.com/v_show/id_XMTg3Nzg5OTIw.html">陈果老师在优酷上的一节课</a>程视频，她谈到孤独与寂寞的区别─“<strong>孤独是自成世界的独处，寂寞是迫于无奈的虚无</strong>”。正如阿桑在《叶子》中唱到“孤单是一个人的狂欢、狂欢是一群人的孤单”。据此推测，那些手机控恐怕就是寂寞党吧。</p>
<p>之前有位友人告诉我，她决定停止使用手机，原因是觉得“《<a href="http://movie.douban.com/subject/1308747/">手机</a>》会带来太多的欺骗和不安…它带来的价值远大于它的负面影响”。一开始，我极力反对她的观点，大肆描述出游时手机上的google map和大众点评给我带来的好处。然而最后还是不得不同意：原本以为通过手机可以增强人际关系，却发现有了手机后与人交流反而更少。手机给人带来的错觉是：<strong>以为有一个号码在手，好像我就和这个人一直在保持联系着</strong>。然而，想想有多少号码，自己未曾拨打过，其中是否包括自己的亲人？</p>
<p>这是一种不安的现实。正如互联网的出现给知识带来的冲击如出一辙。以为有了google，自己就NB了，却不知骨子里依然是个SB。</p>
<p>昨天我学dc在自己的hosts上加上了一行：</p>
<p>0.0.0.0 t.qq.com t.sina.com.cn twitter.com renren.com</p>
<p>因为我花了一天时间refresh这些站点，这是一种<strong>温水煮青蛙的阴谋</strong>。坐在电脑前“不停地忙碌”就好像自己真的在忙碌，没有在浪费时间。然而，看似“狂欢”实则“孤单”。玩手机又何尝不是如此？</p>
<p>最后点这个链接看看伦敦的人在车上玩什么：）</p>
<p><a href="http://www.flickr.com/photos/cocoarmani/2120868475/">http://www.flickr.com/photos/cocoarmani/2120868475/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=246</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Velocity模板开发常见问题分享</title>
		<link>http://yekai.net/?p=232</link>
		<comments>http://yekai.net/?p=232#comments</comments>
		<pubDate>Wed, 30 Jun 2010 07:24:31 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=232</guid>
		<description><![CDATA[在twitter上看到 @Fenng 提到“国内分享velocity的不多”，忽然想起自己在支付宝用velocity开发了两年，和服务端开发同学也常为这个模板层的归属问题纠结不休。这也是我在淘宝上买这件velocity主题T恤的原因，上次去红京鱼吃饭，工友们对它表示了很大的兴趣^_^ 直入话题，把自己这两年的velocity开发经验的精华部分分享出来吧，相信足以应对前端模板开发的日常工作。这里我准备了一个VM版的，有运行环境的同学可以放上去跑起来看看。 问：遇到vm模板开发的问题一般怎么解决？ 首先官方手册PDF还是要收藏一份，英文的看不了，就去google上搜份中文手册看。手册上没有提及的只有去google.com（google.cn基本搜不到）上搜索了，用上一些英文关键字一般可以找到，实在找不到只有问周围的专业人士了。 问：如何通过URL传递整型变量到VM里？ 这个问题是我在做项目的时候遇到的一个实际问题，传一个参数进来，然后运算下。当时在国外一篇很老的归档帖子中看到了解决方案。set一个新整型，然后调用它的parseInt方法把string转成int，再进行计算，代码如下： #set&#40;$n = $!request.getParameter&#40;'n'&#41;&#41; #set&#40;$intNum = 0&#41; #set&#40;$m = $intNum.parseInt&#40;$n&#41; + 1&#41; 问：#parse和$tile.setTemplate()（或$control.setTemplate()）区别是啥？ #parse是先插入后解析，$tile是先解析后插入。 #parse和被#parse的页面变量相互共享，$tile变量需要传入。 #parse是代码块无须controller，$tile是通用组件需要controller。 #parse需要配置系统的默认path，推荐能用#parse就不要用$tile 问：VM模板里能取到哪些业务的值？ VM是模板解析层，一般可以通过$request取到很多业务数据。比如从当前request对象中取cookie： #foreach&#40;$cookie in $request.getCookies&#40;&#41;&#41; $cookie.name : $cookie.value #end 问：${catge}、$!catge、$catge这些写法有啥区别？ 这三种写法语义上是等价的。${catge}比$catge的好处是，可以用{}符号隔开变量和其他文字。$catge和$!catge区别在于当页面中不存在$catge时，$!catge将会不会再页面中显示。 问：VM里的循环、取对象什么的咋搞？ 循环啥的，学会怎么用#foreach语句就好了，想知道更多去Google下velocity的参考文档。循环能做的事情很多，比如上面的遍历出request里的cookie。 这里举个绑定一系列元素的JS表单校验的例子: &#34;attach3&#34;: &#123; desc: &#34;附件3&#34;, depends : true, required: true &#125;, &#34;attach4&#34;: &#123; desc: &#34;附件4&#34;, depends : true, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://s.click.taobao.com/t_1?i=rW%2BRIirkLD92zg%3D%3D&amp;p=mm_17290313_0_0&amp;n=11"><img class="alignnone size-full wp-image-233" title="velocity" src="http://yekai.net/wp-content/uploads/2010/06/velocity.gif" alt="velocity主题T恤" width="201" height="310" /></a></p>
<p><a href="https://twitter.com/bluedavy/statuses/17380538397">在twitter上看到 @Fenng 提到“国内分享velocity的不多”</a>，忽然想起自己在支付宝用<a href="http://b.baidu.com/view/77351.htm">velocity</a>开发了两年，和服务端开发同学也常为这个模板层的归属问题纠结不休。这也是我<a href="http://s.click.taobao.com/t_1?i=rW%2BRIirkLD92zg%3D%3D&amp;p=mm_17290313_0_0&amp;n=11" target="_blank">在淘宝上买这件velocity主题T恤的原因</a>，上次去红京鱼吃饭，工友们对它表示了很大的兴趣^_^</p>
<p>直入话题，把自己这两年的velocity开发经验的精华部分分享出来吧，相信足以应对前端模板开发的日常工作。这里<a href="http://code.google.com/p/catge/downloads/detail?name=vmflower.vm&amp;can=2">我准备了一个VM版的</a>，有运行环境的同学可以放上去跑起来看看。</p>
<h3>问：遇到vm模板开发的问题一般怎么解决？</h3>
<p>首先官方手册PDF还是要收藏一份，英文的看不了，就去<a href="http://www.google.com.hk/search?hl=zh-CN&amp;source=hp&amp;q=velocity+中文&amp;aq=f&amp;aqi=g-g2g2&amp;aql=&amp;oq=&amp;gs_rfai=">google上搜份中文手册</a>看。手册上没有提及的只有去google.com（google.cn基本搜不到）上搜索了，用上一些英文关键字一般可以找到，实在找不到只有问周围的专业人士了。</p>
<h3>问：如何通过URL传递整型变量到VM里？</h3>
<div id="_mcePaste">这个问题是我在做项目的时候遇到的一个实际问题，传一个参数进来，然后运算下。当时在国外一篇很老的归档帖子中看到了解决方案。set一个新整型，然后调用它的<strong>parseInt</strong>方法把string转成int，再进行计算，代码如下：</div>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#set<span style="color: #009900;">&#40;</span>$n <span style="color: #339933;">=</span> $<span style="color: #339933;">!</span>request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'n'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
#set<span style="color: #009900;">&#40;</span>$intNum <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><br />
#set<span style="color: #009900;">&#40;</span>$m <span style="color: #339933;">=</span> $intNum.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>$n<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span></div></div>
<h3>问：#parse和$tile.setTemplate()（或$control.setTemplate()）区别是啥？</h3>
<ul>
<li>#parse是先插入后解析，$tile是先解析后插入。</li>
<li>#parse和被#parse的页面变量相互共享，$tile变量需要传入。</li>
<li>#parse是代码块无须controller，$tile是通用组件需要controller。</li>
<li>#parse需要配置系统的默认path，推荐能用#parse就不要用$tile</li>
</ul>
<h3>问：VM模板里能取到哪些业务的值？</h3>
<p>VM是模板解析层，一般可以通过$request取到很多业务数据。比如从当前request对象中取cookie：</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#foreach<span style="color: #009900;">&#40;</span>$cookie in $request.<span style="color: #006633;">getCookies</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
$cookie.<span style="color: #006633;">name</span> <span style="color: #339933;">:</span> $cookie.<span style="color: #006633;">value</span><br />
#end</div></div>
<h3>问：${catge}、$!catge、$catge这些写法有啥区别？</h3>
<p>这三种写法语义上是等价的。${catge}比$catge的好处是，可以用{}符号隔开变量和其他文字。$catge和$!catge区别在于当页面中不存在$catge时，$!catge将会不会再页面中显示。</p>
<h3>问：VM里的循环、取对象什么的咋搞？</h3>
<p>循环啥的，学会怎么用<strong>#foreach</strong>语句就好了，想知道更多去Google下velocity的参考文档。循环能做的事情很多，比如上面的遍历出request里的cookie。</p>
<p>这里举个绑定一系列元素的JS表单校验的例子:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #3366CC;">&quot;attach3&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
desc<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;附件3&quot;</span><span style="color: #339933;">,</span><br />
depends <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
required<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;attach4&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
desc<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;附件4&quot;</span><span style="color: #339933;">,</span><br />
depends <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
required<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;attach5&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
desc<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;附件5&quot;</span><span style="color: #339933;">,</span><br />
depends <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
required<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></div></div>
<p>千万别copy大段相通的VM代码，用这句：</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#foreach <span style="color: #009900;">&#40;</span> $count in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span>..5<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><br />
<span style="color: #0000ff;">&quot;attach${count}&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
desc<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;附件${count}&quot;</span>,<br />
depends <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>,<br />
required<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span><br />
<span style="color: #009900;">&#125;</span>,<br />
#end</div></div>
<p>如果attch5是最后一个绑定元素呢？那最后一个逗号“,”就不要打出来，这里就引申出一个问题：<strong>怎样判断是否为循环的最后一次？</strong></p>
<p>这里要用到一个叫<strong>$velocityCount</strong>的变量，任何循环语句中都默认有这么一个标识当前循环次数的变量，而数组的长度都可以通过<strong>size()</strong>方法获取到。</p>
<p>源码：</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#set<span style="color: #009900;">&#40;</span>$array <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">5</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><br />
#foreach <span style="color: #009900;">&#40;</span> $count in $array <span style="color: #009900;">&#41;</span><br />
<span style="color: #0000ff;">&quot;attach${count}&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
<br />
desc<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;附件${count}&quot;</span>,<br />
depends <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>,<br />
required<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span><br />
<span style="color: #009900;">&#125;</span>#if<span style="color: #009900;">&#40;</span>$velocityCount <span style="color: #339933;">!=</span>$array.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,<br />
#end<br />
#end</div></div>
<h3>问：听说VM里有宏定义，这个啥东东？</h3>
<p>宏定义<strong>#macro</strong>就是把一些操作封装成类似function的方式来统一处理同类问题，具体你自己去google吧。有兴趣的话建议搜索系统当中叫<strong>macros-default.vm</strong>（或macros.vm）的文件，一般的宏定义都会写在这个文件里。<br />
需要说明的是，宏定义一般是放在某car的根目录上，在页面上也可以直接定义。宏定义修改之后需要deploy当前系统，否则方法会被缓存，看不到改动后的效果。</p>
<h3>问：VM里怎样生成随机数</h3>
<p>VM强大之处其实在于它的工具类，例如一般的VM都默认有<strong>$stringUtil</strong>这个字符串比较的类。<br />
有时我们需要给URL后加个随机数清清缓存。在webx系统你可以用$randomUtils.nextDouble()，在sofa MVC试试$math.getRandom()，如果不起作用，检查下是否配置了相应的工具类。</p>
<h3>问：如何通过VM来获取当前页面URL？</h3>
<p>貌似前面已经提到VM可以随意调用$request对象里的方法，获取到需要的值。</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//webx下获取当前页：</span><br />
$rundata.<span style="color: #006633;">getRequest</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getServerName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>$rundata.<span style="color: #006633;">getRequest</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getServletPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #666666; font-style: italic;">//sofa MVC下获取当前页：</span><br />
#set<span style="color: #009900;">&#40;</span>$pageAbsUrl <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;$!request.getServerName()&quot;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;$!request.getContextPath()&quot;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;$!request.getServletPath()&quot;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #666666; font-style: italic;">//获取引用页：</span><br />
$rundata.<span style="color: #006633;">getRequest</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;referer&quot;</span><span style="color: #009900;">&#41;</span></div></div>
<h3>问：VM该前端开发来做还是服务端开发来做？有啥意义？</h3>
<p>@catge认为服务端提供数据、接口，前端进行VM、CSS、JS开发。因为VM是DOM结构层，样式和脚本都要基于结构开发。<br />
比如有一个需求是为某些浏览器的用户增加一个全站的XBOX弹窗，提醒用户升级到股沟浏览器。你有两种选择方案，一种是用JS判断UA信息为该浏览器，然后将已经生成好的XBOX的DOM弹出来。第二种方案是在VM里取request里的http头信息里的UA信息，判断符合条件则生成这段DOM。<br />
咋一看，这两种方法差不多，而且通过VM来实现更复杂，因为VM里取浏览器类型和版本号十分困难，$stringUtil折腾来折腾去都没有JS来得快。<br />
但是如果需求方说的浏览器是指IE6.0以下版本的浏览器呢？为了几千个用户给几亿用户的前端代码里加上这段JS判断？那只能说你很2。<br />
@catge认为VM层的模板优化至关重要，VM不应该只包含业务逻辑，同时应该使用大量的展现逻辑，针对不同用户、不同来源、不同浏览器展现最优体验。</p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=232</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python写的计算24点小游戏</title>
		<link>http://yekai.net/?p=217</link>
		<comments>http://yekai.net/?p=217#comments</comments>
		<pubDate>Sun, 27 Jun 2010 11:16:22 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=217</guid>
		<description><![CDATA[最近在学习PHP &#38; Python，@hongqn 在他的《Python 于Web 2.0网站的应用》中提到了Python的哲学，我想这个应该就是我一直在寻找的吧。于是花了一下午在优酷上看完了《Python.Django视频教程-台湾辅仁大》的视频教程专辑，开始了写个Python小游戏的计划。 系统是Mac OS X Snow Leopard，结果装了个Xcode 3.1，啥东东都编译不了，很多python setup.py install都安装不通过。后来才知道雪豹必须装Xcode3.2+才行。 以下是我边写边学的python计算24点小游戏。求解24点算法那块我实在是没啥头绪，就这么悲剧的放着吧，毕竟这块不是我写这个小游戏的初衷。网上查了一些算法，不是错的就是用啥穷举的方法。通过写这个小游戏，我学会了以下一些内容： 1、dictionary的操作，&#8217;i&#8217; in dict返回True or False 2、list的操作，list.append()、&#8221;.join(list)、list.sort() 3、整型随机数生成，random.randint() 4、正则表达式，re.match()、 5、字符操作，替换 string.replace()、大小转换string.upper() 6、eval()语句的用法及其安全性问题 7、类型转换，int(str)、str(int) 8、程序执行时传入自定义参数的方法，for argv in sys.argv 9、判断当前运行程序是否为其本身 __name__==&#8217;__main__&#8217; 10、指定程序字符编码encoding: utf-8 放在第一行注释中 除以上几点外，程序中用到的其他语句有：import、循环、字符串拼接、print多行。 代码展示： # Code by yekai.net, encoding: utf-8 import random import re import sys nums = &#91;&#93; poker = [...]]]></description>
			<content:encoded><![CDATA[<p>最近在学习PHP &amp; Python，@hongqn 在他的《<a href="http://www.slideshare.net/hongqn/qcon2010-3881323">Python 于Web 2.0网站的应用</a>》中提到了<a href="http://www.python.org/dev/peps/pep-0020/">Python的哲学</a>，我想这个应该就是我一直在寻找的吧。于是花了一下午在优酷上看完了《<a href="http://www.soku.com/search_video/q_Python.Django视频教程-台湾辅仁大">Python.Django视频教程-台湾辅仁大</a>》的视频教程专辑，开始了写个Python小游戏的计划。</p>
<p>系统是Mac OS X Snow Leopard，结果装了个Xcode 3.1，啥东东都编译不了，很多python setup.py install都安装不通过。后来才知道雪豹必须装Xcode3.2+才行。</p>
<p>以下是我边写边学的python计算24点小游戏。求解24点算法那块我实在是没啥头绪，就这么悲剧的放着吧，毕竟这块不是我写这个小游戏的初衷。网上查了一些算法，不是错的就是用啥穷举的方法。通过写这个小游戏，我学会了以下一些内容：</p>
<p>1、dictionary的操作，&#8217;i&#8217; in dict返回True or False</p>
<p>2、list的操作，list.append()、&#8221;.join(list)、list.sort()</p>
<p>3、整型随机数生成，random.randint()</p>
<p>4、正则表达式，re.match()、</p>
<p>5、字符操作，替换 string.replace()、大小转换string.upper()</p>
<p>6、eval()语句的用法及其安全性问题</p>
<p>7、类型转换，int(str)、str(int)</p>
<p>8、程序执行时传入自定义参数的方法，for argv in sys.argv</p>
<p>9、判断当前运行程序是否为其本身 __name__==&#8217;__main__&#8217;</p>
<p>10、指定程序字符编码encoding: utf-8 放在第一行注释中</p>
<p>除以上几点外，程序中用到的其他语句有：import、循环、字符串拼接、print多行。</p>
<p>代码展示：</p>
<div class="codecolorer-container python blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;"># Code by yekai.net, encoding: utf-8</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">random</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span><br />
<br />
nums = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
poker = <span style="color: #008000;">False</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> conver2Cards<span style="color: black;">&#40;</span>nums<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; cards = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; cardDict = <span style="color: black;">&#123;</span><span style="color: #483d8b;">'1'</span>:<span style="color: #483d8b;">'A'</span>,<span style="color: #483d8b;">'11'</span>:<span style="color: #483d8b;">'J'</span>,<span style="color: #483d8b;">'12'</span>:<span style="color: #483d8b;">'Q'</span>,<span style="color: #483d8b;">'13'</span>:<span style="color: #483d8b;">'K'</span><span style="color: black;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> nums:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> poker <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> cardDict:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cards.<span style="color: black;">append</span><span style="color: black;">&#40;</span>cardDict<span style="color: black;">&#91;</span><span style="color: #008000;">str</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cards.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #008000;">str</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> cards<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> getCards<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; newnums = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> nums<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; newnums.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">random</span>.<span style="color: black;">randint</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">13</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; nums = newnums<span style="color: #66cc66;">;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> conver2Cards<span style="color: black;">&#40;</span>newnums<span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> getAnswer<span style="color: black;">&#40;</span>nums<span style="color: black;">&#41;</span>:&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> nums:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #008000;">str</span><span style="color: black;">&#40;</span>nums<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>抱歉，24点算法我写不出来，请指教：http://yekai.net/?p=217'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #ff7700;font-weight:bold;">def</span> calc<span style="color: black;">&#40;</span>exp<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; match = <span style="color: #dc143c;">re</span>.<span style="color: black;">match</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'^<span style="color: #000099; font-weight: bold;">\(</span>?[0-9]{1,2}[-+*/]{1}<span style="color: #000099; font-weight: bold;">\(</span>?[0-9]{1,2}<span style="color: #000099; font-weight: bold;">\)</span>?[-+*/]{1}<span style="color: #000099; font-weight: bold;">\(</span>?[0-9]{1,2}<span style="color: #000099; font-weight: bold;">\)</span>?[-+*/]{1}[0-9]{1,2}<span style="color: #000099; font-weight: bold;">\)</span>?$'</span>,exp<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> match:<br />
&nbsp; &nbsp; &nbsp; &nbsp; inputnums = <span style="color: #dc143c;">re</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'[-+*/()]+'</span>,exp.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'('</span>,<span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">')'</span>,<span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; inputnums = <span style="color: black;">&#91;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> inputnums<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; inputnums.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> nums <span style="color: #66cc66;">!</span>= inputnums: <span style="color: #ff7700;font-weight:bold;">return</span> -<span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">eval</span><span style="color: black;">&#40;</span>exp<span style="color: black;">&#41;</span> == <span style="color: #ff4500;">24</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> -<span style="color: #ff4500;">2</span><br />
&nbsp; &nbsp; <br />
<span style="color: #ff7700;font-weight:bold;">def</span> newGame<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; running = <span style="color: #008000;">True</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'-------------------<span style="color: #000099; font-weight: bold;">\n</span>Cards: &nbsp;'</span> +<span style="color: #483d8b;">' &nbsp;'</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>getCards<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><br />
&nbsp; &nbsp; nums.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; x = <span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Input Your Answer:'</span><span style="color: black;">&#41;</span>.<span style="color: black;">upper</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> x == <span style="color: #483d8b;">'Q'</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; running = <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Game Over, bye~<span style="color: #000099; font-weight: bold;">\n</span>'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">break</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> x == <span style="color: #483d8b;">'K'</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Answer:'</span> + getAnswer<span style="color: black;">&#40;</span>nums<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">break</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> x == <span style="color: #483d8b;">''</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">continue</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x = x.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'A'</span>,<span style="color: #483d8b;">'1'</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'J'</span>,<span style="color: #483d8b;">'11'</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Q'</span>,<span style="color: #483d8b;">'12'</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'K'</span>,<span style="color: #483d8b;">'13'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y = calc<span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>y == -<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Please Input Correct Format,el: (2+6)*(5-2)'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span><span style="color: black;">&#40;</span>y == -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Please use the given cards!'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span><span style="color: black;">&#40;</span>y == <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'ERROR:'</span>+ x +<span style="color: #483d8b;">'='</span>+ <span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #008000;">eval</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>Please Try Again:)'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'CORRECT!'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">break</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> running:<br />
&nbsp; &nbsp; &nbsp; &nbsp; newGame<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__==<span style="color: #483d8b;">'__main__'</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> argv <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>argv == <span style="color: #483d8b;">'poker=on'</span><span style="color: black;">&#41;</span>:poker = <span style="color: #008000;">True</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&quot;&quot;<br />
======Welcome to calc24 game======<br />
Notes:<br />
[Q] Exit Game<br />
[K] Get Answer<br />
Poker Mode: poker=on<br />
&quot;&quot;&quot;</span><br />
&nbsp; &nbsp; newGame<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></div>
<p>下载源文件：<a href="http://code.google.com/p/catge/downloads/detail?name=calc24.py&amp;can=2">calc24.py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=217</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《把时间当朋友》读书笔记，句句珠玑</title>
		<link>http://yekai.net/?p=212</link>
		<comments>http://yekai.net/?p=212#comments</comments>
		<pubDate>Fri, 25 Jun 2010 03:07:07 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Share]]></category>
		<category><![CDATA[studynote]]></category>
		<category><![CDATA[好书]]></category>
		<category><![CDATA[时间]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=212</guid>
		<description><![CDATA[6月1号那天，我无意中看到李笑来老师的《把时间当朋友》的博文介绍，并且从他那里下载到该书的电子版（下载地址）。说来也很巧合，在“家里蹲大学”读了大概半个月的书后，我渐渐意识到三件最重要的事情：1、时间；2、健康；3、读书。正如毕淑敏在《预约死亡》中提到，《人生有三件事不可俭省》：“第一件事是学习。 第二件事是旅游。旅行让我们的身体感到不同的风和水， 我们的头脑也在不同风情的滋养下变得机敏和多彩。目光因此老辣，谈吐因此谦逊。 第三件事是锻炼身体。” 李笑来老师的这本书在我看来，不像是一本成功学的书，也不同于老罗在《我的奋斗》中的叙事风格。它更像是一本关于时间的handbook，从许许多多的小故事、小论证中发现关于人生的真谛。在豆瓣上，我给了这本书5颗星。通过书中介绍的一种“event-time-log”的时间记录方法，让我渐渐体会到时间的宝贵。 以下是摘抄的一些觉得重要的句子，再次重温一遍，留作备份。 所有学习上的成功,都只靠两件事:策略和坚持,而坚持本身就是最重要的策略。 与其不停地找更好的方法,还不如马上开始行动,省得虚度更多的时间。 有两种办法很简单却又非常有效。第一种办法是当你面临尴尬的时候,记得一定要拿出纸笔来,把你所遇到的尴尬记录下来——当然,最好是记录在同 一个本子里。另外一个办法是,在面临尴尬的时候,尽量弱化你的痛苦。控制自己的情绪,不要被你的大脑的直接反应所左右。 背单词等于数钞票的故事。（P42） 事实上,在做所有类似的必须记住大量信息的工作的时候,一定要想办法由衷地把这件事当作快乐的事情来做。 “大多数孩子没有等到主持人回来,已经把糖吃掉了”这样一个事实能够完全证明的或者说明的也许只有两件事儿:a.希望自己的欲望马上获得满足(Instant Gratification)是大多数人的天性;b.野心永远是少数人的天性。 “推迟满足感”是心智成熟的人必备的能力,也是需要挣扎和锻炼 才可以习得的能力。 控制这种天性正确的方法是,仔细审视一下自己在哪方面这种天性尤为强烈?再一次拿出纸笔罗列。经过几天甚至几个月的长期反复审视,你会发现那 个列表变得越来越长。别怕,相信我,谁都是这样的——至少 99.9%的人是这 样的。然后从列表中挑出一个最重要的(如果你有野心的话,再挑出一个也很重要的),写在随时可以看到的地方,不停地提醒自己在这方面一定要控制这种天性。 开始学着做每日的“事件记录(” Event Log) 《奇特的一生》 大约两个星期不到的时间里,我马上体会到了这种新的记录方法的另外一个巨大好处:它会使你对时间的感觉越来越精确。 判断一件事情是否真的重要的标准只有一个:是否对你的目标(无论是长期,还是短期)的实现有益。 证明我的目标现实可行的方法比较简单:a.已经有人做到了;b.我与那人没有太大的差距。 听听劝,从今天开始养成随时记笔记的习惯吧。相信我,最朴素的纸和笔是最有效的工具。 可是时间 却不会仅仅因为结果无法承受而倒流,时间的属性决定了我们每个人都不可能 真正拥有从头再来的机会 我做完这件事之后所获得的欢乐和幸福是不是一定要建立在比较的基 础上才可以获得？然后标记出并优先实施那些无需比较就可以获得欢乐和幸福的行动方案。时间会一如既往地分分秒秒、岁岁年年地流逝,但,你会惊讶于 你生活的变化。每一秒,每一分钟,每一天,每一年,时间的质量由 于对幸福的追求和感知的差异竟然会如此不同。 接受自己与别人没什么不同,至少没什么本质性上的不同,是心智正常成 长的重要前提之一。 我只不过是想提醒你,“人家说什么你就信什么,挺傻的。” 尽管概率有些时候是可以计算出来的,但肯定不是 你能控制的。欲望尽管并不总是可以被满足,却是你自己能控制,甚至可能完 全控制的。浪费时间、虚度年华的人,有个共同的特征——他们拼命想控制自己完全不能控制的,却在自己真正能掌控的地方彻底失控。 相信运气其实是缺乏自制力的表现。 你开始理解为什么那么 多的人迷信血型、星座,查皇历决定自己的运程,偷偷献祭求吉兆,或者背地里 下咒希望自己讨厌或者憎恨的人不得好死。无一例外,其实只不过是人们在面对 自己完全无法控制的现实时所表现出的软弱无奈的另外一种方式。 那些 相信“好运气”存在的人,其实往往是为了逃避尴尬的现状,才寄希望于所谓“奇 迹”的出现,奢望可以轻而易举地咸鱼翻身——他们忘了,咸鱼翻身了之后还是 咸鱼。 千万不要相信“机不 可失,时不再来”。当你没有准备好的时候,对你来讲,不存在任何机会。而当你准备好的时候,随处都有机会,而且 所有的机会都是切实的,并且是可以把握的。 所以说,往往只有优秀的人才拥有有效的人脉。 花 10 分钟 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="把时间当朋友" src="http://img2.douban.com/lpic/s3778613.jpg" alt="" width="318" height="417" /></p>
<p>6月1号那天，我无意中看到<a href="http://www.lixiaolai.com/index.php/archives/9456.html">李笑来老师的《把时间当朋友》的博文介绍</a>，并且从他那里下载到该书的电子版（<a href="http://www.lixiaolai.com/time-friend.zip">下载地址</a>）。说来也很巧合，在“家里蹲大学”读了大概半个月的书后，我渐渐意识到三件最重要的事情：1、时间；2、健康；3、读书。正如毕淑敏在《<a href="http://book.douban.com/subject/4050808/">预约死亡</a>》中提到，《人生有三件事不可俭省》：“第一件事是学习。 第二件事是旅游。旅行让我们的身体感到不同的风和水， 我们的头脑也在不同风情的滋养下变得机敏和多彩。目光因此老辣，谈吐因此谦逊。 第三件事是锻炼身体。”</p>
<p>李笑来老师的这本书在我看来，不像是一本成功学的书，也不同于老罗在《<a href="http://book.douban.com/subject/4741216/">我的奋斗</a>》中的叙事风格。它更像是一本关于时间的handbook，从许许多多的小故事、小论证中发现关于人生的真谛。<a href="http://book.douban.com/subject/3609132/">在豆瓣上，我给了这本书5颗星</a>。通过书中介绍的一种“event-time-log”的时间记录方法，让我渐渐体会到时间的宝贵。</p>
<p>以下是摘抄的一些觉得重要的句子，再次重温一遍，留作备份。</p>
<div>
<ol>
<li>所有学习上的成功,都只靠两件事:策略和坚持,而<strong>坚持本身就是最重要的策略</strong>。</li>
<li>与其不停地找更好的方法,还不如马上开始行动,<strong>省得虚度更多的时间</strong>。</li>
<li>有两种办法很简单却又非常有效。第一种办法是当你面临尴尬的时候,记得一定要拿出纸笔来,把你所遇到的尴尬记录下来——当然,最好是记录在同 一个本子里。另外一个办法是,在面临尴尬的时候,尽量弱化你的痛苦。控制自己的情绪,不要被你的大脑的直接反应所左右。</li>
<li>背单词等于数钞票的故事。（P42）</li>
<li>事实上,在做所有类似的必须记住大量信息的工作的时候,<strong>一定要想办法由衷地把这件事当作快乐的事情来做</strong>。</li>
<li>“大多数孩子没有等到主持人回来,已经把糖吃掉了”这样一个事实能够完全证明的或者说明的也许只有两件事儿:a.希望自己的欲望马上获得满足(Instant Gratification)是大多数人的天性;b.野心永远是少数人的天性。</li>
<li>“推迟满足感”是心智成熟的人必备的能力,也是需要挣扎和锻炼 才可以习得的能力。</li>
<li>控制这种天性正确的方法是,仔细审视一下自己在哪方面这种天性尤为强烈?再一次拿出纸笔罗列。经过几天甚至几个月的长期反复审视,你会发现那 个列表变得越来越长。别怕,相信我,谁都是这样的——至少 99.9%的人是这 样的。然后从列表中挑出一个最重要的(如果你有野心的话,再挑出一个也很重要的),写在随时可以看到的地方,不停地提醒自己在这方面一定要控制这种天性。</li>
<li>开始学着做每日的“事件记录(” Event Log)</li>
<li>《奇特的一生》</li>
<li>大约两个星期不到的时间里,我马上体会到了这种新的记录方法的另外一个巨大好处:它会使你对时间的感觉越来越精确。</li>
<li><strong>判断一件事情是否真的重要的标准只有一个</strong>:是否对你的目标(无论是长期,还是短期)的实现有益。</li>
<li>证明我的目标现实可行的方法比较简单:a.已经有人做到了;b.我与那人没有太大的差距。</li>
<li>听听劝,从今天开始养成随时记笔记的习惯吧。相信我,<strong>最朴素的纸和笔是最有效的工具</strong>。</li>
<li>可是时间 却不会仅仅因为结果无法承受而倒流,时间的属性决定了我们每个人都不可能 真正拥有从头再来的机会</li>
<li>我做完这件事之后所获得的欢乐和幸福是不是一定要建立在比较的基 础上才可以获得？然后标记出并优先实施那些无需比较就可以获得欢乐和幸福的行动方案。时间会一如既往地分分秒秒、岁岁年年地流逝,但,你会惊讶于 你生活的变化。每一秒,每一分钟,每一天,每一年,时间的质量由 于对幸福的追求和感知的差异竟然会如此不同。</li>
<li>接受自己与别人没什么不同,至少没什么本质性上的不同,是心智正常成 长的重要前提之一。</li>
<li>我只不过是想提醒你,“<strong>人家说什么你就信什么,挺傻的</strong>。”</li>
<li>尽管概率有些时候是可以计算出来的,但肯定不是 你能控制的。欲望尽管并不总是可以被满足,却是你自己能控制,甚至可能完 全控制的。浪费时间、虚度年华的人,有个共同的特征——他们拼命想控制自己完全不能控制的,却在自己真正能掌控的地方彻底失控。</li>
<li><strong>相信运气其实是缺乏自制力的表现</strong>。</li>
<li>你开始理解为什么那么 多的人迷信血型、星座,查皇历决定自己的运程,偷偷献祭求吉兆,或者背地里 下咒希望自己讨厌或者憎恨的人不得好死。无一例外,其实只不过是人们在面对 自己完全无法控制的现实时所表现出的软弱无奈的另外一种方式。</li>
<li>那些 相信“好运气”存在的人,其实往往是为了逃避尴尬的现状,才寄希望于所谓“奇 迹”的出现,奢望可以轻而易举地咸鱼翻身——他们忘了,咸鱼翻身了之后还是 咸鱼。</li>
<li>千万不要相信“机不 可失,时不再来”。当你没有准备好的时候,对你来讲,不存在任何机会。而当你准备好的时候,随处都有机会,而且 所有的机会都是切实的,并且是可以把握的。</li>
<li>所以说,往往只有优秀的人才拥有有效的人脉。</li>
<li>花 10 分钟 学习一下 Google 上的通配符的使用</li>
<li>每次我掌握了一门新的技能(是否足够精通,或者是否比别人强实际 上根本不重要),我就感觉自己重生一次——如此看来,其实人一生原本可以 有很多辈子的,只不过是大多数人放弃了而已。</li>
<li>事实上,就好像没有任何机器可以一直用 100% 的功率运转一样,没有任何人可以 100%有效率。</li>
<li><strong>选择意味着放弃</strong>。你做某件事情,可能就不能做另外一件事情;哪怕你觉得你两件事情 可以一块儿做,实际上,你也已经不可能做第三件事情了。</li>
<li>交了年费之 后坚持不到两个月(其实只不过是 8 周而已)的会员占整体会员数量的 95%以 上。太多的人去健身馆交年费,其实只不过是在表达一个良好愿望而已。</li>
<li>所以,正确的策略应该是:要想办法提前预知自己需要怎样的技能,然后 确定那是一个自己可以通过练习真正熟练掌握的技能,而后制定长期计划,一 点一点地执行该计划。</li>
<li>如果你是出色的,不需要你去证明你是出色的,别人自然会看到; 如果你是平庸的,不需要你证明你是平庸的,别人还是同样会看到。</li>
<li>当一个 团队成功的时候,每个人都会倾向于把成功归因于自己的贡献而忽略别人的存在;当一个团队失败的时候,每个人都会倾向于把失败归咎于他人的过失而尽 量把自己排除在外。这叫“Self-serving Bias”。</li>
<li>谁都挡不住你,就好像“谁都阻挡不了历史的车轮滚滚向前” 那样。</li>
<li>反正,别人如何认为,如何评价或者评论,其实原本 根本没办法影响你自己的状态。但是,一旦你开始为此心烦意乱,胡思乱想, 甚至为此产生一些无聊的行动,那么,你就不仅倒霉而且可怜了,因为,你已经被左右了。<strong>被别人左右,是一个人最可悲的状态之一</strong>。</li>
<li>最浪费时间的句型:“要是&#8230;&#8230;就好了!”</li>
<li>停止嘲弄他人</li>
<li>另外一个比较技术一点的手段是:忘记自己的优点。把“优点”和“缺点”这两个词替换成“特点”。</li>
<li>时间是这世界唯一对任何人都公平的资源。</li>
<li>马太福音 里说:“他有的,就再给他,让他多余;他没有的,就连同他所有的,一并夺走。”</li>
<li>拿出纸笔、列一列, 然后问问自己,“我的时间究竟可以标价多少?”——这就是一个人决心不再浪 费时间的最有效的起点和动力。只有爱惜才可能产生节约的动力。</li>
<li><strong>急功近利往往是一个风险高于回报的行为模式</strong>。</li>
<li>a.人们普遍相信他们在明天会拥有比今天更多的金钱;b.人们 普遍相信自己明天会有更多的时间。</li>
<li>“明日复明日,明日何其多”,是一个行将就木的人发出的慨叹——肯定是 在时日无多的时候才能有这样的体会。发出这个慨叹之的 10 年前,此人会与大 多数人一样,觉得“早着呢,时间没那么紧张。”</li>
<li>人们害怕当众演说甚于害怕死亡</li>
<li>大多数事情都需要提前准备,也都可以提前准备。认识到这一点本身就几乎是一切改变的起点。</li>
<li>“对特定信息的注意力”会使我们拥有神奇的能 力在哪怕非常嘈杂的“噪音”中一下子挑出我们需要的“我们所关注的信息”。─“鸡尾酒会效应”</li>
<li>“死记硬背”有另外一个令人印象截然相反的同义词 ——“博闻强识”。</li>
<li>先花上相当的时 间和精力去锁定一个方向或者目标。确定它是现实的、可行的之后,运用心智 的力量在这个方向上再投入更多的时间,再更多一点的时间。把时间当作朋友, 一路前行。当时间陪伴你足够久的时候,你的耐心就能从它那里得到回报。不 知所以然的人会说,那是“运气”,或者那是走了狗屎运的人才会有的“天赐灵感”; 而我们知道的是,如果那回报真的来了,只有一个名字,叫做“必然”。</li>
<li>在学习、工作上,<strong>一个人在某方面的能力究竟有多大,几乎直接取决于此人能在那方面提前多久进行过准备</strong>。</li>
<li>于是,我们看到的是这样的结论,浪费时间是可耻的,而浪费青春不仅是可耻的,更是可悲的,并且只能是无可挽回的。朴素点说,人必须努力。 如果大家都努力的时候,那你就最好尽早开始努力,并且更努力才好。人们 总是说,笨鸟先飞,其实,有很多鸟之所以先飞也许并不是因为它们笨,相 反,更可能是因为它们更聪明。</li>
<li>所谓坚持不懈,其本质是时间的投入。所谓耐心,就是甘于把时间投入到简单、枯燥但是最终会意义非凡的重复 当中去。</li>
<li>毫不夸张地说,<strong>一个人有多大的耐心,他的成功几率就有多高</strong>。反过来, 没有耐心的人终将一事无成。</li>
<li>毕淑敏在她的小说《女心理师》里说:“一杯咖啡最重要的是什么? 是水。一杯咖啡里 98%都是水”。而那些简单而又貌似枯燥的重复就好像咖啡里 的水一样重要。</li>
<li>心理学家斯科特·派克提到所谓的 真爱,就是耐心,而所谓的耐心,本质上就是时间的投入。</li>
<li>“从每个人的感受出发,时间并不是匀速的,而是加速流 逝的”对一个 5 岁的孩子来讲,未来的一年相当于他已经度过的人生的 20%;而对一个 50 岁的人来讲,未来的一年只相当于他已经度过的人生的 1/50,即 2%。 所以,从感觉上来看,<strong>随着年龄的增加,时间好像越来越快</strong>。</li>
</ol>
</div>
<div>&#8212;&#8212;&#8212;叶落花开&#8212;&#8212;&#8212;&#8211;</div>
<div>如果你看完了所有的句子，我建议，你还是看看原书吧：）</div>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=212</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>overflow与position是两种不同的人生境界（附多栏等高的实现）</title>
		<link>http://yekai.net/?p=124</link>
		<comments>http://yekai.net/?p=124#comments</comments>
		<pubDate>Thu, 10 Jun 2010 08:26:44 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[人生感悟]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=124</guid>
		<description><![CDATA[这个姑且算是最近看《德道经》的偶悟吧。 先说问题。Twitter相信大家都知道，或者国内的QQ微博、新浪微博。一般页面宽度800px，两栏。左右“内容等高”，这里要打个引号。右栏一般是带色的，左栏则为白底，看起来是等高。 虽然大多数情况下左高&#62;右高，但如何确保万无一失，实现两栏自适应等高呢？先来看看各大网站的实现，知己知彼才能百战不殆。 1、Twitter。X！居然是用table实现的- -。在这个号称div+css满天飞的Web2.0时代，他们居然用这么老土的table？！然而正如《德道经》里讲到，天为乾，地为坤，天地中和乃生万物。”土“是一种返璞归真的精神。成语”出生入死“讲得就是”入土为安“的道理。人家用table自然有他自己的道理，语义化上table用来呈现数据也说得过去，毕竟人家是这么大的一个平台，还得考虑兼容性，当然最初的原因是否是为了实现这个左右栏等高也说不定（偷笑），所以都说twitter网站做得烂。 2、QQ微博。用了个偷鸡取巧的方法。在父容器#mainWrapper上加了个居右、纵轴平铺的bg，既然是repeat-y，干嘛图片要210*49这么奇怪的宽高？还好用的是data-uri省了个http request，要不猫哥就要BS它了。 3、新浪微博。对新浪有偏见，懒得说它，我是力顶三表哥的。 这里引入一个通过纯CSS的实现方法，这种负边距的方法当然不是猫哥发明的，我也是从这里看到的。这里顺带说下CSS布局的话，推荐射雕同学的系列文章，很详细了。 废话少说，直接移步去看DEMO，右键查看下源代码。 在DEMO上如果注意看的话会发现有一句 #content&#123;overflow:hidden&#125; 实现这个效果，就得在他们的父容器上加上overflow:hidden，这样才能把难看的长尾巴遮住。忽然就想起小高、干干、欣欣他们刚入职的时候，给他们讲过一节CSS的中级（不是终极）培训。我说，如果遇到IE下奇怪的样式兼容性BUG，排名第二的来个overflow:hidden试试（排名第一的是zoom:1）。这句话是我的经验之谈，而且大多数情况下还挺管用。 然而今天在我写下这段代码之后，结合之前看的那一点点《德道经》的内容，我忽然意识到overflow:hidden是一个巨大的阴谋。它让一些本来存在的事物，不被外界所知道，它把一些充满活力的元素限制在一个死死的条框中，让这块土地死气沉沉。《国语·周语上》有云“防民之口，甚于防川，川壅而溃，伤人必多，民亦如之。是故为川者，决之使导；为民者，宣之使言。” twitter上刚刚看到@fenng同学说自己已经离职支付宝，祝愿他前程似锦。在我看来，主动选择离职创业的人，都是勇敢的。想起昨晚半亩地吃饭，送走一位即将去美利坚合众国求学的友人。相信他的世界已经不再是overflow:hidden，而是position:relative。正如本文中的配图，风筝是一个absolute的元素，它飞得再高再远，对于线另一头的主人来说，永远联系牵挂在心。 overflow与position是两种截然不同的修身、治国（管理）、平天下的人生境界。就算没有鲲鹏展翅那般注目，一只苍蝇至少有一双可以自由飞翔的翅膀。]]></description>
			<content:encoded><![CDATA[<p><a href="http://yekai.net/wp-content/uploads/2010/06/kite.jpg"><img class="alignnone size-full wp-image-125" title="kite" src="http://yekai.net/wp-content/uploads/2010/06/kite.jpg" alt="" width="300" height="451" /></a></p>
<p>这个姑且算是最近看《<a href="http://meirixiaochao.com/2010/05/30/laozi/">德道经</a>》的偶悟吧。</p>
<p>先说问题。<a href="https://twitter.com/catge">Twitter</a>相信大家都知道，或者国内的<a href="http://t.qq.com/weiweixiao">QQ微博</a>、新浪微博。一般页面宽度800px，两栏。左右“内容等高”，这里要打个引号。右栏一般是带色的，左栏则为白底，看起来是等高。</p>
<p>虽然大多数情况下左高&gt;右高，但如何确保万无一失，实现两栏自适应等高呢？先来看看各大网站的实现，知己知彼才能百战不殆。</p>
<p>1、Twitter。X！居然是用table实现的- -。在这个号称div+css满天飞的Web2.0时代，他们居然用这么老土的table？！然而正如《德道经》里讲到，天为乾，地为坤，天地中和乃生万物。”土“是一种返璞归真的精神。成语”出生入死“讲得就是”入土为安“的道理。人家用table自然有他自己的道理，语义化上table用来呈现数据也说得过去，毕竟人家是这么大的一个平台，还得考虑兼容性，当然最初的原因是否是为了实现这个左右栏等高也说不定（偷笑），所以都说twitter网站做得烂。</p>
<p>2、QQ微博。用了个偷鸡取巧的方法。在父容器#mainWrapper上加了个居右、纵轴平铺的bg，既然是repeat-y，干嘛图片要210*49这么奇怪的宽高？还好用的是data-uri省了个http request，要不猫哥就要BS它了。</p>
<p>3、新浪微博。<a href="http://www.google.com.hk/search?hl=zh-CN&amp;newwindow=1&amp;safe=strict&amp;q=%E6%96%B0%E6%B5%AA+site%3Awww.wangxiaofeng.net&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=">对新浪有偏见</a>，懒得说它，我是力顶三表哥的。</p>
<p>这里引入一个通过纯CSS的实现方法，这种负边距的方法当然不是猫哥发明的，我也是<a href="http://www.alistapart.com/articles/holygrail">从这里看到的</a>。这里顺带说下CSS布局的话，推荐<a href="http://lifesinger.org/blog/2008/11/pe-layout-1/">射雕同学的系列文章</a>，很详细了。</p>
<p>废话少说，<a href="http://yekai.net/demo/css-multicolumn-equal-height.html">直接移步去看DEMO</a>，右键查看下源代码。</p>
<p>在DEMO上如果注意看的话会发现有一句</p>
<div class="codecolorer-container css blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #cc00cc;">#content</span><span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span><span style="color: #993333;">hidden</span><span style="color: #00AA00;">&#125;</span></div></div>
<p>实现这个效果，就得在他们的父容器上加上overflow:hidden，这样才能把难看的长尾巴遮住。忽然就想起小高、干干、欣欣他们刚入职的时候，给他们讲过一节CSS的中级（不是终极）培训。我说，如果遇到IE下奇怪的样式兼容性BUG，排名第二的来个overflow:hidden试试（排名第一的是zoom:1）。这句话是我的经验之谈，而且大多数情况下还挺管用。</p>
<p>然而今天在我写下这段代码之后，结合之前看的那一点点《德道经》的内容，我忽然意识到overflow:hidden是一个巨大的阴谋。它让一些本来存在的事物，不被外界所知道，它把一些充满活力的元素限制在一个死死的条框中，让这块土地死气沉沉。《国语·周语上》有云“防民之口，甚于防川，川壅而溃，伤人必多，民亦如之。是故为川者，决之使导；为民者，宣之使言。”</p>
<p>twitter上刚刚看到<a href="https://twitter.com/fenng">@fenng</a>同学说自己已经离职支付宝，祝愿他前程似锦。在我看来，主动选择离职创业的人，都是勇敢的。想起昨晚半亩地吃饭，送走一位即将去美利坚合众国求学的友人。相信他的世界已经不再是overflow:hidden，而是position:relative。正如本文中的配图，风筝是一个absolute的元素，它飞得再高再远，对于线另一头的主人来说，永远联系牵挂在心。</p>
<p>overflow与position是两种截然不同的修身、治国（管理）、平天下的人生境界。就算没有鲲鹏展翅那般注目，一只苍蝇至少有一双可以自由飞翔的翅膀。</p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=124</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Goodbye, Alipay</title>
		<link>http://yekai.net/?p=111</link>
		<comments>http://yekai.net/?p=111#comments</comments>
		<pubDate>Fri, 14 May 2010 15:53:15 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[alipay]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=111</guid>
		<description><![CDATA[Today is my last day at Alipay. @lunaticsun 说写点什么纪念下吧，就像当初那位离开Google的设计大神。很多朋友得知我即将离开支付宝的消息，表示震精，当然更多的是表示理解与支持。 接下来我要做的事情，稍稍给猫哥的粉丝们交代下吧…- -！ 《猫哥网页设计视频教程》将会重启，推出连载，相信会对那些对WEB设计感兴趣的初学者有很大的帮助。 Twitter上会提高更新频率，以技术为主，逐渐走向国际化，不会用来当聊天工具，感兴趣的同学欢迎Follow me。 对catge私生活感兴趣的同学，可以收听我的QQ电台 ，新浪微博我不用的。 catge会继续留在杭州一段时间，有多长，这个要看机遇。要做的事情很多，比如正在上车考驾照，为了减少一个马路杀手，我会很用心的学习，以后去西安那个啥的咱们就可以一起开车去了，对不？干干、欣欣、小高：）另外还要早点结束我的钢琴课程，这个一直是我从小的梦想，现在可以专注的去实现了。 想做的事情就更多了。去西城广场和小朋友们一起溜旱冰，去BetaCafe认识更多的朋友。为了重启bodyshake计划，可能会参加健身俱乐部，成为肌肉男，哈哈。 “人活着是为了什么？”这么一个看似无聊而又高深的哲学命题，之前周会的时候从教主的口中说出，大部分人可能笑笑也就过去了。可是猫哥会很严肃而又正式的去研究这个哲学的三大命题之一，这个很可能会成为catge的信仰组成部分，因为catge自以为自己是80后出生的信仰缺失一代的代表…先从康德的三大批判开始吧。 总结下自己在支付宝两年的工作历程吧。有些记忆也只能从一些蛛丝马迹中去寻找了，用PX200的时候，会想到是自己参加公司的《网络安全大赛》拿到的奖品，而那个罗技鼠标就不知道是哪个项目的奖励了。 还记得自己做的第一个升级包是合作银行，第一次写velocity模板，用CSS来实现hide&#38;show效果。后来我和小黑一起完成了支付宝的第一个浏览器兼容项目“Firefox浏览器兼容”，说是项目，其实更像是升级包，因为需求方+PM+开发+测试，哈是我们两个人。呵呵，其实还有另外两个测试同学的帮助。这个项目让我对WEB标准化、兼容性有了一些自己的心得。说起摄影专业出身的小黑，他身上散发着浓郁的艺术家特质。某次周会上，猫哥封他为“支付宝最优雅的前端”。小黑常年一身黑色西服，那年冬天我们送走阿布的时候，在25F天台留下了合影。后来某次UED的季度大会聚餐时，小黑突然对前端兄弟们一个个敬酒道别，然后就优雅地离开，然后就再也没有见到过。 第一次使用YUI是在之后的个人帮助中心和商户帮助中心的全面改版项目，这也是catge和小满的第一次亲密合作。当时和阿布讨论YUI通过什么形式部署在网站上，最后也就是照搬YUI官方目录COPY进来。后来李白来了，基于YUI换上马甲，Arale就此诞生。并通过个人版支付宝项目统一了支付宝的前端JS框架。 在说个人版之前，还有三个值得一说的项目。首先是小满主导的“罗伯特项目”，也就是优化用户找回密码流程，这个项目上线之后满意中心找回密码分类的电话量有了明显的下降。看到这些数据，catge对设计的意义有了更深刻的认识，不论是硬件、软件、互联网WEB应用，任何一种技术的发展，最终都是为了“人”体验。还有一个捡了大便宜的“代金卡项目”，就是在充值页面增加通过消费卡充值的类型，猫哥随便弄了下，结果没想到拿了产品&#38;用户体验部的“优秀团队奖”，嘿嘿，主要还是交互小周周和PD元亮的功劳，这个超过限制金额时自动转成最大金额的JS交互是我瞎整的，还好大家都觉得不错。另外一个项目，其实是一个夭折了的项目“模块化收银台”，收银台属于支付宝的核心业务，要改造这块业务，难度和阻力非常大。猫哥改过一段时间的收银台BUG，不得不承认改收银台BUG是天底下最恶心的事情，每改个BUG要花费大半天的时间，改完后对个人前端能力也没啥提升，因为这里的前端层压根就没啥规划，修修补补逻辑混乱。后来在公司多位大牛的联合推动下，新版收银台总算得以部分上线，师傅磊哥（老鱼）功不可没。 个人版（体验版）支付宝项目对我来说算是最大的机遇和挑战，项目中我作为前端开发接口人，主要负责“安全中心”，“侧边栏”，“我的支付宝”的开发。我从这个项目中收获极大，对流程、沟通、设计、前端架构各个方面都得到很大的锻炼。这个项目对支付宝来说是一个意义重大的项目，因为我们搭起了一个可以继续支持支付宝未来3-5年发展的平台。在我看来最大的功臣是PM魏延和PD白鸦，我还记得他们经常和我们开发一起通宵加班、请吃水果。项目里的开发测试同学真得是兢兢业业，每个人基本天天都会加班到11点以后，是我们大家保证了这个看似不可能完成的项目的上线，回想起来不得不说是个奇迹。还有项目中的那种氛围，让我找到了一些敏捷开发的感觉。很多感受，也只有亲身经历过的同学才得以知晓了。一切尽在不言中，就此略过。 个人版开发期间，我同时还独自开发了支付宝的新版首页。这个升级包中，我刻意研究了下页面性能这块，独立编写了slideshow组件，掌握了组件的设计和继承方法，最大的收获应该是对首页运营这块的理解。另外我在首页埋了几个彩蛋，在这里首次公开出来吧：）页面任何地方按下&#8221;\aa&#8221;、“\sdm”、“\fk”、“\sk”可以快速定位到对应的功能页面。 接下来就是愉快的“注册流程优化”项目，这是我和小满的再度亲密合作，从上线后的数据来看，提升了很大的注册激活数，我们俩也都因此拿了年底产品部的大奖。还记得@Fenng在Twitter上推了我一把，导致我Follow数大增。唯一的遗憾是，小满说老板会请我们去凯悦吃饭，可是后来压根就没有请我。 做完注册项目我就开始了漫长而又无聊的前端产品接口人的角色，修修文案、改改链接、CMS，还记得某天被13个不同的需求打扰，无聊到要崩溃。不过因为没有项目闭关也因此有机会多和团队里的工友多交流了，大伯（@janlay）、王书记（@ethan168）、豆腐（@dfdou）都很好玩，我正式成为大伯的粉丝，还在内部整理发表过一次“大伯语录”：P 然而，当我一次次看到开发为了一个BUG的归属是哪个team而争论不休而不是想办法早点修复掉这个BUG的时候，当我看到刚来时的热情帮助变成了现在的相互推诿，当我看到…。然而这些只是一个方面，很多人问我离职的原因，简单地说一句话：“不出去走走，你以为这就是全世界”，我只是选择去做自己喜欢的事。 到今天这篇Blog已经被拖了很长时间才得以完成。虽然已经离职一周了，依然会和原来的工友们一起玩、一起交流。总会想起和小高、干干、欣欣、小白打电动的时光，上上周末和豆腐、欣欣、书记一起去了女仆咖啡点，前天和大伯、书记、欣欣打台球，上周末和==、蚂蚱、妞妞、囧、岚岚、东东还有数据仓库的同学一起闻莺阁茶楼玩三国杀。 昨天==请我去阿蔡洗头，说到现在公司走的人越来越多，上周六我们近卫军一期同学活动都不积极。我告诉她，没有必要营造一个和谐的表象，有些同事只能是同事，而有些同事却是像我们读书时的同学一样，会是一辈子的朋友。我想这很多份真诚的友谊，算是我在支付宝最好的一个总结吧：）]]></description>
			<content:encoded><![CDATA[<p>Today is my last day at Alipay.</p>
<p>@lunaticsun 说写点什么纪念下吧，就像当初那位<a href="http://stopdesign.com/archive/2009/03/20/goodbye-google.html">离开Google的设计大神</a>。很多朋友得知我即将离开支付宝的消息，表示震精，当然更多的是表示理解与支持。</p>
<p>接下来我要做的事情，稍稍给猫哥的粉丝们交代下吧…- -！</p>
<p>《<a href="http://v.youku.com/v_show/id_XMTIwMjQ1Njcy.html">猫哥网页设计视频教程</a>》将会重启，推出连载，相信会对那些对WEB设计感兴趣的初学者有很大的帮助。</p>
<p>Twitter上会提高更新频率，以技术为主，逐渐走向国际化，不会用来当聊天工具，感兴趣的同学欢迎<a href="http://twitter.com/catge">Follow me</a>。</p>
<p>对catge私生活感兴趣的同学，可以收听<a href="http://t.qq.com/weiweixiao">我的QQ电台</a> <img src='http://yekai.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ，新浪微博我不用的。</p>
<p>catge会继续留在杭州一段时间，有多长，这个要看机遇。要做的事情很多，比如正在上车考驾照，为了减少一个马路杀手，我会很用心的学习，以后去西安那个啥的咱们就可以一起开车去了，对不？干干、欣欣、小高：）另外还要早点结束<a href="http://www.xys-piano.com/">我的钢琴课程</a>，这个一直是我从小的梦想，现在可以专注的去实现了。</p>
<p>想做的事情就更多了。去西城广场和小朋友们一起溜旱冰，去<a href="http://www.cafebeta.com/">BetaCafe</a>认识更多的朋友。为了重启bodyshake计划，可能会参加健身俱乐部，成为肌肉男，哈哈。</p>
<p>“人活着是为了什么？”这么一个看似无聊而又高深的哲学命题，之前周会的时候从教主的口中说出，大部分人可能笑笑也就过去了。可是猫哥会很严肃而又正式的去研究这个哲学的三大命题之一，这个很可能会成为catge的信仰组成部分，因为catge自以为自己是80后出生的信仰缺失一代的代表…先从<a href="http://b.baidu.com/view/3899.htm">康德的三大批判</a>开始吧。</p>
<p>总结下自己在支付宝两年的工作历程吧。有些记忆也只能从一些蛛丝马迹中去寻找了，用PX200的时候，会想到是自己参加公司的《网络安全大赛》拿到的奖品，而那个罗技鼠标就不知道是哪个项目的奖励了。</p>
<p>还记得自己做的第一个升级包是<a href="https://www.alipay.com/static/bank/index.htm">合作银行</a>，第一次写velocity模板，用CSS来实现hide&amp;show效果。后来我和<a href="http://hellogp.net/">小黑</a>一起完成了支付宝的第一个浏览器兼容项目“Firefox浏览器兼容”，说是项目，其实更像是升级包，因为需求方+PM+开发+测试，哈是我们两个人。呵呵，其实还有另外两个测试同学的帮助。这个项目让我对WEB标准化、兼容性有了一些自己的心得。说起摄影专业出身的小黑，他身上散发着浓郁的艺术家特质。某次周会上，猫哥封他为“支付宝最优雅的前端”。小黑常年一身黑色西服，那年冬天我们送走阿布的时候，在25F天台<a href="http://www.douban.com/photos/photo/477850523/">留下了合影</a>。后来某次UED的季度大会聚餐时，小黑突然对前端兄弟们一个个敬酒道别，然后就优雅地离开，然后就再也没有见到过。</p>
<p>第一次使用YUI是在之后的个人帮助中心和<a href="http://help.alipay.com/support/index_sh.htm">商户帮助中心</a>的全面改版项目，这也是catge和<a href="http://manmany.com/">小满</a>的第一次亲密合作。当时和阿布讨论YUI通过什么形式部署在网站上，最后也就是照搬YUI官方目录COPY进来。后来<a href="http://wi2ard.com/blog/">李白</a>来了，基于YUI换上马甲，Arale就此诞生。并通过个人版支付宝项目统一了支付宝的前端JS框架。</p>
<p>在说个人版之前，还有三个值得一说的项目。首先是小满主导的“罗伯特项目”，也就是优化用户找回密码流程，这个项目上线之后满意中心找回密码分类的电话量有了明显的下降。看到这些数据，catge对设计的意义有了更深刻的认识，不论是硬件、软件、互联网WEB应用，任何一种技术的发展，最终都是为了“人”体验。还有一个捡了大便宜的“代金卡项目”，就是在充值页面增加通过消费卡充值的类型，猫哥随便弄了下，结果没想到拿了产品&amp;用户体验部的“优秀团队奖”，嘿嘿，主要还是<a href="http://93art.blogbus.com/">交互小周周</a>和PD元亮的功劳，这个超过限制金额时自动转成最大金额的JS交互是我瞎整的，还好大家都觉得不错。另外一个项目，其实是一个夭折了的项目“模块化收银台”，收银台属于支付宝的核心业务，要改造这块业务，难度和阻力非常大。猫哥改过一段时间的收银台BUG，不得不承认改收银台BUG是天底下最恶心的事情，每改个BUG要花费大半天的时间，改完后对个人前端能力也没啥提升，因为这里的前端层压根就没啥规划，修修补补逻辑混乱。后来在公司多位大牛的联合推动下，新版收银台总算得以部分上线，师傅磊哥（<a href="http://www.ioldfish.cn/">老鱼</a>）功不可没。</p>
<p>个人版（体验版）支付宝项目对我来说算是最大的机遇和挑战，项目中我作为前端开发接口人，主要负责“安全中心”，“侧边栏”，“我的支付宝”的开发。我从这个项目中<a href="http://yekai.net/?p=63">收获极大</a>，对流程、沟通、设计、前端架构各个方面都得到很大的锻炼。这个项目对支付宝来说是一个意义重大的项目，因为我们搭起了一个可以继续支持支付宝未来3-5年发展的平台。在我看来最大的功臣是PM魏延和<a href="http://uicom.net/blog/">PD白鸦</a>，我还记得他们经常和我们开发一起通宵加班、请吃水果。项目里的开发测试同学真得是兢兢业业，每个人基本天天都会加班到11点以后，是我们大家保证了这个看似不可能完成的项目的上线，回想起来不得不说是个奇迹。还有项目中的那种氛围，让我找到了一些<a href="http://b.baidu.com/view/309926.htm">敏捷开发</a>的感觉。很多感受，也只有亲身经历过的同学才得以知晓了。一切尽在不言中，就此略过。</p>
<p>个人版开发期间，我同时还独自开发了支付宝的新版首页。这个升级包中，我刻意研究了下页面性能这块，独立编写了slideshow组件，掌握了组件的设计和继承方法，最大的收获应该是对首页运营这块的理解。另外我在首页埋了几个彩蛋，在这里首次公开出来吧：）页面任何地方按下&#8221;\aa&#8221;、“\sdm”、“\fk”、“\sk”可以快速定位到对应的功能页面。</p>
<p>接下来就是愉快的“注册流程优化”项目，这是我和小满的再度亲密合作，从上线后的数据来看，提升了很大的注册激活数，我们俩也都因此拿了年底产品部的大奖。还记得<a href="http://dbanotes.net/">@Fenng</a>在Twitter上推了我一把，导致我Follow数大增。唯一的遗憾是，小满说老板会请我们去凯悦吃饭，可是后来压根就没有请我。</p>
<p>做完注册项目我就开始了漫长而又无聊的前端产品接口人的角色，修修文案、改改链接、CMS，还记得某天被13个不同的需求打扰，无聊到要崩溃。不过因为没有项目闭关也因此有机会多和团队里的工友多交流了，大伯（@janlay）、王书记（@ethan168）、豆腐（@dfdou）都很好玩，我正式成为大伯的粉丝，还在内部整理发表过一次“大伯语录”：P</p>
<p>然而，当我一次次看到开发为了一个BUG的归属是哪个team而争论不休而不是想办法早点修复掉这个BUG的时候，当我看到刚来时的热情帮助变成了现在的相互推诿，当我看到…。然而这些只是一个方面，很多人问我离职的原因，简单地说一句话：“不出去走走，你以为这就是全世界”，我只是选择去做自己喜欢的事。</p>
<p>到今天这篇Blog已经被拖了很长时间才得以完成。虽然已经离职一周了，依然会和原来的工友们一起玩、一起交流。总会想起和小高、干干、欣欣、小白打电动的时光，上上周末和豆腐、欣欣、书记一起去了女仆咖啡点，前天和大伯、书记、欣欣打台球，上周末和==、蚂蚱、妞妞、囧、岚岚、东东还有数据仓库的同学一起闻莺阁茶楼玩三国杀。</p>
<p>昨天==请我去阿蔡洗头，说到现在公司走的人越来越多，上周六我们近卫军一期同学活动都不积极。我告诉她，没有必要营造一个和谐的表象，有些同事只能是同事，而有些同事却是像我们读书时的同学一样，会是一辈子的朋友。我想这很多份真诚的友谊，算是我在支付宝最好的一个总结吧：）</p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=111</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>就这么漂来漂去</title>
		<link>http://yekai.net/?p=63</link>
		<comments>http://yekai.net/?p=63#comments</comments>
		<pubDate>Sun, 17 Jan 2010 11:06:51 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[2010]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=63</guid>
		<description><![CDATA[这两个星期，我一直很想写点东西，关于09年的总结，10年的愿望。关于新上线的体验版支付宝，关于百度被黑，Google的退出。直到今天，不小心在twitter上又看到韩寒的《我只是在猜想》。听着韩寒BLOG里的背景音乐，忽然觉得周围的一切静了下来，于是坐下来，写下这些文字。 周五在之江饭店参加了部门的Q3Q4年会，会上拿到了Q3产品&#38;用户体验部的成长奖，非常开心。更开心的是，小满在Q4的优秀奖的时候，说了让我很感动的话：“拿到这个奖我要感谢两个人，一个是james，给我了很大的支持，另一个就是刚才拿Q3成长奖的叶凯，作为一名前端工程师替我承担了很多设计师的工作很不容易。”这个奖项和小满的话，基本就是我09年度的总结了。 从年初的个人版一期生活助手，到年中的个人版二期、安全中心、新首页，年末的注册流程改造项目，09年对于我来说，是我个人成长最快的一年，压力最大最累也最充实。 第一次做小组owner，承担项目前端接口人的角色，感触最深的是，一下子认识了不少人（旺旺上好友已经加到了390名）。在与这些形形色色的人沟通的过程中，不断的学习别人的优点，克制自己幼稚的心智。推动新的前后端系分并行项目管理流程，从webx到sofa MVC的后端技术架构，新的前端Arale&#38;Alice框架，前后端分离组件UISVR。 特别的想感谢一批人，那些在09年给我帮助，陪我一起度过的同事&#38;朋友，尤其是个人版的前端李白、鸽子、臻儿、徐宁、高京。 李白，Arale之父。个人版右侧状态栏及框架规则的相关组件编写，让我对JS框架、组件编写模式有了很深的理解，这一块是我自认为成长最大的一块。还有温柔而又低调的鸽子，我们一起架构个人版CSS框架PA。个人版基本上是重新做出一个支付宝，而我们的目标是样式上兼容IE6、IE7、Firefox3.5（其他高级浏览器Safari、Chrome我们自认为会自动兼容），同时产出代码片段库，确保个人版样式框架的继承与扩展。我们一起搞定一个又一个诡异的IE BUG，从简单的HasLayout未触发问题，到iframe下relative元素里的input自动完成提示框在XP SP2某未打补丁版本的IE6下错位的问题。我们一起讨论标准DOM结构、CSS Sprites、HTML5，对付IE已经到了“轻抚菊花笑不语”的地步。 09年4月，孤独的过完生日。第二天，花3000+报了个钢琴课程，因为工作时间原因，直到现在还没有完成学业。 09年8月，女朋友从杭州回到武汉，五年的恋情结束。寂寞侵袭，感情生活一下子陷到低谷。直到某天看到毛毛QQ空间里一篇日志下的留言：“要学会品味寂寞”，若有所悟。 一个人静的时候，总会想很多问题，对以前有过答案的问题再重新思考一遍。在虫子的推荐下，看了《虫师》，感触很深。重新定义自己生命的意义、理想和目标。开始一步步自己的计划，买了Macbook Pro、T90、HTC G2，开始“每周一张大头贴”、“看遍杭城影院”、“猫哥网页设计教程”。国庆期间，独自一人无目的的去了趟广州，坐了次灰机，感谢骡子的接待。 09年，有了几个比较要好的兄弟姐妹。能一起抽烟、喝酒、打电动、K歌，谈话之间能够毫不遮掩、为对方考虑。我始终认为，朋友是一辈子的事情，感谢有你们的陪伴。丁丁、小白、扎扎、==、虫子、宏哥、小明…… 2010年，注定是不平凡的一年，才1月份就发生了这么多古怪的事情。又到12年一次轮回的本命年，老妈卜了一卦，答案是我最喜欢的“事在人为”。10年了，我要加快脚步，经历更多的幸福和精彩。不想等到自己装90后的时候，发现原来皱纹和老气是无法掩饰的，那时候就迟了。 从韩寒的BLOG上点到了他的淘宝书店，看到这本书名《就这么漂来漂去》，很喜欢就直接拍了下来。2012如果真的是世界末日，现在的我，也不会后悔，因为我正在继续我简单而又幸福的漂泊生活。如果遇到一个自己最喜欢的姑娘，我想我会叫她柳莺莺。]]></description>
			<content:encoded><![CDATA[<p><a href="http://yekai.net/wp-content/uploads/2010/01/s1460025.jpeg"><img class="alignnone size-full wp-image-64" title="s1460025" src="http://yekai.net/wp-content/uploads/2010/01/s1460025.jpeg" alt="" width="412" height="576" /></a></p>
<p>这两个星期，我一直很想写点东西，关于09年的总结，10年的愿望。关于新上线的<a href="https://lab.alipay.com/" target="_blank">体验版支付宝</a>，关于<a href="http://zh.wikipedia.org/zh-cn/2010年百度域名被劫持事件" target="_blank">百度被黑</a>，<a href="http://www.google.cn/search?hl=zh-CN&amp;newwindow=1&amp;q=google退出&amp;btnG=Google+搜索&amp;aq=f&amp;oq=" target="_blank">Google的退出</a>。直到今天，不小心在twitter上又看到<a href="http://blog.sina.com.cn/twocold">韩寒</a>的《<a href="http://www.baidu.com/s?wd=%CE%D2%D6%BB%CA%C7%D4%DA%B2%C2%CF%EB" target="_blank">我只是在猜想</a>》。听着韩寒BLOG里的背景音乐，忽然觉得周围的一切静了下来，于是坐下来，写下这些文字。</p>
<p>周五在之江饭店参加了部门的Q3Q4年会，会上拿到了Q3产品&amp;用户体验部的成长奖，非常开心。更开心的是，<a href="http://manmany.com/" target="_blank">小满</a>在Q4的优秀奖的时候，说了让我很感动的话：“拿到这个奖我要感谢两个人，一个是james，给我了很大的支持，另一个就是刚才拿Q3成长奖的叶凯，作为一名前端工程师替我承担了很多设计师的工作很不容易。”这个奖项和小满的话，基本就是我09年度的总结了。</p>
<p>从年初的个人版一期生活助手，到年中的个人版二期、安全中心、新首页，年末的注册流程改造项目，09年对于我来说，是我个人成长最快的一年，压力最大最累也最充实。</p>
<p>第一次做小组owner，承担项目前端接口人的角色，感触最深的是，一下子认识了不少人（旺旺上好友已经加到了390名）。在与这些形形色色的人沟通的过程中，不断的学习别人的优点，克制自己幼稚的心智。推动新的前后端系分并行项目管理流程，从webx到sofa MVC的后端技术架构，新的前端Arale&amp;Alice框架，前后端分离组件UISVR。</p>
<p>特别的想感谢一批人，那些在09年给我帮助，陪我一起度过的同事&amp;朋友，尤其是个人版的前端李白、鸽子、臻儿、徐宁、高京。</p>
<p>李白，Arale之父。个人版右侧状态栏及框架规则的相关组件编写，让我对JS框架、组件编写模式有了很深的理解，这一块是我自认为成长最大的一块。还有温柔而又低调的鸽子，我们一起架构个人版CSS框架PA。个人版基本上是重新做出一个支付宝，而我们的目标是样式上兼容IE6、IE7、Firefox3.5（其他高级浏览器Safari、Chrome我们自认为会自动兼容），同时产出代码片段库，确保个人版样式框架的继承与扩展。我们一起搞定一个又一个诡异的IE BUG，从简单的HasLayout未触发问题，到iframe下relative元素里的input自动完成提示框在XP SP2某未打补丁版本的IE6下错位的问题。我们一起讨论标准DOM结构、CSS Sprites、HTML5，对付IE已经到了“轻抚菊花笑不语”的地步。</p>
<p>09年4月，孤独的过完生日。第二天，花3000+报了个钢琴课程，因为工作时间原因，直到现在还没有完成学业。</p>
<p>09年8月，女朋友从杭州回到武汉，五年的恋情结束。寂寞侵袭，感情生活一下子陷到低谷。直到某天看到毛毛QQ空间里一篇日志下的留言：“要学会品味寂寞”，若有所悟。</p>
<p>一个人静的时候，总会想很多问题，对以前有过答案的问题再重新思考一遍。在虫子的推荐下，看了《虫师》，感触很深。重新定义自己生命的意义、理想和目标。开始一步步自己的计划，买了Macbook Pro、T90、HTC G2，开始“每周一张大头贴”、“看遍杭城影院”、“猫哥网页设计教程”。国庆期间，独自一人无目的的去了趟广州，坐了次灰机，感谢骡子的接待。</p>
<p>09年，有了几个比较要好的兄弟姐妹。能一起抽烟、喝酒、打电动、K歌，谈话之间能够毫不遮掩、为对方考虑。我始终认为，朋友是一辈子的事情，感谢有你们的陪伴。丁丁、小白、扎扎、==、虫子、宏哥、小明……</p>
<p>2010年，注定是不平凡的一年，才1月份就发生了这么多古怪的事情。又到12年一次轮回的本命年，老妈卜了一卦，答案是我最喜欢的“事在人为”。10年了，我要加快脚步，经历更多的幸福和精彩。不想等到自己装90后的时候，发现原来皱纹和老气是无法掩饰的，那时候就迟了。</p>
<p>从韩寒的BLOG上点到了<a href="http://shop57860513.taobao.com/" target="_blank">他的淘宝书店</a>，看到这本书名《就这么漂来漂去》，很喜欢就直接拍了下来。2012如果真的是世界末日，现在的我，也不会后悔，因为我正在继续我简单而又幸福的漂泊生活。如果遇到一个自己最喜欢的姑娘，我想我会叫她<a href="http://b.baidu.com/view/1319945.htm" target="_blank">柳莺莺</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=63</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>如何写出更好的JS树状菜单</title>
		<link>http://yekai.net/?p=37</link>
		<comments>http://yekai.net/?p=37#comments</comments>
		<pubDate>Sun, 27 Dec 2009 09:59:40 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=37</guid>
		<description><![CDATA[差不多是两年前的这个时候，我当时在华中科技大学注册中心HUB团队负责WEB标准化和规范化的工作。当时我花了两天两夜，重写了注册中心的HTML模板，并通过了W3C的CSS、XHTML校验。我拿着这套模板，告诉办公室主任王士贤老师，学校的信息系统应该做个大手术，全部换成我的新模板。当时王老师笑了笑，说这个改动太大，委婉的拒绝了我的提议，他说了让我刻骨铭心的一句话： “网页技术发展很快，也许几年后，你再来看你写的这些模板，会有更好的想法。” 两年前我看到“不会用JS写树状菜单，就不算真正懂JS”，于是我通宵写了这个树状菜单。之后陆陆续续有不少人加我QQ，交流树状菜单的问题，甚至还有网友给我个绰号“树状菜单弟” -_-! 这两年来随着个人前端技术水平的不断提升，尤其是支付宝个人版项目对我的锻炼，我开始逐渐明白“技术没有最好的，只有最适合的”这句话的含义。在今年第四届D2会议上，豆瓣的张克军分享了《从YUI2到YUI3看前端的演变》，前端的“库”时代已经来临。 我一直想重写这个树状菜单，修复原来的两个BUG，采用基于YUI的组件封装模式来写，独立出样式表现层和脚本行为层，提供丰富的扩展接口，同时考虑到禁用JS时的可用性。在我开始写这个组件的时候，我忽然想起D2上一名观众问克军的一个问题“您做为一个前辈，请给我们这些菜鸟一些指导，是应该学YUI还是JQuery？”克军的回答是，从最基础的原生的JS获取对象绑定事件等知识学起，学什么框架不重要，选择一个合适的，会用即可。其实任何一门编程语言都是如此。如果我在这里用YUI写出一个树状菜单组件，那唯一的用途就是被一些垃圾源码站转载，而且不大可能被应用，还不如看看YUI里的menu组件。懒懒交流会上，淘宝的玉伯说过，如果想让自己的JS代码“流芳百世”就得用原生的写法，因为不依赖任何框架的JS代码复制粘贴起来最方便。 然而为了方便组件编写和减少BUG，为了一个事件绑定，我不得不在自己的代码里加上addEvent的方法。还得加hasClass、addClass、get等DOM操作方法，大大增加代码的长度。于是我放弃了重写的这个念头，只是略讲下编写思路好了。 function addEvent&#40;obj, type, fn&#41; &#123; &#160; &#160; if&#40;obj.addEventListener&#41;&#123; &#160; &#160; &#160; &#160; obj.addEventListener&#40;type, fn, false&#41;; &#160; &#160; &#125;else if&#40;obj.attachEvent&#41;&#123; &#160; &#160; &#160; &#160; obj&#91;&#34;e&#34;+type+fn&#93; = fn; &#160; &#160; &#160; &#160; obj.attachEvent&#40; &#34;on&#34;+type, function&#40;&#41; &#123; obj&#91;&#34;e&#34;+type+fn&#93;&#40;&#41;; &#125; &#41;; &#160; &#160; &#125; &#125; 首先初始化绑定导航的DOM，然后分别为每一级的UL和LI绑定上hover和click事件，分别加上&#8221;hover&#8221;和&#8221;select&#8221;的样式名。然后通过CSS来展现样式，显示隐藏对应节点。Over 再过两年后，我再回过头看现在的代码思路，可能会有更好的想法。代码需要熟能生巧，需要时刻跟上技术的发展，才能保持优雅的姿态。多看看前辈的文章，多与人交流，拜一个好的师傅，是学习的最佳途径。 其实做人又何尝不是如此。自以为是的自己，总会被以后看似成熟的自己所否定。以前catge同学常被人说幼稚儿童，心有不甘。现在则习惯了，被人说幼稚不要紧，关键要学会改变自己，改掉不足的地方，学习他人的长处。倒是有个88年的幼齿，说不带我这个老年人一起玩的时候，我心碎了。 PS:这个雪人是我自己堆的，还是很有童心的吧，请90后的小弟弟小妹妹不要拒绝我^o^]]></description>
			<content:encoded><![CDATA[<p><a href="http://yekai.net/wp-content/uploads/2009/12/DSC00817.jpg" target="_blank"><img class="alignnone size-full wp-image-38" title="杭州下雪了，去楼顶堆了个雪人" src="http://yekai.net/wp-content/uploads/2009/12/DSC00817.jpg" alt="" width="500" height="281" /></a></p>
<p>差不多是两年前的这个时候，我当时在<a href="http://www.hust.edu.cn/" target="_blank">华中科技大学</a>注册中心HUB团队负责WEB标准化和规范化的工作。当时我花了两天两夜，重写了注册中心的HTML模板，并通过了<a href="http://validator.w3.org/" target="_blank">W3C的CSS、XHTML校验</a>。我拿着这套模板，告诉办公室主任王士贤老师，学校的信息系统应该做个大手术，全部换成我的新模板。当时王老师笑了笑，说这个改动太大，委婉的拒绝了我的提议，他说了让我刻骨铭心的一句话：</p>
<blockquote><p>“网页技术发展很快，也许几年后，你再来看你写的这些模板，会有更好的想法。”</p></blockquote>
<p>两年前我看到“不会用JS写树状菜单，就不算真正懂JS”，于是我通宵写了<a href="http://catge.blogbus.com/logs/12513069.html" target="_blank">这个树状菜单</a>。之后陆陆续续有不少人加我QQ，交流树状菜单的问题，甚至还有网友给我个绰号“树状菜单弟” -_-! 这两年来随着个人前端技术水平的不断提升，尤其是<a href="http://blog.alipay.com/1558.html" target="_blank">支付宝个人版</a>项目对我的锻炼，我开始逐渐明白“技术没有最好的，只有最适合的”这句话的含义。在今年<a href="http://www.d2forum.org/d2/4/" target="_blank">第四届D2会议</a>上，豆瓣的<a href="http://hikejun.com/" target="_blank">张克军</a>分享了《从YUI2到YUI3看前端的演变》，前端的“库”时代已经来临。</p>
<p>我一直想重写这个树状菜单，修复原来的两个BUG，采用基于YUI的组件封装模式来写，独立出样式表现层和脚本行为层，提供丰富的扩展接口，同时考虑到禁用JS时的可用性。在我开始写这个组件的时候，我忽然想起D2上一名观众问克军的一个问题“您做为一个前辈，请给我们这些菜鸟一些指导，是应该学YUI还是JQuery？”克军的回答是，从最基础的原生的JS获取对象绑定事件等知识学起，学什么框架不重要，选择一个合适的，会用即可。其实任何一门编程语言都是如此。如果我在这里用YUI写出一个树状菜单组件，那唯一的用途就是被一些垃圾源码站转载，而且不大可能被应用，还不如看看<a href="http://developer.yahoo.com/yui/menu/" target="_blank">YUI里的menu组件</a>。懒懒交流会上，<a href="http://lifesinger.org/blog/" target="_blank">淘宝的玉伯</a>说过，如果想让自己的JS代码“流芳百世”就得用原生的写法，因为不依赖任何框架的JS代码复制粘贴起来最方便。</p>
<p>然而为了方便组件编写和减少BUG，为了一个事件绑定，我不得不在自己的代码里加上addEvent的方法。还得加hasClass、addClass、get等DOM操作方法，大大增加代码的长度。于是我放弃了重写的这个念头，只是略讲下编写思路好了。</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> addEvent<span style="color: #009900;">&#40;</span>obj<span style="color: #339933;">,</span> type<span style="color: #339933;">,</span> fn<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>obj.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; obj.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>type<span style="color: #339933;">,</span> fn<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>obj.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; obj<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;e&quot;</span><span style="color: #339933;">+</span>type<span style="color: #339933;">+</span>fn<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> fn<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; obj.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">&quot;on&quot;</span><span style="color: #339933;">+</span>type<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> obj<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;e&quot;</span><span style="color: #339933;">+</span>type<span style="color: #339933;">+</span>fn<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>首先初始化绑定导航的DOM，然后分别为每一级的UL和LI绑定上hover和click事件，分别加上&#8221;hover&#8221;和&#8221;select&#8221;的样式名。然后通过CSS来展现样式，显示隐藏对应节点。Over</p>
<p>再过两年后，我再回过头看现在的代码思路，可能会有更好的想法。代码需要熟能生巧，需要时刻跟上技术的发展，才能保持优雅的姿态。多看看前辈的文章，多与人交流，拜一个好的师傅，是学习的最佳途径。</p>
<p>其实做人又何尝不是如此。自以为是的自己，总会被以后看似成熟的自己所否定。以前catge同学常被人说幼稚儿童，心有不甘。现在则习惯了，被人说幼稚不要紧，关键要学会改变自己，改掉不足的地方，学习他人的长处。倒是有个88年的幼齿，说不带我这个老年人一起玩的时候，我心碎了。</p>
<p>PS:这个雪人是我自己堆的，还是很有童心的吧，请90后的小弟弟小妹妹不要拒绝我^o^</p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=37</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>幸福就是猫吃鱼，狗吃肉，奥特曼打小怪兽</title>
		<link>http://yekai.net/?p=30</link>
		<comments>http://yekai.net/?p=30#comments</comments>
		<pubDate>Sat, 26 Dec 2009 03:43:29 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[人生感悟]]></category>
		<category><![CDATA[幸福]]></category>
		<category><![CDATA[自由]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=30</guid>
		<description><![CDATA[常听人抱怨人生的杯具，世道的不公。那些事与愿违，不断压抑着人内心的躁动。直到成为一沟绝望的死水，吹不起半点漪沦。 这个贵贱分明、肉弱强食的世界，虚情假意的文明下遮掩着赤裸裸的野蛮。世袭的卑微与尊贵，成为DNA的一部分被代代遗传。 沉默的大多数，作为社会最坚固的中流砥柱，面对那句“人人生而平等”，继续保持犬儒的姿态，露出苍白无力的苦笑。蝼蚁偷生，究竟为何？生命的意义又是什么？ 先来听听造物主的意见吧。 “人类是X星球的生命体M抛在地球上的副本，繁衍的最终目的只是为了在社会进化中发展出更高的科技，供最后的主体M使用。”这是我看完《第九区》之后的一个猜想。 其实，我一直认为是“薛定谔的猫通过万有引力定律创造了万物”。 最基本的生命体─病毒，其最基本的特征是自我繁殖。万物的生长就是为了自身的繁殖，为了自身物种DNA能在繁殖的过程中通过变异不断进化，完善DNA。直到最后某一时间，这段DNA将会有着超神的物理、法术防御与攻击能力。 为了保障这段DNA能够正常的传递下去，物种有了生殖过程。无论是无性生殖中的分裂生殖、出芽生殖、营养生殖还是有性生殖中的单性生殖、接合生殖、配子生殖。物种都能在生殖过程中体会到作为生命体的快感。做爱中的男女，大脑中分泌出神经递质多巴胺刺激神经的奖赏系统，给人带来愉悦感。 简单的揣摩下造物主的旨意吧。物种的自我繁殖-&#62;做爱的形式-&#62;刺激神经奖赏系统-&#62;产生愉悦感。再大胆的反证一下，让人产生愉悦感的事情是造物主希望人所做的事情。实现造物主的愿望，则是生命的意义所在。因此生命的意义在于，追求那些能给自己带来愉悦感的事情。生命的意义即追求幸福。 这充满漏洞与伪科学的证明过程，让我说服了自己，不再为生命的意义这个命题而迷茫。 远古时代某部落酋长Y染色体上的一处变异，给人类带来了意识的觉醒，从此人类成为万物之灵。独立意识，让人产生了自由感。这份自由感使得“人人生而平等”成为可能，因为一旦心自由了，Nothing is impossible。不要相信所谓的真理，那些看似不可动摇的真理，已沦为历史最可笑的悖论。不要被外界束缚了自由的心，只有自由才能寻找到幸福的真谛。 伪善的幸福以牺牲自由为代价，害怕、迟疑、逃避均是自由沦陷的征兆。自由不在于金钱与地位，而在于心态与信念。“心晴的时候，雨也是晴；心雨的时候，晴也是雨”，自由亦是如此。 北冥有鱼，其名为鲲。鲲之大，不知其几千里也。化而为鸟，其名为鹏。鹏之背，不知其几千里也。怒而飞，其翼若垂天之云。是鸟也，海运则将徙于南冥。南冥者，天池也。]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-31" title="鲲鹏展翅" src="http://yekai.net/wp-content/uploads/2009/12/kunpeng.jpeg" alt="鲲鹏展翅" width="500" height="251" /></p>
<p>常听人抱怨人生的杯具，世道的不公。那些事与愿违，不断压抑着人内心的躁动。直到成为一沟绝望的死水，吹不起半点漪沦。</p>
<p>这个贵贱分明、肉弱强食的世界，虚情假意的文明下遮掩着赤裸裸的野蛮。世袭的卑微与尊贵，成为DNA的一部分被代代遗传。</p>
<p>沉默的大多数，作为社会最坚固的中流砥柱，面对那句“人人生而平等”，继续保持犬儒的姿态，露出苍白无力的苦笑。蝼蚁偷生，究竟为何？生命的意义又是什么？</p>
<p>先来听听造物主的意见吧。</p>
<p>“人类是X星球的生命体M抛在地球上的副本，繁衍的最终目的只是为了在社会进化中发展出更高的科技，供最后的主体M使用。”这是我看完《第九区》之后的一个猜想。</p>
<p>其实，我一直认为是“薛定谔的猫通过万有引力定律创造了万物”。</p>
<p>最基本的生命体─病毒，其最基本的特征是自我繁殖。万物的生长就是为了自身的繁殖，为了自身物种DNA能在繁殖的过程中通过变异不断进化，完善DNA。直到最后某一时间，这段DNA将会有着超神的物理、法术防御与攻击能力。</p>
<p>为了保障这段DNA能够正常的传递下去，物种有了生殖过程。无论是无性生殖中的分裂生殖、出芽生殖、营养生殖还是有性生殖中的单性生殖、接合生殖、配子生殖。物种都能在生殖过程中体会到作为生命体的快感。做爱中的男女，大脑中分泌出神经递质多巴胺刺激神经的奖赏系统，给人带来愉悦感。</p>
<p>简单的揣摩下造物主的旨意吧。物种的自我繁殖-&gt;做爱的形式-&gt;刺激神经奖赏系统-&gt;产生愉悦感。再大胆的反证一下，让人产生愉悦感的事情是造物主希望人所做的事情。实现造物主的愿望，则是生命的意义所在。因此生命的意义在于，追求那些能给自己带来愉悦感的事情。生命的意义即追求幸福。</p>
<p>这充满漏洞与伪科学的证明过程，让我说服了自己，不再为生命的意义这个命题而迷茫。</p>
<p>远古时代某部落酋长Y染色体上的一处变异，给人类带来了意识的觉醒，从此人类成为万物之灵。独立意识，让人产生了自由感。这份自由感使得“人人生而平等”成为可能，因为一旦心自由了，Nothing is impossible。不要相信所谓的真理，那些看似不可动摇的真理，已沦为历史最可笑的悖论。不要被外界束缚了自由的心，只有自由才能寻找到幸福的真谛。</p>
<p>伪善的幸福以牺牲自由为代价，害怕、迟疑、逃避均是自由沦陷的征兆。自由不在于金钱与地位，而在于心态与信念。“心晴的时候，雨也是晴；心雨的时候，晴也是雨”，自由亦是如此。</p>
<p>北冥有鱼，其名为鲲。鲲之大，不知其几千里也。化而为鸟，其名为鹏。鹏之背，不知其几千里也。怒而飞，其翼若垂天之云。是鸟也，海运则将徙于南冥。南冥者，天池也。</p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=30</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTC G2购机刷机攻略与应用软件推荐</title>
		<link>http://yekai.net/?p=13</link>
		<comments>http://yekai.net/?p=13#comments</comments>
		<pubDate>Sun, 13 Dec 2009 13:01:53 +0000</pubDate>
		<dc:creator>catge</dc:creator>
				<category><![CDATA[Share]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[htc g2]]></category>

		<guid isPermaLink="false">http://yekai.net/?p=13</guid>
		<description><![CDATA[新入手一周的HTC G2，取名GG，用起来很顺手。从选机、购机、刷机、玩机都有不少可以分享的地方，希望对想买G2和正在观望的同学有所帮助。 一、购买Android手机需要注意的地方 Android手机现在有G1\G2\G3\G4，大概的介绍下。 G1：出来比较早，配置是最低的，全键盘，适合键盘玩家收藏，现在基本停产。 G2：配置相对较高，外形时尚，尤其是白色款，有很强的文化识别度（引用方文山的词^_^）。黑色款2400～2650 白色款2900+ G3：配置最高，有著名的15度角设计（个人不大喜欢），适合商务人士。3400+ G4：配置中低端，外形和其他三款差距较大，没有轨迹球。 因为catge同学比较喜欢以貌取G，而且HTC版的G2和G3的内存都是288M，配置差别仅在摄像头，所以最终还是选择了白色款的G2。经过实际考察情况来看，G2性价比很高，尤其是HTC黑色款。白色款十分走俏，在国内基本处于断货状态，我也是等了一个多星期才拖噔噔买到的。 二、购买G2需要注意的地方 G2分Vodafone版、T-mobile版和HTC版，其中前两款是运营商定制版，内存仅有192M，HTC版内存为288M与G3一样。背后印有Google LOGO的是Vodafone版，所以买的时候一定要注意买HTC版的，因为它的配置最高，后面刷G3的hero系统才不会吃力。 内存大小如何区别呢？ 新机拿到手后，装个“超级终端”（一般刷中文版都会有），然后敲入命令“free”就可以看到。如下图： 上图中，total下的数值为196584，一般在196~197的实际内存是288M（硬件占用了部分内存），是HTC版（也有32A版的说法），而Vodafone版（32B版）的192M内存在free命令下的这个数字大概在80-96之间。 三、G2刷机方式 G2的刷机方法，我也是从安卓网上学来的，推荐大家看专业的帖子。对于有一定经验的同学，想省去找文件的麻烦，可以参看以下步骤： 1、准备一张SD卡，手机连到电脑之后，格式化SD，选格式为FAT32。 2、下载最新的升级包，重命名为update.zip（注意格式），放在SD的根目录。点这里可以下载我的dropbox上的3.04纯净版的升级包。 3、手机关机之后，同时按“电源”+“返回”键开机，直到出现boot选择画面。 4、将G2和电脑连接，会提示里安装驱动。此时，先将刷机工具包下载解压到桌面。选择“从指定的位置安装驱动”，选中“usb_driver/x86”目录（64位电脑选amd64目录），等待安装成功。 5、驱动安装完成后，双击flash.bat运行。如果此时报错说缺少adbwinapi.dll文件，从这里下载一个，放到c:/windows/system32目录下。再重新运行flash.bat试试。我当时就碰到了这个问题。 6、运行之后G2会重启进入刷机模式。选择Alt+S，按下轨迹球，开始刷机，等待2-5分钟。 7、文件复制完后，选择Alt+W，恢复手机为默认设置。恢复成功后选择Home+Back，重启之后刷机升级成功！ 四、Android应用软件和游戏推荐 终于到我最想说的部分了，Oh yeah～^_^ 如果你平时是google的重度用户，gmail、gtalk、reader、calendar、map，这下爽了。G2内置了gmail、gtalk、map和calendar，可以和你的Google账户绑定并且实时同步。因为我的Address Book和iCal已经和Google Contacts及Calendar同步，所以通过google在线服务，直接实现了我的macbook pro和g2的同步。推荐几款我这里觉得不错的软件，因为把玩的时间不够长，所以量不多，但个人感觉比较实在。 1、NewsRob RSS阅读器 这款应用基本成为Google reader的Android官方客户端，在market上评5颗星的满分，确实很方便。乃平时居家必备、上厕所蹲点最常用的软件- -!。 2、Twidroid Twitter客户端 12月11号最近一次的升级，Twidroid的UI也变好看了很多，用起来非常方便，貌似周围的twitter用户都用的这个客户端。关于Android上是怎么访问twitter的，我这里是用的修改HOST文件的方式。HOST地址是多少，我这里就不说了，大家自己去google，说下如何修改HOST文件。 首先运行这个命令，临时开下系统文件的写权限： mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 这下就可以修改/etc/hosts文件了，本来是用vi改好了，忽然保存的时候意识到一个问题“G2模拟键盘上没有Esc键…”。杯具了，只能用另外一个方法来替代： echo &#8220;67.xxx.xxx.xxx twitter.com&#8221; &#62;&#62; /etc/hosts 修改好之后，记得关下写权限： [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-17" title="Catge's HTC G2" src="http://yekai.net/wp-content/uploads/2009/12/DSC00760.jpg" alt="Catge's HTC G2" width="540" height="303" /></p>
<p>新入手一周的HTC G2，取名GG，用起来很顺手。从选机、购机、刷机、玩机都有不少可以分享的地方，希望对想买G2和正在观望的同学有所帮助。</p>
<h3>一、购买Android手机需要注意的地方</h3>
<p>Android手机现在有G1\G2\G3\G4，大概的介绍下。</p>
<p>G1：出来比较早，配置是最低的，全键盘，适合键盘玩家收藏，现在基本停产。</p>
<p>G2：配置相对较高，外形时尚，尤其是白色款，有很强的文化识别度（引用方文山的词^_^）。黑色款2400～2650 白色款2900+</p>
<p>G3：配置最高，有著名的15度角设计（个人不大喜欢），适合商务人士。3400+</p>
<p>G4：配置中低端，外形和其他三款差距较大，没有轨迹球。</p>
<p>因为catge同学比较喜欢以貌取G，而且HTC版的G2和G3的内存都是288M，配置差别仅在摄像头，所以最终还是选择了白色款的G2。经过实际考察情况来看，G2性价比很高，尤其是HTC黑色款。白色款十分走俏，在国内基本处于断货状态，我也是等了一个多星期才拖噔噔买到的。</p>
<h3>二、购买G2需要注意的地方</h3>
<p>G2分Vodafone版、T-mobile版和HTC版，其中前两款是运营商定制版，内存仅有192M，HTC版内存为288M与G3一样。背后印有Google LOGO的是Vodafone版，所以买的时候一定要注意买HTC版的，因为它的配置最高，后面刷G3的hero系统才不会吃力。</p>
<p>内存大小如何区别呢？</p>
<p>新机拿到手后，装个“超级终端”（一般刷中文版都会有），然后敲入命令“free”就可以看到。如下图：</p>
<p><img class="alignnone size-full wp-image-16" title="RAM" src="http://yekai.net/wp-content/uploads/2009/12/DSC00759.jpg" alt="RAM" width="500" height="281" /></p>
<p>上图中，total下的数值为196584，一般在196~197的实际内存是288M（硬件占用了部分内存），是HTC版（也有32A版的说法），而Vodafone版（32B版）的192M内存在free命令下的这个数字大概在80-96之间。</p>
<h3>三、G2刷机方式</h3>
<p>G2的刷机方法，我也是从安卓网上学来的，推荐大家看<a href="http://www.hiapk.com/bbs/viewthread.php?tid=2834&amp;page=1&amp;extra=#pid11606" target="_blank">专业的帖子</a>。对于有一定经验的同学，想省去找文件的麻烦，可以参看以下步骤：</p>
<p>1、准备一张SD卡，手机连到电脑之后，格式化SD，选格式为FAT32。</p>
<p>2、下载最新的升级包，重命名为update.zip（注意格式），放在SD的根目录。<a href="http://dl.dropbox.com/u/1816967/g2/update.zip" target="_blank">点这里可以下载我的dropbox</a>上的3.04纯净版的升级包。</p>
<p>3、手机关机之后，同时按“电源”+“返回”键开机，直到出现boot选择画面。</p>
<p>4、将G2和电脑连接，会提示里安装驱动。此时，先将<a href="http://dl.dropbox.com/u/1816967/g2/flashpackage.zip" target="_blank">刷机工具包下载</a>解压到桌面。选择“从指定的位置安装驱动”，选中“usb_driver/x86”目录（64位电脑选amd64目录），等待安装成功。</p>
<p>5、驱动安装完成后，双击flash.bat运行。如果此时报错说缺少adbwinapi.dll文件，<a href="http://dl.dropbox.com/u/1816967/g2/AdbWinApi.dll" target="_blank">从这里下载一个</a>，放到c:/windows/system32目录下。再重新运行flash.bat试试。我当时就碰到了这个问题。</p>
<p>6、运行之后G2会重启进入刷机模式。选择Alt+S，按下轨迹球，开始刷机，等待2-5分钟。</p>
<p>7、文件复制完后，选择Alt+W，恢复手机为默认设置。恢复成功后选择Home+Back，重启之后刷机升级成功！</p>
<h3>四、Android应用软件和游戏推荐</h3>
<p>终于到我最想说的部分了，Oh yeah～^_^</p>
<p>如果你平时是google的重度用户，gmail、gtalk、reader、calendar、map，这下爽了。G2内置了gmail、gtalk、map和calendar，可以和你的Google账户绑定并且实时同步。因为我的Address Book和iCal已经和Google Contacts及Calendar同步，所以通过google在线服务，直接实现了我的macbook pro和g2的同步。推荐几款我这里觉得不错的软件，因为把玩的时间不够长，所以量不多，但个人感觉比较实在。</p>
<p>1、NewsRob RSS阅读器</p>
<p>这款应用基本成为Google reader的Android官方客户端，在market上评5颗星的满分，确实很方便。乃平时居家必备、上厕所蹲点最常用的软件- -!。</p>
<p>2、Twidroid Twitter客户端</p>
<p><img class="alignnone size-full wp-image-14" title="Twidroid" src="http://yekai.net/wp-content/uploads/2009/12/DSC00753.jpg" alt="Twidroid" width="330" height="500" /></p>
<p>12月11号最近一次的升级，Twidroid的UI也变好看了很多，用起来非常方便，貌似周围的twitter用户都用的这个客户端。关于Android上是怎么访问twitter的，我这里是用的修改HOST文件的方式。HOST地址是多少，我这里就不说了，大家自己去google，说下如何修改HOST文件。</p>
<p>首先运行这个命令，临时开下系统文件的写权限：</p>
<p>mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system</p>
<p>这下就可以修改/etc/hosts文件了，本来是用vi改好了，忽然保存的时候意识到一个问题“G2模拟键盘上没有Esc键…”。杯具了，只能用<a href="http://www.ooophone.com/viewthread.php?tid=1651" target="_blank">另外一个方法</a>来替代：</p>
<p>echo &#8220;67.xxx.xxx.xxx twitter.com&#8221; &gt;&gt; /etc/hosts</p>
<p>修改好之后，记得关下写权限：</p>
<p>mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system</p>
<p>找不到IP的同学，试试twitter api proxy代理的方式吧。</p>
<p>3、<a href="https://www.dropbox.com/referrals/NTE4MTY5Njc5" target="_blank">Dropbox 跨平台共享文件</a></p>
<p>貌似Dropbox米有G2的客户端，这里其实想说的是，我们可以用dropbox来在线存储文件，dropbox可以在垮系统之间无缝共享，偶的mac和windows就是通过它来同步文件。手机通过wifi连接dropbox来下载文件即可。这样的话，可以省下USB数据线传输的麻烦。</p>
<p>4、<a href="http://www.hiapk.com/bbs/viewthread.php?tid=41594&amp;highlight=aqq">aQQ Android的非官方QQ客户端</a></p>
<p>我比较过了。这个体验最好，UI界面最棒，QQ用户直接下载用吧。</p>
<p>5、Evernote 笔记文档管理</p>
<p>推荐evernote主要还是因为它的跨平台性，它现在已经有官方的Android客户端，UI界面一般，语音笔记偶尔还会死机&gt;_&lt;，需要继续完善。貌似不好找，还是<a href="http://dl.dropbox.com/u/1816967/g2/Evernote_1.1RC1.apk" target="_blank">下载我的dropbox里的吧</a>，会自动升级的。</p>
<p>6、Wether天气插件</p>
<p>仿G3 Hero系统的天气插件，界面非常好看。<a href="http://www.hiapk.com/bbs/viewthread.php?tid=50889&amp;highlight=%CC%EC%C6%F8" target="_blank">安卓网上有汉化的版本</a>，推荐安装。</p>
<p>7、SnapPhoto Pro 相机增强</p>
<p>G2系统自带的拍照功能比较弱，装个相机增强工具可以设置拍照时的一些参数，包括自动聚焦、防抖功能。<a href="http://dl.dropbox.com/u/1816967/g2/SnapPhoto_Pro.apk">dropbox下载</a></p>
<p>8、智能拨号</p>
<p><img class="alignnone size-full wp-image-15" title="智能拨号" src="http://yekai.net/wp-content/uploads/2009/12/DSC00758.jpg" alt="智能拨号" width="337" height="500" /></p>
<p>装上这个之后，找联系人拨号的速度绝对可以快一个数量级，可以根据人名或者号码来查找。<a href="http://dl.dropbox.com/u/1816967/g2/HiDialer_1.apk" target="_blank">我这里存了个2.8版的</a></p>
<p>9、<a href="http://www.rememberthemilk.com/" target="_blank">Remember The Milk 任务管理工具</a></p>
<p>任务管理不同与calendar这样的日程管理，calendar用来记录固定时间发生的事情，通常是会议、约会之类的。任务一般是一个想去做的idea，时间是自由安排的。Milk是十分优秀的在线任务管理WEB应用，使用google gears之后，可以离线使用。所以在G2上也可以用。不过WEB版的在G2上实在是用的难受，Android客户端需要pro用户（每年付费$25.00）才能使用，正在考虑要不要买。</p>
<p>免费的话，可以试试shuffle，在market上可以下载到。</p>
<p>10、游戏</p>
<p>我这里暂时只下载了三个游戏：</p>
<p>labyrinth Lite，就是平衡球的那个游戏。</p>
<p>QQ斗地主，这个界面做的非常赞，貌似是QQ官方出品。</p>
<p>最近迷上的游戏是Sketch Online，一款在线和老外玩的猜单词游戏，很有趣。</p>
<p>OK，先写这么多，欢迎G2玩家多多交流。</p>
<p>冷笑话一则：今天玩sketch的时候，碰到一个叫lotus的MM，打字问catge, are u chinese? 我回了句Yes，MM很兴奋的回了句Me too! 然后我说“soga”…MM不知咋的就走了- -!</p>
]]></content:encoded>
			<wfw:commentRss>http://yekai.net/?feed=rss2&amp;p=13</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
