<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-28242285</id><updated>2012-02-09T23:12:48.604+08:00</updated><category term='重构'/><category term='绘画'/><category term='烹饪'/><category term='项目'/><category term='统计'/><category term='Hack'/><category term='软件工程'/><category term='English'/><category term='C'/><category term='照片'/><category term='编程'/><category term='Latex'/><category term='日记'/><category term='系统'/><category term='PHP'/><category term='Regex'/><category term='读书'/><category term='咨询'/><category term='GTD'/><category term='电影'/><category term='经济'/><category term='学习'/><category term='blogger'/><category term='SAS'/><category term='思考'/><category term='书法'/><category term='python'/><category term='CMS'/><category term='数据挖掘'/><category term='设计模式'/><category term='管理'/><category term='游戏'/><category term='google'/><category term='Excel'/><title type='text'>Sunix's blog</title><subtitle type='html'>To be simple.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default?start-index=101&amp;max-results=100'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>125</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-28242285.post-3049087396084390496</id><published>2009-07-05T16:24:00.001+08:00</published><updated>2009-07-05T16:24:32.686+08:00</updated><title type='text'>快乐SAS</title><content type='html'>3月30开始了在ebay的实习，之后一直纠缠在考试论文和实习中，博客也从此凉在了一边。据说四个月能养成一个好习惯，以后每周两篇日志将成为我的日常任务。&lt;br&gt;&lt;br&gt;这两周考试基本搞定，一下子轻松了好多。除了学校施工的噪音和常有的一点点困惑，木得连烦心事都没有。开开心心得写程序学统计。地铁里见人玩俄罗斯方块，想想现在这生活也是差不多。不断有各种各样的task下来等着你处理，学习、生活、工作、爱情、未来。要顺顺利利地把它们搁到合适的地方。只要心不乱，并没有什么难的。&lt;br&gt;&lt;br&gt;周末还是在图书馆过，暑期依然坐满了人。明天又是周一，继续学习、工作，平静而踏实的生活。还是会把大部分时间放在SAS上，技术上争取有个好的基础吧～读研已经一年，有那么点紧迫感。ebay给我最大的福利就是身边那些pro，热爱生活，乐于助人的同事。感谢他们并向他们学习。&lt;br&gt;&lt;br&gt;下面这篇文章蛮经典，被引用了好多次，大致可以看出哪些是SAS的基本功。其中我学的不好的地方也就是这个假期的努力方向。但SAS毕竟是个分析软件，统计思维远比技术重要。下面的文章只是focus on SAS base, but if you can't know well about the tools, you can't do analysis well.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;font size="2"&gt;&lt;b&gt;10 Things Experienced SAS® Programmers Don’t Know – But Should&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Doug Zirbel, Pinnacle Solutions Inc., Indianapolis, IN&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;1. Macros&lt;/b&gt; - &lt;b&gt;basic knowledge of macro language&lt;/b&gt; (Score=63/180)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Learning help:&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;“SAS manuals 'SAS Macro Language' and 'SAS Guide to Macro Processing' are the best. You will gain a lot with&lt;br&gt;&lt;br /&gt;&lt;br /&gt;playing examples in both books.”;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; “'The Little SAS Book, A Primer', 2nd edition.”&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;"Carpenter's Complete Guide to the SAS Macro Language”&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Data step - basic knowledge of&lt;/b&gt; (60)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;The Secret Life of the Data Step, by Thomas Miron (SUGI21-26)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Data file manipulation - INFILE, UPDATE, SET&lt;/b&gt; intricacies etc&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. ODS&lt;/b&gt; - capabilities and more broadly, SAS8 improvements (53)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Efficiency &lt;/b&gt;(49)&lt;br&gt;&lt;br /&gt;&amp;nbsp;PDV width may be more significant than number of rows&amp;nbsp; Sorting by&lt;br /&gt;character variables is more efficient than sorting by numeric variables&lt;br&gt;&lt;br /&gt;&lt;br /&gt;In terms of programming time, you’ll save a lot by getting rid of the warning messages up front&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. Data Step Vector &lt;/b&gt;- how it works (47)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;The Secret Life of the Data Step, by Thomas Miron(SUGI21-26)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7. Macros &lt;/b&gt;- knowing how to write macros that write SAS programs (46)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;8. System Development Life Cycle processe&lt;/b&gt;s (44)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Code Complete by Steve McConnell&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;9. SAS Help&lt;/b&gt; - How to get it (40)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;SAS Tech Support http://www.sas.com/service/index.html&lt;br&gt;&lt;br /&gt;&lt;br /&gt;SAS Tech Support (919) 877-8008 (be sure to have your site number)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;WWW newsgroup comp.soft-sys.sas&lt;br&gt;&lt;br /&gt;&lt;br /&gt;http://groups.google.com using Advanced Group Search&lt;br&gt;&lt;br /&gt;&lt;br /&gt;with comp.soft-sys.sas as the Group (contains archives of&lt;br&gt;&lt;br /&gt;&lt;br /&gt;the newsgroup discussions)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;SAS8 Help CD&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;10. Proc Report&lt;/b&gt; (34)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;11. SQL Dictionary tables&lt;/b&gt; - basics of retrieving SAS metadata(31)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Data About Data: An Introduction To Dictionary Tables by Dilorio and Michal, SUGI21-32&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;12. Proc Summary/Means&lt;/b&gt; (28)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;13. Debugging Techniques&lt;/b&gt; - DEBUG facility and other techniques(27)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;14. Proc SQL&lt;/b&gt; (27)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;15. Structured programming concepts &lt;/b&gt;(24)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;16. Proc Format &lt;/b&gt;(18)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;17. Relational Database Design (18)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;18. Web technology - HTML, JavaScript, SAS IntrNet, etc (17)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;19. Your Operating System native (and other) languages - REXX, unix scripts, VBScript, Syncsort (17)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;20.&lt;b&gt; Proc Transpose &lt;/b&gt;(16)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;21. &lt;b&gt;Data step reports&lt;/b&gt; - "Data _null_" report writing (14)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;22. &lt;b&gt;SCL &lt;/b&gt;- SCL Functions usable in e.g., Base SAS data steps(14)&lt;br&gt;&lt;br /&gt;&lt;br /&gt;SCL for the Rest of Us: Nonvisual Uses of Screen Control Language by Michael L. Davis&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3049087396084390496?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3049087396084390496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3049087396084390496' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3049087396084390496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3049087396084390496'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/07/sas.html' title='快乐SAS'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8855036262229170483</id><published>2009-02-22T22:40:00.004+08:00</published><updated>2009-02-27T21:58:02.026+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>简单</title><content type='html'>本想在图书馆看一天书，结果上午看了本《缓解压力》；中午又回宿舍睡了会觉，上网订了泳帽泳镜和羽毛球拍；下午看了前车约翰的《简单法则》；晚上翻了5期的《三联生活周刊》。一天下来，真正看教科书的时间加加起来才三个多钟。&lt;br /&gt;&lt;br /&gt;《缓解压力60法》：多吃不同颜色的水果，有规律锻炼，游泳，多吃富含维生素B的食品，及时补充镁和铁。&lt;br /&gt;&lt;br /&gt;《简单法则》：1.减少 reduce 2. 组织 organize 3. 时间 time 4. 学习 learn 5. 差异 difference 6. 背景 context 7. 感情 emotion 8. 信任 trust 9. 失败 failure 10. 单一 the one。&lt;br /&gt;&lt;br /&gt;KFC原则-- K：Know what you what. F: Find out how to get it. C: Change the way until you get what you want.&lt;br /&gt;&lt;br /&gt;简单--&gt;复杂--&gt;极简（朦胧）&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8855036262229170483?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8855036262229170483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8855036262229170483' title='86 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8855036262229170483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8855036262229170483'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/02/blog-post_22.html' title='简单'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>86</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-916186858452249681</id><published>2009-02-08T23:30:00.010+08:00</published><updated>2009-02-22T22:40:26.929+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>山寨了张证件照</title><content type='html'>&lt;div&gt;显得比较无聊，山寨了张证件照。长得一般，精挑细选才找出了看着还算将就的。整整捣鼓了两个钟。发现比较自然的姿势是身体偏右15度，目视前方。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;下午看“感动中国”，也的确很让人感动。在感动的同时，也有很多感慨，有些感动的事还是不要发生的好。一个个平凡又不简单的人，有些靠的是瞬间的风采，然而更多的是靠时间铸就了丰碑。看着他们的经历，我感到自己很幸运，也很渺小。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;“工作是人的天职”，人需要一个终极的目标，这也许真要在宗教中才能寻找得到。如果做每件事都能怀着宗教的虔诚，把工作真正当成了为上帝创造荣耀的过程，相信心灵能少些浮躁，多些归属。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-916186858452249681?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/916186858452249681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=916186858452249681' title='241 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/916186858452249681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/916186858452249681'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/02/blog-post.html' title='山寨了张证件照'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>241</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5544865570712475149</id><published>2009-02-05T13:51:00.006+08:00</published><updated>2009-02-08T23:29:33.951+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><title type='text'>OK，原型搞定～</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_afohQU5wMHo/SY76ValUQAI/AAAAAAAAD-M/-lewaW6JXaU/s1600-h/Snap1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://2.bp.blogspot.com/_afohQU5wMHo/SY76ValUQAI/AAAAAAAAD-M/-lewaW6JXaU/s320/Snap1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5300449057281687554" /&gt;&lt;/a&gt;&lt;div&gt;从上月19号开工到现在，除去休息、跑亲戚、聚会的时间，其他时间都花在搞这个网站上。现在原型基本出来了，有些细节开学前每天花一定时间处理下应该就可以了。发现我依然是个优秀的美工，可写程序上除了精力充沛外基本没啥天分。犯了很多苦笑不得的错误。开发的一半时间在找自己整出的Bug，其他时间在不断地试着不同的解决方案。从Java整到了PHP；确定用PHP了吧，又换了两次IDE，从Eclipse到PhpED再到Netbeans。到开发临近完成，又开始了和图标、CSS之类的搏命。。。折腾。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Wordpress真是赞，如果不考虑性能方面的因素，基本可以满足一般网站的所有要求。丰富而清晰的权限设置；灵活的模板机制；丰富的插件主题资源；广大的用户群。。。这些都是其他的一些架构所难以比拟的。这次我的开发不过是对后台进行了一定剪裁，添加了一些功能；对模板进行了一定的修改；运用插件增添了一些功能。不过也有麻烦的地方，AJAX看着有点难懂；有些代码缺少注释；代码风格不大统一；有些设计过于优雅难以理解。。等等。也许是我PHP值太低的原因吧～&lt;/div&gt;&lt;br /&gt;&lt;div&gt;插件方面使用了GD Star Rating, Role-manager, WP-Pagenavi, WP-postviews, Search Everything；添了些花哨的功能，也省了不少的事情。模板是在Simple-X的基础上修改的，不过和重写基本没啥差别了。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5544865570712475149?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5544865570712475149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5544865570712475149' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5544865570712475149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5544865570712475149'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/02/ok.html' title='OK，原型搞定～'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_afohQU5wMHo/SY76ValUQAI/AAAAAAAAD-M/-lewaW6JXaU/s72-c/Snap1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2576991751822677469</id><published>2009-01-30T13:03:00.003+08:00</published><updated>2009-01-30T13:26:23.247+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>初五</title><content type='html'>半个假期过去了，转眼已是初五。从乐观到悲观，渐而急躁，金融学院工作论文网站这个项目进行得并不顺利，WordPress用到了一些对我而言比较新的东西。大部分的时间不是用在coding上，而是在学着杂七杂八的东西；PHP、AJAX、jQuery，一本本地翻着手册。有时国内时候，思路老是被杂七杂八的事儿打断，写了备忘录还是忘个精光，有点少年痴呆症的嫌疑。过年打打升级、看着牌都头疼，比较失败。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;也许我又接了个不该接的项目，计划又被打乱。不过既然接了下来，也就没后路了；虽没有什么制约，可不搞定不光丢了我的面子，也丢了朋友的面子，只能多喝点咖啡少睡点觉了。十六号开始上课，计划过完正月十五回校，还有十天，只有十天。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2576991751822677469?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2576991751822677469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2576991751822677469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2576991751822677469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2576991751822677469'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/blog-post_30.html' title='初五'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8692020345940428058</id><published>2009-01-24T10:46:00.003+08:00</published><updated>2009-01-24T11:04:43.498+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>生日</title><content type='html'>&lt;div&gt;今天是小年夜，也是我的生日。转眼已过去了24年，时间越过越快。试着看下电影，可没啥心情，看着长长的TodoList，呵呵，还是一件件事做吧。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;昨天上午高中同学聚会，中午庆祝爷爷的生日，下午陪妹妹看了一下午日剧，晚上一直在读WordPress的文档。现在每天都又Google的Calendar记录自己做了什么，几点起床，看了什么电影，见了什么人，读了什么书。也许真是年龄大了，想在贫乏的生活中记录些什么吧。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;WordPress的文档其实写的不错，就是组织得有点让我不习惯，同一篇文章会在多个系列或者多个分类中出现；不过&lt;a href="http://codex.wordpress.org/Developer_Documentation"&gt;Developer_Document&lt;/a&gt;组织得不错；还发现一个叫&lt;a href="http://phpxref.com/"&gt;phpxref&lt;/a&gt;的网站，对几个流行的php源码提供了交叉索引，弥补了一些IDE的不足。PhpED也提供了不错的代码导航功能，可和一般IDE对Java的支持相比，还是有一些不便。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Chrome的profile功能很赞，等于提供了多个浏览器环境，可以在同一个站点可以用不同的帐号登录；可以在不同的profile中打开不同的一系列默认页面。这个功能不论是在日常使用还是在网页调试的时候都是很有用的。比如可以用一个profile用于默认网页浏览；另一个用于使用Google的产品；再加一个用于网页的开发测试。靠一些灵巧的小功能提供出色的用户体验，这也就是Google吧。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8692020345940428058?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8692020345940428058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8692020345940428058' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8692020345940428058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8692020345940428058'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/blog-post_24.html' title='生日'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1637764596000860867</id><published>2009-01-22T21:11:00.003+08:00</published><updated>2009-01-22T21:12:39.275+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Php开发环境</title><content type='html'>最近要写PHP，先是试了Dreamweaver，毕竟只是个网页设计软件，对编程的支持实在是比较有限。接着又试了PHPEclipse，不大稳定，而且搜索功能比较弱，不能和Eclipse下的JDT相比，这样读代码会很不方便。接着下了PhpED，满意，特别是看文档很方便，而且集成了很多方便的工具，而且还带有PHP的调试器。&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-php-ide/index.html" id="vtpd" title="Seven great PHP IDEs compared"&gt;Seven great PHP IDEs compared&lt;/a&gt; dw上的一篇文章对七个著名的PHP IDE进行了比较。&lt;div&gt; PhpED自带了叫SVR的WEB服务器，如果要使用Apache作为服务器，需要将默认运行模式设成HTTP mod，然后在项目属性中设置好网络地址和server端的目录即可。软件自带的帮助文档中有详细的介绍。测试服务器的架设使用了xampp，集成了Apache, mysql, PHP, FileZilla FTP和Mercury Mail，解压就行，不用安装配置。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;这两天磕着瓜子看PHP手册，比较无趣。小牛和Frienky大二那会就在写PHP了吧，我那会PHP看是看了些，只是没自己写过，后来就Java了。现在呢？我也不知道我在干啥～～管他呢，写代码。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1637764596000860867?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1637764596000860867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1637764596000860867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1637764596000860867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1637764596000860867'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/php.html' title='Php开发环境'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7920620674500215322</id><published>2009-01-19T22:08:00.003+08:00</published><updated>2009-01-19T22:11:20.383+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><title type='text'>开源CMS的选择</title><content type='html'>&lt;div&gt;最近可能要做一个文件的上传及发布系统，现在处于初步的分析阶段，我也不清楚到底在哪个平台上进行开发，但要肯定是不可能重新写。一来没有多少时间，最后开发可能只有半个多月的时间；二来没有技术上的特别要求，这么着我自然会选一个最方便的开发方法。网页的需求简单地说就是论文的提交、审核、网页及邮件发布，如果采用过于复杂的方案，有杀鸡用牛刀的嫌疑。&lt;/div&gt;&lt;div&gt;首先的设想是在一个CMS或者DMS系统的基础上进行修改。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;首先要确定一个开发的基础，第一个想到的是看下有没有Java平台的软件。Java平台下比较著名的开源CMS系统有openCMS、InfoGlue和Magnolia，（详见&lt;a id="x7uz" href="http://java-source.net/open-source/content-managment-systems" title="java-source"&gt;java-source&lt;/a&gt;的论述）都是40余M的大小，有些文档都要收费，在短时间内了解其操作并在其基础上建站有些不大可能。其中openCMS有中文网站&lt;a href="http://www.opencms.cn/"&gt;http://www.opencms.cn/&lt;/a&gt;，从中了解到国内还是有一些团队以openCMS为基础开发商用软件的，有人说openCMS一般适用于日访问量达150,000页面的网站，想必其它两个体积相似的东东也差不多，我因此放弃了这方面的寻找。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;接着我看到了plone的介绍，一个基于zope的用python写的CMS系统，&lt;a href="http://plone.org/"&gt;http://plone.org/&lt;/a&gt;是其官方网站，安装包里包含了python、zope，像应用程序一样安装。网站上还有几段很有意思的视频可以看看。试用下来认为这绝对是个出色的CMS系统，简洁而强大。但仍然不符合我的需求。在网站上还看到了一句话"Java is the COBOL in 21st "。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;想到了PHP，在下面的网站上有php主流cms系统测评&lt;a href="http://www.php-cms.cn/" title="http://www.php-cms.cn"&gt;http://www.php-cms.cn&lt;/a&gt;。然后听人说WordPress是个不错的选择。想想这也许是个最简洁的方案了，WordPress众多的插件和方便的扩展机制也许真大大减少我的工作量。Nice！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;这么一个个试用下来折腾了我大半天的时间，舍近求远的后果。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7920620674500215322?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7920620674500215322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7920620674500215322' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7920620674500215322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7920620674500215322'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/cms.html' title='开源CMS的选择'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8832963664338475686</id><published>2009-01-19T11:58:00.006+08:00</published><updated>2009-01-19T14:58:15.900+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Excel概述</title><content type='html'>今天玩了一下午的Excel，学统计的好歹要对Office多些了解吧。&lt;div&gt;发现了一些Excel的学习资源，一是Excelhome.net，上面有一些案例，也有很多总结得很好的技巧。我选了本最简单的Excel入门对着实例看完；接着看了些《Excel函数应用500例》的配套的例子。下面的笔记也是整理自Excelhome的文章。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Excel的优势之处：&lt;/b&gt;&lt;br /&gt;&lt;div&gt;（1）数据透视功能（2）统计分析，包含在数据透视功能之中。（3）图表功能（4）高级筛选（5）自动汇总功能（6）高级数学计算。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Excel在易用性方面的优势是其他软件难以比拟的，Office在用户友好性方面不可否认地做到了最好；虽然人们也有着这样那样的理由选择其他的方案。“总的来说Excel适合于开发单机版、访问量与开发维护量都不是很大、对数据有分析建模功能的应用程序。”&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  &lt;span style="font-family:arial;"&gt;&lt;b&gt;Excel应用程序的功能区分:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;财务分析&lt;/b&gt;，这类应用程序通常分析用户所输入的数据，然后可以生成相应的预测模型，提供给决策部门作为参考。&lt;br /&gt;&lt;b&gt;报表类应用程序&lt;/b&gt;，这类应用程序充分利用了Excel的分析汇总功能和图表功能，程序的主要目的是生成周期报表。&lt;br /&gt;&lt;b&gt;工具类应用程序&lt;/b&gt;，这类应用程序通常用于提高用户的工作效率，例如提供数据转换与导入导出服务。&lt;br /&gt;&lt;div&gt;财务分析在课程学习中有过使用，是Excel最基础的功能；报表类我在实习的时候也都所接触，一些系统会定期地从数据库中筛选数据生成Excel格式的报表并进行发布。至于Excel做为工具我就觉得有点偏门的，也许只是没有接触过的缘故吧。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" font-weight: bold; font-family:arial;"&gt;Excel的几种应用程序结构:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;b&gt;1、无代码应用程序&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;span style="font-family:arial;"&gt;就是普通的.xls文件，由Excel提供数据验证、单元格的格式化、数据计算、数据输出等功能。首先你对很多对象都没有绝对的控制，而且数据验证、工作表函数都集成在工作表中，这部分的代码的管理就变得非常困难。对于今后的更新而言，替换工作表同时也会不可避免地丢失数据，而且这种应用程序结构不符合代码与数据分离的原则。这样的应用程序只适用于比较简单的需求。&lt;br /&gt;&lt;div&gt;&lt;i&gt;无代码应用程序适用于下列情况：&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;a. 该应用程序的生命周期很短，只在单机进行部署，而且不需要升级。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;b. 最终用户在维护该代码的时候不需要了解VBA。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;c. 最终用户的数量不能太多。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;  &lt;b&gt;2、自动化工作表 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:Verdana;"&gt;运行自动化过程的代码储存在工作簿内。这也是占比例最多的Excel应用程序。相对于第一种应用程序结构，现在可以最大限度地发挥VBA代码的威力：可以将代码和数据进行分离，可以捕获Workbook和Worksheet事件，实现需要的功能，不一而足。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;i&gt;自动化工作表示用于下面几情况： &lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;工作簿内包含针对此工作簿的特殊函数，&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;工作簿程序更新时数据不需要被保留&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;b&gt;3、加载宏&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;加载宏是一种特殊的应用程序，通常用来给Excel增加功能。这里面要特别指出的是，通过加载宏给Excel增加功能特指与应用程序无关的一般目的功能。可以为Excel增加一个在加载宏中的工作簿，对用户而言它是不可见的，但是用户可以通过"宏"对话框来访问这些加载宏。&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;这些工作簿尽管对于用户不可见，而且其中包含的宏也无法在“宏”中可见，但是它们都可以通过VBA代码进行访问。&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;因为加载宏中的工作表对用户始终不可见，所以需要使用用户表单来和用户进行交互。通过使用用户表单，我们首先获得了更高级的用户界面控制，其次可以更好地实现用户数据验证以及实现更高级的错误处理。这样就可以进一步增强应用程序的可靠性和数据完整性。使用加载宏结构，可以通过使用注册表或者是ini文件来记录用户的设置，而不需要像以前一样记录在工作表中。实现这种分离的重要作用就在于现在可以将配置、数据与程序代码分离，当在更新任何一方的时候都不会影响到其他部分。&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;加载宏是通过xla文件实现的，当在更新加载宏的时候，只需更改xla文件，然后进行覆盖操作就可以了，通过这种方式可以确保在更新程序时用户数据不会丢失。&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;b&gt;4、企业信息系统 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=" border-collapse:collapse;font-family:Arial;"&gt;在使用基于Excel的企业信息系统时，用户甚至不知道他正在使用Excel编写应用程序，因为企业信息系统完全替代了Excel的用户界面，取而代之设计者设计的界面。这和用Visual Basic等高级编程语言设计出的应用程序没有什么不同。&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Arial;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;span style="border-collapse:collapse; font-family:Arial;"&gt;尽管我们可以看到Excel会很多东西，但是也应该看到用Excel实习这些功能的成本，越是高级的功能开发的成本越高，相应地对培训的要求也会大大地提高。而相反，Excel的缺陷却是难以弥补的，就是对大量数据的管理、分析和处理。所以我想，以后大家对Excel的高级功能使用的会越来越少，毕竟企业会希望自己的知识能在企业内部进行统一管理，整合全企业的信息进行分析处理，而不希望把这些知识或业务逻辑分散在一张张的Excel表格中。当然，这也只是对大型的，有专职信息管理人员的企业来说；对大多数的企业而言，Excel还是一个低成本的、方便的、段时间内难以被代替的解决方案。&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8832963664338475686?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8832963664338475686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8832963664338475686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8832963664338475686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8832963664338475686'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/excel.html' title='Excel概述'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6876553218136606127</id><published>2009-01-17T16:01:00.005+08:00</published><updated>2009-01-17T16:07:23.013+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>假期开始</title><content type='html'>昨天这会还在考试，24小时内，我去了无锡的舅舅家，丁山的外公外婆家，现在就窝到了自己房间里，灌咖啡，开始看书。订了些技术牛人的博客，感慨自己的卑微，再这些下去读完了研就真正印证了“不伦不类”这四个字。这假期的主题有三个：数据处理、编程和英语。我也不知道能看完多少书，不过不努力的话肯定玩完。OK，开始。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6876553218136606127?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6876553218136606127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6876553218136606127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6876553218136606127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6876553218136606127'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/blog-post_17.html' title='假期开始'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7293346879416726021</id><published>2009-01-06T22:16:00.002+08:00</published><updated>2009-01-06T22:17:12.747+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='咨询'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>读《破解咨询的40个困惑》</title><content type='html'>正好赶在马哲考试前，复习这门课显然是浪费时间；可开始看投资又有点不靠谱，毕竟马哲还没考完，不用紧张兮兮。于是看了Alan Weiss的《破解咨询的40个困境》一书。我觉得书写得蛮好，可意外的是几乎没有什么名气，也许是因为作者只是个自由职业者，没有有名气的公司做后台；也许又是因为出版社推广不力的缘故吧～从这本书里我了解了关于咨询的很多东西，从工作生活到待人处事都一些，而且都说得很实在。咨询也是做项目，软件开发也是类似，结合起来看更有心得。由于找不到其他的现成笔记，下面的笔记都是我自己整理的。当然，目录是copy的。&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:100%;" &gt;&lt;br /&gt;第一篇 应对营销挑战&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第1章 缺乏行业经验&lt;/b&gt;&lt;br /&gt;做一个流程顾问而非内容咨询顾问&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第2章 细分市场过小&lt;br /&gt;&lt;/b&gt;自身or外部环境？&lt;br /&gt;通往死胡同的标志：相同的客户，老一套的方法，在狭窄的领域越走越窄。&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;生活中似乎也是如此？&lt;br /&gt;&lt;/span&gt;保持现有市场，积极开拓：密切相关的领域，关联性领域，可转换的技能&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;技术学习?&lt;/span&gt;&lt;br /&gt;商业敏锐性&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第3章 资源匮乏&lt;/b&gt;&lt;br /&gt;虚拟？&lt;br /&gt;与能提供帮助的专业性人士建立长期的联系&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;对于“专业性人士”来说呢？&lt;/span&gt;&lt;br /&gt;值得信赖的跑腿人员&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;生活中的维护，水电煤？&lt;/span&gt;&lt;br /&gt;培育客户&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第4章 远程营销成本&lt;/b&gt;&lt;br /&gt;预支费用&lt;br /&gt;有自己的标准&lt;br /&gt;把握收款时机&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第5章 知名度不高&lt;/b&gt;&lt;br /&gt;名字，媒体，开发产品&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;啥时写本书？……&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第6章 项目来源渠道枯竭&lt;/b&gt;&lt;br /&gt;了解营销渠道&lt;br /&gt;被动销售？销售自身。&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;要看些销售的书籍&lt;/span&gt;&lt;br /&gt;优势--财富；邮件名单；做项目的同时，请他们推荐；敏锐的嗅觉；维护人际关系网。&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;我的弱项&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第7章 经济低迷或经济发展不确定时期&lt;/b&gt;&lt;br /&gt;不景气的相对性，&lt;span style="color: rgb(7, 55, 99);"&gt;经济危机了，网游不更火了么！&lt;/span&gt;&lt;br /&gt;任何情况下都运行良好的企业；&lt;span style="color: rgb(7, 55, 99);"&gt;茅台？&lt;/span&gt;&lt;br /&gt;曾经一起工作过；希望与之一起工作的人&lt;br /&gt;营销推广&lt;br /&gt;考虑新的机会&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;即不要逆流而上，也不要顺流而下&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第8章 如何持续赢得咨询项目&lt;/b&gt;&lt;br /&gt;一些征兆，拒绝不是坏事，满口应承才是坏事&lt;br /&gt;欲速则不达，行动太快会吓着别人。&lt;span style="color: rgb(102, 0, 0);"&gt;交往--达到互信--其他&lt;/span&gt;。&lt;span style="color: rgb(7, 55, 99);"&gt;与人交往也是这样吧～&lt;/span&gt;&lt;br /&gt;1.下次见面的日期&lt;br /&gt;2.打电话不超过三次&lt;br /&gt;3.每打次电话都发送一封Email&lt;br /&gt;4.较短的时间内不要采取后续行动&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第9章 差异化的困境&lt;/b&gt;&lt;br /&gt;a.避免使用专业术语&lt;br /&gt;b.给自己定位&lt;br /&gt;c.著书立说&lt;br /&gt;d.创立一个或更多的品牌&lt;br /&gt;e.使用你的名字&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;坚持！&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第10章 自我定位不准确或定位不适时&lt;/b&gt;&lt;br /&gt;激情！&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(102, 0, 0);font-size:100%;" &gt;第二篇 应对销售挑战&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第11章 价格竞争 &lt;/b&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;不良做法：&lt;/span&gt;公开收费标准，采用按天收费的方式，在提交项目建议书前讨论收费标准，屈服于压力，与非真正的客户打交道，严格遵守《项目招标书》规定？询问预算，高估竞争对手，无法提供独特的方案，无法和客户建立联系&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;用价值衡量价格！&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第12章 《项目招标书》（RFP）&lt;br /&gt;&lt;/b&gt;规避&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第13章 害怕和恐惧&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;自尊和无畏，建立互利互惠、平等的关系&lt;/span&gt;&lt;br /&gt;着装得体，谈吐得体，运用幽默，不要无事道歉，尽量选择合适的位置坐好，做准备工作，予以还击，展现智慧，主动出击，绝不胆怯&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第14章 咨询项目价格过低&lt;/b&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;原因？ -- 保持敏感性并尽量避免 -- 摆脱&lt;/span&gt;&lt;br /&gt;重新讨论遗漏的情况&lt;br /&gt;重新确定能给客户提供的价值&lt;br /&gt;将差异化的因素转换成或有费用&lt;br /&gt;考虑放弃&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第15章 “中间人”和设置障碍者&lt;/b&gt;&lt;br /&gt;中间人--可能的买家 &lt;span style="color: rgb(12, 52, 61);"&gt;对求职者来说，也许是HR？&lt;/span&gt;&lt;br /&gt;与中间人建立关系的目的只是为了确定谁是真正的客户&lt;br /&gt;合理的借口？晓之以情动之以理。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第16章 项目启动时间推迟&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第17章 无人答复/无人回电&lt;/b&gt;&lt;br /&gt;如何避免：做好准备工作，提出有价值的建议，有利的证明和认可的依据，制造紧迫感&lt;br /&gt;确实对方回电的最好方法是提及双方都熟悉的第三方&lt;br /&gt;积极跟进而非纠缠不清&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第18章 避免拙劣的“推销方式”&lt;/b&gt;&lt;br /&gt;不要想当然地认为对方已经“病入膏肓”&lt;br /&gt;不要操之过急&lt;br /&gt;不要自我辩护&lt;br /&gt;问一些引人深思的问题&lt;br /&gt;在你的例子中利用潜在客户所处环境的因素&lt;br /&gt;让买卖双方共同进行诊断&lt;br /&gt;不要使用任何技术？&lt;br /&gt;用你曾经经历过的例子来解释你要做的事情，不断联系&lt;br /&gt;将球踢给对方&lt;br /&gt;准备好走人&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;前几条很像求职的注意事项，毕竟求职就是推销自我，真诚第一！&lt;/span&gt;&lt;br /&gt;谈论客户需要的结果，而不是咨询方法&lt;br /&gt;要表现出你了解客户的情况，了解其所在的行业和竞争的情况&lt;br /&gt;尽可能保障这种会谈是互动性质的&lt;br /&gt;逻辑使人思考，情感使人行动&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第19章 客户让低层人员应付你&lt;/b&gt;&lt;br /&gt;绝不主动或被动地离开客户！&lt;br /&gt;避免被降级的预防措施：&lt;br /&gt;不要太快地进入推销模式&lt;br /&gt;专注与客户建立关系&lt;br /&gt;强调公司目标的同时，也要强调其个人价值&lt;br /&gt;提及已经合作过的其他客户，最好这些客户与潜在客户处于同一级别&lt;br /&gt;必须让客户把你视为同等的人&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第20章 跟进工作不得力&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:100%;" &gt;第三篇 应对项目运作挑战&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第21章 提防暗中破坏者&lt;br /&gt;&lt;/b&gt;修正的原因是出现了失误，失误导致推卸责任和可能的不合作&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第22章 咨询范围不断扩大&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;软件开发中的需求管理是同样的道理，也许是&lt;/span&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;项目&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;的共性之一&lt;/span&gt;&lt;br /&gt;达成共识，采取预防措施；&lt;br /&gt;应付偶然出现的范围扩大现象&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第23章 应对国际挑战&lt;br /&gt;&lt;br /&gt;第24章 客户方发生意外变化并造成损失&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;最初的反应--启动紧急预案&lt;/span&gt;&lt;br /&gt;查明发生了什么，联系客户，拟定新的有价值的项目建议书，有坚强的意志力&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;随后的反应--组织资源&lt;/span&gt;&lt;br /&gt;改正和修补，适应和调整，应对和接受&lt;br /&gt;&lt;br /&gt;&lt;b&gt; 第25章 项目失败&lt;br /&gt;&lt;/b&gt;分析可能的原因：目标，客观因素，主观因素&lt;br /&gt;总结经验教训&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第26章 客户未能实施项目&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;咨询顾问        客户&lt;/span&gt;&lt;br /&gt;精简人员        解雇部分员工&lt;br /&gt;改组             降低部分员工的级别&lt;br /&gt;引进技术        降低当前利润&lt;br /&gt;设定职责        提供负面的反馈意见&lt;br /&gt;以身作则        改变舒适的行为方式&lt;br /&gt;倾听             接受负面的意见&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;需要站在对方的角度思考问题，在自己看来理所当然，在对方看来也许艰难。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt; 第27章 应对“公司政治”&lt;br /&gt;&lt;br /&gt;第28章 未能就进展和贡献与客户达成共识&lt;br /&gt;&lt;br /&gt;第29章 客户“空头支票”式的支持&lt;br /&gt;&lt;/b&gt;为什么会有空头支票？也许是内心害怕&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第30章 项目管理挑战&lt;br /&gt;&lt;/b&gt;变化--唯一不变的就是变化！&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:100%;" &gt;&lt;br /&gt;第四篇 应对咨询管理挑战&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第31章 现金流&lt;br /&gt;&lt;/b&gt;税前税后问题&lt;br /&gt;&lt;br /&gt;&lt;b&gt; 第32章 学习和进步&lt;br /&gt;&lt;/b&gt;终身学习，学习如何学习，而不是被教&lt;br /&gt;持续学习的四个维度：带着理解读；带着感情写，带着感情说；带着鉴别听&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第33章 客户拖延付款&lt;br /&gt;&lt;br /&gt;第34章 日常管理费用及利润&lt;br /&gt;&lt;/b&gt;为什么不应该雇人--&lt;span style="color: rgb(7, 55, 99);"&gt;这些理由在中国也许不是理由&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第35章 知识产权遭剽窃&lt;br /&gt;&lt;br /&gt;第36章 生病与残疾&lt;br /&gt;&lt;br /&gt;第37章 出差食宿行及生活质量&lt;br /&gt;&lt;br /&gt;第38章 合理合法避税&lt;br /&gt;&lt;/b&gt;不是你赚了多少，而是你省了多少&lt;br /&gt;争取最有利的缴税计划&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第39章 不断出现新技术&lt;br /&gt;&lt;/b&gt;分清潮流和趋势&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第40章 生活目标及平衡&lt;/b&gt;&lt;br /&gt;没有完美的平衡&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7293346879416726021?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7293346879416726021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7293346879416726021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7293346879416726021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7293346879416726021'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/40.html' title='读《破解咨询的40个困惑》'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1214868946486065586</id><published>2009-01-05T20:05:00.004+08:00</published><updated>2009-01-06T19:07:59.510+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='咨询'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>读《点击世界顶级咨询公司》</title><content type='html'>今天看了《点击世界顶级咨询公司》一书，主要想对这个行业多一些了解。草草看完后的确有一些收获。在咨询公司中能接触到很多案例，能锻炼与人交往的技能，能接触到一些新的东西，不断地追求专业，在自我提升的同时也能为社会创造尽可能多的价值，得到客户的认同。这和我的目标是吻合的。&lt;br /&gt;&lt;br /&gt;在公司方面，这本书介绍了进十家世界性的咨询公司，其中在&lt;b&gt;信息技术咨询&lt;/b&gt;方面，&lt;b&gt;IGS&lt;/b&gt;(IBM全球服务)，&lt;b&gt;Accenture&lt;/b&gt;（埃森哲），&lt;b&gt;EDS&lt;/b&gt;（Electronic Data System + 科尼尔），&lt;b&gt;PWC&lt;/b&gt;（普华永道），&lt;b&gt;HPC&lt;/b&gt;(惠普咨询)这五家公司在做的尤为突出，需要多加关注。据书中说，PWC在美国是十佳IT雇主，普华永道成了IT公司？IGS全球有13w+的雇员，占IBM全球雇员数的一半以上？真正的服务为王！IT并非只意味着技术，IT是为了创造价值！然后查了下IGS，HPC的招聘，IGS在招很多掌握Oracle和SAP技术的人员，这也许说明领先的服务型IT企业已经超越了产品技术的壁垒，而是以为客户提供整合的产品和价值作为自己的目标。&lt;br /&gt;&lt;br /&gt;BI这类专业性强且和业务紧密相连的技术方向很可能成为将来信息系统咨询的热点，在ERP整合了企业的业务后，BI也许将在企业信息整合上发挥重要作用；同时在IGS的招聘职位上，我也发现了对BI人才的较大需求。这也许是个不错的方向。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1214868946486065586?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1214868946486065586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1214868946486065586' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1214868946486065586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1214868946486065586'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/blog-post.html' title='读《点击世界顶级咨询公司》'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2875769615950774831</id><published>2009-01-02T11:10:00.018+08:00</published><updated>2009-01-02T12:00:29.084+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GTD'/><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>GTD学习笔记</title><content type='html'>新年的第一天在“&lt;a title="褪墨" href="http://www.mifengtd.cn/" id="hq_n"&gt;褪墨&lt;/a&gt; ”上发现了GTD（Getting Things Done）和ZTD（Zen To Done）这两个概念。昨晚看了《Getting Things Done》，综合了网络上发现的其它信息，做个简单的笔记。&lt;br /&gt;GTD 是“Getting Things Done”（完成每一件事） 的缩写。这是一个被广泛采用的赋予实际行动的时间管理系统。ZTD则更侧重于简洁高效的时间管理。&lt;br /&gt;&lt;br /&gt;在“&lt;a href="http://www.hiadmin.com/"&gt;架构研究室&lt;/a&gt; ”上发现了下面的GTD的思维导图。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_afohQU5wMHo/SV2JfB3yh1I/AAAAAAAAD04/5rIoIjtUGE0/s1600-h/GTD01.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 152px; height: 200px;" src="http://2.bp.blogspot.com/_afohQU5wMHo/SV2JfB3yh1I/AAAAAAAAD04/5rIoIjtUGE0/s200/GTD01.jpeg" alt="" id="BLOGGER_PHOTO_ID_5286532703774213970" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SV2JezH84jI/AAAAAAAAD0w/SYv0Mz97QsM/s1600-h/GTD02.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 171px; height: 200px;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SV2JezH84jI/AAAAAAAAD0w/SYv0Mz97QsM/s200/GTD02.jpeg" alt="" id="BLOGGER_PHOTO_ID_5286532699815469618" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SV2Je39kzaI/AAAAAAAAD0o/_o3UpkGB-Q0/s1600-h/GTD03.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 200px;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SV2Je39kzaI/AAAAAAAAD0o/_o3UpkGB-Q0/s200/GTD03.jpeg" alt="" id="BLOGGER_PHOTO_ID_5286532701114125730" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_afohQU5wMHo/SV2JeoPq8KI/AAAAAAAAD0g/ScHrrkyCz1U/s1600-h/GTD04.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 100px;" src="http://4.bp.blogspot.com/_afohQU5wMHo/SV2JeoPq8KI/AAAAAAAAD0g/ScHrrkyCz1U/s200/GTD04.jpeg" alt="" id="BLOGGER_PHOTO_ID_5286532696895058082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Douglas Johnston 制作的流程图：摘自www.DIYPlanner.com&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_afohQU5wMHo/SV2Q9V1P19I/AAAAAAAAD1I/GPIGe11YnFA/s1600-h/Snap1.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 253px; height: 400px;" src="http://4.bp.blogspot.com/_afohQU5wMHo/SV2Q9V1P19I/AAAAAAAAD1I/GPIGe11YnFA/s400/Snap1.bmp" alt="" id="BLOGGER_PHOTO_ID_5286540921109731282" border="0" /&gt;&lt;/a&gt;笔记摘自“&lt;b&gt;褪墨&lt;/b&gt;”&lt;br /&gt;GTD的重点不在于设定任务的&lt;b&gt;优先级&lt;/b&gt;，而是制定出在各种&lt;b&gt;情境&lt;/b&gt;下的任务列表，如：制定一份“需要打电话”的列表；一份“电脑前可以完成的事情”列表等等。GTD还建议任何&lt;b&gt;两分钟&lt;/b&gt;之内可以完成的任务应该马上执行。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;两个目的&lt;/b&gt;：（1）抓住所有一切需要处理的事情（现在的、以后的、将来某时的；大的、小的、&lt;br /&gt;或者不大不小的）把它们统统置入一个脱离大脑的逻辑系统中。（2）训练自己在接受一切“输入信息”的前期作出决定。这样一来，在任何时候，你都把下一步行动计划掌握在手，可以实施或者进行再议。&lt;br /&gt;&lt;br /&gt;简单的概括GTD，那就是&lt;b&gt;对任何事情都做好准备&lt;/b&gt;。&lt;b&gt;因为我们的想法没有被收集整理，所以我们总是在不断地思考自己需要什么或者现在要做什么。&lt;/b&gt;若总让大脑停留在思考要什么，完成什么，和使用大脑记忆这些事件的层次，那么大脑就会没有多余地时间去考虑一件事情该怎么完成了。&lt;b&gt;只有考虑如何完成一件事情才最重要&lt;/b&gt;，否者你的想法都是没意义的。&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;&lt;br /&gt;收集 &lt;/b&gt;&lt;br /&gt;把任何你需要跟踪、记住、或者要做的事情全部记录到“收集箱”中。每天抽几十分钟收集一下脑中的信息，记录到你的收集设备中。&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;处理 &lt;/b&gt;&lt;br /&gt;将你收集到的任何信息进行处理。每个星期至少处理清空一次你的“收集箱”。&lt;br /&gt;&lt;b&gt;处理你的收集箱要遵循的工作流程： &lt;/b&gt;&lt;br /&gt;从第一条信息开始处理；&lt;br /&gt;每次只处理一条信息；&lt;br /&gt;不把任何信息放回收集箱；&lt;br /&gt;如果任何一项需要做：&lt;br /&gt;马上执行（如果花的时间少于两分钟）&lt;br /&gt;委托别人完成，或者&lt;br /&gt;将它延期&lt;br /&gt;&lt;b&gt;否则：&lt;/b&gt;&lt;br /&gt;将它存档以便查询&lt;br /&gt;把它删除，或者&lt;br /&gt;为它定义合适的目标与情境，以便下一步执行&lt;br /&gt;&lt;b&gt;两分钟原则：&lt;/b&gt;任何事情如果花的时间少于两分钟，那么马上就去执行。两分钟是一个分水岭，这样的时间和正式地推迟一个动作所花的时间差不多。&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;组织 &lt;/b&gt;&lt;br /&gt;&lt;b&gt;下一步行动（Next actions）：&lt;/b&gt;对于每个需要你关注的事项，定好什么是你可以实际采取的下一步行动。 虽然要完成事项可能会有很多的步骤和行动，但是其中一定会有你需要首先去做的事情，这样的事情就应该被记录在“下一步行动”列表上。较好的做法是把这些事项根据能够 被完成的“情境”整理分类，例如“在办公室”，“用电话”，“在商场”。&lt;br /&gt;&lt;b&gt;项目（Projects）：&lt;/b&gt;每个需要多于一个实际的行动才能达到目的的事就是一个“项目”。使用跟踪以及周期性的回顾来确保每个项目都有一个下一步的行动进行下去。&lt;br /&gt;&lt;b&gt;等待（Waiting for）：&lt;/b&gt;当你已经指派了一个事项给其他人或者在项目进行下去之前需要等待外部的事件。就应当在你的系统当中跟踪以及定期检查是否已经可以采取行动或者一个提醒需要发出。&lt;br /&gt;&lt;b&gt;将来/可能（Someday/Maybe）：&lt;/b&gt;这些事情你需要在某个点去做，但是不是马上。&lt;br /&gt;&lt;br /&gt;使用下一步行动列表而非日历来记录行动，虽然日历非主要的工具，但是可以用来跟踪预约和委托，提醒某件必须在特定期限内完成的事情等等。&lt;br /&gt;字母顺序组织的归档系统或43 Folders系统（按照12月、31天，共43个文件夹）。&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;回顾 &lt;/b&gt;&lt;br /&gt;按时回顾自己的列表。如果你没有及时整理和回顾每天的信息和行动，那么整个GTD系统就是毫无用处的。通过回顾，指定计划，或者了解项目进度，从而使自己总是走在时间的前面，而不是被动地被安排。&lt;br /&gt;1. 我可以做什么使下一周有所改进？&lt;br /&gt;2. 这周最使我感到骄傲的是什么？&lt;br /&gt;3. 这周我取得的最大成果是什么？&lt;br /&gt;4. 这周我做了什么使我更接近自己的目标？&lt;br /&gt;5. 这周我遇到的困难有哪些？为什么？&lt;br /&gt;6. 这周内，我白白浪费时间最多的是什么？&lt;br /&gt;7. 这周我做了什么使我感到羞愧？&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;执行 &lt;/b&gt;&lt;br /&gt;如果你把自己的时间都花在组织工作、而不是执行它们，那么这样的系统是个只说不做的无用功系统。前面的步骤都是为了在你做事情的时候，使它变得简单、容易、有趣的话，让你比较不会拖延、或者被太多的琐事所分心。&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.mifengtd.cn/articles/10-habits-of-ztd.html"&gt;简单做(ZTD)的十个好习惯总结&lt;/a&gt;&lt;br /&gt;同样摘自&lt;b&gt;褪墨&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯1：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-1-collect.html"&gt;收集&lt;/a&gt; —— 全面收集 &lt;/b&gt;&lt;br /&gt;随身携带一个小笔记本（或者任何记录工具），用它来记录下任何任务、想法、专案或者任何闪入你大脑的其他信息。这个习惯与&lt;a href="http://www.mifengtd.cn/articles/category/gtd/"&gt;GTD&lt;/a&gt;的基本完全相同，但ZTD只需要一个小巧、便携、易用的工具来记录信息。&lt;b&gt;你必需在忘记事情之前赶紧把信息写下来&lt;/b&gt;, 并且尽快地把这些信息从笔记本中清除、存入任务清单中。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯2：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-2-process.html"&gt;处理&lt;/a&gt; —— 快速地对信息作出决定，从而避免收件箱堆积 &lt;/b&gt;&lt;br /&gt;第一，限制你的收件箱。列出所有你收集信息的途径，评估每一条途径带来的价值，合并某些收件箱或者删除那些无用的收件箱。&lt;br /&gt;第二，管理你的收件箱。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;习惯3：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-3-plan.html"&gt;计划&lt;/a&gt; —— 设定每天，每周的最重要的事(MIT) &lt;/b&gt;&lt;br /&gt;每周，列下你需要完成的重大事件，把他们排进日程表。每天，列出1-3个最重要的事(MITs)。这样，你的每一天和每一周都被设定了目标，与其盲目的去完成那长长的任务清单，你总是在完成那些最重要最有用的事情！&lt;b style="color: rgb(153, 0, 0);"&gt;发现，安排，完成，回顾！&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯4：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-4-do.html"&gt;执行&lt;/a&gt; —— 一心一意，&lt;span style="color: rgb(153, 0, 0);"&gt;每次只执行一件事&lt;/span&gt; &lt;/b&gt;&lt;br /&gt;执行作为一切时间管理的核心，是ZTD中非常重要的一部分。你应当在不分心的情境下，一次只执行一件事。&lt;span style="color: rgb(153, 0, 0);"&gt;既不要多线工作，也不要让你的工作突然中断&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯5：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-5-effective-gtd-tools.html"&gt;信任的系统&lt;/a&gt; —— 建立简单的列表，并每日查看 &lt;/b&gt;&lt;br /&gt;ZTD（简单做）建议你尽可能的维持列表简单化。不要增加复杂的系统，也&lt;b&gt;不要持续尝试新工具&lt;/b&gt;，以免时间上的浪费。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯6：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-6-everything-in-order.html"&gt;管理&lt;/a&gt; —— 一个存储所有信息的地方 &lt;/b&gt;&lt;br /&gt;把所有接收的信息都放入你的收集箱中，处理你的收集箱，执行任务，完成任务。在这个系统里，你永远都不应该有疑问自己下一步该做什么。而且也使你更能专心注重于工作，也避免的拖延的。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;习惯7：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-7-refresh-your-focus-every-week-to-achieve-more.html"&gt;回顾&lt;/a&gt; —— 每周回顾你的系统和目标 &lt;/b&gt;&lt;br /&gt;重新整理所有的事情和检视什么是最重要的任务。每次只要集中于一个目标，并且确保它是一个你能完成的目标。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯8：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-8-eliminate-all-but-the-absolute-essential-tasks.html"&gt;简化&lt;/a&gt; —— 减少你的任务清单，只留下最必要的 &lt;/b&gt;&lt;br /&gt;将你的任务列表简化到最少，只剩下最重要的任务，不断地简化自己的任务清单，确定你的任务只是最重要的。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯9：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-9-optimize-your-productivity-with-daily-weekly-routines.html"&gt;常规&lt;/a&gt; —— 设定每周、每日例程 &lt;/b&gt;&lt;br /&gt;设定每周、每日例程可以使你的工作和个人生活得到极大的简化。更重要的是，使你掌控自己的生活，而非让任务处在搁浅之中。没有日程，我们就不太容易对新进入的信息说不。因为我们总是被那些希望占用我们时间的人、吸引注意力的网站所拖住，这不是一件好事（除非你不想做完重要的事情），所以你需要掌控自 己的生活，设定日程，并且跟着它走。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;习惯10：&lt;a href="http://www.mifengtd.cn/articles/ztd-habit-10-do-something-you-are-passionate-about.html"&gt;激情&lt;/a&gt; —— 做你充满梦想的事情&lt;br /&gt;&lt;/b&gt;当你真正地想去做一件事，无论多么辛苦，你都会去努力的完成。你会付出更多的努力，抽出更多的时间，耽搁的时间也减少了。所以，培养这个习惯正是为了持续搜寻使你保持热情的事情，使你精神饱满，动力十足。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2875769615950774831?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2875769615950774831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2875769615950774831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2875769615950774831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2875769615950774831'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2009/01/gtd.html' title='GTD学习笔记'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_afohQU5wMHo/SV2JfB3yh1I/AAAAAAAAD04/5rIoIjtUGE0/s72-c/GTD01.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6931211363303701994</id><published>2008-12-31T10:52:00.003+08:00</published><updated>2009-01-01T12:48:32.098+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>The new year.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_afohQU5wMHo/SVxLE5Nm9WI/AAAAAAAADy4/Wp62D8O-A4w/s1600-h/newyear09ig.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 65px;" src="http://4.bp.blogspot.com/_afohQU5wMHo/SVxLE5Nm9WI/AAAAAAAADy4/Wp62D8O-A4w/s320/newyear09ig.gif" alt="" id="BLOGGER_PHOTO_ID_5286182610075579746" border="0" /&gt;&lt;/a&gt;昨天看了《叶问》、《梅兰芳》、《霸王别姬》、《非诚勿扰》。都是别人的生活。几年前觉得活着是为了经历，几年后觉得活着就是活着，不管真实还是不真实。也许生活和爱才是真正重要的，可对它们却只能顺其自然。&lt;br /&gt;&lt;br /&gt;曾经刻意地追求着简单，不想去记录，不想去思考，可现在有时觉得不记下些什么我真会很快忘了经历过什么。可即使刻意记录，一天天还是这么过去，到后来只是成了一篇篇日志、成了一张张相片、成了一纸简历、成了回忆。&lt;br /&gt;&lt;br /&gt;在09年，我想活得真实些，每天都做一件开心的事情，每个月都养成一个好的习惯。呵呵，这就是我新年的目标。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6931211363303701994?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6931211363303701994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6931211363303701994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6931211363303701994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6931211363303701994'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/new-year.html' title='The new year.'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_afohQU5wMHo/SVxLE5Nm9WI/AAAAAAAADy4/Wp62D8O-A4w/s72-c/newyear09ig.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-813706841538248789</id><published>2008-12-27T20:12:00.003+08:00</published><updated>2008-12-28T21:54:55.934+08:00</updated><title type='text'>08年</title><content type='html'>08的流水帐：&lt;br /&gt;1月：考研，确定考不上，开始做简历。浪费了半年的时间。家乡下了场大雪，过年，做鱼丸。&lt;br /&gt;2月：跑亲戚、投简历，17号到上海，一周面试四家公司，第二周和宏力签约，回广州办三方协议，回上海。&lt;br /&gt;3月：上班，编程。工作的无奈和孤独。&lt;br /&gt;4月：继续工作，知道过了上财的复试线，准备复试，笔试基本不会，又开始等待，已不在意。准备报工程硕士。&lt;br /&gt;5月：月初得知复试通过。上午离职，下午去蓝竹面试，第二天回广州。做毕设。&lt;br /&gt;6月：继续做毕设，去肇庆玩，拍毕业照，答辩。&lt;br /&gt;7月：蓝竹实习，继续编程，烦心而开心的日子。&lt;br /&gt;8月：继续编程，生活的琐碎。&lt;br /&gt;9月：月初回家，中旬回上海，开学。学习Linux+Python。由于入党较早，被任班长。&lt;br /&gt;10月：十一回家，思维导图，重读《代码大全》，学SAS，烧烤。重做简历，面试。&lt;br /&gt;11月：玩红警3，SNA论文，《代码大全》，Python，UNIX。&lt;br /&gt;12月：英语演示，《重构》，《执行》，统计推断考试，《货币战争》，重读《设计模式》，圣诞party。复习高微、投资。听歌。&lt;br /&gt;&lt;br /&gt;明年：&lt;br /&gt;1到5月：课程学习，python，C，Matlab or SAS，DB2 Advanced，BEC Higher，LPIC。&lt;br /&gt;5到8月：暑期实习，英语，Data Mining。&lt;br /&gt;9到12月：论文，找工。&lt;br /&gt;可能的话参加一两个开源项目。&lt;br /&gt;&lt;br /&gt;继续卑微地努力，多多少少为自己、为他人做些事情。累些，却也不会后悔～&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-813706841538248789?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/813706841538248789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=813706841538248789' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/813706841538248789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/813706841538248789'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/08.html' title='08年'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-138616846132282256</id><published>2008-12-22T11:02:00.015+08:00</published><updated>2008-12-22T15:31:06.637+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='书法'/><title type='text'>12.22习字_苏轼词</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_afohQU5wMHo/SU8GicH1K4I/AAAAAAAADyo/AXPm1mNYjXM/s1600-h/DSCF0731.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 220px;" src="http://4.bp.blogspot.com/_afohQU5wMHo/SU8GicH1K4I/AAAAAAAADyo/AXPm1mNYjXM/s320/DSCF0731.JPG" alt="" id="BLOGGER_PHOTO_ID_5282448076663237506" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_afohQU5wMHo/SU9CE_qUQ4I/AAAAAAAADyw/oM0BLP9xE-k/s1600-h/DSCF0730.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 220px;" src="http://1.bp.blogspot.com/_afohQU5wMHo/SU9CE_qUQ4I/AAAAAAAADyw/oM0BLP9xE-k/s320/DSCF0730.JPG" alt="" id="BLOGGER_PHOTO_ID_5282513541504713602" border="0" /&gt;&lt;/a&gt;窗外阳光很好，不想看书，等吃午饭，有那么一点无趣，抄了苏轼的两首词。手有点冻，笔也有些差。上一次写字该是一年半以前了吧。&lt;br /&gt;&lt;br /&gt;我不知道干嘛写字，纯粹的浪费时间，而且还显得有点酸有点作，呵呵。不过很多事都一样，是永远没有为什么这一说的。哪怕过程中有一点点所得，就不能说是浪费时间。宅男，宅男。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-138616846132282256?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/138616846132282256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=138616846132282256' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/138616846132282256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/138616846132282256'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/1222.html' title='12.22习字_苏轼词'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_afohQU5wMHo/SU8GicH1K4I/AAAAAAAADyo/AXPm1mNYjXM/s72-c/DSCF0731.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6051817291256918925</id><published>2008-12-21T10:57:00.002+08:00</published><updated>2008-12-21T13:05:07.828+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='设计模式'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>《Head First 设计模式》9-13章</title><content type='html'>&lt;b style="color: rgb(102, 0, 0);"&gt;&lt;/b&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;Chapter 9：迭代器和组合模式--管理良好的集合&lt;/b&gt;&lt;br&gt;    我们能学习如何让客户遍历你的对象而又无法窥视你存储对象的方式；也将学习如何创建一些对象超集合，能够一口气就跳过某些让人望而生畏的数据结构；还将学写到一些关于对象职责的知识。    &lt;br&gt;    &lt;br&gt;&lt;b&gt;迭代器模式：&lt;/b&gt;提供一种方法顺序访问一个聚合对象中的各个元素，而不是暴露其内部的表示。&lt;br&gt;    迭代器模式让我们能游走于&lt;b&gt;聚合&lt;/b&gt;内的每一个元素，而不是暴露其内部的表示。    &lt;br&gt;    把游走的任务放在&lt;b&gt;迭代器&lt;/b&gt;上，而不是聚合上。这样简化了聚合的接口和实现，也让责任各得其所。&lt;br&gt;&lt;div id="aizu" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 523px; height: 240px;" src="http://docs.google.com/File?id=dfpc9v7q_185fqpxf74r_b"&gt;&lt;/div&gt;&lt;b&gt;设计原则&lt;/b&gt;：一个类应该只有一个引起变化的原因。    &lt;br&gt;    类的每个责任都有改变的潜在区域。超过一个责任，意味着超过一个改变的区域。    &lt;br&gt;    这个原则告诉我们，尽量让每个类保持单一责任。    &lt;br&gt;&lt;br&gt;    &lt;b&gt;组合模式：&lt;/b&gt;允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一直的方式处理个别对象以及对象组合。&lt;br&gt;    组合模式让我们能用树形方式创建对象的结构，树里面包含了组合以及个别的对象。    &lt;br&gt;    使用组合结构，我们能把相同的操作应用在组合和个别对象上。换句话说，在大多数情况下，我们可以忽略对象组合和个别对象之间的差别。    &lt;br&gt;统一处理个别对象和组合对象。&lt;br&gt;&lt;div id="u-t1" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 545px; height: 246px;" src="http://docs.google.com/File?id=dfpc9v7q_186ctgs6vff_b"&gt;&lt;br&gt;&lt;/div&gt;&lt;div id="uhuj" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 328px; height: 164px;" src="http://docs.google.com/File?id=dfpc9v7q_187cqnc3qd8_b"&gt;&lt;br&gt;&lt;/div&gt;    &lt;br&gt;&lt;b&gt;空迭代器    &lt;/b&gt;&lt;br&gt;        NullIterator，返回一个迭代器，而这个迭代器得hasNext永远返回false。&lt;br&gt;&lt;br&gt;    &lt;b&gt;要点    &lt;/b&gt;&lt;br&gt;        迭代器允许访问聚合的元素，而不需要暴露它的内部结构。&lt;br&gt;        迭代器将遍历聚合的工作封装进一个对象中。&lt;br&gt;        当使用迭代器的时候，我们依赖聚合提供遍历。&lt;br&gt;        迭代器提供了一个通用的接口，让我们遍历聚合的项，当我们编码使用聚合的项时，就可以使用多态机制。&lt;br&gt;        我们应该努力让一个类只分配一个责任。&lt;br&gt;        组合模式提供一个结构，可同时包容&lt;b&gt;个别对象&lt;/b&gt;和&lt;b&gt;组合对象&lt;/b&gt;。&lt;br&gt;        组合模式允许客户对个别对象以及组合对象一视同仁。&lt;br&gt;        组合结构内的任意对象称为组件，组件可以是组合，也可以是叶节点。&lt;br&gt;        &lt;br&gt;在实现组合模式时，有许多设计上的折中。你要根据需要&lt;b&gt;平衡透明性和安全性&lt;/b&gt;。&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;&lt;br /&gt;Chapter 10：状态模式--事务的状态&lt;/b&gt;&lt;br&gt;策略模式和状态模式是双胞胎，在出生时才分开。        &lt;br&gt;&lt;br /&gt;&lt;br&gt;    策略模式是围绕可以互换的算法来创建成功业务的。    &lt;br&gt;    状态模式通过改变对象内部的状态来帮助对象控制自己的行为。    &lt;br&gt;    1    定义一个State接口。在这个接口内，糖果机的每个动作都有一个对应的方法。&lt;br&gt;    2    然后为机器中的每个状态实现状态类。这些类将负责在对应的状态下进行机器的行为。&lt;br&gt;    3    我们要摆脱旧的条件代码，取而代之的方式是，将动作委托到状态类。&lt;br&gt;&lt;br /&gt;&lt;br&gt;    &lt;b&gt;状态模式&lt;/b&gt;：允许对象在内部状态改变是改变它的行为，对象看起来好像修改了它的类。    &lt;br&gt;&lt;div id="hbfi" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 456px; height: 162px;" src="http://docs.google.com/File?id=dfpc9v7q_188gpbmsqsk_b"&gt;&lt;/div&gt;&lt;b&gt;要点    &lt;/b&gt;&lt;br&gt;        状态模式允许一个对象基于内部状态而拥有不同的行为。&lt;br&gt;        和程序状态机PSM不同，状态模式用类代表状态。&lt;br&gt;        Context会将行为委托给当前状态对象。&lt;br&gt;        通过将每个状态封装进一个类，我们把以后需要做的任何改变局部化了。&lt;br&gt;        &lt;br&gt;&lt;br /&gt;状态模式和策略模式有相同的类图，但是它们的&lt;b&gt;意图不同&lt;/b&gt;。&lt;br&gt;        策略模式通常会用行为或算法来配置Context类。&lt;br&gt;        状态模式允许Context随着状态的改变而改变行为。&lt;br&gt;        状态装换可以由State类或Context类控制。&lt;br&gt;        使用状态模式通常会导致设计中类的数目大量增加。&lt;br&gt;        状态类可以被多个Context实例共享。&lt;br&gt;&lt;b&gt;&lt;br&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Chapter 11：代理模式--控制对象访问&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&lt;br /&gt;你是一个白脸，提供很好且很友善的服务，但是你不希望每个人都叫你做事，所以找了黑脸控制对你的访问。        &lt;br&gt;&lt;br /&gt;&lt;br&gt;    &lt;b&gt;控制和管理访问&lt;/b&gt;，这就是代理要做的事。    &lt;br&gt;    你的客户对象所做的就像是在做远程方法调用，但其实只是调用本地堆中的“代理”对象上的方法，再由代理处理所有网络通信的低层细节。    &lt;br&gt;    1    先浏览并了解一下RMI。&lt;br&gt;    2    我们会把GumballMachine变成远程服务，提供一些可以被远程调用的方法。&lt;br&gt;    3    我们将创建一个能和远程的GumballMachine沟通的代理，这需要用到RMI。&lt;br&gt;    4    最后再结合监视系统，CEO就可以监视任何数量的远程糖果机了。&lt;br&gt;&lt;br /&gt;&lt;br&gt;    &lt;b&gt;方法调用是如何发生的    &lt;/b&gt;&lt;br&gt;    1    客户对象调用客户辅助对象的doBigThing方法。&lt;br&gt;    2    "客户辅助对象打包调用信息(变量,方法名称等)，然后通过网络将它运给服务辅助对象。"&lt;br&gt;    3    服务辅助对象把来自客户辅助对象的信息解包，找出被调用的方法(以及在哪个对象内)，然后调用真正的服务对象上的真正方法。&lt;br&gt;    4    服务对象上的方法被调用，将结果返回给服务辅助对象。&lt;br&gt;    5    服务辅助对象把调用的返回信息打包，然后通过网络运回给客户辅助对象。&lt;br&gt;    6    客户辅助对象把返回值解包，返回给客户对象。对于客户来说，这是完全透明的。&lt;br&gt;    &lt;br&gt;&lt;br /&gt;RMI提供了客户辅助对象和服务辅助对象，为客户辅助对象创建和服务对象相同的方法。    &lt;br&gt;    &lt;br&gt;&lt;br /&gt;&lt;b&gt;制作远程服务    &lt;/b&gt;&lt;br&gt;    1    制作远程接口&lt;br&gt;    2    制作远程的实现&lt;br&gt;    3    利用rmic产生的sub和skeleton&lt;br&gt;    4    启动RMI registry(rmiregistry)&lt;br&gt;    5    开始远程服务&lt;br&gt;&lt;br&gt;远程代理；虚拟代理：暂时代理初建开销大的对象&lt;br&gt;&lt;br /&gt;&lt;br&gt;    &lt;b&gt;代理模式&lt;/b&gt;：为另一个对象提供一个替身或占位符以控制这个对象的访问。    &lt;br&gt;    使用代理模式创建代表representative对象，让代表对象控制某对象的访问，被代理的对象可以是远程的对象，创建开销大的对象或需要安全控制的对象。&lt;br&gt;&lt;div id="o-j9" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 492px; height: 194px;" src="http://docs.google.com/File?id=dfpc9v7q_189hf765ffj_b"&gt;&lt;/div&gt;&lt;div id="k26w" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 485px; height: 74px;" src="http://docs.google.com/File?id=dfpc9v7q_190dj2tvrdv_b"&gt;&lt;/div&gt;&amp;nbsp;&lt;br&gt;    &lt;b&gt;&lt;br&gt;&lt;br /&gt;要点    &lt;/b&gt;&lt;br&gt;        代理模式为一个对象提供代表，以便&lt;b&gt;控制客户对对象的访问&lt;/b&gt;，管理访问的方式有许多种。&lt;br&gt;        远程代理管理客户和远程对象之间的交互。&lt;br&gt;        虚拟代理控制访问&lt;b&gt;实例化开销大的对象&lt;/b&gt;。&lt;br&gt;        保护代理基于调用者控制对象方法的访问。&lt;br&gt;        代理模式有许多变体，例如：&lt;b&gt;缓存代理，同步代理，防火墙代理和写入时复制代理&lt;/b&gt;。&lt;br&gt;        代理在结构上类似装饰者，但是目的不同。&lt;br&gt;        装饰者模式为对象加上行为，而代理则是控制访问。&lt;br&gt;        Java内置的代理支持，可以根据需要建立&lt;b&gt;动态代理&lt;/b&gt;，并将所有调用分配到所选的处理器。&lt;br&gt;        就和其他的包装者wrapper一样，代理会造成你的设计中类的数目增加。&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;Chapter 12: 复合模式--模式中的模式&lt;/b&gt;&lt;br&gt;谁料得到模式居然可以携手合作？        &lt;br&gt;        &lt;br&gt;    模式常被一起使用，并被组合在同一个设计解决方案中。    &lt;br&gt;    复合模式在一个解决方案中结合两个或多个模式，以解决一般或重复发生的问题。    &lt;br&gt;    &lt;br&gt;设计模式是&lt;b&gt;MVC&lt;/b&gt;的钥匙。    &lt;br&gt;    MVC是由数个设计模式结合起来的模式。如果你能够看着MVC内部的各个模式，MVC的一切就会跟着开始明朗起来。    &lt;br&gt;        &lt;br&gt;    &lt;b&gt;要点    &lt;/b&gt;&lt;br&gt;        MVC是复合模式，结合&lt;b&gt;观察者模式&lt;/b&gt;、&lt;b&gt;策略模式&lt;/b&gt;和&lt;b&gt;组合模式&lt;/b&gt;。&lt;br&gt;        模型使用&lt;b&gt;观察者模式&lt;/b&gt;，以便观察者更新，同事保持两者之间的解耦。&lt;br&gt;        控制器是视图的&lt;b&gt;策略&lt;/b&gt;，视图可以使用不同的控制器实现，得到不同的行为。&lt;br&gt;        视图使用&lt;b&gt;组合模式&lt;/b&gt;实现用户界面，用户界面通常使用嵌套的组件，像面板、框架和按钮。&lt;br&gt;        这些模式携手合作，把MVC的三层解耦，这样额可以保持设计干净，又有弹性。&lt;br&gt;        适配器模式用来将新的模型是配成已有的视图和控制器。&lt;br&gt;        Model2是MVC在Web上的应用。&lt;br&gt;        在Model2中，控制器实现成Servlet，而JSP/HTML实现视图。&lt;br&gt;迎接一个充满设计模式的崭新世界。        &lt;br&gt;    &lt;b&gt;&lt;br&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Chapter 13：与设计模式相处--真实世界中的模式&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&lt;b&gt;模式&lt;/b&gt;是在某种情境(context)下，针对某问题的某种解决方案。&lt;br&gt;    情境就是应用某个模式的情况。这应该是会不断出现的情况。    &lt;br&gt;    问题就是你想在某个情境下达到的目的，但也可以是某情境下的约束。    &lt;br&gt;    解决方案就是你追求的，一个通用的设计，用来解决约束，达到目的。    &lt;br&gt;    如果你发现自己处于某个情境下，面对着所欲达到的目标被一群约束影响着的问题，然而，你能够应用某个设计，克服这些约束并达到该目标，将你领向某个解决方案。    &lt;br&gt;    &lt;br&gt;&lt;b&gt;反模式&lt;/b&gt;告诉你如何采用一个不好的解决方案解决一个问题。&lt;br&gt;    &lt;br&gt;&lt;b&gt;要点    &lt;/b&gt;&lt;br&gt;        让设计模式自然而然地出现在你的设计中，而不是为了使用而使用。&lt;br&gt;        让设计模式并非僵化的教条；你可以依据自己的需要采用或调整。&lt;br&gt;        总是使用满足需要的最简单解决方案，不管它用不用模式。&lt;br&gt;        学习设计模式的类目，可以帮你自己熟悉这些模式以及它们之间的关系。&lt;br&gt;        模式的分类或类目是将模式分成不同的族群，如果这么做对你有帮助，就采用吧！&lt;br&gt;        你必须相当专注才能够成为一个模式的作家；这需要时间也需要耐心，同事还必须乐意做大量的精化工作。&lt;br&gt;        请牢记：你所遇到大多数的模式都是现有模式的变体，而非新的模式。&lt;br&gt;        模式能够为你带来的最大好处之一是，让你的团队拥有共享词汇。&lt;br&gt;        任何社群都有自己的行话，模式社群也是如此。别让这些行话绊着，在读完这本书之后，你已经能够应用大部分的行话了。&lt;br&gt;    &lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;剩下的模式&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;/b&gt;&lt;b&gt;桥接模式 &lt;/b&gt;Bridge Pattern    &lt;br&gt;        不只改变你的实现，也改变你的抽象。&lt;br&gt;    &lt;b&gt;生成器 &lt;/b&gt;Builder Pattern    &lt;br&gt;        使用生成器模式封装一个产品的构造过程，并允许按步骤构造。&lt;br&gt;    &lt;b&gt;责任链 &lt;/b&gt;Chain of Responsibility Pattern    &lt;br&gt;        当你想要让一个以上的对象有机会能够处理某个请求的时候，就使用责任链模式。&lt;br&gt;    &lt;b&gt;蝇量 &lt;/b&gt;Flyweight Pattern    &lt;br&gt;        如想让某个类的一个实例用来提供许多虚拟实例，就使用蝇量模式。&lt;br&gt;    &lt;b&gt;解释器 &lt;/b&gt;Interpreter Pattern    &lt;br&gt;        使用解释器模式为语言创建解释器。&lt;br&gt;    &lt;b&gt;中介者 &lt;/b&gt;Mediator Pattern    &lt;br&gt;        使用中介者模式来几种相关对象之间复杂的沟通和控制方式。&lt;br&gt;    &lt;b&gt;备忘录 &lt;/b&gt;Memento Pattern    &lt;br&gt;        当你需要让对象返回之前的状态时，就使用备忘录模式。&lt;br&gt;    &lt;b&gt;原型 &lt;/b&gt;Prototype Pattern    &lt;br&gt;        当创建给定类的实例的过程很昂贵或很复杂时，就使用原型模式。&lt;br&gt;    &lt;b&gt;访问者 &lt;/b&gt;Visitor Pattern    &lt;br&gt;        当你想要为一个对象的组合增加新的能力，切封装并不重要时，就使用访问者模式。&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6051817291256918925?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6051817291256918925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6051817291256918925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6051817291256918925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6051817291256918925'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/head-first-9-11.html' title='《Head First 设计模式》9-13章'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-501705563623723386</id><published>2008-12-20T16:17:00.004+08:00</published><updated>2008-12-21T10:58:33.513+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='设计模式'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>《Head First 设计模式》5-8章</title><content type='html'>&lt;b style="color: rgb(102, 0, 0);"&gt;Chapter 5: 单件模式&lt;/b&gt;&lt;br /&gt;独一无二的单件模式：用来创建第一无二的，只能有一个实例的对象的入场券。有些对象之需要一个：线程池、缓存、对话框、偏好设置、日志。。。&lt;br /&gt;静态全局变量（一开始就创建号） &amp;lt;--&amp;gt; 单件模式（可以在需要时再创建对象）&lt;br /&gt; &lt;b&gt;单件模式：&lt;/b&gt;确保一个类只有一个实例，并提供一个全局访问点。&lt;br /&gt; &lt;b&gt;&lt;div id="vk79" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_139hf8fx6f3_b" width="369" height="128" /&gt;&lt;br /&gt; &lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/div&gt;JVM多线程&lt;br /&gt;同步&lt;/b&gt;：synchronized --&amp;gt; 可能造成执行效率的下降&lt;br /&gt;&lt;b&gt;急切实例化&lt;/b&gt;：定义时创建&lt;br /&gt;&lt;b&gt;双重检查加锁&lt;/b&gt;：volatile -- Java 5&lt;br /&gt;&lt;b&gt;&lt;br /&gt;要点    &lt;/b&gt;&lt;br /&gt;     单件模式确保程序中一个类最多只有一个实例。&lt;br /&gt;     单件模式也提供访问这个实例的全局点。&lt;br /&gt;     在Java中实现单件模式需要私有的构造器，一个静态方法和一个静态变量。&lt;br /&gt;     确定在性能和资源上的限制，然后小心地选择适当的方案来实现单件，以解决多线程的问题(我们必须认定所有的线程都是多线程的)&lt;br /&gt;     如果不是采用第五版的java2，双重检查枷锁实现会失效。&lt;br /&gt;     小心，你如果使用多个类加载器，可能导致单件失效而产生多个实例。&lt;br /&gt;     如果使用JVM1.2或之前的版本，你必须建立单件注册表，以免垃圾收集器将单件回收。&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;Chapter 6: 命令模式--封装调用&lt;/b&gt;&lt;br /&gt;这些绝密文件的投递箱已经促成了间谍工业的革命。我只要把需求丢进去，就有人会消失，政府一夕之间改朝换代，而我的干洗衣物也好了。我不必管何时何地或者如何完成，反正就是完成了。     &lt;br /&gt; 在本章，我们把封装带到一个全新的境界:把方法调用封装起来。 &lt;br /&gt;&lt;br /&gt; &lt;b&gt;命令模式：&lt;/b&gt;&lt;br /&gt;     将“请求”封装成对象，以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。&lt;br /&gt;&lt;div id="y2_y" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_142wm8vfqd7_b" width="405" height="128" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_141c4xxmfg2_b" width="351" height="185" /&gt;&lt;br /&gt;命令对象将动作和接收者包进对象中。这个对象只暴露出一个execute()方法，当此方法被调用的时候，接收者就会进行这些动作。&lt;br /&gt;NoCommand对象是一个空对象的例子。当你不想返回一个有一一的对象时，空对象就很有用。&lt;br /&gt;客户也可以将处理null的责任转移给空对象。    &lt;b&gt;&lt;br /&gt;&lt;br /&gt;命令模式的更多用途&lt;/b&gt;&lt;br /&gt;队列请求：命令可以将运算快打包（一个接受者和一组动作），然后将它传来传去，就像是一般的对象一样。&lt;br /&gt;日志请求：store(); load(); execute(); undo()&lt;br /&gt;宏：顺序地执行execute();&lt;br /&gt;&lt;b&gt;&lt;br /&gt;要点&lt;br /&gt;&lt;/b&gt;命令模式将&lt;b&gt;发出请求的对象和执行请求的对象解耦&lt;/b&gt;。&lt;br /&gt;在被解耦的两者之间是&lt;b&gt;通过命令对象进行沟通&lt;/b&gt;的，命令对象封装了接受者和一个或一组动作。&lt;br /&gt;调用者通过调用命令对象的&lt;b&gt;execute&lt;/b&gt;发出请求，这会使得接收者的动作被调用。&lt;br /&gt;调用者可以接受命令当参数，甚至在运行时动态地进行。&lt;br /&gt;命令可以支持撤销，做法是实现一个undo方法来回到execute被执行前的状态。&lt;br /&gt;宏命令是命令的一种简单的延伸，允许调用多个命令。宏方法也可以支持撤销。&lt;br /&gt;实际操作时，很常见使用聪明命令对象，也就是直接实现了请求，而不是将工作委托给接收者。&lt;br /&gt;命令也可以用来实现日志和事务系统。 &lt;/div&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;Chpater 7：适配器模式与外观模式--随遇而安&lt;/b&gt;&lt;br /&gt;&lt;b&gt;适配器模式与外观模式&lt;/b&gt;：以不同的目的，包装某些对象，让它们的接口看起来不像自己而像是别的东西。         &lt;br /&gt; 这样就可以在设计中，将类的接口转换成想要的接口。     &lt;br /&gt;将所有的改变封装在一个类中，可能需要让一个适配器包装多个被适配者。&lt;br /&gt;双向适配器。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;适配器模式解析        &lt;/b&gt;&lt;br /&gt;     客户 - 适配器 - 被适配器 &lt;br /&gt;     客户使用适配器的过程如下： &lt;br /&gt;         客户通过目标接口调用适配器的方法对适配器发出请求。&lt;br /&gt;         适配器使用被适配者接口把请求转换成被是配置的一个或多个调用接口。&lt;br /&gt;         客户接收到调用的结果，但并未察觉这一切是适配器在起转换作用。&lt;br /&gt;&lt;br /&gt; &lt;b&gt;适配器模式：&lt;/b&gt;将一个类的接口，转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 &lt;br /&gt;         &lt;div id="zmzb" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_180hcw2ftgv_b" width="401" height="132" /&gt;&lt;br /&gt;对象适配器：&lt;br /&gt;&lt;div id="qebg" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_1813m4crxcc_b" width="394" height="129" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;外观&lt;/b&gt;不只是简化了接口，也将客户从组件的子系统中解耦。&lt;br /&gt;外观和适配器可以包装许多类，但是外观的意图是简化接口，而适配器的意图是将接口转换成不同接口。&lt;br /&gt;&lt;b&gt;外观模式：&lt;/b&gt;提供了一个统一的接口，用来访问子系统中的一群接口。外观定义了一个高层接口，让子系统更容易使用。&lt;br /&gt;外观没有封装子系统的类，&lt;b&gt;外观只提供简化的接口&lt;/b&gt;。同时，依然将系统的功能完整地暴露出来。&lt;br /&gt;&lt;br /&gt;&lt;img style="width: 405px; height: 155px;" src="http://docs.google.com/File?id=dfpc9v7q_182gzdjxpg7_b" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;设计原则&lt;/b&gt;：最少知识原则：只和你的密友谈话。     &lt;br /&gt;&lt;br /&gt; &lt;b&gt;要点        &lt;/b&gt;&lt;br /&gt;     当需要使用一个现有的类而其接口并不符合你的需要时，就使用适配器。 &lt;br /&gt;     当需要简化并统一一个很大的接口或者一群发杂的接口时，使用外观。&lt;br /&gt;     适配器改变接口以符合客户的期望。&lt;br /&gt;     &lt;b&gt;外观&lt;/b&gt;将客户&lt;b&gt;从一个复杂的子系统中解耦&lt;/b&gt;。&lt;br /&gt;     实现一个适配器可能需要一番功夫，也可能不费功夫，视目标接口的大小与复杂度而定。&lt;br /&gt;     实现一个外观，需要将子系统组合进外观中，然后将工作委托给子系统执行。&lt;br /&gt;     适配器模式有两种形式：&lt;b&gt;对象适配器和类适配器&lt;/b&gt;，类适配器需要用到&lt;b&gt;多重继承&lt;/b&gt;。&lt;br /&gt;     你可以为一个子系统实现一个以上的外观。&lt;br /&gt;     &lt;b&gt;适配器&lt;/b&gt;将一个对象包装起来以改变其接口，&lt;b&gt;装饰者&lt;/b&gt;将一个对象包装起来以增加新的行为和责任，而&lt;b&gt;外观&lt;/b&gt;将一群对象包装起来以简化其接口。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Chapter 8：模板方法模式--封装算法&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;唉！在需要进入这个洞之前他原本是个好老板的，结果这全部都编程了我的工作了。你懂我的意思吧？他根本就不见人影！     &lt;br /&gt; 我们将要深入封装算法块，好让子类可以在任何时候都可以将自己挂接进运算里。 &lt;br /&gt;&lt;br /&gt;模板方法定义了一个算法的步骤，并允许子类为一个或多个步骤提供实现。 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;模板方法模式：&lt;/b&gt;在一个方法中定义一个算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下，重新定义算法中的某些步骤。&lt;br /&gt;对模板方式进行&lt;b&gt;挂钩&lt;/b&gt;，影响抽象类中的算法流程&lt;br /&gt; &lt;div id="rzzx" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 372px; height: 207px;" src="http://docs.google.com/File?id=dfpc9v7q_184drp3rwcp_b" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;设计原则&lt;/b&gt;：好莱坞原则：别调用(打电话给)我们，我们会调用(打电话)你。 &lt;br /&gt;     高层组件对待低层组件的方式是：别调用我们，我们会调用你。低层组建将自己&lt;b&gt;挂钩&lt;/b&gt;到系统上。&lt;br /&gt;&lt;br /&gt; &lt;b&gt;要点&lt;/b&gt;： &lt;br /&gt;     模板方法定义了算法的步骤，把这些步骤的实现延迟到子类。&lt;br /&gt;     模板方法模式为我们提供了一种代码复用的重要技巧。&lt;br /&gt;     模板方法的抽象类可以定义具体方法、抽象方法和钩子。&lt;br /&gt;     抽象方法由子类实现。&lt;br /&gt;     钩子是一种方法，它在抽象类中不做事，子类可以选择要不要去覆盖它。&lt;br /&gt;     为了防止子类改变模板方法中的算法，可以将模板方法声明为final。&lt;br /&gt;     好莱坞原则告诉我们，将决策权放在高层模块中，以便决定如何已经何时调用低层模块。&lt;br /&gt;     你将在真实世界代码中看到模块方法模式的许多变体，不要期待它们全都是一眼就被你认出来的。&lt;br /&gt;     策略模式和模板方法模式都封装算法，一个用组合，一个用继承。&lt;br /&gt;     工厂方法是模板方法的一种特殊版本。&lt;br /&gt;良好管理的集合 “当然我把集合都好好地封装起来了”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-501705563623723386?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/501705563623723386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=501705563623723386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/501705563623723386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/501705563623723386'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/head-first-5-8.html' title='《Head First 设计模式》5-8章'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2951109570563186642</id><published>2008-12-20T10:17:00.002+08:00</published><updated>2008-12-20T10:18:43.110+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='经济'/><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><title type='text'>财务报表分析作业</title><content type='html'>分析对象选的是用友软件（600588），18号晚完成了分析数据的录入，19日上午完成2/3，今天上午又完成了剩下的1/3。总的花费在16个小时左右，23p，8000字。纪念。&lt;br /&gt;&lt;br /&gt;有图片的word转到Online doc上有很多错误，Excel可以上传但还不能嵌到页面。下面只摘抄下总结吧：&lt;br /&gt;&lt;br /&gt;在偿债能力和资本结构方面，用友软件有着不错的短期偿债能力，债权的保证程度很高，企业所有者对企业的控制力很强，企业偿还本息的压力轻，但企业没有充分利用财务杠杆举债经营，具体体现在财务杠杆指数低等方面，但在五年间有了一定高，说明该企业的业务有较好的发展，对负债经营有了一定的运用。在长期偿债能力上，用友软件的利息保障倍数处于极高的水平，且在过去的几年内又有了较大的提高。&lt;br /&gt;&lt;br /&gt;在营运能力方面，该企业的该企业的总资产周转率和流动资产周转率处于逐年上升的态势，同时应收账款周转率也在逐年提高，说明了企业的运营能力和应收账款的管理水平在持续地提高。但是，该企业的总负债周转率呈M形波动，说明了用该企业利用负债资金创造效益的能力较弱且不稳定。同时，所有者权益周转率的稳步上升说明了企业投资者的权益基金创造收入的能力有所提高。五年间，该企业的营业周期和现金营业周期呈稳步降低的态势，说明了该企业的资金周转速度有所加快、流动性增强、资产的使用效率有所提高。&lt;br /&gt;&lt;br /&gt;在获利能力方面，该企业的销售净利率和销售毛利率都呈先减后增的U字形趋势，总体保持稳定，主营业务利润率呈先增后降的态势，可从绝对值看仍处在较高的水平，但营业利润率的下降幅度较大，说明企业通过日常经营活动获得利润的能力减弱。该企业的该企业的主营业务成本毛利率及主营业务成本利润率在03到05年逐年下降，但其绝对值仍保持在较高的水平，体现了该企业出色的获利能力。&lt;br /&gt;&lt;br /&gt;在投资报酬能力上我们可以看出，该企业的投资回报能力在04年后有了很大的提高，其盈利水平是稳定而又持续提高的。&lt;br /&gt;&lt;br /&gt;在现金流量部分，从分析数据我们可以看出，企业有着不错的运用现金偿还债务的能力，和经营获现能力，现金获利能力也很出色，同时企业也有着稳定的现金流，完全能够满足投资的需要。&lt;br /&gt;&lt;br /&gt;用友软件作为一个纯软件公司，代表了软件行业的普遍特点。首先在成本的构成上，固定资产方面的投入占的比重较少，且设备的更新换代有周期性，故导致了某些财务数据的非常规变化；其次在现金流量上，企业有着充裕的现金流，完全可以满足偿债和投资的需要；其三在资本构成上，由于处于新兴行业，创办历史较大，所以股权较为集中，所有者对企业的控制较强；其四在举债经营上，由于在软件行业，知识产权的重要性大大高于其它因素，而研发能力的提高不是光靠大的团队或者大的投入就可以做到的，加之企业的现金流较为充裕，所以并没有大量利用借债来扩大企业规模。虽然企业没有充分利用财务杠杆，但在不稳定的软件行业，保持较大的现金储备有利于企业长期稳定的发展。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2951109570563186642?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2951109570563186642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2951109570563186642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2951109570563186642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2951109570563186642'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/blog-post_20.html' title='财务报表分析作业'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-4783666799847891996</id><published>2008-12-18T22:34:00.002+08:00</published><updated>2008-12-18T23:16:45.360+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Excel数据整理</title><content type='html'>今天做财务报表分析的课程作业，我选择了用友软件作为分析对象，数据上采用了该公司02-06年五年的数据。数据的来源是html格式的年报。由于五年间的会计科目有所变化，再加上实际的报表和分析用的标准报表有所差异，如果一个个数据拷贝的话工作量还是很大的。我采用了以下的数据整理流程大大提高了效率：&lt;br /&gt;&lt;br /&gt;html --&amp;gt; &lt;b&gt;UltarEdit&lt;/b&gt;[正则表达式处理特殊符号] --列编辑，拷贝标题列和数据列--&amp;gt; &lt;b&gt;Excel临时表 &lt;/b&gt;--&amp;gt; 拷入标准表的标题列 --&amp;gt; 对照标准表，将临时表的标题列对准标准表 --&amp;gt;将临时表的数据列拷入标准表 --&amp;gt; 整理&amp;amp;填充缺失数据。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-4783666799847891996?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/4783666799847891996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=4783666799847891996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4783666799847891996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4783666799847891996'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/excel.html' title='Excel数据整理'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1528955952877173226</id><published>2008-12-18T11:12:00.002+08:00</published><updated>2008-12-18T11:13:23.716+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='经济'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>《货币战争》</title><content type='html'>&lt;div style="text-align: left;"&gt;今天早上七点半就起来了，窝床上看小说--《货币战争》。的确是颇有意味的一本书，抛开真实性不说--也许也不会有人认为这本书里讲的是真的，这本书让我了解了一下金融方面的历史学知识，我相信这些历史是是真实的，只是对这些历史的解读有些哗众取宠了。对于一些历史的解释作者的阴谋论也能自圆其说，可越到后来就出来了越多的矛盾，我不是指与历史现实的矛盾，而是书中的自相矛盾。于是越翻越快，翻到了十点半终于忍不住饥饿和口渴，翻完了这本书。不能不佩服作者的想象力、历史学知识和自圆其说的能力。有人在金庸的小说中推出了张三丰是小龙女和尹志平的私生子，也是引经据典，充满了想象力。&lt;br /&gt;&lt;br /&gt;下面的网上的书评，看看也蛮有意思的。&lt;br /&gt;&lt;a title="豆瓣书评--货币战争" href="http://www.douban.com/subject/2081876/" id="qyth"&gt;豆瓣书评--货币战争&lt;/a&gt;&lt;br /&gt;&lt;a title="《子虚乌有的货币战争》" href="http://www.cenet.org.cn/article.asp?articleid=29589" id="ap14"&gt;子虚乌有的货币战争&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1528955952877173226?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1528955952877173226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1528955952877173226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1528955952877173226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1528955952877173226'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/blog-post_18.html' title='《货币战争》'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6254652588686785454</id><published>2008-12-17T18:00:00.002+08:00</published><updated>2008-12-17T18:01:53.154+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><category scheme='http://www.blogger.com/atom/ns#' term='统计'/><title type='text'>讲座_信息检索_统计学习</title><content type='html'>今天下午在经院楼听了马志明院士的讲座：《数学在信息检索中的作用》。介绍了PageRank和他们团队最新的研究成果BrowersRank。这种算法使用用户的浏览行为作为网页评级的依据。采用的数据有用户在一个页面的停留时间和页面之间的跳转动作。使用这种算法可以有效地防止一些网站对搜索引擎的欺骗，得出较为客观的结果。&lt;br /&gt;&lt;br /&gt;这的确是一个很有创意而且有实际运用价值的想法。可问题是用户不一定只用IE，而且有些网站也许要很久也许永远都不能被用户所访问。这有个时效性的问题。我认为评级应该结合网络结构、页面内容和用户的浏览行为，这些方法是互为补充的，仅仅说哪种方法更好显然是没有意义的。&lt;br /&gt;&lt;br /&gt;另外讲到的就是二重统计学习，是马院士的团队在研究“搜索学习？”时发现简单的统计学习不能满足实际的需要，进行的开创性的研究。这部分我也没听明白，该是数据挖掘方面的内容吧。马院士也提到了现在统计正为搜索引擎提供了新的创意，而搜索的实际也促进的统计理论的进一步发展。可要真正将工程方面的东西和数学融会贯通又谈何容易。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6254652588686785454?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6254652588686785454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6254652588686785454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6254652588686785454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6254652588686785454'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/blog-post_17.html' title='讲座_信息检索_统计学习'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7479184745648888610</id><published>2008-12-17T13:44:00.002+08:00</published><updated>2008-12-17T18:01:06.144+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='设计模式'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>《Head First 设计模式》1-4章</title><content type='html'>《Head First》在去年初着实火了一把，我是年初买的这本书，然后回学校做毕业设计的时候看了几章，假期实习的时候看完了剩下的几章。那会烦心的事特别多，也没有读书的心情，看《重构》的时候发现很多设计模式方面的东西已经忘个精光，现在重读并做些笔记。部分内容来自CSDN下载的一份EXCEL格式的笔记，图片都来自GoF的经典。设计模式出来十年了，我却是在本科毕业以后才读的这本书，也许不用考研，我会早些接触模式，对我的编程实践应该会有很多的帮助。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;学习的方法：&lt;/b&gt;&lt;br /&gt;慢一点，思考得越多，需要记的就越少&lt;br /&gt;勤做练习，自己记笔记&lt;br /&gt;睡觉前不要看有难度的东西&lt;br /&gt;多喝水&lt;br /&gt;大声说出来&lt;br /&gt;听听你的大脑怎么说&lt;br /&gt;要有点感觉&lt;br /&gt;设计一些东西&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;chapter1：设计模式入门&lt;/b&gt;&lt;br /&gt;我们已经搬到对象村，刚刚开始着手设计模式……这里每个人都在使用设计模式。很快我们就会通过设计模式跻身上流社会。       &lt;br /&gt;       把模式装进脑子里，然后在设计和已有的运用中，寻找何处可以使用。&lt;br /&gt;&lt;br /&gt;CHANGE&lt;br /&gt;   &lt;b&gt;设计原则：&lt;/b&gt;找出应用中可能需要变化之处，把它们独立出来，不要和那些不需要变化的代码混在一起。   &lt;br /&gt;   把会变化的部分取出并封装起来，好让其他部分不会受到影响。   &lt;br /&gt;   结果如何？代码变化引起的不经意后果变少，系统变得更有弹性。   &lt;br /&gt;&lt;b&gt;&lt;br /&gt;   设计原则：&lt;/b&gt;针对接口编程，而不是针对实现编程。   &lt;br /&gt;   从现在开始，鸭子的行为将被放在分开的类中，此类专门提供某行为接口的实现。   &lt;br /&gt;   这样，鸭子类就不再需要知道行为的实现细节。   &lt;br /&gt;   "&lt;b&gt;针对接口编程&lt;/b&gt;真正的意思是""针对超类型&lt;b&gt;supertype&lt;/b&gt;编程"""   &lt;br /&gt;执行时根据实际情况执行真正的行为&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;设计原则：&lt;/b&gt;多用组合，少用继承。&lt;br /&gt;&lt;b&gt;has a&lt;/b&gt; maybe better than &lt;b&gt;is a.&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;   &lt;b&gt;策略模式：&lt;/b&gt;&lt;br /&gt;       定义了算法族，分别封装起来，让它们之间可以相互替换，此模式让算法的变化独立于使用算法的客户。&lt;br /&gt;&lt;div id="ieap" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_125grgftmcp_b" width="386" height="113" /&gt;&lt;br /&gt;&lt;/div&gt;    良好的OO设计必须具备&lt;b&gt;可复用、可扩展、可维护&lt;/b&gt;三个特性。   &lt;br /&gt;&lt;b&gt;可维护的OO系统&lt;/b&gt;:随时想到系统以后可能需要的变化以及应付变化的原则。&lt;br /&gt;&lt;br /&gt;模式不是被发明，而是被发现。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;chapter 2：观察者模式：让你的对象知悉现状&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;喂，Jerry，我正在通知大家，模式小组会议改到周六晚上，这次讨论的是观察者模式，这个模式最棒了！超级棒！你一定要来呀，Jerry。       &lt;br /&gt;&lt;br /&gt;   &lt;b&gt;观察者模式：&lt;/b&gt;        定义了对象之间的&lt;b&gt;一对多依赖&lt;/b&gt;，这样以来，当一个对象改变状态时，它的&lt;b&gt;所有依赖者&lt;/b&gt;都会收到通知并自动更新。&lt;br /&gt;   &lt;b&gt;&lt;br /&gt;设计原则&lt;/b&gt;：为了交互对象之间的松耦合设计而努力。   &lt;br /&gt;松耦合：依然可以交互，但不太清楚彼此的细节。&lt;br /&gt;&lt;div id="k6ks" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_126dv2nbgfw_b" width="398" height="192" /&gt;&lt;/div&gt;&lt;br /&gt;       &lt;div id="v.zm" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_128g3wwvwcb_b" width="381" height="142" /&gt;&lt;br /&gt;Subject:主题 Observer:观察者&lt;br /&gt;&lt;/div&gt;    &lt;b&gt;要点    &lt;/b&gt;&lt;br /&gt;       观察者模式定义了对象之间的&lt;b&gt;一对多&lt;/b&gt;关系。&lt;br /&gt;       主题，也就是可观察者用一个共同的接口来更新观察者。&lt;br /&gt;       观察者和可观察者之间用松耦合方式结合，可观察者不知道观察者的细节，&lt;b&gt;只知道观察者实现了观察者接口&lt;/b&gt;。&lt;br /&gt;       使用此模式时，你可从被观察者处推&lt;b&gt;push&lt;/b&gt;或拉&lt;b&gt;pull&lt;/b&gt;数据，然而，&lt;b&gt;推的方式被认为更正确&lt;/b&gt;。&lt;br /&gt;       有&lt;b&gt;多个观察者&lt;/b&gt;时，不可以依赖特定的通知次序。&lt;br /&gt;&lt;br /&gt;       Java有多种观察者模式的实现，包括了通用java.util.Observable&lt;br /&gt;       要注意java.util.Observable实现上所带来的一些问题。&lt;br /&gt;       如果有必要的话，可以实现自己的Observable，这并不难，不要害怕。&lt;br /&gt;       Swing大量使用了观察者模式，许多GUI框架也是如此。&lt;br /&gt;       此模式也被应用在许多地方。例如：JavaBeans、RMI。&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;chapter 3： 装饰者模式&lt;/b&gt;&lt;br /&gt;我曾经以为男子汉应该用继承处理一切。后来我领教到运行时扩展，远比编译时期的继承威力大。看看我现在光彩的样子。       &lt;br /&gt;&lt;br /&gt;   &lt;b&gt;装饰模式&lt;/b&gt;：动态地将责任附加到对象上。若要扩展功能，装饰者提供了比继承更有弹性的替代方案。&lt;br /&gt;   可以在不修改底层代码的情况下，给代码赋予新的职责。&lt;br /&gt;&lt;div id="hos3" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_129d5mrz672_b" width="379" height="169" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;div id="jbai" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_131hq4r25c6_b" width="380" height="165" /&gt;&lt;/div&gt;&lt;br /&gt;设计原则&lt;/b&gt;：类应该对扩展开发，对修改关闭。   &lt;br /&gt;&lt;br /&gt;   &lt;b&gt;要点1    &lt;/b&gt;&lt;br /&gt;       装饰者和被装饰者对象有&lt;b&gt;相同的超类型&lt;/b&gt;。&lt;br /&gt;       你可以用&lt;b&gt;一个或多个装饰者&lt;/b&gt;包装一个对象。&lt;br /&gt;       既然装饰者和被装饰对象有相同的超类型，所以在任何需要原始对象（被包装）的场合，可以用装饰过的对象&lt;b&gt;代替&lt;/b&gt;它。&lt;br /&gt;       装饰者可以在所委托被装饰者的行为之前与/或之后，&lt;b&gt;加上自己的行为&lt;/b&gt;，以达到特定的目的。&lt;br /&gt;       对象可以在任何时候被装饰，所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象。&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;要点2    &lt;/b&gt;&lt;br /&gt;       继承属于扩展形式之一，但不见得是达到弹性设计的最佳方案。&lt;br /&gt;       在我们的设计中，应该允许行为可以被扩展，而无须修改现有的代码。&lt;br /&gt;       组合和委托可用于在运行时动态地加上新的行为。&lt;br /&gt;       除了继承，装饰者模式也可以让我们扩展行为。&lt;br /&gt;       装饰者模式意味着一群装饰者类，这些类用来包装具体组件。&lt;br /&gt;       装饰者类反映出被装饰的组件类型（他们具有相同的类型，都经过接口或继承实现）&lt;br /&gt;       装饰者可以在被装饰者的行为前面与/或后面加上自己的行为，甚至将被装饰者的行为整个取代掉，而达到特定的目的。&lt;br /&gt;       你可以用无数个装饰者包装一个组件。   &lt;br /&gt;       装饰者一般对组件的客户是透明的，除非客户程序依赖于组件的具体类型。   &lt;br /&gt;       装饰者会导致设计中出现许多小对象，&lt;b&gt;如果过度使用，会让程序变得很复杂&lt;/b&gt;。   &lt;br /&gt;&lt;br /&gt;只有针对抽象组件类型编程时，才不会因为装饰者而受到影响。&lt;br /&gt;通常有工厂或生成器之类的模式创建。&lt;br /&gt;&lt;br /&gt;Java String&lt;br /&gt;FilterInputStream: 一个抽象装饰者。&lt;br /&gt;&lt;b style="color: rgb(102, 0, 0);"&gt;chapter 4：工厂模式--烘烤OO的精华            &lt;/b&gt;&lt;br /&gt;   认识工厂方法模式       &lt;br /&gt;       所有工厂模式都是用来封装对象的创建   &lt;br /&gt;       工厂方法模式通过让子类决定该创建的对象是什么，来达到将对象创建的过程封装的目的。   &lt;br /&gt;  &lt;br /&gt;&lt;b&gt;组成元素        &lt;/b&gt;&lt;br /&gt;       &lt;i&gt;创建者Creator类&lt;/i&gt;   &lt;br /&gt;           它定义了一个抽象的工厂方法，让子类实现此方法制造产品。&lt;br /&gt;           创建者通常会包含依赖于抽象产品的代码，而这些抽象产品由子类制造。创建者不需要真的知道在制造哪种具体产品。&lt;br /&gt;       &lt;i&gt;产品类：&lt;/i&gt;工厂生产产品。对PizzaStore来说，产品就是Pizza。   &lt;br /&gt;  &lt;br /&gt;另一个观点：&lt;b&gt;平行的类层级        &lt;/b&gt;&lt;br /&gt;       为什么产品类和创建者类是平行的？都是抽象类，且都有许多具体的子类，每个子类都有自己特定的实现。   &lt;br /&gt;       NYPizzaStore所封装的是关于如何制作纽约风味的比萨。工厂方法就是封装这种知识的关键所在。   &lt;br /&gt;  &lt;br /&gt;&lt;b&gt;工厂方法模式：&lt;/b&gt;定义了一个创建对象的接口，但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。   &lt;br /&gt;   &lt;b&gt;&lt;div id="fyms" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_132gtn6wng9_b" width="378" height="126" /&gt;&lt;/div&gt;&lt;br /&gt;要点：        &lt;/b&gt;&lt;br /&gt;       Creator是一个类，它实现了所有操作产品的方法，但不实现工厂方法。   &lt;br /&gt;       Creator所有的子类都必须实现这个抽象的factoryMethod方法。   &lt;br /&gt;       所有的产品必须实现一个共同的接口，这样一来，使用这些产品的类，就可以引用这个接口，而不是具体类。   &lt;br /&gt;       ConcreteCreator实现了factoryMethod，以实际制造出产品。   &lt;br /&gt;       ConcreteCreator负责创建一个或多个具体产品，只有ConcreteCreator类知道如何创建这些产品。   &lt;br /&gt;       concrete具体的adj   &lt;br /&gt;&lt;br /&gt;   &lt;b&gt;设计原则&lt;/b&gt;：要依赖抽象，不要依赖具体类。       &lt;br /&gt;   依赖倒置原则，不能让高层组件依赖低层组件，而且不管高层或低层组件，2者都应该依赖于抽象。       &lt;br /&gt;       所谓高层组件，是由其他低层组件定义其行为的类。   &lt;br /&gt;       例如，PizzaStore是个高层组件，因为它的行为是由比萨定义的。   &lt;br /&gt;   依赖倒置原则，究竟倒置在哪里？       &lt;br /&gt;   &lt;b&gt;避免OO设计中违反依赖倒置原则        &lt;/b&gt;&lt;br /&gt;   1    变量不可以持有具体类的引用。   &lt;br /&gt;           如果使用new，就会持有具体类的引用。你可以改用工厂来避开这样的做法。&lt;br /&gt;   2    不要让类派生自具体类。   &lt;br /&gt;           如果派生自具体类，你就会依赖具体类，请派生自一个抽象（接口或抽象类）&lt;br /&gt;   3    不要覆盖基类中已实现的方法。   &lt;br /&gt;           如果覆盖基类已实现的方法，那么你的基类就不是一个真正适合被集成的抽象。基类中已实现的方法，应该由所有的子类共享。&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;抽象工厂模式        &lt;/b&gt;&lt;br /&gt;       提供一个接口，用于创建相关或依赖对象的家族，而不需要明确指定具体类。   &lt;br /&gt;   比较工厂方法和抽象工厂。。。       &lt;br /&gt;&lt;div id="wmdb" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dfpc9v7q_133hkxxk8dg_b" width="377" height="170" /&gt;&lt;/div&gt;&lt;b&gt;要点1：        &lt;/b&gt;&lt;br /&gt;       所有的工厂都是用来封装对象的创建。   &lt;br /&gt;       简单工厂，虽然不是真正的设计模式，但仍不失为一个简单的方法，可以将客户程序从具体类解耦。   &lt;br /&gt;       工厂方法使用集成：把对象的创建委托给子类，子类实现工厂方法来创建对象。   &lt;br /&gt;       抽象工厂使用对象组合：对象的创建被实现在工厂接口所暴露出来的方法中。   &lt;br /&gt;       所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合。   &lt;br /&gt;       工厂方法允许类将实例化延迟到子类进行。   &lt;br /&gt;       抽象工厂创建相关的对象家族，而不需要依赖它们的具体类。   &lt;br /&gt;       依赖倒置原则，知道我们避免依赖具体类型，而要尽量依赖抽象。   &lt;br /&gt;       工厂是很有为例的技巧，帮助我们针对抽象编程，而不要针对具体类编程。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7479184745648888610?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7479184745648888610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7479184745648888610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7479184745648888610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7479184745648888610'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/head-first-1-4.html' title='《Head First 设计模式》1-4章'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2757646180200969452</id><published>2008-12-17T09:15:00.002+08:00</published><updated>2008-12-17T09:17:14.348+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='系统'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>《UNIX》超级工具</title><content type='html'>《UNIX超级工具》也是暑假的时候买的，两本，打五五折的时候买的，可还是花了七十多。有点Geek的味道。随便地翻了很久，要说学到啥也谈不上，这两本书本来就是随便翻的。不知不觉，这两部书已经做满了记号，趁现在有些时间，做个简单的整理。&lt;br /&gt;&lt;br /&gt;有人说程序员的&lt;b&gt;七种武器&lt;/b&gt;是：&lt;b&gt;正则表达式、编程语言、数据库、算法、软件调试、开发环境&lt;/b&gt;；在UNIX环境下，灵巧而强大的工具已经充斥其间，我们所缺的只是一个善于思考的大脑。在UNIX下，你可以不必关心一些细枝末节的东西，从而把注意力集中到真正的思考上，工具和思想在这里充分地协调起来。在这本书里充斥着技巧、工具和表格。简洁而实用。唯一不足的地方就是体系混乱，不过既然是随便翻翻，这个缺点也就不能称之为缺点了。&lt;br /&gt;&lt;br /&gt;我基础还太差，看这种充满技巧的书有只见树木不见森林之感。因而要在这本书里整理出什么来还真是个琐碎而吃力的过程，打算以后系统地学习LPI LINUX教程时再结合本书做些整理。在此就先搁置吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2757646180200969452?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2757646180200969452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2757646180200969452' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2757646180200969452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2757646180200969452'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/unix.html' title='《UNIX》超级工具'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5804247222878457557</id><published>2008-12-16T23:27:00.003+08:00</published><updated>2008-12-16T23:36:20.627+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='重构'/><title type='text'>《重构》1-4章_基础</title><content type='html'>上个礼拜拿到了《重构》，读了前面的几章。还是蛮有意思的一本书，作者很幽默，译的也不错，只是价钱贵了点，有那么一点心疼。经典的书大多读起来不轻松，读快了啥也学不到，可有些经典的书读着有趣，随便翻翻有意无意间就会有比较大的收获，比如《代码大全》、《重构》等等。道理简单而实用，例子也恰到好处，加之文章穿插的点点幽默，实在是大快人心。&lt;br /&gt;&lt;br /&gt; “记性好忘性大，故凡有所的必记诸文字”，译者熊节这话说得贴切。今天拿到的Maxtor的移动硬盘，广告居然叫“Save your life”。很好。不时时记录时时备份时时回顾，像我这等愚笨之人很快就会忘记生活了啥，这不能不说是一件可悲之事。&lt;br /&gt;&lt;br /&gt;在&lt;a href="http://old.blog.edu.cn/user2/26669/archives/2007/1753406.shtml" id="oc0g" title="http://old.blog.edu.cn/user2/26669/archives/2007/1753406.shtml"&gt;http://old.blog.edu.cn/user2/26669/archives/2007/1753406.shtml&lt;/a&gt; 上发现了《重构》的笔记，我就直接厚颜无耻得拿来，然后再稍稍加些东西吧。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;译序 --&lt;/b&gt;熊节&lt;br /&gt;快速迭代&amp;amp;RAD --&amp;gt; crack的问题解决方式，在混沌的循环往复中实现需求--解构的美。&lt;br /&gt;&lt;b&gt;软件开发的理想国&lt;/b&gt;--在设计前期使用模式往往导致过度工程&lt;br /&gt;重构--空气和水&lt;br /&gt;&lt;br /&gt;&lt;b&gt;前言&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;设计不再是一切动作的前提，而是在整个开发过程中逐渐浮现出来。&lt;br /&gt;重构：有纪律，经过训练的，有条不紊。&lt;br /&gt;聚沙成塔，从根本上改变设计&lt;br /&gt;&lt;b&gt;&lt;br /&gt;第一章、重构：第一个案例&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;例子：影片出租店用的程序。操作者告诉程序：顾客租了哪些影片、租期，程序就根据租期和影片类型计算费用；还要为常客计算点数。点数的计算与是否为新片有关系。程序为每次租用打印报表。&lt;br /&gt;&lt;br /&gt;措施：同一段代码不要出现两次，应该用函数来定义。否则将来还要修改多处，容易引进错误。&lt;br /&gt;&lt;br /&gt;需求变化1：用html方式输出报表。&lt;br /&gt;需求变化2：要改变电影的分类方式，当然会影响收费和点数的计算，但是具体方案还没确定。&lt;br /&gt;&lt;br /&gt;经验：不论用户提出什么方案，你唯一能得到的保证就是用户会在6个月内修改。&lt;br /&gt;&lt;i&gt;（这条经验很好玩，相当于说，你根本无法保证用户的需求不变化，唯一能得到的保证就是用户需求一定会变化。）&lt;/i&gt;&lt;br /&gt;如果你发现自己需要为程序添加一个特性，但代码结构使你无法方便地那么做，则&lt;b&gt;先重构再添加特性&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;重构第一步&lt;/b&gt;：为即将重构的代码建立测试环境。这是永远的第一步。&lt;br /&gt;修改必须依赖测试，否则很容易进入新的bug，而且非常难debug。&lt;br /&gt;重构之前，首先检验自己是否有一套可靠的测试机制，这些测试机制必须有自我检验能力。&lt;br /&gt;&lt;br /&gt;措施：修改长的离谱的函数，并把函数移动到合适的class中去。&lt;br /&gt;措施：修改变量的名字，使程序更可读。&lt;br /&gt;&lt;br /&gt;note：&lt;b&gt;任何一个傻瓜都可以写出计算机可以理解的代码。只有写出人类容易理解的代码，才是优秀的程序员。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;阅读代码的时候，我经常进行重构。这样我就不断地把我的理解嵌入到代码中，才不会遗忘我曾经理解的东西。&lt;br /&gt;&lt;br /&gt;如果一个类成员函数没有用到所在类的数据成员，则要考虑这个函数是否放错了位置。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;尽量消除临时变量&lt;/b&gt;。临时变量往往形成问题，可能导致大量参数传来传去。在长长的函数中不易读。当然会付出性能上的代价。&lt;br /&gt;作者的意思是，如果临时变量需要好几行来计算得到，就把临时变量的计算抽取为函数，称为query method。&lt;br /&gt;&lt;br /&gt;重构以微小的步伐修改程序，及时发现。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;运用多态取代switch、if/else。&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;一部影片可以在生命周期内修改自己的分类，但是一个对象却不能在生命周期内修改自己的类型（class）。--解决办法：state pattern&lt;br /&gt;建立price类以及三个子类，与价格相关的代码移动到price相关类中。movie中设置一个price类型的成员对象。&lt;br /&gt;price类中设置一个虚函数getprice，再实现一个默认的getpoints，让newprice子类去覆盖它。&lt;br /&gt;把类型相关的代码用state/strategy代替。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;本章总结&lt;/b&gt;：&lt;br /&gt;extract method: 把长函数中的某部分抽取出来。把临时变量的计算抽取为函数（query method）。&lt;br /&gt;move method: 看method使用哪个类的信息，就移动到哪个类中去。&lt;br /&gt;replace conditional with polymorphism&lt;br /&gt;self encapsulate filed ？这个是啥？&lt;br /&gt;replace type code with state/strategy&lt;br /&gt;&lt;br /&gt;&lt;b&gt;重构的节奏&lt;/b&gt;：测试、小修改、测试、小修改。。。&lt;br /&gt;重构后的程序风格将十分不同于过程化的风格。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第二章 重构原则&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;重构定义&lt;/b&gt;：对软件内部结构的一种调整，目的是在不改变软件的外部行为的前提下，提高可理解性，降低修改成本。&lt;br /&gt;注意，&lt;b&gt;重构的目的不是提高性能&lt;/b&gt;。&lt;br /&gt;&lt;b&gt;高效且受控&lt;/b&gt;的代码整理模式。&lt;br /&gt;&lt;b&gt;两顶帽子&lt;/b&gt;：添加新功能和重构。&lt;br /&gt;开发过程中，需要经常换帽子戴，无论何时，都该清楚你戴的是哪顶帽子，而且&lt;b&gt;不能&lt;/b&gt;同时戴两顶帽子。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;为什么要重构？&lt;/b&gt;&lt;br /&gt;1、改进软件设计。重构就是要让所有代码回到应该在的位置。重构还可以消除重复代码。代码结构的流失是累积性的。&lt;br /&gt;2、使软件更容易理解。修改代码，让代码反映我的意图。重构可以帮助你看到你以前看不到的设计层面的东西。重构带你到更高的理解层次上。&lt;br /&gt;3、帮助你debug。弄清楚程序结构的同时，也很清楚地看到自己所做的一些假设。做个有着&lt;b&gt;优秀习惯&lt;/b&gt;的好程序员。&lt;br /&gt;4、助你提高编程速度。良好设计才是快速开发软件的根本。&lt;br /&gt;&lt;br /&gt;重构应该&lt;b&gt;随时随地&lt;/b&gt;进行。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;三次法则&lt;/b&gt;：如果第三次做类似的事情，就应该重构。Three strikes and you refactor.&lt;br /&gt;添加功能时重构&lt;br /&gt;修改错误时重构&lt;br /&gt;复审代码时重构。复审（code review）就是别人看你的代码。&lt;br /&gt;不必想像代码&lt;b&gt;应该是什么&lt;/b&gt;，可以看见它&lt;b&gt;是什么样&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;为什么重构有用？kent beck&lt;br /&gt;&lt;br /&gt;&lt;b&gt;重构的方向&lt;/b&gt;：容易阅读；消除重复逻辑（代码）；新的改动不会危及现有行为；尽可能简单表达条件逻辑。&lt;b&gt;摆脱束缚的道路&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;间接层和重构&lt;/b&gt; kent beck&lt;br /&gt;&lt;br /&gt;间接层是双刃剑，需要更多的管理，难以阅读。但是，间接层的价值是：&lt;br /&gt;&lt;br /&gt;1、允许逻辑共享；&lt;br /&gt;2、对“意图”和“实现”分开解释。class和函数的名字可以看作你的意图，其内部代码是其实现。如果class和函数以“更小的意图”来编写，则“实现”更近距离地和“意图”接触。&lt;br /&gt;3、将变化隔离。&lt;br /&gt;4、把条件逻辑用多态来表示，往往能增加清晰度并提高弹性。&lt;br /&gt;&lt;br /&gt;如果增加一个异常。。。为了控制这种情况，为一个pakage定义一个super异常，这个packge下的所有异常都继承自它。这样就可以新增异常了。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;重构与设计&lt;/b&gt;互补。重构降低了预先设计的压力。可以带来更简单的设计。在设计时仍然考虑各种可能的变化和更为灵活的设计，但是要考虑：把一个简单的方案重构为灵活的方案需要多大代价？&lt;br /&gt;&lt;br /&gt;教训：哪怕你完全了解系统，也请实际测量它的性能，不要臆测。（或许潜台词是，你也许了解程序的架构和各种细节，但是你不一定了解系统中代码的执行率。）&lt;br /&gt;&lt;br /&gt;要想优化性能，必须认真测量。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;重构与性能&lt;/b&gt;：重构的确会使软件的运行变慢，但它使优化阶段的性能调整更容易。&lt;br /&gt;efficient:高效；effective：有效&lt;br /&gt;首先编写出可调的软件，然后调整它以获得足够的速度。&lt;br /&gt;时间预算法  &amp;gt;&amp;gt; 持续关注发 &amp;gt;&amp;gt; 90%"发现热点，去除热点"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第三章：代码的坏味道&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;知道How不代表知道When&lt;/b&gt;，决定何时重构、何时停止和知道重构机制同样重要。&lt;br /&gt;没有任何知识规矩能比得上一个见识广博者的直觉。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1、重复代码&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;同一个类里的两个函数有相同的表达式。方法：extract method&lt;br /&gt;&lt;br /&gt;两个兄弟子类里含有相同的表达式。方法：对两个类使用extract method，然后使用pull up method，放到父类中。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2、过长函数&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;现在的编译器优化已经基本消除了函数调用开销。&lt;br /&gt;&lt;br /&gt;小函数容易理解。让函数容易理解的关键是，给函数起一个合适的名字。&lt;br /&gt;&lt;br /&gt;每当感觉需要用注释说明什么的时候，就把那部分提取成函数，以其用途而不是实现方式命名。&lt;br /&gt;&lt;br /&gt;其实关键不在于函数的长度，而在于“做什么”和“如何做”之间的语义距离。&lt;br /&gt;&lt;br /&gt;99%的场合下，只需要使用extract method&lt;br /&gt;&lt;br /&gt;对于大量的参数，可以引入参数对象；对于临时变量，可以使用query method。&lt;br /&gt;&lt;br /&gt;杀手锏：replace method with method object.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3、过大的类&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;很容易产生代码重复。&lt;br /&gt;&lt;br /&gt;产生太多的临时变量。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4、过多的参数&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;类可以减少参数，因为成员函数需要的很多参数可以在类中找到。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5、发散式变化(divergent change)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;当需求变化一点时，一个类需要修改好几个函数，则这个类或许应该被拆成两个类。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6、散弹式修改（shotgun surgery）&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;当需求变化一点时，需要对多个类做出小修改。应该使用move method和move field把要修改的代码放到一个类中。&lt;br /&gt;&lt;br /&gt;原则是：将一起变化的东西放在一块儿。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;7、依恋情结（feature envy）&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;某个函数对某个宿主类以外的类特别依赖。症结往往是数据。extract method , move method&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;8、数据泥团（data clumps）&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;常常可以看到：两个类中有一个以上的相同数据成员，许多函数中有相同的参数。这些总在一起出现的数据应该提取为一个类。&lt;br /&gt;&lt;br /&gt;更重要的是，可以帮助寻找feature envy。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;9、基本类型偏执（primitive obsession）&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;很多程序员懒得定义一些小类。&lt;br /&gt;&lt;br /&gt;你可以定义一些与基本类型差不多的小class，比如字符串、日期、含一个起始值和一个结束值的range class、电话号码等等特殊的字符串。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;10、swith&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;switch的问题在于重复。？&lt;br /&gt;&lt;br /&gt;如果要添加一个case子句，很容易出错。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;11、平行继承体系&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;就是两套class有相似的继承体系。当你为一个类增加子类时，必须为另一个类增加一个平行的子类。&lt;br /&gt;&lt;br /&gt;shotgun surgery的一种特殊情况。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;12、冗余类&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;对于没用的类、体系结构坚决消除。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;13、过多考虑未来不确定的需求&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;如，看不到用处的扩展性。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;14、很少用的数据成员&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;有的field可能只在极少情况下被使用。可以为这个field及其相关代码extract class。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;15、过度耦合的消息链&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;没懂。也许后面有例子会好一点。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;16、中间人&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;太多的delegation，就产生了中间人。中间人几乎不干实事，应该消除。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;17、过分亲密&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;两个类过于亲密，互相探究彼此的private部分。有很多方法解决这个问题。可以move method,move field，extract class等等。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;18、异曲同工的类/函数&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;两个函数功能一样但是签名不一样。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;19、不完美的程序库&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;如果程序库不满足需求，可以：introduce foreign method, introduce local extension&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;20、纯粹的数据类&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;就像java bean?也挺有用的啊&lt;br /&gt;&lt;br /&gt;只有fieild和getter setter。应该把调用它的那些代码抽取到这个类中，以隐藏一部分getter/setter&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;21、拒绝继承&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;如果子类拒绝继承父类的某些field、某些函数的实现，问题不算很大，甚至可以不用管；但是如果子类拒绝继承父类的接口，这就出现问题了。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;22、过多的注释&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;当你需要撰写注释，请先尝试重构，试着让所有的注释都变得多余。&lt;br /&gt;&lt;br /&gt;注释常常把我们带到之前提到的各种smell。如果注释要解释一块代码做了什么，请extract method；如果已经提取出函数但是仍然需要注释，则请rename method；如果需要说明某些入口条件，请引入断言。&lt;br /&gt;&lt;br /&gt;注释可以写todo，why。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;第四章:构筑测试体系&lt;br /&gt;seft-testing Code&lt;/b&gt;: 确保所有的测试都完全自动化，让它们自己检验自己的测试结果。&lt;br /&gt;极限编程者都是十分专注的测试者。&lt;br /&gt;testing main： 每个Class都需要有一个用于测试的main()&lt;br /&gt;频繁地运行测试，每次编译都把测试考虑进去。&lt;br /&gt;编写测试代码时，先让它们失败--failures &amp;lt;--&amp;gt; errors&lt;br /&gt;bug --&amp;gt; 编写单元测试&lt;br /&gt;编写不完善的测试并实际运行，好过对完美测试的无尽等待。&lt;br /&gt;必然有错 --&amp;gt; 抛出异常&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5804247222878457557?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5804247222878457557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5804247222878457557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5804247222878457557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5804247222878457557'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/1-4.html' title='《重构》1-4章_基础'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6309572945610567952</id><published>2008-12-16T16:29:00.003+08:00</published><updated>2008-12-16T22:21:20.653+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='管理'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>《执行》--突破</title><content type='html'>&lt;font size="2"&gt;刚刚考完的高等数理统计，是我进入上财以来遭遇的最大的失败，考前拼死拼活看了两天书，结果看来是挂了。觉得有些惭愧，完全违背了我读研的本意，要照这样下去，我还不如退学找个工作实在。&lt;br&gt;&lt;br&gt;我不能说不努力，开学到现在三个月，我自己觉得也很累。脑子累，心累，身体也累。一直用力寻找着突破，可结果是让自己越来越累。大学时每学期或多或少都能有些收获，都能对自己的履历有所充实，可现在三个月过去了，除了累，除了不好的成绩，我好像并没有得到什么。&lt;br&gt;&lt;br&gt;现在的我比任何时候都更需要一种简单的哲学，一种上进而充满张力的方式。前几天抽空看了下《执行--完成任务的学问》，现在顺便写些心得，同时也当作对自己的勉励。&lt;br&gt;&lt;br&gt;&lt;b&gt;Execution&amp;nbsp; &lt;/b&gt;&lt;/font&gt;--the discipline of getting things done。我并不认为执行是一个新鲜的事务，“实事求是”，“实践是检验真理的唯一标准”，这些话说了好多年，可说多了反而忘了确切的含义，到现在反而要老外来告诉我们实事求是的含义，不能不说有点可悲。在我看来，执行不光是一个企业的事情，在自身的层面上，我们更需要这种实事求是的精神。在《卓有成效的管理者》这本书中，作者认为所有的知识工作者在某种意义上来说也是管理者，在时时刻刻地管理着自己的时间、精力和行为。我目前面临的困境只有通过实事求是的分析和卓有成效的执行才能突破，我依然坚信我的选择，同时，就算我做错了，我也无路可退。&lt;br&gt;&lt;br&gt;&lt;div style="text-align: left;"&gt;下面的读书笔记摘自&lt;a title="“三真阁”" href="http://www.justlaugh.com.cn/2008/11/26/zx/" id="u0sx"&gt;“三真阁”&lt;/a&gt; 。&lt;br&gt;&lt;br&gt;执行是一门学问，是战略的一个内在组成部分。执行是一套暴露现实并根据现实采取行动的系统化的流程。执行应当是一个组织文化中的核心元素：执行必须渗透到企业的回报系统和行为准则当中，它既是企业文化，也是塑造企业文化的方法。 &lt;br&gt;&lt;br&gt;贯彻执行文化的基础是要在企业中推行坦诚、实事求是的交流活动和企业文化，而这就要求领导者通过亲身参与推动文化变革、战略制订乃至运营计划 落实和跟进，充分了解自己的企业和员工，尽一切机会对管理人员进行影响和指导，但这不等于要求领导者事必躬亲，而是要按照一个事先制订的跟进计划，对关键 点和关键环节的执行进行关注、对结果及时评估和应变，就像柳传志在专文推介中说的，“有效的执行是需要领导者亲力亲为的系统工程，而不是对企业具体运行的 细枝末节的关心。” &lt;br&gt;　　 &lt;br&gt;执行的关键就在于把战略与企业的实际情况、实际能力结合起来，建立相辅相成、近乎一体的战略、人员与运营流程。 &lt;br&gt;&lt;br&gt;人员流程的关键是，在战略的高度进行人力资源管理，把人员的招聘、评估、培养和调动与岗位需求切实的统一起来——而岗位需求恰恰是建立在企业的战略和运营要求之上的，以坦诚的态度、统一透明的评估标准、及时并集思广益的评估和沟通活动，来推动人员流程发挥作用。 &lt;br&gt;&lt;br&gt;战略流程的关键是，在制订的时候就充分考虑其可执行性，也就是人员的要求是否满足，是否能够落实为运营计划。战略制订和评估过程中，要充分调 动真正的执行者参与讨论，确保对竞争环境和执行能力已经具有充分准确的了解，保证战略在执行部门得到充分的理解和支持，在人员和运营计划的落实上没有问 题。领导者还可以通过此过程指导员工，推动文化变革，凝聚团队，激发斗志。领导者还要在战略评估结束之后的跟进中确认讨论共识，并将其作为战略实施过程中 的进程指标，强调在战略、人员和运营之间建立必要的联系。 &lt;br&gt;&lt;br&gt;运营流程的关键是，通过更广泛的参与（各部门的执行团队，甚至所有成员），对竞争环境和未来变化假设进行更仔细的考察讨论，对可能开展的项 目对照战略方向进行取舍，将战略计划落实为更详细的企业目标、行动计划和跟进措施（及时的评估和应急计划），为工作开展提供明确的指导方向。通常情况下， 一份运营计划包括了你的企业准备在一年之内完成的项目——与企业预算和财务目标相结合，而预算和财务目标恰恰应该根据企业的运营计划来确定。 &lt;br&gt;&lt;br&gt;本书其他细化内容其实就是各门科管理科学的论述、操作实务和案例分析，有益于对照自查。&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6309572945610567952?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6309572945610567952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6309572945610567952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6309572945610567952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6309572945610567952'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/blog-post_16.html' title='《执行》--突破'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8771832907798468347</id><published>2008-12-12T15:17:00.002+08:00</published><updated>2008-12-16T23:30:50.928+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><category scheme='http://www.blogger.com/atom/ns#' term='电影'/><title type='text'>Life is light</title><content type='html'>今天看了《布拉格之恋》，很长的一部电影，讲述着冗长无奈而又无从逃避的生活。《生命中不能承受之轻》，高中时看过这本书，以后逐渐淡忘，相信命运靠的是实实在在的打拼。进了大学就远离了诗歌、散文、小说。参考手册几乎成了我最喜欢的书。&lt;br&gt;&lt;br&gt;上海的确是一个容易诞生小资情感的地方。因为在这个地方，人太容易发觉自己的无足轻重，太需要麻醉。我依旧是个无趣而又无足轻重的人，小资离我实在太远，生命是轻的，也许没有意义。但我依然会选择打拼，更实在，更踏实。既然原本就没有意义，我也自然不用为之悲伤。&lt;br&gt;&lt;br&gt;这学期看了很多书，却什么也没做，依旧卑微地努力，只希望今天的自己比昨天能多些什么。却也许什么都没得到。我们都在赶路，只有在回忆中才能寻找偶尔的满足。&lt;br&gt;&lt;br&gt;喝杯咖啡，继续战斗。&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8771832907798468347?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8771832907798468347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8771832907798468347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8771832907798468347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8771832907798468347'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/life-is-light.html' title='Life is light'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7300291956340277898</id><published>2008-12-09T13:20:00.006+08:00</published><updated>2008-12-10T10:40:35.110+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='English'/><title type='text'>Cute Communism</title><content type='html'>&lt;iframe src='http://docs.google.com/EmbedSlideshow?docid=dfpc9v7q_68cbhg6958' frameborder='0' width='410' height='342'&gt;&lt;/iframe&gt;&lt;br /&gt;英语口语课的演示，胡乱搜集了些图片，拼凑了几张slide。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7300291956340277898?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7300291956340277898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7300291956340277898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7300291956340277898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7300291956340277898'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/blog-post_09.html' title='Cute Communism'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-583862216892467035</id><published>2008-12-03T22:56:00.004+08:00</published><updated>2008-12-16T22:23:26.231+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>爱、策略、重构</title><content type='html'>每次上金融博弈那个个性的老头总会给我些启发，如下：&lt;br&gt;&lt;br /&gt;今天的开篇词是“爱”，老头摘了圣经中的一段话作为阐释，具体记不清了，反正是大爱无形的那种爱。然后他坦承了他老婆逼着他说爱，那老头勉勉强强婚前说了一次，然后就再也没说过。他很坦诚地说他也不知道啥是爱，他觉得对别人的爱说到底是爱自己。那老头一定是水瓶座的，反正我也这么觉得.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;然后是正题，讲到了策略设计，很有意思的话题，我觉得工资的定价机制也是个策略问题，也就是个博弈论的问题。一般企业都有固定的职级和工资级别，职级是公开的而工资的基本却不透明，这肯定有着其中的道理，而且也许不那么简单，不仅仅是激励和士气的权衡。以后空了再找些相关内容看看。&lt;br /&gt;&lt;br&gt;&lt;br /&gt;然后今天又到了一批书，《重构》、《编程之美》、《执行力》、《卓有成效的管理》等等。这两天买书花了300多块钱，都是计算机、经管、投资方面的经典之作。愿读完能有些提高吧。&lt;br /&gt;&lt;br&gt;&lt;br /&gt;昨天参加竞选失败，总体来说一是由于开学以来一直忙着自己的事情，和大家有些脱节；二来是个平衡问题，一些无意的因素让我处在不利的位置；三来竞选演讲做得实在很烂，犯了一些大忌。虽然有点郁闷，但我并没损失什么，对我的现在和将来也不会有什么影响，其次我也发现了自己存在着一些问题，需要调整，用傻一点的话就是“重构”；个性的调整也是个迭代的过程。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-583862216892467035?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/583862216892467035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=583862216892467035' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/583862216892467035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/583862216892467035'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/blog-post_03.html' title='爱、策略、重构'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5757259044956463315</id><published>2008-12-01T18:33:00.003+08:00</published><updated>2008-12-16T22:24:44.011+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>时间</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/STO9lSBm83I/AAAAAAAADvY/sRJ9Xeix-hY/s1600-h/DSCF0596.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://1.bp.blogspot.com/_afohQU5wMHo/STO9lSBm83I/AAAAAAAADvY/sRJ9Xeix-hY/s160/DSCF0596.JPG" border="0" /&gt;&lt;/a&gt;忽然间就要考试了，这学期天天忙碌，却不知忙的啥，所谓结构化混日子，说的就是我现在这样子吧。还坚信努力总有回报吧，SNA和高统，这半个月就彻彻底底地交给你们啦。爬山虎，看着还像是秋天，其实已是冬日。这植物，和我一般迟钝那。&lt;br /&gt;已是十二月初，回顾这大半个学期，一直忙忙碌碌，可却第一次觉得有些迷惘，选择考研、特别是考统计也许真是一个失误；但这些都是无法改变的事实，我所能做的是尽所有的可能，将错误的成本降到最低。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5757259044956463315?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5757259044956463315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5757259044956463315' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5757259044956463315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5757259044956463315'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/blog-post.html' title='时间'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_afohQU5wMHo/STO9lSBm83I/AAAAAAAADvY/sRJ9Xeix-hY/s72-c/DSCF0596.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5849325149673377230</id><published>2008-11-30T13:24:00.002+08:00</published><updated>2008-12-18T11:14:48.546+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Code Complete PART 6</title><content type='html'>&lt;b&gt;&lt;span style="color: rgb(102, 0, 0);font-size:100%;" &gt;System Considerations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;chapter 27: How program size affects construction&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;随着项目的增大交流需要加以支持&lt;br /&gt;放大轻量级的方法要好过缩小重量级的方法，最好使用适量级的方法&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;&lt;/span&gt;&lt;br /&gt;1. Commmnication and size&lt;br /&gt;&lt;br /&gt;2. Range of project size&lt;br /&gt;3. Effect of project size on errors&lt;br /&gt;4. Effect of project size on productitivity&lt;br /&gt;5. Effect of project size on development activite&lt;/b&gt;&lt;br /&gt;交流、计划、管理、需求分析、设计、架构、集成、测试、文档的非线性增长&lt;br /&gt;程序 -- 产品 -- 系统 -- 系统产品&lt;br /&gt;&lt;i&gt;Methodology and size 方法论和规模&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 28: Managing construction&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;一般管理 &amp;gt; 软件管理 &amp;gt; 构件管理&lt;br /&gt;贯彻标准，使用更为灵活的方法 --&amp;gt; 好的编程实践&lt;br /&gt;程序员和管理人员都是人&lt;br /&gt;&lt;b&gt;1. Encouraging good coding&lt;br /&gt;&lt;/b&gt;&lt;i&gt;Techniques for encouraging good coding&lt;/i&gt;&lt;br /&gt;逐行检查、要求代码签名、安排好的代码示例、代码是公有财产、奖励好的代码&lt;br /&gt;&lt;b&gt;2. Configuration management&lt;br /&gt;&lt;/b&gt;SCM: Software configuration manangement&lt;br /&gt;&lt;i&gt;Requirements and design changes&lt;br /&gt;&lt;/i&gt;遵循某种系统化的变更控制程序&lt;br /&gt;成组地处理变更请求&lt;br /&gt;评估变更成本&lt;br /&gt;提防大量的变更请求&lt;br /&gt;变更控制委员会&lt;br /&gt;&lt;i&gt;Tools:&lt;br /&gt;&lt;/i&gt;cvs, svn, Machine configurations, Backup plan&lt;br /&gt;降低程序员的额外负担；避免对项目的过度控制&lt;br /&gt;&lt;b&gt;3. Estimating a construction schedule&lt;br /&gt;&lt;/b&gt;&lt;i&gt;Estimation approaches&lt;br /&gt;&lt;/i&gt;评估软件；算法方法：Cocomo 2&lt;br /&gt;建立目标&lt;br /&gt;为评估留出时间并做出计划&lt;br /&gt;清楚说明软件需求&lt;br /&gt;在底层细节层面进行评估&lt;br /&gt;使用不同的评估方法并进行比较&lt;br /&gt;定期做重新评估&lt;br /&gt;&lt;i&gt;Estimation vs. Control&lt;br /&gt;&lt;/i&gt;what to do if you are behind:&lt;i&gt;&lt;br /&gt;&lt;/i&gt;项目并不能在后期把时间补回来，只会越拖越坏&lt;br /&gt;扩充团队？缩减项目范围。&lt;br /&gt;&lt;b&gt;4. Measurement&lt;br /&gt;&lt;/b&gt;留心度量的副作用&lt;br /&gt;反对度量就是认为最好不要知道真实&lt;br /&gt;&lt;b&gt;5. Treating programmers as people&lt;br /&gt;&lt;/b&gt;程序员并非只是与硅芯片打交道的有机物。&lt;br /&gt;&lt;i&gt;How do programmers spend their time&lt;br /&gt;Variation in performance and quality&lt;br /&gt;Individual variation&lt;br /&gt;Team variation&lt;br /&gt;Religious issues 信仰问题&lt;br /&gt;&lt;/i&gt;编程语言、缩进风格、大括号、IDE、注释风格、效率 vs. 可读性、方法的选择、编程工具、命名习惯、goto、全局变量&lt;br /&gt;&lt;b&gt;6. Managing your manager&lt;br /&gt;&lt;/b&gt;人性的弱点&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 29: Integration&lt;/span&gt;&lt;br /&gt;1. Importance of the integration approach&lt;br /&gt;&lt;/b&gt;结果也许正确，但错误的过程依然会导致失败&lt;br /&gt;&lt;b&gt;2. Integration fraquency -- phased or incremental&lt;br /&gt;&lt;/b&gt;&lt;i&gt;Phased integration&lt;br /&gt;&lt;/i&gt;测试、编码、测试、调试。单元开发&lt;br /&gt;将这些类组合成系统（system integration）&lt;br /&gt;测试调试（system dis-integration）&lt;br /&gt;&lt;i&gt;Incremental integration&lt;br /&gt;&lt;/i&gt;开发模块，测试调试模块，集成到系统&lt;br /&gt;&lt;i&gt;Benefits of incremental integration&lt;br /&gt;&lt;/i&gt;易于定位错误&lt;br /&gt;及早在项目中取得系统级的成果&lt;br /&gt;改善对进度的监控&lt;br /&gt;改善客户关系&lt;br /&gt;更充分地测试系统的各个单元&lt;br /&gt;能在更短的开发进度计划内建造出整个系统&lt;br /&gt;&lt;b&gt;3. Incremental integration strategies&lt;br /&gt;&lt;/b&gt;&lt;i&gt;Top-down Integration&lt;br /&gt;&lt;/i&gt;能较早地测试系统的控制逻辑&lt;br /&gt;&lt;i&gt;Bottom-Up Integration&lt;br /&gt;&lt;/i&gt;容易定位错误&lt;br /&gt;要求在开始前，已经完成整个系统的设计工作&lt;br /&gt;&lt;i&gt;Sandwich integration&lt;br /&gt;&lt;/i&gt;Bottom-UP + Top-down&lt;br /&gt;&lt;i&gt;Risk-Oriented integration&lt;br /&gt;&lt;/i&gt;困难部件优先集成法&lt;br /&gt;鉴别风险级别&lt;br /&gt;&lt;i&gt;Feature-Oriented Integration&lt;/i&gt;&lt;br /&gt;以一组构成一项可确认功能的类为单位进行集成&lt;br /&gt;&lt;i&gt;T-Shaped Integration&lt;br /&gt;&lt;/i&gt;选中特定的竖直块，及早地进行测试和集成&lt;br /&gt;&lt;b&gt;4. Daily  build and smoke test&lt;br /&gt;&lt;/b&gt;使一些工作及早地浮出水面&lt;br /&gt;每日构建（daily build）&lt;br /&gt;检查失败的build&lt;br /&gt;每天进行冒烟测试&lt;br /&gt;编译自动化&lt;br /&gt;但有意义时，才将修订加入到build&lt;br /&gt;代码添加到系统前进行冒烟测试&lt;br /&gt;为即将添加的代码准备暂存区&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5849325149673377230?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5849325149673377230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5849325149673377230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5849325149673377230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5849325149673377230'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/code-complete-part-6.html' title='Code Complete PART 6'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6107406421176844042</id><published>2008-11-30T10:57:00.002+08:00</published><updated>2008-11-30T11:01:15.677+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Note of Excel Function</title><content type='html'>以前一直没有系统学过Excel，可最近发现Excel和VBA编程在财务的各个方面都是非常重要的。正好最近要做财务报表分析的大作业，趁此机会先学习下Excel的函数，以后有时间再看下VBA。&lt;br /&gt;教材是张迎新的《Excel 2003 函数应用完全手册》，很简洁，很手册的一个东西。下面的笔记是书的一些摘录：&lt;br /&gt;&lt;br /&gt;&lt;i&gt;函数和公式&lt;/i&gt;&lt;br /&gt;Excel 函数可以分为内置函数和扩展函数两大类。前者只要启动了Excel，用户就可以使用它们；而后者必须通过单击“工具→加载宏”菜单命令加载，然后才能像内置函数那样使用。&lt;br /&gt;&lt;i&gt;函数的参数&lt;/i&gt;&lt;br /&gt;&lt;b&gt;数组：&lt;/b&gt;&lt;br /&gt;Excel 中有&lt;b&gt;常量&lt;/b&gt;和&lt;b&gt;区域&lt;/b&gt;两类数组。&lt;br /&gt;前者放在“{}”(按下Ctrl+Shift+Enter 组合键自动生成)内部，而且内部各列的数值要用逗号“,”隔开，各行的数值要用分号“;”隔开。{56,78,89;90,76,80}&lt;br /&gt;区域数组是一个矩形的单元格区域，该区域中的单元格共用一个公式。“B1:B3,A1:A3”&lt;br /&gt;&lt;b&gt;错误值：&lt;/b&gt;&lt;br /&gt;ERROR.TYPE(error_val)&lt;br /&gt;&lt;b&gt;单元格引用：&lt;/b&gt;&lt;br /&gt;相对引用：=SUM(A2:E2)&lt;br /&gt;绝对引用：=SUM($A $3:$E $3)&lt;br /&gt;混合引用：混合引用有“绝对列和相对行”，或是“绝对行和相对列”两种形式。前者如“=SUM($A3:$E3)”，后者如“=SUM(A$3:E$3)”&lt;br /&gt;三维引用：=SUM(Sheet2!A1:A6,Sheet3!B2:B9)&lt;br /&gt;=SUM([Book2]Sheet1! SA S1: SA S8,[Book2]Sheet2! SB S1:SB S9)&lt;br /&gt;三维引用的要受到较多的限制，例如不能使用数组公式等。&lt;br /&gt;&lt;b&gt;名称和标志：&lt;br /&gt;&lt;/b&gt;=AVERAGE(B2:B46)&lt;b&gt; --&amp;gt;&lt;/b&gt;    =AVERAGE(物理分数)&lt;br /&gt;创建好的名称可以被所有工作表引用，而且引用时不需要在名称前面添加工作表名(这就是使用名称的主要优点)，因此名称引用实际上是一种绝对引用。但是公式引用“列标志”时的限制较多，它只能在当前数据列的下方引用，不能跨越工作表引用，但是引用“列标志”的公式在一定条件下可以复制。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6107406421176844042?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6107406421176844042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6107406421176844042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6107406421176844042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6107406421176844042'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/note-of-excel-function.html' title='Note of Excel Function'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2397338005943201764</id><published>2008-11-30T09:34:00.002+08:00</published><updated>2008-12-18T11:14:48.547+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Code Complete PART 4</title><content type='html'>&lt;b style="color: rgb(102, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;Statements&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;Chapter 14. Organizing Straight-line code&lt;/b&gt;&lt;br /&gt;主要原则：按照依赖关系进行排列&lt;br /&gt;&lt;b&gt;1. Statements that must be in a sepcific order&lt;br /&gt;&lt;/b&gt;设法组织代码，使依赖性变得非常明显&lt;br /&gt;利用子程序名、子程序参数显示依赖性&lt;br /&gt;用注释对不清晰的依赖关系进行说明&lt;br /&gt;&lt;b&gt;2. Statements whose order doesn't matter&lt;br /&gt;&lt;/b&gt;&lt;i&gt;making code read from top to buttom&lt;br /&gt;&lt;/i&gt;localized --&amp;gt; short live time&lt;br /&gt;&lt;i&gt;grouping related statements&lt;br /&gt;&lt;/i&gt;不应该交叠，但可能嵌套&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 15: Using conditionals&lt;/span&gt;&lt;br /&gt;1. if statements&lt;br /&gt;&lt;/b&gt;&lt;i&gt;plain if-then statements&lt;br /&gt;&lt;/i&gt;先处理正常情况，然后其它&lt;br /&gt;确保对于“==”是正确的&lt;br /&gt;把正常的情况处理放在“if”后面&lt;br /&gt;让if语句后跟随一个有意义的子句&lt;br /&gt;&lt;i&gt;chains of if-then-else statements&lt;br /&gt;&lt;/i&gt;用布尔函数简化复杂的检测&lt;br /&gt;最常见的放最前&lt;br /&gt;&lt;b&gt;2. case statements&lt;br /&gt;&lt;/b&gt;&lt;i&gt;choosing the most efficitve ordering of cases&lt;/i&gt;&lt;br /&gt;字母序、正常放最前、频率序&lt;br /&gt;&lt;i&gt;tips for using case statements&lt;br /&gt;&lt;/i&gt;简化每种情况对应的操作&lt;br /&gt;不要为使用case刻意制造一个变量&lt;br /&gt;default子句只用于检查真正的默认情况&lt;br /&gt;避免代码执行跨越一条case子句的末尾&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 16. Controlling Loops&lt;/span&gt;&lt;br /&gt;1. selecting the kind of loop&lt;br /&gt;&lt;/b&gt;counted loop; coutinously evaluated loop; endless loop; iterator loop&lt;br /&gt;&lt;i&gt;when to use while loop&lt;br /&gt;&lt;/i&gt;预先不知道迭代的次数&lt;br /&gt;with test at the beginning &amp;amp; end&lt;br /&gt;&lt;i&gt;when to use a loop-with-exit loop&lt;br /&gt;&lt;/i&gt;终止条件出现在循环的中部&lt;br /&gt;break; goto&lt;br /&gt;把所有的退出条件放在一处，用注释阐明意图&lt;br /&gt;&lt;i&gt;when to use a for loop&lt;br /&gt;&lt;/i&gt;执行固定次数的循环，不需要循环内部控制&lt;br /&gt;&lt;i&gt;when to use a foreach loop&lt;br /&gt;&lt;/i&gt;消除了循环内务处理&lt;br /&gt;&lt;b&gt;2. Controlling the loop&lt;br /&gt;&lt;/b&gt;减少影响循环的因素数量，把循环内部当作子程序&lt;br /&gt;&lt;i&gt;entering the loop&lt;br /&gt;&lt;/i&gt;只从头部进入&lt;br /&gt;初始化代码紧反正循环前&lt;br /&gt;用while表示无限循环&lt;br /&gt;在while适用的时候，不使用for&lt;br /&gt;&lt;i&gt;processing the middle of the loop&lt;br /&gt;&lt;/i&gt;避免空循环&lt;br /&gt;循环的内务操作反正循环的开始或结尾&lt;br /&gt;一个循环只做一件事&lt;br /&gt;&lt;i&gt;exiting the loop&lt;br /&gt;&lt;/i&gt;终止确认条件&lt;br /&gt;避免依赖循环下标的最终取值&lt;br /&gt;考虑使用循环计数器&lt;br /&gt;小心break&amp;amp;continue&lt;br /&gt;带标号的break&lt;br /&gt;&lt;i&gt;checking endpoints&lt;/i&gt;&lt;br /&gt;&lt;i&gt;using loop variables&lt;br /&gt;&lt;/i&gt;使用有意义的名字：提高可读性，避免下标串话&lt;br /&gt;把循环下标的作用域限制在本循环内&lt;br /&gt;&lt;i&gt;how long should a loop be&lt;br /&gt;&lt;/i&gt;尽可能短，嵌套在三层以内&lt;br /&gt;把长循环的内容移到子程序内&lt;br /&gt;&lt;b&gt;3. Creating loops easily - from the inside out&lt;br /&gt;&lt;/b&gt;inside out; 使用字面量&lt;br /&gt;&lt;b&gt;4. Correspondence between loops and arrays&lt;br /&gt;&lt;/b&gt;密切联系但不是必然的&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;Chapter 17: Unusual contorl structures&lt;/b&gt;&lt;br /&gt;&lt;b&gt;1. Multiple returns from a routine&lt;br /&gt;&lt;/b&gt;如果能增强可读性，就使用return&lt;br /&gt;用guard clause（早返回或退出）来简化错误处理&lt;br /&gt;&lt;b&gt;2. Resursion&lt;br /&gt;&lt;/b&gt;&lt;i&gt;tips for using recursion&lt;br /&gt;&lt;/i&gt;确认递归能够停止&lt;br /&gt;使用安全计数器防止无穷递归&lt;br /&gt;限制在一个子程序内&lt;br /&gt;递归 or 循环 -- 阶乘&lt;br /&gt;&lt;b&gt;3. goto&lt;br /&gt;&lt;/b&gt;万不得已才使用goto&lt;b&gt;&lt;br /&gt;&lt;/b&gt;goto导致的效率的提升需可以估量&lt;br /&gt;尽量在每个子程序中最多使用一个goto&lt;br /&gt;尽量让goto先前跳转而不是向后&lt;br /&gt;goto标号&lt;br /&gt;确认goto不会产生执行不到的代码&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;Chapter 18: Table-driven methods&lt;/b&gt;&lt;br /&gt;Table-driven is a scheme -- 从表里查找信息而不是用if or case&lt;br /&gt;复杂逻辑和复杂继承结构的替代方案&lt;br /&gt;&lt;b&gt;1. General considerations of using Table-Driven methods&lt;br /&gt;&lt;/b&gt;查询记录的方法：&lt;br /&gt;Direct access&lt;br /&gt;Indexed access&lt;br /&gt;Stair-step access&lt;br /&gt;&lt;b&gt;2. Direct access tables&lt;br /&gt;&lt;/b&gt;Date-in-Month example&lt;br /&gt;Flexible-Message-Format Example&lt;br /&gt;Logic basied vs. Object-Oriented vs. Table-Driven&lt;br /&gt;&lt;i&gt;Fudging lookup keys&lt;br /&gt;&lt;/i&gt;复制信息从而能直接使用键值&lt;br /&gt;转换键值使之能直接使用&lt;br /&gt;把键值转换提取成独立的子程序&lt;br /&gt;&lt;b&gt;3. Indexed Access tables&lt;br /&gt;4. Stair-step Access tables&lt;br /&gt;&lt;/b&gt;把每一区间的上限写入表中，使用循环按照各区间的上限检查分数&lt;br /&gt;留心端点&lt;br /&gt;二分法查找，索引访问？&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;最好是去选择一个好的方案同时避免灾难，而不是试图寻找最佳的方案。&lt;/span&gt;&lt;br /&gt;&lt;b&gt;5. Other Examples of Table loopups&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 19: General Control Issues&lt;/span&gt;&lt;br /&gt;1. Boolean expressions&lt;br /&gt;&lt;/b&gt;&lt;i&gt;Using the true and false for boolean tests&lt;br /&gt;Making complicated expressions simple&lt;br /&gt;&lt;/i&gt;拆分复杂的判断并引入新的布尔变量&lt;br /&gt;将复杂的表达式做出布尔函数&lt;br /&gt;用决策表代替复杂的条件&lt;br /&gt;&lt;i&gt;Forming boolean expressions positively&lt;br /&gt;&lt;/i&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;I ann't not no undummy. 我并非不是一个不傻的人。&lt;/span&gt;&lt;br /&gt;用狄摩根简化&lt;br /&gt;&lt;i&gt;Using parantheses to clarify boolean expressions&lt;br /&gt;Knowng how boolean expressions are evaluated&lt;br /&gt;Writing numeric expressions in Number-line 2order&lt;br /&gt;Guildines for comparisions to 0&lt;br /&gt;&lt;/i&gt;隐形地比较逻辑变量&lt;br /&gt;和数值表达式相比使用显示写法&lt;br /&gt;指针 -- NULL&lt;br /&gt;&lt;i&gt;Common problems with boolean expressions&lt;br /&gt;&lt;/i&gt;C家族中，应该把常量反正比较的左端&lt;br /&gt;&lt;p&gt;&lt;b&gt;2. Compound Statements(Blocks)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. Null statements&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. Taming Dangerously deep nesting&lt;/b&gt;&lt;/p&gt;&lt;p&gt;重复检查条件中的某一部分来简化嵌套的if&lt;/p&gt;&lt;p&gt;使用break来简化&lt;/p&gt;&lt;p&gt;if --&amp;gt; if-then-else&lt;/p&gt;&lt;p&gt;if --&amp;gt; case&lt;/p&gt;&lt;p&gt;抽取并放入子程序&lt;/p&gt;&lt;p&gt;对象和多态派分&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. A programming foundation: Structured Programming&lt;/b&gt;&lt;/p&gt;&lt;p style="color: rgb(102, 0, 0);"&gt;structured goofing off 结构化混日子&lt;/p&gt;&lt;p&gt;&lt;i&gt;The three components of structured programming&lt;/i&gt;&lt;/p&gt;&lt;p&gt;sequence; selection; iteration&lt;/p&gt;&lt;p&gt;&lt;b&gt;6. Control structures and complexity&lt;/b&gt;&lt;/p&gt;&lt;p&gt;应用程序的复杂度是由它的控制流来定义的&lt;/p&gt;&lt;p&gt;&lt;i&gt;General guidelines for reducting complexity&lt;/i&gt;&lt;/p&gt;&lt;p&gt;How to measure: &lt;span style="color: rgb(102, 0, 0);"&gt;decision point&lt;/span&gt;&lt;/p&gt;&lt;p&gt;if; while; repert; for; and; or; case&lt;br /&gt;&lt;/p&gt;&lt;p&gt;0-5: good; 6-10; 10+&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2397338005943201764?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2397338005943201764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2397338005943201764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2397338005943201764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2397338005943201764'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/code-complete-part-4.html' title='Code Complete PART 4'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2291471776390486262</id><published>2008-11-29T23:58:00.010+08:00</published><updated>2008-12-16T22:24:44.013+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>冬日</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_afohQU5wMHo/STFmucFLcNI/AAAAAAAADoo/RW9J1kH9_xc/s1600-h/DSCF0503.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://4.bp.blogspot.com/_afohQU5wMHo/STFmucFLcNI/AAAAAAAADoo/RW9J1kH9_xc/s160/DSCF0503.JPG" border="0" /&gt;&lt;/a&gt;今天朋友过生日，下午三点出发，到晚上快十一点才回了宿舍。四个刚工作的女孩子和四个IT男，80、82、85的加上最小的86的我。四个女人吵的不闲累，我听着都心力憔悴。。原本以为去了就吃，结果被叫去了买菜。。辛辛苦苦做好了难吃的又都成了我做的。。这世道。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/STFmuVMsE6I/AAAAAAAADow/jtdwOD3Iocc/s1600-h/DSCF0487.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://1.bp.blogspot.com/_afohQU5wMHo/STFmuVMsE6I/AAAAAAAADow/jtdwOD3Iocc/s160/DSCF0487.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;路上无聊的公交时间拍了一些照，冬天真的来了，可正因为冬天来了，有了冷也就有了暖。大千世界滚滚红尘真是很神奇的一个东西。让人时而逃避时而依赖。平凡的人们一日又一日地或忙碌或闲适，游戏着生活，也被生活游戏。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_afohQU5wMHo/STFmut4KTqI/AAAAAAAADo4/xJI95Kym5gE/s1600-h/DSCF0516.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://4.bp.blogspot.com/_afohQU5wMHo/STFmut4KTqI/AAAAAAAADo4/xJI95Kym5gE/s160/DSCF0516.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;四个IT人，一个比一个冷，无聊间又说起了水瓶的坏话，我同意。某些角度看，我的确是个自由自私同时无趣的人。过去、现在和将来，我都会努力做个个自信、事实求是而又卑微的工程师。呵呵，努力！&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/STFmut5tgnI/AAAAAAAADpA/QoRfNVCVhrk/s1600-h/DSCF0437.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/STFmut5tgnI/AAAAAAAADpA/QoRfNVCVhrk/s160/DSCF0437.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2291471776390486262?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2291471776390486262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2291471776390486262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2291471776390486262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2291471776390486262'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/blog-post_29.html' title='冬日'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_afohQU5wMHo/STFmucFLcNI/AAAAAAAADoo/RW9J1kH9_xc/s72-c/DSCF0503.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5707211336251627</id><published>2008-11-27T23:07:00.004+08:00</published><updated>2008-12-16T22:24:44.015+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='电影'/><title type='text'>WALL.E</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SS64HKmyFNI/AAAAAAAADnY/hg1XVkXSVIY/s1600-h/walle_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 154px;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SS64HKmyFNI/AAAAAAAADnY/hg1XVkXSVIY/s400/walle_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5273354646943044818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;WALL•E 全名叫Waste Allocation Load Lifter-Earth Class, 700年来日日尽忠职守的留在地球清理垃圾，唯一伴侣就是一只生命力超强的小强。每天做着同样的事情，寂寞无奈却又乐在其中。&lt;br /&gt;这周一直在看UNIX，基本无序但每天都学到很多，大学时如果选择C和UNIX这方向的话，对计算机应该能有更好的理解。可惜我过早选择了Java。&lt;br /&gt;晚上在china-pub上买了《编程珠玑》的两册，打算好好拜读。然后，差不多要考试了，继续浑浑噩噩地努力吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5707211336251627?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5707211336251627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5707211336251627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5707211336251627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5707211336251627'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/walle.html' title='WALL.E'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SS64HKmyFNI/AAAAAAAADnY/hg1XVkXSVIY/s72-c/walle_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6054899922811671705</id><published>2008-11-23T19:10:00.003+08:00</published><updated>2008-11-23T19:11:33.579+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Latex'/><title type='text'>课程论文的LATEX模板</title><content type='html'>上午费了些劲李果正（Edward G.J. Lee）的《由TEX/LATEX 制作中文PDF文档》中的样式和清华毕业论文的样式结合，做了一个适合一般课程论文的Latex模板。比较简单清爽。&lt;br /&gt;&lt;br /&gt;源码如下：&lt;br /&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;\documentclass[dvipdfm,11pt]{article}&lt;br /&gt;\usepackage[paper=a4paper,dvips,top=2.5cm,left=2.8cm,right=2.8cm,foot=1cm,bottom=3.2cm]{geometry}&lt;br /&gt;\usepackage{CJK}&lt;br /&gt;&lt;br /&gt;% 控制标题的宏包&lt;br /&gt;\usepackage[sf]{titlesec}&lt;br /&gt;% 控制目录的宏包&lt;br /&gt;\usepackage{titletoc}&lt;br /&gt;&lt;br /&gt;%引用上标&lt;br /&gt;\makeatletter&lt;br /&gt;\def\@cite#1#2{\textsuperscript{[{#1\if@tempswa , #2\fi}]}}&lt;br /&gt;\makeatother&lt;br /&gt;&lt;br /&gt;\newcommand{\song}{\CJKfamily{song}}    % 宋体   (Windows自带simsun.ttf)&lt;br /&gt;\newcommand{\fs}{\CJKfamily{fs}}        % 仿宋体 (Windows自带simfs.ttf)&lt;br /&gt;\newcommand{\kai}{\CJKfamily{kai}}      % 楷体   (Windows自带simkai.ttf)&lt;br /&gt;\newcommand{\hei}{\CJKfamily{hei}}      % 黑体   (Windows自带simhei.ttf)&lt;br /&gt;\newcommand{\li}{\CJKfamily{li}}        % 隶书   (Windows自带simli.ttf)&lt;br /&gt;&lt;br /&gt;\newcommand{\yihao}{\fontsize{26pt}{36pt}\selectfont}    % 一号, 1.4倍行距&lt;br /&gt;\newcommand{\erhao}{\fontsize{22pt}{28pt}\selectfont}    % 二号, 1.25倍行距&lt;br /&gt;\newcommand{\xiaoer}{\fontsize{18pt}{18pt}\selectfont}    % 小二, 单倍行距&lt;br /&gt;\newcommand{\sanhao}{\fontsize{16pt}{24pt}\selectfont}    % 三号, 1.5倍行距&lt;br /&gt;\newcommand{\xiaosan}{\fontsize{15pt}{22pt}\selectfont}    % 小三, 1.5倍行距&lt;br /&gt;\newcommand{\sihao}{\fontsize{14pt}{21pt}\selectfont}    % 四号, 1.5倍行距&lt;br /&gt;\newcommand{\banxiaosi}{\fontsize{13pt}{19.5pt}\selectfont}    % 半小四, 1.5倍行距&lt;br /&gt;\newcommand{\xiaosi}{\fontsize{12pt}{18pt}\selectfont}    % 小四, 1.5倍行距&lt;br /&gt;\newcommand{\dawuhao}{\fontsize{11pt}{11pt}\selectfont}    % 大五号, 单倍行距&lt;br /&gt;\newcommand{\wuhao}{\fontsize{10.5pt}{10.5pt}\selectfont}    % 五号, 单倍行距&lt;br /&gt;&lt;br /&gt;\newlength \CJKtwospaces \CJKtilde&lt;br /&gt;&lt;br /&gt;\titleformat{\section}[hang]{\sf \hei  \sihao}&lt;br /&gt;   {\sihao \thesection}{0.5em}{}{}&lt;br /&gt;\titlespacing{\section}{0pt}{-0.2em}{0.8em}&lt;br /&gt;&lt;br /&gt;\titleformat{\subsection}[hang]{\hei \sf \banxiaosi}&lt;br /&gt;   {\banxiaosi \thesubsection}{0.5em}{}{}&lt;br /&gt;%    {\banxiaosi \thesubsection}{0pt}{}{}&lt;br /&gt;%\titlespacing{\subsection}{0pt}{1.5ex plus .1ex minus .2ex}{\wordsep}&lt;br /&gt;\titlespacing{\subsection}{0pt}{-0.25em}{1em}&lt;br /&gt;&lt;br /&gt;\titleformat{\subsubsection}[hang]{\hei \sf}&lt;br /&gt;   {\thesubsubsection }{0.5em}{}{}&lt;br /&gt;%\titlespacing{\subsubsection}{0pt}{1.2ex plus .1ex minus .2ex}{\wordsep}&lt;br /&gt;\titlespacing{\subsubsection}{0pt}{0.25em}{0pt}&lt;br /&gt;&lt;br /&gt;% 缩小目录中各级标题之间的缩进&lt;br /&gt;\dottedcontents{chapter}[0.0em]{\hei\vspace{0.5em}}{0.0em}{5pt}&lt;br /&gt;\dottedcontents{section}[1.16cm]{}{1.8em}{5pt}&lt;br /&gt;\dottedcontents{subsection}[2.00cm]{}{2.7em}{5pt}&lt;br /&gt;\dottedcontents{subsubsection}[2.86cm]{}{3.4em}{5pt}&lt;br /&gt;&lt;br /&gt;% 颜色的设定要引进 color package。&lt;br /&gt;\usepackage[dvips]{color}&lt;br /&gt;\definecolor{webbrown}{rgb}{.6,0,0}&lt;br /&gt;\usepackage{times}&lt;br /&gt;\linespread{1.4}&lt;br /&gt;&lt;br /&gt;% 由于把行距加大，要把脚注的行距缩成预设的，这个设定采自吴聪敏教授的&lt;br /&gt;% 《cwTeX 排版系统》修订二版一书，页 143。&lt;br /&gt;\let\oldfootnote\footnote&lt;br /&gt;\renewcommand\footnote[1]{\oldfootnote{\renewcommand\baselinestretch{1.0}%&lt;br /&gt;\large\footnotesize\ignorespaces#1}}&lt;br /&gt;\addtolength{\footnotesep}{1pt}&lt;br /&gt;\begin{document}&lt;br /&gt;\begin{CJK*}{GBK}{song}&lt;br /&gt;\newcommand{\bigfive}{\textrm{Big-5}~码}&lt;br /&gt;\renewcommand{\figurename}{图~}&lt;br /&gt;\renewcommand{\tablename}{表~}&lt;br /&gt;\renewcommand{\contentsname}{目~录~}&lt;br /&gt;\renewcommand{\appendixname}{附~录~}&lt;br /&gt;\renewcommand\refname{参~考~文~献}&lt;br /&gt;\newcommand\prechaptername{第}&lt;br /&gt;\newcommand\postchaptername{章}&lt;br /&gt;\renewcommand\indexname{索~引}&lt;br /&gt;\renewcommand\abstractname{摘~要}&lt;br /&gt;\renewcommand{\today}{\small \number\year~年~\number\month~月~\number\day~日}&lt;br /&gt;\title{\textcolor{webbrown}{\Huge \sf \kai 质疑的质疑}\\{\Large 对~ What's Happening to China's GDP Statistics? 的分析}}&lt;br /&gt;\author{\small Sunix.Xu~~~~Email:xuyizun@gmail.com\\ \small SHUFE Statistics~~~~NO:XXXXXXXXX}&lt;br /&gt;\maketitle&lt;br /&gt;\tableofcontents&lt;br /&gt;\newpage&lt;br /&gt;% 调整段落间距离&lt;br /&gt;\parskip=0.2cm&lt;br /&gt;&lt;br /&gt;\section{前言}&lt;br /&gt;\label{sec:introduction}&lt;br /&gt;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;&lt;br /&gt;\begin{thebibliography}{99}&lt;br /&gt;\bibitem{thomas} Thomas G. Rawski:&lt;br /&gt;《What's Happening to China's GDP Statistics?》,&lt;br /&gt;China Economic Review&lt;br /&gt;2001.12&lt;br /&gt;\end{thebibliography}&lt;br /&gt;\end{CJK*}&lt;br /&gt;\end{document}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6054899922811671705?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6054899922811671705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6054899922811671705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6054899922811671705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6054899922811671705'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/latex.html' title='课程论文的LATEX模板'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-513424996104721894</id><published>2008-11-23T18:58:00.002+08:00</published><updated>2008-12-18T11:13:23.717+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='经济'/><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><title type='text'>质疑的质疑</title><content type='html'>下文是国民经济核算的案例论文，对Thomas G. Rawski的文What’s Happening to China’s GDP Statistics? 所做的分析。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;质疑的质疑&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;--对What’s Happening to China’s GDP Statistics? 的分析&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;1 前言&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;美国匹兹堡大学经济学教授Thomas G. Rawski在2001年12月在《中国经济评论》发表了著名的《What’s Happening to China’s GDP Statistics?》[1]一文。他通过研究中国各省市的经济统计资料，发现这些资料与中国国家统计局发表的数字有不相符合之处，因而提出了对中国统计数据的质疑，他根据中国经济增长与能源消费相反的变动趋势并对比亚洲其它国家后认为，中国自1998年以来的经济增长速度是不真实的。&lt;br /&gt;而在这同时，国外和国内的很多经济学家对Rawski的质疑提出了反质疑，从GDP统计、能源统计、中国经济结构转型等多个方面回答了GDP数据和能耗数据间的矛盾。&lt;br /&gt;本文将本着客观的立场，首先概述Rawski教授的质疑，之后简述国内外学者对此问题的观点，然后进行对比分析并给出我的见解，最后将对GDP统计存在的问题作出总结。&lt;br /&gt;需要说明的是Rawski只是从客观的角度对问题进行了描述和分析，并不带有政治色彩，他的分析对于我国发现并分析发展中遇到的种种问题有着很大的帮助。&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;2 Thomas教授的质疑&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Thomas G. Rawski教授通过以下三个方面对中国GDP统计的真实性提出质疑[1][4]：&lt;br /&gt;&lt;b&gt;2.1 数据之间的不一致性&lt;/b&gt;&lt;br /&gt;&lt;i&gt;经济增长率数据与能源消耗、就业和消费价格数据之间的不一致性&lt;/i&gt;&lt;br /&gt;中国经济增长与能源消费变动趋势相反，这不符合人们的常识，1997年到2001年间，官方公布的GDP增长了24.7%而能源消耗却降低了12.8%，同时，一些数据表明，中国在97/98年的能源利用率依旧停留在83/84年水平。&lt;br /&gt;对比亚洲其它国家及中国在97年以前10年的数据，能源消耗和GDP一般存在着同向运动的规律。而中国在97年到2001年间的数据却明显违背了这一规律。&lt;br /&gt;&lt;i&gt;生产数据之间以及生产数据与投资数据之间的不一致性&lt;/i&gt;&lt;br /&gt;1998 年,水灾是20 世纪中国十大自然灾害之一，但除一个省之外，所有省的农业产出&lt;br /&gt;都是增加的；94 种主要工业产品中只有14 种产品获得两位数增长，工业生产却上升&lt;br /&gt;了10. 75%；钢材消耗和水泥产出增长不到5% ,投资却猛增13. 9%。&lt;br /&gt;&lt;i&gt;消费数据之间的不一致性&lt;/i&gt;&lt;br /&gt;除2000 年外,全国社会消费品零售额增长比人均消费支出增长快得多。&lt;br /&gt;&lt;i&gt;消费数据与收入数据之间的不一致性&lt;/i&gt;&lt;br /&gt;社会消费品零售额的增长比住户收入的增长快得多，这意味着平均消费倾向在上升。&lt;br /&gt;然而,最近的研究发现,消费支出占收入的比率呈下降的趋势。&lt;br /&gt;&lt;b&gt;2.2 来自中文评论文章的信息&lt;/b&gt;&lt;br /&gt;Rawski在文章中摘引了几篇评论中国官方统计数据的中文文章的观点，并声称，大量的中文评论文章表明在整个商业社会和各级政府，经济发展指标的虚报浮夸成为一种普遍现象。&lt;br /&gt;文中指出，从1998 年开始,国家统计局抛弃了省级经济增长数据；虽然国家统计局近些年努力创造跨越地方和省级政府的统计网络，但它不具备在正常的信息渠道以外搜集数据的能力。&lt;br /&gt;&lt;b&gt;2.3 经济增长率的上限&lt;/b&gt;&lt;br /&gt;中国航空客运业的客户主要是国内收人最高的阶层，而他们的收入增长水平应超过平均增长水平。因此，航空客运的增长应该高于居民可支配收人的增长，而后者是的计算基础。但罗斯基却计算出在97、98年间乘客里程的增长只有2.2%，而同期GDP的增长率却分别为8.8%和7.8%。&lt;br /&gt;基于以上几点，Rawski认为地方官员迫于政绩的压力，或因为编造数据的收益超过了因编造数据带来的风险从而欺骗中央，所以最终的统计数据是不真实的；然而统计资料中有些数据却反映了经济的实质，比如能源消耗和民航业的发展。97年到01年，GDP增长了，而能源消耗却在下降，Thomas认为能源利用效率的提高不足以解释这巨大的反差。&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;3 对质疑的反质疑&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;对于Rawski的质疑，国内外的专家学者纷纷给出了自己的见解，对他的质疑提出了各自的观点。主要集中在以下几个方面：&lt;br /&gt;GDP和能耗并不一定存在严格的规律&lt;br /&gt;经济增长模式的转变导致了数据的不一致性&lt;br /&gt;&lt;b&gt;3.1 GDP和能耗的非一致性&lt;/b&gt;&lt;br /&gt;任若恩教授认为，经济增长率与能源消耗增长率应该大致相等，这一假设要求满足一个国家在经济发展过程中是同质的，能源消耗的产业结构和使用能源的技术不变。针对罗斯基依据经济增长率与能源消耗数据之间的不一致性对中国经济增长率数据的质疑，任若恩考察了德国、英国、美国、日本和韩国的经济增长与能源增长数据之间的关系。他发现，这些国家都曾经出现过经济增长与能源增长数据不同步的现象：从经济发展历史看，在不同国家的经济发展中，如日本、德国、英国等，能源增长低于经济增长的数据出现频率不在少数。美国大概两次，日本一次，都出现过GDP增长而能源下降的历史的差距[3][5]。&lt;br /&gt;如果因为能源增长率低于经济增长率，因此就认为经济增长率数据可能出现高估，那么，当能源增长率高于经济增长率时，就可以怀疑经济增长率数据出现低估，而这显然是没有依据的。&lt;br /&gt;能源总产和总消费与中国经济增长之间从来不存在十分密切的关系，在1978–2000年间，有13年能源的消费弹性（消费增长率与GDP增长率的比例）是低于+0.5的，而在1978–2001年间也有14年能源的生产弹性（产量增长率与GDP增长率之比）低于+0.5。最关键的是, 并不是只有以往几年才是如此，连公认的中国经济过热的1992–1994年间，能源增长和消费均跟GDP没有什么关联。此期间同步伴随中国大规模的能源供给结构调整，煤炭供给受限严格，而电力消费有所上升，煤炭严格限制可能是导致统计内能源消费萎缩的主要原因[6]。&lt;br /&gt;&lt;b&gt;3.2 经济增长模式的转变导致了数据的不一致性&lt;/b&gt;&lt;br /&gt;张新和蒋殿春在《中国经济的增长――数据的可信度以及增长的微观基础》[6]中对近年来中国经济增长速度及其与企业微观绩效之间的关系进行了理论和实证性的分析研究，结果表明：首先，我国近年来的经济增长数据墓本可靠；再者，我国宏观和徽观经济之间并不存在本质性的背离。&lt;br /&gt;我国目前仍然处于粗放式经济增长阶段，主要是依靠物质资源、人力资源的大投入和规模的快速扩张来推动经济的高速增长；但只要以后中国整个经济体系的效率是逐步上升，单位能耗逐渐降低，那么电力等生产资料产量的增长速度在一个很长的时间内将慢于整个经济的增长速度。正是能源效率的改进导致能源消耗持续下降。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;4 统计数据存在的问题&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;事实上，中国经济增长率的统计的确存有问题，在计算水平、方法与范围等方面有待进一步改进提高。一些省份有多报的动机，同时也有一些省份有瞒报的动机。统计数据，尤其是GDP数据，没有一成不变的，随着时间的推移，基础资料和统计方法会不断完善，为了保持客观性和可比性，历史数据需要不断进行调整。美国就曾经对它的GDP历史数据作过11次调整。&lt;br /&gt;在《南方周末》对国家统计局国民经济核算司司长许宪春的访谈中，许宪春揭示了统计数据存在的一些问题[10]：&lt;br /&gt;&lt;b&gt;4.1 统计数据来源及其对比&lt;/b&gt;&lt;br /&gt;&lt;i&gt;数据来源&lt;br /&gt;&lt;/i&gt;– 国家统计局独立调查的数据&lt;br /&gt;内容：全国的粮食产量、棉花产量、主要畜禽产品产量；规模以下的非国有工业企业、小型商业企业、个体工商户的产值和增加值；农村固定资产投资、城乡居民住户收入和支出、商品和服务的价格。&lt;br /&gt;– 地方汇总的数据&lt;br /&gt;内容：全部国有企业和年产品销售收入500万元以上的非国有企业。&lt;br /&gt;&lt;i&gt;数据源对比&lt;/i&gt;&lt;br /&gt;地方汇总数据统计方法以全面报表为主，基层单位向地方政府统计部门报送报表，然后层层汇总到国家统计局。一般来说，这种调查方法由于涉及的单位多，需要的人员多，因而难以保证基层统计资料的准确性。抽样数据抽样调查涉及的单位少，需要的人手相对少，因此有可能对统计人员进行较全面的业务培训，从而能够提高基层统计资料的质量。&lt;br /&gt;综合统计数据来源及其对比，我们可以发现国家统计局可以控制质量的数据仅占到国民经济的很少部分，全部国有企业和规模以上的非国有企业的数据要靠地方汇总，这部分的数据质量难以得到十分的保证。&lt;br /&gt;&lt;b&gt;4.2 数据质量评估及数据调整&lt;/b&gt;&lt;br /&gt;在数据评估方面，由国家统计局评估省一级的数据，省统计局评估地市一级数据。但由于《统计法》是一种行政法规，加之统计局在行政机构中的地位，对于一些地方官员并没有很强的约束力。&lt;br /&gt;目前各省公布的GDP加总后都要高于国家统计局公布的全国GDP，国家统计局需要挤出其中的“水分”，主要采用以下的方法：&lt;br /&gt;² 采取抽样调查的方法&lt;br /&gt;² 实行超级汇总方法排除中间层次的干扰&lt;br /&gt;² 加大执法力度，查处统计违法现象&lt;br /&gt;² 建立数据质量评估制度&lt;br /&gt;从中，我们可以看到国家统计局对于挤出“水分”并没有真正强有力的方法。从以上内容我们可以分析得出，国家统计局对于数据的质量没有十分可靠的保障，地方政府官员可能出于自身利益的考虑多报或少报数据。东部沿海的省分由于以民营经济为主，可能会低报经济增长数据以减少上缴中央税收。[3]。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;5 中国崩溃论？&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;自20世纪90年代以来，国际上关于中国问题的较大争论有过四次。第一次是1994年，美国世界经济研究所布朗提出“谁来养活中国人”，引发了一场大争论；第二次是1992年以来，国际上泛起一股“中国威胁论”，已经直接影响西方大国的对华政策的重新制定；第三次是去年开始出现的“中国崩溃论”，无限放大中国目前经济社会中存在的一些问题，并得出草率的结论；第四次则是这次的“中国统计水分论”[9]。&lt;br /&gt;这些争论，有的纯属学术范畴，有的则带有国际政治角力的背景，但无论从哪个角度、用哪种眼光来审视中国的发展，有一个基本事实不容忽视，这就是在近年来世界上发生的各种危机面前，在中国自身宏观经济运行面临诸多深层次困难的情况下，中国不但没有衰退和崩溃，反而保持连续多年的经济高速增长。即使GDP数据存在着一些问题，这也不能代表中国经济仅有数字上的辉煌，而实质上已经走到了崩溃的边缘。&lt;br /&gt;GDP是考察经济的实际运行情况的一个重要的指标，但不是唯一的指标。任何一个国家的经济增长都是由多种因素决定的，没有一种单独的经济活动能够解释像现代经济这么复杂的情况，尤其像中国这样大规模的经济。下面将引述Klein和Lardy关于中国经济的评论[4]。&lt;br /&gt;&lt;b&gt;5.1 Lawrence R. Klein对中国经济的评论&lt;/b&gt;&lt;br /&gt;为了从一个新的视角研究中国的GDP ，并利用独立的信息检验中国GDP 估计的一致性，论文收集了以下15 个变量：电力(千瓦时) ；煤炭(吨) ；原油(吨) ；钢产量(吨) ；货运(吨公里) ；民航运输(吨公里) ；第三产业就业比重( %) ；粮食产量(吨) ；出口(美元不变价) ；进口(美元不变价) ；政府支出(经过价格缩减) ；实际工资；长途电话(次数) ；通货膨胀率(消费价格指数) ；畜产品(吨) 。这些变量概括了能源、交通、通讯、劳动力、农业、公共部门、工资、通货膨胀情况。利用1980～2000 年年度数据，论文对这15 个指标进行了主成分估计[7]。&lt;br /&gt;论文指出,概括地说,主成分反映了从不同资料来源相当独立地收集的15 个指标的变动，对中国经济来说有广泛代表性。这些指标的变动与中国官方估计的实际GDP 的变动是一致的。&lt;br /&gt;&lt;b&gt;5.2 Nicholas R.Lardy对中国经济的评论&lt;/b&gt;&lt;br /&gt;Lardy列举了两个经济指标，一个是进口额，另一个是财政收入。中国官方数据表明，1997～2001 年，进口额增长了70 % ，财政收入增长了90 %。Lardy认为，进口额不可能被夸大，因为负责贸易统计的海关必须向财政部缴纳进口关税。财政收入也不可能被夸大，因为政府处于日益增加的社会资金需求的巨大压力之下，包括失业补贴、国企下岗工人退职金、缓解环境恶化和为军事现代化提供资金，等等。Lardy说，对所有国家来说，在经济增长率明显下降的情况下，由于企业利润减少，个人收入和消费停滞，税收的增长几乎不可避免地会更加放慢。中国经济增长在过去的四年里严重衰退与税收如此强劲增长是难以吻合的[8]。&lt;br /&gt;虽然能源消耗降低、失业率上升等因素来说明中国经济并没有获得快速增长的观点一时还很难被完全驳倒。但事实证明了中国经济的确在强劲增长。同时也表明，单凭一两个指标来判断复杂的经济形势是没有任何科学依据的，也是和事实相违背的。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;6 对Thomas Rawski观点的综合评述&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;综合以上的信息，我认为Thomas G. Rawski的质疑是有理由的，能源消耗和增长之间的不对应的原因缺乏进一步的分析；但他质疑中国统计数据造假的观点是站不住脚的；他得出的结论过于轻率，具体说体现在一些方面：&lt;br /&gt;&lt;b&gt;1. Rawski对于GDP数据的质疑是有的一定道理的&lt;/b&gt;&lt;br /&gt;虽然说经济增长率与能源消耗、就业和消费价格数据之间存在着不一致性，且中国正在进行着较大的产业结构调整，但30%的差距依然很难被解释。一方面，能耗的统计存在着一些问题。由于非国有煤炭发展较快，因此20世纪90年代中期以后中国的能源统计一直存在一些问题[2]；另一方面，由于统计制度等多方面的原因，GDP数据的确可能存在着一些误差，而事实上，国家统计局也的确对某些年份的GDP进行了修正。&lt;br /&gt;&lt;b&gt;2. Rawski对于中国官方统计数据来源的质疑较为片面&lt;/b&gt;&lt;br /&gt;对于数据来源的质疑，许宪春在《中外经济学家对中国经济增长率的评论》中指出：“中国自从1985 年开始计算国内生产总值时起，就采取国家统计局统一制定方法制度，地区与国家分级核算的方式，即国家统计局计算全国国内生产总值，省、自治区、直辖市统计局计算本地区国内生产总值。全国国内生产总值从来就不是省级国内生产总值数据的汇总。”“所以不存在国家统计局抛弃省级经济增长数据的问题”[4]&lt;br /&gt;这说明了Thomas对数据来源的质疑是片面的，但从《许宪春详谈中国GDP统计数字来源》[10]我们可以看出，省级汇总的数据的确存在着一些问题，比如1995年第三次全国工业普查发现乡镇企业的工业总产值数据高报了40%[10]。&lt;br /&gt;&lt;b&gt;3. Thomas对于真实GDP的估计是没有依据的&lt;/b&gt;&lt;br /&gt;Thomas认为四年累积经济增长率不会超过官方公布数据的1/ 3 ， 甚至可能更低。Rawski以国内航线的民航客运周转量的增长率为依据，确定中国1998 年经济增长率的上限为2 % ，但是，2000 年国内航线的民航客运周转量的增长率为13. 2 % ，他却认为中国2000 年的经济增长率在2 % ―3 %之间，从而上限仅为3 % ，这显然是自相矛盾的[4]。&lt;br /&gt;中国GDP统计数据确实存在着许多问题，但在一些地区多报的同时，也有一些地区少报了产值，因而认为中国GDP增产率被整体严重高估是没有道理的。东部沿海的省分由于以民营经济为主, 可能会低报经济增长数据以减少上缴中央税收。同时，由于这些省分市场经济发展较快, 数据统计是比较完善和可信的[3]。&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;7 总结&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;本文首先简述了Thomas G. Rawski对中国GDP数据的质疑，之后描述了其它学者对其观点的反质疑；然后，结合《南方周末》对许宪春司长的访谈，揭示了我国在GDP核算上存在的种种问题；同时，本文结合了Klein和Lardy的观点，说明了GDP并不是衡量经济现状的唯一的指标，复杂的经济形势也不是光靠几个指数就能说明的；最后，我综合上述的观点给出对Thomas观点的评述。我们只有综合各方面的信息进行全面的考虑，才能做出准确的判断。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;参考文献&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;[1] Thomas G. Rawski: 《What’s Happening to China’s GDP Statistics?》, China Economic Review 2001.12&lt;br /&gt;[2] Jonathan E. Sinton, 《Aeeuraey and Reliability of China’s EnergyStatistie》, China EconomieReview, 2001, (12)&lt;br /&gt;[3] 姜辉: 《崩溃与威胁—简析近年来国际上对中国经济的若干观点》, p49-p52, 2003&lt;br /&gt;[4] 许宪春(国家统计局国民经济核算司司长): 《中外经济学家对中国经济增长率的评论》,《财贸经济》, 2002 年第二期&lt;br /&gt;[5] 任若恩, 《中国GDP 统计水分有多大――评两个估计中国GDP 数据研究的若干方法问题》, 《经济学季刊》, 2002 年第2 卷第1期&lt;br /&gt;[6] 张新蒋殿春, 《中国经济的增长――数据的可信度以及增长的微观基础》, 《经济学季刊》, Vol 2, No. 1, Oct., 2002&lt;br /&gt;[7] Klein L. R. and Ozmucur S. 《The estimation of China’s economic growth rate》, 2002&lt;br /&gt;[8] Lardy , N. R. , 《China will keep on growing》, 《Asian Wall Street Journal》, June 14. 2002&lt;br /&gt;[9] 《中国GDP增长统计存在水分》, home.xjtu.edu.cn/teacher/yandw/macro/reference/65.doc Mar 6. 2003&lt;br /&gt;[10] 《许宪春详谈中国GDP统计数字来源》, 《南方周末》, 2002.08.01&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-513424996104721894?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/513424996104721894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=513424996104721894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/513424996104721894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/513424996104721894'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/blog-post_23.html' title='质疑的质疑'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5859456114027722252</id><published>2008-11-19T07:56:00.003+08:00</published><updated>2008-11-19T08:24:45.803+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS'/><title type='text'>Note of SAS coding style</title><content type='html'>&lt;b&gt;Guidelines for Coding of SAS® Programs&lt;/b&gt;&lt;br /&gt;        --by Thomas J. Winn Jr., Texas State Auditor’s Office, Austin, TX&lt;br /&gt;&lt;br /&gt;SAS language is like a script but with more flexiblility and less limitation. Sometimes it is useful but as a programmer, I always confused by program writen by SAS, though sometimes the problem is not complex.&lt;br /&gt;&lt;br /&gt;Luckily, I found a paper by Thomas, provide some idea which is practical and beautiful, Though most of them is just a basic law in normal programming. And &lt;i&gt;Law is Freedom&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;And the following material is just copy from the paper.&lt;br /&gt;&lt;br /&gt;“This paper presents a set of guidelines that could be used for writing SAS code that is clear, efficient, and easy to maintain.”&lt;br /&gt;you can write SAS code in a particular way does not mean that you should do so.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Name&lt;/b&gt;&lt;br /&gt;• In naming, avoid cuteness, single-letter names, and names that too closely resemble one another.&lt;br /&gt;• Names should be unique, short, and descriptive – in that order of importance.&lt;br /&gt;• If longer names are needed, underscores may be used to separate words, in order to enhance readability.&lt;br /&gt;• If a user-defined format applies to only one variable, then name the format with a readily-recognizable form of the variable-name plus the suffix FMT .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;READABILITY &amp;amp; APPEARANCE&lt;/b&gt;&lt;br /&gt;♦ Insert a blank line between SAS program steps; that is, before each DATA or PROC step.&lt;br /&gt;♦ Be consistent with your indentation increments.&lt;br /&gt;♦ Indent all statements in a logical grouping by the same amount.&lt;br /&gt;♦ Left-justify all OPTIONS, DATA, PROC, and RUN statements. Indent all of the statements within a DATA or PROC step.&lt;br /&gt;♦ Indent conditional blocks and DO groups, and do it consistently, The logic will be easier to follow.&lt;br /&gt;♦ Align each END statement with its corresponding DO statement. This will make it easier to verify that they match.&lt;br /&gt;♦ Remember to preface major blocks of code with explanatory comments.&lt;br /&gt;♦ Consider inserting PAGE statements to force the SAS Log to begin tracing the execution of new modules on a new page.&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;span style="color: rgb(19, 79, 92);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;REUSABILITY&lt;/b&gt;&lt;br /&gt;Since most of the operations of the SAS macro facility are carried out in the background, sometimes debugging them can be fairly mysterious.&lt;br /&gt;• Write code that can be re-used, with different parameters. Keyword parameters are preferable to positional parameters, because they are less likely to be specified incorrectly.&lt;br /&gt;• Write the code you use repeatedly as a macro, and then, instead of repeating your code, invoke the macro.&lt;br /&gt;• Avoid using global macro variables.&lt;br /&gt;• If a macro is used by more than one program, put it into an &lt;b&gt;AUTOCALL &lt;/b&gt;macro library.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EFFICIENCY&lt;/b&gt;&lt;br /&gt;Avoid jumping to statement labels by GO TO, or LINK statements and RETURN statements,&lt;br /&gt;♦ If possible, replace logic which jumps between subroutines with DO ...END and IF ... THEN ... ELSE ...-logic,&lt;br /&gt;♦ End every DATA and PROC (except PROC SQL) step with a RUN statement,&lt;br /&gt;♦ End every PROC SQL step with a QUIT statement.&lt;br /&gt;&lt;br /&gt;Place most of the non-executable statements in a DATA step before all of the executable statements.&lt;br /&gt;In particular, place variable attribute and other declarative statements near to the top of the DATA step, and ahead of the executable statements.&lt;br /&gt;&lt;br /&gt;• In a DATA step, place most of the non-executable statements before the executable statements – exceptions include the DROP or KEEP statements, which may be placed after the executable statements.&lt;br /&gt;• Define INPUT and PUT variables one per line, using @ pointer control.&lt;br /&gt;• Screen data for unusual circumstances.&lt;br /&gt;&lt;i&gt;&lt;br /&gt;reduce the number of times the data are read:&lt;/i&gt;&lt;br /&gt;♦ Minimize the number of passes through the data,&lt;br /&gt;♦ Minimize the number of DATA steps,&lt;br /&gt;♦ Read and store only the data that are needed,&lt;br /&gt;♦ Sort the data only when it is absolutely necessary.&lt;br /&gt;&lt;br /&gt;When you read in an external file, use pointer controls, informats, or column specifications in the INPUT statement, to read only those fields you actually need.&lt;br /&gt;• Store only the variables you need by using DROP or KEEP statements, DROP= or KEEP= options (eliminate variables from the output data set which are needed only during DATA step execution, and not afterward).&lt;br /&gt;• When only one condition can be true for a given observation, use IF ... THEN ...ELSE ... statements (or a SELECT group), instead of a series of IF ... THEN ... statements without ELSE statements (In a sequence of IF-THEN statements without the ELSE, the SAS System will check each condition for every observation).&lt;br /&gt;• When using a series of IF ... THEN ... ELSE ... statements, list the conditions in descending order of probability. This will save CPU time.,&lt;br /&gt;• Use the LENGTH statement to reduce the storage space for variables in SAS data sets.&lt;br /&gt;• Minimize workspace usage by using the DELETE statement in a PROC DATASETS step, to eliminate temporary data sets that are no longer needed by the program.&lt;br /&gt;• Use the IN operator instead of a series of multiple logical OR operators.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5859456114027722252?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5859456114027722252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5859456114027722252' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5859456114027722252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5859456114027722252'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/note-of-sas-coding-style.html' title='Note of SAS coding style'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-9113291460027813308</id><published>2008-11-17T22:41:00.003+08:00</published><updated>2008-12-18T11:14:48.548+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Code Complete PART 3</title><content type='html'>&lt;font size="3"&gt;&lt;b&gt;Variables&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;chapter 10. General issues in using variables&lt;/span&gt;&lt;br&gt;1. Data Literacy&lt;br&gt;2. Making variable declarations easy&lt;br&gt;3. Guidelines for initializing variables&lt;br&gt;&lt;/b&gt;在声明变量时初始化&lt;br&gt;靠近变量第一次使用时初始化&lt;br&gt;理想情况下，靠近第一次使用的位置声明和初始化&lt;br&gt;final &amp;amp; const&lt;br&gt;counter &amp;amp; accumulator&amp;nbsp; --- i, j, k, sum, total&lt;br&gt;在constructor中初始化类的数据成员&lt;br&gt;检查是否需要重新初始化&lt;br&gt;一次性初始化具名常m量--使用可执行代码&lt;br&gt;使用编译器设置&lt;br&gt;利用编译器警告&lt;br&gt;检查输入参数合法性&lt;br&gt;初始化工作内存。 0xCC &amp;amp; 0xDFADBEEF&lt;br&gt;&lt;b&gt;4. Scope&lt;br&gt;&lt;/b&gt;visibility -- 可见性 作用域&lt;br&gt;Localize references to variables&lt;br&gt;span -- 跨度&lt;br&gt;生存时间&lt;br&gt;&lt;i&gt;General guidelines for minimizing scope&lt;/i&gt;&lt;br&gt;在循环开始之前再初始化循环中使用的变量&lt;br&gt;直到变量使用时才为其赋值&lt;br&gt;把相关语句放到一起&lt;br&gt;提取子程序&lt;br&gt;开始时采用最严格的可见性，之后再扩充&lt;br&gt;&lt;i&gt;Comments on minimizing scope&lt;/i&gt;&lt;br&gt;intellectual manageablility -- 智力可管理性&lt;br&gt;&lt;b&gt;5. Persistence&lt;br&gt;&lt;/b&gt;数据的生命期&lt;br&gt;&lt;b&gt;6. Binding time&lt;/b&gt;&lt;br&gt;&lt;i&gt;绑定时间：&lt;/i&gt;&lt;br&gt;编码时 -- 神秘数值&lt;br&gt;编译时 -- 具名常量&lt;br&gt;加载时 -- 外部数据源读取&lt;br&gt;对象实例化时 &lt;br&gt;即时&lt;br&gt;绑定时间越早灵活性越差，但复杂度越低。&lt;br&gt;&lt;b&gt;7. Relationship between data types and control structures&lt;br&gt;&lt;/b&gt;Jackson.&lt;br&gt;Sequential data&lt;br&gt;selective data&lt;br&gt;interative data&lt;br&gt;&lt;b&gt;8. Using each variable for exactly one purpose&lt;br&gt;&lt;/b&gt;每个变量仅有单一用途&lt;br&gt;避免让变量有隐含意义&lt;br&gt;确保使用了所有已申明的变量&lt;br&gt;&lt;b&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Chapter 11. The power of variable names&lt;/span&gt;&lt;br&gt;1. Considerations of choosing good names&lt;br&gt;&lt;/b&gt;完全 &amp;amp;&amp;amp; 准确&lt;br&gt;problem orientation&lt;br&gt;what, not how&lt;br&gt;length: 10 - 16&lt;br&gt;&lt;i&gt;限定词放在变量名的最后：&lt;/i&gt;&lt;br&gt;Total, sum, average, max, min, record, string, pointer...&lt;br&gt;NumXXX: a total number&lt;br&gt;XXXNum: 下标&lt;br&gt;begin/end&lt;br&gt;first/last&lt;br&gt;locked/unlocked&lt;br&gt;min/max&lt;br&gt;next/previous&lt;br&gt;old/new&lt;br&gt;opened/closed&lt;br&gt;visible/invisible&lt;br&gt;source/target&lt;br&gt;source/destination&lt;br&gt;up/down&lt;br&gt;&lt;b&gt;2. Naming specific types of data&lt;br&gt;&lt;/b&gt;&lt;i&gt;Naming loop indexes&lt;/i&gt;&lt;br&gt;i, j, k&lt;br&gt;XXXindex, XXXCount&lt;br&gt;to avoid index cross-talk&lt;br&gt;&lt;i&gt;Naming status variables&lt;br&gt;&lt;/i&gt;'flag' is not good&lt;br&gt;&lt;i&gt;Naming temporary variables&lt;br&gt;&lt;/i&gt;警惕临时变量，弄清其实际用途&lt;br&gt;&lt;i&gt;Naming boolean variables&lt;br&gt;&lt;/i&gt;典型的boolean名：&lt;br&gt;done, error, found, success or OK.&lt;br&gt;&lt;i&gt;Naming enumerated types&lt;br&gt;&lt;/i&gt;使用前缀&lt;br&gt;&lt;b&gt;3. The power of naming conventions&lt;br&gt;&lt;/b&gt;&lt;i&gt;why:&lt;br&gt;when:&lt;br&gt;degrees of formality:&lt;br&gt;&lt;/i&gt;&lt;b&gt;4. Informal naming comventions&lt;br&gt;&lt;/b&gt;&lt;i&gt;Guidelines for a language-independent conventions&lt;br&gt;&lt;/i&gt;区分变量名和子程序名&lt;br&gt;区分类和对象&lt;br&gt;标识全局变量&lt;br&gt;标识成员函数&lt;br&gt;标识类型申明&lt;br&gt;标识具名常量&lt;br&gt;枚举类型的元素&lt;br&gt;格式化命名&lt;br&gt;&lt;i&gt;Guidelines for language-specific conventions&lt;br&gt;&lt;/i&gt;&lt;b&gt;5. Standardized perfixes&lt;br&gt;&lt;/b&gt;&lt;i&gt;User-defined type abbreviations&lt;br&gt;&lt;/i&gt;UDT: user defined type&lt;br&gt;ch, doc, pa, scr, sel, wn&lt;br&gt;&lt;i&gt;Semantic perfixs&lt;br&gt;&lt;/i&gt;c: count&lt;br&gt;first &amp;amp; last&lt;br&gt;g: global var&lt;br&gt;i: index&lt;br&gt;lim: limitation -- first &amp;lt;&amp;gt; last &amp;lt;&amp;gt; lim : llim = last + 1&lt;br&gt;m: class var&lt;br&gt;max &amp;amp;&amp;amp; min&lt;br&gt;p: pointer&lt;br&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 12: Fundamental data types&lt;/span&gt;&lt;br&gt;1. Numbers in genaral&lt;br&gt;&lt;/b&gt;avoid Magic number.&lt;br&gt;avoid mixed compare&lt;br&gt;be careful of warning&lt;br&gt;&lt;b&gt;2. Integers&lt;br&gt;&lt;/b&gt;检查整数除法。地板除，真实除&lt;br&gt;检查整数溢出&lt;br&gt;检查中间结果溢出&lt;br&gt;&lt;b&gt;3. Floating-point Numbers&lt;br&gt;&lt;/b&gt;避免数量级相差巨大的数之间的加减&lt;br&gt;避免&lt;b&gt;等量判断&lt;/b&gt;&lt;br&gt;处理舍入误差问题 --使用更高的精度，使用BCD&lt;br&gt;&lt;b&gt;4. Characters and strings&lt;br&gt;&lt;/b&gt;避免使用神秘字符及神秘字符串&lt;br&gt;Unicode&lt;br&gt;在程序生命期中尽早决定国际化/本地化策略&lt;br&gt;ISO 8859 or Unicode&lt;br&gt;采用某种一致的字符串转换策略&lt;br&gt;&lt;b&gt;5. Boolean variables&lt;br&gt;&lt;/b&gt;用布尔变量来简化复杂的判断&lt;br&gt;需要的话创建自己的布尔类型&lt;br&gt;---typedef int BOOLEAN;&lt;br&gt;&lt;b&gt;6. Enumerated Types&lt;br&gt;&lt;/b&gt;提高可读性，可靠性，可修改性。作为布尔变量的修改方案。&lt;br&gt;&lt;b&gt;7. Named constants&lt;br&gt;&lt;/b&gt;single-point control&lt;br&gt;在数据申明中使用具名常量&lt;br&gt;避免使用文字量&lt;br&gt;用具有适当作用域的变量或类来模拟具名常量&lt;br&gt;统一地使用&lt;br&gt;&lt;b&gt;8. Arrays&lt;br&gt;&lt;/b&gt;考虑用容器来代替数组，或将数组当作顺序化的容器来处理&lt;br&gt;检查数组的边界点&lt;br&gt;提防下标串话&lt;br&gt;&lt;b&gt;9. Creating your own types&lt;/b&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-9113291460027813308?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/9113291460027813308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=9113291460027813308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/9113291460027813308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/9113291460027813308'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/code-complete-part-3.html' title='Code Complete PART 3'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5117678907302264709</id><published>2008-11-17T16:12:00.012+08:00</published><updated>2008-12-16T22:19:42.820+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><category scheme='http://www.blogger.com/atom/ns#' term='电影'/><title type='text'>千与千寻</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_afohQU5wMHo/SSEoheor0VI/AAAAAAAADjk/SOSn_p0UbK4/s1600-h/68dp643rw0h1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 140px; height: 200px;" src="http://4.bp.blogspot.com/_afohQU5wMHo/SSEoheor0VI/AAAAAAAADjk/SOSn_p0UbK4/s200/68dp643rw0h1.jpg" alt="" id="BLOGGER_PHOTO_ID_5269537594624692562" border="0" /&gt;&lt;/a&gt;这个周末窝宿舍看了6部电影：辛德勒的名单，战争之王，千与千寻，马克思佩恩，我是传奇和风云诀。辛德勒的名单和千与千寻原先就看过，不过都是很多年前了；战争之王也是部优秀的电影；其它三部就很soso了。很久很久没这么看电影了，有时是因为没时间，有时是因为没心境。&lt;br /&gt;&lt;br /&gt;一些优秀的东西不管在哪个时代，那个年龄段的人看来都是优秀的。人性、关爱和对心灵的探求让人在并不温暖的初冬感到丝丝暖意。&lt;br /&gt;&lt;br /&gt;人在成长的过程中必然会丢失一些东西，有些时候甚至很难说这种成长值不值得，长大了，就很难再听见心灵里的某种声音了，那是种至真至诚的感动，明静而通澈。&lt;br /&gt;&lt;br /&gt;不得已，人长大了总要负担些什么了，可以说是上进，可以说是责任感，也可以说是欲望。又有什么差别呢。不过有时候是要静下来听听自己心灵的声音，不要被自己彻底地蒙蔽。就像乔布斯说的，把每天当成最后一天来过，这样，自然会听从心底最本真的声音。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5117678907302264709?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5117678907302264709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5117678907302264709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5117678907302264709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5117678907302264709'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/blog-post_17.html' title='千与千寻'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_afohQU5wMHo/SSEoheor0VI/AAAAAAAADjk/SOSn_p0UbK4/s72-c/68dp643rw0h1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6630694949746253482</id><published>2008-11-16T22:30:00.004+08:00</published><updated>2008-12-16T22:24:44.017+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>上外的猫</title><content type='html'>&lt;a href='http://4.bp.blogspot.com/_afohQU5wMHo/SSGANsAaRWI/AAAAAAAADkQ/MPbd-2vVeX0/s1600-h/DSCF0420.jpg'&gt;&lt;img src='http://4.bp.blogspot.com/_afohQU5wMHo/SSGANsAaRWI/AAAAAAAADkQ/MPbd-2vVeX0/s160/DSCF0420.jpg' border='0' alt=''style='clear:both;float:left; margin:0px 10px 10px 0;' /&gt;&lt;/a&gt;阴错阳差到了上外，一个比上财还小的学校。不过有趣的是发现了黑猫白猫和它们的仔儿。女生多的学校就是猫多，而且都有两个特点——肥，胆大。&lt;br /&gt;&lt;a href='http://2.bp.blogspot.com/_afohQU5wMHo/SSGAOYO9GyI/AAAAAAAADkY/woqw6lCFdTU/s1600-h/DSCF0415.jpg'&gt;&lt;img src='http://2.bp.blogspot.com/_afohQU5wMHo/SSGAOYO9GyI/AAAAAAAADkY/woqw6lCFdTU/s160/DSCF0415.jpg' border='0' alt=''style='clear:both;float:left; margin:0px 10px 10px 0;' /&gt;&lt;/a&gt;&lt;br /&gt;人走过去，它不动；有吃的，立马哈过来；没吃的，扭过头不看你；你吓它吧，有时象征性地跑两步，有时干脆就不跑。简单的说，就是嚣张、厚颜无耻，彻底丧失了作为一只猫的优良传统。&lt;br /&gt;#ReadMore#&lt;br /&gt;&lt;a href='http://4.bp.blogspot.com/_afohQU5wMHo/SSGAOvLSxCI/AAAAAAAADkg/7d839V555EY/s1600-h/DSCF0416.jpg'&gt;&lt;img src='http://4.bp.blogspot.com/_afohQU5wMHo/SSGAOvLSxCI/AAAAAAAADkg/7d839V555EY/s160/DSCF0416.jpg' border='0' alt=''style='clear:both;float:left; margin:0px 10px 10px 0;' /&gt;&lt;/a&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6630694949746253482?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6630694949746253482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6630694949746253482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6630694949746253482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6630694949746253482'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/blog-post_7323.html' title='上外的猫'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_afohQU5wMHo/SSGANsAaRWI/AAAAAAAADkQ/MPbd-2vVeX0/s72-c/DSCF0420.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-251071177134910705</id><published>2008-11-15T11:43:00.002+08:00</published><updated>2008-11-15T11:46:37.608+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>The Zen of python</title><content type='html'>PEP is short for Python Enhancement Proposals, and PEP0 is the index of these files.&lt;br&gt;http://www.python.org/dev/peps/pep-0000/&lt;br&gt;&lt;br&gt;The Zen of python -- May be simple, but practical. It is in PEP20.&lt;br&gt;&lt;br /&gt;&lt;pre&gt;    Beautiful is better than ugly.&lt;br&gt;    Explicit is better than implicit.&lt;br&gt;    Simple is better than complex.&lt;br&gt;    Complex is better than complicated.&lt;br&gt;    Flat is better than nested.&lt;br&gt;    Sparse is better than dense.&lt;br&gt;    Readability counts.&lt;br&gt;    Special cases aren't special enough to break the rules.&lt;br&gt;    Although practicality beats purity.&lt;br&gt;    Errors should never pass silently.&lt;br&gt;    Unless explicitly silenced.&lt;br&gt;    In the face of ambiguity, refuse the temptation to guess.&lt;br&gt;    There should be one-- and preferably only one --obvious way to do it.&lt;br&gt;    Although that way may not be obvious at first unless you're Dutch.&lt;br&gt;    Now is better than never.&lt;br&gt;    Although never is often better than *right* now.&lt;br&gt;    If the implementation is hard to explain, it's a bad idea.&lt;br&gt;    If the implementation is easy to explain, it may be a good idea.&lt;br&gt;    Namespaces are one honking great idea -- let's do more of those!&lt;br&gt;&lt;br&gt;And I think Simple &lt;i&gt;is &lt;/i&gt;beautiful.&lt;br&gt;&lt;br&gt;I like python, for its liquid, simple and prowerful.&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-251071177134910705?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/251071177134910705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=251071177134910705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/251071177134910705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/251071177134910705'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/zen-of-python.html' title='The Zen of python'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5343295054125258184</id><published>2008-11-15T11:40:00.003+08:00</published><updated>2008-12-17T09:16:16.100+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='系统'/><title type='text'>Debian note, installation</title><content type='html'>Today, I installed debian in my virtual machine. To learn more about development in Linux environment. And from now on, I will try my best to write blog in English, it is a good practice for my write skill. :)&lt;br /&gt;&lt;br /&gt;First, download a ISO file form http://www.debian.com/;&lt;br /&gt;the path of the ISO file is http://cdimage.debian.org/debian-cd/4.0_r5/i386/iso-cd/debian-40r4a-etchnhalf-i386-netinst.iso, It is a image for net installation.&lt;br /&gt;&lt;br /&gt;Finished installation, edit /etc/apt/sources.list, add an update source in the following form:&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;deb http://host/debian distribution section1 section2 section3&lt;/span&gt; &lt;span style="color: rgb(7, 55, 99);"&gt; deb-src http://host/debian distribution section1 section2 section3&lt;/span&gt;&lt;br /&gt;for example:&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;deb http://http.us.debian.org/debian stable main contrib non-free&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I select a mirror in Taiwan to do the installation. Use the command like: apt-get install &lt;i&gt;package.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;Install R language. It is a free statistical programming language.&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;apt-get install r-base&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Install mySQL:&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;#apt-get install mysql-server mysql-client libmysqlclient15-dev&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And Vim should also be reinstalled to get full version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5343295054125258184?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5343295054125258184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5343295054125258184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5343295054125258184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5343295054125258184'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/debian-note-installation.html' title='Debian note, installation'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5353266632364318570</id><published>2008-11-14T21:11:00.003+08:00</published><updated>2008-12-16T22:24:44.019+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>一年中最好的时节</title><content type='html'>冬至，凉爽而清澈的天气，阳光艳丽慵懒。一年中最好的时节。&lt;br&gt;从一点睡到八点，阳光正照到我的床上，醒来，穿衣，刷牙。咖啡加蜂蜜面包，懒洋洋地开机，下载。&lt;br&gt;编程。所有东西都有它内在的优美，特别是当它无序的时候。从无序到有序，从混杂到简洁。然后Simple &amp;amp;&amp;amp; beautiful。&lt;br&gt;自然，自在，自由。一些东西就由着它生长吧。&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5353266632364318570?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5353266632364318570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5353266632364318570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5353266632364318570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5353266632364318570'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/blog-post.html' title='一年中最好的时节'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-259166258969862946</id><published>2008-11-08T18:34:00.002+08:00</published><updated>2008-12-16T22:23:45.651+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='数据挖掘'/><title type='text'>数据挖掘——技术 or 艺术？</title><content type='html'>今天在MYDB2.CN上发现了IBM讲师张英做的slide，《数据挖掘——技术 or 艺术？》。觉得最好的隐喻相当地恰当，copy如下：&lt;br&gt;&lt;br&gt;1  取景（寻找业务问题－寻找业务增长空间） &lt;br&gt;2  构建画面的背景（定义业务问题） &lt;br&gt;4  根据天气和光线的情况调整曝光程度等（调整建模方法和参数） &lt;br&gt;5  冲洗选择一张最佳的照片（选择一个最佳的模型） &lt;br&gt;6  后期美化处理（业务含义解释和建议） &lt;br&gt;7  装裱起来，挂在该挂的位置例如床边，书桌或者客厅什么的（模型部署，用于改善实际的业务） &lt;br&gt;&lt;br&gt;会找：发现问题，以及解决问题的数据挖掘方法 &lt;br&gt; 会用：处理数据，操作软件 &lt;br&gt; 会说：对挖掘结果给出解释分析 &lt;br&gt; 会试：需要不断的调优，改进挖掘效果&lt;br&gt;&lt;br&gt;希望能成为一个信息管理和商务智能方面的专家，愿意为之付出持续而谦卑地努力，因为professional &amp;amp;&amp;amp; free往往是相互依存的。&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-259166258969862946?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/259166258969862946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=259166258969862946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/259166258969862946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/259166258969862946'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/or.html' title='数据挖掘——技术 or 艺术？'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-320905010393687118</id><published>2008-11-02T21:34:00.002+08:00</published><updated>2008-12-16T22:23:21.656+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='游戏'/><title type='text'>Rubik's Cube</title><content type='html'>Rubik's Cube也就是魔方，昨天晚上在地摊上买了一个，魔方不是一个好的玩具，特别是对于我这样的笨小孩来说，很能打击自尊心。现在长这么大了再次上手魔方，看看是不是长大聪明了还是继续印证“痴长白大”这句家乡的古话。&lt;br /&gt;&lt;br /&gt;在地铁上玩了一把小时，还是没个头绪，我也意识到了中心块、棱块和角块的特殊，可还是没发现什么。我知道我笨，只是一次又一次地验证这个事实还是蛮让人沮丧的。&lt;br /&gt;&lt;br /&gt;今天google了一下，发现了下面的入门教程&lt;a title="http://www.rubik.com.cn/beginner.htm" href="http://www.rubik.com.cn/beginner.htm" id="mhsz"&gt;http://www.rubik.com.cn/beginner.htm&lt;/a&gt;，另外百度百科上也有魔方的详细介绍：&lt;a title="http://baike.baidu.com/view/35837.html?wtp=tt" href="http://baike.baidu.com/view/35837.html?wtp=tt" id="wdx7"&gt;http://baike.baidu.com/view/35837.html?wtp=tt&lt;/a&gt;。真不知道，原来魔方还有这么多的故事。解魔方也有系统的方法，就是一些特定的步骤和所谓的魔方算法，一路看下来，即使是最简单的7步法也有一些东西要记，虽然跟着教程很快就完成了魔方的复原，可要我自己重新操作也是搞不来的。人老了的最大的缺点就是懒的思考。&lt;br /&gt;&lt;br /&gt;rubik.com.cn的站长还分享苹果CEO Steve Jobs在斯坦福的演讲：“听从自己心灵的指示；把每天当做最后一天”。这样的人无疑是快乐的，而且是强大的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-320905010393687118?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/320905010393687118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=320905010393687118' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/320905010393687118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/320905010393687118'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/rubik-cube.html' title='Rubik&amp;#39;s Cube'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-460724445068513706</id><published>2008-11-02T11:50:00.003+08:00</published><updated>2008-12-16T22:23:21.658+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='游戏'/><title type='text'>RA3</title><content type='html'>终于出了RA3了，从RA2到现在，十多年了吧，可惜的是红警依旧，西屋不再，让人不得不感叹沧海桑田，世事难料。。^_^红警是个蛮好的发泄游戏，没什么技巧，不用动脑，只要疯狂造兵，一下扔过去就是了。&lt;br /&gt;RA3里面原来的特色兵种大都还在，只是好像少了火箭飞行兵和尤里。不过多出来个日本，邪门得很。上午下有些，然后玩了下战略，下午拿美俄日一个个和日本打了下，玩得腻了，删！&lt;br /&gt;红警兵种都加了技能，这么着有点不像红警了，模仿的结局就是沦落。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/SQ0jeCEFYMI/AAAAAAAADfg/m-BxiPZ6sfQ/s1600-h/%E6%9C%AA%E5%91%BD%E5%90%8D.jpg"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://1.bp.blogspot.com/_afohQU5wMHo/SQ0jeCEFYMI/AAAAAAAADfg/m-BxiPZ6sfQ/s400/%E6%9C%AA%E5%91%BD%E5%90%8D.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/SQ0jedn-VnI/AAAAAAAADfo/1pNpYon-MKQ/s1600-h/%E6%9C%AA%E5%91%BD%E5%90%8D2.jpg"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/SQ0jedn-VnI/AAAAAAAADfo/1pNpYon-MKQ/s400/%E6%9C%AA%E5%91%BD%E5%90%8D2.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-460724445068513706?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/460724445068513706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=460724445068513706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/460724445068513706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/460724445068513706'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/11/ra3.html' title='RA3'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_afohQU5wMHo/SQ0jeCEFYMI/AAAAAAAADfg/m-BxiPZ6sfQ/s72-c/%E6%9C%AA%E5%91%BD%E5%90%8D.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1900773576982795191</id><published>2008-10-30T21:44:00.002+08:00</published><updated>2008-12-16T22:18:20.520+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>10.30</title><content type='html'>开学一个半月，看着时间花花地流过，而且越流越快，可面前还有很多问题没有解决，也许到了重新评估一下的时候了。&lt;br /&gt;&lt;br /&gt;主要的问题还是课业太重，自己的基础比较差，而且又花了很多时间在非课程的东西上，导致一时跟不上进度。想想课前预习课后复习才是效率最高的办法，以后多多注意。光统计就已经是科目繁杂，再加上对应的经济金融知识，以及数据管理、分析工具的掌握，这些对我这一年多学习时间来说，根本没有完成的希望。&lt;br /&gt;&lt;br /&gt;还是思想和工具的问题，没有思想，再多的工具也没有用；可决定思想的往往就是工具。就像思想和语言的关系，思想往往被语言所限制，如果一个思想不能表达，它就不能称之为一个思想。现在我也是面临着这样的困境，金融经济分析是商务决策的工具；数据挖掘是经济分析的工具；而SAS等基础软件则是统计的工具。但现在，这些不同层面上的思想和工具在我面前都是脱节的，这是我现在面临的最大的困惑。记得在GSMC实习的时候，Lin曾经和我说，要做数据挖掘至少要5年的从业经验，现在看来，五年的学习曲线并不是很夸张，如果把业务方面的东西也加上去的话。&lt;br /&gt;&lt;br /&gt;专注与学业及SAS和IBM的相应解决方案。如果可以的话，再加强些英语吧～～&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1900773576982795191?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1900773576982795191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1900773576982795191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1900773576982795191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1900773576982795191'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/1030.html' title='10.30'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1156893210009700820</id><published>2008-10-23T22:07:00.003+08:00</published><updated>2008-12-18T11:14:48.549+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Code Complete PART2</title><content type='html'>&lt;b&gt;&lt;span style="font-size:100%;"&gt;PART2: 创建高质量的代码&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;chapter 5: Design in Construction 软件构建中的设计&lt;/span&gt;&lt;br /&gt;1. Design Challenges&lt;br /&gt;&lt;/b&gt;Design --&amp;gt; &lt;span style="color: rgb(102, 0, 0);"&gt;wicked&lt;/span&gt;: 只有通过解决或部分解决才能明确的问题  现实&amp;lt;--&amp;gt;理论&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Sloppy process --&amp;gt; tide result&lt;/span&gt;&lt;br /&gt;方法论；优劣的差异；good enough?&lt;br /&gt;Tradeoffs &amp;amp; priorities&lt;br /&gt;Restrictions&lt;br /&gt;Nondeterministic&lt;br /&gt;Heuristic process&lt;br /&gt;Emergent 自然而然&lt;br /&gt;&lt;b&gt;2. Key Design Concepts&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Primary Technical Imperative: &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0); background-color: rgb(207, 226, 243);"&gt;Managing Complexity&lt;/span&gt;&lt;br /&gt;Accidental and &lt;span style="color: rgb(102, 0, 0);"&gt;Essential &lt;/span&gt;difficulties&lt;br /&gt;失控的复杂度 --&amp;gt; 失败 --尽量减少在任一时间需要考虑的程序量&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Desirable characteristics of a design&lt;/span&gt;&lt;br /&gt;Minimal complexity  --避免“聪明”&lt;br /&gt;Ease of maintenance  --self-explanatory&lt;br /&gt;loose coupling&lt;br /&gt;extensibility&lt;br /&gt;reusablity&lt;br /&gt;high fan-in  --good use of utility classes&lt;br /&gt;low fan-out   --7&lt;br /&gt;portability&lt;br /&gt;leanness  --完成-&amp;gt;不能删除任何东西：伏尔泰&lt;br /&gt;stratification&lt;br /&gt;standard techniques&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Level of design&lt;br /&gt;&lt;/span&gt;System --&amp;gt; subsystem 子系统：业务规则、GUI、DB、对象依赖性&lt;br /&gt;--&amp;gt; classed --&amp;gt; routines --&amp;gt; internal routine&lt;br /&gt;&lt;b&gt;3. Design Buildng Blocks: Heuristics&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;find real-world objects&lt;/span&gt;&lt;br /&gt;辨识对象及属性 --&amp;gt; 确定自身操作 --&amp;gt; 对其他对象的操作 --&amp;gt; 可见性 --&amp;gt; 公开接口&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Form consistent abstractions&lt;/span&gt;&lt;br /&gt;抽象是一种让你关注某一概念的时候可以同时放心地忽视其中一些细节的能力--在不同的层次处理不同的细节。&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Encapsulate Implementation details&lt;/span&gt;&lt;br /&gt;房屋建造&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Inherit -- &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0); background-color: rgb(207, 226, 243);"&gt;when inheritance simplifies the design&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Hide secrets &lt;/span&gt;(Information Hiding)&lt;br /&gt;封装，模块化 冰山&lt;br /&gt;隐藏复杂度、隐藏变化源&lt;br /&gt;障碍：信息分散 循环依赖 类内数据-&amp;gt;全局数据 性能损耗&lt;br /&gt;价值：修改 设计&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Identify areas likely to change&lt;/span&gt;&lt;br /&gt;寻找 分离 预防&lt;br /&gt;易变化的区域：业务规则 输入输出 非标准语言特性 困难的设计和构建 状态变量&lt;br /&gt;anticipating different degrees of change&lt;br /&gt;让变化的影响范围和发生变化的可能性成反比&lt;br /&gt;有用的最小子集 --&amp;gt; 扩充&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;keep coupling loose&lt;/span&gt;&lt;br /&gt;criteria: 规模（连接数） 可见性 灵活性&lt;br /&gt;kinds of coupling:&lt;br /&gt;simple data parameter coupling&lt;br /&gt;simple object coupling&lt;br /&gt;object-parameter coupling&lt;br /&gt;syntictic coupling: 控制标志 假设。。。&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Look for common design patterns&lt;/span&gt;&lt;br /&gt;现成抽象 --&amp;gt; 减少复杂度&lt;br /&gt;细节制度化 --&amp;gt; 减少出错&lt;br /&gt;多种方案 --&amp;gt; 启发&lt;br /&gt;高层次 --&amp;gt; 简化交流&lt;br /&gt;&lt;b&gt;4. Design Practices&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Iterate&lt;/span&gt; &lt;span style="background-color: rgb(207, 226, 243);"&gt;Divide and conquer&lt;/span&gt; &lt;span style="background-color: rgb(207, 226, 243);"&gt;Top-down and botton-up design approaches&lt;/span&gt;&lt;br /&gt;top-down: 易上手，但易受底层复杂度影响&lt;br /&gt;botton-up: 复杂，但可早期鉴别出系统的复杂度，设计出更好的高层类&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;experimental prototyping&lt;/span&gt; &lt;span style="background-color: rgb(207, 226, 243);"&gt;collaborative design&lt;/span&gt; &lt;span style="background-color: rgb(207, 226, 243);"&gt;How much design is enough&lt;/span&gt;&lt;br /&gt;最大的设计失误在于自我认为做的很充分，事后却发现做得不够。&lt;br /&gt;最大的悲哀莫过于大厦快要完工时地基出了问题。 ——罗素&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Capturing your work&lt;/span&gt;&lt;br /&gt;doc in source, wiki, mail, DC, picture, CRC(类、职责、合作者), UML&lt;br /&gt;&lt;b&gt;5. Comments on popular methodologies&lt;br /&gt;&lt;/b&gt;Big design up front --&amp;gt; little design up front or enough design up front&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Design in General&lt;/span&gt;&lt;br /&gt;&lt;u&gt;Couceptul Blockbusting: A Guide to Better Ideas&lt;br /&gt;How to Solve it: A New Aspect of Mathematical Method&lt;br /&gt;How to Solve it: Modern Heuristics&lt;/u&gt;&lt;br /&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;&lt;br /&gt;chapter 6: Working Classes 可以工作的类&lt;br /&gt;&lt;/b&gt;&lt;b&gt;1. Class Foundations: Abstract Data Types(ADTs)&lt;br /&gt;&lt;/b&gt;Benefits: 隐藏实现细节 支持改动 接口提供更多信息 易提高性能 正确性验证 自说明性 数据传递 实体操作&lt;br /&gt;ADT + 继承、多态 --&amp;gt; 类&lt;br /&gt;&lt;b&gt;2. Good Class Interfaces&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Good Abstraction&lt;/span&gt;&lt;br /&gt;抽象是一种以简化的形式看待复杂操作的能力 混杂--&amp;gt;一致&lt;br /&gt;类接口应展现一致的抽象层次&lt;br /&gt;理解类所实现的抽象 精确！&lt;br /&gt;提供成对的服务&lt;br /&gt;转移不相关信息 --&amp;gt; 模块内聚&lt;br /&gt;让接口可编程，而不是表达定义&lt;br /&gt;谨防破坏接口的抽象&lt;br /&gt;抽象性 and 内聚性&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Good Encapsulation&lt;/span&gt;&lt;br /&gt;限制类和成员的可访问性（accessibility）&lt;br /&gt;不公开暴露成员数据&lt;br /&gt;避免把私有的实现细节放入类的接口&lt;br /&gt;不要对类的使用者做出任何假设&lt;br /&gt;避免使用友元类（friend class）&lt;br /&gt;让阅读代码比编写代码更方便&lt;br /&gt;警惕在语义上破坏封装性：针对接口编程 --&amp;gt; 透过接口针对内部实现编程×&lt;br /&gt;&lt;b&gt;3. Design and Implementation Issues&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Containment("has a" relationships)&lt;/span&gt;&lt;br /&gt;使用包含 万不得已使用private继承 警惕超过七个数据成员的类&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Inheritance("is a" relationships)&lt;/span&gt;&lt;br /&gt;更精简的代码&lt;br /&gt;成员函数：对派生类可见？有默认实现？能被覆盖？&lt;br /&gt;数据成员：对派生类可见？&lt;br /&gt;要么对继承做详细的说明，要么不使用继承&lt;br /&gt;Liskov替换原则：派生类必须能通过基类的接口被使用，且使用者无需了解两者之间的差异&lt;br /&gt;确保只继承需要继承的部分&lt;br /&gt;注意：继承接口 --&amp;gt; 继承实现 继承实现 --&amp;gt; 继承接口&lt;br /&gt;只想要实现 继承？包含！&lt;br /&gt;不要“覆盖”（语法角度）一个不可覆盖（语义角度）的成员函数！&lt;br /&gt;把共用的接口反正继承树尽可能高的地方&lt;br /&gt;只有一个实例：新的对象？新的类？&lt;br /&gt;只有一个派生类：提前设计？&lt;br /&gt;覆盖但没做任何操作：怀疑！&lt;br /&gt;类型检查？多态！&lt;br /&gt;让所有数据都是private&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;对继承持有歧视的态度！&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Member functions and data&lt;/span&gt;&lt;br /&gt;子程序的数量 类调用子程序的数量 对其它类的子程序的间接调用： 尽可能少！&lt;br /&gt;尽量减少类与类间相互合作的范围。&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Constructors&lt;/span&gt;&lt;br /&gt;尽可能在构造函数中初始化所以数据成员&lt;br /&gt;private constructors --&amp;gt; singleton property&lt;br /&gt;deep copies &amp;gt;&amp;gt; shallow copies&lt;br /&gt;&lt;b&gt;4. Reasons to Create a Class&lt;br /&gt;&lt;/b&gt;建模 降低复杂度 隔离复杂度 隐藏实现细节 限制变动的影响范围 隐藏全局数据 让参数传递更通畅 建立中心控制点 易于重用 为程序族做计划 包装相关操作 实现特定重构&lt;br /&gt;Classes to avoid&lt;br /&gt;god class; 无关紧要的类; 用动词命名的类&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;chapter 7: High-quality Routines 高质量的子程序&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;small intimate viaible flexible&lt;/span&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;1. Valid reasons to create a routines&lt;br /&gt;&lt;/b&gt;降低复杂度 引入中间、易懂的抽象 避免代码重复 支持子类化 隐藏顺序 隐藏指针操作 提高可移植性 简化逻辑判断 改善性能&lt;br /&gt;创建类的理由也是创建子程序的理由。&lt;br /&gt;&lt;b&gt;2. Design at the Routine Level&lt;br /&gt;&lt;/b&gt;functional cohesion: 只执行一项操作&lt;br /&gt;sequential cohesion: 步骤 共享数据 完成完整功能&lt;br /&gt;communicational cohesion: 同样的数据，无其它联系&lt;br /&gt;temporal cohesion: 需要同时执行&lt;br /&gt;procedural cohesion: 子程序的操作按特定顺序&lt;br /&gt;logical cohesion: 控制或“逻辑”是子程序组织的原因&lt;br /&gt;coincidental cohesion&lt;br /&gt;&lt;b&gt;3. Good Routine Names&lt;br /&gt;&lt;/b&gt;描述子程序所做的所有事情&lt;br /&gt;避免使用无意义、含糊、表意不明的动词&lt;br /&gt;不使用数字形成不同的子程序名&lt;br /&gt;函数命名时对返回值有所描述&lt;br /&gt;过程命名时使用语气强烈的动宾形式&lt;br /&gt;准确使用对账词&lt;br /&gt;为常用操作确定命名规则&lt;br /&gt;&lt;b&gt;4. How long can a routine be&lt;br /&gt;&lt;/b&gt;适中最好 一屏 打印1到2页&lt;br /&gt;&lt;b&gt;5. How to use routine parameters&lt;br /&gt;&lt;/b&gt;按输入-修改-输出组织&lt;br /&gt;一致的排列顺序&lt;br /&gt;使用所有的参数&lt;br /&gt;状态或出错变量放最后&lt;br /&gt;不要把子程序的参数用于工作变量&lt;br /&gt;在接口中对参数的假设做出说明：I or M or O? unit? scope?&lt;br /&gt;个数限制在大约7个以内&lt;br /&gt;IN Modify OUT的命名规则&lt;br /&gt;子程序的接口要达到何种抽象？&lt;br /&gt;&lt;b&gt;6. Special considerations in the use of functions&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;函数 vs 过程&lt;/span&gt;&lt;br /&gt;如果一个子程序的用途是返回由其名字所指明的返回值，那么就应该使用函数，否则使用过程&lt;br /&gt;检查所有可能的返回路径&lt;br /&gt;不要返回指向局部数据的指针&lt;br /&gt;&lt;b&gt;7. Macro routines and Inline routines&lt;br /&gt;&lt;/b&gt;把宏表达式整个包含在括号内&lt;br /&gt;把含有多条语句的宏用{}包围&lt;br /&gt;节制使用inline: 暴露细节&lt;br /&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;&lt;br /&gt;chapter 8: Defensive Programming 防御式编程&lt;/b&gt;&lt;br /&gt;&lt;b&gt;1. Protecting your program from invalid inputs&lt;br /&gt;&lt;/b&gt;garbage in, garbage out&lt;br /&gt;in: 检查源于外部的数据 检查数据输入 决定如何处理错误的输入数据&lt;br /&gt;&lt;b&gt;2. Assertions&lt;br /&gt;&lt;/b&gt;开发时使用的让程序在运行时进行自检的代码&lt;br /&gt;assert a != 0 : "a is unexpectedly equal to 0"&lt;br /&gt;IN and OUT, state, value of variable, pointer check, container&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Guidelines for using assertions&lt;/span&gt;&lt;br /&gt;错误处理代码：预期会发生  断言：绝对不应该发生&lt;br /&gt;避免把需要执行的代码放在断言中&lt;br /&gt;用断言来验证前条件（运行前确保为真）和后条件（运行后确保为真）&lt;br /&gt;先使用断言后使用错误处理代码&lt;br /&gt;&lt;b&gt;3. Error-Handling Techniques&lt;br /&gt;&lt;/b&gt;返回中立值 下一个正确的数据 与前次相同的数据 最接近的合法值 log error-code&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Robustness vs. correctness&lt;/span&gt;&lt;br /&gt;correctness: 永远不返回不准确的结果&lt;br /&gt;robustness: 尝试采用。。继续运转&lt;br /&gt;&lt;b&gt;4. Exceptions&lt;br /&gt;&lt;/b&gt;通知机制&lt;br /&gt;只有在真正例外的情况下才抛出异常：由于调用子程序的代码需要了解被调用代码可能发生的异常，因而弱化的封装&lt;br /&gt;不能用异常来推卸责任&lt;br /&gt;避免在构造和析构函数中使用异常，除非在同一地方捕获&lt;br /&gt;在恰当的层次抛出异常：抛出的异常也是程序接口的一部分&lt;br /&gt;在异常消息中加入导致异常发生的全部信息&lt;br /&gt;避免使用空的catch语句&lt;br /&gt;集中的异常报告机制 异常使用标准化 考虑异常的替代方案&lt;br /&gt;&lt;b&gt;5. Barricade your program to cotain the damage coused by errors&lt;br /&gt;&lt;/b&gt;让软件的一部分处理“不干净”的数据，另一部分处理“干净”的数据，大部分代码就无需承担错误检查的任务&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;outside &lt;/span&gt;error-handling | assertions &lt;span style="color: rgb(102, 0, 0);"&gt;inside&lt;/span&gt;&lt;br /&gt;&lt;b&gt;6. Debugging Aids&lt;br /&gt;&lt;/b&gt;Use offensive programming&lt;br /&gt;对待异常：开发时--显现，运行时--自我修复&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;chapter 9: the Pseudocode Programming Process (PPP) 伪代码编写过程&lt;/b&gt;&lt;br /&gt;&lt;b&gt;1. Summary of steps in building classes and routines&lt;br /&gt;&lt;/b&gt;steps in creating a class&lt;br /&gt;类的总体设计 类中的子程序 复审并测试整个类&lt;br /&gt;steps in building a routine&lt;br /&gt;设计 检查 编写 检查&lt;br /&gt;&lt;b&gt;2. Pseduocode for Pros&lt;br /&gt;&lt;/b&gt;类似英语，精确描述&lt;br /&gt;避免使用目标语言的语法元素&lt;br /&gt;在意图的层次编写伪代码&lt;br /&gt;在足够低的层次上写伪码&lt;br /&gt;&lt;b&gt;3. Constructing routines by Using the PPP&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Design the Routine&lt;/span&gt;&lt;br /&gt;检查先决条件&lt;br /&gt;定义问题：要隐藏的信息，输入输出，前条件后条件&lt;br /&gt;子程序命名&lt;br /&gt;决定如何测试&lt;br /&gt;在标准库中寻找可用的功能&lt;br /&gt;考虑错误处理&lt;br /&gt;考虑效率问题&lt;br /&gt;研究算法和数据结构&lt;br /&gt;编写伪代码：头部注释+目的&lt;br /&gt;考虑数据&lt;br /&gt;检查伪码&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Code the routine&lt;/span&gt;&lt;br /&gt;写出子程序的声明&lt;br /&gt;将伪码转为高层次的注释&lt;br /&gt;在注释下填充代码&lt;br /&gt;检查代码：重构？递归应用routine编写方法&lt;br /&gt;收尾&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;check the code&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;脑海中检查：&lt;/span&gt;&lt;br /&gt;桌面检查（desk checking）&lt;br /&gt;同行评审（peer review）&lt;br /&gt;走查（walk-through）&lt;br /&gt;详查（inspection）&lt;br /&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;编译子程序&lt;/span&gt;&lt;br /&gt;hacking and compiling 拼凑加检查×&lt;br /&gt;将编译器的警告级别调到最高&lt;br /&gt;使用验证工具(validators)，C: lint&lt;br /&gt;消除错误消息和警告的所有根源&lt;br /&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;在调试器中逐行执行代码&lt;/span&gt; &lt;span style="color: rgb(11, 83, 148);"&gt;测试代码: 测试用例&lt;/span&gt; &lt;span style="color: rgb(11, 83, 148);"&gt;消除程序中的错误&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;clean up leftovers&lt;/span&gt;&lt;br /&gt;检查接口 检查整体设计质量 检查变量 检查语句和逻辑 检查布局文档及注释&lt;br /&gt;&lt;b&gt;4. Alternatives to the PPP&lt;br /&gt;&lt;/b&gt;Test-first development&lt;br /&gt;refactoring&lt;br /&gt;design by contract&lt;br /&gt;hacking×&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1156893210009700820?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1156893210009700820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1156893210009700820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1156893210009700820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1156893210009700820'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/code-complete-part2.html' title='Code Complete PART2'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7646195491866165898</id><published>2008-10-22T23:03:00.005+08:00</published><updated>2008-12-16T22:18:20.521+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>卑微地努力</title><content type='html'>人类的行为取决与自身的知识，因为你无法知道自己将来知道什么，所以无法知道自己将来会做什么。&lt;br /&gt;&lt;br /&gt;人类所做的新的发现不过是自己刚刚塞进去的东西而已。&lt;br /&gt;&lt;br /&gt;今天上金融博弈的时候老师又开始讲起了哲学，我蛮喜欢那个不修边幅的老头的，“老年版的哈利波特”，宁同学是这么称呼的。数学、哲学、宗教，其实都是人类思维构造的体系，本质上有着想通之处，其实软件有何尝不是如此，“纯脑力的构建活动”—— Code Complete中是这么说的。简洁和优美，可能是所有科学都追求的一样东西。不过在实践的角度看，quick &amp;amp; clear往往是要着很深功力的，刚开始的时候也许quick &amp;amp; dirty比clean &amp;amp; slow要更好些，在尝试的过程中再慢慢向着quick &amp;amp; clean进步。&lt;br /&gt;&lt;br /&gt;下午上财务报表的时候上课的老师也给了我很多感触，他原来师范毕业后在大学教书，过了几年考了硕士，出来在银行做了几年，又去读了博，现在在上财教书。从他的经历看来并算不上一个牛人，但他走的路可以说是一个普通人的成功之路。比如天天记日记，年年做总结，整理简历……心怀希望，能够坚持的人相信都是能成功的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7646195491866165898?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7646195491866165898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7646195491866165898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7646195491866165898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7646195491866165898'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_822.html' title='卑微地努力'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8884954017549986088</id><published>2008-10-22T10:54:00.004+08:00</published><updated>2008-12-16T22:24:44.021+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>上海博物院</title><content type='html'>第一次去上海博物院是初中，之后是高中毕业那会，接着就再没去过了。今天正好去火车站配眼镜，在等磨镜片的那会功夫就顺便去博物院转了圈。&lt;br /&gt;&lt;br /&gt;据说全国能称上博物院的只有三家：故宫博物院，上海博物院和南京博物院。“馆”和“院”虽然只是一字之差，可也体现了些身价的不同吧。上博院的藏品还是蛮丰富的，只是展厅里展出的只是其中的一部分，而且有些展厅也是时开时关，所以要看一些一些精品还是要有一定缘分的。但据说现在书画馆的画都已不是真迹的了，而是现代科技的复制品。##ReadMore##&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SP6XzM7awoI/AAAAAAAADc8/kSCb4Ry54Ps/s1600-h/DSCF0294.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SP6XzM7awoI/AAAAAAAADc8/kSCb4Ry54Ps/s400/DSCF0294.JPG" alt="" id="BLOGGER_PHOTO_ID_5259808320714883714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_afohQU5wMHo/SP6YVLqp4qI/AAAAAAAADdE/P5VEtnQWiuM/s1600-h/DSCF0301.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_afohQU5wMHo/SP6YVLqp4qI/AAAAAAAADdE/P5VEtnQWiuM/s400/DSCF0301.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5259808904491688610" /&gt;&lt;/a&gt;&lt;br /&gt;这次在书画馆多呆了一些时间，有好些书画是很有名的，以前只是在画册中见过，现在一睹真容还是很有些感动的。只是也有些遗憾，看到宋元明清画作之精美高雅逸趣。想到现在社会上所谓名家的一些画，一些字，真不知该说是创新还是倒退。在陶瓷馆也呆了很久，康乾盛世的一些作品做工之精美真可以说是绝伦，经历了数百年的岁月依然灿然如新。&lt;br /&gt;&lt;br /&gt;本来还拍了一些照，只是发现J10不愧是很低端很傻瓜的相机，变形严重而且高ISO下噪点严重。不过用picasa调下暗部加简单的模糊后效果还可以接受。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8884954017549986088?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8884954017549986088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8884954017549986088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8884954017549986088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8884954017549986088'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_22.html' title='上海博物院'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SP6XzM7awoI/AAAAAAAADc8/kSCb4Ry54Ps/s72-c/DSCF0294.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-544756118556558939</id><published>2008-10-16T21:05:00.006+08:00</published><updated>2008-12-16T22:18:46.990+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>武东校区</title><content type='html'>上财的所谓武东路校区原来是，现在还是同济的校园。住着不多的学生，有一些陈旧荒芜的气息。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/SPc8Gt-VlCI/AAAAAAAACxg/fE6GhiLbog4/s1600-h/DSCF0237.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_afohQU5wMHo/SPc8Gt-VlCI/AAAAAAAACxg/fE6GhiLbog4/s400/DSCF0237.JPG" alt="" style="margin: 0px 10px 10px 0pt; clear: both; float: left;" border="0" /&gt;&lt;/a&gt;##ReadMore##&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SPc8G1GRA6I/AAAAAAAACxo/X7fSw_9TKuI/s1600-h/DSCF0217.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_afohQU5wMHo/SPc8G1GRA6I/AAAAAAAACxo/X7fSw_9TKuI/s400/DSCF0217.JPG" alt="" style="margin: 0px 10px 10px 0pt; clear: both; float: left;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SPc8G0UBZmI/AAAAAAAACxw/UYmYnos5QUU/s1600-h/DSCF0215.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_afohQU5wMHo/SPc8G0UBZmI/AAAAAAAACxw/UYmYnos5QUU/s400/DSCF0215.JPG" alt="" style="margin: 0px 10px 10px 0pt; clear: both; float: left;" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-544756118556558939?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/544756118556558939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=544756118556558939' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/544756118556558939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/544756118556558939'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_16.html' title='武东校区'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_afohQU5wMHo/SPc8Gt-VlCI/AAAAAAAACxg/fE6GhiLbog4/s72-c/DSCF0237.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7360661303660446587</id><published>2008-10-15T22:47:00.004+08:00</published><updated>2008-12-16T22:21:58.962+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>敬畏耶和华是智慧的开端</title><content type='html'>一天无事。&lt;br&gt;上午看Code Complete，有感时间的匮乏，用Google Calender排了下这学期的日程。现在又是一个人了，该慢慢习惯泡图书馆的日子吧，可能这就是我的Style，刻意追求着简单，简单得什么都不要。&lt;br&gt;研究生就这两年，在明年找工那会仅仅一年时间，要是从明年五月报暑期实习的时间来算，时间更少。Less is more。尽量集中精力吧。&lt;br&gt;下午上财务报表分析，书上看到了财务预警分析的简介。多元逻辑分析、神经网络和概率预测在财务预警分析上都有可用的模型，但却都存在着这样那样的问题。我进一步坚信统计、计算机相结合在商务智能上必将有开阔的应用前景。&lt;br&gt;晚上上的是金融博弈，也是选修的第一节，老师一看就是理科出身。学工学理学文对一个人的气质真的影响很大，如果潜心学过的话。&lt;br&gt;课程的引言就是“&lt;span style="background-color: rgb(207, 226, 243);"&gt;敬畏耶和华是智慧的开端&lt;/span&gt;”。&lt;br&gt;我并不是宗教的信徒，但也不是无神论者。冥冥之中自有定数。我一直相信，如果有上帝的话，他创造的该不是物的世界，而是公理和规律；而且，他可能是程序员。&lt;br&gt;前几天在Code Complete上看到了下面的一些话，发觉虽在不同的领域，真正优秀的思想其实是相通的：&lt;span style="color: rgb(102, 0, 0);"&gt;&lt;br&gt;你思考的能力取决于你是否知道能够表达该思想的能力&lt;br&gt;&lt;/span&gt;&lt;font size="2"&gt;《The Humble Programmer》：大部分编程工作都是在弥补我们有限的智力。&lt;span style="color: rgb(102, 0, 0);"&gt;承认自己智力有限并通过学习来弥补&lt;/span&gt;。&lt;/font&gt;&lt;br&gt;谦卑的人那，努力吧。&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7360661303660446587?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7360661303660446587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7360661303660446587' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7360661303660446587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7360661303660446587'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_15.html' title='敬畏耶和华是智慧的开端'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8656338589359589701</id><published>2008-10-15T00:24:00.002+08:00</published><updated>2008-12-18T11:14:19.061+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Learning python 读书笔记 PART 6</title><content type='html'>&lt;b&gt;&lt;font size="3"&gt;PART 6: Classes and OOP&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Chapter 19. OOP: The Big Picture&lt;/span&gt;&lt;br&gt;&lt;/b&gt;classes: instance factories, data + function&lt;br&gt;Instances: represent the concrete items in a program's domain&lt;br&gt;attributes searching at runtime, lower level to higher level&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Coding Class Trees&lt;/span&gt;&lt;br&gt;Class C1(C2, C3): multiple inheritance&lt;br&gt;Attributes --&amp;gt; class&amp;nbsp; :&amp;nbsp; assignments made within class statements&lt;br&gt;Attributes --&amp;gt; instances&amp;nbsp; :&amp;nbsp; assignments to &lt;span style="color: rgb(102, 0, 0);"&gt;self &lt;/span&gt;inside class statements&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; class C1:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def setname(self, who):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; self.name = who&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I1 = C1()&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I1.setname('xyz')&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; print I1.name&lt;br&gt;xyz&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;initialization&lt;/span&gt;: def __init()&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Chapter 20. Class Coding Basic&lt;/span&gt;&lt;br&gt;&lt;/b&gt;Class: namespace, generating multiple objects, namespace inheritance, operator overloading&lt;br&gt;Module: namespace&lt;br&gt;&lt;b&gt;Classes VS. Instances&lt;/b&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Class objects probide default behavior:&lt;/span&gt;&lt;br&gt;attributes functions --&amp;gt; class &amp;lt;-- a class name&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Instance Objects are concrete items:&lt;/span&gt;&lt;br&gt;call a class object like a function makes a new instance object&lt;br&gt;each instance object inherits class attributes and gets its own namespace&lt;br&gt;a new attribute can be generated on the instance&lt;br&gt;&lt;b&gt;Classes are customized by Inheritance&lt;/b&gt;&lt;br&gt;classes and modules:&lt;br&gt;from module1 import Class1&lt;br&gt;class Class2(Class1): ...&lt;br&gt;&lt;b&gt;Classes can intercept Python Operators&lt;br&gt;&lt;/b&gt;def __init__(self, value): ...&lt;br&gt;def __add__(self, other):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ...&lt;br&gt;def __mul__(self. other):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.data = ...&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 21. Class Coding Details&lt;/span&gt;&lt;br&gt;The Class Statement&lt;br&gt;&lt;/b&gt;class &amp;lt;name&amp;gt;(superclass,...):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = value&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def method(self, ...):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ....&lt;br&gt;&lt;b&gt;Methods&lt;br&gt;&lt;/b&gt;instance.method(args...) == class.method(instance, args ...)&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Calling superclass constructors:&lt;/span&gt;&lt;br&gt;class Sub(Super):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self, x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Super.__init__(self, x)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ......&lt;br&gt;&lt;b&gt;Inheritance&lt;br&gt;&lt;/b&gt;Abstract superclasses:&lt;br&gt;class Super:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def method(self): ...&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def delegate(self):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.action()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def action(self):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert 0, 'action must be defined!'&lt;b&gt;&lt;br&gt;Operator Overloading&lt;br&gt;&lt;/b&gt;__init__: Constructor&lt;br&gt;__del__: destructor&lt;br&gt;__add__, __radd__, __iadd__: +, right-side + , +=&lt;br&gt;__or__:&amp;nbsp; |&lt;br&gt;__repr__,__str__ : printing&lt;br&gt;__call__ : X()&lt;br&gt;__getattr__ : X.a&lt;br&gt;__setattr__ : X.a = value&lt;br&gt;__getitem__ : X[key], for loops, in tests&lt;br&gt;__setitem__ : X[key] = vlaue&lt;br&gt;__len__&lt;br&gt;__cmp__, __lt__, __eq__&lt;br&gt;__iter__&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;user-defined iterators&lt;/span&gt;&lt;br&gt;def __init__(self, start, stop):&lt;br&gt;def __iter__(self)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return self&lt;br&gt;def next(self)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ....&lt;br&gt;__getattr__ and __setattr__ catch attribute references&lt;br&gt;__getattr__: is not called if Python can find the attribute, used to deal with undefined attributes&lt;br&gt;__setattr__: if defined, self.attr = value --&amp;gt; self.__setattr__('attr', value)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.__dict__['name'] = x&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;__repr__ VS. __str__&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;x&amp;nbsp; :&amp;nbsp; run __repr__ &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;print x&amp;nbsp; :&amp;nbsp; run __str__&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;add:&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;x + 1 #__add__&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;1 + y #__radd__&lt;br&gt;__call__:&amp;nbsp; x(attr)&lt;br&gt;__del__: run automatically when an instance's space is being reclaimed&lt;br&gt;&lt;b&gt;Namespaces: The Whole Story&lt;br&gt;&lt;/b&gt;instance -- __class__ --&amp;gt; class &lt;br&gt;class -- __base__ --&amp;gt; higher superclasses&lt;br&gt;&lt;b&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 22. Designing with Classed&lt;/span&gt;&lt;br&gt;Python and OOP&lt;br&gt;&lt;/b&gt;inheritance polymorphism encapsulation&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Overloading by Call Signatures&lt;/span&gt;&lt;br&gt;*class C: &lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; def meth(self, x): ...&amp;nbsp;&amp;nbsp;&amp;nbsp; #a&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; def meth(self, x, y):...&amp;nbsp; #b&lt;br&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;&amp;nbsp;a will overwrited&lt;/span&gt;&lt;br&gt;*class C:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def meth(self, *args):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(args) == 1: ...&lt;br&gt;*class C:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def meth(self, x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.operation()&lt;br&gt;Classed as Records&lt;br&gt;OOP and Inheritance: "is-a" relationship&lt;br&gt;OOP and Composition: "has-a" relationship&lt;br&gt;OOP and Delegation&lt;b&gt;&lt;br&gt;Multiple Inheritance&lt;br&gt;&lt;/b&gt;search process &lt;span style="color: rgb(102, 0, 0);"&gt;depth-first&lt;/span&gt; all the way to the top&lt;br&gt;&lt;b&gt;Classes are objects: Generic Object Factories&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;apply &lt;/span&gt;function:&lt;br&gt;def factory(aClass, *args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return apply(aClass, args)&lt;br&gt;&lt;b&gt;Methods are objects: Bound or Unbound&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Unbound: class, no self&lt;/span&gt;&lt;br&gt;object1 = Spam()&lt;br&gt;t = Spam.doit&lt;br&gt;t(object1, 'lalal')&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;bound: instance, self + function pairs&lt;/span&gt;&lt;br&gt;object1 = Spam()&lt;br&gt;x = object1.doit&lt;br&gt;x('lalal')&lt;br&gt;&lt;b&gt;Documentation String Revisited&lt;br&gt;&lt;/b&gt;import docstr&lt;br&gt;a.__doc__, a.b.__doc__&lt;br&gt;&lt;b&gt;Class Versus Modules&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;they are both namespacefiles&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Modules:&lt;/span&gt;&lt;br&gt;Are data/logic packages&lt;br&gt;Are created by writing Python  or C extensions&lt;br&gt;Are used by imported&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Classes:&lt;/span&gt;&lt;br&gt;Implement new objects&lt;br&gt;Are created by class statements&lt;br&gt;Are used by being called&lt;br&gt;Always live within a module&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8656338589359589701?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8656338589359589701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8656338589359589701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8656338589359589701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8656338589359589701'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/part-6-classes-and-oop-chapter-19.html' title='Learning python 读书笔记 PART 6'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2838912835740326402</id><published>2008-10-12T20:09:00.003+08:00</published><updated>2008-12-16T22:24:44.022+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>烤</title><content type='html'>从9月16号开学，到现在已经差不多一个月了，终于逮着机会，浩浩荡荡50人聚一起吃烧烤啦～～&lt;br&gt;记下帐先：&lt;br&gt;&lt;span style="color: rgb(7, 55, 99); background-color: rgb(207, 226, 243);"&gt;费用：&lt;/span&gt;&lt;br&gt;烤炉：40元/次 小凳子：2元/把 铁网：5元/块 夹子：5元一把 木材：5元/打&amp;nbsp; 门票：15元×八折&amp;nbsp; 结论：黑，相当地黑。&lt;br&gt;&lt;span style="color: rgb(12, 52, 61); background-color: rgb(207, 226, 243);"&gt;原料：（摘自。。。。忘了。。）&lt;/span&gt;&lt;br&gt;餐具及辅助用品：一次性桌布（厚）、一次性筷子和碟子、纸杯、餐巾纸、竹签、毛刷、废报纸h、小刀及叉子&lt;br&gt;烧烤主食类：鸡翅 骨肉相连 肉串 馒头 蘑菇 年糕 玉米肠 贡丸 土豆 菜椒&lt;br&gt;其他：蜂蜜、香辣粉、辣椒面、番茄酱、盐&lt;br&gt;饮料：可乐、果汁、纯水&lt;br&gt;食物是昨天晚上去十人去沃尔玛买的，花了一千多，然后再加门票五百多，再加上烧烤用具的租金，七七八八倒也勉强够用。&lt;br&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;然后。。。&lt;/span&gt;很郁闷，在搬木头的时候我踩到了钉子，而且扎得很深，回来的时候又在公园迷了路。折腾着五点总算到了学校，医务室又没破伤风针打，537路坐到了长海医院，大个破伤风针三块五，七七八八硬是整到了70多，然后又打车回了学校，霉。&lt;br&gt;&lt;a title="http://picasaweb.google.com/shufe08/081012#" href="http://picasaweb.google.com/shufe08/081012#" id="ofd_"&gt;http://picasaweb.google.com/shufe08/081012#&lt;/a&gt; &lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2838912835740326402?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2838912835740326402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2838912835740326402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2838912835740326402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2838912835740326402'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_12.html' title='烤'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3464910666792513675</id><published>2008-10-11T23:04:00.007+08:00</published><updated>2008-12-16T22:24:44.024+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>J10</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/SPDArkRG8gI/AAAAAAAACvo/EBkSkc4wSHA/s1600-h/DSCF0086.jpg"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/SPDArkRG8gI/AAAAAAAACvo/EBkSkc4wSHA/s400/DSCF0086.jpg" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;今天在京东的库存品展销会上买了富士的J10，入门得不能再入门的相机，早日换单反，努力！！！##ReadMore##&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/SPDAsDE-FTI/AAAAAAAACvw/_f9EzUjXmxw/s1600-h/DSCF0068.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://1.bp.blogspot.com/_afohQU5wMHo/SPDAsDE-FTI/AAAAAAAACvw/_f9EzUjXmxw/s400/DSCF0068.JPG" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_afohQU5wMHo/SPDAslCTjeI/AAAAAAAACv4/vNUCvfiy-so/s1600-h/DSCF0063.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://4.bp.blogspot.com/_afohQU5wMHo/SPDAslCTjeI/AAAAAAAACv4/vNUCvfiy-so/s400/DSCF0063.JPG" border="0" /&gt;&lt;/a&gt;&lt;div style='clear:both; text-align:LEFT'&gt;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3464910666792513675?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3464910666792513675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3464910666792513675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3464910666792513675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3464910666792513675'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/j10.html' title='J10'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SPDArkRG8gI/AAAAAAAACvo/EBkSkc4wSHA/s72-c/DSCF0086.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5458985521925168208</id><published>2008-10-09T11:15:00.001+08:00</published><updated>2008-12-18T11:14:19.063+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Learning python 读书笔记 PART 5</title><content type='html'>&lt;b&gt;&lt;span style="font-size:100%;"&gt;PART 5: MODULES&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 15. Modules: The Big Picture&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;a.code reuse b.System namespace partitioning c.Implementing shared services or data&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Python Program Architecture&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;import &lt;/span&gt;and &lt;span style="color: rgb(12, 52, 61);"&gt;from &lt;/span&gt;statements execute and load another file at &lt;span style="color: rgb(102, 0, 0);"&gt;runtime&lt;/span&gt;&lt;br /&gt;&lt;b&gt;How Imports Work&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Find it --&amp;gt; Compile it(Maybe) --&amp;gt; Run it&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Find it&lt;br /&gt;The module search path:&lt;/span&gt;&lt;br /&gt;a. home directory of the top-level file&lt;br /&gt;b. PYTHONPATH directories (if set)&lt;br /&gt;c. Standard library directories&lt;br /&gt;d. The contents of any .pth files (if present)&lt;br /&gt;&lt;i&gt;current working directory&lt;/i&gt;&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;sys.path&lt;/span&gt;: the actual search path, is configured by Python at program startup&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Compile it&lt;/span&gt;&lt;br /&gt;.py &amp;amp; .pyc&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Run it&lt;/span&gt;&lt;br /&gt;import operation executes the byte code of the module&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;def:&lt;/span&gt; run at import time to create functions&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 16. Module Coding Basics&lt;/span&gt;&lt;br /&gt;Module Creation&lt;br /&gt;&lt;/b&gt;module --import--&amp;gt; variables (name)&lt;br /&gt;they should follow the normal variable name rules&lt;br /&gt;&amp;lt;directory&amp;gt;m.&amp;lt;extension&amp;gt;&lt;br /&gt;import a  --&amp;gt; a.b&lt;br /&gt;from a import b  --&amp;gt; b&lt;br /&gt;from a import * --&amp;gt; b&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;imports happen only once&lt;/span&gt;&lt;br /&gt;Later imoort operations simply fetch an already loaded module object.&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;def, import, from are executable statements&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;import and from are assignments&lt;/span&gt;!&lt;br /&gt;from small import x,y&lt;br /&gt;x = 42    #change my x only&lt;br /&gt;import small&lt;br /&gt;small.x = 42    #change x in other module&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;equivalence&lt;/span&gt; from module import name&lt;br /&gt;&lt;i&gt;is euqal to &lt;/i&gt;&lt;br /&gt;import module&lt;br /&gt;name = module.name&lt;br /&gt;del module&lt;br /&gt;&lt;b&gt;Module Namespace&lt;br /&gt;&lt;/b&gt;attributes --namespace--&amp;gt; module ojbect&lt;br /&gt;Module statements run on the first imoort: create an empty module object and execute the statements inside the module&lt;br /&gt;Top-level assignments create module attributes&lt;br /&gt;Module namespace: attribute&lt;span style="color: rgb(102, 0, 0);"&gt;__dict__&lt;/span&gt;, or dir(M) --&amp;gt; a directory object&lt;br /&gt;Attribute Name Qualification&lt;br /&gt;Import Versus Scope: function &amp;lt;--&amp;gt; module&lt;br /&gt;Namespace Nesting&lt;br /&gt;&lt;b&gt;Reloading Modules&lt;br /&gt;&lt;/b&gt;reload currently only works on modules written in Python; C extension modules cannot.&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Reload Basics:&lt;/span&gt;&lt;br /&gt;Reloads impact all clients that use import to fetch modules&lt;br /&gt;Reloads impact future from clients only&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 17. Module Package&lt;/span&gt;&lt;br /&gt;Package import Basics&lt;br /&gt;&lt;/b&gt;import dir1.dir2.mod --&amp;gt; dir0/dir1/dir2/mod&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;__init__.py&lt;/span&gt;&lt;br /&gt;package initialization: run automatically&lt;br /&gt;module namespace initialization&lt;br /&gt;from* statement behavior&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;from Versus import with packages&lt;/span&gt;&lt;br /&gt;import dir1.dir2.mod as mod #short name&lt;br /&gt;from dir1.dir2 import mod&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 18. Advanced Module Topics&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;_X: prevent being copied out in from* statement, but still not import statement&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;__all__&lt;/span&gt;: from* will only copy out those names listed in the __all__ list&lt;br /&gt;    can be used in __init__.py&lt;br /&gt;    __all__ = ["b","c"]&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;from __future__ import featurename&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;__name__ and __main__&lt;/span&gt;&lt;br /&gt;run at top level: __name__ &amp;lt;-- "__main__"&lt;br /&gt;if __name__ == '__main__'&lt;br /&gt;    tester()&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;from module import longname as name&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Module Design Concept&lt;br /&gt;&lt;/b&gt;you're always in a module in python&lt;br /&gt;Minimize module coupling: global variables&lt;br /&gt;Maximize module cohesion: unified purpose&lt;br /&gt;Module should raraly change other module's variables&lt;b&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5458985521925168208?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5458985521925168208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5458985521925168208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5458985521925168208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5458985521925168208'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/part-5-modules-chapter-15.html' title='Learning python 读书笔记 PART 5'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5938063215601437928</id><published>2008-10-09T07:47:00.002+08:00</published><updated>2008-12-18T11:14:48.550+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Code Complete PART 1: Laying the Foundation</title><content type='html'>&lt;b style="color: rgb(7, 55, 99);"&gt;Chapter 1. Welcome to Software Construction&lt;/b&gt;&lt;br /&gt;&lt;b&gt;What is Software Construction&lt;/b&gt; &lt;span style="background-color: rgb(207, 226, 243);"&gt;Activity:&lt;/span&gt;&lt;br /&gt;problem definition&lt;br /&gt;requirements development&lt;br /&gt;construction planning&lt;br /&gt;software architecture (high-level design)&lt;br /&gt;detail design&lt;br /&gt;coding and debugging&lt;br /&gt;unit test&lt;br /&gt;integration testing&lt;br /&gt;integration&lt;br /&gt;system testing&lt;br /&gt;corrective maintenance&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;chapter 2. Metaphors for a Richer Understanding of Software Development&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;Metaphors: analogy --&amp;gt; modeling&lt;br /&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;Metaphors: heurstic, subject to chance&lt;/span&gt; &lt;span style="background-color: rgb(255, 242, 204);"&gt;Algorithm: predictable, deterministic, not subject to chance&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;common software Metaphors&lt;/span&gt;&lt;br /&gt;Writing code: trial and error&lt;br /&gt;Growing a System: incremental, iterative, adaptive, evolutionary&lt;br /&gt;Building Software:&lt;br /&gt;problem definition --&amp;gt; architectural design --&amp;gt; construction --&amp;gt; optimization (review and inspections)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 3. Measure Twice, Cut Once: Upstream Prerequisites&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;根本目标：降低风险&lt;br /&gt;流程 --&amp;gt; 质量&lt;br /&gt;&lt;b&gt;Importance of Prerequisites&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Causes of Incomplete Preparation: &lt;/span&gt;&lt;br /&gt;Non't konw How --&amp;gt; 如果不能做好，做再多也没用！&lt;br /&gt;尽快开始编码：WIMP(why isn't Sam Coding?)&lt;br /&gt;&lt;b&gt;Determine the Kind of Software You're Working On&lt;br /&gt;&lt;/b&gt;商业系统 使命攸关 性命攸关&lt;br /&gt;Inerative Approbches --&amp;gt; 修正成本地，发现缺陷的时间更接近引入缺陷的时间&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Choosing Between Interative and Sequential Approaches:&lt;/span&gt;&lt;br /&gt;需求稳定性 设计是否透彻 熟悉性 项目风险 长期可预测性 后期改变需求、设计和编码的代价&lt;br /&gt;&lt;b&gt;Problem-Definition Prerequisite&lt;/b&gt;&lt;br /&gt;product vision -- vision statement -- mission statement -- product difenition == problem definition&lt;br /&gt;应用客户的语言书写&lt;br /&gt;&lt;b&gt;Requirements Prerequistite&lt;br /&gt;&lt;/b&gt;scope --&amp;gt; 降低更变&lt;br /&gt;The Myth of Stable Requirements&lt;br /&gt;Handing Requirements Changes During Construction: 评估，通报，建立程序，开发方法&lt;br /&gt;&lt;b&gt;Architecture Prerequistite&lt;br /&gt;&lt;/b&gt;system architecture -- high-level design -- top-level design --&amp;gt; architecture specification&lt;br /&gt;&lt;span style="background-color: rgb(244, 204, 204);"&gt;Typical architecutral components&lt;/span&gt;：&lt;br /&gt;program organization: 维护设计的缘由 &amp;lt;--&amp;gt; 维护设计本身&lt;br /&gt;major classes: rules and relationship&lt;br /&gt;data design: files &amp;amp; database&lt;br /&gt;business rules&lt;br /&gt;user interface design: 模块化，便于更换&lt;br /&gt;resource management: 数据库连接、线程、句柄、内存&lt;br /&gt;security: threat model&lt;br /&gt;performance: 资源的使用，速度、内存、成本的优先顺序&lt;br /&gt;scalability: 增长以满足未来需求的能力&lt;br /&gt;internationalization / Localization (I18N, L10N)&lt;br /&gt;Input/output: reading scheme (look-ahead or look-behind or just-in-time)&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Error processing&lt;/span&gt;: a coding-convention level problem&lt;br /&gt;纠正 or 检测？ 主动 or 被动? 错误传播 消息处理 异常处理 处理错误的层次 输入数据有效性&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Fault tolerance&lt;/span&gt;: 检测 恢复 包容&lt;br /&gt;容错策略：退回 try again；辅助代码，主代码错误时使用；表决算法，分别计算-比较；使用虚假值（phony value）&lt;br /&gt;architectural feasibility&lt;br /&gt;overengineering&lt;br /&gt;buy-vs.-build decisions&lt;br /&gt;resuse decisions&lt;br /&gt;change strategy&lt;br /&gt;general architectural quality: 维护概念完整性&lt;br /&gt;Amount of Time to Spend on Upstream Prerequisites&lt;br /&gt;工作量：10% ～ 20%&lt;br /&gt;时间：20% ~ 30%&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Chapter 4: Key Construction Decisions&lt;br /&gt;Choice of programming language&lt;br /&gt;&lt;/b&gt;C: 1&lt;br /&gt;Fortran 95: 2&lt;br /&gt;C++, Java: 2.5&lt;br /&gt;VB: 4.5&lt;br /&gt;Perl, Python, Smalltalk: 6&lt;br /&gt;语言的表达能力--思考的能力：&lt;span style="color: rgb(102, 0, 0);"&gt;你思考的能力取决于你是否知道能够表达该思想的能力&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Language descriptions&lt;/span&gt;&lt;br /&gt;Cobol: COmmon Business-Oriented Language&lt;br /&gt;Fortran: FORmula TRANslation&lt;br /&gt;Perl: Practical Extraction and Report Language&lt;br /&gt;PHP: PHP:Hypertext Processor&lt;br /&gt;BASIC: Beginner's All-purpose Symbolic Instruction Code&lt;br /&gt;Programming in a language (如果语言工具是初级的，那么程序员的思想也是初级的)&lt;br /&gt;programming into a language （思想 --&amp;gt; 决定如何使用工具）&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5938063215601437928?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5938063215601437928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5938063215601437928' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5938063215601437928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5938063215601437928'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/chapter-1.html' title='Code Complete PART 1: Laying the Foundation'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8481846181186470694</id><published>2008-10-07T14:11:00.002+08:00</published><updated>2008-12-18T11:14:48.551+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='软件工程'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Code Complete 读书笔记 PART 7</title><content type='html'>&lt;font size="2"&gt;&lt;b&gt;&lt;font size="3"&gt;Software Craftsmanship 软件工艺&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Chapter 31. 布局与风格&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Layout and Style&lt;/span&gt;&lt;br&gt;&lt;/b&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;准确、一致、易读性、易维护性&lt;/span&gt;&lt;br&gt;&lt;b&gt;Layout Fundamentals&lt;br&gt;&lt;/b&gt;好的布局凸显程序的逻辑结构。&lt;br&gt;人 != 计算机&lt;br&gt;经验和规矩是吻合的&lt;br&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Layout as Religion&lt;/span&gt;&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Objectives of Good Layout&lt;/span&gt;&lt;br&gt;准确，始终如一地表现程序的逻辑结构；改善可读性；经得起修改&lt;br&gt;&lt;b&gt;Layout Techniques&lt;br&gt;&lt;/b&gt;分组：空行，空格&lt;br&gt;空行：将不相关的语句隔开 8% ～ 16%&lt;br&gt;缩进：2 ～ 4 空格，显示逻辑&lt;br&gt;&lt;b&gt;Layout Sytles&lt;/b&gt;&lt;br&gt;纯块结构：Basic&lt;br&gt;仿纯块结构：java&lt;br&gt;begin-end {}&lt;br&gt;行尾布局&lt;br&gt;&lt;b&gt;Laying Out Control Structures&lt;br&gt;&lt;/b&gt;begin-end: 未缩进；两次缩进&amp;nbsp; &lt;span style="color: rgb(204, 0, 0);"&gt;×&lt;/span&gt;&lt;br&gt;在程序中加入空行，有助于思考语句的从属&lt;br&gt;缩进策略应统一&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;goto&lt;/span&gt;：标号大写、上下空行；包含goto的语句单独为一行&lt;br&gt;&lt;b&gt;Laying Out Individual Statements&lt;br&gt;&lt;/b&gt;空格：逻辑、数组引用、子程序参数&lt;br&gt;续行：续行需明显（“+ , &amp;amp;&amp;amp; ||”）；所有后续行按标准量缩进；&lt;br&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Using only one statement Per Line&lt;/span&gt;&lt;br&gt;易调试，易修改，能提供关于复杂度的正确印象，线性阅读&lt;br&gt;数据声明：一行一声明，靠近首次使用的位置，合理组织顺序&lt;br&gt;注释：缩进一致，注释前加空行&lt;br&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;有约定比约定某个特定细节更重要&lt;/span&gt;&lt;br&gt;&lt;b&gt;Laying Out Routines&lt;br&gt;&lt;/b&gt;用空格分隔程序各部分&lt;br&gt;参数按标准缩进&lt;br&gt;&lt;b&gt;Laying Out Class&lt;/b&gt;&lt;br&gt;Class Interfaces: 头部注释(类及完整用法) 构造析构 public protected private&lt;br&gt;Class Implementations: 类文件内容 类数据 public protected private&lt;br&gt;子程序间：2～3行&lt;b&gt;&lt;br&gt;&lt;br&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Chapter 32. 自说明代码&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Self-Documenting Code&lt;/span&gt;&lt;br&gt;&lt;/b&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;好的注释才有价值&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);"&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;源码包含大部分关键信息，信息融入代码&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);"&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;好的代码本身是最好的说明&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);"&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;注释应用来说明代码无法说明的东西&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);"&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;注释应易维护&lt;/span&gt;&lt;br&gt;&lt;b&gt;External Documentation&lt;br&gt;&lt;/b&gt;单元开发文件夹：UDF: uint-development folder&amp;nbsp; SDF: software-development folder&lt;br&gt;详细设计文档&lt;br&gt;&lt;b&gt;Programming Styla as Documentation&lt;br&gt;&lt;/b&gt;良好结构、直率易懂的方法、有意义的名称、具名常量、清晰的布局、最低复杂度的控制流和数据结构&lt;br&gt;循环 -- 良好定义的子程序&lt;br&gt;尽可能采用问题领域的术语&lt;br&gt;&lt;b&gt;To Comment or not to Comment&lt;br&gt;&lt;/b&gt;好注释 != （重复代码 or 解释代码）&lt;br&gt;注释困难 --&amp;gt; 代码差劲 or 没有彻底理解&lt;br&gt;代码复杂：改进代码 &amp;gt; 添加注释&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Kinds of comments&lt;/span&gt;&lt;br&gt;repeat of code &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;×&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2"&gt;explanation of code &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;×&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2"&gt;marker in the code (fix before release?)&lt;br&gt;summary of code: good for other readers&lt;br&gt;description of the code's intent: 意图而非解决方法&lt;br&gt;information that cannot possibly be expressed by the code itself&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Commenting Efficiently&lt;/span&gt;&lt;br&gt;采用不会被打断和易于修改的注释方法&lt;br&gt;用伪码编程法减少注释时间&lt;br&gt;1 comment per 10 lines&lt;br&gt;&lt;b&gt;Commenting Techniques&lt;br&gt;&lt;/b&gt;行尾注释：代码块，数据声明&lt;br&gt;数据声明：数据单位、允许范围、编码含义、输入数据限制、位标志&lt;br&gt;&lt;b&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Chapter 33. 个人性格&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Personal Character&lt;/span&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;谦虚，求知欲，诚实，创造性，纪律，高明的偷懒&lt;/span&gt;&lt;br style="background-color: rgb(255, 242, 204);"&gt;&lt;span style="background-color: rgb(255, 242, 204);"&gt;好性格 --&amp;gt;正确的习惯&lt;/span&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;软件开发：建造材料=个人才智；工具=自己，其实在研究人的智力、性格&lt;br&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;20/80，10:1&lt;/b&gt;&lt;br&gt;&lt;b&gt;Intelligence and Humility&lt;/b&gt;&lt;br&gt;理解一个程序，需要&lt;span style="color: rgb(102, 0, 0);"&gt;很强的吸取细节的能力&lt;/span&gt;并能同时消化&lt;br&gt;《The Humble Programmer》：大部分编程工作都是在弥补我们有限的智力。&lt;span style="color: rgb(102, 0, 0);"&gt;承认自己智力有限并通过学习来弥补&lt;/span&gt;。&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;减轻脑力负担：&lt;/span&gt;&lt;br&gt;系统分解，复查、详查、测试，程序尽量短小，尽量高层，规范&lt;br&gt;&lt;b&gt;Curiosity&lt;/b&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;在开发过程中建立自我意识&lt;/span&gt;！&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;试验&lt;/span&gt;！学会制造错误--&amp;gt;收获；利用小程序&lt;br&gt;阅读解决问题的方法&lt;br&gt;在行动之前做&lt;span style="color: rgb(7, 55, 99);"&gt;分析和计划&lt;/span&gt;：分析&amp;lt;--&amp;gt;行动&lt;br&gt;学习成功项目的开发经验：Programming Pearls, The Mythical Man-Month&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;阅读文档&lt;/span&gt;，RTFM！^_^&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;向专业开发看齐&lt;/span&gt;：&lt;br&gt;入门级：某语言的基本功能，运用语言特性&lt;br&gt;中级：多中语言基本功能，熟练使用一种语言&lt;br&gt;熟练级：对语言和环境有专业技能&lt;br&gt;技术带头人级：人&lt;br&gt;&lt;b&gt;Intellectual Honesty&lt;/b&gt;&lt;br&gt;了解代码，了解进度，如实反馈&lt;br&gt;&lt;b&gt;Communication and Cooperation&lt;/b&gt;&lt;br&gt;代码可读性，编程首先是和人交流，其次才是计算机&lt;br&gt;&lt;b&gt;Creativity and Discipline&lt;/b&gt;&lt;br&gt;在非关键之处设立规范，从而在更重要的地方发挥创造性&lt;br&gt;Form is liberating.&lt;br&gt;&lt;b&gt;Laziness&lt;/b&gt;&lt;br&gt;拖延：逃避思考，实在懒&lt;br&gt;迅速完成：用最少时间做完不喜欢的工作。开明懒&lt;br&gt;编写某个工作完成不喜欢的任务：一劳永逸的懒&lt;br&gt;&lt;b&gt;Characteristics that don't matter as much as you might think&lt;/b&gt;&lt;br&gt;persistence: 固执己见 or 坚韧不拔 知道何时放弃&lt;br&gt;experience: 软件开发行业的经验比书本知识价值要小，工作10年，是得到10年的经验还是1年经验的10次重复&lt;br&gt;&lt;b&gt;Habits&lt;/b&gt;&lt;br&gt;精神品德，编程品德&lt;br&gt;态度端正，积极思考 --&amp;gt; 习惯&lt;br&gt;不能用没有习惯来代替坏习惯&lt;br&gt;&lt;b&gt;Additional Resources&lt;/b&gt;&lt;br&gt;《The Humble Programmer》&lt;br&gt;Dijkstra:&lt;span style="color: rgb(102, 0, 0);"&gt;编程的本质任务就是驾驭计算机科学的极端复杂性&lt;/span&gt;，编程是唯一一个需要掌握从最底层到最高层9个数量级细节差异的人类活动。&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(12, 52, 61);"&gt;Chapter 34. 软件工艺的话题&lt;br&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243); color: rgb(12, 52, 61);"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Themes in software Craftsmanship&lt;/span&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;font style="background-color: rgb(255, 242, 204);" size="2"&gt;编程的目的之一是管理复杂性&lt;br&gt;过程对产品有深远影响&lt;br&gt;团队：广泛沟通；单人：自我交流&lt;br&gt;编程应基于问题域而非解决方案&lt;br&gt;注意警告信息&lt;br&gt;迭代：软件质量&lt;br&gt;丰富的工具箱&lt;/font&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;b&gt;Conquer Complexity&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;降低复杂度几乎和衡量程序员成果的最重要依据&lt;/span&gt;&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;方法&lt;/span&gt;：划分子系统，类、接口，保持接口抽象性，避免深层次的继承，避免深层的循环、条件判断，不用goto，不滥用异常（需以系统的观点使用），不让类过度膨胀，子程序短小，使用不言自明的变量，子程序参数尽量少，规范和约定&lt;br&gt;&lt;b&gt;Pick Your Process&lt;/b&gt;&lt;br&gt;团队成员 --&amp;gt; Process --&amp;gt; 质量。&lt;br&gt;避免不成熟的优化&lt;br&gt;坏的过程损耗脑力&lt;br&gt;&lt;b&gt;Write Programs for People First, Computer Secon&lt;/b&gt;&lt;br&gt;目标：&lt;span style="color: rgb(102, 0, 0);"&gt;算法精准，结构紧凑，性能好，注释清晰得体&lt;/span&gt;&lt;br&gt;&lt;b&gt;Program into your Language, Not in It&lt;br&gt;&lt;/b&gt;要什么 --&amp;gt; 怎样用工具实现。&lt;br&gt;&lt;b&gt;Fous Your Attention with the Help of Conventions&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;规范是一套管理复杂度的质量工具&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;规范能精确地传达重要的信息&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;规范能免除各种风险&lt;/span&gt;：禁止，要求 --&amp;gt; 防范&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;规范能增加对低层工作的可预见性&lt;/span&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;规范能弥补语言的不足之处&lt;/span&gt;&lt;br&gt;&lt;b&gt;Program in Terms of the Problem Domain&lt;br&gt;&lt;/b&gt;尽可能工作于最高的软件层次&lt;br&gt;顶层代码：说明解决的问题&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Separating a Program into Levels of Abstraction&lt;/span&gt;&lt;br&gt;Level 0: Operating-System Operations and Machine Instructions&lt;br&gt;Level 1: Programming-Language Structures and Tools&lt;br&gt;Level 2: Low level of implementation Structures 粘结层&lt;br&gt;Level 3: Low level Problem-Domain Terms 提供框架&lt;br&gt;Level 4: High level Problem-Domain Terms 基于问题域的术语&lt;br&gt;&lt;b&gt;Watch for Falling Rocks&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;艺术&amp;nbsp; &lt;b&gt;工艺（craft） &lt;/b&gt;科学&lt;/span&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;良好的个人判断&lt;br&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;玄机代码&lt;/span&gt; maybe 差劲代码&lt;br&gt;设计的度量 反映 设计的质量&lt;br&gt;警告信息&lt;br&gt;重复，“不自在，不惬意”&lt;br&gt;不容易写注释，不易命名变量，不易将问题分解&lt;br&gt;难以理解，不安，猜测&lt;br&gt;找不到错误的原因仅仅因为是&lt;span style="color: rgb(102, 0, 0);"&gt;忽视&lt;/span&gt;&lt;br&gt;&lt;b&gt;Iterate, Repeatedly, Again and Again&lt;br&gt;&lt;/b&gt;反复评估 --&amp;gt; &lt;span style="color: rgb(102, 0, 0);"&gt;精确&lt;/span&gt;&lt;br&gt;开发：逐步精化，&lt;span style="color: rgb(102, 0, 0);"&gt;实证&lt;/span&gt;而非证明&lt;br&gt;迭代的代码调整&lt;br&gt;&lt;b&gt;Thou Shalt Rend Software and Religion Asunder&lt;/b&gt;&lt;br&gt;software Oracles &amp;amp; Eclecticism&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Experimentation&lt;/span&gt;&lt;br&gt;基于实验结果改变思路&lt;br&gt;“试图没有错误”是最大的错误&lt;br&gt;设计是仔细规划小错误以避免更大的错误&lt;br&gt;试验可用在很多层次上&lt;br&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;br&gt;&lt;b style="color: rgb(12, 52, 61);"&gt;Chapter 35. 更多信息&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;b&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Software Construction&lt;/span&gt;&lt;br&gt;Pragmatic Programmer&lt;br&gt;Programming Pearls&lt;br&gt;Extreme Programming Explained: Embrace Change&lt;br&gt;Writing Solid Code&lt;br&gt;The Practise of Programming&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Topic Beyond Construction&lt;/span&gt;&lt;br&gt;Facts and Fallacies of Software Engineer &lt;br&gt;Professional Software Development&lt;br&gt;The Psychology of Computer Programming&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Software Engineering Overviews&lt;/span&gt;&lt;br&gt;Software Engineering: A Practitioner's Approach&lt;br&gt;Software Engineering 6th &lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Periodicals&lt;/span&gt;&lt;br&gt;Software Development &lt;a title="www.sdmagazine.com" href="http://www.sdmagazine.com" id="hmli"&gt;www.sdmagazine.com&lt;/a&gt; &lt;br&gt;Dr.Dobb's Journal &lt;a title="www.ddj.com" href="http://www.ddj.com" id="uyj9"&gt;www.ddj.com&lt;/a&gt; &lt;br&gt;IEEE Software &lt;a title="www.computer.org/software" href="http://www.computer.org/software" id="tzvh"&gt;www.computer.org/software&lt;/a&gt; &lt;br&gt;Communications of the ACM &lt;a title="www.acm.org/cacm/" href="http://www.acm.org/cacm/" id="j-k1"&gt;www.acm.org/cacm/&lt;/a&gt; &lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;&lt;/span&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;A Software Developer's Reading Plan&lt;/span&gt;&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Introductory Level&lt;/span&gt;&lt;br&gt;Conceptual Blockbusting: A Guide to Better Ideas&lt;br&gt;Programming Pearls&lt;br&gt;Facts and Fallacies of Software Engineering&lt;br&gt;Software Project Survival Guide&lt;br&gt;Code Complete&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Practitioner Level&lt;/span&gt;&lt;br&gt;Software Configuration Management Patterns: Effective Teamwork, Practical Integration&lt;br&gt;UML Distilled: A Brief Guide to the Standard Object Modeling Language&lt;br&gt;Software Creativity&lt;br&gt;Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process&lt;br&gt;Rapid Development&lt;br&gt;Software Requirements&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Professional Level&lt;/span&gt;&lt;br&gt;Software Architecture in Practice&lt;br&gt;Refactoring: Improving the Design of Existing Code&lt;br&gt;Design Patterns&lt;br&gt;Principles of Software Engineering Management&lt;br&gt;Writing Solid Code&lt;br&gt;Object-Oriented Software Construction&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8481846181186470694?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8481846181186470694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8481846181186470694' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8481846181186470694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8481846181186470694'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/software-craftsmanship-chapter-31.html' title='Code Complete 读书笔记 PART 7'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8098528432634250063</id><published>2008-10-06T08:01:00.002+08:00</published><updated>2008-10-07T14:10:09.281+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hack'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Regex'/><title type='text'>blogger功能增强</title><content type='html'>昨天花了两个多小时给blogger加上了留言板、标签云和缩略显示。&lt;br /&gt;blogger本身提供的功能较少，但提供了灵活的模板编辑功能，就好像blogger提供了一系列的数据接口，让用户选择所需要的数据进行显示，这比普通的Web开发来得更加省事，blogger的技巧很大程度上可以称为&lt;span style="color: rgb(102, 0, 0);"&gt;HACK&lt;/span&gt;，再加上blogger的广大用户群，所以一般的博客需求都可以方便地找到在blogbger上的解决方案。&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;留言板&lt;/span&gt;使用了&lt;a title="cbox" href="http://cbox.ws/" id="ad92"&gt;cbox&lt;/a&gt;提供的服务，在网上找下就可以了。&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;标签云&lt;/span&gt;详见：&lt;a title="Blogger V3.0 添加标签云" href="http://sunr.blogspot.com/2006/10/blogger-v30_02.html" id="a5at"&gt;Blogger V3.0 添加标签云&lt;/a&gt;&lt;br /&gt;    但是里面的javascript空行太多，影响阅读，使用正则表达式&lt;span style="color: rgb(102, 0, 0);"&gt;%[ ^t]++^p&lt;/span&gt;匹配多余的空行，删除就可以了。&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;缩略显示&lt;/span&gt;详见一下的文章：&lt;a title="继续阅读懒人加强版" href="http://anniyalogam.com/go.php?u=cjhtech/2007/09/blogger-2x_30.html" id="kki9"&gt;继续阅读懒人加强版&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8098528432634250063?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8098528432634250063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8098528432634250063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8098528432634250063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8098528432634250063'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blogger-bloggerbloggerwebblogger-hack.html' title='blogger功能增强'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3502444600182865045</id><published>2008-10-05T21:36:00.002+08:00</published><updated>2008-12-18T11:14:19.065+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Learning python 读书笔记 PART 4</title><content type='html'>&lt;font size="3"&gt;&lt;b&gt;PART FOUR. FUNCTIONS&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;Chapter 12. Function Basics&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;calls:&amp;nbsp; myfunc(argv)&lt;br&gt;def, return, yield: def adder(a, b=1, *c): return a+b+c[0]&lt;br&gt;global:&amp;nbsp; def function(): global x; x = 'new'&lt;br&gt;lambda:&amp;nbsp; funcs = [lambda x: x**2, lambda x: x*3]&lt;br&gt;&lt;/span&gt;&lt;b&gt;1. Coding Functions&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;def is a executable statement which create an object and assigns it to a name&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;arguments are passed by assignment&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;global declares module-level variables that are to be assigned&lt;/span&gt;&lt;br&gt;def &amp;lt;name&amp;gt; (arg1, arg2...):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &amp;lt;value&amp;gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;def can executes at runtime&lt;/span&gt;&lt;br&gt;if test:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def function():&lt;br&gt;else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def function():&lt;br&gt;&lt;b&gt;2. Definitions and Calls&lt;br&gt;&lt;/b&gt;Polymorphism in Python: because python is a dynamically typed language, every operation is polymorphic in python&lt;br&gt;in python, code &lt;i&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;is not supposed to care about specific data types&lt;/span&gt;&lt;/i&gt;.&lt;br&gt;&lt;b&gt;&lt;/b&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;&lt;br&gt;Chapter 13. Scopes and Arguments&lt;br&gt;&lt;/b&gt;&lt;b&gt;1. Scope Rules&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Name &amp;lt;--&amp;gt; Namespace&lt;/span&gt;&lt;br&gt;The enclosing module is a global scope&lt;br&gt;The global scope spans a single file only&lt;br&gt;Each call to a function is a new local scope&lt;br&gt;Assigned names are local, unless declared global&lt;br&gt;All other names are enclosing locals, globals, or built-ins&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;LEGB: local --&amp;gt; enclosing functions --&amp;gt; global --&amp;gt; built-in&lt;/span&gt;&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;the built-in scope&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; import __builtin__&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; dir(__builtin__)&lt;br&gt;zip &amp;lt;--&amp;gt; import __builtin__,&amp;nbsp; __builtin__.zip&lt;br&gt;&lt;b&gt;2. The global Statements&lt;br&gt;3. Scope and Nested Functions&lt;br&gt;&lt;/b&gt;L&lt;b&gt;E&lt;/b&gt;GB: statically nested scope&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;lambda&lt;/span&gt;: an &lt;span style="color: rgb(102, 0, 0);"&gt;expression &lt;/span&gt;that generates a new function to be called later, much like def &lt;span style="color: rgb(102, 0, 0);"&gt;statement&lt;/span&gt;&lt;br&gt;&lt;b&gt;4. Passing Arguments&lt;br&gt;&lt;/b&gt;immutable arguments &amp;lt;--&amp;gt; C's "by value" mode&lt;br&gt;mutable arguments &amp;lt;--&amp;gt; C's "by pointer" mode&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Avoiding mutable arguments change&lt;/span&gt;:&lt;br&gt;pass a copy or tuple&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Simulating output parameters:&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; def multiple(x,y):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = 2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y = [3,4]&amp;nbsp; #change local names only&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return x,y #return new values in a tuple(&lt;span style="color: rgb(102, 0, 0);"&gt;not two values&lt;/span&gt;)&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; x = 1&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; y = [1,2]&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; x,y = multiple(x,y)&amp;nbsp; #assign result to caller's names&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; x,y&lt;br&gt;(2, [3, 4])&lt;br&gt;&lt;b&gt;5. Special Argument Matching Modes&lt;/b&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;func(value)&amp;nbsp;&amp;nbsp;&amp;nbsp; : Normal argument: matched by position&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;func(name=value)&amp;nbsp;&amp;nbsp;&amp;nbsp; : Keyword argument: matched by name&lt;/span&gt;&lt;br&gt;self documention, more meaningful&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;def func(name)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;def func(name=value)&amp;nbsp;&amp;nbsp;&amp;nbsp; : default argument value, if not passed in the call&lt;/span&gt;&lt;br&gt;make some arguments optional&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;def func(*name)&amp;nbsp;&amp;nbsp;&amp;nbsp; : Matchs remaining positional args(in a tuple)&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;def f(*args): print args&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;def func(**name)&amp;nbsp;&amp;nbsp;&amp;nbsp; : Matchs remaining keyword args(in a dict)&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;def f(**args): print args&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;f(a=1,b=2)&lt;br&gt;{'a':1, 'b':2}&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;Argument Matching&lt;/span&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;rules:&lt;/span&gt;&lt;br&gt;key arguments after non-keyargument&lt;br&gt;*name after normal argument&lt;br&gt;**name last&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Matching steps:&lt;/span&gt;&lt;br&gt;non-key argus --&amp;gt; key word argus --&amp;gt; extra non-key argus --&amp;gt; extra key argus --&amp;gt;default values&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(7, 55, 99);"&gt;Chapter 14. Advanced Function Topics&lt;/b&gt;&lt;br&gt;&lt;b&gt;1. Anonymous Functions: lambda&lt;br&gt;&lt;/b&gt;lambda expression creates a function to be called later, but &lt;span style="color: rgb(102, 0, 0);"&gt;returns it instead of assigning it to a name&lt;/span&gt;&lt;br&gt;lambda argu1, argu2, argu3...arguN: expression using argus&lt;br&gt;lambda bodies are &lt;span style="color: rgb(102, 0, 0);"&gt;single expression&lt;/span&gt;, not a block of statements&lt;br&gt;&lt;i&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;example1:&lt;/span&gt;&lt;/i&gt;&lt;br&gt;L = [(lambda x: x**1),(lambda x: x**2), (lambda x: x**3)]&lt;br&gt;for f in L&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print f(2)&lt;br&gt;print L[0](2)&lt;br&gt;&lt;i&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;example2:&lt;/span&gt;&lt;/i&gt;&lt;br&gt;key = 'b'&lt;br&gt;{'a': (lambda f1),&lt;br&gt;&amp;nbsp; 'b': (lambda f2),&lt;br&gt;}[b]()&lt;br&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;is equivalent to&lt;/span&gt;&lt;br&gt;def f1():...&lt;br&gt;def f2():...&lt;br&gt;... &lt;br&gt;key = ...&lt;br&gt;{'a':f1, 'b':f2}[key]()&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;How(not) to obfuscate your python code&lt;/span&gt;&lt;br&gt;((a and b) or c) is roughly  equivalent to: &lt;br&gt;if a: b else: c&lt;br&gt;(C's a?b:c)&lt;br&gt;&lt;b&gt;2. Applying Functions to Arguments&lt;br&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;The apply built-in&lt;/span&gt;&lt;br&gt;apply(func, argus) == func(argus)&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;argument list is passed by tuple&lt;/span&gt;&lt;br&gt;if &amp;lt;test&amp;gt;:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; action,args = func1, arguments_a&lt;br&gt;else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; action,args = func2, arguments_b&lt;br&gt;...&lt;br&gt;apply(action,args)&lt;br&gt;&lt;b&gt;3. Functions Over Sequences&lt;br&gt;&lt;/b&gt;&amp;gt;&amp;gt;&amp;gt; counter = [1,2,3,4]&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; def func(x): return x + 10&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; map(func,counter)&lt;br&gt;[11, 12, 13, 14]&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;map((lambda x: x + 3), counter)&lt;br&gt;[3,4,5,6]&lt;br&gt;map(func,[1,2,3],[4,5,6]) #[func(1,4),func(2,5),func(3,6)]&lt;br&gt;&lt;b&gt;4. Functional Programing Tools&lt;br&gt;&lt;/b&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;filter&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;filter((lambda x: x&amp;gt;0), range(-5,5))&lt;br&gt;[1,2,3,4]&lt;br style="background-color: rgb(207, 226, 243);"&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;reduce&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;reduce((lambda x, y: x+y), [1,2,3,4])&amp;nbsp; &lt;br&gt;10&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;import operator&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;reduce(opetator.add, [1,2,3,4])&lt;br&gt;&lt;b&gt;5. List Comperhensions&lt;br&gt;&lt;/b&gt;[x ** 2 for x in range(10)]&lt;br&gt;map((lambda x: x ** 2), range(10))&lt;br&gt;[x for x in range(5) if x%2 == 0]&lt;br&gt;filter((lambda x: x%2 == 0), range(5))&lt;br&gt;map((lambda x: x**2), filter((lambda x: x%2 == 0),range(10)))&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;the genaral structure of list comprehensions&lt;/span&gt;&lt;br&gt;[expression for target1 in sequence 1 [if condition]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for target2 in sequence 2 [if condition]....&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for targetN in sequence N [if condition]]&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;list comperhension and map are faster than for loop.&lt;/span&gt;&lt;br&gt;&lt;b&gt;6. Generators and Iterators&lt;br&gt;&lt;/b&gt;Generators &lt;span style="color: rgb(102, 0, 0);"&gt;yield &lt;/span&gt;a value rather than &lt;span style="color: rgb(102, 0, 0);"&gt;returning &lt;/span&gt;one. The yield statment suspends the function and sends a value back to the caller and allow the function to resume from where it left off.&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; def gensqure(N):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in range(N):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; yield i ** 2&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;x=gensqure(10)&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;x.next(), x.next()...&lt;br&gt;Iterators and built-in type: iter(L)&lt;br&gt;__iter__ method&lt;b&gt;&lt;/b&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3502444600182865045?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3502444600182865045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3502444600182865045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3502444600182865045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3502444600182865045'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/learning-python-part-4.html' title='Learning python 读书笔记 PART 4'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-4935529213489757747</id><published>2008-10-05T15:08:00.004+08:00</published><updated>2008-12-18T11:14:19.067+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Learning python 读书笔记 PART 3</title><content type='html'>&lt;font size="3"&gt;&lt;b&gt;PART THREE: Statements and Syntax&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 8. Assignment, Expressions, and Print&lt;/span&gt;&lt;br&gt;&lt;/b&gt;&lt;b style="color: rgb(68, 68, 68);"&gt;program&amp;nbsp;&lt;/b&gt;&lt;b style="color: rgb(68, 68, 68);"&gt; &lt;/b&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;are composed of&amp;nbsp;&lt;/span&gt;&lt;b style="color: rgb(68, 68, 68);"&gt; modules &lt;/b&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;contains&lt;/span&gt;&lt;b style="color: rgb(68, 68, 68);"&gt; statements &lt;/b&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;contain &lt;/span&gt;&lt;b style="color: rgb(68, 68, 68);"&gt;expressions &lt;/b&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;create and process &lt;/span&gt;&lt;b style="color: rgb(68, 68, 68);"&gt;objects&lt;/b&gt;&lt;br&gt;&lt;b&gt;1. Assignment Statements&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;&lt;/span&gt;&lt;/b&gt;a = 'a'&lt;br&gt;a, b = 'a', 'b'&amp;nbsp;&amp;nbsp; #tuple assignment&lt;br&gt;[a,b] = ['a','b']&amp;nbsp;&amp;nbsp;&amp;nbsp; #List assignment&lt;br&gt;a = b = 'c'&amp;nbsp;&amp;nbsp;&amp;nbsp; #Mutiple-assignment&lt;br&gt;L = L + [3], L = L + [5,6] &amp;nbsp;&amp;nbsp; #Concatenate(create a new object)&lt;br&gt;L.append(3), L.extend([4,5]) &amp;nbsp;&amp;nbsp; #Faster, but in-place(add at the and of memory)&lt;br&gt;L += [9,10]&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;span style="color: rgb(11, 83, 148);"&gt;Mapped to L.extend([9,10]): the faster mothed&lt;/span&gt;&lt;b&gt;&lt;br&gt;2. Expression Statements&lt;br&gt;3. Print Statements&lt;br&gt;&lt;/b&gt;print a,b,&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;span style="color: rgb(11, 83, 148);"&gt;don't add newline at the end of text&lt;/span&gt;&lt;br&gt;print &amp;gt;&amp;gt;myfile a,b&amp;nbsp;&amp;nbsp;&amp;nbsp; #&lt;span style="color: rgb(11, 83, 148);"&gt;send data to myfile.write, not to sys.stdout.write&lt;/span&gt;&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;redirecting the Output Stream&lt;/span&gt;&lt;br&gt;import sys&lt;br&gt;sys.stdout = open('myfile', 'a')&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;print and stdout&lt;/span&gt;&lt;br&gt;class FileFaker:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def &lt;span style="color: rgb(11, 83, 148);"&gt;write(self, string)&lt;/span&gt;&amp;nbsp; #do something with the string&lt;br&gt;import sys&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.stdout = FileFaker()&lt;br&gt;&lt;b&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 9. if Tests&lt;/span&gt;&lt;br&gt;&lt;/b&gt;&lt;b&gt;1. if stataments&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;if: elif: else:&lt;/span&gt;&lt;br&gt;if 1: &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'true'&lt;br&gt;else:&lt;br&gt;&amp;nbsp; &amp;nbsp; print 'false'&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;switch &amp;amp; case:&lt;/span&gt;&lt;br&gt;*if choice = 'a':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'aaa'&lt;br&gt;elif choice = 'b':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'bbb'&lt;br&gt;else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'default'&lt;br&gt;choice = 'b'&lt;br&gt;*print {'a':'aaa','b':'bbb'}[choice]&lt;br&gt;*branch =  {'a':'aaa','b':'bbb'}&lt;br&gt;&amp;nbsp; print branch.get('a', 'bad choice')&lt;br&gt;&lt;b&gt;2. truth tests&lt;br&gt;&lt;/b&gt;2&amp;lt;3, 3&amp;lt;2&amp;nbsp;&amp;nbsp; #Less-than: return 1 or 0&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;short circuit evaluation&lt;/span&gt;&lt;br&gt;2 or 3, 3 or 2&amp;nbsp;&amp;nbsp; #(2,3) Return left operand if true. Else return right operand.&lt;br&gt;[] or 3&amp;nbsp;&amp;nbsp; #3&lt;br&gt;[] or {}&amp;nbsp;&amp;nbsp; #{}&lt;br&gt;2 and 3, 3 and 2&amp;nbsp;&amp;nbsp; #(3,2) return left operand if false. Else return right operand.&lt;br&gt;&lt;b&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 10. while and for Loops&lt;/span&gt;&lt;br&gt;1. while loops&lt;br&gt;&lt;/b&gt;while &amp;lt;test&amp;gt;:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &amp;lt;statement1&amp;gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; if &amp;lt;test2&amp;gt;: break &amp;nbsp;&amp;nbsp; #Exit loop now, skip now&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; if &amp;lt;test2&amp;gt;: continue &amp;nbsp;&amp;nbsp; #goto top of loop now &amp;nbsp;&amp;nbsp; &lt;br&gt;else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &amp;lt;statement2&amp;gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;#if we didn't hit break&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;breaks, continue, pass and the loop else&lt;/span&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;Emulating C while Loops&lt;/span&gt;&lt;br&gt;&lt;br /&gt;C assignments return the value assignment; Python assignments are just statements, not expressions&lt;br&gt;C: &lt;span style="color: rgb(191, 144, 0);"&gt;while ((x = next()) != NULL){process x...}&lt;/span&gt;&lt;br&gt;Python equivalent:&lt;br&gt;*while 1:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = next()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not x: break&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...process...&lt;br&gt;x = 1&lt;br&gt;*while x:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = next()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if x:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...process&lt;br&gt;&lt;b&gt;2. for loops&lt;br&gt;&lt;/b&gt;for &amp;lt;target&amp;gt; in &amp;lt;object&amp;gt;:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;statements&amp;gt;&lt;br&gt;else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;statements&amp;gt;&amp;nbsp; #if we didn't hit break&lt;br&gt;&lt;b&gt;3. loop variations&lt;br&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;range&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&lt;i style="color: rgb(19, 79, 92);"&gt;Counter Loops&lt;/i&gt;&lt;br&gt;range(3)&amp;nbsp; #[0,1,2]&lt;br&gt;range(2,5) #[2,3,4]&lt;br&gt;range(0,10,2)&amp;nbsp; #[0,2,4,6,8]&lt;br&gt;*for item in X: print item&lt;br&gt;*i = 0&lt;br&gt;&amp;nbsp;while i &amp;lt; len(X)&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; print x[i],; i += 1&lt;br&gt;*for i in range(len(x)): print X[i]&lt;br&gt;&lt;i style="color: rgb(19, 79, 92);"&gt;Nonexhaustive Traversals&lt;/i&gt;&lt;br&gt;S = 'abcdefghijk'&lt;br&gt;for i in range(0, len(s), 2) print S[i],&amp;nbsp; #manual for indexing&lt;br&gt;for i in S[::2]: print x&lt;br&gt;&lt;i style="color: rgb(19, 79, 92);"&gt;Changing Lists&lt;/i&gt;&lt;br&gt;for i in range(len(L)):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; L[i] += 1&lt;br&gt;&lt;b style="background-color: rgb(207, 226, 243);"&gt;zip and map&lt;/b&gt;&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;zip can enable us to visit multiple sequences in parallel&lt;/span&gt;&lt;br&gt;L1 = [1,2,3], L2 = [4,5,6]&lt;br&gt;zip(L1,L2)&amp;nbsp;&amp;nbsp; #[(1,4),(2,5),[3,6]]&lt;br&gt;for (x,y) in zip(L1,L2):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print x, y,&lt;b&gt;&lt;br&gt;&lt;/b&gt;when argument lengths differ, zip choose the shortest length&lt;br&gt;map(None, L1, L2)&lt;br&gt;map choose the longest length and filled empty items with "None"&lt;br&gt;&lt;i style="color: rgb(11, 83, 148);"&gt;Dictionary Construction with zip&lt;/i&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; keys = ['a','b','c']&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; values = [1,2,3]&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; zip(keys,values)&lt;br&gt;[('a', 1), ('b', 2), ('c', 3)]&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; D = {}&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&lt;span style="color: rgb(12, 52, 61);"&gt; for(k,v)in zip(keys,values):&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(19, 79, 92);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; D[k]= v&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; D&lt;br&gt;{'a': 1, 'c': 3, 'b': 2}&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; D2 = &lt;span style="color: rgb(12, 52, 61);"&gt;dict(zip(keys,values))&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; D2&lt;br&gt;{'a': 1, 'c': 3, 'b': 2}&lt;br&gt;&lt;b style="background-color: rgb(207, 226, 243);"&gt;File Scanners&lt;/b&gt;&lt;br&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;file = open('test.txt', 'r')&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;while 1:&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; line = file.readline()&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not line: break&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print line&lt;/span&gt;&lt;br&gt;1. for line in open('test.txt').readlines(): print line&lt;br&gt;2. for line in open('test.txt').xreadlines(): print line&lt;br&gt;3. for line in open('test.txt'): print line&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;xreadlines loads lines on demand, "3" relies on iterators, is equivalent of xreadlines&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Chapter 11. Documenting Python Code&lt;/span&gt;&lt;br&gt;1. the python document interlude&lt;br&gt;&lt;/b&gt;&lt;div&gt;&lt;/div&gt;dir(): Lists of attributes&amp;nbsp; available on objects&lt;br&gt;__doc__: In-file documentation attached to objects&lt;br&gt;&lt;b style="background-color: rgb(207, 226, 243);"&gt;docstrings&lt;/b&gt;&lt;br&gt;&lt;i&gt;User-defined docstrings&lt;/i&gt;: strings at the top of file, method and class &lt;br&gt;&lt;i&gt;built-in docstring&lt;/i&gt;:&lt;br&gt;import sys&lt;br&gt;print sys.__doc__&lt;br&gt;print int.__doc__, print open.__doc__&lt;br&gt;&lt;b style="background-color: rgb(207, 226, 243);"&gt;pydoc&lt;/b&gt;&lt;br&gt;help(&lt;i&gt;sys&lt;/i&gt;)&lt;br&gt;&lt;b&gt;2. common coding gotthas&lt;/b&gt;&lt;br&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Don't forget the colons&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Start in column 1&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Blank lines matter at the interactive prompt: &lt;br&gt;&lt;/span&gt;mean the end of compound statement&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Indent consistently&lt;/span&gt;&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Don't coding C in Python: &lt;br&gt;&lt;/span&gt;don't embed assignment statements in while loop tests&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Use simple for loop instead of while or range:&lt;br&gt;&lt;/span&gt;for loop is simple and fast&lt;br style="color: rgb(7, 55, 99);"&gt;&lt;span style="color: rgb(7, 55, 99);"&gt;Don't expect results from functions that change objects in-place: &lt;/span&gt;&lt;br&gt;append(), sort(), append(), extend()&lt;br&gt;myList = myList.append(X)&amp;nbsp; #&lt;span style="color: rgb(102, 0, 0);"&gt;set myList to None&lt;/span&gt;&lt;br&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Always use parenthesis to call a function&lt;/span&gt;&lt;br style="color: rgb(12, 52, 61);"&gt;&lt;span style="color: rgb(12, 52, 61);"&gt;Don't use extensions or paths in imports and reloads&lt;/span&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-4935529213489757747?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/4935529213489757747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=4935529213489757747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4935529213489757747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4935529213489757747'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/learning-python-part-3.html' title='Learning python 读书笔记 PART 3'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8494782914474542102</id><published>2008-10-04T09:42:00.005+08:00</published><updated>2008-11-17T23:12:28.077+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google docs + Google Gear + Blogger</title><content type='html'>这几天把其它地方的blog都挪到Blogger上了，和其它blog服务相比，blogger&lt;b&gt;&lt;span style="color: rgb(19, 79, 92);"&gt;更加简洁，而且方便定制&lt;/span&gt;&lt;/b&gt;。但这两天在使用的过程中，也发现了一些问题，首先Blogger本身提供的文本格式化工具较弱，拍版普通的文字尚可，但如果文字有缩进之类的就相当麻烦，Tab是没用的，就算在“誊写”状态下使用空格，虽然在编辑视图中缩进正常，但是在发布后依然难以控制缩进的量。其次我习惯性将博客写在word中，然后粘帖到在线博客的编辑窗口，但doc中的样子在粘帖过程中很难不走样。&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;首先&lt;/span&gt;我想到的从word中导出Html，然后粘帖到blogger的html视图中，但即使将导出的html进行规整后，显示的效果依然极不理想。&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;接着&lt;/span&gt;我想到了像blogger这么大的用户群，应该有人会开发&lt;span style="color: rgb(11, 83, 148);"&gt;blogger for word&lt;/span&gt;的插件，结果还真让我给找着了，可实际结果是登录blogger帐号失败，分析下来的结果是用户名和密码的字符编码可能在中文win环境下有错，导致了不能登陆，在windows环境下，这类字符编码的问题很少发生，但发生了还真想不到解决的办法。&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;然后&lt;/span&gt;我又想到既然word和Google doc间的兼容性较好，而Google的产品间应该也有较好的兼容性，因此我想到了&lt;b&gt;&lt;span style="color: rgb(19, 79, 92);"&gt;word--&amp;gt;Google doc--&amp;gt;Blogger&lt;/span&gt;&lt;/b&gt;这样的发布路线，但实际操作下来&lt;span style="color: rgb(19, 79, 92);"&gt;word--&amp;gt;Google doc&lt;/span&gt;这一步没有问题，但从Google doc 发布到blogger时仍然出现了问题，虽然现在Google doc支持将文档直接发布到Blogger，但是发布的效果和doc中的显示效果有较大的差别。其实原因很简单，Google doc默认使用的CSS和Blogger使用的CSS有些不同，但修改Blogger模板有点烦，一个个属性一个个值调下去太费时间。不过我觉得只要调整正文的&lt;span style="color: rgb(19, 79, 92);"&gt;P、ul、li&lt;/span&gt;、dvi这四个属性就能取得比较好的显示效果。&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgb(207, 226, 243);"&gt;最后&lt;/span&gt;的结果是，现在我不用office了，直接使用&lt;span style="color: rgb(11, 83, 148);"&gt;Google docs&lt;/span&gt;，虽然功能少些，但是够用，也不要担心文章丢失之类的东西。想想Google docs推出这么些年，也该出个离线编辑功能了吧，找了下还果然发现了。&lt;br /&gt;&lt;br /&gt;首先要在&lt;a href="http://gears.google.com/"&gt;http://gears.google.com/&lt;/a&gt;下载&lt;b&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;Google Gear&lt;/span&gt;&lt;/b&gt;，Google的一个支持&lt;b&gt;web apps离线操作&lt;/b&gt;的软件，下载后能自动套用到当前使用的浏览器。然后启动Google Docs，在“设置”中将语言设成English（现在还不支持中文版的Google Docs），然后重启下浏览器，Google docs的右上方就会出现：&lt;span style="color: rgb(11, 83, 148);"&gt;offline&lt;/span&gt;链接，搞定！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8494782914474542102?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8494782914474542102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8494782914474542102' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8494782914474542102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8494782914474542102'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/google-docs-google-gear-blogger.html' title='Google docs + Google Gear + Blogger'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7596999360201717814</id><published>2008-10-04T07:33:00.005+08:00</published><updated>2008-12-18T11:14:19.068+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Learning python 读书笔记（6, 7章）</title><content type='html'>&lt;b&gt;Chapter 6: Lists and Dictionaries&lt;/b&gt;&lt;br&gt;&lt;b&gt;1. List&lt;/b&gt;&lt;br&gt;Methods: grow, sort, search, reverse, append, extend, append&lt;br&gt;&lt;font color="#0b5394"&gt;del L[x:y], L[x:y]=[a,b,c]&lt;br&gt;range(x), xrange(x,y), L.pop() &lt;br&gt;&lt;/font&gt;&lt;b&gt;2. List in Action&lt;/b&gt;&lt;br&gt;Slice assignment: delete + insert&lt;br&gt;L.append(x) &amp;lt; -- &amp;gt; L+[x] &lt;br&gt;&lt;b&gt;3. Dictionaries&lt;/b&gt;&lt;font color="#0b5394"&gt;&lt;br&gt;D.keys(), D.values(), D.items():&lt;/font&gt; create a new list&lt;br&gt;&lt;font color="#0b5394"&gt;D.copy(), D.get(k, default),&lt;/font&gt;&lt;br&gt;&lt;font color="#0b5394"&gt;D2.update(D1):&lt;/font&gt; merges the keys and values of one directory into another, blindly overwriting values of the same key.&lt;br&gt;&lt;font color="#0b5394"&gt;D.has_key(k), k in D&lt;br&gt;D = dict(zip(keyslist, valueslist)) &lt;br&gt;&lt;/font&gt;&lt;b&gt;4. Dictionaries in Action&lt;/b&gt;&lt;br&gt;sequence operation don’t work.&lt;br&gt;Assigning to new indexes adds entries.&lt;br&gt;keys need not always be strings.(can be other immutable object)&lt;br&gt;Using dictionaries to simulate flexible lists Using dictionaries for sparse data structures&lt;br&gt;&lt;font color="#0b5394"&gt;Matrix = {}&lt;/font&gt;&lt;br&gt;&lt;font color="#0b5394"&gt;Matrix[(2,3,4)] = 88&lt;/font&gt;: the number at position (2,3,4) is 88&lt;br&gt;Using dictionaries as “reconds”&lt;br&gt;Dictionary interfaces&lt;br&gt;&lt;font color="#0b5394"&gt;import anydbm&lt;br&gt;file = anydbm.open(“filename”)&lt;br&gt;file [‘key’] = ‘data’ #store data by key&lt;br&gt;data = file[‘key’] #fetch data by key&lt;br&gt;&lt;/font&gt; &lt;br&gt;&lt;b&gt;Chapter 7: Tuples, Files, and Everything Else &lt;br&gt;1. Tuples &lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;simple groups of objects, cannot change in place(immutable), don't support any method calls&lt;/span&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (1,2) + (3,4)&lt;br&gt;(1, 2, 3, 4)&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (1,2) * 3&lt;br&gt;(1, 2, 1, 2, 1, 2)&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; T = ('1', '2', '3')&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tmp = list(T)&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tmp&lt;br&gt;['1', '2', '3']&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; T2 = tuple(tmp)&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; T2&lt;br&gt;('1', '2', '3')&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; T = (1, [2,3], 4)&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; T[1][0] = 5 #works&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; T[0] = 0 #Fails&lt;br style="color: rgb(19, 79, 92);"&gt;&lt;b&gt;2. Files &lt;br&gt;&lt;/b&gt;input = open('path', 'r'), output = open ('path', 'w')&amp;nbsp; #&lt;span style="background-color: rgb(255, 255, 255); color: rgb(11, 83, 148);"&gt;mode: r, w, a&lt;/span&gt;&lt;br&gt;S = input.read(), S = input.read(N) # N bytes&lt;br&gt;S = input.readline(), S = input.readlines()&lt;br&gt;output.write(S), output.writelines(L), output.close()&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;seek: reset current position in file, flush: buffered output write into disk&lt;/span&gt;&lt;br style="color: rgb(19, 79, 92);"&gt;&lt;b&gt;3. Type Categories Revisited &lt;/b&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;&lt;br&gt;Operator Overloading:&lt;/span&gt;&lt;br&gt;class MySquence:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def __getitem__(self, index): &lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #called on self[index]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; del __add__(self, other):&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #called on self + other&lt;br style="color: rgb(19, 79, 92);"&gt;&lt;b&gt;4. Object Generality&lt;/b&gt;&lt;br&gt;Lists, dictionaries, and tuples can: 1. hold any kind of object 2. arbitrarily nested&lt;br&gt;Lists and dictionaries can dynamically grow and shrink.&lt;br style="color: rgb(19, 79, 92);"&gt;&lt;b&gt;5. References Versus Copies&lt;/b&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;&lt;br&gt;No reference to the same object:&lt;/span&gt;&lt;br&gt;A = L[:]&amp;nbsp;&amp;nbsp;&amp;nbsp; #instead of: A = L (or list(L))&lt;br&gt;B = D.copy()&amp;nbsp;&amp;nbsp;&amp;nbsp; #instead of: B = D&lt;br&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;empty-limit slices and copy method only do a top-level copy&lt;/span&gt;!&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;nested copy:&lt;/span&gt;&lt;br&gt;import copy&lt;br&gt;X = copy.deepcopy(Y)&lt;br style="color: rgb(19, 79, 92);"&gt;&lt;b&gt;6. Comparisons, Equality, and Truth&lt;/b&gt;&lt;br&gt;L1 == L2, L1 is L2&amp;nbsp;&amp;nbsp; &amp;nbsp;#Equivalent? Same object?&lt;br&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;But short string&lt;/span&gt;: S1 = 'spam', S2 = 'spam' # S1==S2: true, S1 is S2: true&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;Numbers are true if nonzero&lt;/span&gt;&lt;br style="color: rgb(11, 83, 148);"&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;Other objects are true if nonempty&lt;/span&gt;&lt;br&gt;&lt;span style="color: rgb(11, 83, 148);"&gt;None: much like NULL in C&lt;/span&gt;&lt;br&gt;L = [None] * 100&lt;br&gt;bool: True, False&lt;b&gt;&lt;span style="color: rgb(19, 79, 92);"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7596999360201717814?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7596999360201717814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7596999360201717814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7596999360201717814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7596999360201717814'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/chapter-6-lists-and-dictionaries-1_7470.html' title='Learning python 读书笔记（6, 7章）'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-959763109384038136</id><published>2008-10-03T08:37:00.009+08:00</published><updated>2008-12-16T22:18:20.524+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>Concept map 思维导图</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;接触思维导图是在《学习的革命》开始流行的那会，书中叫做“脑图”，兴许是名字太土，如今换成叫思维导图，听起来专业了些。也着实画了几张，后来新鲜劲过了也就没继续下去。昨天在抓虾上看到了《从优秀到卓越》的思维导图，发现看这图相比看书，比快餐还快餐，一下子就能知道个大概。接着试用了几款软件，MindMapper、Keystone和Inspriation。比较下来几款软件并无多少差异，可从作图的美观性和实例多少来看，MindMapper更为优秀。不过后来在Visio中找了下，发现也有类似的功能，即是所谓的灵感触发图。总的用下来Visio还是最好的，操作便捷且绘图标准大方。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;在Visio中脑图一共有四种图形：主标题、标题、动态连接线和关联线。十分简单，而且够用。要花哨的话也提供了一些模板可以套用，使用上还是十分方便的。&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SOVuP6xUU0I/AAAAAAAACro/3YB2ydNlYLo/s1600-h/Concept+Map.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SOVuP6xUU0I/AAAAAAAACro/3YB2ydNlYLo/s400/Concept+Map.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5252725760150754114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/xuyizun/LbltPF#"&gt;http://picasaweb.google.com/xuyizun/LbltPF#&lt;/a&gt;&lt;br /&gt;在网络相册中我放了一些搜集到的思维导图。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;可我们真的需要脑图么？如果它真的有用，那么在工作中早就在应用了，而实际上直到现在，脑图依然处在个人的尝试中，我认为导致脑图并不流行的原因有以下几点：首先是脑图本身的局限性，它太简单而且太缺乏标准了，简单导致了灵活和杂乱，的确，脑图几乎可以表示任何结构的知识或思考；但由于没有标准的图例，一来导致了过于灵活，二来稍显杂乱。其次是中国的教育体制决定的，从小我们就被锻炼出了十分不错的记忆力，既然看完能较快地记住，脑图也就变得不那么重要了，因为脑图从本质上来讲就是为了帮助大家较好地建立一个思维体系。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;下面用思维导图来表示思维导图的局限，算是练习咯！&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_afohQU5wMHo/SOVp2PfS9qI/AAAAAAAACrE/f7EtU106h3E/s1600-h/%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_afohQU5wMHo/SOVp2PfS9qI/AAAAAAAACrE/f7EtU106h3E/s400/%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5252720920989202082" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-959763109384038136?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/959763109384038136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=959763109384038136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/959763109384038136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/959763109384038136'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_03.html' title='Concept map 思维导图'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SOVuP6xUU0I/AAAAAAAACro/3YB2ydNlYLo/s72-c/Concept+Map.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7772786928373182079</id><published>2008-10-02T12:29:00.006+08:00</published><updated>2008-12-18T11:14:19.069+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>Learning python 读书笔记（1--5章）</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;PART ONE: Getting Started&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Chapter 1: A Python Q&amp;amp;A Session&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Chapter 2: How python runs programs&lt;/span&gt;&lt;br /&gt;1. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Source(x.py)  --&gt; Byte Code(x.pyc) --&gt; runtime(PVM)&lt;br /&gt;2.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;CPython, Jython and Python.net&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Psyco: Just-in-Time Compiler&lt;br /&gt;3. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Frozen Binaries: program + PVM = binary executable program.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Py2exe(for windows), Installer(Linux &amp;amp; Unix), freeze(original)&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Chapter3: How you run programs&lt;/span&gt;&lt;br /&gt;1. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Unix executable scripts: start with #!/usr/local/bin/python&lt;br /&gt;2. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;raw_input trick: pause the script&lt;br /&gt;3.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;import and reload&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;imports are too expensive an operation to repeat, so when we use reload() instead.&lt;br /&gt;4.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Attributes: import xx &amp;amp; from xx import yy. yy are the attributes in the python file xx.&lt;br /&gt;5. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;IDE: IDLE, Komodo, PythonWorks, PythonWin, Visual Python(plugin for VS).&lt;br /&gt;6. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;text editor: see http://www.python.org/editors&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;PATR TWO: Types and Operations&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Chapter4: Numbers&lt;/span&gt;&lt;br /&gt;1.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;programs  modules  statements  expressions.&lt;br /&gt;2. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Numbers: Normal integers(C longs); Long integers(unlimited size); Floating-point(C &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;doubles);Octal and hex literals; Complex number literals.&lt;br /&gt;3.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;NumPy(Numeric Python).&lt;br /&gt;4.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;When use a variable that has never been assigned, Pythons report an error rather than a &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;default value.&lt;br /&gt;5. Numeric representation:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;b/a #Auto echo output: more digits&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;print b/a #print rounds off digits.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;repr(num) #Used by echos: as cod form&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;str(num) #Used by print: user-friendly form&lt;br /&gt;6. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Division: Classic, Floor and True&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;x/y: Classic division&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;x//y: Floor devision&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;from __future__import division&lt;br /&gt;7. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;import math&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;math.pi, math.e&lt;br /&gt;8. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;int(‘0100’), int(‘0100’, 8), int(‘0x40’, 16) #100, 64, 64&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;oct(64), hex(64) #’0100’, ‘0x40’&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;eval(‘100’), eval(‘0100’), eval(‘0x40’) #100, 64, 64&lt;br /&gt;9. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;a=3 # a: Names (reference) 3: Object&lt;br /&gt;10. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;L1 = [2, 3, 4]&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;L2 = L1&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;L1 = 24 #L2 is not changed&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;L1[0] = 24 #L2 = [24, 3, 4]&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Chapter 5: Strings&lt;/span&gt;&lt;br /&gt;1.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&gt;&gt;&gt; s = ‘a\nb\tc’&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; s # output is the original sequence&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; print s #output is translated sequence&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;len(s) #5&lt;br /&gt;2.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;If python doesn’t recognize the character after ‘\’, it simple keeps the backslash in the &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;resulting string.&lt;br /&gt;3.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Raw stirng: r’xxxx’&lt;br /&gt;4. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;u‘xxx’: Unicode string&lt;br /&gt;5.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&gt;&gt;&gt; abc = 'abc'&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; for i in abc:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;print i&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;a&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;b&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;c&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; for i in abc:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;print i,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;a b c&lt;br /&gt;6. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;Index and slicing:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; num = '123456'&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; num[1:3], num[5:], num[:-4]&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;('23', '6', '12')&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; num[::2], num[::-1], num[0:-3:2]&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;('135', '654321', '13')&lt;br /&gt;7.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;String conversion tools:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;int(“42”), str(42) #Convert from/to string&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt;string.atoi(“42”), ‘42’ #older techniques&lt;br /&gt;8.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;You cannot change a string in place(by assigning an index).&lt;br /&gt;9. &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;String formatting&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; "%s %d %s" %('I', 4, 'you')&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;'I 4 you'&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%s: string&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%r: s, but uses repr()&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%c: character&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%d: decimal (integer)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%i: integer&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%u: unsigned integer&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%o, %x, %X: Octal, Hex, Hex uppercase&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%e, %E: floating-point exponent&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%f: float point&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%g, %G: floating-point e or f&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;%%: %&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;%[(names)][flag][width][.precision]code&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; x = 1234&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; res = "integers:...%d...%+d...%-6d...%06d" %(x, x, x, x)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&gt;&gt;&gt; res&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;'integers:...1234...+1234...1234 ...001234'&lt;br /&gt;10.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;String methods:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;X.method(arguments) == string.method(X, arguments)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;list(); join(); capitalize(); center(width)…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7772786928373182079?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7772786928373182079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7772786928373182079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7772786928373182079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7772786928373182079'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/learing-python-1-5.html' title='Learning python 读书笔记（1--5章）'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8766966288424293850</id><published>2008-09-30T20:29:00.014+08:00</published><updated>2008-12-17T09:16:16.101+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='系统'/><title type='text'>vmware联网</title><content type='html'>好久没在家里过十一了，今年老妈没给生活费，硬生生把俺逼回了家，也好，正好赶上大闸蟹上市。今儿上午去外婆家，成了玩笑的对象，很是热闹了一下，晚上爷爷奶奶又到我家，聚一起吃螃蟹，回家的第一天过得还是有声有色的。&lt;br /&gt;&lt;br /&gt;空了还帮家里搞了下电脑，发现虽然学了四年的计算机，很多最基本的操作还是一窍不通。找了些基础的文章：&lt;br /&gt;&lt;a href="http://www.cnblogs.com/sharewind/archive/2007/07/17/821539.html"&gt;基本的DOS命令&lt;/a&gt;。&lt;br /&gt;接着顺便在vmware中装了下Linux。选择host=windows guest=Linux这中方式也是十分无奈，上财的校园网通过H3C的802.1x拨号，在Linux下找不到合适的拨号软件，虽然网上也介绍了一些方法，但试下来无一成功。只好在windows下装了虚拟机。&lt;br /&gt;&lt;a href="http://www.chinaunix.net/jh/4/374483.html"&gt;vmware联网，host = win xp；guest = linux&lt;/a&gt;。&lt;br /&gt;&lt;a href="http://bbs.chinaunix.net/forum/viewtopic.php?t=376768&amp;amp;highlight=yunqing"&gt;vmware联网类型：NAT，host-only and bridge&lt;/a&gt;。&lt;br /&gt;最后我使用NAT方式联网成功，虚拟机中的IP设成通过DHCP自动获得就可以了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8766966288424293850?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8766966288424293850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8766966288424293850' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8766966288424293850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8766966288424293850'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/09/blog-post_30.html' title='vmware联网'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1670180101443684003</id><published>2008-09-25T20:44:00.011+08:00</published><updated>2008-12-16T22:21:58.964+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><title type='text'>开学第一周</title><content type='html'>&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;国民经济核算，高等数理统计，投资学，高级微观经济学，社会主义经济理论，高级英语口语，马克思。七门课程，２３个学时，忙忙碌碌。大学里逃了很多课，有些是当时就不该逃的，有些是当时只能逃但现在有些后悔的。后来考Ｇ，考研，找工，实习，才发现自己放弃了那么多本不该放弃的东西。现在只想静静地读书，再也不逃课，学好了课本再学其他的东西。简单生活。&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;上财来我还是蛮喜欢的。学校小小的，满满的，看着挺舒服；路上有很多漂亮的女孩子，就算每天走一样的路也不会觉得无聊；饭堂的伙食好出了华工很多；图书馆有满排崭新的计算机经典书。这些都是蛮让人开心的事儿。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;STA + CS = data mining;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;economic + math = STA.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;从课程来讲，我也挺喜欢系里的安排，高微和高统打下了些经济和数学的基础，这对我而言是蛮重要的。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;在网上也找了MIT的经济和数学课程，慢慢加强吧。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;&lt;a href="http://www.myoops.org/cocw/mit/Economics/index.htm"&gt;http://www.myoops.org/cocw/mit/Economics/index.htm&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;&lt;a href="http://www.myoops.org/cocw/mit/Mathematics/index.htm"&gt;http://www.myoops.org/cocw/mit/Mathematics/index.htm&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    &lt;/span&gt;看了大学一个同学的简历，真的感觉差距很大，现在的我也许真不到他大三初的水平。回想自己的大学，实在是在七零八碎的地方花去了太多的时间。有很多基础的东西需要去补。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;    DB、Stastics、R、Regular Expressions&lt;/span&gt;。One by one!&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1670180101443684003?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1670180101443684003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1670180101443684003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1670180101443684003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1670180101443684003'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/09/blog-post.html' title='开学第一周'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3284612132685719720</id><published>2008-09-24T21:05:00.005+08:00</published><updated>2008-12-17T09:16:16.102+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='系统'/><title type='text'>通过u盘安装Linux</title><content type='html'>下了fedora9，无奈本本刻不了dvd，只能打算通过usb进行安装。&lt;br /&gt;win的usb启动盘可以通过usboot制作，而linux的usb启动盘在win下制作比较麻烦。&lt;br /&gt;幸好fedora有liveusb制作软件，链接如下：&lt;br /&gt;&lt;a href="https://fedorahosted.org/liveusb-creator"&gt;https://fedorahosted.org/liveusb-creator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上财上网通过H3C的802.1x，linux下找到的拨号软件试了下都用不了，比较可行得是linux1x，可仍无法验证通过，可能是数据包加密的问题，也不知怎么解决。现在学unix大多在win下通过putty连到unix-center进行一些操作。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3284612132685719720?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3284612132685719720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3284612132685719720' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3284612132685719720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3284612132685719720'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/09/ulinux.html' title='通过u盘安装Linux'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3240426072743441265</id><published>2008-08-29T21:58:00.006+08:00</published><updated>2008-12-16T22:19:15.682+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><title type='text'>POS开发</title><content type='html'>整个七八月，都在蓝竹做软件开发实习生，在TD的Application组。每天的事无非是学习、看文档，直到三周以后开始从两份代码拼出一个RF卡的demo。之后过了两周多，Michale让我在一个已有项目的基础上进行修改，以完成一个新的项目。最后项目完成不到80%的时候我应实习期满离开了团队。&lt;br /&gt;&lt;br /&gt;开发是在STIP2.1(&lt;a href="http://www.stip.org/"&gt;www.stip.org&lt;/a&gt;)上进行的，协议大体采用ISO8583标准。模块的调用采用了异步模式，再加上较为复杂的状态机模型，在编程和测试的时候都出现了很多问题，一步步解决下来，感觉自己在面对这种较为微观的问题时的能力有了一些的提高。&lt;br /&gt;&lt;br /&gt;STIP是Small Terminal Interoperability Platform的简称，是在受限系统上进行JAVA开发的标准，目前主要应用在以下的领域，与基于C语言的开发相比，能较大地提高开发效率。&lt;br /&gt;�� EFT-POS terminals(STIP EFT-POS Profile) �� ATM �� Payphones �� Parking Meters �� Utility Meters �� Mass transit terminals �� Vending Machines&lt;br /&gt;&lt;br /&gt;STIP的架构大体如下图所示，我们Application组开发的就是Stiplet部分，也就是底层之上的应用：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SOLhZP_iOPI/AAAAAAAACkM/scLZ4yUoqeo/s1600-h/Snap1.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SOLhZP_iOPI/AAAAAAAACkM/scLZ4yUoqeo/s320/Snap1.bmp" alt="" id="BLOGGER_PHOTO_ID_5252007939373414642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;STIP有专门用于界面描述的STIPML语言，类似于HTML。Stiplet的结构类似于MVC架构，其中Controller部分控制软件的状态和流程。STIP的事件模型如下图所示：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SOLhFNuiVlI/AAAAAAAACkE/0lH7A2EAsKM/s1600-h/Snap2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SOLhFNuiVlI/AAAAAAAACkE/0lH7A2EAsKM/s320/Snap2.jpg" alt="" id="BLOGGER_PHOTO_ID_5252007595167864402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;具体到项目的开发，虽然也进行总结，但由于保密协议，能贴的只有上面这些。开发中看了Michale和Command他们原来写的代码，学到了很多，也发现了自己太多的不足。很多地方只有靠扎实的基本功和清晰的思路才能完成，这些也只有在做过很多项目，经历了很多成功和失败后才能获得。&lt;br /&gt;&lt;br /&gt;开发过程中我也发现了自己的一些缺点，总结下来由以下几点：&lt;br /&gt;一是团队交流意识的欠缺，虽然在发现问题时能向老员工请教，但交流得还是不够，有些东西靠自己去发现会走很多弯路，费很多时间；在知识学习时尽量自己思考是不错的，但实际工作中有些问题还是要多多交流，对一些概念的理解上不能模糊。&lt;br /&gt;二是基本功不扎实，具体体现在阅读和改写达三四千行的类和较为复杂的算法上。比如状态机和协议的解析，这些都需要有扎实的语言基础和清晰的思路。&lt;br /&gt;三是在和客户沟通上应该及早发现问题，及时主动沟通，有些东西客户的文档里可能没有写，但在实际的情况下是相当重要的需求；有时用户的需求文档也许制作的流程并不规范，存在着一些相互矛盾的地方，这些都是要尤其注意的。&lt;br /&gt;&lt;br /&gt;总得来说在蓝竹的实习学到了很多东西，也发现了自己的一些不足，不仅是在技术方面，也包括做事的态度，方式等等一些地方。谢谢帮助过我的Command、Michale和海啸。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3240426072743441265?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3240426072743441265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3240426072743441265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3240426072743441265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3240426072743441265'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/08/pos.html' title='POS开发'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SOLhZP_iOPI/AAAAAAAACkM/scLZ4yUoqeo/s72-c/Snap1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5604977230802271704</id><published>2008-08-08T20:48:00.002+08:00</published><updated>2008-12-16T22:24:44.026+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>有点困有点欣喜</title><content type='html'>今天就奥运开幕了吧，回去整下电视，不知能不能收到个台先。从500天倒计时到200天到100天，更多的是让人感觉到时间一点一点地流逝。昨天逛了豫园和外滩，虽然经常来上海，可如此通俗的地方却总是没啥心思逛，又一次倚在黄浦江边，突然发现东方明珠肥了好多。。。难道是我长高的缘故？蹉跎哦。&lt;br /&gt;&lt;br /&gt;六月三十号到了上海，七月一号开始上班，一个多月过去。生活改变了很多，难以明述。状态一般，读书不像读书，工作不像工作；将来要做什么，现在在做什么，已经不去思考，跟着惯性这么走啊走，等开学了该会简单些吧。。&lt;br /&gt;&lt;br /&gt;工作依然是coding，和原先的工作比起来省了些上下班时间但每天多出了两餐的花费，不赚不赔，依旧月光。饭卡里还有九天的午餐，工资还是没发。等下下周我就只能每天吃包子打发了，早饭三个小肉包一个菜包。。一块九。。午饭一个肉包一个菜包两个烧卖。。三块一。。再夸几句老板娘看看能不能还到三块。。晚饭。。就吃面吧。。我的生活那！&lt;br /&gt;&lt;br /&gt;还是一小程序员，只是周围的人从八卦女人变成了男性的工程师，三十余岁光景承担着压力和责任的男人，只是男人无聊的时候也会看小说，谈起孩子来也露着笑。傻傻的IT人。&lt;br /&gt;&lt;br /&gt;我的CPA。。。。具体说是八月份已经开始看了。只是昨天没看，前天也没看，前天的昨天和前天的前天也没看。。。OMG。。。搓。哎，看完奥运先！&lt;br /&gt;&lt;br /&gt;奥运能不能提前下班哩，期待ing。&lt;br /&gt;又是周末咯~~~~~~~~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5604977230802271704?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5604977230802271704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5604977230802271704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5604977230802271704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5604977230802271704'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/08/blog-post.html' title='有点困有点欣喜'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3385853588982809918</id><published>2008-06-30T20:46:00.001+08:00</published><updated>2008-12-16T22:24:44.027+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>离校</title><content type='html'>昨天的广州从中午就开始下雨，天气闷热。“是在广州的最后一天了呢。”中午Frienky走了；下午小牛送我到了地铁，挥挥手，消失在了地铁口；吴昊帮我拎了一路的包裹，在体育中心下车了。就剩我一个人了。傻傻地流泪，明明还笑着呢。&lt;br /&gt;&lt;br /&gt;真不知啥时才能回了呢，五年抑或十年？&lt;br /&gt;&lt;br /&gt;上了火车就睡，可能是昨晚通宵了吧，也可能是我根本就不想讲话。到了十点却没有了睡意，就着窗外时时闪过的灯光，和对铺有一搭没一搭地聊着，不知不觉又睡着了。 坐火车的时候只要装着自己晕车，就会很容易睡着的。&lt;br /&gt;&lt;br /&gt;中午到了上海，边发呆边整理学校带回的东西，接着去超市买了些吃的，“基本安顿好了呢。”自言自语。&lt;br /&gt;&lt;br /&gt;下面两个月该是很简单的生活吧，忙碌，然后忘记。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3385853588982809918?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3385853588982809918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3385853588982809918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3385853588982809918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3385853588982809918'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/06/blog-post.html' title='离校'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5758590188333990532</id><published>2008-06-29T13:35:00.002+08:00</published><updated>2008-12-16T22:24:44.028+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>毕业啦</title><content type='html'>四年一梦，终于到了梦醒时分。看着清晰的相片，欢喜的脸庞，突然间却有了恍如隔世的感觉。04双语，直到这会才算凑齐了，团结而优秀，全校最优秀的集体。是它印证了我们的改变。新加坡、美国、中科院、IBM、腾讯、北电、工行、招行、汇丰。。。除却名校就是名企了。只有我孤零零地到了上海，选择了读研，为了一个兴许空幻的目标，真不知是否值得。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/SORdwxjBxEI/AAAAAAAACns/Bmndx3veW1w/s1600-h/DSC03732.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/SORdwxjBxEI/AAAAAAAACns/Bmndx3veW1w/s400/DSC03732.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;801--426。四年的舍友，伴我一生的兄弟。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_afohQU5wMHo/SORdwmlLqII/AAAAAAAACnc/s9I_HgfKOEQ/s1600-h/%E6%AF%95%E4%B8%9A%E7%85%A7+057.jpg"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://4.bp.blogspot.com/_afohQU5wMHo/SORdwmlLqII/AAAAAAAACnc/s9I_HgfKOEQ/s400/%E6%AF%95%E4%B8%9A%E7%85%A7+057.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;北区的校训石，华工原是中大的旧址，博学之、审问之、明辨之、慎思之、笃行之。伟人遗训。两个女孩子是小牛和frienky的舞伴，搬到了北区，正好一聚。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SORdwhORa0I/AAAAAAAACnk/XTgG1hNRlJM/s1600-h/%E6%AF%95%E4%B8%9A%E7%85%A7+115.jpg"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/SORdwhORa0I/AAAAAAAACnk/XTgG1hNRlJM/s400/%E6%AF%95%E4%B8%9A%E7%85%A7+115.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;李元元校长为我颁发学位证书，全校八千余毕业生，学位证书都是李校长亲手发的。毕业前华工又让我们感动了一把。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/SORdw7yJcKI/AAAAAAAACn0/P6hgYRQyehg/s1600-h/IMG_6815.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/SORdw7yJcKI/AAAAAAAACn0/P6hgYRQyehg/s400/IMG_6815.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5758590188333990532?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5758590188333990532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5758590188333990532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5758590188333990532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5758590188333990532'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_6257.html' title='毕业啦'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SORdwxjBxEI/AAAAAAAACns/Bmndx3veW1w/s72-c/DSC03732.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1162209227158667093</id><published>2008-06-22T08:54:00.003+08:00</published><updated>2008-12-16T22:19:15.684+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><title type='text'>毕业设计</title><content type='html'>一个月前离职返校，折腾了这么些日子，总算把毕业设计给鼓捣出来了。题目是《主题爬虫在WEB新闻聚合中的运用》，导师是沃焱老师。谢谢老师的信任，让我能结束了上海的实习再回广州完成毕设，不然两头奔波的日子是难以想象的。&lt;br /&gt;&lt;br /&gt;整个一个月，我都窝在宿舍，除去做毕设，就是闲极无聊地打游戏。大学的最后一个月，过得着实不咋样。说是做毕业设计，其实和文科写论文没啥两样，由于时间有些紧，基本是边写论文边做毕设，说个好听点是文档先行，说个不好听点就是能不能鼓捣出这软件心里还没啥底。&lt;br /&gt;&lt;br /&gt;论文排版话了一半的时间，用Latex，在清华的学位论文模板上进行了些修改，然后用了listing、beamer之类的宏包；总得来看效果还是可以的。只是写论文的过程中没有找到得心应手的工具，先是用CTEX集成的写作环境，之后又换了叫SciTE的编辑器，最后使用了Eclipse+Texlipse，用得还算顺手。之后还尝试了下在Linux下用Emacs写latex。只是原来写好的论文编译时出现了乱码，只得作罢。&lt;br /&gt;&lt;br /&gt;总得来讲，一旦熟悉了几个基本的宏包，使用latex排论文、简历之类的东西能大大提高生产率。并能轻易获得专业的外观。后来估计也是因为这个原因，鼓捣出来的80p的论文评了优，还是有些得意的。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;下面摘抄了些开题报告的内容：&lt;/span&gt;&lt;br /&gt;当今网络信息资源急剧增长，面对这个海量、异构、半结构化的信息库时，人们常常会面临“信息过载、知识匮乏”的困窘，为了避免这种情况，我们需要以合适的方式对Web资源进行检索和呈现。Web知识发现是是几年内兴起的一个被广泛关注的研究课题。它是从Web数据中发现有用的知识和模式的过程，而如何高效地获取相应主题的信息也就成了Web知识发现至关重要的一步。&lt;br /&gt;&lt;br /&gt;在寻找相关主题的页面时使用主题网络爬虫可以根据一定的网页分析算法过滤与主题无关的链接，可以提高抓取的准确性并减少计算资源的浪费。同样，随着网络信息的增长，人们为了及时方便地得到所关心的信息，希望从被动的上网查看新闻更新转变为主动地接收新闻信息。新闻聚合应运而生，而Atom和RSS是新闻聚合最流行的实现方式。&lt;br /&gt;&lt;br /&gt;鉴于以上原因，我打算结合网络爬虫的主动搜索和新闻聚合的推送模式开发X-Info软件，首先利用主题爬虫定期从网络上收集新出现的相关主题的新闻网页，将其内容经过分析整理，构成按时间及主题相关度组织的新闻序列。同时对页面信息进行分析整理，得出可供统计的有用数据，并且提取出其中的部分信息生成符合RSS规范的聚合文件，让相关主题最新信息可以在普通的RSS阅读器中使用。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1162209227158667093?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1162209227158667093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1162209227158667093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1162209227158667093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1162209227158667093'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/06/blog-post_22.html' title='毕业设计'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5947865065265096238</id><published>2008-06-20T13:25:00.001+08:00</published><updated>2008-12-16T22:18:46.993+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>肇庆</title><content type='html'>Hank请客，我们宿舍四在大学毕业前到肇庆着实潇洒了一回，包吃包住包玩，临走还拿了方端砚；出去玩从没这么爽过，感激涕零。&lt;br /&gt;&lt;br /&gt;肇庆的鼎湖山，被誉为北回归线上的明珠。记得96年的时候还发过一套鼎湖山的邮票，由于那时集邮，也是有些印象的。有鼎有湖，所谓鼎湖。这张是在鼎园里拍的，那些鼎都不过是当代的仿品，没留下多深的印象，可石栏上的三朵花儿，不知是天意还是人力，错落有致地散着，很有些飘然人世的味道。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/SORbPrQIK5I/AAAAAAAACm0/t1EoJOr0Fgc/s1600-h/100_3710.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://1.bp.blogspot.com/_afohQU5wMHo/SORbPrQIK5I/AAAAAAAACm0/t1EoJOr0Fgc/s400/100_3710.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;鼎湖山的游船码头，恍如仙境。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/SORbP80rmOI/AAAAAAAACm8/dvgVaFOfgIk/s1600-h/100_3713.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://1.bp.blogspot.com/_afohQU5wMHo/SORbP80rmOI/AAAAAAAACm8/dvgVaFOfgIk/s400/100_3713.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;肇庆市区的七星岩，那天天阴，再加之相机实在太傻瓜，拍了很多张都没啥效果，真实的风景是相当干净的。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SORbPxFc5hI/AAAAAAAACnE/C5neXI0mHdQ/s1600-h/100_3792.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/SORbPxFc5hI/AAAAAAAACnE/C5neXI0mHdQ/s400/100_3792.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;七星岩的鱼儿，只要看到人影就涌来争食。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SORbPzjchwI/AAAAAAAACnM/XMgDxva_RDA/s1600-h/100_3795.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/SORbPzjchwI/AAAAAAAACnM/XMgDxva_RDA/s400/100_3795.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;还是我们宿舍的四个。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SORbiomF0vI/AAAAAAAACnU/uEqVujcaPg4/s1600-h/%E6%AF%95%E4%B8%9A%E7%85%A7+079.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5252423715991704306" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/SORbiomF0vI/AAAAAAAACnU/uEqVujcaPg4/s400/%E6%AF%95%E4%B8%9A%E7%85%A7+079.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5947865065265096238?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5947865065265096238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5947865065265096238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5947865065265096238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5947865065265096238'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_6947.html' title='肇庆'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_afohQU5wMHo/SORbPrQIK5I/AAAAAAAACm0/t1EoJOr0Fgc/s72-c/100_3710.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-4872013200792826274</id><published>2008-05-11T10:56:00.005+08:00</published><updated>2008-12-16T22:19:15.685+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><title type='text'>GSMC&amp;Struts</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_afohQU5wMHo/SPC818Rf1QI/AAAAAAAACvg/9ZqMHfMk4pM/s1600-h/GSMC.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 248px; height: 272px;" src="http://1.bp.blogspot.com/_afohQU5wMHo/SPC818Rf1QI/AAAAAAAACvg/9ZqMHfMk4pM/s400/GSMC.JPG" alt="" id="BLOGGER_PHOTO_ID_5255908400039974146" border="0" /&gt;&lt;/a&gt;从三月十号到现在，我在张江高科的&lt;a href="http://www.gracesemi.com/enhtml/index.jsp"&gt;GSMC&lt;/a&gt;（Grace Simiconductor Manufacturing Company）做软件工程师，分在系统咨询部的SCM组。两个月里为已有的系统增加了两个子模块，一是订单组合查询，二是查询定制。使用JSP开发，用到了Struts、XML；此外，由于系统使用了iBATIS，对它也进行了一些学习。开发过程中使用了Eclipse和一些数据库操作软件。由于涉及比较复杂的SQL查询，这方面的基本功也有了较大的提高。&lt;br /&gt;&lt;br /&gt;开发过程中我也发现了自己的一些缺点，总得来讲有点工具崇拜，比如新版本的开发工具等等。实际上费了很多时间精力，对生产率基本没有提高，开发靠的还是基本功。&lt;br /&gt;&lt;br /&gt;GSMC的气氛很好，没有太大项目的压力，员工也都爱玩，再加上不错的伙食和点心，工作得还是蛮开心的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-4872013200792826274?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/4872013200792826274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=4872013200792826274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4872013200792826274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4872013200792826274'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/05/gsmc.html' title='GSMC&amp;Struts'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_afohQU5wMHo/SPC818Rf1QI/AAAAAAAACvg/9ZqMHfMk4pM/s72-c/GSMC.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-6443821904124106159</id><published>2008-05-08T20:46:00.001+08:00</published><updated>2008-12-16T22:24:44.030+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>违约，返校</title><content type='html'>下午交完三千违约金，下班，聚餐，买好了十号的车票，回到住的地方已是八点多。&lt;br /&gt;&lt;br /&gt;在宏力的实习结束了，算是一个插曲吧～～遇到了很多挺有意思的人，舒舒服服地过了两个月，除了交违约金的时候有点不爽，其余时候还是蛮开心的。我们MIS部十几号人，除了老板Robot、比我早一年多的Andy和我，其他清一色的都是大姐姐，全是可爱而八卦的人。相处下来，感受到他们的心态真是好年轻哦；这么着，也就觉得我活得有些累了，老是想什么目标，老是看书考证；这个不知不觉，大学都毕业了，玩没玩够，学也没学好；嘿嘿，真不知自己图的啥哦。我们小组五个人，Ellen，minmin和Jenny三个大姐姐，Andy比我早一年，所以他就成了小弟，我就成了小小弟。Ellen是我们老大，蛮干练的感觉，蛮好的人，公司刚成立的时候就进来了；Minmin也是老员工了，每天上班第一件事就是在她那一年多没换水积满了粪便长满了水草的的虾缸里捞螺蛳，说是要给小虾创造一个良好的生存环境，那些小虾也果然不负所望，健康成长还繁衍生息；Jenny是个两岁孩子的妈，不知不觉就说到孩子上去了，养了两缸的小鱼；Andy是个有趣的神叨叨的人，迷信的说起来是一套又一套，和看多了鬼故事的Minmin和Jenny一唱一和，蛮是好玩。我呢，我是个啥都不懂的人，坐着听讲，傻兮兮地笑。。&lt;br /&gt;&lt;br /&gt;感觉这两个月编程上进步还是比较大的，维护的是零三年左右开发的古老系统，基于struts，编码和测试的时候都遇到了一些困难，坚持做下来，web开发的各个方面都有些接触；系统又旧又大，折折腾腾，边看边写，也是学到了很多东西，不过对将来有没有用就难讲了。&lt;br /&gt;&lt;br /&gt;明天去办最后的一些手续，下午再去面试一个暑期实习。现在我真的不知道将来做些什么，甚至也不知道自己想要什么；虽有个大概的方向，却也不知道怎么走，计算机转统计，就数据挖掘这路，不过数学和算法都没学好，一两年读完研也怕是不伦不类。管他呢，从小到大我就没顺过，不过磕磕碰碰总能过去。&lt;br /&gt;&lt;br /&gt;现在最重要的是开心，然后放松，然后回广州大啃水果。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-6443821904124106159?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/6443821904124106159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=6443821904124106159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6443821904124106159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/6443821904124106159'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/05/blog-post.html' title='违约，返校'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1048421398776573623</id><published>2008-04-18T20:44:00.002+08:00</published><updated>2008-12-16T22:24:44.031+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>08.4.18</title><content type='html'>转眼到上海已经两个月了，烦心的事纷至沓来，又件件归于平淡。一月二十乱七八糟考完研，看着几十本的考研书，失落，拐了一个大弯又走回了原来的路，只是和别人的差距一下变得好大。重头开始看ｊａｖａ、看数据库，海投简历，一下子落下好多，不安。过了年收到了几家面试通知就匆匆到了上海。三月一日宏力给了offer，赶回广州办三方协议，三月十日开始工作。十二日，谈了一年零一月的恋爱结束。痛。那时算是最低谷了吧，奋斗了大半年，又错过了年前的好工作，形单影只，一无所有。忐忑不安得等待考研的分数线。一个月想了好多，也现实好多。一个都市的外乡人，可怜的工资，狭小的圈子，谈什么发展。说是要打拼又谈何容易。工作上也越到了问题，计算机毕业生连个JSP都不会写，惭愧。还好Andy和Minmin都给了我很多帮助，主管也从不催我。一个月下来，感觉进步很大。四月三日知道了分数线，刚好过线，全力准备。又开始头痛。十四十五请了两天假参加复试。笔试基本不会。又开始了等待。今天下午知道的结果，录取了，不过是自费。去上财看过了，学校很小，不过看着蛮舒服。读研一定要有个规划了，经济上也要自立。新的奋斗！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1048421398776573623?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1048421398776573623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1048421398776573623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1048421398776573623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1048421398776573623'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/04/08418.html' title='08.4.18'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5807281733102074876</id><published>2008-03-18T20:42:00.002+08:00</published><updated>2008-12-16T22:24:44.033+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>08.3.18</title><content type='html'>在上海的一天。上午coding，下午和同事去SEMICOM展会骗了些小礼品；然后逛了迪卡侬和百安居，啥都没买，坐地铁回家。简单的一天。等车的时候，感觉着列车开来驶去的风儿，有点莫名地惆怅。我为什么不快乐。忽然间想到了一个无聊的问题，一个人傻笑。&lt;br /&gt;&lt;br /&gt;到上海正好一个月，找工，回广州拿协议，开始实习。。这个月发生了很多事，喜怒哀乐搅在了一起，又渐渐地归于平淡。工作慢慢慢慢地进入正轨了吧，GSMC是一个让人感觉蛮舒服的地方，整天被人小小弟、小孩这么得叫着；发呆就看看同事养的小鱼和小小鱼，小虾和小小虾；呵呵，蛮有意思。&lt;br /&gt;&lt;br /&gt;生活也渐渐习惯，其实是没有生活的生活，七点零五分，地铁---“张江高科站到了，请乘客们带好自己的行李物品，依次。。。。”，上公司班车，早饭，工作到十二点，午饭，工作，晚饭，班车，地铁--“中山公园站到了，请乘客们。。。”--六点四十五分。&lt;br /&gt;&lt;br /&gt;好在我在意的东西不多，一个人过更是平淡，不看电视，不打游戏，偶尔去下超市、网上买些书，聊聊天，仅此而已。早上路边花五块钱买了两瓶莲花状的盆栽，把花盆擦干净，搁办公桌上，又多了两个伴儿，呵呵。我在意啥呢？自己问自己，暖色灯光，洁白的A4纸，粗粗的铅笔，绿茶咖啡，洗澡刷牙，让人舒服的细节。简单的生活，不开心，穷开心。&lt;br /&gt;&lt;br /&gt;上财的分数线还没出来，不是高三分就是低两分吧，看人品，不过也无所谓了。过去的一年是人生的一段插曲，不管意义如何，我都会记住。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5807281733102074876?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5807281733102074876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5807281733102074876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5807281733102074876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5807281733102074876'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/03/08318.html' title='08.3.18'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3481317531426441631</id><published>2008-03-12T13:02:00.004+08:00</published><updated>2008-12-16T22:18:46.994+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>上海植物园</title><content type='html'>牡丹花开。&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_afohQU5wMHo/SORWCykm88I/AAAAAAAACl8/sLTC6TBqgGc/s1600-h/100_3311.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://4.bp.blogspot.com/_afohQU5wMHo/SORWCykm88I/AAAAAAAACl8/sLTC6TBqgGc/s400/100_3311.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;静寂的院落，很有些苏杭小院，闹中取静的味道。&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/SORWDAl0NWI/AAAAAAAACmE/mjSOTDh0o0c/s1600-h/100_3360.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/SORWDAl0NWI/AAAAAAAACmE/mjSOTDh0o0c/s400/100_3360.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;在十年前，我也在这假山前留过影，如今故地重游，人还是一脸傻笑。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/SORWDK0SGRI/AAAAAAAACmM/bD0QZKVffc4/s1600-h/100_3408.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://1.bp.blogspot.com/_afohQU5wMHo/SORWDK0SGRI/AAAAAAAACmM/bD0QZKVffc4/s400/100_3408.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;绣球花&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SORWDMw7RTI/AAAAAAAACmU/Ou814gY7PVI/s1600-h/100_3382.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/SORWDMw7RTI/AAAAAAAACmU/Ou814gY7PVI/s400/100_3382.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3481317531426441631?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3481317531426441631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3481317531426441631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3481317531426441631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3481317531426441631'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/10/blog-post_6232.html' title='上海植物园'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_afohQU5wMHo/SORWCykm88I/AAAAAAAACl8/sLTC6TBqgGc/s72-c/100_3311.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7207247283043842008</id><published>2008-02-17T10:45:00.000+08:00</published><updated>2008-12-17T10:48:22.862+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>Shanghai!!!FFFFFFighting!!!</title><content type='html'>&lt;div id="blogContent" class="text-article"&gt;                                          &lt;p&gt;上海，一个比广州更大、更挤的城市。&lt;/p&gt;&lt;p&gt;下个月该在不停地面试和奔波中度过吧。再下个月就该安定下来了。&lt;/p&gt;&lt;p&gt;这么一走出去，就再不是学生；回头看看，嘿，我的大学，8！上路！&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;磋了一年，i'm back，开心地，杀！&lt;/p&gt;&lt;p&gt;Holily sh*t!!!&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;兄弟姐妹们，加油啊！&lt;/p&gt;&lt;p&gt;新年快乐！&lt;/p&gt;                 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7207247283043842008?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7207247283043842008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7207247283043842008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7207247283043842008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7207247283043842008'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/12/shanghaiffffffighting.html' title='Shanghai!!!FFFFFFighting!!!'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-5388288632829691979</id><published>2008-01-28T22:02:00.003+08:00</published><updated>2008-12-16T22:24:44.035+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='烹饪'/><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>鱼丸++</title><content type='html'>今天做鱼丸了，从六点半到八点半共花了两个多小时，基本照着网上的说明做的，基本算成功。虽然有点累，不过蛮有成就感哦，比我老爸做的好吃呢！&lt;br /&gt;&lt;br /&gt;第一步是去皮，把刀竖着切下，但不要切透鱼皮，然后贴着皮行刀，把肉分开。这是我爸教的，要想直接削皮是挺难的。&lt;br /&gt;第二步是刮肉，我的理解就是把鱼骨鱼肉分开，先用刀背把肉打松了再刮，用刀锋的话会把鱼骨搞断，去起来麻烦。&lt;br /&gt;第三步是剁泥，网上有的说要用刀背剁，试着觉得斩不透，还是用刀锋剁的，剁成泥状，有点粘刀。时不时用手拌下，有剩下的鱼刺筋络顺手去掉。&lt;br /&gt;第四步就是搅拌了，先把盐、姜粉、料酒和水调和，今天我鱼和水差不多是一比一的比例，很嫩，但韧性不大足。不知道是打得不透还是水放多了的缘故。先打个蛋清，然后加水顺一个方向搅匀，觉得上劲了再些加水打。最后加一勺淀粉增加点粘度使之容易成形。&lt;br /&gt;第五步挤丸和第六步水煮和下面的说明都一样了。我这次挤出的鱼丸放水里是浮的，而且一点都不相互粘连。&lt;br /&gt;&lt;br /&gt;关键所在是去骨剁泥和搅拌，挺花时间。有人也说要加肥肉，加这个那个的，我觉得都不是关键，关键是要舍得花功夫。我们有时候太注重方法了，认为事情没有做好是方法不对，其实很多情况下是功夫没有下足。就像学英语，方法就一个字，背。&lt;br /&gt;&lt;br /&gt;总之，我们要做好鱼丸一定要做到调制鱼茸六不伤、六不缺（水、盐、油、蛋、粉、味）；搅打好的鱼糁色白、滋润、细嫩、光滑、无杂质；氽煮时掌握好火候，就一定能做出高质量的鱼丸来&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-5388288632829691979?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/5388288632829691979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=5388288632829691979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5388288632829691979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/5388288632829691979'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/01/blog-post_28.html' title='鱼丸++'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3342698618405892553</id><published>2008-01-27T21:58:00.003+08:00</published><updated>2008-12-16T22:24:44.037+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>踏雪</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_afohQU5wMHo/SORNrnZGD9I/AAAAAAAACkU/WdQZmUuZtx0/s1600-h/100_3121.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_afohQU5wMHo/SORNrnZGD9I/AAAAAAAACkU/WdQZmUuZtx0/s320/100_3121.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5252408477124792274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_afohQU5wMHo/SORNruQRjsI/AAAAAAAACkc/LsHkCO2UJcY/s1600-h/100_3135.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_afohQU5wMHo/SORNruQRjsI/AAAAAAAACkc/LsHkCO2UJcY/s320/100_3135.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5252408478966845122" /&gt;&lt;/a&gt;&lt;br /&gt;好久没见过这么大的雪了。&lt;br /&gt;&lt;br /&gt;下午带着相机出去拍些雪景。还是前年夏天了，那时老带着相机出去拍拍风景，一人五点多就起了，骑车到森林公园，宜园，拍完一圈回家吃早饭。那时蛮自在的，不过今天走出来总觉得有些冷清的。心境不同了吧。有人在堆雪人，我看看，走过。&lt;br /&gt;&lt;br /&gt;绵绵的雪，踏着和昨天的触感明显不同，雪薄薄的时候踏着比较结实硬朗，厚厚的就松绵绵的了。踩着不着力。分析了下，可能是刚下的时候雪落在地表上，边化边结，比较密实。后来下的呢，直接堆雪上，一点没化自然就松了。呵呵，学工科的，就是没情调。&lt;br /&gt;&lt;br /&gt;拍了十来张吧，雪地里挺亮的，也拍不出啥质感，就是白白的一片。走到水杉林里，好美，完完整整的雪，不忍心踏。时不时积在树梢的雪唰地落下，打在绵绵的雪地里，一片静寂。打开相机，没电。懊恼。前面平常的风景拍了十来张，到真正美的地方却拍不了。发了会呆。继续走。除了白，只有墨绿，深褐。如果能发现一点红色，该会很惊喜吧，环顾，还是一片洁白。&lt;br /&gt;&lt;br /&gt;雪，不像雨那般粘粘的让人不舒服，蛮大气。况且雪和血同音，白与红，冷与热，多美的巧合。步步谨慎，还是滑了下，一点都不疼。爬起来，看看印在雪地的人形，嘻嘻，蛮有意思。回家。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3342698618405892553?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3342698618405892553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3342698618405892553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3342698618405892553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3342698618405892553'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/01/blog-post.html' title='踏雪'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SORNrnZGD9I/AAAAAAAACkU/WdQZmUuZtx0/s72-c/100_3121.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3986319729260957689</id><published>2008-01-21T22:00:00.001+08:00</published><updated>2008-12-16T22:20:29.934+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>The C Puzzle Book （C语言解惑）读书笔记</title><content type='html'>每年在火车回家坐火车都是一种折磨，不过这次运气不错，一来认识了两个聊得来的朋友，二来带了一本《The C Puzzle Book》，翻翻看看，隔了一年多没碰C，有些问题是实实在在地不会，有些问题是自己粗心得挺搞笑。&lt;br /&gt;&lt;br /&gt;Chapter 1 操作符&lt;br /&gt;a. z+=-x ++ + ++y  ==&gt;  z+=-(x++) + (++y)&lt;br /&gt;but, x+++++y ==&gt; x++ ++ +y 无意义&lt;br /&gt;b．~01 == 1…10 != 10  ^_^&lt;br /&gt;c. ~x|x == 111.. 1 恒等于 -1&lt;br /&gt;d．y = -8; y &gt;&gt;= 3 y并不一定为-1，有些计算机右移时不保留操作数的符号位&lt;br /&gt;e. z += x&lt;y ? x++ : y++  ==&gt; z+= (x&lt;y ? x++, y++)&lt;br /&gt;f. z&gt;=y&gt;=z ^_^&lt;br /&gt;简简单单的符号优先级问题本来以为背熟了表就差不多，可还是错了上面几个，蛮郁闷。&lt;br /&gt;&lt;br /&gt;Chapter2 基本类型&lt;br /&gt;a. define PRINT(format,x) Printf(#x " = %" #format "\n", x)&lt;br /&gt;   PRINT (d,"5") ?&lt;br /&gt;   显然打印的是指针地址，不过刚看时笨得没发现&lt;br /&gt;   int x= -2, unsigned int ux = -2 PRINT(o,x) PRINT(o,ux) ?&lt;br /&gt;   无论带符号还是无符号，-2都是那串01&lt;br /&gt;b. 3.(注意后面那个.) …………&lt;br /&gt;c. c语言中，即使运算发生了溢出，结果仍将是合法的数值。&lt;br /&gt;主要是向上向下转型的问题，结合运算符优先级，挺容易搞混的。细节，细节！   &lt;br /&gt;&lt;br /&gt;Chapter3 头文件&lt;br /&gt;#define PR (fmt, val) printf(#val " = %" #fmt "\t", (val))&lt;br /&gt;#define NL putchat('\n')&lt;br /&gt;#define PRINT1 (f,x1) PR(f,x1), NL&lt;br /&gt;#define PEINR2 (f,x1,x2) PR(f,x1), PRINT1(f,x2), NL&lt;br /&gt;... ...&lt;br /&gt;一层一层往下套吧。。&lt;br /&gt;&lt;br /&gt;Chapter4 控制流&lt;br /&gt;a.if也能短路的哦&lt;br /&gt;b.if( x=y ); x=3 看见那个分号了没？呵呵&lt;br /&gt;c.while( y&lt;10 ){x=y++; z=++y;} y++了两次哦，大意大意。&lt;br /&gt;&lt;br /&gt;Chapter5 编程风格&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3986319729260957689?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3986319729260957689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3986319729260957689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3986319729260957689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3986319729260957689'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/01/c-puzzle-book-c.html' title='The C Puzzle Book （C语言解惑）读书笔记'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-623853710023539848</id><published>2008-01-21T10:44:00.000+08:00</published><updated>2008-12-17T10:44:36.869+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>半年黑白</title><content type='html'>&lt;div id="blogContent" class="text-article"&gt;                                          &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;半年，不快不慢地过去了。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;走出考场，木木的，说不上啥感觉。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;反正是考得不好。想打电话，试了一个电话机，坏了；又试了一个，也坏了。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;回宿舍，泡面，开机。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family:Calibri;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;找工，大概花了八个钟，中英文简历都搞好了。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;态度决定一切。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;踏踏实实找工，就像我考研前想的那样，技术上虽然荒废了大半年，但精神上，已够韧了。考研不管结果如何，认了，不会去试第二次。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family:Calibri;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;认真做技术，认真找工，认真待人，认真待己。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;我没有败，也不会败。拐了个弯，又到了原来的路上。&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;我还是我，只是更看清了自己。必须要踏实，踏实！&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family:Calibri;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;目标：每天锻炼，每天学习，每周写周记，看书做笔记。&lt;/p&gt;                 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-623853710023539848?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/623853710023539848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=623853710023539848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/623853710023539848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/623853710023539848'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2008/01/blog-post_21.html' title='半年黑白'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3230132544233684768</id><published>2007-08-13T08:01:00.001+08:00</published><updated>2008-12-16T22:18:46.996+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='照片'/><title type='text'>南京之行</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/Rr-fdBkQdsI/AAAAAAAAAzY/y46uriFwSuo/s1600-h/100_2831.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/Rr-fdBkQdsI/AAAAAAAAAzY/y46uriFwSuo/s400/100_2831.JPG" border="0" /&gt;&lt;/a&gt; &lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/Rr-feBkQdtI/AAAAAAAAAzg/4qUc9Eyhkvs/s1600-h/100_2915.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/Rr-feBkQdtI/AAAAAAAAAzg/4qUc9Eyhkvs/s400/100_2915.JPG" border="0" /&gt;&lt;/a&gt; &lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/Rr-ffRkQduI/AAAAAAAAAzo/IC91RGMCZnw/s1600-h/100_2889.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/Rr-ffRkQduI/AAAAAAAAAzo/IC91RGMCZnw/s400/100_2889.JPG" border="0" /&gt;&lt;/a&gt; &lt;a href="http://1.bp.blogspot.com/_afohQU5wMHo/Rr-fgxkQdvI/AAAAAAAAAzw/ZtZrIbT2h50/s1600-h/100_2847.JPG"&gt;&lt;/a&gt;&lt;br /&gt;总得来说，南京还是个不错的地方。历史感很强，但过于压抑，承载了太多的沧桑。&lt;br /&gt;可能也是这个原因，南京更显出了一种久经沧桑后的平淡。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-3230132544233684768?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/3230132544233684768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=3230132544233684768' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3230132544233684768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/3230132544233684768'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/08/blog-post.html' title='南京之行'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_afohQU5wMHo/Rr-fdBkQdsI/AAAAAAAAAzY/y46uriFwSuo/s72-c/100_2831.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-721655250868294489</id><published>2007-07-19T08:34:00.001+08:00</published><updated>2008-12-16T22:24:44.040+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>考研</title><content type='html'>开始准备考研了，蒸发一段时间。&lt;br /&gt;选择考研对我而言机会成本高了些，不算是理智行为。特别又跨专业挤了个大热门--金融工程，风险太大，收益又不大确定，准备得也晚了些。&lt;br /&gt;计算机我也很喜欢，但我不是一个努力的人，没啥钻研的决心，在一个领域呆久了滋长的只是惰性。就算我本科就读的金融，到现在还是会转专业的。&lt;br /&gt;文科比较浮躁，我是个浮躁的人，所以想学下文科体验生活。我算不上是个风险厌恶的人，觉得风险犹如生活的调剂，生活中的选择就像是投骰子，我有时像一个纯粹的赌徒。&lt;br /&gt;一月前差不多还在编程、赶作业、准备考试，现在却彻彻底底地把计算机扔了，扔得毫不心疼。因为计算机已经给了我很多，至少它可以让我放心地全力以赴地做出高风险的决定，选个不错的金融专业，如果失败，继续做计算机至少还能生活下去。我不会进行第二次尝试。&lt;br /&gt;没有什么能算是毕生的事业，人只能选择当前看似比较好走，有趣的路。因为没有地图，你不会知道这条或那天路通往何处，所以永远不可能有最佳选择，即使走的是最佳的路径，你也无法确认它的确是最佳的。&lt;br /&gt;一连串偶然事件使我觉得考研是老天的安排，很多细微的因素似乎在暗暗驱使我向着一个目的地前行。成功也好，失败也罢，听天由命，生活指引着我走上了考研的路，结果也已经注定，现在要做的不过是去发现这个结果。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-721655250868294489?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/721655250868294489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=721655250868294489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/721655250868294489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/721655250868294489'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/08/blog-post_13.html' title='考研'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2967571055271727204</id><published>2007-06-07T14:19:00.008+08:00</published><updated>2008-12-16T22:21:58.966+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><title type='text'>基于socket的简单语音聊天软件</title><content type='html'>基于socket的简单语音聊天软件是分布式的作业之一。下文摘抄了概要设计和详细设计的开头部分。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;背景&lt;/strong&gt;&lt;br /&gt;&lt;a name="_Toc521466901"&gt;软件名称：&lt;/a&gt;Xchat&lt;br /&gt;开发者：04 双语 许一尊 200433099266&lt;br /&gt;开发平台：JDK 1.5 + Eclipse3.3M6&lt;br /&gt;本软件只采用了基本的Java sound API，即javax.sound中的内容，没有使用JMF和开源代码。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;参考资料&lt;/strong&gt;&lt;br /&gt;《分布式计算原理与应用》&lt;br /&gt;Java API&lt;br /&gt;Java Sound Resources &lt;a href="http://www.jsresources.org/apps/am.html"&gt;http://www.jsresources.org/apps/am.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;需求&lt;/strong&gt;&lt;br /&gt;1. 基于基本的Client/Server模式，实现一个text画板，提供一个多人的chat空间。在此模式下，每个人发出的message都通过server的中心控制，由server组播（multicast）给一个chat组的其他会话人。&lt;br /&gt;2. 语音的录取、打包、传输、播放，从而将text chat空间变成了voice chat空间。&lt;br /&gt;3. 通过server的中心控制实现会话的记录和交互式回放。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;设计思路&lt;br /&gt;&lt;/strong&gt;客户端设计参考MVC模式，由一个核心控制模块处理语音发送接收、聊天信息和控制信号的发送接收、音频点播及界面的显示更新。&lt;br /&gt;&lt;em&gt;文本消息和控制信息合二为一，格式为：用户名&gt;&gt;&gt;命令&gt;&gt;&gt;参数&lt;/em&gt;&lt;br /&gt;语聊信号通过建立音频管线截取语音包，直接广播到所以客户端，由客户端各自播放。客户端接收到控制信息时，提取出其中的用户名、命令和参数，如果该命令针对所有客户端，则执行该命令；如该命令针对特定用户，只有当用户检测到控制信息中的用户名项为其自身时才发生相应。&lt;br /&gt;音频点播实现是由客户端通过有连接socket发送请求，服务器受到后发送确认信号，将文件以流的方式发送至客户端播放。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;特殊性说明&lt;/strong&gt;&lt;br /&gt;由于只使用基本Java sound API，Java音频的一下局限性觉得了本系统一些特殊的设计：&lt;br /&gt;&lt;strong&gt;首先&lt;/strong&gt;，java平台的音频播放性能有限，当一次写入的数据过小是，声音容易出现断续的现象，而一次截取的包过大时，又会导致较大的延时。所以，&lt;em&gt;必须在音频质量和声音延时上做出选择&lt;/em&gt;。最终的权衡结果是以1/4秒为单位截取声音，总的延时为0.5秒+网络延时，在局域网中，网络延时可以忽略不计，所以总的延时在0.5秒左右，可以接受。&lt;br /&gt;&lt;strong&gt;其次&lt;/strong&gt;，Java音频由于其性能问题，不能提供良好的混音效果，&lt;em&gt;所以如两人同时发言，接收到声音的断续现象较为严重，如果多人同时发言，网络条件下4个音源的混音效果根本不能接受&lt;/em&gt;，所以本软件设定同一时间只能由一人发言，由一系列控制信号来达到所以客户端的同步。&lt;br /&gt;&lt;strong&gt;其三&lt;/strong&gt;，java保存音频文件方法较为单一，虽然可以通过InputStream保存成音频文件，但要预先制定音频文件的大小，这显然是不可实现的；所以唯一的办法就是在音频采集是直接保存成音频文件，在一次发言结束后上传到服务器，由于java本身没有音频合并的方法，所以音频文件的保存是以发言为单位的，点播时自然也只能以发言为单位。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;系统结构&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;客户端&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_afohQU5wMHo/SORry65dawI/AAAAAAAACp8/qjN8pYFnDPI/s1600-h/Snap1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5252441587968731906" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://3.bp.blogspot.com/_afohQU5wMHo/SORry65dawI/AAAAAAAACp8/qjN8pYFnDPI/s400/Snap1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;客户端设计参考MVC模式，由一个核心控制模块处理语音发送接收、聊天信息和控制信号的发送接收、音频点播及界面的显示更新。&lt;br /&gt;&lt;br /&gt;&lt;em&gt;服务器端&lt;/em&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_afohQU5wMHo/SORqqybS6TI/AAAAAAAACp0/nH9U-tVYIxY/s1600-h/Snap2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5252440348744149298" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://4.bp.blogspot.com/_afohQU5wMHo/SORqqybS6TI/AAAAAAAACp0/nH9U-tVYIxY/s400/Snap2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;服务器端以一个控制中心为核心，处理客户端传来的消息和控制信号，执行相应操作并返回控制信号。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;类图&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;客户端&lt;/em&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_afohQU5wMHo/SORs81mABoI/AAAAAAAACqE/N8BDAA9A4a0/s1600-h/Snap3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5252442857855256194" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://2.bp.blogspot.com/_afohQU5wMHo/SORs81mABoI/AAAAAAAACqE/N8BDAA9A4a0/s400/Snap3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;a. 客户端以ClientAction为中心，该类处理界面相应并调用相应模块。由于ClientFram（界面类）的类中元素过于繁杂，在此图中已删除此类。&lt;br /&gt;b. SocketMessageManager是文本消息处理的中心，建立messageSendThread和PacketReceivingThread处理消息包的发送和接收，受到消息包并提取其中信息后，将其交与ClientAction处理。&lt;br /&gt;c. SoundCapture处理音频的截取和广播；SoundPlayer负责接收音频包并播放。&lt;br /&gt;d. SoundRecoder负责讲语音保存在临时文件中，SoundSendThread负责发送该音频文件。&lt;br /&gt;e. SoundRequestHelper与SoundRequest负责音频点播。&lt;br /&gt;&lt;br /&gt;&lt;em&gt;服务器端&lt;/em&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_afohQU5wMHo/SORtTF-JN9I/AAAAAAAACqM/YjLdwsto5dQ/s1600-h/Snap4.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5252443240208611282" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://4.bp.blogspot.com/_afohQU5wMHo/SORtTF-JN9I/AAAAAAAACqM/YjLdwsto5dQ/s400/Snap4.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;a．服务器端以ChatServer为中心，处理客户端传来的消息和控制信号，并执行相应操作。&lt;br /&gt;b．MessageServerThread负责调用RecervingThread，RecervingThread接收文本消息包并分离出其中的控制信号，交由ChatServer处理。&lt;br /&gt;c．MulticastSendingThread负责相客户端广播聊天消息和控制信号。&lt;br /&gt;d．SoundSaveServerThread负责处理客户端的保存聊天音频文件的请求，建立AudioSaveThread保存文件。&lt;br /&gt;e．SoundRequestServerThread负责监听客户端的聊天记录点播请求，受到请求后，新建AudioPlayThread处理相应请求。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2967571055271727204?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2967571055271727204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2967571055271727204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2967571055271727204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2967571055271727204'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/06/socket.html' title='基于socket的简单语音聊天软件'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_afohQU5wMHo/SORry65dawI/AAAAAAAACp8/qjN8pYFnDPI/s72-c/Snap1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-7816067374670816084</id><published>2007-03-31T08:32:00.001+08:00</published><updated>2008-12-16T22:24:44.042+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>清明</title><content type='html'>今天党团活动去了黄花岗。很多墓碑，有无名无姓的烈士也有声势显赫的将军，他们都长眠于此。公园绿草茵茵，很多老年人舞着扇子，小孩嬉笑，很和谐。烈士们想看到的也许就是这场景吧。&lt;br /&gt;民国时期的建筑，朴素，并不高大，但在肃穆中透着大气。看看中山纪念堂，中山陵，也都是这感觉。再看看各地的大学，也是喜欢年代旧些的建筑。觉得新的一些大楼，虽然精巧，却流于浮华。再过个一百年，那些新建的大楼也应该陈旧了吧，那时他们剩下的，也许只有陈旧和年代，而没有历史和沧桑。国家还没有真正富强，年青一代需要努力。社会风气浮华，有些人只追求着感官的快乐或沉溺与小资情怀；不该这样的，我今年已大三，可还常常浪费时间。虽然个人是卑微的，多一个少一个对这社会好像并没什么影响，但这不是沉默的借口。身边有很多努力的同学，应该向他们学习。虽然不是每个人都能成为精英，但每个人都应该负责任。古人所说“修身、齐家、治国、平天下”，很有道理，心中要装着亲人，装着天下，努力，尽管卑微，对这个社会也还是有用的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-7816067374670816084?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/7816067374670816084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=7816067374670816084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7816067374670816084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/7816067374670816084'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/03/blog-post_31.html' title='清明'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-8626113715988489573</id><published>2007-03-28T08:27:00.002+08:00</published><updated>2008-12-16T22:18:20.525+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>非对称</title><content type='html'>对称是美的，而不对称是永恒的。正是这种种非对称，创造着生命中的悲欢和这个世界的混乱和魅力。&lt;br /&gt;打过RPG游戏的都知道，在对称中创造非对称正是游戏的精华所在，比如星际魔兽，乍看游戏中的每个种族都是均衡的，并没有明显的相生相克，可在比赛中选手们却有意识地创造着不均衡，在己方兵种有绝对优势时，胜利来的往往容易些；不过初期的优势并不意味着永远的优势，比赛在不断地变化，双方的策略也在不断地变化，当一个非对称的情势发展到极致时，也正是最易赢得比赛或输掉比赛的时候。没有永远的阳光灿烂，也没有永远的阴雨绵绵，今天在变，明天的变化也许更大，人不能永远地等待，把期待放在明天，放在一个难以琢磨的时刻。&lt;br /&gt;想到面前的道路，也是个混乱而难以选择的情形。&lt;br /&gt;&lt;br /&gt;在困难的选择中打破均衡，使生命的天平慢慢向自己的目标倾斜，在灵动中创造机会，在变化中求得发展，也许正是我们所该做的。反省自身，我之所爱和在？-----生活；生命短暂，有太多值得尝试，生活中有足够的素材值得我去接触消化理解感悟和升华。生活中的快乐来源于爱和感恩；来源于进取和帮助他人；这也正是我所追求的。一介书生，身无分文而心忧天下----看似有些土，在这滚滚红尘中显得不和潮流而迂腐，可些小的欲望太容易满足，物质的追求又没有满足的底线，生活的意义，除了在生活中找寻，又在何处？人活着，还是要为社会做些事的。&lt;br /&gt;&lt;br /&gt;回到非对称这个话题，生活为何累人？因为人们太在乎均衡，太难放下。全面发展堪称完美的人自然存在，可他们似乎只是我们仰望的对象，从小到大，就算在身边，也总有些人，我永远无法超越，越想超越却发现离得越远。因为你永远不知道那些人下一步要做什么，因为你只是抱着竞争的心态。放弃竞争，选择合作，这才是道路的开始。以竞争的心态看人，难免将别人和自己相比，有过之则沾沾自喜，不及之则心有不甘；千方百计的借口，怨天尤人的抱怨。以合作的心态拥抱社会，改变自己，使自己变成大环境下不可或缺的一块积木；环境变了，便改变自身，以保证团体的完整；所以，我不同意“磨练”这个说法，社会不是磨刀石，不是打磨人的场所；人不应该是木头，而应该是橡皮泥或气球，改变自己甚至扩充自己来适合这个社会。&lt;br /&gt;&lt;br /&gt;现在工作为什么难找，因为很多毕业生太相似了，如同是个球，只有大小之异没有形状之分，质地不软不硬，不想改变又自视甚高。这应该是教育模式和社会心理共同作用的结果，对孩子而言，从小和人比成绩当小干部，而家长呢，太在乎，将孩子作为炫耀的资本，人家小孩学钢琴，学画画，成绩好，外语强；人家小孩上大学，赚大钱。。。。于是中国就多了这么多难以就业的大学生，同时也有这么多技工岗位难觅良才。大学生虚度光阴自然不对，但全心学习也非良策；人有不同，有人强于综合而疏于钻研；有人贵在速度而疏于严密；不是每个人有适合科研，也不是每个人有强于研发；职务无分高贱，只有适合与否；人和人之间所需的是互相尊重，而不是相互攀比。创造非对称是要有一定决心的，它在带来机遇的同时也滋生了风险，不过人不能因为害怕风险而选择平庸；不能因为畏惧失败而甘愿放弃；不能因为路途艰辛而畏首畏尾；更不能因为前途的不确定而选择逃避。我们要的只是适合自己的道路，要的是决心、勇气、和坚持。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-8626113715988489573?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/8626113715988489573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=8626113715988489573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8626113715988489573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/8626113715988489573'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/03/blog-post_28.html' title='非对称'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-2552915834692936609</id><published>2007-03-17T16:53:00.001+08:00</published><updated>2008-12-16T22:24:44.043+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>大三下</title><content type='html'>开学三周。&lt;br /&gt;还是这么过，游戏打得太多了，颓废，想想也没啥好玩的，就是一遍遍重复呗，说到底也没啥变化，为啥有时候就会想玩呢？&lt;br /&gt;以后做什么能，有时也会想这问题，但想法总是变，就像Dota中的变形精灵，力量或敏捷。&lt;br /&gt;力量--敏捷，可能这也是现在摆在面前的路。&lt;br /&gt;力量型的血会多些，譬如考研，死不了，不过移动慢些，攻击力低些。敏捷型的血少，但快，灵动，不过一次次的死就难翻身了。&lt;br /&gt;Or智力加敏捷？&lt;br /&gt;四年内就能知道我是否走对了路，三十岁前，不怕，三十岁后，不悔。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-2552915834692936609?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/2552915834692936609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=2552915834692936609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2552915834692936609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/2552915834692936609'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/03/blog-post.html' title='大三下'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-4380247572943026611</id><published>2007-02-28T11:23:00.001+08:00</published><updated>2008-12-16T22:24:44.045+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><title type='text'>比较郁闷的事</title><content type='html'>头疼,快一个星期看不了书了,原本考GRE还是有那么点希望的,这下开心了,反正没啥希望了,不过考还是要考的,不然也对不起我考证狂的封号啊。&lt;br /&gt;       原先就是小小的头疼，平时也有过，一会儿就能好的，可那天被词有点狂，小头疼变成了剧头疼，就睡了一下午的觉，老妈十分地不放心，我就捉摸着可能是这两天在床上看书，是不是脖子拧了，没想这么一想，脖子果然开始不爽，而且又是活络油又是理疗的，一点不见好。隔天和女朋友约会，在香肩上枕了一会，倒不疼了，可老妈不放心，第二天就去医院看了看，专家门诊，专家看了会，问我又没鼻炎啥的，一串问题，俺没啥啊，应该也就是脖子拧着了，回家呆会就好了。又过了一天，鼻子好像又有点不舒服了，莫非是专家所说的鼻炎？靠，这次这么都是倒果为因了？不想了，再想下去估计我就得感冒了，这心里想啥就得啥啊？&lt;br /&gt;       今天不管了，不管怎样也得看书了，整整看了四天电视，这心里难受得，还是背单词爽，就看书喽，不过好像一看就不怎么头疼了，又一次验证了那句话啊，死猪不怕开水烫，我的哲学啊，咋就忘了呢，再苦再累，就当自己是二百五，多愁善感，疑神疑鬼，会越来越糟。假期过得差不多了，进了学院得好好干，快毕业了，不爽，不爽。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-4380247572943026611?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/4380247572943026611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=4380247572943026611' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4380247572943026611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/4380247572943026611'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/02/blog-post_28.html' title='比较郁闷的事'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-1140148696888791460</id><published>2007-02-13T16:30:00.002+08:00</published><updated>2008-12-16T22:24:44.046+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日记'/><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>简单</title><content type='html'>将来要有个温馨的家，小点就行，但一定要精致，特别是厨房和卫生间，一定要十分的雅致才好，其他的呢，我只要一个大大的书桌，平平整整，没有抽屉的那种。有时候比较极端，不喜欢房间里又有床又有桌又有柜，我现在的房间就只有一张桌子，挺长，从一头做到了另一头，还有一张铁架床，仅此而已。就像用手机，觉得买个能拍照的手机不如买一个最土的只能打电话和发短信的手机再加上一个数码相机。复杂是魔鬼，keep it simple and stupid!这不但是写程序的教条，也是我的生活态度。&lt;br /&gt;简单到极致，就是美。人也如此，很难同时扮演很多角色，太累。人要能像个CUP就简单了，分时，并发而不是并行，一个时间片就做一件事情，忘记其他。做每件事情都花上自己全部力气。觉得学计算机是最浪漫也是最死板的，浪漫时能把程序当人看，怎么看怎么爽，死板的时候将生活看成操作系统的调度，循规蹈矩，甚至早上出门前将一天的行走路线都作最佳分析。&lt;br /&gt;今天同学聚会，到了一半人，看大家都很开心，也都过得不错，很为我们开心。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28242285-1140148696888791460?l=xuyizun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xuyizun.blogspot.com/feeds/1140148696888791460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28242285&amp;postID=1140148696888791460' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1140148696888791460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28242285/posts/default/1140148696888791460'/><link rel='alternate' type='text/html' href='http://xuyizun.blogspot.com/2007/02/blog-post_13.html' title='简单'/><author><name>Sunix.Xu.许一尊</name><uri>http://www.blogger.com/profile/10641319756838579519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28242285.post-3850611950680617004</id><published>2007-02-13T08:47:00.003+08:00</published><updated>2008-12-16T22:21:58.967+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='学习'/><title type='text'>软考认证</title><content type='html'>IT认证的种类：&lt;br /&gt;全国计算机认证主体分为三种，一是资格水平认证，二是计算机等级考试，另一是IT厂商设立的认证培训三种不同的认证。&lt;br /&gt;等级考试针对非计算机专业人员，作为其专业知识的补充，内容较少也较为简单，所以除非女朋友要考那类认证，学计算机的同学可以翻翻看看，一般没有学习的必要（我女朋友天资甚高，学医，看几天书懵懵懂懂就过了三级），这类认证基本不可作为IT从业人员找工的资本。&lt;br /&gt;资格水平考试目前十分流行，主要原因是便宜，而且在民营企业中有一定的认可度，并且传说通过考试可以获得高级工程师职称。在论坛上了一些帖子，很多人的亲身经历表明这不过是个误解，比较流行的说法是要获得高级资格并满一定工作年龄（五年）才可申请高级职称。资格只是说明你有这个能力（至少是考试能力），而职称才是跟福利挂钩的。社会中的认同度也是各有各的说法，这类认证有胜于无，一般可以凭之获得面试的机会。一般而言，国有企业和政府机关更看重学历文凭，但对这类认证也比较看重；民营企业对实践经验更为重视，这类认证也很看重；对于外资企业而言，据说比较地无所谓，不知道真实情况如何。&lt;br /&gt;对于IT厂商的认证，主要分为面向大众市场和面向具体应用两类。面向市场的主要有SUN，MS，Cisco三大阵营：SUN认证主要对应与java开发，Cisco对应与网络管理，MS则比较繁杂，总类众多。这类认证在哪都吃得开，CCNP到CCIE，每一个级别都对应着一条收入线，JAVA和Cisco的高级认证几乎都代表着月薪过万，自然，通过也不是容易的，虽然题型不复杂，可就是不像资格考试那样可以突击搞定，报考费用也是不菲。对穷学生而言是真正的心有余而钱不足。&lt;br /&gt;面向具体应用的更为复杂，IBM，BEA，HP。。。。几乎每一家巨公司背后都有着一套繁杂的认证体系以对应与自身复杂的产品线。比较特殊的是IBM，它的认证虽然和它及具体产品相结合，但其广度从操作系统、java开发、数据库系统到电子商务、项目管理，几乎涵盖了IT产业的方方面面，其初级对应与基础知识，中级对应于产品应用，高级对应与高级特性。划分地比较明确，自然，其最大的好处还是便宜，对于在校生不过150一科，还时时有热考活动，再加上俱乐部的培训，十分划算。&lt;br /&gt;具体选择哪类认证，也是因人而异，就在校生而言，推荐资格水平认证，考完以后，对计算机整个的体系可以有个宏观的认识，以后学习中可以举一反三，看得更加全面；再者，报名费用低廉，就算通不过也没啥大不了，浪费不了多少金钱；其三，也避免过早得和某项应用绑定，影响视野的开阔性。我还没有工作，所以也不知道认证对与在职工作人员有何意义，论坛上普遍的看法是考具体公司的认证是为了跳槽或加薪，考资格水平认证是为了评职称，具体情况如何，不清。&lt;br /&gt;&lt;br /&gt;资格水平考试：&lt;br /&gt;这类考试深度有限，基于基础知识，一般大学本科的教学难度应付这类考试已经绰绰有余，其困难主要在于涉及的知识面较广，跨度大，如果从零复习要花较多的时间。而如果真的需要从头复习又时间有限的话，建议大家抛开书本，看看网上的精品课程（以后我将就计算机类的精品课程做一个整理），这类课件针对教学，难度有限而又比较简洁，适合与快速入门和复习。如果觉得课件太过简洁，不妨看看高等教育出版社的书，这类书难易适中，语言也通俗易懂，而一些重点大学出版社的书虽然做为教材是很不错的，但单纯就应付考试而言，讲的难了些，也比较容易钻牛角尖。其实中国相同课程的教材体系几乎一样，章节安排也差不多，有的只是繁简难易之分。所以有人说中国的教材是“编”的不是“纂”的，“编”的教材自然都差不到哪去，找本薄些的就能看得快些。&lt;br /&gt;&lt;br /&gt;至于复习方法，觉得其实就是软件开发方法。无论是严谨还是敏捷，无论是繁杂或简洁，几乎世上所有的人类活动都可以和某种
