<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 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/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/lifebackup" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/lifebackup" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 02 Feb 2011 11:38:43 GMT</lastBuildDate><title>Superpippo's Lifebackup</title><description>backup my life</description><image><url>http://www.feedsky.com/feed/lifebackup/sc/gif</url><title>Superpippo's Lifebackup</title><link>http://www.lifebackup.cn</link></image><link>http://www.lifebackup.cn</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Wed, 02 Feb 2011 11:42:25 GMT</pubDate><item><title>Protected: match</title><link>http://www.lifebackup.cn/match.html</link><content:encoded>&lt;p class='fp'&gt;This post is password protected. To view it please enter your password below:&lt;/p&gt;
&lt;p&gt;&lt;label for=&quot;pwbox-166&quot;&gt;Password:&lt;br /&gt;
&lt;input name=&quot;post_password&quot; id=&quot;pwbox-166&quot; type=&quot;password&quot; size=&quot;20&quot; /&gt;&lt;/label&gt;&lt;br /&gt;
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Submit&quot; /&gt;&lt;/p&gt;&lt;/form&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503740/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/match.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503740/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503740/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/match.html/feed</wfw:commentRss><description>There is no excerpt because this is a protected post...&lt;img src=&quot;http://www1.feedsky.com/t1/471503740/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/match.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503740/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503740/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Uncategorized</category><pubDate>Wed, 02 Feb 2011 19:38:43 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/match.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/?p=166</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/match.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503740/5039462</fs:itemid></item><item><title>工作一周年记</title><link>http://www.lifebackup.cn/%e5%b7%a5%e4%bd%9c%e4%b8%80%e5%91%a8%e5%b9%b4%e8%ae%b0.html</link><content:encoded>&lt;p class='fp'&gt;总的来说，IBM在我学生生涯占据了一个很重要的位置，从大二加入学校的IBM俱乐部，其间参加过IBM的全国大学生创新大赛，去过九寨参加IBM夏令营，一直到研二来到CDL实习。2009年7月14号，我从一个实习生转成了正式员工，bluepathway还在沿续。&lt;/p&gt;
&lt;p&gt;进入公司做的是数据挖掘产品相关的开发，工作还是在一种轻松愉快的氛围下有条不紊地进行着。感觉有无尽的资源你可以学习，从到SQL的执行优化，到clearcase best practice;有数不清的大牛你可以请教，从OSGi到EMF，因为很多这些技术标准的制定者就能在bluepage上查到。&lt;/p&gt;
&lt;p&gt;对一年的表现来说，我自己觉得也跟大多数新人的PBC一样吧，solid contribution，但并未有太多让人吃惊，为之眼前一亮的东西。生活中的一些事情也占据了这一年的一些时间吧，比如房子等等。接下来的一年，希望生活上能逐步稳定下来，这样才能对长久的工作和生活都是非常重要的。&lt;/p&gt;
&lt;p&gt;接下来说一些一年内自己觉得比较有意思的东西吧：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The code is there, read it &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;据说这是一个美国二线经理在你伸手要技术文档常说的一句话。看起来很不讲道理，但从个人coding能力的角度来看，读代码的能力是非常非常重要的。如果你看过很多开源框架的源代码，对设计模式知道个所以然，那么你在了解整个产品方面并不会遇到太大麻烦，因为你在读代码时看到一个inner Mediator类时，就知道它接下来要做什么事情了。而只有基于正确的源码级理解，才能形成良性的迭代开发循环，否则，改regression还来不及呢。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;The big bang &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;想升band光有solid contribution是不够的，你还得在你经理期望的范围之外，体现你的added value。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;No Excuse &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;一开始还经常把自己当作新人看待，但当最近一次不小心弄坏build时才意识到，当某些错误发生时，借口是没有用的。如果道歉有用，还要警察干嘛。。。做错了就是做错了，IBM更相信process leads to success。所以要是再担心弄坏build，写一个自动化pde ant脚本就好了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Don’t make me think &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;这是写邮件陈述问题的一些看法，尤其是在给一些国外同事写信的时候，最好在信的开头就把这封信的意思说清楚，因为并不是每个人都愿意知道的那么详细，也不是对你很紧急的事情在他们也同样很紧急。to的人可能比较仔细地看，cc的人可能就只是看个大概。所以把相当一部分信息highlight出来，对你获得你想得到的回复是非常有必要的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;QA in a Dev’s perspective &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;一个QA同事说过这么一句话：QA主要是帮助Dev找出问题的，也就是说，Dev的工作正是由于QA的保证，才会显得高质量。而QA本身是再没有QA对他们的代码质量进行保证的，这些代码可能包括测试用例，测试脚本等等。所以如果以一个开发者的角度来看待QA的代码，以Dev的一些专业知识对这些进行refine，那么保证了QA的工作的同时，也保证了最终产品的质量。其实很多开源框架发展到一定阶段，都是由框架本身来cover部分quality，比如EMF和Hibernate的validation模块。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Keep Logging &lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;这条也是每个人都知道，都并不是每个人都能做好的。每天都有不同的事情，不同的想法企图在你的大脑中永久地占据一片内存，如果不记录，要么选择性遗忘，要么就等着out of memory。在解defect时，有新想法时，走新的流程时，有时候只需要简单的一个wiki page，一个teamroom comment或者一个shell脚本，记录不仅让你在下次同样的事情只需要O(1)的时间定位，也在与同事分享时show出了你的价值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503741/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/%e5%b7%a5%e4%bd%9c%e4%b8%80%e5%91%a8%e5%b9%b4%e8%ae%b0.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503741/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503741/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/%e5%b7%a5%e4%bd%9c%e4%b8%80%e5%91%a8%e5%b9%b4%e8%ae%b0.html/feed</wfw:commentRss><description>总的来说，IBM在我学生生涯占据了一个很重要的位置，从大二加入学校的IBM俱乐部，其间参加过IBM的全国大学生创新大赛，去过九寨参加IBM夏令营，一直到研二来到CDL实习。2009年7月14号，我从...&lt;img src=&quot;http://www1.feedsky.com/t1/471503741/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/%e5%b7%a5%e4%bd%9c%e4%b8%80%e5%91%a8%e5%b9%b4%e8%ae%b0.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503741/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503741/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>dailylife</category><pubDate>Wed, 14 Jul 2010 22:29:40 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/%e5%b7%a5%e4%bd%9c%e4%b8%80%e5%91%a8%e5%b9%b4%e8%ae%b0.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/?p=161</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/%e5%b7%a5%e4%bd%9c%e4%b8%80%e5%91%a8%e5%b9%b4%e8%ae%b0.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503741/5039462</fs:itemid></item><item><title>Still Alive…</title><link>http://www.lifebackup.cn/still-alive.html</link><content:encoded>&lt;p class='fp'&gt;Blog又经历了一阵空白期，很是惭愧。。翻了翻这个blog的历史，其实也经历过好几个不写blog的阶段——或许自己可以找这样那样的借口，比如感情，玩Wow，找实习，但其实都可以归结成一个原因：懒。&lt;/p&gt;
&lt;p&gt;没错，生活或者工作，懒得思考，懒得总结，懒得记录，结果就是日子如白驹过隙般，没有留下一丝印迹。&lt;/p&gt;
&lt;p&gt;要说来，其实工作这半年多来还是积累了一些东西的，技术上的大部分都记录在公司内部的teamroom里了，而更多沟通或处理问题上的方式本以为自己能牢记在心里，其实则不然。我想这也就是为什么《走出软件作坊》和《和时间作朋友》之类的书，如此畅销的原因。大脑的内存就那么一块地方，你的缓存算法不可能总是命中。。你总得学会从别人身上学习优点，学会总结，学会记录，千万别学会无理由的遗忘。纵使做不到GTD那般精准和万无一失，但亦不致于那般眼高手低。&lt;/p&gt;
&lt;p&gt;0 box here I come，这恐怕是GTDer行为方式的缩影吧。对于我这种懒人来说，GTD并非不可，不过恐怕总有些强弩之末的感觉。问题不在于是否GTD，而在于克服人性的懒惰和集中精力坚持做有意义的事情。今日事今日毕，则是一个基本的观点。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.lifebackup.cn/wp-content/uploads/2010/04/todolistnothing.jpg&quot;&gt;&lt;img title=&quot;to-do-list-nothing&quot; style=&quot;border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px&quot; height=&quot;184&quot; alt=&quot;to-do-list-nothing&quot; src=&quot;http://www.lifebackup.cn/wp-content/uploads/2010/04/todolistnothing-thumb.jpg&quot; width=&quot;244&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; 用老刘的话来说，我的本命年过的很顺。。。可能是穿了红内裤的原因哈XD不过这本命年一过，好像运势就有些偏转的迹象，春节就开了一个不太妙的头。&lt;/p&gt;
&lt;p&gt;新的一年想到了以下目标：&lt;/p&gt;
&lt;p&gt;读更多的书;   &lt;br /&gt;坚持更多的总结和记录;    &lt;br /&gt;在与工作或技术相关的范围内更让多的人知道我。&lt;/p&gt;
&lt;p&gt;立此存照。&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503742/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/still-alive.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503742/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503742/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/still-alive.html/feed</wfw:commentRss><description>Blog又经历了一阵空白期，很是惭愧。。翻了翻这个blog的历史，其实也经历过好几个不写blog的阶段——或许自己可以找这样那样的借口，比如感情，玩Wow，找实习，但其实都可以归结成一个原...&lt;img src=&quot;http://www1.feedsky.com/t1/471503742/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/still-alive.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503742/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503742/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>self-ask</category><pubDate>Sat, 03 Apr 2010 11:45:44 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/still-alive.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/still-alive.html</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/still-alive.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503742/5039462</fs:itemid></item><item><title>内联升最后的布鞋</title><link>http://www.lifebackup.cn/%e5%86%85%e8%81%94%e5%8d%87%e6%9c%80%e5%90%8e%e7%9a%84%e5%b8%83%e9%9e%8b.html</link><content:encoded>&lt;p class='fp'&gt;今年过年回家，我用实习的工资第一次给外婆买了礼物，内联升的布鞋。&lt;/p&gt;
&lt;p&gt;昨天，北京罕见的下起了大雪。白色的世界，有一个很美的词叫做银装素裹。&lt;/p&gt;
&lt;p&gt;可白色，其实也有另一层很独特的意义。&lt;/p&gt;
&lt;p&gt;今早，一觉醒来，再平常不过的一个星期一，却罕见并清晰记得梦里梦到了ex。&lt;/p&gt;
&lt;p&gt;我无法不相信冥冥之中自有天意。&lt;/p&gt;
&lt;p&gt;晚上，本以为是妈妈家常的问候电话，可电话那头格外清晰的哭腔告诉我：外婆永远的走了。&lt;/p&gt;
&lt;p&gt;外婆年初查出是胃癌晚期，病情一直在恶化。虽然有心理准备，可是此刻，我的脑子仍然一片空白。&lt;/p&gt;
&lt;p&gt;妈妈说外婆走的很突然，并没有太大的痛苦，也让我不用担心外公。&lt;/p&gt;
&lt;p&gt;妈妈说外婆快走的时候已经说不出话，只是指着她的手镯，外公问是不是要把它给我未来的媳妇，外婆微笑地点了点头。&lt;/p&gt;
&lt;p&gt;妈妈说外婆平时并不舍得穿我买的那双内联升，却在今天永远地穿上了它，安祥地走了。&lt;/p&gt;
&lt;p&gt;此时的我，再也无法抑制，放声大哭。&lt;/p&gt;
&lt;p&gt;此时的我，宁肯相信凤凰涅槃，相信死亡只是重生。&lt;/p&gt;
&lt;p&gt;童年时候在外婆家的一幅幅画面在眼前掠过：&lt;/p&gt;
&lt;p&gt;每周五坐在舅舅的自行车去外婆家，我晃着腿在上坡时给自行车“加速”;&lt;/p&gt;
&lt;p&gt;睡觉前去鸡窝里把鸡蛋给掏出来递给外婆，就好像那是我的产品一样;&lt;/p&gt;
&lt;p&gt;外婆在地上划一个圈，说不要跑出去，她一会就回来。我就静静地坐在圈里，等着外婆回来;&lt;/p&gt;
&lt;p&gt;晚上在木板桥上乘凉，外公教我识别天上的北斗星;&lt;/p&gt;
&lt;p&gt;夏天每天下午盼着那个半点响一次的大钟拨到4点，便跳下渠道去洗澡;&lt;/p&gt;
&lt;p&gt;每周天要回家前，外公都会把我叫到屋里，给我一点零花钱，嘱咐不要告诉外婆;&lt;/p&gt;
&lt;p&gt;外婆家的钥匙有一副是备用的，就放在门口的窗台上，拿着小铁盒盖着;&lt;/p&gt;
&lt;p&gt;外婆家天花板上吊着很多篮子，小时候我跳起来也够不着，现在我已经要低着头以免碰着;&lt;/p&gt;
&lt;p&gt;&amp;#8230;&amp;#8230;&lt;/p&gt;
&lt;p&gt;如果说内心有一丝安慰的话，可能就是我上大学后第一次在今年十一回家，否则我将后悔一辈子。很多朋友知道我回家，却很少知道我的目的。&lt;/p&gt;
&lt;p&gt;外婆，你在天堂还好吗？&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503743/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/%e5%86%85%e8%81%94%e5%8d%87%e6%9c%80%e5%90%8e%e7%9a%84%e5%b8%83%e9%9e%8b.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503743/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503743/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/%e5%86%85%e8%81%94%e5%8d%87%e6%9c%80%e5%90%8e%e7%9a%84%e5%b8%83%e9%9e%8b.html/feed</wfw:commentRss><description>今年过年回家，我用实习的工资第一次给外婆买了礼物，内联升的布鞋。
昨天，北京罕见的下起了大雪。白色的世界，有一个很美的词叫做银装素裹。
可白色，其实也有另一层很独特的意义。...&lt;img src=&quot;http://www1.feedsky.com/t1/471503743/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/%e5%86%85%e8%81%94%e5%8d%87%e6%9c%80%e5%90%8e%e7%9a%84%e5%b8%83%e9%9e%8b.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503743/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503743/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>memory</category><pubDate>Tue, 03 Nov 2009 00:59:14 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/%e5%86%85%e8%81%94%e5%8d%87%e6%9c%80%e5%90%8e%e7%9a%84%e5%b8%83%e9%9e%8b.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/%e5%86%85%e8%81%94%e5%8d%87%e6%9c%80%e5%90%8e%e7%9a%84%e5%b8%83%e9%9e%8b.html</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/%e5%86%85%e8%81%94%e5%8d%87%e6%9c%80%e5%90%8e%e7%9a%84%e5%b8%83%e9%9e%8b.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503743/5039462</fs:itemid></item><item><title>Twitter Weekly Updates for 2010-04-02</title><link>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02-2.html</link><content:encoded>&lt;p class='fp'&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503744/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02-2.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503744/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503744/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02-2.html/feed</wfw:commentRss><description>Copyright &amp;#169; 2008 This feed is for personal, non-commercial use only.  The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digita...&lt;img src=&quot;http://www1.feedsky.com/t1/471503744/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02-2.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503744/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503744/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>dailylife</category><pubDate>Mon, 21 Sep 2009 17:00:00 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02-2.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02-2.html</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02-2.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503744/5039462</fs:itemid></item><item><title>Twitter Weekly Updates for 2010-04-02</title><link>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02.html</link><content:encoded>&lt;p class='fp'&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503745/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503745/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503745/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02.html/feed</wfw:commentRss><description>Copyright &amp;#169; 2008 This feed is for personal, non-commercial use only.  The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digita...&lt;img src=&quot;http://www1.feedsky.com/t1/471503745/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503745/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503745/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>dailylife</category><pubDate>Mon, 21 Sep 2009 17:00:00 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02.html</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/twitter-weekly-updates-for-2010-04-02.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503745/5039462</fs:itemid></item><item><title>Twitter Weekly Updates for 2009-09-14</title><link>http://www.lifebackup.cn/twitter-weekly-updates-for-2009-09-14.html</link><content:encoded>&lt;p class='fp'&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503746/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/twitter-weekly-updates-for-2009-09-14.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503746/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503746/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/twitter-weekly-updates-for-2009-09-14.html/feed</wfw:commentRss><description>Copyright &amp;#169; 2008 This feed is for personal, non-commercial use only.  The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digita...&lt;img src=&quot;http://www1.feedsky.com/t1/471503746/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/twitter-weekly-updates-for-2009-09-14.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503746/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503746/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>dailylife</category><pubDate>Mon, 14 Sep 2009 17:00:00 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/twitter-weekly-updates-for-2009-09-14.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/twitter-weekly-updates-for-2009-09-14.html</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/twitter-weekly-updates-for-2009-09-14.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503746/5039462</fs:itemid></item><item><title>Refactoring——Reading Note C1</title><link>http://www.lifebackup.cn/refactoring-reading-note-chapter1.html</link><content:encoded>&lt;p class='fp'&gt;由于Qi组织了一个提高代码质量的学习过程，也强制性向我们提出了每篇两周blog的要求。对于写blog，一直是个比较懒的人，有时候会心血来潮地写上一些，但更多的时候是有些想法在脑子里一闪而过，却并没有及时记录，读书亦如此。正好借这个机会，将我在读重构这本书时的一些感悟记录下来。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P15. 任何一个傻瓜都能写出计算机可以理解的代码。惟有写出人类容易理解的代码，才是优秀的程序员。     &lt;br /&gt;&lt;/em&gt;这可以从两个方面来看，一是代码的格式，没有多余的空格，没有多余的tab，正确的注释等等。对于一个团队来说，制定一定统一的代码默认规范是很有必要的，Eclipse已经支持这一功能，如{是在函数同一行还是另起一行，final string用大写单词和_连接，if和后面的(…)必须接空格等等。虽然你可以用Ctrl+Shift+F来格式化，但这并不是不注意代码规范的借品，在写代码时初始便将这一套规则印在脑海中。在这一点上，我自己便是一个非常偏执的人。    &lt;br /&gt;另一点便是程序的逻辑结构，类结构化的书写方式亦或是故弄玄虚的show设计模式都不足取。作为一个程序员，最重要的是弄清楚究竟我们要的结果是什么，再进一步，面对最有可能的变化，我们所写的代码是否准备好了？思考有可能的变化与过度设计并不是矛盾的，XP提倡先动手做做看，但不是不经思考便挽起胳膊仓促上阵。以前在Deshi实习的时候另一个实习生写的代码经常会比较长，一个regular忍不住说：你这个函数有几米长。。。人不是机器，当他看到这种冗长的代码，首先就不会太高兴，如果没有好的工具支持，看这些代码是很痛苦的事情。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;C-H-A-N-G-E     &lt;br /&gt;&lt;/em&gt;让我们首先将这6个字母在心里完整的默念几遍。如果一个程序写出来之后需求永远不会有变化，那么对于这个程序本身来说，在效率不至于太差的情况，它确实无所谓要求多高的OO结构技巧。但是事实上呢？绝对不是。而实际上大部分软件工程的理论，MDA也好，Design Pattern亦或Refatoring也罢，都直面并试图解决需求变化的问题。对于重构来说，它并不是从设计角度来解决的。按照Kent Beck等人的思想，重构就是重构，它只管更加合理的重新组织代码；而添加新功能就是添加新功能，它只是纯粹的往现在代码中添加新功能的代码。二者不要也不应该混淆。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;基本的重构方法     &lt;br /&gt;&lt;/em&gt;第一章中由一个案例引出了一些重构的基本方法，如extract method，move method，replace temp with query等。    &lt;br /&gt;而在上一个GPS项目中，面对多个GPS厂商的标准支持时，我也不知不觉地用到了replace conditional with polymorpohism的重构方法。什么，你不相信？好吧，我承认是在新需求到来后我添加新功能时的写法。MS同时戴了Kent Beck所言的两顶帽子:D    &lt;br /&gt;更多的重构方法详解及在Eclipse中的支持，在读到第五章后再详细阐述。&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/471503747/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/refactoring-reading-note-chapter1.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503747/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503747/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/refactoring-reading-note-chapter1.html/feed</wfw:commentRss><description>由于Qi组织了一个提高代码质量的学习过程，也强制性向我们提出了每篇两周blog的要求。对于写blog，一直是个比较懒的人，有时候会心血来潮地写上一些，但更多的时候是有些想法在脑子里一...&lt;img src=&quot;http://www1.feedsky.com/t1/471503747/lifebackup/feedsky/s.gif?r=http://www.lifebackup.cn/refactoring-reading-note-chapter1.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503747/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503747/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Refactoring</category><pubDate>Mon, 08 Jun 2009 21:27:45 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/refactoring-reading-note-chapter1.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/refactoringreading-note-c1.html</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/refactoring-reading-note-chapter1.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503747/5039462</fs:itemid></item><item><title>Flex初体验</title><link>http://www.lifebackup.cn/hello-flex.html</link><content:encoded>&lt;p class='fp'&gt;严格的说来，这并不是Flex的初体验了。最早听到Flex这个名词是从Cowoo口中，那还是四年前的事了，之后也看过一些&lt;a href=&quot;http://www.douban.com/subject/2284655/&quot;&gt;电子书&lt;/a&gt;。不过，总是徘徊在入门者周围。而最近有一个月的时间在实际项目用到，虽说只是个demo，但还是很不错的。&lt;/p&gt;
&lt;p&gt;项目的需求是将DB2的xml特性运用在BI分析上，由于xml的动态性，相应的也就能动态地展示维度信息。而从技术上来说，一分为二，前台的Flex与后台的Service实现方式。这里就只谈Flex了，项目中涉及到的有以下几个：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;前后台通信&lt;/strong&gt;     &lt;br /&gt;Flex提供了几种方式，无论是HttpService，WebService，还是RemoteObject，交互方式只是在协议的不同。说到底无非也就是二进制流的来回传送，究竟是怎样交互，甚至你自己也可以定义一套。     &lt;br /&gt;这种将前后台严格区分开的通信方式较为灵活，比如你可以把前后台程序部署下两台不同的机器，同样的缺点在于你必须严格定义好通信协议，否则你不能保证传给后台的参数的有效性，也就不能保证后台返回的数据的正确性。还有一点，返回的数据的处理与显示应当按MVC适度分层。     &lt;br /&gt;现在越来越多的系统不用采用单一语言从前台写到后台的方式，各是各种语言各负其责，如Flex，JS等更适合做些browser端的操作，而后台的业务逻辑可以采用强类型的语言如Java，C#，然后二者之前通过某种协议串联起来，如restful webservice在Ruby就有良好的API支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;XML处理与显示&lt;/strong&gt;     &lt;br /&gt;ActionScript的XML API让我非常非常震惊，它是如此的顺手，以至于得到XML中任意条件的数据几乎只需一条语句就能搞定。只有想不到，没有做不到，其便捷性远远超过了Java语言中处理XML那种一板一眼的方式。而Flex的组件也与XML无缝地集成，比如Explorer Tree， Column Chart以及OLAPDataGrid。 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;事件处理机制      &lt;br /&gt;&lt;/strong&gt;从AS的整体处理上来说，统一采用了事件监听机制，与Java Swing非常相似，只不是Flex中响应事件的是函数，而在Java中是一个对象（一般习惯写成匿名对象）。Flex中一般的可视化对象都已经有内制的事件处理机制，例如&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;lt;mx:Button id=&amp;quot;searchButton&amp;quot; label=&amp;quot;Search&amp;quot; click=&amp;quot;search();&amp;quot;/&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而对于非可视化对象，一般的做法是继承flash.events.Event创建自己的Event类并创建与事件相关的属性，在这个事件触发时dispatchEvent()。而这个Event由谁来处理，它并不关心。注册了监听事件的组件则会收到相关通知，进而处理相关逻辑。其实对于可视化对象这套方法同样适用，甚至你都可以在mxml里面的click里面直接写某些简单的代码。而究竟是再抽象一层，还是相对暴露地写在mxml里，那就看你自己的考量咯。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;优点及缺点&lt;/strong&gt;    &lt;br /&gt;# 由于AS的动态性，Flex Builder有些地方是无法进行语法提示或者自动补齐的。比如没有自动导入所需包等。     &lt;br /&gt;# 没有一个简单的AS语法测试环境，最简单的Hello World也要基于MXML程序或者FLA程序来显示之后才能测试。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reference &lt;/strong&gt;    &lt;br /&gt;# Flex 3 Cookbook     &lt;br /&gt;# Programming Actionscript 3     &lt;br /&gt;# &lt;a title=&quot;http://examples.adobe.com/flex3/componentexplorer/explorer.html&quot; href=&quot;http://examples.adobe.com/flex3/componentexplorer/explorer.html&quot;&gt;http://examples.adobe.com/flex3/componentexplorer/explorer.html&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tips     &lt;br /&gt;&lt;/strong&gt;在项目过程中，会有一些Flex及AS中的tip，准备放在另一篇blog中记录之。&lt;a title=&quot;http://w3.ibm.com/ibmclub/ibmclub.nsf/v.ActiveInfoDocs/FC5F87E68EE4AFE1852575A5003C582D?OpenDocument&amp;amp;Login&amp;#13;&amp;#10;&quot; href=&quot;http://w3.ibm.com/ibmclub/ibmclub.nsf/v.ActiveInfoDocs/FC5F87E68EE4AFE1852575A5003C582D?OpenDocument&amp;amp;Login&quot;&gt;     &lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503748/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503748/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/hello-flex.html/feed</wfw:commentRss><description>严格的说来，这并不是Flex的初体验了。最早听到Flex这个名词是从Cowoo口中，那还是四年前的事了，之后也看过一些电子书。不过，总是徘徊在入门者周围。而最近有一个月的时间在实际项目用...&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503748/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503748/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>flex</category><pubDate>Tue, 05 May 2009 13:57:57 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/hello-flex.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/flex%e5%88%9d%e4%bd%93%e9%aa%8c.html</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/hello-flex.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503748/5039462</fs:itemid></item><item><title>浅析java字符编码（在socket游走之间——续）</title><link>http://www.lifebackup.cn/between-socket-java-charset-encoding-cont.html</link><content:encoded>&lt;p class='fp'&gt;今天无意登到WP后台逛了逛，一巨干尸赫然在目。。。扫了一眼，貌似重见天日沿能存活，赶紧发出这篇两个月前写的draft。&lt;/p&gt;
&lt;p&gt;============================不愿烂在草稿堆里的分割线=================================&lt;/p&gt;
&lt;p&gt;书接上回，补上上次没写完的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;他山之石，可以攻玉&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通过自己动手写的client和socket能细致地了解一些细节，但这个山寨版的产品还远远不能放到项目的生产环境上去。而成熟的开源API能为我们省去重复制造轮子的时间。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;HttpClient&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这个出自Apache的API包很好地封装了一个Http Client的全部细节。比如Header的拼装，发送正文的数据，接收回来报文的解析。有些动作是隐式的，看一些源代码会更清楚些，比如如果设置了Content-Type，它会用这个来编码正文流；并进而设置Content-Length的字节数。&lt;/p&gt;
&lt;p&gt;1. 尽量不要用deprecated的方法。比如setRequestBody(String s)，然后你send一个UTF-8的流，那么HttpClient做的动作就是给Content-Length的值设置为s.lengh()，这显然是不对的。length。既然length都没设置正确，要是还能在server端得到正确流就是奇闻了。正确的做法是使用**RequestEntity，例如这样：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;RequestEntity entity = new ByteArrayRequestEntity(s.getBytes(&amp;quot;UTF-8&amp;quot;));      &lt;br /&gt;postMethod.setRequestEntity(entity);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;类似不被推荐的方法还有一样，这些大多是基于ASCII设计的，而现在的做法更好考虑了I18N编码的需求。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;Servlet&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;用Servlet来当做你的Server当然是很方便的了，就它来当做客户端access的service。doGet()和doPost()方法接收客户端，然后Servlet规范提供了足够傻瓜的方法供你调用，比如servlet.getInpuStream()。这个方法和jdk socket API提供的socket.getInputStream()相比，区别在&lt;a href=&quot;http://www.lifebackup.cn/between-socket-java-charset-encoding.html&quot;&gt;上篇文章&lt;/a&gt;中已经从实践结果上看到了。如果要问为什么会这样，就只能看看各web/app server对Servlet规范的实现源码了，比如Tomcat中的&lt;font color=&quot;#0000ff&quot;&gt;CoyoteInputStream&lt;/font&gt;。作为Servlet规范中request.getInputStream()方法的具体实现，CoyoteInputStream里的read()及相关方法都可以看看。&lt;/p&gt;
&lt;p&gt;PS: 本想把Tomcat的这段代码实现贴些上来，可是看了一晚上仅仅是有些眉目，离清晰地剖析实现还是有段距离，所以也没能完全佐证那些结果。今晚的最大收获就是把tomcat在eclipse编译了一遍，然后打下断点，单步跟踪，还是能发现一些tomcat的原理，诸如启动流程，收到请求的处理周期等等。这些经验总结还是等有精力了再来做吧。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;雕虫小技&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;Https&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;如果server端要求SSL的连接方式，在client端需要首先得到server端的证书，然后用jre的一个工具导入，然后在运行时将这个值设为临时的某个system property。这方面的文章google就有一大把，就不在此赘述了。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;Concurrency&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;作为server端，要么用Servlet来做，它本身是多线程的。要么自己写一个standalone的java application来做server端，也不费事，这部分就不说了。&lt;/p&gt;
&lt;p&gt;而作为client端，可以尝试一下jdk 1.5引入的Doug Lea的concurrent包。我在项目中是这样实现的，send处理逻辑部分：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;public void run() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; while (!stopFlag) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // judge condition      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (…..) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /* access to the pool */      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color=&quot;#0000ff&quot;&gt;semaphore&lt;/font&gt;.acquire();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color=&quot;#800080&quot;&gt;Runnable run = new Runnable() {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void run() {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // sending reqeust logic ……&lt;/font&gt;&lt;font color=&quot;#800080&quot;&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };        &lt;br /&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color=&quot;#ff0000&quot;&gt;pool&lt;/font&gt;.execute(&lt;font color=&quot;#800080&quot;&gt;run&lt;/font&gt;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Thread.sleep(5000);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (InterruptedException e) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; getLogger().warn(&amp;quot;Thread is interrupted.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (Exception e) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; getLogger().fatal(&amp;quot;***&amp;quot;, e);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.stopFlag = true;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color=&quot;#ff0000&quot;&gt;pool&lt;/font&gt;.shutdown();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; getLogger().info(&amp;quot;*** is terminated.&amp;quot;);      &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font style=&quot;background-color: #f9f9f9&quot;&gt;而semaphore和pool在这个类的构造方法里初始化：&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;public class *** implements Runnable {&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#8230;&amp;#8230;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private int poolSize;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private final Semaphore semaphore;&amp;#160;&amp;#160;&amp;#160; /* initial a thread pool */      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private ExecutorService pool;&amp;#160;&amp;#160;&amp;#160; /* set the limit to access the pool */      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public ***() {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; super();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#8230;&amp;#8230;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; poolSize = Integer.parseInt(propService.getProperty(      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;***_pool_size&amp;quot;, &amp;quot;4&amp;quot;));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color=&quot;#ff0000&quot;&gt;pool&lt;/font&gt; = Executors.newFixedThreadPool(poolSize);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color=&quot;#0000ff&quot;&gt;semaphore&lt;/font&gt; = new Semaphore(poolSize);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#8230;&amp;#8230;      &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt; &lt;font style=&quot;background-color: #f9f9f9&quot;&gt;&lt;/font&gt;
&lt;p&gt;Concurrent包还有很多实用的功能与技巧，遇到再与大家分享:D&lt;/p&gt;
&lt;hr /&gt;&lt;small&gt;Copyright &amp;copy; 2008&lt;br /&gt; This feed is for personal, non-commercial use only. &lt;br /&gt; The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:&lt;br /&gt; )&lt;/small&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503749/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503749/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.lifebackup.cn/between-socket-java-charset-encoding-cont.html/feed</wfw:commentRss><description>今天无意登到WP后台逛了逛，一巨干尸赫然在目。。。扫了一眼，貌似重见天日沿能存活，赶紧发出这篇两个月前写的draft。
============================不愿烂在草稿堆里的分割线==========================...&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/lifebackup/471503749/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/lifebackup/471503749/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>java</category><pubDate>Fri, 17 Apr 2009 21:34:25 +0800</pubDate><author>superpippo</author><comments>http://www.lifebackup.cn/between-socket-java-charset-encoding-cont.html#comments</comments><guid isPermaLink="false">http://www.lifebackup.cn/?p=132</guid><dc:creator>superpippo</dc:creator><fs:srclink>http://www.lifebackup.cn/between-socket-java-charset-encoding-cont.html</fs:srclink><fs:srcfeed>http://www.lifebackup.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/lifebackup/~6931544/471503749/5039462</fs:itemid></item></channel></rss>
