<?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-6976291393224066038</id><updated>2012-01-16T14:02:04.475+01:00</updated><category term='IC设计'/><category term='QT'/><category term='VHDL'/><category term='杂谈'/><category term='读书笔记'/><category term='Scientific Computing'/><category term='编程'/><category term='GALS'/><category term='可用性工程'/><category term='ffmpeg'/><category term='数字图像处理'/><category term='旅游'/><category term='协议'/><category term='ModelSim'/><category term='robot新知'/><category term='生活'/><category term='Eclipes'/><category term='电影'/><category term='推荐'/><category term='电子工程师乱弹编程'/><category term='思考'/><category term='SDL'/><category term='流媒体技术'/><category term='音乐'/><category term='工具使用技巧'/><category term='FPGA'/><title type='text'>Hanyi on ET</title><subtitle type='html'>Hanyi on ET。若无特别说明，此处文章皆为原创，网友转载本博客文章请保留出处。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default?start-index=101&amp;max-results=100'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>157</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3627300656330188691</id><published>2012-01-16T14:02:00.001+01:00</published><updated>2012-01-16T14:02:04.503+01: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'>一月中旬的小结</title><content type='html'>&lt;p&gt;看这篇文章题目就像小学生作文。最近很忙，我的一些博文系列文章例如“电子工程师乱谈编程”，只能暂时停一阵子。但仍希望能坚持每隔一段时间写一个简单的小结。&lt;/p&gt;  &lt;p&gt;我住的这个小城今年的冬天到现在居然只下了两场小雪。今天竟还是艳阳高照，零上2度。偷懒一下，窝在家里今天不去上班，其实也是因为想在家里专心把一篇拖了2个多星期的论文写完，希望这篇论文能被6月份的在澳大利亚的我现在研究这个领域一个顶级学术会议上被接受，其实到现在我也发过了几篇文章，但是都是二流的会议，顶级会议还没有试过，祝自己好运吧。&lt;/p&gt;  &lt;p&gt;最近学了很多东西，什么PHP，JavaScript，Ajax，WPF，Silverlight，杂杂的乱学了一大堆，其实就是看看网上的教程，结合最简单的head first系列教材，简单入门学了一下，然后自己做搭个简单的网站和抄抄改改做一些小程序。&lt;/p&gt;  &lt;p&gt;上个星期的大事就是和同事报名的一个比赛，写了一个4页纸的计划书，注册了两个网址。&lt;/p&gt;  &lt;p&gt;上个星期还完成了一个项目的简单收尾工作，进行了一些测试，加了几个小特性，但还没完全完成。人们常说“读书百遍，其义自见”，我认为“读代码百遍，也是其义自见”，为了完成这个项目，我必须在一个师兄的两个项目上拓展，我大概把他的代码读了百遍吧，然后才彻底地理解了这两个项目的架构和所有细节还有使用的技术。&lt;/p&gt;  &lt;p&gt;上周末还帮助一个在机械系读博的朋友写了一个小程序，突然很深切的体会到，其实很多东西都可以做到非常好的跨学科，例如计算机科学的一些新的算法，概念，可以延伸并使用在机械科学领域，电子科学领域上，然后会产生一些新的突破，看来做研究还是视野要广一些。   &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3627300656330188691?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3627300656330188691/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3627300656330188691' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3627300656330188691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3627300656330188691'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2012/01/blog-post.html' title='一月中旬的小结'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-5372803588018897120</id><published>2011-12-31T13:43:00.001+01:00</published><updated>2011-12-31T13:43:08.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>2011简单小结</title><content type='html'>&lt;p&gt;非常简单地小结一下我的2011。    &lt;br /&gt;根据豆瓣上的记录2011年读了134本书，看了103部电影。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-9BXFm8ECllQ/Tv8DVdlno0I/AAAAAAAAAbo/QiZGlMbLoAY/s1600-h/books_read_2011_chart%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="books_read_2011_chart" border="0" alt="books_read_2011_chart" src="http://lh4.ggpht.com/-pkv5Rp4sDxk/Tv8DV971_BI/AAAAAAAAAbs/-AwTRaEHI-0/books_read_2011_chart_thumb.png?imgmax=800" width="244" height="124" /&gt;&lt;/a&gt;&lt;a href="http://lh3.ggpht.com/-mTot1mEgTxc/Tv8DWZ3qjEI/AAAAAAAAAb0/F54zcJElN8c/s1600-h/movies_saw_chart%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="movies_saw_chart" border="0" alt="movies_saw_chart" src="http://lh5.ggpht.com/-8MJ9WwhN2Tg/Tv8DWwNa40I/AAAAAAAAAb4/-bmLlRYYXGo/movies_saw_chart_thumb.png?imgmax=800" width="244" height="124" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;生活：    &lt;br /&gt;2011游玩的机会比较少，只去了两次荷兰购物，有时在北威州逛逛，去了一次黑森州。     &lt;br /&gt;4月份复活节假期到瑞士玩了4天。     &lt;br /&gt;5月份回国办了结婚酒席。     &lt;br /&gt;10月份开始学车，但是进度很慢，没有太多时间去上课。     &lt;br /&gt;11月份第一次和同事到一个旅游区参加3天Workshop。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;学习工作：     &lt;br /&gt;读博开始比较进入状态，但是只发表了两篇文章。     &lt;br /&gt;我也开始给别人上课，带了几次练习课。     &lt;br /&gt;参与了两个项目，并主持完成了一个项目的第一和第二阶段。     &lt;br /&gt;获得了一个校内的博士生的创新奖。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;事业：     &lt;br /&gt;有一个计划在有条不紊的进行，在2012年初就应该实现第一步，这也许是2011年最大收获。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;2011的新年假期，大多数时间都窝在家里，学习WPF，Prism (学习使用Microsoft Ribbon for WPF，MVVM Model View ViewModel)。     &lt;br /&gt;最后祝大家2011新年快乐。     &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-5372803588018897120?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/5372803588018897120/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=5372803588018897120' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5372803588018897120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5372803588018897120'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/12/2011.html' title='2011简单小结'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-pkv5Rp4sDxk/Tv8DV971_BI/AAAAAAAAAbs/-AwTRaEHI-0/s72-c/books_read_2011_chart_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4067433025547088577</id><published>2011-11-27T23:41:00.001+01:00</published><updated>2011-11-27T23:41:26.035+01: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'>闲谈2011年11月情况</title><content type='html'>&lt;p&gt;&lt;strong&gt;a.不上班的日子&lt;/strong&gt;    &lt;br /&gt;因为德国糟糕的天气，生病了，11月17日，18日在家呆了两天。连续看了两个医生，最近一年来，每个季度好像都要生病一次，每个季度都要交一次10欧元所谓的挂号费，并使用一下医疗保险。看来还是要多锻炼身体才是。因为生病了，昏昏沉沉的，没法编程。很少超过两天没有编程，我居然会想念编程，常常在思考一些编程问题。仔细一想，其实并不完全是因为我对编程有爱，也有可能因为写程序时自我重要感也就得到了满足，并且总是认为自己在参与的项目中是个不可替代的人物，得到同事的需要，感受到这一点的时候，那种幸福感是无与伦比的。不编程的日子，日子也过的很快，读读别人的博客，看看网上有趣的视频，玩玩实况2012，然后选顶级对手，被电脑虐几次，做做饭，一天就过去了。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;b.第一次参加workshop     &lt;br /&gt;&lt;/strong&gt;第一次参加我们组的workshop，我们组的workshop还挺有趣的，所有同事和教授都一起到一个度假酒店（这个酒店离我们大学也就2小时车程）住3天，也就是这个月23号到25号，然后进行汇报总结，还有分组讨论，每天3餐都是自助餐，在讨论的时候还提供各种点心，感觉就是一直在吃东西，还好一般来说我们的workshop只有3天不然会把人搞的胖死。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;c.第一次参加展小型的科技览会的比赛     &lt;br /&gt;&lt;/strong&gt;24日，我和一个同事还专门从我们workshop的酒店，开车回到我们大学参加一个小型的科技览会，参展的都是我们大学的博士生，当天比赛参展完成后，又开回我们的度假酒店。值得开心的是，我们参加比赛的项目获得了&amp;quot;跨学科的创新奖&amp;quot;，并共同获得了1000欧元的奖金，这是对我们的努力极大的肯定，而且在展会上很多人都对我们的产品和想法有很正面的评价。现在我对我们的产品在明年的面市更有信心了。下个星期开始进行我们项目专利注册的事情。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;附加：     &lt;br /&gt;&lt;/strong&gt;刚刚，随便翻了下以前看过的书，发现有些有趣有用的观点，这里做一个摘抄：    &lt;br /&gt;帕金森法则（Parkinson's Law）[1]:任务的重要性和复杂度与所分配的完成任务的时间密切相关。(Work expands so as to fill the time available for its completion.)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;帕金森法则告诉我们一个道理，我们其实可以减少工作时间来做最重要的事情。这就是不断迫近的最终时限的魔力。如果给你24小时去完成一项任务，时间的压力促使你集中精力去执行，别无选择只能做最重要的部分。同样的任务，如果给你1周去完成，它就换来了小题大作的6天。如果给你2个月的时间，但愿不要这样，它就变成了一场精神磨难。因为精力更高度集中，短时限内做出的最终产品通常不比长时限内做出来的差，甚至质量更高。[2]&lt;/p&gt;  &lt;p&gt;30岁是一个关键点。一个人是作为通才走上企业的经营管理者或者创业家的道路，还是走上企业内部专家的道路，必须在这个时候做出决断。而且在35岁的时候，还没有展现出通才能力的人，就应该不要有任何的犹豫，选择一个专业领域，并且拿出不输给任何人的决心走上成为专家的道路。[3] &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;引用：    &lt;br /&gt;[1] &lt;a href="http://en.wikipedia.org/wiki/Parkinson's_law"&gt;http://en.wikipedia.org/wiki/Parkinson's_law&lt;/a&gt;    &lt;br /&gt;[2] 《告别朝九晚五：每周工作4小时》     &lt;br /&gt;[3] 大前研一《知性力II》&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-4067433025547088577?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4067433025547088577/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4067433025547088577' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4067433025547088577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4067433025547088577'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/11/201111.html' title='闲谈2011年11月情况'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7113099881835816669</id><published>2011-11-14T23:48:00.001+01:00</published><updated>2011-11-14T23:49:09.037+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='电子工程师乱弹编程'/><title type='text'>我们的XX项目使用的系统架构</title><content type='html'>&lt;p&gt;上上个星期五，我们的大头和我们三个核心开发人员开了一个下午的会。决定11月24日，参加一个展览会，推荐我们的产品，也是算是一次了解我们的产品的市场反应的机会。但是这个产品的具体介绍（其实是一个专业软件，加上辅助的硬件系统），我将在正式上市的时候进行详细的说明，可能会在明年的2月份，这个项目的软件部分这里我就暂且称之为XX项目。&lt;/p&gt;  &lt;p&gt;这个XX项目已经进行了一年，我从开始就参与开发，作为软件核心开发人员，看到即将上市，感到特别的兴奋，而且有些成就感，特别是这个软件的用户界面还是我一点一滴设计的，和很多程序员不同，我认为设计一个漂亮的GUI是非常有趣的事。&lt;/p&gt;  &lt;p&gt;进入正题，今天谈谈这个XX项目系统架构。&lt;/p&gt;  &lt;p&gt;开发这个软件我们采取的很多对我们来说比较新的开发方式和架构，我们采用模块化开发，模块设计，所有的模块都通过我们特别设计的类似Service Interface方式导出其数据与功能，所有的模块的接口通过特定的方式进行开放。这些模块都有自己想对应的测试模块，对其进行自动化测试，使用的统一的架构。这些模块我们不仅使用在我这里所提到的XX项目，而且还使用到我参与开发的几个项目，有的是运行在服务器上，有的则是在单机上运行的。&lt;/p&gt;  &lt;p&gt;我们使用的架构类似下面所示，XX_GUI模块是用户界面模块。XX_APP(应用程序)获取各种模块的“服务”，这里类似中间层。XX_GUI(用户界面)通过我们特殊定义的event和XX_APP(应用程序)进行通信，目前我们的XX_GUI(用户界面)是使用Qt进行编写的基于单机，但是XX_GUI(用户界面)可以简单的通过替换改变成为Web-based user interfaces(WUI)，例如使用Java，AJAX进行开发，如果使用Web-based user interfaces(WUI)，并通过各种Web服务协议进行数据和事件通信，XX_APP(应用程序)进行简单的改造就可以放置在服务器上。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;XX_GUI      &lt;br /&gt;&amp;#160; ^       &lt;br /&gt;&amp;#160; | 通过event进行通信&amp;#160; &lt;br /&gt;&amp;#160; |&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;XX_APP (应用程序)       &lt;br /&gt;&amp;#160; ^       &lt;br /&gt;&amp;#160; | 通过统一模块注册机制进行调用       &lt;br /&gt;&amp;#160; |       &lt;br /&gt;各种模块&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;XX_WEB_GUI      &lt;br /&gt;&amp;#160; ^       &lt;br /&gt;&amp;#160; | 通过网络进行通信&amp;#160; &lt;br /&gt;&amp;#160; |&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;XX_APP (应用程序)       &lt;br /&gt;&amp;#160; ^       &lt;br /&gt;&amp;#160; | 通过统一模块注册机制进行调用       &lt;br /&gt;&amp;#160; |       &lt;br /&gt;各种模块&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;进一步延伸，因为各种模块组合产生的XX_APP(应用程序)可以在服务器上运行，我们的XX_APP(应用程序)适用于类似很多大型平台采用的Service-Oriented Architecture（例如亚马逊），可将XX_APP(应用程序)功能作为服务发送给用户。通过统一Service注册机制进行调用多个不同的XX_APP(应用程序)，组成一个复杂的网络服务。例如下面所示。这就因为使用同一Service注册机制这就大大提高服务的复用性。这就是在应用程序层级上提高复用性。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 特定的服务      &lt;br /&gt;&amp;#160; ^&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ^       &lt;br /&gt;&amp;#160; | 通过统一Service注册机制进行调用 |       &lt;br /&gt;&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |&amp;#160;&amp;#160; &lt;br /&gt;XX_APP_1 (应用程序)&amp;#160;&amp;#160;&amp;#160; ... ...&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XX_APP_n (应用程序)       &lt;br /&gt;&amp;#160; ^&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ^       &lt;br /&gt;&amp;#160; |&amp;#160; 通过统一模块注册机制进行调用&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |       &lt;br /&gt;&amp;#160; |&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; |       &lt;br /&gt;各种模块&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 各种模块&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最后总结一下，复用性一直是我对设计上思考的要点，简单来说：    &lt;br /&gt;我们的模块依赖于我们开发的类库，这就是在&lt;strong&gt;类层级上的复用&lt;/strong&gt;。     &lt;br /&gt;我们的应用程序依赖于我们开发各种模块，这就是在&lt;strong&gt;模块的层级上的复用&lt;/strong&gt;。     &lt;br /&gt;我们的服务依赖于我们开发各种应用程序，这就是在&lt;strong&gt;应用程序的层级上的复用&lt;/strong&gt;。&lt;/p&gt;  &lt;p&gt;   &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/6976291393224066038-7113099881835816669?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7113099881835816669/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7113099881835816669' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7113099881835816669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7113099881835816669'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/11/xx.html' title='我们的XX项目使用的系统架构'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8326333775076781291</id><published>2011-10-17T15:31:00.001+02:00</published><updated>2011-10-17T15:31:39.553+02: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;p&gt;居然超过一个月没有更新博客，接下来会常常更新的&lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh4.ggpht.com/-2npHwLItOyE/TpwuOpj9dwI/AAAAAAAAAbM/0XJfIwH4wbA/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /&gt;。因为最近在忙着完成一个项目的一个里程碑的收尾工作，这个项目共分为3个里程碑，也就是分三个阶段完成，我们现在刚刚完成第一个里程碑，在我们的Time Schedule上应该是在今年三月底就应该完成这个里程碑。因为遇到技术性难题和人员调动还有测试的原因，我们居然拖延了半年，所以说软件工程常常会把人拖入泥沼，最后我发现这个项目的核心开发人员，也就是我和另一个同事写了80%以上的代码，虽然采用了模块化的开发，因为开发依赖于我们自己开发的Framework但是除了核心开发人员其他人对Framework的理解和应用并没有达到熟练使用Framework进行开发的水平，所以整个项目还是过于依靠核心开发人员，导致项目进度很慢。最近每天都花一点时间重读了一些C++的书。同时还用C#自己写了些小东西，其实C#是一门很不错的编程语言。&lt;/p&gt;  &lt;p&gt;这个月读了不少关于财经及投资的书籍，进行财商再教育。最近也开始关注德国DAX，“有幸“遇到振幅超过20%的这几个星期，其实有很多抢小反弹机会，但都没有把握。&lt;/p&gt;  &lt;p&gt;新的美剧季又开始了，其实我几乎每天看一集美剧，晚上在家吃饭的时候看，以下是我看的美剧，排名分先后。&lt;/p&gt;  &lt;p&gt;1.《豪斯医生》，编剧的水准之高，令人折服。&lt;/p&gt;  &lt;p&gt;2.《超感神探》，很多有趣的推理，Jane的个人魅力无敌。&lt;/p&gt;  &lt;p&gt;3.《生活大爆炸》，配角越来越出彩。&lt;/p&gt;  &lt;p&gt;4.《老爸老妈浪漫史》，一如既往的搞笑，很符合我的笑点。&lt;/p&gt;  &lt;p&gt;5.《绯闻女孩》，因为前季都看了，所以看此剧已成为一种习惯，看看美女，漂亮的衣服，时尚繁华的纽约也不错。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;每周我都看1到2场球，主要是皇马的，因为我也是穆里尼奥的粉丝。&lt;/p&gt;  &lt;p&gt;十月的德国已经挺冷了，家里的暖气已经开始供暖了，最近常常还下雨，没有办法每天骑自行车上班，对我来说，这是一件很痛苦的事，因为每天骑10公里自行车是我最主要的运动。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8326333775076781291?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8326333775076781291/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8326333775076781291' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8326333775076781291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8326333775076781291'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/10/blog-post.html' title='闲谈最近的情况'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-2npHwLItOyE/TpwuOpj9dwI/AAAAAAAAAbM/0XJfIwH4wbA/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7587716343420016863</id><published>2011-09-11T17:46:00.002+02:00</published><updated>2011-09-12T00:13:40.956+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='电子工程师乱弹编程'/><title type='text'>不要让人重构你的烂程序</title><content type='html'>上个星期主要工作是重构一个很重要的模块，先抱怨一下，这个模块没有注释，可以运行，完全没有可维护性，写得是相当的丑陋。&lt;br /&gt;&lt;br /&gt;单是理解这个程序就花了我和一个同事整整1天，然后重构花了我4天。而且每天我为了这个模块的重构，居然打破了我的“&lt;a href="http://hanyionet.wordpress.com/2011/08/15/%E7%A8%8B%E5%BA%8F%E5%91%98%E6%AF%8F%E5%A4%A9%E5%8F%AA%E9%9C%80%E7%BC%96%E7%A8%8B4%E5%B0%8F%E6%97%B6/"&gt;程序员每天只需编程4个小时&lt;/a&gt;”的教条，我每天竟然要花6个小时在这个模块的重构和测试上，最终我在重构上大概花了30个小时，所以很多人说不要轻易重构代码，这里我想说的是重构他人的烂代码还不如自己重写。&lt;br /&gt;但是经过上个星期的经历，这里再次总结一下什么是烂代码。   &lt;br /&gt;1. 没有关于重要代码的解释    &lt;br /&gt;2. 没有统一的名称的规范    &lt;br /&gt;3. 到处都是注释掉的代码（注释掉的代码会让读代码的人很痛苦，而且会让人觉得这个代码不是最终的成品，而是实验性的代码，或半成品）    &lt;br /&gt;4. 巨大的方法（我居然看到了一个超过1000行的方法）    &lt;br /&gt;5. 很在方法中很随意的加入代码    &lt;br /&gt;6. 过于愚蠢的API的设计 （如果要学习如何设计一个好的API请查看&lt;a href="http://developer.qt.nokia.com/wiki/API_Design_Principles"&gt;Qt API Design Principles&lt;/a&gt;）&lt;br /&gt;&lt;br /&gt;上面第4点提到的，对于这个超过1000行的方法，被我改成的8个小方法，每个都不超过50行，而且这些方法的都具有复用性（因为每个方法很小，代码的可重用性开始指数增长）。为什么会有这种巨型的方法呢，其实就是程序员很多时候很随意的加入代码所造成的，而且他们满足于写出“可用”的程序，而不满足于写出“优雅”的代码。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;很多人都停步于烂代码，因为他们认为他们的烂代码可以用，很多程序员都会犯这样的错误。&lt;/strong&gt;他们很理直气壮的对我说，看我的代码很好用，可用的代码不代表不是烂代码，其实这些代码都金玉其外，败絮其中。人们常说，程序员都是从写烂代码开始，然而也许写出所谓的“内聚性、松耦合、零重复、封装、可测试性、可读性以及单一职责”的“好代码”需要长时间的锻炼，&lt;strong&gt;但是最坚持最简单的代码规范却是每个程序员可以做到的，这就是避免烂代码的最好方法。&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;其实我们常常并不要求人们写出“优雅，精妙”的代码，我们的要求不高，程序员只需要坚持“简单性”，写出符合“代码规范”简单的代码即可。&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-7587716343420016863?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7587716343420016863/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7587716343420016863' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7587716343420016863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7587716343420016863'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/09/blog-post_11.html' title='不要让人重构你的烂程序'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-5994612701885342971</id><published>2011-09-01T21:24:00.001+02:00</published><updated>2011-09-01T21:27:08.220+02: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;p&gt;最近计划转换跑道，常常“不务正业”地看一些关于金融投资的书，同时也关注一下德国的股市，最近跌得很厉害，DAX前几天还破了5500点，作为经济的晴雨表的股市表明，经济似乎遇到了危机。我这个电子工程师今天也来谈谈我关于危机的思考。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;危机1&amp;#160; 夕阳工业和退休基金&lt;/strong&gt;    &lt;br /&gt;突然想到，如果美国政府不断的增发货币。那么证券市场是一个池子，如果这个池子的增加变大要低于货币的增加速度，证券市场作为货币的重要流出口，那么证券市场的就很有可能上扬。但是我们可能会遇到最坏的情况，很多夕阳工业正在消亡，而中国的社保基金，美国和西方国家的退休基金，都相当依赖于这些夕阳工业公司所发放的股利，然而股利的大幅度下降对这些求稳的基金是有很严重的影响。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;危机2&amp;#160; 债务和赋税&lt;/strong&gt;    &lt;br /&gt;美国的债务不会自动消失，早晚会为了这些庞大的债务付出高额的代价。据统计美国地方政府、州政府以及联邦政府工作的人数，大于制造业的就业人数。众所周知，中国承担着巨大的行政成本，以及越来越庞大的公务员队伍，这是整个国家的巨大负担。虽然政府工作人员虽然对维持社会运作起了很重要的作用，但是他们对社会财富的贡献是很低的。为了解决债务危机，美国政府持续大量印钞票，这些债务得用税赋的方式来偿还，美国的赋税一定会上升的。如果中国的经济无法持续高速发展，为了负担中国巨大的行政成本，中国的赋税会继续上升。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;危机3&amp;#160; 消费&lt;/strong&gt;    &lt;br /&gt;我们都知道如果美国人停止消费，那么全球将会开始迈入所谓的经济大萧条，因为中国这个重要的市场消费不足。但是美国消费者并没有储蓄，如果美国经济进入小的不景气，消费者的储蓄花完后，那么经济大萧条是肯定的。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;危机4&amp;#160; 失业率&lt;/strong&gt;    &lt;br /&gt;据最近的报道，德国的同比失业率下降，但是我认为不管西方国家还是中国，失业率长期看来是一定会不断增加。全球化的影响是企业可以大幅降低公司的营运支出，并且利用新的信息技术，会大幅降低人事的成本，带来的是裁员。工业机器人在未来几年内会更大规模的运用，蓝领工作也会受到巨大的影响。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;危机中的可能的机会     &lt;br /&gt;&lt;/strong&gt;机器人技术（重点是工业机器人领域）    &lt;br /&gt;信息技术（可以用于减少的员工，可以获得更高的利润的信息技术，或者优化生产流程，提高生产效率的信息技术）    &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/6976291393224066038-5994612701885342971?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/5994612701885342971/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=5994612701885342971' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5994612701885342971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5994612701885342971'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/09/blog-post.html' title='关于经济危机的一些思考'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-5239770073816314389</id><published>2011-08-15T23:06:00.001+02:00</published><updated>2011-09-01T21:48:52.583+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='电子工程师乱弹编程'/><title type='text'>程序员每天只需编程4小时</title><content type='html'>&lt;p&gt;&lt;font size="3" face="宋体"&gt;很久没有更新“电子工程师乱弹编程”这个系列。今天继续谈谈时间管理的方法。      &lt;br /&gt;其实我一直认为，作为程序员每天有效编程时间大约4个小时就可以，我每天就是最多编程4个小时，不是因为我没有什么活，其实我的工作任务在很多人看来是“相当繁重”的。减少编程时间后，剩下的时间用来学习，研究，可以进行“时间投资&amp;quot;（下文会介绍）。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="3" face="宋体"&gt;如何摆脱加班的痛苦，减少工作时间，以下是我的几个小方法：&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="3"&gt;&lt;font face="宋体"&gt;&lt;strong&gt;1. 减少”所谓的无效工作时间”&lt;/strong&gt;         &lt;br /&gt;例如工作时上网时间，因为干这些事的时候，我们精神体能处于死亡的状态。编程时不要看邮件，减少外部的干扰。&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="3"&gt;&lt;font face="宋体"&gt;&lt;strong&gt;2. 放弃完美&lt;/strong&gt;         &lt;br /&gt;根据我的经验很多过长的工作时间就是我们追求完美所造成的。正如《卓有成效的程序员》所说的，“&lt;font color="#ff0000"&gt;&lt;strong&gt;始终牢记你到底要做什么，如果情况开始失控就及时抽身而出&lt;/strong&gt;&lt;/font&gt;。“80 10 10”法则，80%的客户需求可以很快完成，下一个10%需要花很大的努力才能完成，而最后的10%却几乎不可能完成。”我们常常为了那20%的东西，花费了80%的心力，我们所要警醒的是20%的东西是否是核心功能，对于不是重点的功能我们应该说“不”，并及时抽身而出，取和舍是减少工作时间的要点。&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="3"&gt;&lt;font face="宋体"&gt;&lt;strong&gt;3. 使用合理的开发流程，开发方式，高效的开发工具&lt;/strong&gt;         &lt;br /&gt;对于软件开发方法，我个人并&lt;strong&gt;&lt;font color="#ff0000"&gt;不喜欢敏捷&lt;/font&gt;&lt;/strong&gt;，应该所很不喜欢，因为软件质量和生产率成正比，因为&lt;strong&gt;&lt;font color="#ff0000"&gt;软件的质量越高，生产率越高&lt;/font&gt;&lt;/strong&gt;。而不是编码的速度越快，生产率越高。         &lt;br /&gt;我喜欢的开发方式是&lt;strong&gt;模块化开发&lt;/strong&gt;，并且是采用相对传统的方式进行开发（常常使用迭代法，一定要画UML），我们组的系统的架构基本上是模块化的，每个提供对外接口，每个模块都要写一个对于的测试例程，一来是为了模块测试，二来是方便做持续集成的人理解。然后进行持续集成。这种开发方式相对比较累的人是做持续集成的人，我最近一直在做这件事。模块化开发出的模块，也可以提高代码质量，以及复用性。&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="3"&gt;&lt;font face="宋体"&gt;&lt;strong&gt;4. 进行时间投资          &lt;br /&gt;&lt;/strong&gt;这是我最近看《杠杆思考术》一书看到的一个概念。&lt;strong&gt;程序员的时间投资的根本就是找出“模式”。&lt;/strong&gt;其实对于程序员而言，例如自动化构建的脚本就是一种时间投资方式，有时重做轮子也是时间投资的方式之一，例如自己写一些适合自己项目开发的工具类库，特别的工具类库常常可以在特定的项目开发中节约很多开发时间。以下摘抄一些书中原文：&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3"&gt;&lt;font face="宋体"&gt;&lt;strong&gt;因为投资而增加的时间，就应该用来投资打造新的模式或新的事业，进一步作为提升自己能力的自我投资，也就是所谓的再投资。&lt;/strong&gt;如果能够反复运用这些时间，每年就可以产生数百个小时的时间资产，而且这些额外的时间还能够以复利的形式像滚雪球一样快速增加，所以投资效果就会越来越大。只要能够有效地缩短工作时间，就能争取到更多的额外时间，这样一来也就可以达到不错的成效，而且最终还可以跟升职加薪有所关联。           &lt;br /&gt;所谓的时间投资，其实是由几个基本步骤组成的。           &lt;br /&gt;首先，最重要的是事前的调查。环视一下自己的工作全貌，检查什么事情是很麻烦的，哪些地方很花时间，自己要完全掌握。           &lt;br /&gt;接着，就要检讨在这些工作中哪些项目可以进行的更有效率，也就是所谓的过滤。不管是跟成果有关联的事还是没有关联的事，只要是非做不可并且没办法交待别人的，都按照其重要程度排出先后顺序。而且，为了建立所谓的模式，就必须实际投资时间去实施，以追求效率化。在这种时候，如果无法达到预期的效果，就没有必要勉强坚持下去。相反，如果能够持续取得成果，就能累积时间资产。&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="3" face="宋体"&gt;当然大话谁都会说，找到适合自己的方法才是最好的方法，对了，今天你是否只编程4小时？&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-5239770073816314389?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/5239770073816314389/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=5239770073816314389' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5239770073816314389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5239770073816314389'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/08/4.html' title='程序员每天只需编程4小时'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-2480543908043416137</id><published>2011-07-25T00:57:00.001+02:00</published><updated>2011-07-25T01:00:32.270+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>“工作淡季”到底可以做些什么呢</title><content type='html'>&lt;p&gt;上个星期开始是我所参与的项目的间歇期（我主要负责设计和开发的一个小系统的软硬件开始运行并且都运行正常，与此同时正在参与的另一个项目（并不是很急切的）正处于停摆期），我挺清静的，整个星期就开了一次会。&lt;/p&gt;  &lt;p&gt;这其实也就是我前不久读的《代码之道》一书所谈到的开发团队达到了“零Bug反弹”（ZBB，Zero Bug Bounce），在这个清静时期，我们可以做些什么有建设性的事情呢？&lt;/p&gt;  &lt;p&gt;开发人员在“工作淡季”到底可以做些什么呢？下面是《代码之道》提出的一些想法：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;分析Bug。分析团队在过去的一个产品开发周期中修复过的所有Bug，找出其中的规律。       &lt;br /&gt;为部门开发一些工具。        &lt;br /&gt;讨好项目经理，把他们的设计思想变成原型程序。        &lt;br /&gt;学习新技术或技能。        &lt;br /&gt;跟研究人员交谈。        &lt;br /&gt;撰写专利申明或白皮书。        &lt;br /&gt;反思职业生涯。&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;这是《代码之道》软件开发团队对于软件工程师的想法。&lt;/p&gt;  &lt;p&gt;其中：   &lt;br /&gt;&lt;strong&gt;学习新技术或技能,反思职业生涯     &lt;br /&gt;&lt;/strong&gt;这两点对于无论是硬件工程师，还是软件工程师还是软硬件研究人员都很重要。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;所以，我决定应该好好应用这个“清净的时期”学习新技术或技能，参与一两个培训使自身得到提高，下个星期，我在我们大学报了一个一周的课程。    &lt;br /&gt;关于反思职业生涯，突然发现自己虽然忙碌但是不是富有激情，可能是没有太多新的挑战了，经过一些和同事的讨论，我决定开始学习一门新的编程语言objective-C，开始学习移动设备应用开发。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;“清净的时期”其实也是一个很好的放松和修整的时刻，虽然不是在度假但是可以放松一下紧绷的神经，下班后，我又玩了一遍“三国志英杰传”，读了几本没读完的书，改变了家具的位置，彻底地将家里大大小小的东西整理了一下，而且我居然连续看完了how I met your mother的4，5，6季，很久没有一口气看这么多美剧，HIMYM不仅好笑（譬如第6季第10集：“早闪哥”，让我笑翻了）而且还挺温馨，个人非常喜爱，其实看完后感触还是很多的，里面有很多点点滴滴的生活中的哲理，很多也会发生在我们身上的人生大事，小事。其实生活中精彩和幸福之一就是你的好朋友就在你的身边。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-2480543908043416137?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/2480543908043416137/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=2480543908043416137' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2480543908043416137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2480543908043416137'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/07/blog-post_25.html' title='“工作淡季”到底可以做些什么呢'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3758461791108720709</id><published>2011-07-17T00:29:00.001+02:00</published><updated>2011-07-17T00:29:01.800+02: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;p align="justify"&gt;每到周末，夜深人静就想写点东西，写点东西记录一下我上周生活吧。&lt;/p&gt;  &lt;p align="justify"&gt;德国的一个著名的卡通老鼠[1]，今年已经40岁了，我们所和德国WDR电视台一起组织了一个开放日--7月10日，也就是上周日，一起庆祝这个卡通老鼠40岁生日，有至少2千个儿童来我们研究所参观。    &lt;br /&gt;我和一个同事带了一个学生，做了两个小游戏（花了我们两周的时间），给来参观的儿童玩，我们组的其他同事也做了好几个游戏，希望可以通过这些游戏培养儿童的科学兴趣的，虽然花了很多的时间和精力，但是来参观的儿童和很多家长都表示收获不少，特别是给儿童们带来了很多欢乐，与此同时，我们这些所谓的“科技工作者”的也获得了相当的成就感，这个偶然的机会做了游戏，也获得了很大的乐趣，自己感受似乎年轻不少！&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;以下简单地介绍一下我做的两个小游戏：     &lt;br /&gt;一个是&lt;strong&gt;微型机器人的逃离游戏&lt;/strong&gt;，也就是有几只微型机器人（我们使用的KheperaIII微型机器人），通过一个门，有两种情况，一种是这四个机器人通过互相交流，它们可以有秩序地通过这个门，另一种情况就是四个机器人不进行交流，它们就会争先恐后地通过这个门，然后挤成一块，最后这几只微型机器人会“很艰难”的通过这个门。我们做了一个卡通界面，这个GUI（图形用户界面）可以通过连接我们的服务器可以和机器人进行通信。在这个GUI上选择机器人，通过它们的编号，然后可以选择按左边的大象卡通按钮，机器人就会通过无线网络的交流有序的通过门，这些微型机器人上面都跑Linux，选择老鼠按钮，机器人就会想上面说的第二种情况无次序的通过门。     &lt;br /&gt;儿童可以通过这个游戏了解一下微机器人的通信和控制知识。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-qgEzPwsNnpc/TiIQpLISQFI/AAAAAAAAAaI/za_ze3ut5EY/s1600-h/Maus_Escape_Scenario%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Maus_Escape_Scenario" border="0" alt="Maus_Escape_Scenario" src="http://lh3.ggpht.com/-sNjTXAUydVY/TiIQp_yt7EI/AAAAAAAAAaM/PWCXSWt7Gts/Maus_Escape_Scenario_thumb%25255B4%25255D.png?imgmax=800" width="404" height="281" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;第二个是关于&lt;strong&gt;控制机器手臂&lt;/strong&gt;的小游戏，两个儿童可以通过Wii的控制手柄Wiimote来进行游戏，游戏的目标就是让机器手能够抓住一个塑料积木块移到目标位置，为了保证安全，我们不让儿童直接控制机器手，而采用让儿童完成指令然后让机器手自动完成运行的形式。首先可以得到一组Key，这两个儿童必须按照上面的指令，“同步”地使用Wii手柄完成游戏上出现的一组动作（有四个），如果不同步，必须重复，完成之后，这两个儿童必须摇晃Wiimote，同时游戏屏幕上会出现他们摇晃Wiimote的次数，他们摇晃的次数相加的数量越大机器手移动的距离也就越远。然后继续重复，上面的过程，机器手就会继续进行移动，最终移到目标位置，然后将抓到的塑料块放下。下面是我做的游戏的GUI，如果GUI启动，主窗口会同时显示关于机器手运行的实时视频和游戏的指令和各种信息（显示渲染使用的是SDL库，并使用了一个简单的游戏引擎，实时视频的接受和解码使用的是libvlc库），记录了玩家需要的时间，玩家的名字，花费的时间，玩家的名字可以通过我们做的一个网页输入，我们的游戏GUI也会自动从网上的数据库上读取玩家的信息。     &lt;br /&gt;儿童可以通过这个游戏了解一下机器手的控制知识，体验一下人机交互的感觉。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-dOlA_oPxfmk/TiIQqpSFKdI/AAAAAAAAAaQ/s9nG44X_Xlc/s1600-h/Maus_GUI%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Maus_GUI" border="0" alt="Maus_GUI" src="http://lh3.ggpht.com/-qQ2-I4xIglg/TiIQrF5EtZI/AAAAAAAAAaU/nFj55UHPzJs/Maus_GUI_thumb%25255B1%25255D.png?imgmax=800" width="404" height="339" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;周记的最后再写点东西，周五和六晚上，和两个PB电子系的老同学一起吃了饭，聊聊社会的乱象，感慨一下生活，分享一下人生感悟，闲扯一下工作上的压力，遇到的趣事，大家都已经或即将步入30，突然大家也觉得自己已经老了很多。简单总结一下我们这些中年男子的感悟就是：时不待我，现在应该做到的事情就是，&lt;strong&gt;好好把握人生的精华时光，活在当下，珍惜现在身边的人和事。&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;附注：&lt;/p&gt;  &lt;p&gt;[1]著名的卡通老鼠，&lt;a href="http://en.wikipedia.org/wiki/Die_Sendung_mit_der_Maus"&gt;http://en.wikipedia.org/wiki/Die_Sendung_mit_der_Maus&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3758461791108720709?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3758461791108720709/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3758461791108720709' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3758461791108720709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3758461791108720709'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/07/blog-post_17.html' title='上周小记 -- 我的两个简单的人机交互的小游戏'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-sNjTXAUydVY/TiIQp_yt7EI/AAAAAAAAAaM/PWCXSWt7Gts/s72-c/Maus_Escape_Scenario_thumb%25255B4%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3204554918400537208</id><published>2011-07-04T00:57:00.001+02:00</published><updated>2011-07-04T01:03:08.776+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>铁打的营盘流水的兵</title><content type='html'>&lt;p&gt;上个星期二我的一个同事“小埃及人”博士毕业了，答辩完成后，在庆祝的自助餐上，他问我：你打算什么时候毕业呢。呃，我说，应该还要很多年吧。   &lt;br /&gt;其实我一点也不想毕业，完全没有在意博士毕业的事情，很喜欢现在的生活，想一直做大龄学生。读博虽然收入微薄，工作压力大，工作时间很长，但是可以做自己喜欢做的事情，每天都可以“玩到”很多好玩的微型机器人，高性能服务器，复杂的实验平台，还有很多“大玩具”，上班的时候随便上网，上班不用打卡，有时还会去旁听一下我觉得有趣的课，这对我来说简直是一个完美的工作，有这些，什么收入，工作压力，都不是问题，我自己一直是一个超级知足的人。&lt;/p&gt;  &lt;p&gt;我的一个台湾同事小C已经辞职了，过两天要回台湾，研究所真是一个铁打的营盘，总是有流水的兵，才这几天“小埃及人”毕业了，小C辞职了，还有另一个同事，“光头土人”也是最后一次来上班，想到以后，在他们的位置上看不到他们，还是有点伤感。&lt;/p&gt;  &lt;p&gt;每天中午12点45都要和“小埃及人”还有几个同事吃午餐，他个子比较小，而且是埃及来的，所以我称他为“小埃及人”，这是小C给他取的外号。他的硕士本科学的是计算机科学，博士研究的是图像处理，体育运动中图像追踪系统。“小埃及人”信基督教，而且很虔诚，每年有超长的时间在吃素，他常常说他们这些信基督教的人在埃及这种穆斯林国家常常受到迫害，“小埃及人”很喜欢看youtube，玩facebook，踢足球，英语很好，还喜欢把程序编得复杂，我在半年陆陆续续在读和改写他以前写的一些代码，真的深有体验。&lt;/p&gt;  &lt;p&gt;“光头土人”，他的发型当然是光头，德籍土耳其人，从小在德国长大，硕士学的是计算机科学专长CUDA和OpenMP，家乡是卡塞尔，喜欢打电话，为人很热心，喜欢自嘲并将一些笑话和故事，常常可以看见他找mm聊天，中午喜欢喝食堂的汤，不喜欢吃“四只脚”动物的肉，有一双很漂亮的墨绿色的眼睛，看人的时候总是让人觉得很深情，他呆在我们所里大概只有半年吧，现在要到工业界发展。&lt;/p&gt;  &lt;p&gt;小C其实也就比我小一岁半吧，他在我们所已经工作的快两年了，人非常nice，因为和小C住得近，几乎每天都和他一起8点50坐大学专线到研究所，下班也常常和他一起坐大学专线回家，和他在路上胡扯很有乐趣。小C的英文，德文，中文甚至是闽南语都说的非常好，这得益于他丰富的求学经历，因为他老爸常年被公司外派到欧洲，所有他在英国和台湾读过小学，在台湾和德国读了中学，最后在德国汉堡读完大学，和我一样他也是学电子的，但是主修通讯，专长VHDL。因为他英文极佳，以前我的SA和DA都是他改的，他还改过Lin的MA。小C钢琴弹得很好，钢琴弹的好的人反应都快，这样玩Call of Duty就非常厉害了，先天优势，他玩射击类游戏非常强悍，而且他也非常喜欢玩。我和Lin还有他和他的女友今年还一起去了一次荷兰的Roermond的Outlet，复活节的时候还一起参加的瑞士的旅行，这些都是一些很有趣的回忆。&lt;/p&gt;  &lt;p&gt;唉，铁打的营盘流水的兵，让一些小小的回忆藏在这里吧，祝他们平安顺利。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3204554918400537208?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3204554918400537208/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3204554918400537208' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3204554918400537208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3204554918400537208'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/07/blog-post.html' title='铁打的营盘流水的兵'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3152365540574395754</id><published>2011-06-21T17:59:00.001+02:00</published><updated>2011-06-21T17:59:44.207+02: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;p&gt;今天下午觉得工作效率很低，所以不想上班，直接回家，随手写一些东西吧。    &lt;br /&gt;最近工作效率很低，刚刚读了《程序员的思维修炼：开发认知潜能的九堂课》，才明白多任务处理对生产力会造成重大损失，工作时我常常喜欢多任务工作，看来这是错误的。     &lt;br /&gt;书中提到：     &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;一项研究发现，一般情况下，多任务处理将耗费你20%至40%的生产力。多任务处理在这里是指在不同的抽象层次上执行多个并发任务。而在同一代码区域休整几个错误不能算作多任务处理，回几个类似的电话或做多道菜也不算。当你中断代码修正而去回应无关的即时消息、电子邮件或电话时，或者快速浏览新闻网站时，你才会遇到麻烦。      &lt;br /&gt;科学家认为，试图把注意力同时放在几件事情上，意味着你在每件事情上都会处理得很差。如果你持续中断正在进行的任务，去检查电子邮件或者回复即时消息，你的有效智商会下降10分。相比之下，吸大麻烟卷导致下降的智商仅4分。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;前几天读了一本书《The Research Student's Guide to Success》，上面提到PhD的定义，很有趣，但是很真实。&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;“A PhD is about finding out more and more about less and less until one eventually knows everything about nothing.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;据《程序员的思维修炼：开发认知潜能的九堂课》说，成为专家之前的积极的实践需要四个条件：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;1.需要一个明确定义的任务       &lt;br /&gt;2.任务需要有适当的难度——有挑战性但可行       &lt;br /&gt;3.任务环境可以提供大量反馈，以便于你采取行动       &lt;br /&gt;4.提供重复犯错和纠正错误的机会&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;继续谈编程：     &lt;br /&gt;最近常常使用复制-粘贴式编程（把Google作为IDE的一部分），很多情况下缺乏思考，这样不可取，这绝不是积极的实践。     &lt;br /&gt;好的程序员能写出人能读懂的代码，这谁都知道，但是我们是否常常问问自己，自己是否以“好程序员”的标准来要求自己，去写让人读懂的代码。     &lt;br /&gt;刚刚还看到一个有趣的说法，很深刻：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;Programming as an intellectual activity is the only art form that allows you to create interactive art （编程能够创造出交互式艺术作品的艺术形式）. You can create projects that other people can play with, and you can talk to them indirectly. No other art form is quite this interactive. Movies flow to the audience in one direction. Paintings do not move. Code goes both ways. [出处]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;[出处] http://learnpythonthehardway.org/book/advice.html&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3152365540574395754?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3152365540574395754/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3152365540574395754' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3152365540574395754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3152365540574395754'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/06/blog-post_21.html' title='读书随笔'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-9029139625520324101</id><published>2011-06-20T00:02:00.001+02:00</published><updated>2011-06-20T00:04:00.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='读书笔记'/><title type='text'>随机性</title><content type='html'>&lt;p&gt;很久没有写读书笔记了，最近也没有读什么“闲书”，忙着啃一些工作上需要的工具书。今天来简单记录一下这个周末读的《随机致富的傻瓜》，让人看得入迷，美中不足的是中文版翻得有些生涩。纳西姆·塔勒布（Nassim Taleb）的这本书妙趣横生，有很有知识性。   &lt;br /&gt;以下是一些书摘，作者的观点独具一格，令人玩味无穷：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;这本书提到了三个锦囊：     &lt;br /&gt;一、偏态。概率分布上的不对称，黑天鹅事件的出现就是最典型的偏态。现实意义就是失败的代价过于沉重、难以承受，那么这件事成功的概率有多高都无关紧要。      &lt;br /&gt;二、存活者偏差。由于我们只看到成功者，而由此形成对机遇的歪曲看法。比如说我们认为长的漂亮的人薪水比较高，其实是我们只会注意那些薪水比较高的人，或者说那些薪水比较高的人容易引起我们的注意罢了。      &lt;br /&gt;三、路径依赖。有点像物理学上的惯性，人们过去的选择决定了他们现在和未来可能的选择。要完全摆脱路径依赖，就要完全不受过去行为的束缚，摆脱了路径依赖，每一天来说都是一张白纸。&lt;/p&gt;    &lt;p&gt;时间尺度短的新闻充斥噪声，时间尺度长的历史中噪声则多已剔除。&lt;/p&gt;    &lt;p&gt;如果一年报酬率为15%，波动性为每年10%，那么，任何一年赚钱的概率为93%，一个月为67%，一天为54%，任何一秒赚到钱的概率只有50.02%……在很短的时间尺度内，我们观察到的是变异性而非报酬率，也就是说，噪声湮没了有用的真实的信息，使我们情绪失控痛苦不已。 &lt;/p&gt;    &lt;p&gt;投资人和企业要赚的不是概率，而是白花花的钞票。因此对他们来说，某个事件发生的可能性多大并不重要，重要的是那件事发生时能赚多少钱。利润出现的频率有多高并不重要，结果多少才重要。&lt;/p&gt;    &lt;p&gt;财务工程financial engineering的应用就带有浓厚的伪科学成分。应用这些方法的人，衡量风险是以过去的历史作为未来的指针。这里我们只想说，由于分布有可能缺乏定常性，这整个观念可能大错特错，且必须付出非常惨痛的代价。&lt;/p&gt;    &lt;p&gt;致富纯粹是自私行为，不是社会行为。资本主义的优点在于社会能够善用人们的贪婪，而不是他们的善行，同时也不需要颂扬这种贪婪为一种道德后知性成就。成为有钱人不是一种道德成就。&lt;/p&gt;    &lt;p&gt;常识不过是18岁以前学到的错误观念，路径依赖是理性思考的敌人。&lt;/p&gt;    &lt;p&gt;容易受随机性愚弄的性格特征：     &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;/p&gt;    &lt;p&gt; 我们有必要在知识中接受不对称;有些情况下，利用统计学和计量经济学是有帮助的。但我不希望自己的生活依赖于它。如果统计科学能够在哪些方面给我带来好处，我就用它。如果它带来一种威胁，那么我就不用。我要去掉过去资料中的危险成分，只利用它的精华。在此前提下，我要利用统计学和归纳法来下富有进取性的赌注，但我不会用它们来对风险和资金损失进行管理。根据从一些观察中得来的想法（其中包括过去历史)进行交易，然而又采取措施以确保如果他们弄错了的话，损失会限制在最小的范围内(而且这种概率不从过去数据中得出)。在采用一种交易策略之前就知道哪些事件会证明他们的想法是错误的，而且为此留下余地。一旦那种情况出现，他们就会中止交易。这叫做止损点(stop loss)，这是一个预先确定下来的退出点，是一种防范黑天鹅的措施。      &lt;br /&gt;       &lt;br /&gt; 要重新建立一个较少信息、较多决定性的古代社会，好比说生活在19世纪，但同时还要能享受到技术进步的一些好处，一切医学领域里的突破以及我们这个时代在社会公平方面取得的所有成就。这样一来我就拥有一切事物中最好的东西了。这就叫进化。 &lt;/p&gt;    &lt;p&gt;人们总把科学与科学家混为一谈。科学是伟大的，但科学家个体却是危险的。他们是人，人类所具有的认识偏差他们都具有，而且可能更甚于普通人。因为多数科学家都比较顽固，否则他们哪来的那种耐力和精力去完成交给他们的那些艰巨任务。 科学家有时不得不像个廉价的辩护律师一样行为，而不像个纯正的追求真理的人。 &lt;/p&gt;    &lt;p&gt;命运女神唯一不能控制的东西，是你的行为。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最后我来说一下：其实我们经常低估随机现象，在生活中我们对于随机性的无视与误解随处可见。重视随机性，使用随机性对生命以及的钱财进行了解，这样才可能避免风险。   &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-9029139625520324101?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/9029139625520324101/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=9029139625520324101' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/9029139625520324101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/9029139625520324101'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/06/blog-post.html' title='随机性'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-1851299111345253964</id><published>2011-06-08T23:49:00.001+02:00</published><updated>2011-06-08T23:52:07.386+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='工具使用技巧'/><title type='text'>使用EA（Enterprise Architecture）自动生成UML图</title><content type='html'>&lt;p&gt;使用EA（Enterprise Architecture）已经一段时间了，这里谈谈一个小技巧 -- 自动生成UML图。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;a. 新建一个Project，add一个class mode，（如果建的是空Project，请在Project Browser的Model中add a package） &lt;/li&gt;    &lt;li&gt;b. 在Project文件夹上点击鼠标右键 选中code engineering 然后选Import Source Directory，然后可以自己做一些设定，例如Source Type的设定等等 &lt;/li&gt;    &lt;li&gt;c. 生成完毕后，可以在UML 类图就会出现在project browser里面，点击这些类图就会发现挤成一团，我们可以使用Layout Diagram图标，进行自动排布，如下图所示。这个图标在Diagram Toolbar里面，如果没有找到Diagram Toolbar，可以点击View--&amp;gt;Toolbar--&amp;gt;Diagram &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-MH-x6KtnobA/Te_uH8fa7bI/AAAAAAAAAZc/Cq98gGzoduE/s1600-h/EA%252520Layout%252520Diagram%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="EA Layout Diagram" border="0" alt="EA Layout Diagram" src="http://lh4.ggpht.com/-hTnX3Qd4244/Te_uZml67aI/AAAAAAAAAZs/WuQowPxu1sg/EA%252520Layout%252520Diagram_thumb%25255B1%25255D.png?imgmax=800" width="582" height="136" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;大功告成，很简单吧，如果不满意，觉得我们的class diagram显示太多信息，可以在图中点击这个class，然后点鼠标右键，选Feature Visibility，然后可以进行设定，可以对Attribute和Operation的可见性进行调整，如下图所示。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-DNshJLCD5Bc/Te_ual6cwsI/AAAAAAAAAZw/Fg04Amgojqc/s1600-h/EA%252520Feature%252520Visibility%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="EA Feature Visibility" border="0" alt="EA Feature Visibility" src="http://lh4.ggpht.com/-ceYa-2Y0J28/Te_ud_WdDiI/AAAAAAAAAZ0/CvVfioGnP1s/EA%252520Feature%252520Visibility_thumb%25255B1%25255D.png?imgmax=800" width="450" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;如果想保存我们生成的UML diagram成为图形格式，可以在Menu中选择Diagram，然后选择Save Image..，更简单的方法就是按快捷键啦，也就是ctrl+T。    &lt;br /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Sparxsystems提供的UML 2.3教程也相当不错这里推荐一下：    &lt;br /&gt;&lt;a href="http://www.sparxsystems.cn/resources/uml2_tutorial/index.html"&gt;http://www.sparxsystems.cn/resources/uml2_tutorial/index.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;版权声明：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者hanyionet信息。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-1851299111345253964?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/1851299111345253964/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=1851299111345253964' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1851299111345253964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1851299111345253964'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/06/eaenterprise-architectureuml.html' title='使用EA（Enterprise Architecture）自动生成UML图'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-hTnX3Qd4244/Te_uZml67aI/AAAAAAAAAZs/WuQowPxu1sg/s72-c/EA%252520Layout%252520Diagram_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4402382308193741256</id><published>2011-06-07T23:27:00.001+02:00</published><updated>2011-06-07T23:27:22.115+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><title type='text'>关于 Side-by-Side 问题的解决</title><content type='html'>&lt;p&gt;上个月回国20天，回来上班也比较忙，没有更新博客。    &lt;br /&gt;今天写一些关于Side-by-Side error或Side-by-Side Configuration Issues，其实我很久以前就想记录一下解决方法。&lt;/p&gt;  &lt;p&gt;什么情况下会遇到Side-by-Side Configuration Issues呢？    &lt;br /&gt;如果在Win7下使用VS2008编译一个程序，然后换一台WinXP机器下运行就有可能会出现Side-By-Side errors     &lt;br /&gt;如下警告：     &lt;br /&gt;The application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.&lt;/p&gt;  &lt;p&gt;如果不同机器的Win7也许会有如下警告：    &lt;br /&gt;The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;附注一些关于WinSxS的介绍：     &lt;br /&gt;百度百科：&lt;a href="http://baike.baidu.com/view/599776.htm"&gt;http://baike.baidu.com/view/599776.htm&lt;/a&gt;     &lt;br /&gt;维基百科：&lt;a href="http://en.wikipedia.org/wiki/Side-by-side_assembly"&gt;http://en.wikipedia.org/wiki/Side-by-side_assembly&lt;/a&gt;     &lt;br /&gt;WinSxS文件夹体积虽然很大，但是并不神秘。简单来说系统使用“WinSxS”（Windows Side-by-Side）文件夹来存储各个版本的Windows 组件，减少因为动态链接库（Dynamic Link Libraries，DLL）引起的配置问题（DLL hell）。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;可执行文件的或DLL的manifest。可以使用UltraEdit打开来看看。Manifest information一般在文件的最后，应该可以发现类似XML格式的描述，这就是Mainfest information。     &lt;br /&gt;但是也可以不使用UltraEdit来打开文件找Mainfest information，可以使用Kenny Kerr 编的工具很方便地查看manifest information。请见：     &lt;br /&gt;&lt;a href="http://weblogs.asp.net/kennykerr/archive/2007/07/10/manifest-view-1-0.aspx"&gt;http://weblogs.asp.net/kennykerr/archive/2007/07/10/manifest-view-1-0.aspx&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;使用这个工具随便开一个application试试，如下图所示，我们可以看到Microsoft.VC80.DebugCRT表面使用的是VS2005的Debug的C Runtime (CRT)。X86架构（processor architecture），版本为8.0.50727.762。1fc8b3b9a1e18e3b (public key token): A unique ID for C Runtime。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-qGLbZSSeDmA/Te6XtY_5WxI/AAAAAAAAAZU/m7a1s2nDZJE/s1600-h/manifest%252520view%252520example%25255B8%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="manifest view example" border="0" alt="manifest view example" src="http://lh3.ggpht.com/-nij1_Q8dAYo/Te6XuMQk3II/AAAAAAAAAZY/WxhzZ3a2XxM/manifest%252520view%252520example_thumb%25255B6%25255D.png?imgmax=800" width="504" height="342" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;接下来我们要做的就是在%WINDIR%WinSxS里找找是否有类似x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.762_none_....这样的文件，这个文件名也就是由manifest information所组成的。    &lt;br /&gt;如果没有，我们就需要installer并包含这个文件，然后再安装这个installer，Side-by-Side的问题就可以解决。     &lt;br /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;br /&gt;延伸一下：     &lt;br /&gt;也许我们会想要绕开（bypass）WinSxS对于CRT/MFC/ATL DLLs的处理，可以看看&lt;a href="http://blog.kalmbachnet.de/?postid=80"&gt;这篇文章&lt;/a&gt;。&lt;/p&gt;  &lt;p&gt;从VC8开始，我们就有两个方式分配CRT/MFC/ATL的DLL。&lt;/p&gt;  &lt;p&gt;1. 将DLLs和我们的application放在相同目录中并且放入一个有效的manifest对于这些DLLs    &lt;br /&gt;2. 安装redist.exe，并且DLL将安装到WinSxS目录     &lt;br /&gt;&amp;#160; &lt;br /&gt;如果我们想要和全局的DLLs无关，我们也许会认为将DLLs放入applications目录就可以了，&lt;strong&gt;但是这是一个误解&lt;/strong&gt;。     &lt;br /&gt;其实如果DLL已经被安装在WinSxS目录，那么local的DLLs将会被忽略。     &lt;br /&gt;绕开WinSxS其实很简单，只要从我们编译生成的.exe和.dll中manifests中移除“publicKeyToken”就可以了。     &lt;br /&gt;&amp;#160; &lt;br /&gt;接上图例子，我们只需要删除publicKeyToken=&amp;quot;1fc8b3b9a1e18e3b&amp;quot;就可以了。&amp;#160; &lt;br /&gt;&amp;#160; &lt;br /&gt;&amp;#160; &lt;br /&gt;&amp;#160; &lt;br /&gt;参考以及延伸阅读：     &lt;br /&gt;Resolving Side-by-Side Configuration Issues：&lt;a href="http://buffered.io/2008/05/17/resolving-side-by-side-configuration-issues/"&gt;http://buffered.io/2008/05/17/resolving-side-by-side-configuration-issues/&lt;/a&gt;     &lt;br /&gt;Microsoft Visual C++ 2008 Redistributable Package (x86)：&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&amp;amp;displaylang=en&lt;/a&gt;     &lt;br /&gt;The Secret Of Windows Vista / Windows 7 Winsxs Folder.：&lt;a href="http://www.winvistaclub.com/f16.html"&gt;http://www.winvistaclub.com/f16.html&lt;/a&gt;     &lt;br /&gt;How to bypass the WinSxS for CRT/MFC/ATL DLLs：&lt;a href="http://blog.kalmbachnet.de/?postid=80"&gt;http://blog.kalmbachnet.de/?postid=80&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-4402382308193741256?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4402382308193741256/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4402382308193741256' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4402382308193741256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4402382308193741256'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/06/side-by-side.html' title='关于 Side-by-Side 问题的解决'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-nij1_Q8dAYo/Te6XuMQk3II/AAAAAAAAAZY/WxhzZ3a2XxM/s72-c/manifest%252520view%252520example_thumb%25255B6%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-553876740224091160</id><published>2011-04-12T17:24:00.001+02:00</published><updated>2011-04-12T17:24:48.992+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scientific Computing'/><title type='text'>科学计算Scientific Computing笔记（1）- 介绍</title><content type='html'>&lt;p&gt;很久没有更新博客了，今天给自己放半天假，写一篇学习笔记，最近工作需要用到科学计算Scientific Computing的知识，打算用半自学的方式学习科学计算Scientific Computing这门课程，所谓半自学也就是我同时也旁听的我们大学的这门课。 &lt;/p&gt;  &lt;p&gt;谈到Scientific Computing在Geometry Processing的应用，我们一定有先谈谈几何处理，下图就是所谓的几何处理&lt;strong&gt;Geometry Processing&lt;/strong&gt;（利用应用数学、计算机科学、工程学等领域理论设计高效地获取、重建、分析、处理、模拟及传输复杂三维模型的快速成长的研究领域。[wiki]）的简介。可以看到，&lt;strong&gt;它和Modeling, Visualization还有Animation&lt;/strong&gt;都有密切的关系。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TaRuuetT58I/AAAAAAAAAZA/I5jW8l8hubE/s1600-h/geometry%20processing%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="geometry processing" border="0" alt="geometry processing" src="http://lh6.ggpht.com/_7rEkBQiDq6I/TaRuuzVSxZI/AAAAAAAAAZE/9kbMJJKxS4w/geometry%20processing_thumb%5B1%5D.png?imgmax=800" width="421" height="300" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;关于Modeling     &lt;br /&gt;&lt;/strong&gt;这里列几个例子：    &lt;br /&gt;3D Laser Scanning，具体步骤为：    &lt;br /&gt;Physical model --&amp;gt; 3D Laser Scanner --&amp;gt; Set of raw scans --&amp;gt; Reconstructed model &lt;/p&gt;  &lt;p&gt;Engineering Applications 例如下图所示：&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TaRuvVxgzNI/AAAAAAAAAZI/2gPH-LirusA/s1600-h/Engineering%20Applications%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Engineering Applications" border="0" alt="Engineering Applications" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TaRuv8uoNuI/AAAAAAAAAZM/8FaLWh_ZTIw/Engineering%20Applications_thumb.png?imgmax=800" width="244" height="133" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Smoothing &amp;amp; Fairing 平滑，光顺处理 &lt;/p&gt;  &lt;p&gt;Mesh Parameterization 网格参数化 - Laplace Equation &amp;amp; Conjugate Gradients &lt;/p&gt;  &lt;p&gt;Shape Deformation 图像变形 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;关于Animation     &lt;br /&gt;&lt;/strong&gt;这里列几个例子：    &lt;br /&gt;Rigid Bodies, Collisions    &lt;br /&gt;Elastic Deformations    &lt;br /&gt;Face Animation    &lt;br /&gt;Cloth &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;很多人都知道Geometric Modeling Based on Meshes其实Scientific Computing可以作为从Geometric Modeling Based on Meshes 到 Physically-Based Simulation的桥梁。 简单来说做比较复杂的电脑动画，和电子游戏Scientific Computing的知识是不可缺少的。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Scientific Computing&lt;/strong&gt;有什么比较重要和&lt;strong&gt;基础的内容&lt;/strong&gt;呢? &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Mathematical modeling 数学模型 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Partial differential equation (PDE) 偏微分方程&lt;/strong&gt;（指含有未知函数及其偏导数的方程。描述自变量、未知函数及其偏导数数之间的关系。分为线性偏微分方程式与非线性偏微分方程式。[wiki]） &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Discretization 离散化 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4. System of linear equations 线性方程系统 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5. Efficient solver 高效解决 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;参考出处：   &lt;br /&gt;[wiki]:维基百科    &lt;br /&gt;Trefethen, Bau, Numerical Linear Algebra, SIAM, 1997    &lt;br /&gt;Demmel, Applied Numerical Linear Algebra, SIAM, 1997    &lt;br /&gt;Press, Teukolsky, Vettering, Flannery, Numerical Recipes in C++: The Art of Scientific Computing, Cambridge University Press, 2002 &lt;/p&gt;  &lt;p&gt;版权声明：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者hanyionet信息。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-553876740224091160?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/553876740224091160/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=553876740224091160' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/553876740224091160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/553876740224091160'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/04/scientific-computing1.html' title='科学计算Scientific Computing笔记（1）- 介绍'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/TaRuuzVSxZI/AAAAAAAAAZE/9kbMJJKxS4w/s72-c/geometry%20processing_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-5074932243081615859</id><published>2011-03-13T16:12:00.001+01:00</published><updated>2011-03-13T16:12:33.327+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='流媒体技术'/><title type='text'>UDP TCP 包头(Headers)和其效率(efficiency)分析</title><content type='html'>&lt;p&gt;这篇文章将非常简单地讨论UDP TCP 包头(Headers)和它们的效率(efficiency)分析，尽可能的利用图表进行说明。 &lt;/p&gt;  &lt;p&gt;使用以太网(Ethernet)的一个优点是它具有非常低的错误率。这对UDP很有利，这是因为UDP没有纳入纠错。让我们深入看看一个以太网帧，下图为Ethernet Header： &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TXzezdzzM5I/AAAAAAAAAX8/5_t3VIM4fl4/s1600-h/Ethernet_header%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ethernet_header" border="0" alt="Ethernet_header" src="http://lh6.ggpht.com/_7rEkBQiDq6I/TXzez9ymNLI/AAAAAAAAAYA/8zBOwtEiJTA/Ethernet_header_thumb%5B2%5D.png?imgmax=800" width="610" height="107" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;在这个图中我们可以看到，以太网实现FCS(帧校验序列 Frame Check Sequence)。由此产生的头18个字节(Bytes)（4字节的CRC(循环冗余校验 Cyclic redundancy check) + 14字节）。 &lt;/p&gt;  &lt;p&gt;我们已知的最小的IP header有20 Bytes并且UDP有8 Bytes。如下图所示Packet encapsulation：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TXze0SKo_WI/AAAAAAAAAYE/__VBMrkJb5U/s1600-h/UDP_packet_encapsulation%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="UDP_packet_encapsulation" border="0" alt="UDP_packet_encapsulation" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TXze0zh5RtI/AAAAAAAAAYI/2zDktJptVWs/UDP_packet_encapsulation_thumb%5B1%5D.png?imgmax=800" width="570" height="108" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;对比TCP/IP，我们可以得出 28/40 = 40% 更多的header Bytes对比UDP/IP。 &lt;/p&gt;  &lt;p&gt;由下图可知“n”的最大值为7。 使用这个值, 我们可以得到最大效率(maximum    &lt;br /&gt;efficiency), 因为这样是最优的. 更高的值将超出MTU(Maximum Transmission Unit)。 &lt;/p&gt;  &lt;p&gt;Header RTP with MPEG2-TS encapsulated 如下图所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TXze1c3AJNI/AAAAAAAAAYM/gj7ddnwnTiQ/s1600-h/Header%20RTP%20with%20MPEG2-TS%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Header RTP with MPEG2-TS" border="0" alt="Header RTP with MPEG2-TS" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TXze1q_pxrI/AAAAAAAAAYQ/5uOHXuTng6Y/Header%20RTP%20with%20MPEG2-TS_thumb%5B2%5D.png?imgmax=800" width="693" height="113" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;数据长度取决于MPEG2的Codec，但在MPEG2-TS传输中有188Bytes加上4个Bytes的Playload。理论上最高效率：（Ethernet/IP/UDP/RTP/MPEG2-TS）是94％。&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TXze10OovgI/AAAAAAAAAYU/y5iVfpn20jY/s1600-h/mpeg-ts-header%5B3%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mpeg-ts-header" border="0" alt="mpeg-ts-header" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TXze3CdotbI/AAAAAAAAAYY/CnToOoj-GfQ/mpeg-ts-header_thumb%5B1%5D.gif?imgmax=800" width="573" height="326" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;以下图表显示了最大理论Efficiency对于TCP/UDP RTP：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TXze3tTVlbI/AAAAAAAAAYc/YANFJ53Toas/s1600-h/Max%20Theoretically%20Efficiency%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Max Theoretically Efficiency" border="0" alt="Max Theoretically Efficiency" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TXze4Ii4YpI/AAAAAAAAAYg/1ir_UHMWeZk/Max%20Theoretically%20Efficiency_thumb%5B3%5D.png?imgmax=800" width="671" height="479" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Internet_Protocol"&gt;http://en.wikipedia.org/wiki/Internet_Protocol&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Cyclic_redundancy_check"&gt;http://en.wikipedia.org/wiki/Cyclic_redundancy_check&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Frame_Check_Sequence"&gt;http://en.wikipedia.org/wiki/Frame_Check_Sequence&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/MPEG_transport_stream"&gt;http://en.wikipedia.org/wiki/MPEG_transport_stream&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://vbrickvip.com/topics/transport_stream.htm"&gt;http://vbrickvip.com/topics/transport_stream.htm&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-5074932243081615859?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/5074932243081615859/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=5074932243081615859' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5074932243081615859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5074932243081615859'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/03/udp-tcp-headersefficiency.html' title='UDP TCP 包头(Headers)和其效率(efficiency)分析'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/TXzez9ymNLI/AAAAAAAAAYA/8zBOwtEiJTA/s72-c/Ethernet_header_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-5714444156148059588</id><published>2011-03-10T23:04:00.001+01:00</published><updated>2011-03-10T23:09:02.756+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='流媒体技术'/><title type='text'>为什么RTP往往是使用UDP，而不是使用TCP封装</title><content type='html'>&lt;p&gt;继续完成“流媒体技术系列”，接上一篇提出的问题：为什么RTP往往是使用UDP，而不是使用TCP封装，接下来简单的解释一下，先摘录一些基本概念，然后使用一个表格进行对比，进一步探讨这个问题。 &lt;/p&gt;  &lt;p&gt;计算机网络OSI模型中，&lt;strong&gt;TCP和UDP为第四层传输层&lt;/strong&gt;的功能。 &lt;/p&gt;  &lt;p&gt;简单的说：TCP传输控制协议(Transmission Control Protocol)是基于连接的协议，也就是说，在正式收发数据前，必须和对方建立可靠的连接。TCP协议能为应用程序提供可靠的通信连接，使一台计算机发出的字节流无差错地发往网络上的其他计算机，对可靠性要求高的数据通信系统往往使用TCP协议传输数据。 &lt;/p&gt;  &lt;p&gt;必须要经过&lt;strong&gt;三次“对话”&lt;/strong&gt;才能建立。    &lt;br /&gt;第1次对话    &lt;br /&gt;A--&amp;gt;&amp;#160;&amp;#160;&amp;#160; 发连接请求数据包&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;B &lt;/p&gt;  &lt;p&gt;第2次对话   &lt;br /&gt;A&amp;lt;--&amp;#160;&amp;#160;&amp;#160; 发送同意连接和要求同步&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;--B &lt;/p&gt;  &lt;p&gt;第3次对话   &lt;br /&gt;A--&amp;gt;&amp;#160;&amp;#160;&amp;#160; 发数据包确认B的要求的同步&amp;#160;&amp;#160;&amp;#160; --&amp;gt;B &lt;/p&gt;  &lt;p&gt;UDP用户数据报协议(User Data Protocol)是与TCP相对应的协议。它是面向非连接的协议，它不与对方建立连接，而是直接就把数据包发送过去！UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。   &lt;br /&gt;UDP例子：“ping”命令测试两台主机之间TCP/IP通信是否正常，就是向对方主机发送UDP数据包，然后对方主机确认收到数据包，如果数据包是否到达的消息及时反馈回来，那么网络就是通的。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;几个使用TCP重要的优点&lt;/strong&gt;：    &lt;br /&gt;1.TCP速率控(TCP rate control)制有经过证明是具有的稳定性和可扩展性。    &lt;br /&gt;2.TCP提供保证delivery, deleting the packet loss efficiently。    &lt;br /&gt;3.TCP是可以助于的越过防火墙。    &lt;br /&gt;4.流量控制(The flow control)。    &lt;br /&gt;5.The transmission windows system有助于优化网络资源的使用。 &lt;/p&gt;  &lt;p&gt;从网上摘抄一段关于&lt;strong&gt;TCP协议的主要功能&lt;/strong&gt;：    &lt;br /&gt;TCP协议的主要功能是完成对数据报的确认、流量控制和网络拥塞；自动检测数据报，并提供错误重发的功能；将多条路径传送的数据报按照原来的顺序进行排列，并对重复数据进行择取；控制超时重发，自动调整超时值；提供自动恢复丢失数据的功能。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;相对TCP，UDP显然更好地使用于实时应用&lt;/strong&gt;，原因如下：    &lt;br /&gt;1.最低开销(Minimum overhead)。    &lt;br /&gt;2.在最大数据从传输速率开始发送。    &lt;br /&gt;3.不重复请求，所以就没有重传（一个单一的数据包丢失在一个的实时应用中并不重要）。    &lt;br /&gt;4.低处理时间(low processing time)。不需要缓冲(No buffers)。 &lt;/p&gt;  &lt;p&gt;与TCP不同，&lt;strong&gt;UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP 比较简单，UDP头包含很少的字节，比TCP负载消耗少。&lt;/strong&gt;下图为TCP的头和UDP的头的格式：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TXlK3akMPFI/AAAAAAAAAXs/Oqy0Kd_75QM/s1600-h/TCP-Header%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TCP-Header" border="0" alt="TCP-Header" src="http://lh6.ggpht.com/_7rEkBQiDq6I/TXlK4BUobRI/AAAAAAAAAXw/AHkbRsjz4zE/TCP-Header_thumb%5B2%5D.png?imgmax=800" width="404" height="185" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TXlK4qphSBI/AAAAAAAAAX0/29CcTgnHk1U/s1600-h/UDP-Header%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="UDP-Header" border="0" alt="UDP-Header" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TXlK5FYZIzI/AAAAAAAAAX4/gxOEyZ1n46c/UDP-Header_thumb%5B1%5D.png?imgmax=800" width="404" height="156" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;TCP协议和UDP协议的差别&lt;/strong&gt;(以表格的形式)：&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="902"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="127"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="209"&gt;TCP&lt;/td&gt;        &lt;td valign="top" width="238"&gt;UDP&lt;/td&gt;        &lt;td valign="top" width="326"&gt;和流媒体的关系&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Header&lt;/td&gt;        &lt;td valign="top" width="209"&gt;20 Byte&lt;/td&gt;        &lt;td valign="top" width="238"&gt;8 Bytes&lt;/td&gt;        &lt;td valign="top" width="326"&gt;UDP更好，少overhead&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Connection&lt;/td&gt;        &lt;td valign="top" width="209"&gt;Connection Oriented，在数据传输前需要建立connection。&lt;/td&gt;        &lt;td valign="top" width="238"&gt;Connectionless，没有connection需要被建立。&lt;/td&gt;        &lt;td valign="top" width="326"&gt;对于Multicast，Connection Oriented是不适合&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Reliability&lt;/td&gt;        &lt;td valign="top" width="209"&gt;可靠 ACK&lt;/td&gt;        &lt;td valign="top" width="238"&gt;不可靠&lt;/td&gt;        &lt;td valign="top" width="326"&gt;可靠性比时间延迟(time delay)不重要。TCP会增加延迟&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Communication&lt;/td&gt;        &lt;td valign="top" width="209"&gt;Two-way双向&lt;/td&gt;        &lt;td valign="top" width="238"&gt;One way单向&lt;/td&gt;        &lt;td valign="top" width="326"&gt;         &lt;p&gt;In UDP, RTCP implements the feedback&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Errors&lt;/td&gt;        &lt;td valign="top" width="209"&gt;Error Correction FEC在整个packet&lt;/td&gt;        &lt;td valign="top" width="238"&gt;Error Correction只在Header Checksum&lt;/td&gt;        &lt;td valign="top" width="326"&gt;UDP使用较少处理Errors时间&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Data flow&lt;/td&gt;        &lt;td valign="top" width="209"&gt;控制data flow用于管理下载速度&lt;/td&gt;        &lt;td valign="top" width="238"&gt;没有控制&lt;/td&gt;        &lt;td valign="top" width="326"&gt;         &lt;p&gt;UDP sends to the same data flow as is encoded the media.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Re-transmit&lt;/td&gt;        &lt;td valign="top" width="209"&gt;需要Repeat&lt;/td&gt;        &lt;td valign="top" width="238"&gt;不需要Repeat&lt;/td&gt;        &lt;td valign="top" width="326"&gt;Repeat也会产生延迟，不适合实时应用&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Delivery Rate&lt;/td&gt;        &lt;td valign="top" width="209"&gt;没有预设。TCP将一直增加直到数据丢失或发现堵塞&lt;/td&gt;        &lt;td valign="top" width="238"&gt;传输速度和流的编码率相吻合&lt;/td&gt;        &lt;td valign="top" width="326"&gt;         &lt;p&gt;UDP适应性更好&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;Client Buffer&lt;/td&gt;        &lt;td valign="top" width="209"&gt;         &lt;p&gt;Receive buffer           &lt;br /&gt;overflow: 如果数据到得太快，receiver发送一个信息给server，使其减慢传输&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="238"&gt;         &lt;p&gt;没有local caching，packet到了媒体播放器直接被处理。&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="326"&gt;Client Buffers也产生延迟&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考：   &lt;br /&gt;深入浅出讲解TCP/UDP协议：&lt;a href="http://tech.163.com/05/0913/11/1THDB8DO00091589.html"&gt;http://tech.163.com/05/0913/11/1THDB8DO00091589.html&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh-cn/传输控制协议"&gt;http://zh.wikipedia.org/zh-cn/传输控制协议&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh-cn/"&gt;http://zh.wikipedia.org/zh-cn/用户数据报协议&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-5714444156148059588?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/5714444156148059588/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=5714444156148059588' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5714444156148059588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5714444156148059588'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/03/rtpudptcp.html' title='为什么RTP往往是使用UDP，而不是使用TCP封装'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/TXlK4BUobRI/AAAAAAAAAXw/AHkbRsjz4zE/s72-c/TCP-Header_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3496402140624704416</id><published>2011-03-03T22:29:00.001+01:00</published><updated>2011-03-03T22:29:18.688+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='流媒体技术'/><title type='text'>实时传输协议RTP (Real-time Transport Protocol)</title><content type='html'>&lt;p&gt;继续完成hanyionet的长期计划，在博客中完成“流媒体技术”系列文章，今天谈谈RTP，其实以前的文章也提到过这个协议。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RTP&lt;/strong&gt;是一个传输协议，具体制定了数据流如何通过IP网络，并且它是流媒体中最重要的标准。所有的媒体流封装在RTP包。它通常是封装在UDP/IP如下图，并与其他譬如ATM或IPv6协议兼容。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TXAIIwmhRdI/AAAAAAAAAXQ/QYYclUa2qqo/s1600-h/rtp_Location%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="rtp_Location" border="0" alt="rtp_Location" src="http://lh6.ggpht.com/_7rEkBQiDq6I/TXAIJtILSDI/AAAAAAAAAXU/m_oneDI8X8A/rtp_Location_thumb%5B1%5D.png?imgmax=800" width="494" height="284" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;RTP主要用于实时数据&lt;strong&gt;多播(multicast)&lt;/strong&gt;，但它也可用于&lt;strong&gt;单播(unicast)&lt;/strong&gt;（例如，如视频点播单向传输）。 &lt;/p&gt;  &lt;p&gt;也许我们都有一个疑问，为什么RTP往往是使用UDP，而不是在TCP封装，hanyionet将在以后的文章做一些解释。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RTP的特征&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;RTP提供多媒体应用正确传输所需的信息：&lt;strong&gt;时间戳(timestamp)，序列编号(sequence numbering)，安全(security)，内容识别(content identification)&lt;/strong&gt;和其他机制。这些服务必须在执行应用层(Application level)，但它不是RTP所负责。因此，RTP协议只是有助于低层(lower layers)对资源的控制和增加可靠性，流量/拥塞控制(flow/congestion control)与其他机制对于实时信息。 &lt;/p&gt;  &lt;p&gt;RTP协议传输实时数据包通过网络，这意味着丢失或损坏的数据包将不重发(not retransmitted)。客户端软件要解决这个问题。另一个问题是，如果连接速度(connection speed)比媒体数据传输速率(media data rate)慢，那么传输播放会不佳或者不能播放。 &lt;/p&gt;  &lt;p&gt;下图为RTP data in an IP packet： &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TXAIKNyRfZI/AAAAAAAAAXY/6T4yO2hsE5Y/s1600-h/rtp_packet%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="rtp_packet" border="0" alt="rtp_packet" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TXAIKfRyQCI/AAAAAAAAAXc/Csg14ZYEvW0/rtp_packet_thumb%5B1%5D.png?imgmax=800" width="518" height="120" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;下图为RTP的Header Format：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TXAIK4ojyYI/AAAAAAAAAXg/bDocTiYWXos/s1600-h/rtp_header%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="rtp_header" border="0" alt="rtp_header" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TXAILZMZ9zI/AAAAAAAAAXk/ZUxcpC43CF8/rtp_header_thumb%5B2%5D.png?imgmax=800" width="516" height="192" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;具体说明请查阅：&lt;a href="http://en.wikipedia.org/wiki/Real-time_Transport_Protocol"&gt;http://en.wikipedia.org/wiki/Real-time_Transport_Protocol&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RTP是如何工作的？&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;这其实是我们比较关心的问题。&lt;strong&gt;时间戳(timestamp)&lt;/strong&gt;是实时应用(real-time applications)领域最重要的信息。时间戳将增加，在第一个字节的数据包被传输，并当每一个包被发送它也将增加。接收器(receiver)使用它来重建原始的时间，并且可以使用正确的速率来播放数据。时间戳也可用于同步不同的数据流，不同的时间属性，如音频和视频数据在MPEG中。 &lt;/p&gt;  &lt;p&gt;另一个重要域是&lt;strong&gt;序列号(sequence number)&lt;/strong&gt;。UDP不提供数据包在一个时序(in timely order)，所以有必要使用序列号，是接受的数据包放置传入正确的顺序，用于数据包丢失时的检测。此外，例如，一些视频格式，当一帧分割成几个RTP包，它们都可以有相同的时间戳。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;负载类型(payload type)&lt;/strong&gt;和&lt;strong&gt;编码/压缩格式(encoding/compression format)&lt;/strong&gt;是必要的负载识别码(payload identifier)。但是，一个RTP发送者每次传输只可以发送一个有效载荷类型，虽然负载类型(payload type)在传输过程中可能会发生变化，例如，调整网络拥塞。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MTU&lt;/strong&gt;“最大传输单位”(Maximum Transmission Unit)。也就是通过TCP/IP协议所传输的数据包最大有多少字节，&lt;strong&gt;MTU值越大，封包就越大&lt;/strong&gt;，理论上可增加传送速率，但MTU值又不能设得太大，因为封包太大，传送时出现错误的机会大增。     &lt;br /&gt;考虑MTU很重要，不要超过它。因为如果一个RTP包超过MTU，它会被路由器分割，这个过程被称为分裂(fragmentation)，如果其中之一丢失了，所有剩余的也将丢失。分裂(fragmentation)也会增加资源的使用。MTU是因网络类型而定，譬如以太网为1500字节。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考资料：    &lt;br /&gt;&lt;a href="http://www.ietf.org/rfc/rfc1889.txt"&gt;http://www.ietf.org/rfc/rfc1889.txt&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3496402140624704416?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3496402140624704416/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3496402140624704416' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3496402140624704416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3496402140624704416'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/03/rtp-real-time-transport-protocol.html' title='实时传输协议RTP (Real-time Transport Protocol)'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/TXAIJtILSDI/AAAAAAAAAXU/m_oneDI8X8A/s72-c/rtp_Location_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3984124032337576778</id><published>2011-02-28T01:04:00.001+01:00</published><updated>2011-02-28T01:04:18.459+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>什么是一顿优质的早餐</title><content type='html'>&lt;p&gt;前几天很偶然地翻阅了一本杂志《时尚健康女士》2011第一期，有一个关于早餐的专题，觉得还不错，这里做一个非常简单的记录。   &lt;br /&gt;什么是一顿优质的早餐，其实很简单： &lt;/p&gt;  &lt;p&gt;1.早餐要占全天能量的1/3   &lt;br /&gt;从能量供应的角度，早，中，晚餐的合理比例应为，30：40：30，也就是说，早餐的能量摄取应为1/3。其中，碳水化合物最好为50%，蛋白质为15%，脂肪为35%。 &lt;/p&gt;  &lt;p&gt;2.保证摄取3类以上的食物   &lt;br /&gt;谷类，蔬菜和水果，鱼肉，奶类和蛋类。    &lt;br /&gt;如果有以上几类中的3类，那么这样的早餐是达标的。 &lt;/p&gt;  &lt;p&gt;3.落实4种营养搭配原则   &lt;br /&gt;其实就是：有干有稀，有荤有素，有粗有细，有菜有肉。 &lt;/p&gt;  &lt;p&gt;中医专家推荐养生的早餐法则   &lt;br /&gt;1.早起不适合吃寒性水果    &lt;br /&gt;因为中医的观点，清晨，身体的阳气是和太阳一样逐渐生发的，吃寒性水果会抑制体内阳气生发。大多数水果是寒性的，例如香蕉，西瓜，李子等等。其实可以吃吃中性的苹果，热性的水果例如木瓜其实就很适合做早餐的搭配。    &lt;br /&gt;2.早餐的组合中如果有一碗粥，很养生&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3984124032337576778?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3984124032337576778/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3984124032337576778' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3984124032337576778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3984124032337576778'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/02/blog-post_28.html' title='什么是一顿优质的早餐'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-109568982226572306</id><published>2011-02-12T15:30:00.001+01:00</published><updated>2011-02-12T15:30:47.688+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><title type='text'>将Qt Application Project改成Qt Library Project</title><content type='html'>&lt;p&gt;很久没有写一些关于Qt的东西，今天介绍一个小方法将Qt Application Project 改成Qt Library Project。    &lt;br /&gt;换句话来说，如果原来使用的是Qt项目，生成exe，后来想要将这个项目生成DLL，那么简单的改变方法如下（在VS2008中）：     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;在project的设置里（没有什么特别的步骤，唯一请注意第三部）：&lt;/p&gt;  &lt;p&gt;1) 定义一个macro 对于Qt，DLL export，&lt;strong&gt;写一个头文件（&lt;/strong&gt;但是也是可以直接使用&lt;span style="color: #000000"&gt;Q_DECL_EXPORT&lt;/span&gt;&lt;strong&gt;）&lt;/strong&gt;，类似和Qt的DLL project自动生成头文件一样。 &lt;/p&gt;  &lt;div style="line-height: 12px; font-family: courier new; font-size: 12px"&gt;&lt;font color="#008080"&gt;1&amp;#160; &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#ifndef&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;MYGLOBAL_H&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;2&amp;#160; &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#define&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;MYGLOBAL_H&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;3&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;4&amp;#160; &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#include&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;QtCore&lt;/span&gt;&lt;span style="color: #ff0000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;qglobal&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;h&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;5&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;6&amp;#160; &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#ifdef&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;MYLIB_LIB&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;7&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;define&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;MY_EXPORT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;Q_DECL_EXPORT&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;8&amp;#160; &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#else&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;9&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;define&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;MY_EXPORT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;Q_DECL_IMPORT&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;10 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#endif&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;11 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;12 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#endif&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;MYGLOBAL_H&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;/table&gt;&lt;/div&gt;  &lt;p&gt;2) 将Project的Configuration Tpye改成Dynamic Library (.dll) &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3) 修改Prprocessor Definitions设定：      &lt;br /&gt;MYLIB_LIB       &lt;br /&gt;QT_DLL       &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;4) linker--&amp;gt;Ouput File 改成生成.dll    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;5) 在我们想要export的class加入上面写的头文件    &lt;br /&gt;和一般dll export类似，只是我们这里使用的是我们定义的export的macro&lt;/p&gt;  &lt;div style="line-height: 12px; font-family: courier new; font-size: 12px"&gt;&lt;font color="#008080"&gt;1 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;MY_EXPORT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;MainWindow&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;QMainWindow&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;/table&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;附注&lt;/strong&gt;：     &lt;br /&gt;如果只是简单的使用__declspec(dllexport) ，而不是使用Qt的export DLL的macro，如果使用生成的DLL会出现类似这样的错误。     &lt;br /&gt;error LNK2001: unresolved external symbol &amp;quot;public: static struct QMetaObject const XXX::staticMetaObject&amp;quot;     &lt;br /&gt;非常简单来说，Qt的object比较特殊，不能直接通过常用的__declspec(dllexport)进行export。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-109568982226572306?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/109568982226572306/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=109568982226572306' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/109568982226572306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/109568982226572306'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/02/qt-application-projectqt-library.html' title='将Qt Application Project改成Qt Library Project'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4853564527730840673</id><published>2011-02-10T23:59:00.001+01:00</published><updated>2011-02-11T00:00:16.652+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='数字图像处理'/><title type='text'>数字图像处理笔记（2）</title><content type='html'>&lt;p&gt;继续记录Digital Image Processing一些重要的概念，关于图像解析度，以实用知识为主。 &lt;/p&gt;  &lt;p&gt;逐行扫描（Progressive scan）：每一帧图像由电子束顺序地一行接着一行连续扫描而成，这种扫描方式称为逐行扫描。   &lt;br /&gt;隔行扫描（Interlaced scan）：每一帧图像通过两场扫描完成则是隔行扫描，两场扫描中，第一场(奇数场)只扫描奇数行，而第二场(偶数场)只扫描偶数行。隔行扫描技术在传送信号带宽不够的情况下起了很大作用，逐行扫描和隔行扫描的显示效果主要区别在稳定性上面，隔行扫描的行间闪烁比较明显，逐行扫描克服了隔行扫描的缺点，画面平滑自然无闪烁。在电视的标准显示模式中，i表示隔行扫描，p表示逐行扫描。[1] &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;有用小常识：     &lt;br /&gt;&lt;/strong&gt;a) &lt;strong&gt;视觉惰性&lt;/strong&gt;（视觉暂留特性）：每秒换帧24次，人会产生连续感。    &lt;br /&gt;b) &lt;strong&gt;图像的闪烁感&lt;/strong&gt;：人在较低频率的光脉冲刺激下，会产生一明一暗的闪烁感，这是有光和无光在亮度感觉上的差别所致。把闪烁的频率提高到临界闪烁频率（45.8Hz）以上，由于视觉惰性的作用就感觉不到闪烁了。电影的帧频为24，其实也写成24p（电影胶片），利用光活门，使每帧画面闪亮两次，达到每秒闪亮48次，超过临界闪烁频率。    &lt;br /&gt;c) &lt;strong&gt;场频率&lt;/strong&gt;：如使用隔行扫描，就会有场频率一说，就是一帧图像分两场传输，常见的60Hz，50Hz对应的帧频率就是30，25。    &lt;br /&gt;d) 我们常见的1080i50就是1920×1080像素，每秒50个场的速度交织编码（25帧）[3]。    &lt;br /&gt;e) &lt;strong&gt;PAL和NTSC     &lt;br /&gt;&lt;/strong&gt;50i（PAL）：全名为逐行倒相 （Phase Alternating Line）。每秒25帧，隔行扫描的电视广播格式。[4]    &lt;br /&gt;60i（NTSC）：属于同时制，每秒60/1.001场。但存在相位容易失真、色彩不太稳定的缺点。NTSC标准的帧幅为每秒30帧。[5]    &lt;br /&gt;f) &lt;strong&gt;数字电视&lt;/strong&gt;，传统的PAL和NTSC陆续被淘汰，取而代之的是数字电视，数字电视其实就是将画面信号经数位化处理后，变成一串数据资料，再经数位调变传送到家。    &lt;br /&gt;简单的说，数字电视的成功，主因是视频压缩技术的发展。国际统一的压缩标准是MPEG-2，在传统无线电视台600万赫兹频宽的电视频道中，可传送1080条水平扫描线的高画质电视（HDTV高清晰度电视）。它同时也提供杜比的AC3级高级音响效果。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;高清的播放分辨率&lt;/strong&gt;有 3 种：    &lt;br /&gt;768i （i 表示隔行扫描）    &lt;br /&gt;1080i（i 表示隔行扫描）    &lt;br /&gt;1080p（P 表示逐行扫描） &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HDTV&lt;/strong&gt;高清晰度电视（High Definition Television）的扫描格式共有 3 种[2]：    &lt;br /&gt;1280×720p     &lt;br /&gt;1920×1080i     &lt;br /&gt;1920×1080p     &lt;br /&gt;中国采用的 1920×1080i/50Hz。     &lt;br /&gt;全高清分辨率为1920×1080的高清信号。 &lt;/p&gt;  &lt;p&gt;例如，不做任何压缩：   &lt;br /&gt;高清640*480的彩色图像，每秒30帧，则一秒钟的数据量为：    &lt;br /&gt;640*480*24*30 = 221.12 M     &lt;br /&gt;NTSC视频信号720*480，每秒30帧，则一秒钟的数据量为：    &lt;br /&gt;720*480*24*30 = 248.83 M     &lt;br /&gt;高清1920x1080的彩色图像，每秒30帧，则一秒钟的数据量为：    &lt;br /&gt;1920*1080*24*30 = 1492992000 bit =&amp;#160; 1.5 G    &lt;br /&gt;--&amp;gt;    &lt;br /&gt;必须对视频信号进行编码压缩[2]。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;注意，我们有可能搞混的是&lt;/strong&gt;：    &lt;br /&gt;a)在描述数据传输时的计算如下（In some cases when used to describe data transfer rates bits/bytes are calculated as in the metric system as follows）:    &lt;br /&gt;1 MB = 1,000,000 bits/bytes    &lt;br /&gt;1 kb = 1,000 bits/bytes    &lt;br /&gt;1 bit/byte &lt;/p&gt;  &lt;p&gt;b)在描述数据储存是的计算如下（In the cases when used to describe data storage bits/bytes are calculated as follows）:   &lt;br /&gt;1 byte = 8 bits    &lt;br /&gt;1 kilobyte (K / Kb) = 2^10 bytes = 1,024 bytes    &lt;br /&gt;1 megabyte (M / MB) = 2^20 bytes = 1,048,576 bytes    &lt;br /&gt;1 gigabyte (G / GB) = 2^30 bytes = 1,073,741,824 bytes    &lt;br /&gt;1 terabyte (T / TB) = 2^40 bytes = 1,099,511,627,776 bytes    &lt;br /&gt;1 petabyte (P / PB) = 2^50 bytes = 1,125,899,906,842,624 bytes    &lt;br /&gt;1 exabyte (E / EB) = 2^60 bytes = 1,152,921,504,606,846,976 bytes &lt;/p&gt;  &lt;p&gt;附注：在数据通信中， 1 kilobit 是 1000 bits。它通常用于测量是在一秒钟两个通信点之间传输的数据量。千比特每秒，通常缩写为Kbps。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;下一篇笔记将关于，数据冗余，编码压缩。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考资料：   &lt;br /&gt;[1] 逐行扫描与隔行扫描: &lt;a href="http://baike.baidu.com/view/115294.htm"&gt;http://baike.baidu.com/view/115294.htm&lt;/a&gt;    &lt;br /&gt;[2] 数字图像处理(第2版)，Rafael C.Gonzalez / Richard E.Woods，电子工业出版社    &lt;br /&gt;[3] 高清晰度电视: &lt;a href="http://zh.wikipedia.org/zh-cn/高清晰度电视"&gt;http://zh.wikipedia.org/zh-cn/高清晰度电视&lt;/a&gt;    &lt;br /&gt;[4] PAL制式：&lt;a href="http://zh.wikipedia.org/zh/PAL制式"&gt;http://zh.wikipedia.org/zh/PAL制式&lt;/a&gt;    &lt;br /&gt;[5] NTSC制式：&lt;a href="http://zh.wikipedia.org/zh/NTSC制式"&gt;http://zh.wikipedia.org/zh/NTSC制式&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-4853564527730840673?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4853564527730840673/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4853564527730840673' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4853564527730840673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4853564527730840673'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/02/2.html' title='数字图像处理笔记（2）'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-6482072083735473554</id><published>2011-02-08T22:12:00.001+01:00</published><updated>2011-02-08T22:12:26.664+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='数字图像处理'/><title type='text'>数字图像处理笔记（1）</title><content type='html'>&lt;p&gt;最近的一些研究涉及了数字图像处理。这里我准备开一个小小的系列，放入我最近的一些学习的笔记。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Digital Image Processing是一个很有趣的领域。接下来我按照我的喜好，记录一些重要的概念。 &lt;/p&gt;  &lt;p&gt;我们大概都知道，在计算机中，静态的图像有两种表达形式：   &lt;br /&gt;矢量图，vector based image    &lt;br /&gt;位图，bit mapped image，（位图里又有灰度图（grap scale image），彩色图（color image）） &lt;/p&gt;  &lt;p&gt;矢量图，顾名思义，也就是可以用计算机的指令来描述的，图像中的每一的元素都可以使用数学表达式来实现。所有一个矢量图会由很多的数学表达式来进行描述。我们常常使用最简单的visio就可以做矢量图，当然了adobe illustrator是一个做矢量图的利器。   &lt;br /&gt;矢量图有很多优点，1.可以进行不失真的缩放，2.可以容易的移动复制，甚至旋转，3.矢量图产生的数据量比较小。    &lt;br /&gt;矢量图的一个很明显的缺点是使用场合有所限制，因为很多复杂的图像无法使用数学表达式来描述。 &lt;/p&gt;  &lt;p&gt;位图，计算机中最广泛使用，其实就是一幅图由很多的像素（也可以说是由像素矩阵）组成的。   &lt;br /&gt;每一个像素pixel其实在计算机里就是由一定长度的数字值来表示它的颜色和亮度。如果单位面积内的像素越多，那么分辨率就越高，所显示的图像就会接近于真实物体。    &lt;br /&gt;如果图像的深度越高，或是图像的分辨率越高，那么位图的大小就越大。    &lt;br /&gt;色彩深度，色彩深度又叫色彩位数，即位图中要用多少个二进制位来表示每个点的颜色，是分辨率的一个重要指标，例如16位（增强色），24位和32位等。    &lt;br /&gt;例子：    &lt;br /&gt;例如一个图像，RGB三个分量，每个8位，一共就是24位，像素的深度为24，每个像素就是2的24次方就是16777216的一种，其实人是无法分辨这么多颜色的。 &lt;/p&gt;  &lt;p&gt;位图常用的编码方式有：   &lt;br /&gt;RGB，红、绿、蓝三原色的光学强度。    &lt;br /&gt;CMYK，用青、品红、黄、黑四种颜料含量来表示一种颜色 &lt;/p&gt;  &lt;p&gt;常常还有Alpha通道，也就是增加像素的透明度信息。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;我们常常见到的图像格式有：   &lt;br /&gt;BMP（Bitmap Image File or Device Independent Bitmap (DIB) file format or simply a Bitmap）    &lt;br /&gt;GIF（Graphics Interchange Format）    &lt;br /&gt;PNG（Portable Network Graphics）    &lt;br /&gt;JPEG（Joint Photographic Experts Group），附带提一下它是基于Discrete Cosine Transform离散余弦变换，转换到频率空间，JPEG有选择地选择数据来压缩文件，会丢弃一些数据，使用是有损压缩。 &lt;/p&gt;  &lt;p&gt;参考资料：   &lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh-cn/%E5%83%8F%E7%B4%A0"&gt;http://zh.wikipedia.org/zh-cn/%E5%83%8F%E7%B4%A0&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh/%E4%BD%8D%E5%9B%BE"&gt;http://zh.wikipedia.org/zh/%E4%BD%8D%E5%9B%BE&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://zh.wikipedia.org/zh/Jpeg"&gt;http://zh.wikipedia.org/zh/Jpeg&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh/Bmp"&gt;http://zh.wikipedia.org/zh/Bmp&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh/Png"&gt;http://zh.wikipedia.org/zh/Png&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh/GIF"&gt;http://zh.wikipedia.org/zh/GIF&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-6482072083735473554?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/6482072083735473554/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=6482072083735473554' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6482072083735473554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6482072083735473554'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/02/1.html' title='数字图像处理笔记（1）'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-1225049324875867592</id><published>2011-02-02T00:23:00.001+01:00</published><updated>2011-02-02T00:23:15.662+01: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='杂谈'/><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>年末随笔 -- 我也来谈谈“真正的学习”</title><content type='html'>&lt;p&gt;前几天，我看了武志红的一篇文章&lt;a href="http://www.zreading.cn/archives/2157.html"&gt;《真正的学习》&lt;/a&gt;。看完之后真是非常有感触。     &lt;br /&gt;里面谈到了顿悟，模仿学习永远是跟在别人的后面，&lt;strong&gt;而顿悟，却永远是崭新的&lt;/strong&gt;。即便你顿悟到的一个发现可能是无数人都发现的，但对你而言，这是崭新的，而且真的是你自己发现的。 &lt;/p&gt;  &lt;p&gt;其实我一贯成绩不佳，特别是高中尤其差，高中的时候几乎从来没有完成过作业，我其实非常讨厌做题，做的也非常慢，高中的时候几乎一半的作业要么没有写，要么就是抄的。对于我无法理解的知识，我是无法通过记住题型，或做大量的练习掌握。而且很多知识，如果我不知道有什么用，其实我更本就不想学。高中的物理我是学的极烂的，我永远搞不懂例如那些什么小车啊，上面有小球啊，推来撞去的计算。但是凡是我知道的东西，1是靠慢慢理解它的本质，2是靠悟出来的。但是我掌握的知识，无论是什么时候总是可以信手拈来。这也许就是理解本质的学习，和悟出的知识的好处吧，也许永远不会体现在分数上面。 &lt;/p&gt;  &lt;p&gt;后来到了德国，遇到了几个很好的教授，他们就是先告诉你这个知识以后有什么用，工业上有什么东西是用了这个技术，先给你一个最直观的概念和描述，然后在从最本质的公式，以及实验推出来这个知识，这就是本质的学习，学的是什么呢，就是学事物的本质。以前读研究生，其实很多精深的知识，是非常难通过“悟”来理解的，然而确是可以通过本质的学习达到真正的掌握。 &lt;/p&gt;  &lt;p&gt;然而慢慢去理解它的本质，其实远比靠悟出来的知识少了那份成就感。但是理解本质的学习也是真正的学习的一种，上面提到我的高中物理很差，但到了大学物理我继续通过“本质的学习”，我的大学物理就学得很好，其实这是因为，越到高深的知识越需要高层次的学习，也就是需要“理解本质的学习”。我现在号称在读博士，博士不仅需要“理解本质的学习”同时也需要一些“悟出知识”，这样才有可能到达“创造知识”的阶段。悟出知识，其实书创造知识的一个准备阶段，或是可以说是一个训练的方法。 &lt;/p&gt;  &lt;p&gt;我个人认为的学习的&amp;quot;档次&amp;quot;：    &lt;br /&gt;&lt;strong&gt;模仿学习 &amp;lt;&amp;lt; 理解本质的学习 &amp;lt;&amp;lt; 悟出知识 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;我个人认为的进阶：    &lt;br /&gt;&lt;strong&gt;学透了之后---&amp;gt;“创造知识” &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;上面说过很多精深的知识很难通过悟来掌握，因为过于“精深”。然而，编程确可以通过“悟”来学习，学习编程语言的过程，其实是一个绝佳的悟的过程，我还是比较愚笨的，以前学指针和类的时候，很是一头雾水，比起其他同学来说，学的非常慢，但是突然有一天，脑子里突然间有一个“啊哈”的感觉，哇，原来如此，顿悟一下，突然间发现编程的世界是如此的广阔，这个广阔的天地是自己发现的，自己会迫不及待得想要在这个自己创造的新天地里施展一番手脚。这就是顿悟的乐趣。也是学习编程的乐趣。顿悟之后，这个知识似乎已经融入自己的血液，有一天有一个朋友问我说，哇，你的面向对象的设计和使用得非常好，看不出来你只有两年编程经验，我的回答是，类的设计和使用的很多要点其实是我自己“悟”出来的，呵呵，这是悟出知识的好处。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;------ ------ ------ ------ &lt;/p&gt;  &lt;p&gt;最后祝大家，新年快乐，健康如意。这里没有假期，大年三十还是要上班，呵呵。很想念国内的家人朋友，唉，每逢佳节....今天随手写一些东西吧，用类似微博的方式。 &lt;/p&gt;  &lt;p&gt;正如工作了才体会工作不易，其实无论工作生活，每个人都有自己的辛酸之处，网上有一句话说的很好，每个人的幸福其实是活在其他人的眼里。 &lt;/p&gt;  &lt;p&gt;年纪大了，常常也会得到一些生活的感触，如何让自己生活得更快乐一些，其实也就是爱自己的生活，爱关心你的人，爱自己的工作，常常感恩。 &lt;/p&gt;  &lt;p&gt;问问自己，去年真正学到了什么，其实不是什么所谓的高深的知识，而是简单的四个字，活在当下，去年的博客中我也常常提到这个。如果能够真正的活在当下，听听自己的内心，唤醒真我，这样才可以从自己的心智牢笼里挣脱出来。如同《活在当下》这本书中谈到的，在我的开悟之旅中，我也正在学习不认同自己的头脑，不再把心智的内容看得那么认真了，其实我们的自我感并不依附它而存在。 &lt;/p&gt;  &lt;p&gt;摘录《活在当下》一段原文：    &lt;br /&gt;当下之外一无所有你可曾在当下之外，经验过、做过、思想过、或感觉过任何事吗？你认为你以后会吗？任何事有可能发生或存在当下之外吗？答案不言自明，不是吗？过去不曾发生过什么；它发生在当下。未来不会发生什么；它会发生在当下。你认为的过去，是一个记忆的轨迹，是一个储存在心智里的前任当下。当你记起过去时，你重新启动了一个记忆的轨迹——而且，你现在就在制造轨迹。未来是一个想象的当下，一个心智的投射。当未来到的时候，它就是当下。当你想到未来时，你是在当下想的。过去和未来显然没有它们自己的实相。正如同月亮本身不发光，它只能反射太阳的光一样。过去和未来也一样，只是永恒的现在的光、它的力量、和它实相惨淡的反射而已。它们的实相是向当下“借贷”来的。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-1225049324875867592?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/1225049324875867592/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=1225049324875867592' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1225049324875867592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1225049324875867592'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/02/blog-post.html' title='年末随笔 -- 我也来谈谈“真正的学习”'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-1641600330373177829</id><published>2011-01-30T23:03:00.001+01:00</published><updated>2011-01-30T23:03:01.963+01: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='音乐'/><category scheme='http://www.blogger.com/atom/ns#' term='电影'/><title type='text'>周末闲聊电影音乐</title><content type='html'>&lt;p&gt;很久没有聊一下电影和音乐，这都是美好生活的重要组成部分，今天我这个电子工程师很外行的和大家聊聊电影和音乐。 &lt;/p&gt;  &lt;p&gt;先谈电影，推荐一部电影《爱情与灵药 Love and Other Drugs》，对我来说，这是我最近看到的最好的一部电影，安妮·海瑟薇和杰克·吉伦哈尔主演，两个人配搭十分养眼。故事改编自杰米·雷迪（Jamie Reidy）的一本名为《强卖：一名万艾可销售人员的演变》（Hard Sell: The Evolution of a Viagra Salesman）的畅销书。我个人评4星，为了安妮·海瑟薇的裸戏再加一颗星（5星啦），充满了性感的张力，却不流于色情，补充一下，她的裸体和她的脸蛋一样美丽，每个部位都充满魅力。 &lt;/p&gt;  &lt;p&gt;正巧的是我有一个朋友也是辉瑞区域销售代表，电影里的描述还是很有真实性的，销售代表的语言，他们对药品的滔滔不绝，优渥的收入，业绩的压力。Jake Gyllenhaal绝对是辉瑞最近最佳销售代表（辉瑞应该和导演进行了很多的磋商），其实这部影片也如同Tom Hanks在《荒岛余生》中给FedEx做的巨大的广告一样，整部影片充斥着辉瑞的雨伞，笔，钥匙圈，各式的药盒，万艾可的T恤，但是这绝对是影片的最好部分之一，非常真实。各种销售的恶斗，看完之后其实并不觉得辉瑞的“邪恶”，反倒是有另外一种亲切感，这就是商业，不，这就是商业“生活”，商场如战场，任何Business都是这样，辉瑞也不例外。这就是“嵌入广告”的极致吧，至于冯小刚之流应该好好学学。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TUXgCWN2PqI/AAAAAAAAAW4/eobdbquJDVY/s1600-h/love%20and%20other%20drugs%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="love and other drugs" border="0" alt="love and other drugs" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TUXgDFA5_eI/AAAAAAAAAW8/VXzrDqnovQU/love%20and%20other%20drugs_thumb%5B1%5D.jpg?imgmax=800" width="328" height="484" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;回到电影，他们的感情接受了现实的拷问，但是最后我们看到的是真诚的感情！Jamie对患帕金森病的Maggie情圣一般的告白，还真让人有些感动。 &lt;/p&gt;  &lt;p&gt;情与欲，灵与肉，沉重无比的爱。很深的悲剧色彩，爱情的本质，责任和同情。很多很多可以使人体会的元素。 &lt;/p&gt;  &lt;p&gt;很多笑点，附带一些美式的轻喜剧元素，很多温情，一些思考，但是又不是太过沉重，美好的结局，这就是我要的一切。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;接下来聊一下音乐。    &lt;br /&gt;其实我非常少听粤语歌，今天很偶然地听到了陈奕迅的《陀飞轮》注1，很有感觉。歌词很有深度，画面。它对简单的描述，但是谈到了很多人生，时间。     &lt;br /&gt;但是歌里没有对描述的问题进行回答。     &lt;br /&gt;答案是什么呢。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TUXgDl906MI/AAAAAAAAAXA/tM8O1XpMrP4/s1600-h/Tourbillon%5B16%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Tourbillon" border="0" alt="Tourbillon" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TUXgE2vcElI/AAAAAAAAAXE/wkeqnk4kR8g/Tourbillon_thumb%5B12%5D.jpg?imgmax=800" width="472" height="354" /&gt;&lt;/a&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;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;br /&gt;也不以高薪 高职 高级品 搏尊敬 wo~     &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;br /&gt;银或金都不紧要 谁造机芯 一样了     &lt;br /&gt;计划了 照做了 得到了 时间却太少 no~     &lt;br /&gt;还剩低几多心跳 还在数赶不及了     &lt;br /&gt;昂贵是这刻 我觉悟了     &lt;br /&gt;在时计里 看破一生 渺渺 &lt;/p&gt;  &lt;p&gt;注1，来自维基百科：    &lt;br /&gt;陀飞轮(法语:Tourbillon)是由法国著名钟表大师宝玑(Abraham Louis Breguet)于1795年发明，是机械钟表机芯中的一个装置。 陀飞轮装置的设计本身是用于怀表之上，因为怀表垂直的放在口袋中，或挂在颈上时，地心引力会影响摆轮摇摆速度，引致出现误差。陀飞轮的原理基本上是把游丝、叉式杠杆和擒纵系统设计在同一轴上运作，陀飞轮在运行时会不断旋转，以减少地心引力所做成的影响。但随着二十世纪手表的兴起，由于手表并非长时间垂直放置，因此陀飞轮装置对手表的作用已经没有怀表那么大，但陀飞轮装置极其复杂，而且由于制作成本及工艺的要求相当高，因此陀飞轮变成了高档手表的代名词。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-1641600330373177829?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/1641600330373177829/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=1641600330373177829' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1641600330373177829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1641600330373177829'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/01/blog-post_30.html' title='周末闲聊电影音乐'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TUXgDFA5_eI/AAAAAAAAAW8/VXzrDqnovQU/s72-c/love%20and%20other%20drugs_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-511628429630965928</id><published>2011-01-17T23:22:00.001+01:00</published><updated>2011-01-17T23:22:26.209+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='robot新知'/><title type='text'>清扫机器人Scooba 230</title><content type='html'>&lt;p&gt;最近在研究一些&amp;quot;多机器人系统&amp;quot;，对机器人又有了很多新的认识和兴趣，接下来我将会记录一下机器人学习的一些笔记，并提供一些有趣的机器人新闻和知识，（具体为robot新知，robot笔记两个分类）。 &lt;/p&gt;  &lt;p&gt;今天在focus.de看到一则新闻关于清扫机器人，简要的翻译一下。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TTTBHhIn3sI/AAAAAAAAAWw/X2XELh4dv90/s1600-h/irobot_230%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="irobot_230" border="0" alt="irobot_230" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TTTBIMIYS2I/AAAAAAAAAW0/W-tLvy04jlw/irobot_230_thumb%5B1%5D.jpg?imgmax=800" width="644" height="364" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;清扫卫生间通常不是令人喜欢的家务。最近在国际消费类电子产品展览会（International Consumer Electronics Show）上，美国iRobot公司展示了其生产的Scooba 230机器人，它可以用来执行清扫卫生间任务。 &lt;/p&gt;  &lt;p&gt;这个Scooba 230只有16.5厘米宽，9厘米高，很适合做厕所和浴室中狭小空间内工作。 &lt;/p&gt;  &lt;p&gt;该机器人应该能够消除高达97百分之的常见细菌，而且并不会重用脏水。今年初就会在美国上市，大约300美元。 &lt;/p&gt;  &lt;p&gt;原文出处：   &lt;br /&gt;http://www.focus.de/digital/multimedia/irobot-scooba-230-roboter-putzt-das-bad_aid_589204.html&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-511628429630965928?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/511628429630965928/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=511628429630965928' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/511628429630965928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/511628429630965928'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/01/scooba-230.html' title='清扫机器人Scooba 230'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/TTTBIMIYS2I/AAAAAAAAAW0/W-tLvy04jlw/s72-c/irobot_230_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-1793481346823757533</id><published>2011-01-05T22:10:00.001+01:00</published><updated>2011-01-05T22:23:10.176+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='思考'/><title type='text'>如何写好文档</title><content type='html'>&lt;p&gt;最近做项目的时候需要阅读很多文档，并且需要写一些文档，今天总结一些关于如何写好的文档的个人经验，和大家分享。 &lt;/p&gt;  &lt;p&gt;1. 文档要服务于受众   &lt;br /&gt;请努力做到，使读者读文档时候不会遇到任何困难，例如把该解释的定义解释清楚。如果可以的话，写之前请分析一下读者和要表达的内容。 &lt;/p&gt;  &lt;p&gt;2. 不要写那些你自己也没理解的东西   &lt;br /&gt;我们读一些文档的时候常常感到一头雾水，其实是因为这个文档的作者其实自己也并不是完全搞明白这个东西，文档上的描述其实只是东拼西凑的资料。 &lt;/p&gt;  &lt;p&gt;3. 使用好的规范，好的格式，你的文档就成功了一半   &lt;br /&gt;例如当我们对于一个技术进行描述的时候，我们必须让读者不需要前后翻页，就可以跟上我们的描述。保持格式的一致性很重要。其实不仅需要写规范，而且还需要使用正确的语法，消除错别字。当然了，写中文比较不容易出现这些问题。但是写英文文档就会常常出现这种问题，这就需要认真对待。 &lt;/p&gt;  &lt;p&gt;4. 使用短句，显示精华   &lt;br /&gt;这只是文档，所以不要卖弄文采。长的复杂的句子，并不是知识性文章的标志。 &lt;/p&gt;  &lt;p&gt;5. 使用常见的词   &lt;br /&gt;这样会让读者更容易进入“状态”。还要注意做到统一术语。 &lt;/p&gt;  &lt;p&gt;6. 只写需要的，并尽可能少写   &lt;br /&gt;这其实就是我德国同事常常说的：“so viel wie noetig，so wenig wie moeglich”。这样会让文档的读者尊敬你，因为你让他们节约了时间。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-1793481346823757533?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/1793481346823757533/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=1793481346823757533' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1793481346823757533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1793481346823757533'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2011/01/blog-post.html' title='如何写好文档'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-844731919067492882</id><published>2010-12-31T23:56:00.000+01:00</published><updated>2011-01-01T00:00:15.758+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>Einen Guten Rutsch ins neue Jahr 2011</title><content type='html'>&lt;p&gt;祝大家顺利进入2011年。    &lt;br /&gt;德语中Rutsch意思是滑，滑过。     &lt;br /&gt;很有意思，这句祝福语字面上意思为很顺利地滑溜到新年2011！ &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TR5gfOGVBFI/AAAAAAAAAWo/uAgGfZcyuEI/s1600-h/DSC01947%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC01947" border="0" alt="DSC01947" src="http://lh6.ggpht.com/_7rEkBQiDq6I/TR5gfs1RTKI/AAAAAAAAAWs/-45lAQWi0jM/DSC01947_thumb%5B1%5D.jpg?imgmax=800" width="484" height="364" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;附图为今天我家附近的小朋友在斜坡上用雪橇进行&amp;quot;Rutsch&amp;quot;。 &lt;/p&gt;  &lt;p&gt;其实关于这个祝福语还是有更具体起源的解释，详见维基。    &lt;br /&gt;&lt;a href="http://de.wikipedia.org/wiki/Guten_Rutsch"&gt;http://de.wikipedia.org/wiki/Guten_Rutsch&lt;/a&gt;     &lt;br /&gt;1.起源于意第绪语     &lt;br /&gt;2.“rutschen“ 作为 “reisen“（旅行）的喻义 &lt;/p&gt;  &lt;p&gt;赶在新年将至之前几分钟，简单进行一个小小的年度回顾。    &lt;br /&gt;关于工作生活：     &lt;br /&gt;一到七月在为Diplomarbeit努力中。     &lt;br /&gt;七月和老婆领了证。     &lt;br /&gt;在八月初顺利的成为了微电子专业的Dipl.-Ing.     &lt;br /&gt;接下来选择留校开始的做一名博士生，在研究所进行研究，让我感到压力和乐趣并存，其实我还挺喜欢这种感觉的。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;其他：    &lt;br /&gt;根据豆瓣电影上的记录，大概看了60部2010年新上映的电影。     &lt;br /&gt;根据豆瓣读书上的记录，2010加入了199本书，除去一些以前看过的书，2010大概看了150本书，刚刚买了sony ereader 650，明年读书又多了一个利器。     &lt;br /&gt;写了51加上这篇就是52篇博客，大约平均每周一篇。     &lt;br /&gt;最喜欢的放松方法就是在电脑上玩一会儿pes2011。最近一个星期玩了几天wii，买了wii后已经两年没玩了。     &lt;br /&gt;坚持骑车上班，但是最近下雪，只能在家里做做有氧操。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;2011期望：&lt;/p&gt;  &lt;p&gt;大家平安健康。    &lt;br /&gt;希望自己可以利用积累时间的力量，每天花一点时间，做同样几件事情，提升一点自己的价值吧。&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-844731919067492882?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/844731919067492882/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=844731919067492882' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/844731919067492882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/844731919067492882'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/12/einen-guten-rutsch-ins-neue-jahr-2011.html' title='Einen Guten Rutsch ins neue Jahr 2011'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/TR5gfs1RTKI/AAAAAAAAAWs/-45lAQWi0jM/s72-c/DSC01947_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7488124904419888194</id><published>2010-11-28T17:59:00.001+01:00</published><updated>2010-11-28T18:01:37.393+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>程序员间的一段对话（笑话）</title><content type='html'>&lt;p&gt;今天来一个笑话，以下笑话是由网络很多的段子融合而成，感谢这些段子的原创。   &lt;br /&gt;老鸟程序员A和新进的菜鸟程序员B在茶水间聊天。    &lt;br /&gt;程序员A：昨晚去看了《盗梦空间》，其实，编剧是个程序员。嵌套，函数，调用，断点，溢出，全局变量，未处理的例外。    &lt;br /&gt;程序员B：你还真行，看《盗梦空间》还可以想到编程。    &lt;br /&gt;程序员A：生活中很多地方都可以学习编程，譬如说，如果每天定时看新闻联播，能学到好多设计模式。    &lt;br /&gt;程序员B：哇... ...还真是。    &lt;br /&gt;程序员A：我那天看到我们的经理在用google docs写小金库账本呢，你知道为什么呢?    &lt;br /&gt;程序员B：难道是因为google docs简单方便？    &lt;br /&gt;程序员A：No，No，真正的原因是有GFW守卫，不易被老婆发现，哈哈。    &lt;br /&gt;程序员B：哇... ...哈哈。    &lt;br /&gt;程序员B：对了，刚刚经理说我们一定要用正版的软件，国家刚刚颁布下了一条法律呢。    &lt;br /&gt;程序员A：没关系啦，其实中国的法律从来都是.txt格式，不是.exe。    &lt;br /&gt;程序员B：说的也是。    &lt;br /&gt;程序员A：给你打听一下，你知不知道昨天来我们部门的和你帮你填出差报销表的财务部的漂亮mm的叫什么名字，电话是什么。    &lt;br /&gt;程序员B：不知道，没敢问。    &lt;br /&gt;程序员A：你居然没有问，连名字都不知道，你大概认识的多数女性后缀名都是AVI，哈哈。    &lt;br /&gt;程序员B：沉默中... ..    &lt;br /&gt;程序员A：你一定已经默默地关注了苍井空的微博，哈哈。    &lt;br /&gt;程序员B：哇，是的... ...    &lt;br /&gt;程序员A：对了，最后告诉你一个搞笑的内幕，你知道Intel为什么买下McAfee。其实内幕是这样的：Intel的CEO坐在办公椅上边吃巧克力豆，边和下属视频会议，说道：「公司是不是需要杀毒软件？买McAfee吧。」15分钟后，有人在视频那头传话，「McAfee买下了。」CEO问道，「什么版本的？」下属：「啊？版本？…版本？」    &lt;br /&gt;程序员B：哈哈。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最后附带，简单地说说最近的一些情况吧。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TPKKTDu786I/AAAAAAAAAVg/tm5gRsRzxhI/s1600-h/stefan-morsch-stiftung%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="stefan-morsch-stiftung" border="0" alt="stefan-morsch-stiftung" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TPKKThWCoKI/AAAAAAAAAVk/Npz18KZ6ilQ/stefan-morsch-stiftung_thumb%5B3%5D.png?imgmax=800" width="604" height="69" /&gt;&lt;/a&gt;     &lt;br /&gt;星期二，我和一些朋友参加了Stefan-Morsch基金会(这个基金会在德国已经建立了38万人的骨髓资料库)在我们学校的活动（我们所的一个中国博士生患了白血病，急需骨髓捐赠），抽取5毫升静脉血作组织相容性抗原（HLA）分型检查。&lt;a href="http://www.stefan-morsch-stiftung.com/"&gt;http://www.stefan-morsch-stiftung.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TPKKUdAUdrI/AAAAAAAAAVs/MI88VSB6FwE/s1600-h/DSC01888%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC01888" border="0" alt="DSC01888" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TPKKVDssGCI/AAAAAAAAAVw/S9CbQY1xctw/DSC01888_thumb%5B3%5D.jpg?imgmax=800" width="424" height="319" /&gt;&lt;/a&gt;     &lt;br /&gt;星期四我们这个小城下了今年第一场雪，图为晚上7点半回家小路上的雪景。    &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TPKKVsfdWqI/AAAAAAAAAV4/N-NzeCjxnvQ/s1600-h/DSC01907%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC01907" border="0" alt="DSC01907" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TPKKWH_CcqI/AAAAAAAAAWA/N6gzrEqTj7o/DSC01907_thumb%5B3%5D.jpg?imgmax=800" width="424" height="319" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;星期六也就是昨天，和几个朋友逛了圣诞市场，吃了一点烧烤和炒栗子，图为烧烤的摊位。然后到一个同学家玩三国杀，比较有趣的是我们还教会了一个德国人玩三国杀，而且后来他作为“主公”还玩的相当不错，其实桌面游戏在欧洲很有群众基础，很多德国人从小就玩过很多这样的游戏。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-7488124904419888194?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7488124904419888194/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7488124904419888194' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7488124904419888194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7488124904419888194'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/11/blog-post.html' title='程序员间的一段对话（笑话）'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TPKKThWCoKI/AAAAAAAAAVk/Npz18KZ6ilQ/s72-c/stefan-morsch-stiftung_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-2738458881608019851</id><published>2010-11-18T20:34:00.002+01:00</published><updated>2011-03-03T20:42:57.393+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='工具使用技巧'/><title type='text'>如何自动将Visual Studio编译生成的dll和lib文件放置到不同的路径中</title><content type='html'>又是很久没有更新博客了，最近相对比较忙，做了一个项目代码重构，已经完成了8成了。今天给自己放假一天，这就是在研究所上班的最大好处之一，很自由，可以给自己放假:-)&lt;br /&gt;今天写一点关于Visual Studio使用的一个小技巧。&lt;br /&gt;Visual Studio编译生成的dll和lib文件放置到不同的路径中，其实很有用，如果我们有很多的项目，而且项目间的dll相互依赖，那么将编译生成的dll和lib文件放在统一的路径或目录中还是很方便的。    &lt;br /&gt;以下是我的做法，我们需要先写一个bat。     &lt;br /&gt;以下是copy_output.bat的写法，类似这样：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;@echo copying file(s)       &lt;br /&gt;@echo off       &lt;br /&gt;REM @echo on       &lt;br /&gt;@REM echo %1\%2       &lt;br /&gt;@REM dir /p %1\%2.dll       &lt;br /&gt;@REM copy the exe file, if exists       &lt;br /&gt;if exist %1\%2.exe for /F "eol= tokens=4,4,* delims= " %%X in ('dir /p %1\%2.exe') do if exist %1\%%X copy %1\%%X %YOUR_BIN_PATH%       &lt;br /&gt;@REM copy the dll file, if exist       &lt;br /&gt;if exist %1\%2.dll for /F "eol= tokens=4,4,* delims= " %%X in ('dir /p %1\%2.dll') do (if exist %1\%%X copy %1\%%X %YOUR_BIN_PATH%)       &lt;br /&gt;@REM copy the lib file, if exists       &lt;br /&gt;if exist %1\%2.lib for /F "eol= tokens=4,4,* delims= " %%X in ('dir /p %1\%2.lib') do (if exist %1\%%X copy %1\%%X %YOUR_LIB_PATH%)&lt;/blockquote&gt;&lt;br /&gt;我们还要在Visual Studio的project的属性进行一点设置，具体如下截图所示（我使用的是德文版的VS）：&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TOV_pt_g01I/AAAAAAAAAVA/v6PPWVG145M/s1600-h/vs2005_dll_lib_build_event%5B8%5D.png"&gt;&lt;img alt="vs2005_dll_lib_build_event" border="0" height="340" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TOV_qDVNm-I/AAAAAAAAAVE/aruSJpLw7Q8/vs2005_dll_lib_build_event_thumb%5B6%5D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="vs2005_dll_lib_build_event" width="504" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;点选进入Build Events，在Post-Build Event的Command Line中输入copy_output.bat $(TargetDir) $(TargetName)，完成。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;附注：如果路径上有空格譬如，C:\Program Files，那么要在$(TargetDir)上加入引号。&lt;br /&gt;copy_output.bat "$(TargetDir)" $(TargetName)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-2738458881608019851?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/2738458881608019851/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=2738458881608019851' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2738458881608019851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2738458881608019851'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/11/visual-studiodlllib.html' title='如何自动将Visual Studio编译生成的dll和lib文件放置到不同的路径中'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TOV_qDVNm-I/AAAAAAAAAVE/aruSJpLw7Q8/s72-c/vs2005_dll_lib_build_event_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-2679238377454293610</id><published>2010-10-21T18:05:00.001+02:00</published><updated>2010-10-21T18:09:34.145+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>随感，随笔</title><content type='html'>&lt;p&gt;又是很久没有更新博客了，今天又给自己放了一天假，这里我分关键词随便写点什么，附图为傍晚时的回家小路。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TMBktQCycYI/AAAAAAAAAU4/0dB9-RHRAtU/s1600-h/DSC00788%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="DSC00788" border="0" alt="DSC00788" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TMBkuB3ygHI/AAAAAAAAAU8/S0Ef3A693QE/DSC00788_thumb%5B3%5D.jpg?imgmax=800" width="364" height="274" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;焦虑，压力&lt;/p&gt;  &lt;p&gt;前几天，收到一封好友的来信，他说他有焦虑症，已经开始看心理医生了，他在我眼里是一个和快乐的人，而且拥有一份很不错而且令人尊重的工作。知道这个消息后，我唏嘘不已。其实现代人面对各种各样的压力，正如很多书所说的，我们生活态度决定了我们对压力的态度，其实有时候只要稍微改变一下对事物的看法，想法，就能与压力和平共处，也就不会把自己逼到死角了。我们总是在焦虑，焦虑过去，焦虑未来，焦虑一切可以引发焦虑的事物，而我们是否可以静下心想想，我们是否可以就只是活在当下?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;开会，写代码&lt;/p&gt;  &lt;p&gt;最近开始一个新的项目，开了非常多的会，德国人的会真的非常多，但是大部分都有明确的讨论主题，一般不会沦为形式会，会上也会有很多脑力激荡，类似豪斯医生的桥段，头儿扔出一到两个问题，我们每个人各自提供一些见解或答案，头儿对我们答案进行反驳，在会的人进行讨论，这样来回几次常常会得到一些还不错的分析结果，架构大体确定后，一些问题的基本解决方式明确之后，这才是开始写代码的时刻。最近还写了不少代码，但是都是简单的代码堆砌，代码易写，但是好的架构难设计。我们的新的架构，的确花费了很多的心力，好架构，就是简单优雅，往里面堆砌代码，也会有一种快乐感，很明确，如同玩乐高积木般简单。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;名牌，名牌&lt;/p&gt;  &lt;p&gt;阐述一下我最近听说的一个理论，很有趣，也很深刻，看电影的时候，我们会发现在很早以前的一些部落的战争，我们会看到战胜者会把战败者身上的某个部分取下来，把它们当做一种战胜的标志挂在自己的身上。然而在现代社会里，名牌的价值就跟上面提到的战败者身上的某个部分的意思差不多。名牌代表的是一种本质上是一种“胜者”或是“在弱肉强食的食物链中较为高等”的宣示。看来这种“权力的宣告”这也许就是现代人为名牌痴迷的深层次原因吧。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;H&amp;amp;M，自行车，大前研一&lt;/p&gt;  &lt;p&gt;如何节约不必要的时间浪费也是一门学问。我不喜欢逛街，对于买衣服，我几乎只去H&amp;amp;M，每个季度去一次，去H&amp;amp;M的原因就是因为够平价，款式够多，穿一阵子不喜欢了，扔掉一点也不心疼。一年我花在买衣服上的时间大概就是4*2 = 8 小时，买衣服我的想法和大前研一类似，我也会一种款式买一个系列（各种颜色之类），每天出门的时候几乎不会浪费什么挑选衣服的时间。自行车是一个非常好的交通工具，大前研一也说过，如果不下雨或下雪，我每天上下班都骑自行车，来回大概骑1个小时，一周大概可以有4到5小时的运动，如果没有时间运动，那么骑自行车上下班，就是一个很棒的运动。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-2679238377454293610?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/2679238377454293610/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=2679238377454293610' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2679238377454293610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2679238377454293610'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/10/blog-post.html' title='随感，随笔'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TMBkuB3ygHI/AAAAAAAAAU8/S0Ef3A693QE/s72-c/DSC00788_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4141379264307573655</id><published>2010-09-25T12:11:00.001+02:00</published><updated>2010-09-25T12:11:08.166+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>随便聊聊</title><content type='html'>&lt;p&gt;大约有20天没有更新博客了。最近有很多事可以瞎忙，公事私事，忙了10天吧，到了上个星期五终于大概都搞定了。感悟，思绪偶尔在脑中停留，这里就做一些无聊的记录吧，以类似微博的形式一条一条的记录一下吧，其实我对微博很不感冒，至今一直没有。附图为上个月去的杜伊斯堡的乐高城的爱因斯坦的乐高头像，一个德国小妹妹正在摸爱因斯坦的舌头呢。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TJ3KuCEG1pI/AAAAAAAAAUw/LTf61zhn4AA/s1600-h/DSC00825%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00825" border="0" alt="DSC00825" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TJ3Ku9vGS3I/AAAAAAAAAU0/6eaxzqWajIo/DSC00825_thumb%5B1%5D.jpg?imgmax=800" width="364" height="274" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;前不久做火车看到一个很有钱土耳其大叔和他的三个老婆，除了大老婆年纪比较大，其他的俩个老婆可谓是如花似玉，天啊，真是男人的梦想，据说最多可以娶四个老婆，突然间想到如果是这样的话，肯定有很多男人娶不到老婆，还是放弃这个美梦吧。 &lt;/p&gt;  &lt;p&gt;戴尔卡耐基，拿破仑希尔都说过记住别人的名字很重要，我说，经过证明，这真的是非常重要。他们还说过微笑对提高人际关系很有效，我说，这是真的。 &lt;/p&gt;  &lt;p&gt;亨利福特有一句名言：“Whether you believe you can or believe you can’t, either way you are right.” 其实无论是否相信你可以改变自己，或是不能，其实都是对的。看来信念的力量真的很重要。 &lt;/p&gt;  &lt;p&gt;模仿前不久读过的《佛祖在一号线》的一句话：“我觉得教养这东西来之不易而且很贵，20克教养顶得上5吨LV皮包。” 我觉得自我认识这东西来之不易而且很难，一点自我认识顶得上n年的社会历练。 &lt;/p&gt;  &lt;p&gt;看过一句话We must stand firm between two kinds of madness: the belief that we can do anything; and the belief that we can do nothing. 我们到底是什么样的呢，自认为无所不能，还是一无所能，很多SLHPPs（Self-limiting High Potential Persons低成就的高潜质族群）的内心都是如此困顿的。 &lt;/p&gt;  &lt;p&gt;歌德在浮士德中写道：Whatever you can do, or dream you can, begin it. Boldness has genius, power, and magic in it. Begin it now. 其实就是改造自己的第一步，就是试着开始吧。 &lt;/p&gt;  &lt;p&gt;很早就有人对我说过Document Software Elements as Early as Possible!但是我就是不这样做，总是直到项目结束后才开始写文档，这样真的会丢失很多细节，因为我们可能对我们的代码非常厌倦或是熟悉了。我的这点感悟真的是经验之谈，其实和一本书The Elements of C++ Style的第38条尽早编写文档不谋而合。 &lt;/p&gt;  &lt;p&gt;直接从源代码中生成API参考文档，也是The Elements of C++ Style中的一条，这也是我最近很有体会的。使用doxygen生成的API参考文档更为准确和更为完整而且易更新。文档真的是我们常常忽略的东西，如何写一个优秀的文档和编写代码一样重要，具体实现的原则，请参考The Elements of C++ Style第五章，我已经把这本书放在工作的案头，随时查阅，以提醒自己因该要怎么做。 &lt;/p&gt;  &lt;p&gt;是岁月油炸了我的坚持，还是时间炖化了我的异端，自己心中的梦想已经有点模糊了，是重新拾起来的时候了。 &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-4141379264307573655?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4141379264307573655/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4141379264307573655' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4141379264307573655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4141379264307573655'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/09/blog-post_25.html' title='随便聊聊'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TJ3Ku9vGS3I/AAAAAAAAAU0/6eaxzqWajIo/s72-c/DSC00825_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4064973671866731551</id><published>2010-09-02T00:59:00.001+02:00</published><updated>2010-09-02T01:05:35.105+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='读书笔记'/><title type='text'>扔掉所有拖住你的东西，让生活更加轻松愉快</title><content type='html'>&lt;p&gt;这几天读了一本书&lt;a href="http://book.douban.com/subject/4817621/"&gt;《丢掉50样东西，找回100分人生》&lt;/a&gt;。     &lt;br /&gt;如果你有很多杂物，废物，那么你也许需要看看这本书，学学如何丢东西。 &lt;/p&gt;  &lt;p&gt;你知道要丢掉哪些东西吗？这本书中提出的丢弃规则很简单：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 第一，任何事物，不管是看法或信念、回忆、工作、甚至某个人，只要让你心情沉重、阻碍你，或单单只是让你对自己有不好的感觉，那就把它丢掉、送走、卖&amp;#160;&amp;#160;&amp;#160; 掉、抛开，继续前进。       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 第二，如果它（请参阅第一点）只是摆在那里占空间，对你的人生毫无正面贡献，那就把它扔掉、送走、卖掉、抛开，继续前进。因为不进则退，丢掉负面的东&amp;#160;&amp;#160;&amp;#160; 西，可以帮你重新发现正面的事物。       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 第三，无论要丢还是要留，都不要让决定变得很困难。如果你得花很长的时间权衡利弊，或是烦恼不知该如何是好，那就丢掉！       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 第四，别害怕。这是你的人生——-你唯一确信丢不掉的东西。你没有多余的时间、空间或精力留给那些有形还是无形的杂物。 &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;书中谈到清爽的家，会发生好事。其实会发生什么好事，谁都不知道，但是丢掉根本毫无用处的东西，绝对会让人神清气爽呢。    &lt;br /&gt;如果开始丢东西，那么还有一点要记住：千万别扔掉别人的东西，这可能会让他们火冒三丈。     &lt;br /&gt;工作地方的废物会削弱工作的力量，把它们丢掉吧。     &lt;br /&gt;我们还需要丢弃不好的情绪，活出属于自己的人生。 &lt;/p&gt;  &lt;p&gt;对了，还有一句话很有用:&amp;quot;&lt;strong&gt;记住，如果你必须花很久的时间权衡扔掉某样东西的利弊，那就扔了！&lt;/strong&gt;&amp;quot; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;接下来，谈谈我个人的经验吧。 &lt;/p&gt;  &lt;p&gt;按照这本书上的方法，我刚刚丢弃了很多本食谱，这些食谱我大概只看过一遍，以后几乎不看它们。    &lt;br /&gt;其实大部分食谱都有线上版，很快就查询得到。     &lt;br /&gt;我常常使用的方法就是打开冰箱，看看还剩什么，然后把这些东西的名称一股脑儿输入google进行搜索，一定会找到自己满意的食谱的。 &lt;/p&gt;  &lt;p&gt;科技不断推陈出新。我已经再也不听CD了，我前不久扔掉了大部分CD，只保存几张有纪念价值的。我也和很多人一样认为，电子书是未来的趋势，也许未来我们也不需要再买那么多实体书了，即环保，又方便整理查找。 &lt;/p&gt;  &lt;p&gt;最近我也丢掉了百分之九十以前读硕士时的笔记和打印资料，在德国因为专业书籍非常贵所以当时我的书都是打印和影印的，所以非常多，大概有2大箱。去年搬家的时候不舍得扔，这两大箱具重的资料和我一起痛苦地搬了一次家。在过去的一年，我根本没有看过这些资料一眼，其实它们对我来说也几乎没有用处了，它们唯一的价值就是可以唤起一些读书时的记忆，其实当我需要找什么知识的时候，上网一搜或到图书馆一下就搞定了。现在我只留下了部分笔记，也算是留点纪念吧。 &lt;/p&gt;  &lt;p&gt;其实对我们来说没有用的东西就是会拖住我们的东西，扔掉它们，我们的生活会更加轻松愉快。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TH7a3Nyw5fI/AAAAAAAAAUg/2aMQBKOPXhE/s1600-h/DSC00740%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC00740" border="0" alt="DSC00740" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TH7a3q-w1iI/AAAAAAAAAUk/x9gPsHpYhr8/DSC00740_thumb%5B1%5D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;PS: 附图是我生日是得到的一张卡片，上面有海因里希·海涅的一首诗，很美，现附上诗词：&lt;/p&gt;  &lt;p&gt;Heine,Heinrich (1797-1856)    &lt;br /&gt;Der Schmetterling ist in die Rose verliebt（蝴蝶爱上了玫瑰） &lt;/p&gt;  &lt;p&gt;Der Schmetterling ist in die Rose verliebt, （蝴蝶爱上了玫瑰）    &lt;br /&gt;Umflattert sie tausendmal, （千百回围绕她身边）     &lt;br /&gt;Ihn selber aber goldig zart，Umflattert der liebende Sonnenstrahl.（充满爱意的阳光，温柔的缠绕着蝴蝶） &lt;/p&gt;  &lt;p&gt;Jedoch, in wen ist die Rose verliebt? （然而，玫瑰爱上的又是谁？）    &lt;br /&gt;Das wüßt' ich gar so gern. （这我真的很想了解。）     &lt;br /&gt;Ist es die singende Nachtigall?（是啼唱的夜莺？）     &lt;br /&gt;Ist es der schweigende Abendstern?（还是星星，黑夜沉默于？） &lt;/p&gt;  &lt;p&gt;Ich weiß nicht, in wen die Rose verliebt;（我不知道玫瑰爱上的是谁;）    &lt;br /&gt;Ich aber lieb' euch all?: （但我爱的是你们，全部这些：）     &lt;br /&gt;Rose, Schmetterling, Sonnenstrahl, Abendstern und Nachtigall. （星星，夜莺，玫瑰，还有阳光和蝴蝶。）&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-4064973671866731551?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4064973671866731551/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4064973671866731551' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4064973671866731551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4064973671866731551'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/09/blog-post.html' title='扔掉所有拖住你的东西，让生活更加轻松愉快'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/TH7a3q-w1iI/AAAAAAAAAUk/x9gPsHpYhr8/s72-c/DSC00740_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8002257269911711644</id><published>2010-08-26T17:16:00.001+02:00</published><updated>2010-08-26T17:21:16.486+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>如何做精彩的PPT报告</title><content type='html'>&lt;p&gt;前几天听了一个德国MM的讲座，关于如何做好一个PPT报告。一个讲座下来最有印象的就是关于心态调整的介绍，其实克服紧张害怕的心理，最好的方法就是改变自己的心态。    &lt;br /&gt;有两句话我还大略记得： &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Ja, Prima, ich kann endlich zeigen was ich kann. Endlich werde ich gefragt, ich kann das Thema wirklich gut präsentiert.      &lt;br /&gt;告诉自己：是的，我终于可以展现我的能力啦。我真的可以对这个题目非常好的进行报告。 &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;还有一些很重要的东西也许我们会常常忽略：    &lt;br /&gt;例如，你是否进行了大声的练习？&lt;strong&gt;多次大声练习，我们的演讲效果一定会更好。      &lt;br /&gt;&lt;/strong&gt;而且请在朋友面前进行演示一下，如果有相机更好，可以录下来看看。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/THaFTFHijCI/AAAAAAAAAUY/SQXsaG5xINM/s1600-h/DSC00547%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC00547" border="0" alt="DSC00547" src="http://lh5.ggpht.com/_7rEkBQiDq6I/THaFTkkgbZI/AAAAAAAAAUc/ImqqT-Fq_K0/DSC00547_thumb%5B1%5D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;还有一些要点，还是非常值得学习的，我这里记录一下，譬如：    &lt;br /&gt;形象也很重要，请穿正式一些的衣服，让人感到干净而且专业     &lt;br /&gt;要明确报告的的目     &lt;br /&gt;不要照屏幕念稿，也不要背     &lt;br /&gt;请使用一些简单的身体语言     &lt;br /&gt;注意语速的变化，该快则快，该重则重，该停顿处则适当停顿     &lt;br /&gt;图形更容易让人理解，多使用图形少用术语，图形可以让信息更为生动     &lt;br /&gt;请使用朴素的，简单的PPT     &lt;br /&gt;尽量让内容好懂     &lt;br /&gt;永远说“我们”     &lt;br /&gt;Magic Seven原则，也就是每个幻灯片不要超过7个概念或要点 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;如更好的提高听众的兴趣呢：    &lt;br /&gt;首先还是KISS (Keep It Simple and Stupid)原则，过于复杂难懂的内容是无法激发听众的兴趣的。     &lt;br /&gt;请注意我们的PPT的层次感，例如一些工科的报告可以使用这样的层次：&lt;strong&gt;动机--&amp;gt;遇到的问题--&amp;gt;我们的解决方案&lt;/strong&gt;。     &lt;br /&gt;正如前面所说的，我们可以适当使用一些图形或者一些简单的动画，注意是简单的，而不是复杂花俏的，这样可以提高听众的理解。     &lt;br /&gt;如果是一些工科的科研报告，那么可以适当使用一些Demo，简单的实验演示，会给整个报告带来非常好的效果。     &lt;br /&gt;对于一些报告也可以插入一些简短的视频，这对提高听众的兴趣也是一个很好的辅助。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最后我想再写一点点要点&lt;strong&gt;关于PPT的制作&lt;/strong&gt;： &lt;/p&gt;  &lt;p&gt;PPT文字的使用，字体大小部分，行间距的设置，其实对做好一份精彩的PPT报告也是极其重要的。我最近读了一本书&lt;a href="http://book.douban.com/subject/4243135/"&gt;《别告诉我你懂PPT》&lt;/a&gt;，书中总结的非常好。这里简单摘抄一些： &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;字号的选择，有一个很经典的8H（H是指height，高度）法则。通常来讲，一个会议室PPT的演示屏幕，高度不应该小于屋子长度的1／8。反过来说，就是说屏幕上的字可以在相当于屏幕高度8倍的距离里清晰地看到。有人换算过，这大概是20号左右的字号。      &lt;br /&gt;中文30—20号字，英文28—18号字这样的字号，看起来不费劲，一行也写得下一个完整句，能表达很多信息。       &lt;br /&gt;避免内容拥挤的另一个要点是行间距。如果允许，请使用1.5倍的行间距，这样的行距比较畅快，让人觉得比较大气、坦然。 &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;我使用英文或德文写PPT的时候，一般我&lt;strong&gt;使用24号字&lt;/strong&gt;，这几乎可以让所有的听众非常舒服的看见。 &lt;/p&gt;  &lt;p&gt;最后再加一个摘要： &lt;/p&gt;  &lt;p&gt;《别告诉我你懂PPT》这本书中还提到，&lt;strong&gt;PPT的清楚表达，有三个层次的要求：      &lt;br /&gt;1．清晰可见       &lt;br /&gt;2．容易理解       &lt;br /&gt;3．体现个性&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;附图是我家边上的不知名的花。 &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8002257269911711644?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8002257269911711644/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8002257269911711644' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8002257269911711644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8002257269911711644'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/08/ppt.html' title='如何做精彩的PPT报告'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/THaFTkkgbZI/AAAAAAAAAUc/ImqqT-Fq_K0/s72-c/DSC00547_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7238788389882570068</id><published>2010-08-19T17:25:00.000+02:00</published><updated>2010-08-26T17:26:09.826+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>用德语进行简报/报告/演讲</title><content type='html'>&lt;p&gt;报告（10-15分钟）的长度一般比较长，而简报比较短（约5分钟），其实也是属于演讲的范畴，我个人是这样认为的。    &lt;br /&gt;又到了要做报告的时刻，其实在国内我如果使用中文进行演讲还不错，但是用德语进行演讲就相当烂了，已经用德语进行很多次的报告，都相当一般，其实主要就是语言的问题，但是如何克服它呢，其实就是“准备，准备，再准备”。     &lt;br /&gt;以下是一些我收集的短句，也许可能对需要的人有所帮助（我就不对所有的进行翻译了，哈）。附图是家附近的花丛拍的，勤劳的蜜蜂，晚上还在工作呢 ^_^ || &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TG0MIg86ePI/AAAAAAAAAUM/OCg385pKB9E/s1600-h/DSC00454%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC00454" border="0" alt="DSC00454" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TG0MJNUtxMI/AAAAAAAAAUQ/Kpuwdg4VMWw/DSC00454_thumb%5B1%5D.jpg?imgmax=800" width="304" height="229" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;引言：&lt;/strong&gt;     &lt;br /&gt;Ich möchte eine kurze Präsentation halten über... （我的简短的报告是关于...）     &lt;br /&gt;In meiner Präsentation geht es um ...（我的演讲是关于...）     &lt;br /&gt;Ich möchte über ... erzählen: ...（我想关于...介绍）     &lt;br /&gt;Ich denke, jeder hat schon einmal von ... gehört, aber kaum keiner weiß wirklich richtig viel darüber.     &lt;br /&gt;... Darum möchte ich euch etwas darüber berichten.     &lt;br /&gt;（我想每个人都有听说过...，但几乎没有人十分正确了解它。...因此，我想介绍一些关于它的东西。） &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;做报告的过程：&lt;/strong&gt;     &lt;br /&gt;Lassen Sie mich zunächst erklären, warum / wie ...     &lt;br /&gt;Jetzt möchte ich etwas über ... erzählen     &lt;br /&gt;Nun möchte ich einen kleinen Einblick geben in ...     &lt;br /&gt;Lassen Sie uns (nun) herausfinden, warum / wie ...     &lt;br /&gt;Lassen Sie uns nun zu ... kommen.     &lt;br /&gt;Wie ich bereits ankündigte, ...     &lt;br /&gt;Ein weiterer Aspekt ist ...     &lt;br /&gt;Die Ursprünge von ... gehen zurück auf ...&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;... begann als ...     &lt;br /&gt;Wie Sie sicherlich wissen, ...&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Ihr Sie wissen ja sicher, dass ...     &lt;br /&gt;Vielleicht haben Sie schon von ... gehört     &lt;br /&gt;Vielleicht haben Sie das schon einmal gesehen.     &lt;br /&gt;Am Anfang gab es ...     &lt;br /&gt;Viele Menschen kannten / wussten / kennen / wissen ...     &lt;br /&gt;Kaum jemand kannte / wusste / kennt / weiß ...     &lt;br /&gt;Wie behauptet wird, ...&amp;#160;&amp;#160;&amp;#160; （据称，...）     &lt;br /&gt;Man kann sagen, dass ... （可以说，...）&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;Wie ich gelesen habe ...&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;关于图形和图片：&lt;/strong&gt;     &lt;br /&gt;Lassen Sie mich das mit einer Grafik erklären.     &lt;br /&gt;Die Grafik zeigt, dass ...     &lt;br /&gt;Wie Sie (auf dem Bild) sehen können ...     &lt;br /&gt;Auf dem nächsten Bild können Sie ... sehen.     &lt;br /&gt;Hier ist noch ein Bild.     &lt;br /&gt;Das nächste Bild zeigt, wie ...     &lt;br /&gt;Lassen wir die Bilder für sich selbst sprechen.     &lt;br /&gt;Ich denke, dass Bild zeigt sehr deutlich, wie / dass ...     &lt;br /&gt;Hier können Sie jetzt ... sehen. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;提一下“主题思想”：      &lt;br /&gt;&lt;/strong&gt;Es war ein großer Erfolg für ...（这对于...是一个大的成功）     &lt;br /&gt;Es war / ist ein sehr wichtiges / besonderes Ereignis. （这是一个重要的结果）     &lt;br /&gt;Das beweist, dass ... （这证明了）     &lt;br /&gt;Der Grund dafür ist, dass ... （原因是）     &lt;br /&gt;Das Ergebnis davon ist, dass...（这样做的结果是...）     &lt;br /&gt;Das liegt daran, weil ... （这是因为）     &lt;br /&gt;Anders ausgedrückt ... （换句话来说）     &lt;br /&gt;Ich möchte noch einmal wiederholen, dass ...（我想再重复一遍）     &lt;br /&gt;Ich möchte (nur noch) hinzufügen ...（我想附加） &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;结束：&lt;/strong&gt;     &lt;br /&gt;... hat einen großen Einfluss auf das heutige Leben.     &lt;br /&gt;... ist heute leider kaum noch bekannt.     &lt;br /&gt;... hat mich sehr beeindruckt.     &lt;br /&gt;Zusammenfassend lässt sich sagen, dass ...     &lt;br /&gt;Das war meine Präsentation zu ... （这是我的报告关于）     &lt;br /&gt;Ich bin nun gerne bereit, Fragen zu beantworten.     &lt;br /&gt;Gibt es Fragen?     &lt;br /&gt;Nächste Frage.     &lt;br /&gt;Genau.     &lt;br /&gt;Das ist richtig. / Das stimmt.     &lt;br /&gt;Das ist nicht richtig. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-7238788389882570068?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7238788389882570068/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7238788389882570068' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7238788389882570068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7238788389882570068'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/08/blog-post_5392.html' title='用德语进行简报/报告/演讲'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TG0MJNUtxMI/AAAAAAAAAUQ/Kpuwdg4VMWw/s72-c/DSC00454_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7743491327477480423</id><published>2010-08-13T22:32:00.001+02:00</published><updated>2010-08-13T22:36:24.500+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>推荐一张精选集《工作，阅读时需要的旋律》</title><content type='html'>&lt;p&gt;我在8月6日在虾米网上做了一张AM精选集：    &lt;br /&gt;&lt;a href="http://www.xiami.com/song/showcollect/id/1563300?trace_collect_orinew_list"&gt;http://www.xiami.com/song/showcollect/id/1563300?trace_collect_orinew_list&lt;/a&gt;     &lt;br /&gt;还挺受欢迎的，截止8月13日已经有超过7万次的播放，超过150次的推荐和600次以上的收藏。     &lt;br /&gt;看来这张精选集还是挺受大家认可的 ^_^     &lt;br /&gt;这张精选的曲子其实大多数是我们家琳琳选的 *^_^* &lt;/p&gt;  &lt;p&gt;我在虾米上的主页：&lt;a href="http://www.xiami.com/u/492943"&gt;http://www.xiami.com/u/492943&lt;/a&gt;     &lt;br /&gt;这个id主要是由我们家琳琳管理 ~^o^~ &lt;/p&gt;  &lt;p&gt;这里做一个小小的推荐，工作，阅读时听听这张精选集，也许可以提高工作效率哦 ∩__∩y &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最后附带发一张照片：    &lt;br /&gt;这就是传说中的章鱼哥的一只脚。     &lt;br /&gt;上个星期六，我和我们家琳琳特地坐了2个多小时火车到奥博豪森Oberhausen的See life去看章鱼哥。     &lt;br /&gt;章鱼哥的水族箱不大，但是前来围观的粉丝，超级多。     &lt;br /&gt;可惜那天章鱼哥不赏脸，一直躲在角落，让人无法一睹尊容，只能看到一只脚。     &lt;br /&gt;于是就产生了以下这张照片。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TGWr0VwEbDI/AAAAAAAAAUE/vRHIBfG7_rE/s1600-h/Image.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="章鱼哥的一个脚" border="0" alt="章鱼哥的一个脚" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TGWr1k7EA4I/AAAAAAAAAUI/dtDz8GuRDPg/Image.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-7743491327477480423?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7743491327477480423/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7743491327477480423' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7743491327477480423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7743491327477480423'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/08/blog-post_13.html' title='推荐一张精选集《工作，阅读时需要的旋律》'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_7rEkBQiDq6I/TGWr1k7EA4I/AAAAAAAAAUI/dtDz8GuRDPg/s72-c/Image.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-6383312582732094237</id><published>2010-08-05T13:10:00.001+02:00</published><updated>2010-08-05T13:10:12.483+02: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;p&gt;编程的时候，阅读的时候，工作的时候，或者是做家务的时候，最适合听一些轻快，充满节奏感的吉他曲，常常让人有种耳花缭乱的感觉，但是吉他的声音又丝毫不会打乱我们的思考，也许还可以提高工作效率。&lt;/p&gt;  &lt;p&gt;说起来还有点不好意思，我大学的时候还学过一阵子吉他，但是现在几年没碰几乎全忘了，前几天在朋友家看到一把吉他，稍微试试，结果连最基本的和铉都弹不出来，哎。但是唯一还剩下的就是我还是认识一些吉他大师，所以我使用了虾米做了一张吉他的精选集，大大地赞一下虾米网，非常棒，我几乎可以找到我需要的大部分歌曲。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TFqcESaV36I/AAAAAAAAAT8/bKEIgsAlo4U/s1600-h/45701_1277044589M27X%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="45701_1277044589M27X" border="0" alt="45701_1277044589M27X" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TFqcE8qtJHI/AAAAAAAAAUA/FbluJoTqEQs/45701_1277044589M27X_thumb%5B1%5D.jpg?imgmax=800" width="352" height="233" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;精选集的地址为：&lt;a href="http://www.xiami.com/song/showcollect/id/570736"&gt;&lt;strong&gt;琴弦上的舞蹈--吉他&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.xiami.com/song/showcollect/id/570736"&gt;http://www.xiami.com/song/showcollect/id/570736&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;让我们去感受： &lt;/p&gt;  &lt;p&gt;清新自然的木吉他。    &lt;br /&gt;使人沉醉精雕细琢的编曲。     &lt;br /&gt;吉他音箱共鸣声的无限通透。     &lt;br /&gt;奔放与热情，却不失文雅的琴声。     &lt;br /&gt;通过吉他带来的精彩绝伦的空间感。     &lt;br /&gt;也许你还可以发现一些放荡不羁的音符。     &lt;br /&gt;不经意的点弦手法和滑音，轻轻飘荡在空气中。     &lt;br /&gt;演奏家的指尖在琴弦上舞动着，融合了力量，柔美。 &lt;/p&gt;  &lt;p&gt;一切都等待着你来发觉，请告诉我这是在空中弥散的音符是什么味道，是青柠味，是海水，香浓浓的咖啡，还是...    &lt;br /&gt;是什么场景，是夏季校园的午后，还是冬日的暖阳中的带着寂寞格调的都市，还是...     &lt;br /&gt;描述的是什么感情，甜蜜的，或者悲伤的，还是... &lt;/p&gt;  &lt;p&gt;这张精选里有：    &lt;br /&gt;由德冈庆也及三浦拓也二人合组而成的DEPAPEPE。     &lt;br /&gt;Trace bundy。     &lt;br /&gt;岸部真明。     &lt;br /&gt;押尾コータロー。     &lt;br /&gt;JerryC。     &lt;br /&gt;等等... &lt;/p&gt;  &lt;p&gt;特别收录了三首卡农，由不同的味道，同样的是它们会把你带入不同的舒缓人心的音乐空间。 &lt;/p&gt;  &lt;p&gt;通过他们的吉他声来聆听音乐的灵魂吧。    &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/6976291393224066038-6383312582732094237?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/6383312582732094237/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=6383312582732094237' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6383312582732094237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6383312582732094237'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/08/blog-post.html' title='编程的时候我喜欢听吉他，你呢?'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TFqcE8qtJHI/AAAAAAAAAUA/FbluJoTqEQs/s72-c/45701_1277044589M27X_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-2485683641341126821</id><published>2010-07-30T00:11:00.001+02:00</published><updated>2010-07-30T00:18:58.967+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>混合的美妙-鸡尾酒</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TFH8nUy2IoI/AAAAAAAAAT0/-k4t66Vi52U/s1600-h/dd-cocktail%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="dd-cocktail" border="0" alt="dd-cocktail" align="left" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TFH8oDUuLcI/AAAAAAAAAT4/EuGXIcKK2eM/dd-cocktail_thumb%5B1%5D.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;最近在一本杂志上看到了一些鸡尾酒的做法，突然间很有兴趣，今天有机会就恶补一下鸡尾酒的常识，家里正好有这几年积累下来的几瓶烈酒，过几天自己调一下试试。&lt;/p&gt;  &lt;p&gt;以下内容来都自百度百科，这里摘抄出一些我感兴趣的内容。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;鸡尾酒的灵魂&lt;/strong&gt;：     &lt;br /&gt;&lt;strong&gt;&lt;em&gt;白兰地（Brandy）&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;白兰地在荷兰语中是“烧焦的葡萄酒”。13世纪那些到法国沿海运盐的荷兰船只将法国干邑地区盛产的葡萄酒运至北海沿岸国家，这些葡萄酒深受欢迎。至16世纪，由于葡萄酒产量的增加及海运的途耗时间长，使法国葡萄酒变质滞销。这时，荷兰人利用这些葡萄酒作为原料，加工成葡萄蒸馏酒，这样的蒸馏酒不仅不会因长途运输而变质，并且由于浓度高反而使运费大幅度降低，葡萄蒸馏酒销量逐渐大增，这就是现在的被称之为原白兰地的蒸馏酒。四个等级，特级（X.O）、优级（V.S.O.P）、一级（V.O）和二级（三星和V.S）。其中，X.O酒龄为20-50年，V.S.O.P最低酒龄为6-20年，VO最低酒龄为3年，二级最低酒龄为2年。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;朗姆酒(RUM)        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;朗姆酒是以甘蔗糖蜜为原料生产的一种蒸馏酒，也称为“兰姆酒”。用甘蔗压出来的糖汁，经过发酵、蒸馏而成。此种酒的主要生产特点是：选择特殊的生香(产酯)酵母和加入产生有机酸的细菌，共同发酵后，再经蒸馏陈酿而成。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;金酒(GIN)&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;金酒，又名叫杜松子酒，最先由荷兰生产，在英国大量生产后闻名于世，是世界第一大类的烈酒。     &lt;br /&gt;荷式金酒被称为杜松子酒(Geneva)，是以大麦芽与裸麦等为主要原料，配以杜松子酶为调香材料，经发酵后蒸馏三次获得的谷物原酒，然后加入杜松子香料再蒸馏，最后将精馏而得的酒，贮存于玻璃槽中待其成熟，包装时再稀释装瓶。英式金酒的生产过程较荷式金酒简单，它用使用酒槽和杜松子及其它香料共同蒸馏而得干金酒。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;伏特加（VODKA）&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;伏特加是由水和经蒸馏净化的乙醇所合成的透明液体，一般更会经多重蒸馏从而达到更纯更美味的效果，市面上品质较好的伏特加一般是经过三重蒸馏的。在蒸馏过程中除水和乙醇外亦会加入马铃薯、菜糖浆及黑麦或小麦，如果是制作有味道的伏特加更会加入适量的调味料。伏特加酒的酒精含量通常由35%到50%不等。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;威士忌（Whisky）        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;威士忌（Whisky，Whiskey）是一种以大麦、黑麦、燕麦、小麦、玉米等谷物为原料，经发酵、蒸馏后放入橡木桶中陈酿、勾兑而成的一种酒精饮料，属于蒸馏酒类。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;龙舌兰（Tequila）        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;龙舌兰酒又称“特基拉酒”，是墨西哥的特产，被称为墨西哥的灵魂。特基拉是墨西哥的一个小镇，此酒以产地得名。特基拉酒有时也被称为“龙舌兰”烈酒，是因为此酒的原料很特别，以龙舌兰（agave）为原料。龙舌兰是一种龙舌兰科的植物，通常要生长12年，成熟后割下送至酒厂，再被割成两半后泡洗24小时。然后榨出汁来，汁水加糖送入发酵柜中发酵两天至两天半，然后经两次蒸馏。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;鸡尾酒的配料      &lt;br /&gt;&lt;/strong&gt;力娇酒（Liqueur）及五大汽水：苏打水（Soda Water），可口可乐（Coke Cola），干姜水（Ginger Water），七喜（7 Up），汤力水（Tonic Water）。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;调鸡尾酒的主要工具&lt;/strong&gt;     &lt;br /&gt;长匙Bar Spoon     &lt;br /&gt;摇酒器Shaker     &lt;br /&gt;量酒杯Measure Cup：通常以毫升、量杯（盎司）为单位。     &lt;br /&gt;冰桶Ice Bucket，冰铲Scoop     &lt;br /&gt;过滤器(隔冰器)Strainer &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;马丁尼      &lt;br /&gt;&lt;/strong&gt;介绍一下鸡尾酒之王（MARTINI），由1.5盎司「金酒」以及几滴「涩苦艾酒」，再加上橄榄一个或柠檬皮一片作为装饰，口感锐利、深奥。MARTINI其实市面上就有卖现成的。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;鸡尾酒的调色      &lt;br /&gt;&lt;/strong&gt;基酒：基酒除伏特加、金酒等少数几种无色烈酒外，大多数酒都有自身的颜色。如白兰地呈琥珀色，威士忌色泽棕黄带红，葡萄酒有深红、桃红和浅金黄色等。     &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/6976291393224066038-2485683641341126821?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/2485683641341126821/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=2485683641341126821' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2485683641341126821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2485683641341126821'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/07/blog-post_30.html' title='混合的美妙-鸡尾酒'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_7rEkBQiDq6I/TFH8oDUuLcI/AAAAAAAAAT4/EuGXIcKK2eM/s72-c/dd-cocktail_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-9126440121973821564</id><published>2010-07-27T23:56:00.001+02:00</published><updated>2010-07-27T23:56:53.551+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='读书笔记'/><title type='text'>推荐一本书《摆出好POSE:美少女外拍动作完美图解》</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TE9WGsMOfQI/AAAAAAAAATs/7yl02FFlxEc/s1600-h/DSC00142%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC00142" border="0" alt="DSC00142" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TE9WJPaxecI/AAAAAAAAATw/TrwvJxcc7jA/DSC00142_thumb%5B2%5D.jpg?imgmax=800" width="364" height="484" /&gt;&lt;/a&gt; 附图为法兰克福一个商场的大型乐高积木。&lt;/p&gt;  &lt;p&gt;很久没写书评，今天另类一点，写一篇关于一本摄影的书。    &lt;br /&gt;因为这本书的书名出现“美少女”，“完美图解”，这几个关键词，大大提高对我的吸引力，我这个摄影入门小白，才会想提起兴趣翻翻这本书，读了一下，其实还真不错嘛。     &lt;br /&gt;正如这本书的简介说的。     &lt;br /&gt;会玩相机，人像摄影只能算成功了一半，让模特儿摆出美丽的POSE才是成功的关键。     &lt;br /&gt;如何摆出美丽的POSE其实也是一门小小学问。看了这本书后，一定会有所收获的。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;你知道吗，拍摄时模特的基本站姿应该怎样？    &lt;br /&gt;摆站姿时，如果想表现出模特儿修长与美丽的腰，可以请模特将重心放在远离镜头的脚上，靠近镜头的脚则稍微往后伸展，并让脚尖轻轻着地，放在腰上的手可以稍稍用力往前推一下，加强凸显腰部曲线。     &lt;br /&gt;还有一些小技巧，这里摘抄几点。 &lt;/p&gt;  &lt;p&gt;站立时，较靠近镜头的手记得要有点动作。    &lt;br /&gt;在椅子上时，两脚前后分开会比两脚放在一起来得美丽。     &lt;br /&gt;性感的蹲姿，比较适合侧面。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;这本书的绝大部分篇幅在于&amp;quot;外拍好POSE全图解&amp;quot;这部分。    &lt;br /&gt;这部分主要是日系清淡风的动作，比较自然，亲和力也够，书中MM够可爱。     &lt;br /&gt;里面提供了有上百种拍照姿势，只要照着书上的例子来摆POSE就可以拍出不错的照片。     &lt;br /&gt;里面有很多快速简单的技巧教学。     &lt;br /&gt;这里随便摘抄一些。 &lt;/p&gt;  &lt;p&gt;侧躺比较好拍，用手将头撑起来会比较好，腰部往地上压，这样身体的曲线才会出来。    &lt;br /&gt;如果可能的话，坐在墙上眺望远方是一个不错的选择。     &lt;br /&gt;在墙边，可以让模特背靠墙，目光向下看，可以呈现出忧郁可怜的气质，如果墙上有趣味点如涂鸦，可以请模特与其互动，增加画面的趣味性。     &lt;br /&gt;用广角时，可以使用夸张动作，例如摆出一个相框。     &lt;br /&gt;稍微侧面的微笑，通常会比正面更吸引人，更活泼有变化。     &lt;br /&gt;手不知道放哪里时，就找个身体部位摸吧。摸耳朵，头是最常见好用哦，摸的时候轻轻碰到即可，不要太用力压迫到肌肉导致变形。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最后来一个总结。    &lt;br /&gt;很适合新手，简单又非常实用的书，更重要的是书中的MM都非常养眼，即使不学摄影，看看可爱的MM也是不错的，哈，推荐一下。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-9126440121973821564?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/9126440121973821564/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=9126440121973821564' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/9126440121973821564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/9126440121973821564'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/07/pose.html' title='推荐一本书《摆出好POSE:美少女外拍动作完美图解》'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/TE9WJPaxecI/AAAAAAAAATw/TrwvJxcc7jA/s72-c/DSC00142_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8762756224568151294</id><published>2010-07-25T15:04:00.001+02:00</published><updated>2010-07-25T15:04:59.478+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>今天你已经食用了5份蔬果了吗？</title><content type='html'>&lt;p&gt; 德国有一项已经开展了长达10年的健康饮食推广运动，就是“每日五份蔬果 - 5 am Tag Obst&amp;amp;Gemuese（&lt;a href="http://www.5amtag.de/"&gt;http://www.5amtag.de/&lt;/a&gt;）”，我觉得这个运动非常好，以后在我的博客，我会对这个运动进行一些推介。我们都知道，其实健康就是良好的作息加上健康正确的饮食还有坚持运动，当然还有一个好的心态。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TEw2XVl-iYI/AAAAAAAAATk/u3iRJXRMsuk/s1600-h/obstundgemuese_01%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="obstundgemuese_01" border="0" alt="obstundgemuese_01" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TEw2XyvbKdI/AAAAAAAAATo/Ya_MRec-BMc/obstundgemuese_01_thumb%5B1%5D.jpg?imgmax=800" width="506" height="156" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;健康正确的饮食其实很简单，就从每日五份蔬果开始吧。 &lt;/p&gt;  &lt;p&gt;一天食用5份水果和蔬菜 - 这其实比你想像还要容易。 &lt;/p&gt;  &lt;p&gt;至于每份蔬果的分量，你可以参考以下例子： &lt;/p&gt;  &lt;p&gt;一份蔬菜，可以是...   &lt;br /&gt;一个小萝卜，1个青椒或者3个西红柿    &lt;br /&gt;2把的生菜沙拉或切碎胡萝卜    &lt;br /&gt;1小罐蔬菜（大概125克）    &lt;br /&gt;2把冷冻西兰花，菠菜或蘑菇（约125克）    &lt;br /&gt;1把干豆类例如扁豆或豌豆    &lt;br /&gt;1把腌制的白菜或蔬菜    &lt;br /&gt;1杯番茄或胡萝卜汁&lt;/p&gt;  &lt;p&gt;一份水果，可以是...   &lt;br /&gt;1个苹果，1个香蕉，桔子或桃子    &lt;br /&gt;2把草莓，覆盆子或葡萄    &lt;br /&gt;4汤匙炖水果    &lt;br /&gt;5个梅干或杏干    &lt;br /&gt;1杯含量100％的果汁    &lt;br /&gt;1/2把坚果（约25克）&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8762756224568151294?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8762756224568151294/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8762756224568151294' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8762756224568151294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8762756224568151294'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/07/5.html' title='今天你已经食用了5份蔬果了吗？'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TEw2XyvbKdI/AAAAAAAAATo/Ya_MRec-BMc/s72-c/obstundgemuese_01_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-1874839700619262986</id><published>2010-07-16T23:45:00.001+02:00</published><updated>2010-07-16T23:45:18.322+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具使用技巧'/><title type='text'>推荐一款免费又好用的系统监测软体 OpenHardwareMonitor</title><content type='html'>&lt;p&gt;   &lt;br /&gt;可以从它的官方网站下载：&lt;a href="http://openhardwaremonitor.org/"&gt;http://openhardwaremonitor.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;几天前，一个同事给我介绍了一个系统监测软体OpenHardwareMonitor，试了一下很不错，很轻量但是非常简单好用。    &lt;br /&gt;这里做一个简单的介绍。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;OpenHardwareMonitor是一个免费的开源应用程序，可以用它来监测计算机温度，风扇转速，电压，CPU的负载等等。     &lt;br /&gt;它支持大多数主流的硬件监测。 CPU温度可以监视通过阅读英特尔和AMD处理器的核心温度传感器。可以显示从ATI和Nvidia显示卡的传感器以及硬盘的温度传感器得到的数据。     &lt;br /&gt;Openhardwaremonitor可以在32-bit and 64-bit的Microsoft Windows和任何基于x86的Linux操作系统上运行。     &lt;br /&gt;更酷的是，我们还可以将温度变化绘制成图形。 &lt;/p&gt;  &lt;p&gt;下图是在我的笔记本上使用OpenHardwareMonitor的截图。 &lt;/p&gt;  &lt;p&gt;&lt;img src="https://lh5.googleusercontent.com/Y0IC4OilZzqlH8wifusuAlgrggDVMRLoF5e89ZZLt6o7LxqQsZBnSEPfhX42TVJc4gqsz_HUnUvpayl5mh6Uk5y3hfc0mBw_eObKja_0E0-xKtXS" width="300" height="418" /&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-1874839700619262986?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/1874839700619262986/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=1874839700619262986' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1874839700619262986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1874839700619262986'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/07/openhardwaremonitor.html' title='推荐一款免费又好用的系统监测软体 OpenHardwareMonitor'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-1992050736646045172</id><published>2010-07-12T23:14:00.001+02:00</published><updated>2010-07-12T23:14:12.270+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>法国人，美国人，日本人，研发的机器人</title><content type='html'>&lt;p&gt;最近看了一些关于机器人设计的论文，无意间看了几个视频，实在令人惊叹。 &lt;/p&gt;  &lt;p&gt;最精彩的不是视频，而是以下“20 Nao Robots Dancing in Synchronized Harmony”（这是来自法国的机器人）这个视频的网友的评论。   &lt;br /&gt;这个总结实在太精彩的，风趣幽默，赞一个。    &lt;br /&gt;the US isn't leading in this tech because they can't carry a gun    &lt;br /&gt;Japan isn't leading in this tech because you can't have sex with it    &lt;br /&gt;but? what does France do?...makes them fucking dance &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:96f6923d-0d7b-40fe-a252-50d4b9db8a85" class="wlWriterEditableSmartContent"&gt;&lt;div id="9d0225db-e90a-47ff-80ac-69bdf9f86a58" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=4t1NWH6G1f0&amp;amp;feature=player_embedded#!" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/_7rEkBQiDq6I/TDuFnvwQ9II/AAAAAAAAATY/cuR1iuCfkBo/video984861477a27%5B3%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('9d0225db-e90a-47ff-80ac-69bdf9f86a58'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/4t1NWH6G1f0&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/4t1NWH6G1f0&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;接下来看看日本人的机器人吧&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:b53a077a-3825-467a-a325-912d79367328" class="wlWriterEditableSmartContent"&gt;&lt;div id="53b851f0-8b77-4933-898e-926ce3969b65" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=6Ak3coBKBC0&amp;amp;feature=related" target="_new"&gt;&lt;img src="http://lh4.ggpht.com/_7rEkBQiDq6I/TDuFoH10T7I/AAAAAAAAATc/rHZ_pVQMjP0/video95bef23412d8%5B3%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('53b851f0-8b77-4933-898e-926ce3969b65'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/6Ak3coBKBC0&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/6Ak3coBKBC0&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;美国人的机器人&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7438a11b-9937-416e-b0a4-f571042d9b00" class="wlWriterEditableSmartContent"&gt;&lt;div id="2d80d069-5722-43c2-ada7-437bb8228343" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=VNRtL8exd14&amp;amp;feature=channel" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_7rEkBQiDq6I/TDuFoglnhjI/AAAAAAAAATg/Q2l5ySZDRbE/video3597ac9c9483%5B3%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('2d80d069-5722-43c2-ada7-437bb8228343'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/VNRtL8exd14&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/VNRtL8exd14&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&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/6976291393224066038-1992050736646045172?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/1992050736646045172/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=1992050736646045172' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1992050736646045172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1992050736646045172'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/07/blog-post.html' title='法国人，美国人，日本人，研发的机器人'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/TDuFnvwQ9II/AAAAAAAAATY/cuR1iuCfkBo/s72-c/video984861477a27%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4814298466399723643</id><published>2010-07-04T00:22:00.001+02:00</published><updated>2010-07-04T00:22:50.015+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活'/><title type='text'>看完德阿比赛，上一张bild.de上截的图片</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;和朋友看完德国4:0阿根廷    &lt;br /&gt;太疯狂了，史上最嗜血德国队诞生     &lt;br /&gt;市中心的德国球迷也陷入疯狂     &lt;br /&gt;刚刚上了bild.de     &lt;br /&gt;一上网就听到     &lt;br /&gt;&amp;quot;Don't Cry for Me Argentina&amp;quot;     &lt;br /&gt;这句背景音乐，阿根廷真的是太惨了     &lt;br /&gt;我既不是德国球迷也不是阿根廷球迷     &lt;br /&gt;我只是一个伪球迷     &lt;br /&gt;看到3：0的时候已经不忍心了     &lt;br /&gt;希望阿根廷能够扳回一两个球 &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TC-4NUS0trI/AAAAAAAAATQ/1_JGXLNLx0k/s1600-h/WM2010_bild_de%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WM2010_bild_de" border="0" alt="WM2010_bild_de" src="http://lh6.ggpht.com/_7rEkBQiDq6I/TC-4ONWWMfI/AAAAAAAAATU/l5fYM1e7syQ/WM2010_bild_de_thumb%5B1%5D.png?imgmax=800" width="624" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;上一张bild.de上截的图片（我特选这张图片，比我在市中心用手机拍的照片震撼多了）    &lt;br /&gt;上面的德语为：     &lt;br /&gt;Wir sind so stolz auf Euch!     &lt;br /&gt;我们真为你们感到骄傲！     &lt;br /&gt;IHR seid Wahnsinn!     &lt;br /&gt;你们是疯狂的!     &lt;br /&gt;Halbfinale gegen Spanien     &lt;br /&gt;Aber die packen wir!     &lt;br /&gt;半决赛对阵西班牙     &lt;br /&gt;但是我们搞定他们！ &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;现在德国人，真的是陷入疯狂    &lt;br /&gt;今天德国天气极热，大概是今年最热的     &lt;br /&gt;极热的天气加上德国队疯狂的胜利     &lt;br /&gt;这个胜利够全德国疯狂一阵子了     &lt;br /&gt;我的一句话点评     &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/6976291393224066038-4814298466399723643?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4814298466399723643/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4814298466399723643' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4814298466399723643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4814298466399723643'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/07/bildde.html' title='看完德阿比赛，上一张bild.de上截的图片'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/TC-4ONWWMfI/AAAAAAAAATU/l5fYM1e7syQ/s72-c/WM2010_bild_de_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8329220683817169615</id><published>2010-06-28T14:00:00.001+02:00</published><updated>2010-06-28T14:00:15.759+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='流媒体技术'/><title type='text'>容器格式 Container format</title><content type='html'>&lt;p&gt;这是一个非常长期的计划，在hanyionet的博客中将陆续对“流媒体技术”的方方面面进行介绍。在这里我试图梳理一些重要的知识点，力求以最简单易懂的语言进行介绍，并且适度提供部分英文特殊名称，以便读者进行进一步的搜索。每篇文章都尽量精简，只对一个小的方面进行探讨，以前也写过一部分关于流媒体技术的文章，以后也会陆续收录到这个专栏里。 &lt;/p&gt;  &lt;p&gt;容器格式 Container format &lt;/p&gt;  &lt;p&gt;一个多媒体容器格式是一种文件格式，它指定如何将数据存储在文件中。它并不指定数据应该如何编码。它也被称为meta-format，因为它不是只存储实际数据，而且描述了数据信息是如何在文件中存储。音频或视频流可以使用许多不同的算法进行编码，但它们只是在很少的几种文件格式中存储。    &lt;br /&gt;下图（来自互联网）体现了编解码器Codec和容器格式Container format的关系。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TCiOyxS_NGI/AAAAAAAAATI/J8zLVpr1fYI/s1600-h/video-container%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="video-container" border="0" alt="video-container" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TCiOzryklgI/AAAAAAAAATM/bxHhAtGQSJQ/video-container_thumb%5B2%5D.png?imgmax=800" width="364" height="189" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;用于实际上编码/解码视听数据的算法称为编解码器。编解码器Codec是为编码器/解码器的简称。容器中的编解码器的头(Codec header)包含了非常重要的信息对于用来解码视频文件。例如，它描述了有关视频的帧的帧率，分辨率和编码算法等。音频/视频流解码总是根据在编解码器中的资料头结构。不同的容器格式会拥有不同的头结构(header structure)。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;视频播放器先读取在容器文件编解码器的头信息，然后在视频播放器里找到对应分路器，并初始化将用于视频解码运行时播放视频流的适当的解码器。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;现在大部分的编解码器信息不是被储存在文件的开头，就是被存储在文件的末尾，在播放视频的时候，作为头信息没有需要作任何的改变。这意味着每当视频播放器遇到一个新的视频文件，视频播放器必须读取头文件信息，然后初始化相应的解码器，最后解码和播放视频。这个过程会导致在视频播放的时候会产生几毫秒的延迟。这就是为什么我们不能播放两个单独视频文件，在同一个视频播放器实例，除非视频播放器同时提供了一个或多个缓冲区，或者相应功能的多个实例编解码器。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8329220683817169615?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8329220683817169615/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8329220683817169615' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8329220683817169615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8329220683817169615'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/container-format.html' title='容器格式 Container format'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TCiOzryklgI/AAAAAAAAATM/bxHhAtGQSJQ/s72-c/video-container_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7675568945133833437</id><published>2010-06-27T00:49:00.001+02:00</published><updated>2010-06-27T00:49:40.003+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='流媒体技术'/><title type='text'>数字视频 Digital Video</title><content type='html'>&lt;p&gt;对“流媒体技术”有了一定的接触后，hanyionet现在开了一个“流媒体技术”的专栏。这是一个非常长期的计划，在hanyionet的博客中将陆续对“流媒体技术”的方方面面进行介绍。在这里我试图梳理一些重要的知识点，力求以最简单易懂的语言进行介绍，并且适度提供部分英文特殊名称，以便读者进行进一步的搜索。每篇文章都尽量精简，只对一个小的方面进行探讨，以前也写过一部分关于流媒体技术的文章，以后也会陆续收录到这个专栏里。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;什么是流媒体技术，其实流媒体技术也称流式媒体技术。所谓流媒体技术就是把连续的影像流媒体技术和声音信息经过压缩处理后放上网站服务器，让用户一边下载一边观看、收听，而不要等整个压缩文件下载到自己的计算机上才可以观看的网络传输技术。在第一篇文章，我想介绍的是数字视频。 &lt;/p&gt;  &lt;p&gt;其实一个视频是由多个数据流组成。在每一个电影文件，至少有两个单独的数据流对于音频和视频。最常见的其中一个标准，用于视频编码就是我们所熟悉的MPEG。运动图像专家组（MPEG）是由国际标准组织（ISO）和International Electrotechinical Commission (IEC)成立。运动图像专家组（MPEG）负责界定和发展音像和其他多媒体内容的标准。 &lt;/p&gt;  &lt;p&gt;每个的MPEG编码视频的组成成分是连续Group of Pictures (GOPs)，见下图。一个GOP还可能包含一个或全部的I-帧任何，P帧，B帧和D帧。I帧是Intra-frame的缩写形式，它被称为Intra-frame，因为它不依赖于任何其它帧它可以独立解码。I帧也称为关键帧。它们是类似的JPEGimage。当我们播放MPEG视频，寻找到其他视频位置的时候，它总是从开始最近的一帧。当然啦，一个视频的编码可以只使用I帧。这种压缩类型，通常是很快，但它会产生非常大的文件大小。两个I帧之间的非I帧的数目称为GOP的长度。通常，对于MPEG-1格式，GOP的大小通常为15至18，这意味着在两个I帧只间有15至18个非I帧。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TCaD38eQbHI/AAAAAAAAATA/IFmza-6jYRE/s1600-h/Group%20of%20Pictures%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Group of Pictures" border="0" alt="Group of Pictures" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TCaD4S949NI/AAAAAAAAATE/nmDQ1sMahYc/Group%20of%20Pictures_thumb%5B2%5D.png?imgmax=800" width="284" height="190" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;P帧，为预测帧（Predicted-frames）的缩写，也称为forward-predicted frames。该P帧只包含有关和以前引用帧图像的差异，可以是一个I帧或其他P帧。因此，使用P帧的主要目的是为了提高压缩率。 &lt;/p&gt;  &lt;p&gt;双向帧，B帧，也称为backward-predicted frames向后预测帧。它们相当类似的P帧进行预测，但是B帧同时使用上一帧和下一帧的信息。在B帧被解码并显示之前，邻近的I帧或者P帧必须被解码。这使得B帧解码的计算相对比较复杂。因此，它们需要更大的数据缓冲区，以避免出现显示拖延现象。 &lt;/p&gt;  &lt;p&gt;D帧是一种特殊的帧类型，只在MPEG - 1标准的出现。它们没有使用在后来的MPEG视频标准。D帧是一个独立的图像，提供非常低的图像质量和数据大小。它仅用于视频的快速预览。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-7675568945133833437?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7675568945133833437/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7675568945133833437' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7675568945133833437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7675568945133833437'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/digital-video.html' title='数字视频 Digital Video'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_7rEkBQiDq6I/TCaD4S949NI/AAAAAAAAATE/nmDQ1sMahYc/s72-c/Group%20of%20Pictures_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-5604523382190896334</id><published>2010-06-22T00:49:00.001+02:00</published><updated>2010-06-22T00:50:57.304+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='电子工程师乱弹编程'/><title type='text'>不要“想当然”地编程</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TB_skRcYe-I/AAAAAAAAAS0/_4k0hfAzNj8/s1600-h/100_2891%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="100_2891" border="0" alt="100_2891" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TB_slAONdRI/AAAAAAAAAS4/22JAbvPKUyE/100_2891_thumb%5B1%5D.jpg?imgmax=800" width="504" height="379" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;本图和本文无关，摄于汉诺威动物园。 &lt;/p&gt;  &lt;p&gt;很久没有在“电子工程师乱弹编程”这个系列写一些东西，这个系列是我的一些关于编程“自爽文”的集合，今天有点时间，来写一个小小的编程体验。   &lt;br /&gt;今天下午又花了一大堆时间来找bug。    &lt;br /&gt;经过一番一番的跟踪才发现bug的程序代码。    &lt;br /&gt;找到bug后，又是一阵痛心疾首。 &lt;/p&gt;  &lt;p&gt;花了那么多的时间就是为了一个非常愚蠢的bug。   &lt;br /&gt;在代码中，我需要配长度为DEF_I_FRAME_BUFFER_SIZE字节的内存块。    &lt;br /&gt;DEF_I_FRAME_BUFFER_SIZE 长度为一个MPEG编码的I Frame的大小。    &lt;br /&gt;_last_buf = (uint8_t *)malloc(DEF_I_FRAME_BUFFER_SIZE);    &lt;br /&gt;我当时“想当然地”分配了200000。    &lt;br /&gt;自认为已经足够大了。 &lt;/p&gt;  &lt;p&gt;请看以下分析：   &lt;br /&gt;如果分辨率为500*500     &lt;br /&gt;使用了的是4:2:0 (YV12) --&amp;gt; 12 bit pro Pixel    &lt;br /&gt;8 Bit = 1 Byte    &lt;br /&gt;那么可以得到maximal frame size:    &lt;br /&gt;4:2:0 (YV12) --&amp;gt; 500*500*(12/8) = 375000 Byte = 0.375 MB    &lt;br /&gt;哈，就是这样，对于一个500*500一个帧也许会需要375000 Byte，就是这么简单。 &lt;/p&gt;  &lt;p&gt;“想当然”的足够大的size，就产生了一个愚蠢的bug。   &lt;br /&gt;使用malloc固然非常危险，但是最危险的是“想当然”的编程态度。    &lt;br /&gt;我常常不够谨慎地进行编程，一味求快。    &lt;br /&gt;这常常会出现很多思考的遗漏。    &lt;br /&gt;其实，在当时编这段愚蠢的代码的时候，自己问问自己，是这样吗？    &lt;br /&gt;如果自己的回答是不太确定，那么就去google一下，就像今天的例子，我当时只需要几分钟google一下，就可以分析出我所需要的buffer的大小。    &lt;br /&gt;然而，当时的“想当然”，就会产生后来的一个小时以上时间的浪费。 &lt;/p&gt;  &lt;p&gt;好了，最后再总结一下。 &lt;/p&gt;  &lt;p&gt;第一个经验为：   &lt;br /&gt;&lt;strong&gt;不要“想当然”地编程&lt;/strong&gt; 。&lt;/p&gt;  &lt;p&gt;第二个小小的经验为：   &lt;br /&gt;&lt;strong&gt;在动手找bug解决它的时候，一定一定要分析理解一下问题的本质。抓住问题的本质，根本，这很重要。&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;不要乱猜测bug的来源或者随意随机的修改，这肯定会让你的程序比找bug之前更糟糕。&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-5604523382190896334?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/5604523382190896334/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=5604523382190896334' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5604523382190896334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5604523382190896334'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/blog-post_22.html' title='不要“想当然”地编程'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/TB_slAONdRI/AAAAAAAAAS4/22JAbvPKUyE/s72-c/100_2891_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-6263541296918962003</id><published>2010-06-21T00:51:00.001+02:00</published><updated>2010-06-21T01:04:02.968+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><title type='text'>阅读和使用LIVE555的一些简单记录</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TB6eWjPyX9I/AAAAAAAAASo/B4jrv0MRPlE/s1600-h/L2%20012.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="行2 012" border="0" alt="行2 012" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TB6bWbmffiI/AAAAAAAAASs/keAzI826HxM/L2%20012_thumb.jpg?imgmax=800" width="504" height="381" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;注意，此图和本文无关。图为以前拍的汉诺威动物园的企鹅。要了解正文请继续阅读。 &lt;/p&gt;  &lt;p&gt;最近继续看了看live555的代码，进行了一些具体的实验。    &lt;br /&gt;对live555的部分特性有了一定的了解。     &lt;br /&gt;稍微看了网上的一些关于live555的文章，千篇一律。     &lt;br /&gt;大部分都是转载自一个人的博客。     &lt;br /&gt;很少人进行一些实验或进行一些比较深入的代码阅读，然后写出一些其他的经验之谈。     &lt;br /&gt;我想应该是很多人都进行了代码阅读，理解了代码，但是就是懒的写一些东西吧。     &lt;br /&gt;这里自夸一下自己，哈，hanyionet真是大好人，大闲人。     &lt;br /&gt;这里我尽我自己一份小小的力，给大家写一些小小的经验之谈。如果有时间的话，我将写一些更多的文章关于live555。 &lt;/p&gt;  &lt;p&gt;以前在网上看到一个论坛有人问：    &lt;br /&gt;使用live555的testMpeg1or2VideoReceiver在其FrameSink的afterGettingFrame1(unsigned frameSize, struct timeval presentationTime) 接受的buffer是否是代表一个帧。     &lt;br /&gt;大概是这个问题。 &lt;/p&gt;  &lt;p&gt;当时看到没有太在意。    &lt;br /&gt;因为没有搞这部分。     &lt;br /&gt;刚刚做了一些实验。     &lt;br /&gt;根据实验的结果。我可以得出：     &lt;br /&gt;live555如果采用 A test program that reads a MPEG-1 or 2 Video Elementary Stream file就是testMpeg1or2VideoStreamer.cpp发送rtp包，那么得到的rtp包包含的就不是一个完整的帧。 &lt;/p&gt;  &lt;p&gt;如果不是完整的一帧那么我们该如何进行“正确”的解码呢。    &lt;br /&gt;例如我们使用的是FFmpeg的avcodec_decode_video()进行解码。     &lt;br /&gt;那么如果要正确解码，就必须将一个完整的帧的buffer放入这个解码API中去。     &lt;br /&gt;如果没有正确的一帧，我们直接将buffer放入avcodec_decode_video()进行解码，会有什么结果呢。     &lt;br /&gt;我们就会得到抖动的画面，带着马赛克，或者画面模糊等等。     &lt;br /&gt;这说明了，我们没有正确的解码。 &lt;/p&gt;  &lt;p&gt;接下来的问题是，我们该如何得到完整的一帧呢。    &lt;br /&gt;因为我们现在得到的是一些buffer（它为unsigned char*）。     &lt;br /&gt;很多人会想到要使用avcodec_decode_video()进行解码然后得到的例如AVFrame *_decoded_frame这样的_decoded_frame的指针。     &lt;br /&gt;通过类似_decoded_frame-&amp;gt;pict_type == FF_I_TYPE 或FF_P_TYPE，进行判断。     &lt;br /&gt;但是我进行的实验证明这是不可以的，也就是说无法正确地判断这些buffer是否为同一帧的buffer。     &lt;br /&gt;我使用的avcodec_find_decoder( CODEC_ID_MPEG2VIDEO );     &lt;br /&gt;可能其他的codec可以通过_decoded_frame-&amp;gt;pict_type == FF_I_TYPE 或FF_P_TYPE，进行判断。     &lt;br /&gt;但是在CODEC_ID_MPEG2VIDEO或CODEC_ID_MPEG1VIDEO的情况下不行。 &lt;/p&gt;  &lt;p&gt;经过一点思考。    &lt;br /&gt;我发现使用live555中afterGettingFrame1(unsigned frameSize, struct timeval presentationTime) 的presentationTime进行判断就可以判断出是得到的buffer是否是同一帧的。     &lt;br /&gt;具体实现如下，我只是提供一点思路。     &lt;br /&gt;具体实现请自己搞定。     &lt;br /&gt;请不要问我如何编。     &lt;br /&gt;很简单，请想想吧，请不要写信要源代码。 &lt;/p&gt;  &lt;p&gt;一点思路： &lt;/p&gt;  &lt;p&gt;可以将每次进入afterGettingFrame1的presentationTime进行判断，如果是相同的    &lt;br /&gt;那么将相同的buffer存入一个buffer中去，也就是两个buffer连接在一起，不知道我是否表述的清晰。     &lt;br /&gt;其实就是使用memcpy这个函数。     &lt;br /&gt;当presntationTime不同时候，将以前存的buffer（已经是完整一帧）传给avcodec_decode_video()就可以正确地解一帧了。 &lt;/p&gt;  &lt;p&gt;当然了，这里在提一下，我们最好设两个thread，一个thread进行live555的接受，另一个thread进行解码使用FFmpeg或其他。    &lt;br /&gt;两个thread如果读取同一变量，请设定mutex进行锁。 &lt;/p&gt;  &lt;p&gt;在进行一些延伸的思考，为什么可以使用presentationTime判断是否为同一帧呢。    &lt;br /&gt;如果读过live555的http://www.live555.com/liveMedia/doxygen/html/DeviceSource_8cpp-source.html     &lt;br /&gt;liveMedia/DeviceSource.cpp的朋友就知道了，非常非常不负责任的简单地说，如果我们想自己进行编码然后再播放那么就要使用DeviceSource这个类，自己进行一些拓展，DeviceSource是在服务器端，进行rtp包发送前的处理。     &lt;br /&gt;DeviceSource里的deliverFrame()函数的用途就是将编码后产生的buffer连同想对应的presentationTime一起“发送出去”，如果熟悉FFmpeg可以使用avcodec_encode_video()进行编码。     &lt;br /&gt;看到了吧，在这里就可以找到了presentationTime和一帧里的buffer之间的联系。     &lt;br /&gt;当然了，我的这个解释很不负责任，极度简单。     &lt;br /&gt;只是通过一个例子进行说明。     &lt;br /&gt;有兴趣的朋友可以通过进行更进一步的代码阅读了解presentationTime和一帧里的buffer之间的关系。 &lt;/p&gt;  &lt;p&gt;好了，随手写一些东西，比较不见条理性。希望大家见谅。    &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/6976291393224066038-6263541296918962003?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/6263541296918962003/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=6263541296918962003' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6263541296918962003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6263541296918962003'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/live555.html' title='阅读和使用LIVE555的一些简单记录'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TB6bWbmffiI/AAAAAAAAASs/keAzI826HxM/s72-c/L2%20012_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-677200714875043713</id><published>2010-06-16T03:18:00.001+02:00</published><updated>2010-06-16T03:18:42.896+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><title type='text'>两个关于char*的bug (QDebug, itoa)</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TBgmW7H8aFI/AAAAAAAAASY/wvzSx7RANMY/s1600-h/100_2995%5B7%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="100_2995" border="0" alt="100_2995" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TBgmX3ZxOWI/AAAAAAAAASc/Xb6TOOPEqx4/100_2995_thumb%5B5%5D.jpg?imgmax=800" width="644" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;此图和本文无关。图为德国埃森的华纳影城的街景（4年前拍的，昨天在整理照片发现的），我很喜欢这张，海绵宝宝。要了解正文请继续阅读。 &lt;/p&gt;  &lt;p&gt;我今天刚刚发现的我写的两个愚蠢的bug，都和char*有关。   &lt;br /&gt;这个两个愚蠢的bug都是因为我自己对一些函数的不正确，过于简单的理解造成的。    &lt;br /&gt;要警惕啊，随手写下来，记录一下。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;[1]&lt;/font&gt;&lt;/strong&gt;    &lt;br /&gt;在使用Qt的时候，我非常喜欢使用QDebug。    &lt;br /&gt;可以任意输出什么东西。    &lt;br /&gt;可是没有想到，QDebug也会给我造成bug，使测试崩溃。    &lt;br /&gt;例如我使用：    &lt;br /&gt;QDebug &amp;amp; QDebug::operator&amp;lt;&amp;lt; ( const char * s )    &lt;br /&gt;Writes the '\0'-terminated string, s, to the stream and returns a reference to the stream. &lt;/p&gt;  &lt;p&gt;rmsg.Answer是一个char*   &lt;br /&gt;qDebug() &amp;lt;&amp;lt; &amp;quot; Answer:&amp;quot; &amp;lt;&amp;lt; rmsg.Answer; &lt;/p&gt;  &lt;p&gt;就会得到类似的输出   &lt;br /&gt;First-chance exception at 0x670a7fb9 (QtCored4.dll) in **.exe: 0xC0000005: Access violation reading location 0x0000000f.    &lt;br /&gt;Unhandled exception at 0x670a7fb9 (QtCored4.dll) in **.exe: 0xC0000005: Access violation reading location 0x0000000f. &lt;/p&gt;  &lt;p&gt;发现   &lt;br /&gt;Qt的qstring.cpp &lt;/p&gt;  &lt;p&gt;QString::Data *QString::fromLatin1_helper(const char *str, int size)   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Data *d;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (!str) {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d = &amp;amp;shared_null;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d-&amp;gt;ref.ref();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;strong&gt;else if (size == 0 || (!*str &amp;amp;&amp;amp; size &amp;lt; 0)) {&lt;font color="#ff8040"&gt;&amp;#160;&amp;#160;&amp;#160; //程序崩溃在这里       &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; } else {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (size &amp;lt; 0)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; size = qstrlen(str);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d = static_cast&amp;lt;Data *&amp;gt;(qMalloc(sizeof(Data) + size * sizeof(QChar)));    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d-&amp;gt;ref = 1;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d-&amp;gt;alloc = d-&amp;gt;size = size;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d-&amp;gt;clean = d-&amp;gt;asciiCache = d-&amp;gt;simpletext = d-&amp;gt;righttoleft = d-&amp;gt;capacity = 0;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d-&amp;gt;data = d-&amp;gt;array;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ushort *i = d-&amp;gt;data;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d-&amp;gt;array[size] = '\0';    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while (size--)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *i++ = (uchar)*str++;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return d;    &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;这到底是什么原因呢？ &lt;/p&gt;  &lt;p&gt;因为我给了错误的指针。&lt;/p&gt;  &lt;p&gt;如果得到比较怪异的指针，qDebug()无法正确转换成QString或者（whatever进行一些有关于QString的处理）进行输出的时候就会产生这样的错误。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;[2]&lt;/font&gt;&lt;/strong&gt;    &lt;br /&gt;现在来谈谈第二个关于char*的bug。 &lt;/p&gt;  &lt;p&gt;/***   &lt;br /&gt;*xtoa.c - convert integers/longs to ASCII string    &lt;br /&gt;*    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Copyright (c) Microsoft Corporation. All rights reserved.    &lt;br /&gt;*    &lt;br /&gt;*Purpose:    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; The module has code to convert integers/longs to ASCII strings.    &lt;br /&gt;***/ &lt;/p&gt;  &lt;p&gt;常常使用&amp;lt;stdlib.h&amp;gt;里的函数itoa进行int 到char*的转换   &lt;br /&gt;char * itoa ( int value, char * str, int base ); &lt;/p&gt;  &lt;p&gt;如果这样写   &lt;br /&gt;/* use the itoa() to convert int to char* */    &lt;br /&gt;int id = 10;    &lt;br /&gt;char *id_char;     &lt;br /&gt;itoa (id, id_char, 10); &lt;/p&gt;  &lt;p&gt;就会出错，然后如果使用Visual Studio进行debug就会跳到xtoa.c里。 &lt;/p&gt;  &lt;p&gt;/***   &lt;br /&gt;*xtoa.c - convert integers/longs to ASCII string    &lt;br /&gt;*    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Copyright (c) Microsoft Corporation. All rights reserved.    &lt;br /&gt;*    &lt;br /&gt;*Purpose:    &lt;br /&gt;*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; The module has code to convert integers/longs to ASCII strings.    &lt;br /&gt;***/ &lt;/p&gt;  &lt;p&gt;为什么呢，还是因为没有定好char*的具体范围。   &lt;br /&gt;大概是这样的。    &lt;br /&gt;该怎么做呢，其实很简单。    &lt;br /&gt;只需如下定义char*就行了。    &lt;br /&gt;char id_char[3]; &lt;/p&gt;  &lt;p&gt;/* use the itoa() to convert int to char* */   &lt;br /&gt;int id = 10;    &lt;br /&gt;char id_char[3];     &lt;br /&gt;itoa (id, id_char, 10); &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-677200714875043713?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/677200714875043713/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=677200714875043713' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/677200714875043713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/677200714875043713'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/charbug-qdebug-itoa.html' title='两个关于char*的bug (QDebug, itoa)'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/TBgmX3ZxOWI/AAAAAAAAASc/Xb6TOOPEqx4/s72-c/100_2995_thumb%5B5%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-997289573194647759</id><published>2010-06-15T02:58:00.001+02:00</published><updated>2010-06-15T02:58:02.220+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><title type='text'>使用Qt Designer进行QLayout设定</title><content type='html'>&lt;p&gt;用Qt开发GUI的朋友一定对QLayout类很熟悉    &lt;br /&gt;我们常常使用QGridLayout,QFormLayout,QBoxLayout,QHBoxLayout,QVBoxLayout&amp;#160; &lt;br /&gt;但是完全用写代码的方式设计GUI，往往是挺麻烦的，至少对我而言     &lt;br /&gt;还好我们有Qt Designer &lt;/p&gt;  &lt;p&gt;今天，非常简单地谈谈如何使用Qt Designer进行Layout    &lt;br /&gt;这里举一简单的例子，我们使用Qt Designer进行Layout做一个视频播放程序的非常简单的用户操作界面 &lt;/p&gt;  &lt;p&gt;在Qt Designer中Layout可以从Widget Box中选择    &lt;br /&gt;也可以从Menu Bar中选择     &lt;br /&gt;例如下图 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TBbQClZYkLI/AAAAAAAAAR4/j_u4MQAarr8/s1600-h/Qt_Designer_1_hanyionet%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Qt_Designer_1_hanyionet" border="0" alt="Qt_Designer_1_hanyionet" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TBbQDMAsdaI/AAAAAAAAAR8/6PU7H0xt0LE/Qt_Designer_1_hanyionet_thumb.png?imgmax=800" width="244" height="143" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;圈选我们需要进行Layout的Widget例如一些已经设定好的PushButton，Slider等等    &lt;br /&gt;然后点击我们进行Layout的类型，例如这里使用了QGridLayout     &lt;br /&gt;完成后在Object Inspector中可以看到我们的选择     &lt;br /&gt;在Property Editor里可以看到我们的Layout的Stretch等等变量     &lt;br /&gt;我们也可以继续手动进行一些微调，例如水平和垂直spacing等等     &lt;br /&gt;具体如下图所示 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TBbQDv_E-0I/AAAAAAAAASA/M_QIGZjw2Yg/s1600-h/Qt_Designer_2_hanyionet%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Qt_Designer_2_hanyionet" border="0" alt="Qt_Designer_2_hanyionet" src="http://lh6.ggpht.com/_7rEkBQiDq6I/TBbQEDzTHrI/AAAAAAAAASE/KfM9vub5sMg/Qt_Designer_2_hanyionet_thumb%5B1%5D.png?imgmax=800" width="228" height="340" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;接下来进行一些类似的QHBoxLayout将一些Label放入其中，和上面的操作类似&lt;/p&gt;  &lt;p&gt;最后将QHBoxLayout和QGridLayout整体再放入QWidget的Vertical Layout里    &lt;br /&gt;现在大功告成，看吧，实在非常简单吧 &lt;/p&gt;  &lt;p&gt;可以看到我们完成的一个视频播放程序的非常简单的用户操作界面    &lt;br /&gt;如下图所示，点击下面的图可以看大图 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TBbQEcvr0JI/AAAAAAAAASI/FBio48mSEh8/s1600-h/Qt_Designer_3_hanyionet%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Qt_Designer_3_hanyionet" border="0" alt="Qt_Designer_3_hanyionet" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TBbQE4dCIxI/AAAAAAAAASM/f69xeCilAMw/Qt_Designer_3_hanyionet_thumb.png?imgmax=800" width="244" height="65" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TBbQFXYa5oI/AAAAAAAAASQ/ece06nnBAsw/s1600-h/Qt_Designer_hanyionet%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Qt_Designer_hanyionet" border="0" alt="Qt_Designer_hanyionet" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TBbQGfbjzZI/AAAAAAAAASU/F7bNUbA1Z1U/Qt_Designer_hanyionet_thumb.png?imgmax=800" width="244" height="147" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;在做一些非常简单的演示程序的时候，如果采用Qt Designer进行Layout，常常会节省很多时间，提高编码效率 &lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-997289573194647759?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/997289573194647759/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=997289573194647759' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/997289573194647759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/997289573194647759'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/qt-designerqlayout.html' title='使用Qt Designer进行QLayout设定'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TBbQDMAsdaI/AAAAAAAAAR8/6PU7H0xt0LE/s72-c/Qt_Designer_1_hanyionet_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3931547264631927495</id><published>2010-06-14T02:39:00.001+02:00</published><updated>2010-06-14T02:39:46.141+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='读书笔记'/><title type='text'>闲来谈谈理财</title><content type='html'>&lt;p&gt;金融学上有所谓&lt;strong&gt;72法则&lt;/strong&gt;、71法则、70法则，用作估计将投资倍增或减半所需的时间，反映出的是复利的结果。    &lt;br /&gt;计算所需时间时，把与所应用的法则相应的数字，除以预料增长率即可。例如：    &lt;br /&gt;假设最初投资金额为100元，复息年利率9%，利用“72法则”，将72除以9（增长率），得8，即需约8年时间，投资金额滚存至200元（两倍于100元），而准确需时为8.0432年。    &lt;br /&gt;要估计货币的购买力减半所需时间，可把与所应用的法则相应的数字，除以通胀率。若通胀率为3.5%，应用“70法则”，每单位之货币的购买力减半的时间约为70/3.5=20年。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;股票投资比重股票投资适当比重=100-年龄/100。&lt;/strong&gt;风险与报酬成正比，对一个30岁的年轻人，追求成长，适当地投资股票比重是七成（100-30/100）；一名70岁的退休者，股票投资就不宜超过三成（100-70/100）。这个法则是国外教科书推荐的法则，那么在国内，我们应把100变为社会平均生活年龄，比如80岁，或75岁。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;活期存款&amp;quot;6个月生活费&amp;quot;&lt;/strong&gt;活期存款利息极少，存多了则浪费，存少了怕不够家庭应急。一般来说，活期存款为个人或家庭6个月的生活支出最合适。 &lt;/p&gt;  &lt;p&gt;金融资产1：1固定资产，家庭金融资产（存款、基金、股票、债券等等）和固定资产（房产、汽车、商铺等等）的比例最好为1：1。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;保险 &amp;quot;10定律&amp;quot;&lt;/strong&gt;    &lt;br /&gt;保险额度为家庭年收入10倍，总保费支出为家庭年收入的10%。 &lt;/p&gt;  &lt;p&gt;以上内容来自维基百科及网络。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/TBV6T3h7API/AAAAAAAAARw/tBH-B-rZg9Y/s1600-h/images_starbucks%5B2%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="images_starbucks" border="0" alt="images_starbucks" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TBV6UWMplYI/AAAAAAAAAR0/SE2_IxjVG18/images_starbucks_thumb.jpg?imgmax=800" width="244" height="120" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;好了进入正题。   &lt;br /&gt;还是要坚持每周至少一篇博客，今天写一个简单的读书笔记吧。    &lt;br /&gt;最近稍微简单地翻阅了一本书&lt;strong&gt;《喝星巴克咖啡的女人VS买星巴克股票的女人》&lt;/strong&gt;韩国财经专业记者的金姬姃写的书，其实这本书还是挺有趣的，闲来无事的时候看看还不错，可以汲取很多的新知。    &lt;br /&gt;男生看看这本书也不错。    &lt;br /&gt;从这本书中我了解了一个最浅显而常常会被人忽略的道理：    &lt;br /&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;理财的首要目标在于累积资产管理的能力。&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;书中也谈到了我在上面摘出的72法则和股票投资比重股票投资适当比重等等概念，很多人一定都知道吧，哈，我一点都不知道，我还是通过这本书才知道的。   &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;strong&gt;具体来说就是，每个星期花点时间，彻底掌握经济与金钱的走向，进行稳定的投资，慢慢达到致富目标。&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;其他的理财方法我这里就不提了。   &lt;br /&gt;这里谈谈投资股票。    &lt;br /&gt;这本书提到，投资股票，买一股是一股。     &lt;br /&gt;但是我们真的知道，该如何投资股票。    &lt;br /&gt;其实买股票的时候我们永远不可能买的最低或最高。应该会买到不高不低的价格吧。其他的其实并不需要关心吧。    &lt;br /&gt;我们应该参考技术图形或消息吗。    &lt;br /&gt;其实做长线投资的时候，我们应该知道一些的内容。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;知道这家公司是干什么的，它的思想和理念是什么，有什么主业副业。会不会倒。     &lt;br /&gt;这家公司市盈率等参数是什么。平均交易量，流动性，是否存在大量关联交易。      &lt;br /&gt;它在什么行业，这家公司的行业地位。这个行业是否会相对其他行业具有较高的成长性。      &lt;br /&gt;它的产品或者提供的服务，是否有大量的消费者愿意使用（这一点可以观察一下自己身边的人）。&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;最近读的“闲书”明显少了。与其说是比较没时间，其实是比较懒。   &lt;br /&gt;自己的一个小感受，读书还是很重要的，读一本好书就像听智者聊天。    &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/6976291393224066038-3931547264631927495?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3931547264631927495/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3931547264631927495' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3931547264631927495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3931547264631927495'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/blog-post_14.html' title='闲来谈谈理财'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_7rEkBQiDq6I/TBV6UWMplYI/AAAAAAAAAR0/SE2_IxjVG18/s72-c/images_starbucks_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7821221860879886826</id><published>2010-06-06T21:48:00.001+02:00</published><updated>2010-06-06T21:48:25.468+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>咖啡因到底不会让人清醒？</title><content type='html'>&lt;p&gt;我们常常早上时来一杯咖啡，以图让自己清醒。    &lt;br /&gt;然而咖啡因真的会让人清醒吗？     &lt;br /&gt;这是真的吗?有科学依据吗？     &lt;br /&gt;我其实也考虑过这个问题。 &lt;/p&gt;  &lt;p&gt;刚刚在网上看了一则报道，也提到了这个问题。    &lt;br /&gt;这个报道也解决了我很久以来的困惑。以科学的角度来解释这个问题。     &lt;br /&gt;这里做一个非常简单的介绍。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TAv7gVN59TI/AAAAAAAAARY/PyXGe8CEwXQ/s1600-h/coffee_art%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="coffee_art" border="0" alt="coffee_art" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TAv7hsOXJtI/AAAAAAAAARc/wHOsk9sAWmg/coffee_art_thumb%5B1%5D.jpg?imgmax=800" width="334" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;其实咖啡和其他含咖啡因的饮料本身不会使人清醒。&lt;/strong&gt;其实这只是幻想的兴奋剂的效果。现在英国专家发现，事实上，咖啡因并没有刺激使我们感到清醒，但是如果我们戒断咖啡因摄入，反而这会让人感到非常累。只有当咖啡因继续进入人体，因咖啡因的戒断产生的症状才会消失，我们才会感到清醒。以上的结论来自研究者的结论，发表在“神经精神药理学杂志Journal of Neuropsychopharmacology”。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;这将意味着：我们甚至不应该开始习惯喝咖啡，茶或其他含咖啡因的饮料。&lt;/strong&gt;因为，&lt;strong&gt;如果发生“戒断咖啡因”，我们的疲劳只能通过更多含咖啡因的饮料来缓解。&lt;/strong&gt;另外，在大脑中的咖啡因依赖的影响已被证明。前一段时间，美国科学家曾在科学期刊“精神药理学Psychopharmacology”发表了一份报告，发现因咖啡因的戒断会改变大脑的血流量，因此会导致头痛。但是如果该物质（咖啡因）再次进入体内，痛苦的反应在大多数情况下会迅速消失。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考：    &lt;br /&gt;www.nature.com/npp/journal/vaop/ncurrent/abs/npp201071a.html     &lt;br /&gt;http://de.news.yahoo.com/12/20100604/thl-koffein-soll-doch-nicht-wach-machen-d343981.html&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-7821221860879886826?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7821221860879886826/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7821221860879886826' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7821221860879886826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7821221860879886826'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/blog-post_06.html' title='咖啡因到底不会让人清醒？'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/TAv7hsOXJtI/AAAAAAAAARc/wHOsk9sAWmg/s72-c/coffee_art_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-7274133418614651759</id><published>2010-06-05T20:40:00.001+02:00</published><updated>2010-06-05T20:40:51.324+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>土豆使人发胖？</title><content type='html'>&lt;p&gt;今天来聊一些生活常识。   &lt;br /&gt;土豆使你发胖？食用生的蔬菜比煮熟的健康吗？    &lt;br /&gt;你和我一定不是很清楚吧。    &lt;br /&gt;以下是在的德国雅虎生活频道看到的一则报道，这里做一个简单的翻译。希望大家会喜欢。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/TAqaLa0T0tI/AAAAAAAAARQ/4vwBlRlnqdU/s1600-h/Eisbergsalat%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Eisbergsalat" border="0" alt="Eisbergsalat" src="http://lh5.ggpht.com/_7rEkBQiDq6I/TAqaLy2_80I/AAAAAAAAARU/SjIb_76LfZU/Eisbergsalat_thumb%5B1%5D.jpg?imgmax=800" width="257" height="299" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;我们这里谈论一下了五个对蔬菜这个大自然的礼物常见的误解。 &lt;/p&gt;  &lt;p&gt;第一，新鲜的蔬菜比冷冻的更好?   &lt;br /&gt;有研究表明，冷冻蔬菜往往含有更多的营养。收获后，大部分的蔬菜，维生素损失不断。储存的时间越长，蔬菜中对健康有益的成分损失越大。 &lt;/p&gt;  &lt;p&gt;第二，生的蔬菜比熟好?    &lt;br /&gt;这取决于蔬菜种类。富含维生素C的蔬菜更适合生食。另一方面，维生素A的发挥需要一定的加热。此外，熟的蔬菜更容易被消化。健康食品中的抗氧化剂可以更好地被人体吸收。 &lt;/p&gt;  &lt;p&gt;第三，生菜（Eisbergsalat）没有营养?    &lt;br /&gt;除了水，生菜还含有蛋白质，纤维，维生素和矿物质。然而，我们也可以选择比生菜更健康的长叶生菜，它含有更少的水 - 但是含有更多维生素。 &lt;/p&gt;  &lt;p&gt;第四，土豆让你发胖?    &lt;br /&gt;马铃薯几乎不含脂肪和只会提供极少的热量 - 但有它含有大量的纤维。因此，土豆可以持续长时间的饱足感。这不是土豆本身，而是在于我们对土豆的再加工。 &lt;/p&gt;  &lt;p&gt;第五，市场上的蔬菜始终是“有机”?    &lt;br /&gt;如果你直接从农民购买蔬菜，这并不意味着，这些蔬菜是真正的有机产品。可靠的指标是国家有机认证。如果产品上有这个有机认证，那么就可以确保您购买的是经过测试的“有机”产品。 &lt;/p&gt;  &lt;p&gt;原文出处（德文）：   &lt;br /&gt;http://de.lifestyle.yahoo.com/04062010/442/gemuese-mythen.html&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-7274133418614651759?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/7274133418614651759/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=7274133418614651759' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7274133418614651759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/7274133418614651759'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/blog-post_05.html' title='土豆使人发胖？'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/TAqaLy2_80I/AAAAAAAAARU/SjIb_76LfZU/s72-c/Eisbergsalat_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-2322146630036407091</id><published>2010-06-03T15:30:00.001+02:00</published><updated>2010-06-03T15:38:10.203+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>德国房租和房价最高的城市</title><content type='html'>&lt;p&gt;今天在德国雅虎看到一则关于德国的平均房租和价格最高的城市的新闻。    &lt;br /&gt;这里做一个非常简化的翻译。     &lt;br /&gt;其实和中国一线城市还有部分二线城市对比，其实德国的房子一点都不贵，而且德国的平均工资水平远高于中国。闲话不多说，看数据。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/TAeujrIvgZI/AAAAAAAAARI/XBS0rxNNxOY/s1600-h/stadt_hanyionet%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Dusseldorf Skyline" border="0" alt="Dusseldorf Skyline" src="http://lh4.ggpht.com/_7rEkBQiDq6I/TAeukMxIoII/AAAAAAAAARM/7tEJDUYwbik/stadt_hanyionet_thumb%5B1%5D.jpg?imgmax=800" width="377" height="157" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;市场研究机构Empirica的一项最新研究，研究了称近120个德国城市平均价格。这些数据适用于拥有居住面积60-80平方米的公寓。    &lt;br /&gt;图：德新社 &lt;/p&gt;  &lt;p&gt;第十位是德国黑森州州的首府威斯巴登。每平方米平均达到9.31欧元。 &lt;/p&gt;  &lt;p&gt;第九位是德国本身狂欢大本营和莱茵兰普法尔茨的州府莱茵河口的美因茨。这个城市每平方米的租金为9.37欧元。 &lt;/p&gt;  &lt;p&gt;第八次是德国的科技城黑森州的达姆施塔特。每平方米为9.67欧元一平方米。 &lt;/p&gt;  &lt;p&gt;第七位是北威州的州府杜塞尔多夫。平均价格为9.95欧元。 &lt;/p&gt;  &lt;p&gt;第六位是巴登符腾堡州的州府斯图加特。这个内卡河边的城市大概为十欧元每平方。 &lt;/p&gt;  &lt;p&gt;第五名是汉堡。这个两条河流流过的国际大都会每平方米为10.61欧元。 &lt;/p&gt;  &lt;p&gt;第四名是弗莱堡。这个巴登符腾堡州的大学城平均每平方米高达10.62欧元。 &lt;/p&gt;  &lt;p&gt;第三位是海德堡。又是巴登符腾堡州的大学城，平均每平方米的租金已经高达10.77欧元。 &lt;/p&gt;  &lt;p&gt;第二位当然是美因河畔法兰克福。这个位于黑森州的金融中心，不仅拥有德国的天际线而且还有极高的租金，大概11.07欧元一平方米。 &lt;/p&gt;  &lt;p&gt;第一名没有意外还是巴伐利亚州首府的慕尼黑。这个伊萨尔河上的大都会，不仅是德国足球场上的纪录保持者而且她每平方米12.11欧元的租金也是德国最高的。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;以下是德国10个房价最昂贵的地方： &lt;/p&gt;  &lt;p&gt;第十：巴伐利亚州的罗森海姆。这个61万居民的城市的公寓平均一平方米的售价为2533欧元。 &lt;/p&gt;  &lt;p&gt;第九：巴伐利亚州的埃尔兰根。这个只有10.5万人口的城市（西门子在这个城市极具影响力，西门子很多重要的部门都在这里）。这里的房价为平均每平方米2567欧元。 &lt;/p&gt;  &lt;p&gt;第八：巴登符腾堡州的首府斯图加特。2643欧元只能在这里买公寓的一平方米。 &lt;/p&gt;  &lt;p&gt;第七：美因河畔法兰克福。购买价格为每平方米2654欧元。 &lt;/p&gt;  &lt;p&gt;第六：巴登符腾堡州的弗莱堡。至少为每平方米2737欧元。 &lt;/p&gt;  &lt;p&gt;第五：巴登符腾堡州的海德堡。德国最古老的大学城不仅有学生，可怕的高租金，还有极高的购买价格。平均2760欧元每平方米。 &lt;/p&gt;  &lt;p&gt;第四：巴登符腾堡州的巴登巴登。这个拥有著名的温泉和赌场巴登符腾堡州的城市。平均每平方米的房价为2799欧元。 &lt;/p&gt;  &lt;p&gt;第三：巴伐利亚州的雷根斯堡。这个城市的命名采取的方式从河流的名称，而不是降水量多。每平方米2807欧元。 &lt;/p&gt;  &lt;p&gt;第二：汉堡。每平方米为2972欧元。 &lt;/p&gt;  &lt;p&gt;第一：还是巴伐利亚州的的州府慕尼黑。平均为3586欧元每平方米。&lt;/p&gt;  &lt;p&gt;德国平均房租和平均房价最低的地方在大部分位于东德地区。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;原文地址（德文）：    &lt;br /&gt;http://de.finance.yahoo.com/nachrichten/wo-mieten-und-kaufpreise-krftig-steigen-hblatt-d5f0e21028d8.html&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-2322146630036407091?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/2322146630036407091/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=2322146630036407091' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2322146630036407091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2322146630036407091'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/blog-post_03.html' title='德国房租和房价最高的城市'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_7rEkBQiDq6I/TAeukMxIoII/AAAAAAAAARM/7tEJDUYwbik/s72-c/stadt_hanyionet_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8869304427765880299</id><published>2010-06-02T22:32:00.001+02:00</published><updated>2010-06-02T22:32:59.834+02: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;p&gt;现在想开始改变博客风格    &lt;br /&gt;在编排方式也做一些改变并减少一些所谓偏技术性的文章     &lt;br /&gt;排版的方式将以让人看起来不累为指导原则     &lt;br /&gt;增加一些随笔，读书笔记和心情感悟 &lt;/p&gt;  &lt;p&gt;前不久看了《写给生存不安的年轻人》这本书    &lt;br /&gt;强烈推荐     &lt;br /&gt;这本书也是当年日本AMAZON商业类榜单上的畅销书     &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;/p&gt;  &lt;p&gt;很多书都谈到了目标为导向的学习法    &lt;br /&gt;这本书也提到了这种学习法的优点     &lt;br /&gt;最重要的是这种方法极具针对性和效率     &lt;br /&gt;简单而言就是&lt;strong&gt;&lt;font color="#ff8040"&gt;越专注越有效率        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;知识爆炸的时代     &lt;br /&gt;新的知识永远学不完     &lt;br /&gt;我们所需要的就是别人无法取代的实力     &lt;br /&gt;而这种实力的取得     &lt;br /&gt;其实一是靠积累     &lt;br /&gt;二是靠本书所提到的目标为导向的学习法 &lt;/p&gt;  &lt;p&gt;很多年轻人都希望拥有MBA学位给自己加分    &lt;br /&gt;然而什么是MBA     &lt;br /&gt;MBA的核心和精华什么?     &lt;br /&gt;我认为很多人和我一样并不是真正地了解     &lt;br /&gt;这本书提到     &lt;br /&gt;其实MBA就是不外乎以下这些方面     &lt;br /&gt;logical thinking，investment，finance，marketing，corporate strategy     &lt;br /&gt;请摆脱MBA情节     &lt;br /&gt;其实MBA并没有什么     &lt;br /&gt;对一个年轻人而言     &lt;br /&gt;拥有一个MBA学位     &lt;br /&gt;已经无法创造出差异化竞争力     &lt;br /&gt;其实我们大可以自学     &lt;br /&gt;重点掌握MBA精华 &lt;/p&gt;  &lt;p&gt;学海无涯而我们的时间有限    &lt;br /&gt;我们要做到的其实只是通过目标为导向的学习法     &lt;br /&gt;然后注重「软性技能」     &lt;br /&gt;发挥创造力     &lt;br /&gt;突显自己与众不同之处     &lt;br /&gt;创造差异     &lt;br /&gt;看&lt;strong&gt;&lt;font color="#ff8040"&gt;整体不要看局部        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;努力和专注提高自己的“核心竞争力” &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8869304427765880299?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8869304427765880299/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8869304427765880299' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8869304427765880299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8869304427765880299'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/06/blog-post.html' title='读书笔记：《写给生存不安的年轻人》'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-1213750618663711972</id><published>2010-05-29T22:58:00.001+02:00</published><updated>2010-05-29T22:58:46.708+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具使用技巧'/><category scheme='http://www.blogger.com/atom/ns#' term='推荐'/><title type='text'>用CamStudio做软件程序演示视频</title><content type='html'>&lt;p&gt;上个星期一个师兄告诉我可以用&lt;a href="http://camstudio.org/"&gt;CamStudio&lt;/a&gt;软件程序演示视频，自己使用了一下非常满意，这个软件不仅开源，而且非常简单易用，可以满足我们创建软件程序演示视频的绝大部分要求。接下来，我在这里做一个简单的介绍。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/TAF_8Y_7JTI/AAAAAAAAARA/Od7tWQRtpNc/s1600-h/software_CamStudio%5B3%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="software_CamStudio" border="0" alt="software_CamStudio" align="left" src="http://lh3.ggpht.com/_7rEkBQiDq6I/TAF_89kew9I/AAAAAAAAARE/2KA-bZBS1ik/software_CamStudio_thumb%5B1%5D.gif?imgmax=800" width="244" height="239" /&gt;&lt;/a&gt; CamStudio能够记录你的电脑屏幕和音频的所有活动，并创建符合行业标准的AVI视频文件，我们还可以使用CamStudio内置的SWF Producer将AVI文件转换成流媒体Flash视频（SWF文件）。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;可以用CamStudio做到： &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;可以使用它来创建任何软件程序演示视频。     &lt;br /&gt;或者建立一系列的视频来回答最常见问题。      &lt;br /&gt;可以为中学或大学创建视频教程。      &lt;br /&gt;可以用它来记录与你的计算机上经常出现的问题，以便展示给技术支持人员。      &lt;br /&gt;可以使用它来创建以视频为基础的信息产品。      &lt;br /&gt;甚至可以用它来记录你发现的新的技巧关于使用你喜欢的软件程序，你忘了之前。 &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;可以在CamStudio的主页下载到这个软件，并获得更多的帮助：   &lt;br /&gt;&lt;a href="http://camstudio.org/"&gt;http://camstudio.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;最后谈一点无关本文主题的东西。上个星期看了欧洲冠军杯决赛，国米夺冠，内心非常激动。   &lt;br /&gt;附上网上看到的笑话一则：    &lt;br /&gt;皇马买了C罗，曼联进8强了；皇马买了本泽马，里昂进8强了；皇马卖了斯内德，国米进8强了；皇马卖了罗本，拜仁进8强了......见过悲剧的球队没见过这么悲剧的球队。AC米兰抱着皇马的大腿使劲摇啊，哭啊：“你丫，我买的亨特拉尔呢，就我没有晋级！”皇马大吼一声：“我靠，你派来的卡卡呢！” &lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-1213750618663711972?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/1213750618663711972/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=1213750618663711972' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1213750618663711972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/1213750618663711972'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/camstudio.html' title='用CamStudio做软件程序演示视频'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_7rEkBQiDq6I/TAF_89kew9I/AAAAAAAAARE/2KA-bZBS1ik/s72-c/software_CamStudio_thumb%5B1%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4234061514773716038</id><published>2010-05-19T00:56:00.001+02:00</published><updated>2010-05-19T01:03:18.050+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂谈'/><title type='text'>工业加工的肉类产品影响心脏的健康</title><content type='html'>&lt;p&gt;今天谈谈别的肉类消费风险。今天在德国雅虎首页看到的新闻挺触目惊心的题目是Schinken schlaegt aufs Herz(火腿打击心脏)。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/S_MbDqpOZ0I/AAAAAAAAAQ4/LWRZMbKL9Zs/s1600-h/1691007397-schinken-schlaegt-aufs-herz%5B6%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="AA041239" border="0" alt="AA041239" align="left" src="http://lh4.ggpht.com/_7rEkBQiDq6I/S_MbEXnDaWI/AAAAAAAAAQ8/qXO_hBLA3Fk/1691007397-schinken-schlaegt-aufs-herz_thumb%5B4%5D.jpg?imgmax=800" width="342" height="264" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;这里做一个简单的翻译：    &lt;br /&gt;红色的肉类消费造成的健康风险是众所周知的。这肉是不一样的肉。最近一项研究表明，工业加工的肉类产品对心脏的健康有很大的负面影响。     &lt;br /&gt;不仅因为保持身材的原因，你应该减少食用早餐火腿。如香肠，冷盘加工肉类，不仅增加了胃癌的风险。哈佛公共卫生学院的科学家发现，对这种产品的消费中，罹患心脏病的风险增加了百分之四十二，糖尿病的风险增加了百分之十九。大概每天食用50克 - 相当于约2片培根或香肠，就会增加这些风险。但是未经工业处理的红色肉如羊肉，猪肉或牛肉不会增加这些健康风险。研究是基于对一些国际数据收集与超过百万志愿者的比较。     &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/6976291393224066038-4234061514773716038?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4234061514773716038/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4234061514773716038' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4234061514773716038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4234061514773716038'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/blog-post_19.html' title='工业加工的肉类产品影响心脏的健康'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_7rEkBQiDq6I/S_MbEXnDaWI/AAAAAAAAAQ8/qXO_hBLA3Fk/s72-c/1691007397-schinken-schlaegt-aufs-herz_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-5018946559379397722</id><published>2010-05-09T18:00:00.001+02:00</published><updated>2010-05-09T18:00:55.285+02: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;p&gt;再回顾一下，我在以前的文章提到过，可用性评估大概有以下五种：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0080ff"&gt;&lt;b&gt;用户模型（User Model&lt;/b&gt;&lt;b&gt;）&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;启发式评估 (Heuristic Evaluation)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;认知性遍历 (Cognitive Walkthrough)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;用户测试 (User Testing)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;用户问卷调查 (Questionnaire)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;大体上分为三类：也就是所谓的理论评估、用户评估和专家评估。理论评估和专家评估已经简单介绍过了。现在继续介绍可用性工程的可用性评估 -&lt;font color="#ff8040"&gt; &lt;/font&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;用户评估&lt;/font&gt;部分也就是&lt;font color="#0080ff"&gt;用户测试 (User Testing)和用户问卷调查 (Questionnaire)评估方法&lt;/font&gt;。&lt;/strong&gt;这两种方法也是我们常常采用的方法，虽然看似简单，但是也常常会忽略很多重要的因素。以下是这两个方法的具体介绍。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040" size="4"&gt;用户测试 (User Testing)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. 前期准备工作&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;（1）明确&lt;strong&gt;测试的目的&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;帮助改进交互设计&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;通过测试了解交互中有待改进的地方&lt;/strong&gt;，要搞清楚为什么出错，而不仅仅是知道错了。可以在测试中收集过程数据——定量的去观察发生了什么问题以及为什么会这样。 &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;评估交互的整体质量&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;根据一定的衡量指标，通过测试评估交互的水平，比如用户在某个交互任务上耗费的时间，任务是否成功，出错情况等等。也可对两个以上的可选设计针对确定的性能需求进行比较性评测。 &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;（2）准备测试环境      &lt;br /&gt;（3）准备测试设备       &lt;br /&gt;（4）确定测试过程中的各种角色分配&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;2．测试执行的六个阶段&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;为了有效地进行可用性测试，需要正确设计、准备和执行试验。一个测试执行过程一般要经过一些步骤。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;3．&lt;font color="#ff0000"&gt;可用性测试的评价&lt;/font&gt;&lt;/strong&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;（1）通过搜集一些客观、量化的数据进行性能评价&lt;/em&gt;&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;完成特定任务的时间&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;在给定时间内完成的任务数目&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;发生的错误数目&amp;#160;&amp;#160; &lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;成功交互与失败交互的比率&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;恢复错误交互所消耗的时间&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;使用命令或其他特定交互特征（如快捷键）的数量&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;测试完毕后用户还能记住的特定交互特征的数量&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;使用帮助系统的频度&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;使用帮助的时间&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;用户对交互的正面评价与负面评价的比率&lt;/font&gt;&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;用户偏离实际任务的次数&lt;/font&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;em&gt;（2）如果要比较两个可选的交互设计，即对两个交互界面A和B根据某一准则做一个客观的测试，决定那个更好，可以采用如下方法：&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;选择两个同等规模的测试用户群 &lt;/li&gt;      &lt;li&gt;将用户随机分配到两个组中 &lt;/li&gt;      &lt;li&gt;在每个组内执行同样的任务 &lt;/li&gt;      &lt;li&gt;规定第一组只使用系统A，第二组只使用系统B，分别进行测试 &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;   &lt;br /&gt;&lt;em&gt;（3）统计分析&lt;/em&gt;&lt;/p&gt; &lt;em&gt;&lt;/em&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;使用统计学原理和手段对得到的测试数据进行进一步的统计分析&lt;/strong&gt;。比如使用统计学中的假设检验，判断系统A与B有没有统计意义上的明显差别。使用统计学中的点估计、平均值等指标评价差别的大小，对结果的准确性进行判断等。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040" size="4"&gt;问卷调查(Questionnaire)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#0080ff"&gt;优点：&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;问卷法节省时间、经费和人力&lt;/font&gt;&lt;/strong&gt;，这是为什么经常采用问卷法的原因。 &lt;/li&gt;    &lt;li&gt;问卷法调查结果&lt;strong&gt;&lt;font color="#ff8040"&gt;容易量化&lt;/font&gt;&lt;/strong&gt;。 &lt;/li&gt;    &lt;li&gt;问卷调查是一种结构化的调查，其调查问题的表达形式、提问的顺序、答案的方式与方法都是固定的，而且是一种文字交流方式，因此，任何个人，无论是研究者，还是调查员都不可能把主观偏见代入调查研究之中。其调查的统计结果一般都能被量化出来。 &lt;/li&gt;    &lt;li&gt;由于问卷调查结果便于统计处理与分析。现在有大量的相关统计分析软件可以帮助我们进行数据分析，有些甚至能直接帮助我们设计问卷。方便实施和分析。也方便进行数据挖掘。 &lt;/li&gt;    &lt;li&gt;现在的电子问卷克服了纸质问卷的一些缺点，方便实施与调整。虽然他不可能取代面对面的问卷调查，但由于成本更低，更容易及时调整问卷设计上的不足，越来越多的问卷采用电子问卷的形式，可以通过网站，e－mail进行发布与回收。数据直接使用数据库记录，方便筛选与分析。 &lt;/li&gt;    &lt;li&gt;问卷调查法可以进行大规模的调查。无论研究者是否参与了调查，或者参与的多少，都可以从问卷上了解被访者的基本态度与行为。这种方式是其他任何方法也不可能做到的，而且问卷调查可以周期的进行而不受调查研究人员变更的影响,可以跟踪某些问题用户的变化。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#0080ff"&gt;缺点&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;面向设计的问题问卷调查比较难&lt;/strong&gt;。       &lt;br /&gt;面向未来的调查（为设计进行的调查）很多时候需要了解用户的意图、动机和思维过程。问卷调查这类问题往往效果不佳，或者说问题设计比较难。而开放式的问题，回收质量、分析和统计等工作也会受影响。 &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;调查问卷设计难。&lt;/strong&gt;       &lt;br /&gt;调查问卷的主体内容设计的好坏，将直接影响整个专项调查的价值。问题的设计需要大量的经验，不同的人针对同一个问题，尤其是面向思维的问题，设计问卷差别可能会很大，信度和效度控制需要丰富经验。 &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;调查结果广而不深。&lt;/strong&gt;       &lt;br /&gt;问卷调查是一种用文字进行对话的方法，如果问题太多，被访者会产生厌烦情绪，因此，一般的问卷都比较简短，也就不可能深入探讨某一问题及其原因； &lt;/li&gt;    &lt;li&gt;问卷调查经常采用由用户自己填答问卷的方式，所以其&lt;strong&gt;调查结果的质量常常得不到保证&lt;/strong&gt;。       &lt;br /&gt;因为在被访者填答问卷时，用户的调查过程我们很难得知，是我们需要调查的真实用户吗？（经常有人冒充用户参与调查，目的是为了获得参与调查的回报与奖励）用户当时的情绪状况是怎么样的？是否有其他人影响用户的回答？是否是同别人商量进行填答？用户是否是随意填写问卷的？得到的结果是用户的真实情况？研究者并不知道，所以有人说过：“问卷调查法所得资料的信度与效度问题一直是困扰问卷法的‘幽灵’”。 &lt;/li&gt;    &lt;li&gt;问卷调查的回收率难以保证。      &lt;br /&gt;问卷调查必须保证有一定的回收率，否则资料的代表性就会受到影响，回收率受问卷长度，问题难易程度，是否涉及隐私，参与调查获得回报多少等因素相关。另外，网络调查的回收率一般都不高，质量也难以保证。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#0080ff"&gt;问卷调查的执行过程&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;strong&gt;&lt;em&gt;&lt;font color="#0080ff"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;用户要求分析&lt;/strong&gt;：设定软件的质量目标，准确描述质量目标，通过用户调查，了解用户在使用方面的切实感受。可以定义一些通用的可用性质量因素 &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;问卷设计&lt;/strong&gt;：根据用户需求分析进行问卷的设计，需要遵循这样的原则：从用户的角度出发，问题要精确、概括，避免二义性；可以采用的问卷类型包括事实陈述、用户填写意见、用户对事物的态度等；问题形式可以采用单项选择，多项选择（选择所有适用选项)、李克特量表（Likert scales)、开放式问答题等形式 &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;问卷实施及结果分析&lt;/strong&gt;：采用抽样调查、针对性调查、广泛调查（附带收集用户信息并进行分类）等方式，其实施可以采用发放调查表、电子邮件、网页等方式。结果分析主要是对调查收集到的数据运用统计方法进行分析、归纳，得到有用的信息 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#0080ff"&gt;问卷分析&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;选择题：统计不同选项所占的百分比 &lt;/li&gt;    &lt;li&gt;李克特量表（Likert scales)：统计每个问题的平均得分和标准差等 &lt;/li&gt;    &lt;li&gt;开放式问题：对答案进行归纳，分类和总结 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;以上内容百分之九十不是我写的，都来自一个课件，详见文末参考资料。&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;可用性评估的五种方法已经介绍完毕。其实应该根据软件的特性和目标对象，销售市场来决定对软件的可用性评估的具体方法。各种方法各有优缺点，我们所要做的就是因地制宜巧用各种方法，也可采用多种方法相结合以得到更好的评估结果。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;参考资料：&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;其实本文的大部分资料来自：     &lt;br /&gt;&lt;a href="http://wenku.baidu.com/view/ab600322192e45361066f54d.html"&gt;http://wenku.baidu.com/view/ab600322192e45361066f54d.html&lt;/a&gt;     &lt;br /&gt;上的“主讲：刘婷婷 - 人机交互界面设计”PPT文档。（我实在找不到具体最终的来源）     &lt;br /&gt;这个人机交互界面设计的PPT做得非常不错，推荐。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-5018946559379397722?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/5018946559379397722/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=5018946559379397722' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5018946559379397722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/5018946559379397722'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/blog-post_3634.html' title='可用性工程的可用性评估 - 用户评估'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-434157900584791734</id><published>2010-05-09T16:48:00.001+02:00</published><updated>2010-05-09T17:04:00.054+02: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;p&gt;以前的文章提到过，可用性评估大概有以下五种：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0080ff"&gt;&lt;b&gt;用户模型（User Model&lt;/b&gt;&lt;b&gt;）&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;启发式评估 (Heuristic Evaluation)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;认知性遍历 (Cognitive Walkthrough)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;用户测试 (User Testing)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;用户问卷调查 (Questionnaire)&lt;/font&gt;&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;大体上分为三类：也就是所谓的&lt;b&gt;理论评估、用户评估和专家评估&lt;/b&gt;。&lt;/p&gt;  &lt;p&gt;今天继续介绍可用性工程的可用性评估 - &lt;b&gt;专家评估&lt;/b&gt;部分。&lt;/p&gt;  &lt;p&gt;其实我对专家评审法这种用户不参与的方法挺有兴趣的。所谓的专家评审法大略有以下两种方法：&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;b&gt;启发式评估(Heuristic Evaluation)&lt;/b&gt;&lt;b&gt;：可用性专业人员根据已有的可用性原则，对界面进行逐一评估。&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;认知性遍历(Cognitive Walkthrough)&lt;/b&gt;&lt;b&gt;：可用性专业人员将自己“扮演”成为用户，通过一定的任务对界面进行检查评估。&lt;/b&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;具体地说，专家评估就是由评估者（人因专家）以一种可以称为结构化的方式使用系统，测试是否符合预先定义的准则。评估结果反映了评估者的主观看法。这种评估方式主要是系统一致性的评估，即将系统和已建立的人因标准、规则（guideline)或原则（principle)进行比较。&lt;/p&gt;  &lt;p&gt;专家评估快速并且便宜，但其缺点是，虽然专家是根据情况（用户水平、群体习惯等）作出判断，但专家关于任务的知识很少，难以从用户的立场看问题，且各人倾向会影响判断。以上的文字来自网络，无法判断最初来源。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;font color="#ff8040"&gt;&lt;b&gt;启发式评估&lt;/b&gt;&lt;b&gt;(Heuristic Evaluation)&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;启发式评估法就是使用一套相对简单、通用、有启发性的可用性原则（即“启发”）来进行可用性评估。具体方法是，专家使用一组称为“启发式原则”的可用性规则做为指导，评价用户界面元素（如对话框，菜单，在线帮助等）是否符合这些原则。&lt;/p&gt;  &lt;p&gt;虽然任何人都可以充当评审人员的角色，有试验表明，选用既具有可用性知识又具有和被系统相关专业知识的“双重专家”是最有效的，这样的双重专家比只用可用性知识的专家平局多发现大约20％的可用性问题。每一个评审人员在1～2各小时的评估后都应该提供一个独立的报告，将各独立的报告综合以后就得到最后的报告。在报告中应该包括可用性问题的描述，问题的严重性，改进的建议。&lt;/p&gt;  &lt;p&gt;可用性启发的原则又有哪些呢？&lt;/p&gt;  &lt;p&gt;   &lt;table cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td&gt;&lt;/td&gt;          &lt;td width="438"&gt;           &lt;table cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;               &lt;tr&gt;                 &lt;td&gt;                   &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;b&gt;&lt;i&gt;可用性启发原则&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;                    &lt;ol&gt;                     &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;系统状态可见性&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;系统与用户现实世界相互匹配&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;用户控制权与自主权&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;一致性与标准化&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;错误预防&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;识别而非回记忆&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;使用的灵活性与有效性&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;美观而精炼的设计&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                      &lt;li&gt;&lt;font color="#ff0000"&gt;· &lt;b&gt;帮助和文档&lt;/b&gt;&lt;/font&gt; &lt;/li&gt;                   &lt;/ol&gt;                 &lt;/td&gt;               &lt;/tr&gt;             &lt;/tbody&gt;&lt;/table&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;接下来细细讨论这些原则：&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;系统状态的可视性&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;在适当的时候应提供适当的反馈，以便用户随时掌握系统的运行状态&lt;/b&gt;。 &lt;/li&gt;    &lt;li&gt;系统的反馈形式可以分为两类：      &lt;ul&gt;       &lt;li&gt;一类是非文字反馈，另一类是文字反馈 &lt;/li&gt;        &lt;li&gt;非文字反馈是指系统通过改变人机界面元素的外观或显示暂时的元素，让用户知道他们行动的结果 &lt;/li&gt;        &lt;li&gt;文字反馈指的是系统根据用户的行动而产生的文字信息 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;根据反馈显示时间的长短，可以分为非持久反馈和持久反馈。 &lt;/li&gt;    &lt;li&gt;非持久反馈只与某一个动作有关，在动作完成后，反馈也应被取消。 &lt;/li&gt;    &lt;li&gt;一些非常重要的反馈则应该成为界面的一部分，持久显示 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;系统应与用户真实世界相符合&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;使用用户语言&lt;/b&gt;，也就是使用用户熟悉的词汇、惯用语和概念，而不是面向系统的术语。系统还应符合真实世界中的习惯，信息应该按一个自然、合理的顺序出现 &lt;/li&gt;    &lt;li&gt;其实不仅仅使词语和概念，&lt;b&gt;非语言性的信息同样重要&lt;/b&gt;，例如图标、工作的流程等也要符合用户在真实世界的使用习惯 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;用户的控制权及自主权&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;提供标记醒目的“紧急出口”，便于用户退出异常状况&lt;/b&gt;&lt;b&gt;&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;与此相关的可用性问题的例子：      &lt;ul&gt;       &lt;li&gt;在不可逆转的行动之前系统没有提供足够警告 &lt;/li&gt;        &lt;li&gt;系统没有在适当的实际提供取消的功能 &lt;/li&gt;        &lt;li&gt;系统的取消功能不明显或是很难找到 &lt;/li&gt;        &lt;li&gt;系统不支持撤销的功能 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;一致性和标准化&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;避免用户无法确定不同的词汇（或情景、动作）是否具有相同含义的情形。 &lt;/li&gt;    &lt;li&gt;一致性包括两个方面： &lt;/li&gt;    &lt;li&gt;内部一致性和外部一致性。      &lt;ul&gt;       &lt;li&gt;&lt;b&gt;内部一致性&lt;/b&gt;指的事系统的各部分之间要保持一致 &lt;/li&gt;        &lt;li&gt;&lt;b&gt;外部一致性&lt;/b&gt;是指系统应该和其他系统、传统习惯及标准保持一致，也就是&lt;b&gt;标准性&lt;/b&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;帮助用户识别、诊断和修复错误&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;使用简明的语言，描述问题的本质并推荐解决方法&lt;/b&gt;。 &lt;/li&gt;    &lt;li&gt;系统信息应该礼貌，不应该将错误归咎于用户。如“非法命令”或“非法用户名或密码” &lt;/li&gt;    &lt;li&gt;在设计错误信息时，另一个常见的策略是先为用户提供一个短的信息，如果这个信息不能满足用户的需要，他们可以用一个按键或链接找到更详细的帮助信息。短的错误信息用来处理比较常见的情况，读起来简单一些，并且可以在大多数情况下帮助用户解决问题。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;预防错误&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;应尽可能预防错误的发生 &lt;/li&gt;    &lt;li&gt;&lt;b&gt;基于知识的行为&lt;/b&gt;和学习是没有区别的，这常常发生在人们刚刚开始使用一个新的系统的时候。在这个层次的行为中，错误主要是由于用户对系统理解的差错引起的。为了防止错误，应该为用户提供正确的帮助信息，帮助他们在解决问题的过程中建立对系统的正确理解 &lt;/li&gt;    &lt;li&gt;&lt;b&gt;基于规则的行为层次&lt;/b&gt;，用户根据记忆中已经形成的规则来处理所接受到的信息。错误常常是因为忽略了重要的步骤，或是使用了错误规则来处理问题。在这个行为层次里，防止错误最有效的方法就是提供明确的文字提示，或是非语言的暗示（如鼠标的变化） &lt;/li&gt;    &lt;li&gt;&lt;b&gt;基于技巧的行为层次&lt;/b&gt;，用户的行为是一种近乎机械的行为，他们可以不断地对接受到的信号进行条件反射式的处理。错误常常是与用户的知觉及运动技能有关。系统提供的信息应该能清晰地从背景中分辨出来，防止用户错误。在必要时，还应该使用户的行为提升到基于规则的行为层次，用正确的规则处理问题 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;识别而非记忆&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;使得对象、动作和选项清晰可见。用户应该不需要在系统的一个部分记忆一些信息，才能使用系统的另一个部分，系统的使用说明应该在需要时容易找到，并清晰可见。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;使用的灵活性及有效性&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;提供一些新用户不可见的快捷键，以便有经验的用户快速执行任务&lt;/b&gt;。 &lt;/li&gt;    &lt;li&gt;相关可用性问题的例子：      &lt;ul&gt;       &lt;li&gt;系统缺少自动化，没有自动地执行下面地任务,例如，一个新的视窗打开时，视窗的大小不合适，用户不得不自己改变视窗的大小 &lt;/li&gt;        &lt;li&gt;系统没有提供应有的默认值 &lt;/li&gt;        &lt;li&gt;默认值不正确 &lt;/li&gt;        &lt;li&gt;使用系统需要太多的控制动作 &lt;/li&gt;        &lt;li&gt;系统没有提供捷径，如：没有定义必要的功能键 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;最小化设计&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;用户界面应美观、精练，不应该包括不相关或不常用的信息。&lt;/b&gt;任何多余的信息都会影响哪些真正相关的信息，从而降低他们的可见性 &lt;/li&gt;    &lt;li&gt;从视觉角度来说，界面上如果有几个元素距离比较接近，或是被先或线框所包围，或是一起移动、变化，或是在形状、颜色、大小、字体上比较相似，人们会认为他们是同一个部分或同属于一组。界面设计中正确地应用这个原则可以起到简化的效果，如果使用不当，则会引起用户理解上的混乱。 &lt;/li&gt;    &lt;li&gt;人体工程学告诉我们，&lt;b&gt;人的注意资源是有限的，过多的信息不但会使新用户迷惑，也会让熟练用户慢下来。&lt;/b&gt;当人的心理活动指向和集中于某一对象时，该对象即成为人的注意中心，它所提供的信息，将得到大脑最有效的加工。处于注意边缘的事物，虽位人所仪式，但大脑反映得模糊不清。而处于注意范围之外的事物，则完全不为人所仪式。所以，人机交互时，人不可能把界面上的所有元素全部接受并产生意识，当用户只能注意某一方面的信息时，就不能注意其他方面的信息。 &lt;/li&gt;    &lt;li&gt;因为用户注意资源的有限性，界面的设计不但要引导用户合理地使用他们的注意资源，也应该保持界面提供的信息精练简介，&lt;b&gt;在界面上突出某一个元素的方法很多，如使用和背景或其他元素不同的颜色，使用粗体字或大一些的字号，放在页面左上角的信息比右下角的信息得到更多的注意&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;font color="#0080ff"&gt;帮助及文档&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;提供易于检索、便于用户逐步学习的帮助信息 &lt;/li&gt;    &lt;li&gt;实验表明，用户使用联机帮助比使用用户手册找到相关信息的时间要短。 &lt;/li&gt;    &lt;li&gt;相关可用性问题的例子      &lt;ul&gt;       &lt;li&gt;帮助信息或用户手册不存在 &lt;/li&gt;        &lt;li&gt;帮助信息没有意义或使用户更加迷惑 &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;font color="#ff8040"&gt;&lt;b&gt;认知性遍历&lt;/b&gt;&lt;b&gt;(Cognitive Walkthrough)&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;在认知性遍历中，专家测评者从一个说明书或早期的原型出发勾践任务场景，然后让用户使用此界面完成任务，即“&lt;b&gt;遍历&lt;/b&gt;”界面。用户（称为典型用户）就像使用真正的界面那样对界面进行遍历，使用它们来完成任务。仔细观察用户使用界面的每一步骤，如果界面中存在妨碍用户完成任务的地方，就表明界面中缺少某些必要的内容；&lt;b&gt;完成任务的功能顺序如果繁杂反复，就表明界面需要新的功能以简化任务并修改功能的顺序。&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;进行认知性遍历活动，需要以下&lt;b&gt;四个条件&lt;/b&gt;：&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;对系统原型的详尽描述，这种描述不一定是完整的，但要相当详尽。诸如菜单的位置描述或措辞选择等这样的细节也可能导致相当大的差异。 &lt;/li&gt;    &lt;li&gt;对用户在系统中要完成任务的描述，该任务应当是大多数用户将要执行的有代表性的任务。 &lt;/li&gt;    &lt;li&gt;一个完整的、书面的操作清单，列出使用给定原型完成任务所需执行的操作。 &lt;/li&gt;    &lt;li&gt;确定用户的身份，以及评估人员能够确定这些用户已具有哪一类别的知识和经验。 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;认知性遍历认为用户完成一个任务的过程有三步：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;用户在交互界面上寻找能帮助完成任务的行动方案。 &lt;/li&gt;    &lt;li&gt;用户选择并采用看起来最能帮助完成任务的行动。 &lt;/li&gt;    &lt;li&gt;用户评估系统作出的反馈，判断在完成任务上的进展。 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;评审人员可以对用户的每个交互过程模拟这三个步骤去评价，并以回答下列三个问题为基础：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;界面上执行正确动作的控件（按钮、菜单、选项等）是否可见？ &lt;/li&gt;    &lt;li&gt;用户是否知道正确动作可以到达希望的结果？ &lt;/li&gt;    &lt;li&gt;根据系统对动作的反馈信息，用户是否能够知道他的动作是否正确？ &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;比如用户去一家网上书店买一本数，第一个任务是找到这本书，用户要知道如何找到这本书。这时网站上的图书分类和查询系统可能会暗示用户如何完成交互。用户可以尝试从网站的图书分类里寻找，并根据具体的分类一步步地接近要找地那本书，这时候就要记录下用户是否能够方便地使用网站的分类系统；用户也可以使用网站的查询系统，并长时使用查询规则，系统是否支持方便的查询，以及在查询过程中及时地反馈信息都会影响用户交互任务的完成。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;认知性遍历评估过程中记录的信息非常重要，每一个否定的回答都表示存在一个潜在的可用性问题，可以用于知道改进交互设计。&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;以上内容百分之九十不是我写的，都来自一个课件，详见文末参考资料。&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;我比较注意的是“&lt;b&gt;&lt;font color="#ff0000"&gt;专家评估快速并且便宜&lt;/font&gt;&lt;/b&gt;”这句话，对于我而言，快速并且便宜的评估最能实现最大的价值。如果一个进行比较小的软件的可用性评估，我个人也比较倾向使用专家评估法。&lt;b&gt;如果能注意使用启发式评估法的各个要点，并进行详细分析，就可以发现很多的问题&lt;/b&gt;，根据我自身的经验，我们可以取得提高软件的可用性立竿见影的效果。&lt;b&gt;认知性遍历方法需要有一定经验的人员对软件可用性进行评估，这对评估人员的经验和能力要求比较高&lt;/b&gt;。如果能够结合“认知性遍历”和“启发式评估”这两种方法定能发现软件的可用性的缺陷并提高软件的可用性。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;参考资料：&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;其实本文的大部分资料来自：&lt;/p&gt;  &lt;p&gt;http://wenku.baidu.com/view/ab600322192e45361066f54d.html&lt;/p&gt;  &lt;p&gt;上的“主讲：刘婷婷 - 人机交互界面设计”PPT文档。（我实在找不到具体最终的来源）&lt;/p&gt;  &lt;p&gt;这个人机交互界面设计的PPT做得非常不错，推荐。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-434157900584791734?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/434157900584791734/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=434157900584791734' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/434157900584791734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/434157900584791734'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/blog-post_09.html' title='可用性工程的可用性评估 - 专家评估'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8240322191656020340</id><published>2010-05-07T01:47:00.001+02:00</published><updated>2010-05-07T01:52:18.267+02: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;p&gt;如果自己无所事事的时候，与其在在网上乱逛，还不如写一篇博客。最近写文章的频率明显提高就是因为最近无所事事的时间很多。    &lt;br /&gt;Hanyi on ET 软件可用性工程系列文章：&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://hanyionet.blogspot.com/2010/04/usability-testing.html"&gt;软件的可用性测试(usability testing) 要点总结（上）&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://hanyionet.blogspot.com/2010/05/usability-testing.html"&gt;软件的可用性测试(usability testing) 要点总结（下）&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://hanyionet.blogspot.com/2010/05/blog-post.html"&gt;可用性测试问卷的一个简单示例&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://hanyionet.blogspot.com/2010/05/blog-post_02.html"&gt;软件可用性概述&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;h6&gt;&lt;/h6&gt;  &lt;p&gt;前几天我在UPB图书馆闲逛，一般来说我到图书馆总是有目的，到图书馆这么冷门的地方闲逛，真不是我这种人的风格，在无意中发现了Jakob Nielsen的大作Usability Engineering，而且这本1993年出版的书放在图书馆十几年几乎是还是全新的，看来没有什么人借过这本书。要谈可用性，Jakob Nielsen还是要介绍一下的，这个丹麦人号称是&amp;quot;the king of usability&amp;quot;，他拥有大概79个美国的专利，当然都在可用性领域啦。在这里http://www.useit.com/jakob/有关于他的介绍。 &lt;/p&gt;  &lt;p&gt;关于&lt;strong&gt;可用性的测试和评估&lt;/strong&gt;，在国外现在已经形成一个新的专业，&lt;strong&gt;称为可用性工程（Usability Engineering）&lt;/strong&gt;。 &lt;/p&gt;  &lt;p&gt;在本系列的文章中已经提到了可用性测试的几种常用的方法： &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;用户模型法        &lt;br /&gt;用户调查法         &lt;br /&gt;专家评审法         &lt;br /&gt;用户测试法&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;注意以上是可用性测试的方法(Testing)。 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;这里来聊聊可用性评估(Evaluation)，可用性评估是检验软件系统的可用性是否达到了用户的要求。如同本系列的文章中已经提到的我们的目的就是要满足“用户为核心”的设计原则。也就是以让用户爽为最高原则。当然啦，提高软件的可用性还有一些其他的好处例如降低系统技术支持的费用，缩短最终用户训练时间。更有效地利用计算机系统资源等等。 &lt;/p&gt;  &lt;p&gt;对于一个软件的可用性的评估(Evaluation)方法有那些呢？    &lt;br /&gt;根据我Google而来的结果，可用性评估大概有以下五种：     &lt;br /&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;用户模型（User Model）        &lt;br /&gt;启发式评估 (Heuristic Evaluation)         &lt;br /&gt;认知性遍历 (Cognitive Walkthrough)         &lt;br /&gt;用户测试 (User Testing)         &lt;br /&gt;用户问卷调查 (Questionnaire)&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;其实评估方法有很多，但是大体上分为&lt;strong&gt;三类&lt;/strong&gt;：也就是所谓的&lt;strong&gt;&lt;font color="#ff8040"&gt;理论评估、用户评估和专家评估&lt;/font&gt;&lt;/strong&gt;，&lt;strong&gt;区分标准在于数据来源&lt;/strong&gt;。 &lt;/p&gt;  &lt;p&gt;理论评估一般是由设计者或评估者根据某种形式化方法计算任务或用户模型与系统描述的匹配情况，这种方法可以给出定量的结果    &lt;br /&gt;这篇文章先谈谈理论评估里的用户模型法。     &lt;br /&gt;用户模型法是用数学模型来模拟人机交互的过程。这种方法把人机交互的过程看做是解决问题的过程。认为人使用软件系统是有目标的，而一个大的目标可以被细分为许多小的目标。     &lt;br /&gt;在人机交互领域中最著名的预测模型是&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/GOMS"&gt;GOMS模型&lt;/a&gt;&lt;/strong&gt;（1983年由Card, Morgan和Newell 提出在交互系统中用来分析建立用户行为的模型。它采用“分而治之”的思想，将一个任务进行多层次的细化。），GOMS 是描述任务和用户执行该任务所需知识的方法，通过目标 (Goal)、操作符 (Operator)、方法 (Method) 以及选择规则 (Selection rule) 四个方面进行描述。(也可以说GOMS模型假设通过方法和选择性规则，形成一些目标和子目标。)     &lt;br /&gt;这个GOMS其实在计算机系统的评估方面也有广泛的应用。据说GOMS是人机交互研究领域内少有的几个广为人知的模型之一，并被称为最成熟的工程典范。 &lt;/p&gt;  &lt;p&gt;详细地说，在GOMS中：    &lt;br /&gt;&lt;strong&gt;&lt;em&gt;1.目标 Goals&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;目标就是用户执行任务最终想要得到的结果,它可以在不同的层次中进行定义。     &lt;br /&gt;&lt;strong&gt;&lt;em&gt;2. 操作 Operators&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;操作是任务分析到最低层时的行为，是用户为了完成任务所必须执行的基本动作。     &lt;br /&gt;&lt;strong&gt;&lt;em&gt;3. 方法 Methods        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;方法是描述如何完成目标的过程。一个方法本质上来说是内部的算法，用来确定子目标序列及完成目标所需要的操作。     &lt;br /&gt;&lt;strong&gt;&lt;em&gt;4．选择 Selection&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;选择是用户要遵守的判定规则，以确定在特定环境下所要使用的方法。     &lt;br /&gt;当有多个方法可供选择时，GOMS中并不认为这是一个随机的选择，而是尽量来预测会使用哪个方法,这需要根据特定用户、系统的状态、目标的细节来预测要选择哪种方法。 &lt;/p&gt;  &lt;p&gt;但是GOMS也是有很明显的缺点，它没有清楚的描述错误处理的过程，假设用户完全按一种正确的方式进行人机交互，因此只针对那些不犯任何错误的专家用户。GOMS对于任务之间的关系描述过于简单,只有顺序和选择。事实上任务之间的关系还有很多种，另外选择关系通过非形式化的附加规则描述，实现起来也比较困难。GOMS把所有的任务都看作是面向操作目标的，而忽略了一些任务所要解决的问题本质以及用户间的个体差异，它的建立不是基于现有的认知心理学，无法代表真正的认知过程。&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;你或许还有兴趣知道，还有一些用于创建和分析GOMS模型的工具，例如：&lt;/p&gt;  &lt;p&gt;GOMSED (Goms-Editor - in german)，&lt;a href="http://www1.tu-darmstadt.de/fb/fb3/psy/kogpsy/indexgoms.htm"&gt;德国达姆工大GOMSED工具&lt;/a&gt;&lt;b&gt;&lt;/b&gt;     &lt;br /&gt;QGoms (Quick-Goms)     &lt;br /&gt;CogTool KLM-based modelling tool&lt;/p&gt;  &lt;p&gt;洋洋洒洒一大堆，以上百分之九十不是我写的，都来自一个课件，详见文末参考资料。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;用户模型法这个理论评估的方法可以给出定量的结果，但它的假设条件太多，离真正应用还有一段距离。&lt;/strong&gt;换句话来说就是有点用想当然的方式去探索，然后得出所谓的评估结果。如何建好一个好的预测模型例如GOMS模型，是用户模型法的一个难点。为什么很困难呢，这里举一个例子。譬如我们做数学建模用计算机进行模拟，我们常常必须人为给定各种约束，以避免np hard 问题。但是这些约束常常是以一些经验为前提，和一些不确定的假设。然而如果约束本身就有问题会导致错误的结果。     &lt;br /&gt;但是使用用户模型法（理论评估的方法）相对快速并且便宜，如果有一个非常好的模型，和一个相对较好的建模方式，那么用这种方法进行评估还是相当有价值。 &lt;/p&gt;  &lt;p&gt;参考资料：    &lt;br /&gt;其实本文的大部分资料来自：     &lt;br /&gt;&lt;a href="http://wenku.baidu.com/view/ab600322192e45361066f54d.html"&gt;http://wenku.baidu.com/view/ab600322192e45361066f54d.html&lt;/a&gt;     &lt;br /&gt;上的“主讲：刘婷婷 - 人机交互界面设计”PPT文档。（我实在找不到具体最终的来源）     &lt;br /&gt;这个人机交互界面设计的PPT做得非常不错，推荐。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/GOMS"&gt;http://en.wikipedia.org/wiki/GOMS&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www1.tu-darmstadt.de/fb/fb3/psy/kogpsy/indexgoms.htm"&gt;http://www1.tu-darmstadt.de/fb/fb3/psy/kogpsy/indexgoms.htm&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8240322191656020340?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8240322191656020340/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8240322191656020340' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8240322191656020340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8240322191656020340'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/blog-post_07.html' title='可用性评估 - 理论评估'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8227954474035807163</id><published>2010-05-02T17:23:00.001+02:00</published><updated>2010-05-07T02:01:47.032+02: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;p&gt;今天继续软件可用性测试的系列文章，先前的文章很不完整，可能会让人看得一头雾水，今天将比较完整地从可用性测试的定义延伸，然后谈谈可用性过程(Usability process)以及可用性测试的方法，以下文字大多来自期刊文献的拼凑，具体内容，请参阅本文后的参考文献。 &lt;/p&gt;  &lt;p&gt;Hanyi on ET 软件可用性测试系列文章： &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://hanyionet.blogspot.com/2010/04/usability-testing.html"&gt;软件的可用性测试(usability testing) 要点总结（上）&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://hanyionet.blogspot.com/2010/05/usability-testing.html"&gt;软件的可用性测试(usability testing) 要点总结（下）&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://hanyionet.blogspot.com/2010/05/blog-post.html"&gt;可用性测试问卷的一个简单示例&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;h6&gt;&amp;#160;&lt;/h6&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040" size="4"&gt;软件的可用性定义小结：&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;软件的可用性定义&lt;strong&gt;[引用1]：&lt;/strong&gt;     &lt;br /&gt;ISO 9241-11 (ISO 1993c)的原话：&amp;quot;The effectiveness, efficiency and satisfaction with which specified users achieve specified goals in particular environments&amp;quot;.     &lt;br /&gt;ISO 9241-11国际标准对可用性定义如下：产品在特定使用环境下为特定用户用于特定用途时所具有的有效性（effectiveness）、效率（efficiency）和用户主观满意度（satisfaction）。其中，有效性是指用户完成特定任务和达到特定目标时所具有的正确和完整程度；效率是指用户完成任务的正确和完整程度与所使用资源（如时间）之间的比率；满意度就是用户在使用产品过程中所感受到的主观满意和接受程度。从人的角度来看软件系统是否易用，高效，使人满意。     &lt;br /&gt;下图清晰地表明了可用性各个关键元素的关系：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_7rEkBQiDq6I/S92Y-8ht0VI/AAAAAAAAAQo/FyyvJg9VNk0/s1600-h/quality_of_use_usebiltytest_hanyionet%5B10%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="quality_of_use_usebiltytest_hanyionet" border="0" alt="quality_of_use_usebiltytest_hanyionet" src="http://lh4.ggpht.com/_7rEkBQiDq6I/S92Y_eMxwjI/AAAAAAAAAQs/bUm6-tQsL0Q/quality_of_use_usebiltytest_hanyionet_thumb%5B8%5D.png?imgmax=800" width="606" height="443" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;可用性工程的好处&lt;/strong&gt;：     &lt;br /&gt;对产品开发厂商来说，可以减少后期维护，降低开发成本，缩短工期，提高用户接受度，增强产品竞争力，提高企业信誉度。 对用户和使用单位来说，可以提高用户生产效率，减少培训和技术支持费用，提高用户工作的舒适满意程度，提高系统建设投资效益和使用效益。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;可用性测试的时机&lt;/strong&gt;：     &lt;br /&gt;尽早做，经常做。问题越早发现和弥补，所造成的损失就越低。 &lt;/p&gt;  &lt;p&gt;ISO 9241： 9241是关于办公室环境下交互式计算机系统的人类工效学国际标准，它由17个部分组成，根据人类工效学和可用性原理，分别对各种硬件交互设备属性和软件用户界面设计问题作了详细的规定和建议。可以对一个产品设计符合该标准的程度进行评估和认证。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040" size="4"&gt;可用性过程(Usability process)：&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;可用性过程帮助用户交互设计师在回答这些问题分析阶段的设计和支持在设计阶段（见下图&lt;strong&gt;[引用2]&lt;/strong&gt;）。可用性的方法有很多，所有的方法基本上基于同样的可用性过程，所以我们有一个从不同的方法中而来的通用的可用性过程抽象&lt;strong&gt;[引用2]&lt;/strong&gt;。下图已经很清晰了表明了可用性过程的各个阶段以及具体操作，具体过程的步骤的分析请看&lt;strong&gt;[引用2]&lt;/strong&gt;。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/S92ZAAQ2ctI/AAAAAAAAAQw/L3U-HpzbTzQ/s1600-h/The_usabilty_testing_process_hanyionet%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="The_usabilty_testing_process_hanyionet" border="0" alt="The_usabilty_testing_process_hanyionet" src="http://lh4.ggpht.com/_7rEkBQiDq6I/S92ZAYVNmoI/AAAAAAAAAQ0/T_H8ajt7Row/The_usabilty_testing_process_hanyionet_thumb%5B2%5D.png?imgmax=800" width="629" height="226" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040" size="4"&gt;可用性测试的方法&lt;strong&gt;[引用3]&lt;/strong&gt;：&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;可以分为四类，&lt;strong&gt;用户模型法&lt;/strong&gt;，&lt;strong&gt;用户调查法，专家评审法和用户测试法&lt;strong&gt;[引用3]&lt;/strong&gt;。&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;用户模型法&lt;/strong&gt;是用数学模型来模拟人机交互的过程。这种方法把人机交互的过程看作是解决问题的过程。它认为人使用软件系统是有目的的。而一个大的目的可以被细分为许多小的目的。这了完成每个小的目的，又有不同的动作和方法可供选择，每一个细小的过程都可以计算完成的时间。这个模型就可以用来预测用户完成任务的时间了。这个方法特别适合于无法进行用户测试的情形。在人机交互领域中最著名的预测模型是GOMS(Goals, Operators, Methods, Selections)模型。&lt;strong&gt;[引用3]&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;用户调查法&lt;/strong&gt;包括&lt;strong&gt;问卷调查法&lt;/strong&gt;和&lt;strong&gt;访谈法&lt;/strong&gt;。这两种方法是社会科学研究，市场研究和人机交互学中沿用已久的技术，适用于快速评估，可用性测试和实地研究，以了解事实，行为，信仰和看法。访谈与普通对话的相似程度取决于待了解的问题和访谈和类型。访谈有4种主要类型：开放开(或非结构化)访谈，结构化访谈，半结构化采谈和集体访谈.具体就采用何种访谈技术取决于评估目标，待解决的问题和选用的评估范型。例如，如果目标是大致了解用户对新设计构思(如交互设计)的反映，那么非正式的开放式访谈通常是最好的选择。但如果目标是搜集关于特定特征(如新型WEB浏览器的布局)的反馈，那么，结构化的访谈调查通常更为适合，因为，它的目标和问题更为具体。调查问卷是用于收集统计数据和用户意见的常用方法，它与访谈有些相似，也是用来了解用户的满意度和遇到的问题。问卷需要认真的设计。可以是开放式的问题，也可以是封闭的问题，但必须措辞明确，避免可能的误导问题，保证所收集的数据有高的可信度。在学术论文中常见的可用性问卷包括：用户交互满意度问卷(questionnaire for user interaction satisfaction, QUIS),软件可用性测量目录(software usability measurement inventory, SUMI)计算机系统可用性问卷(computer system usability questionnaire, CSUQ). &lt;strong&gt;[引用3]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;专家评审法&lt;/strong&gt;分为&lt;strong&gt;启发式评估&lt;/strong&gt;和&lt;strong&gt;走查法&lt;/strong&gt;。启发式评估是由Jakob Nielsen和他的同事们开发的非正式可用性检查技术，使用一套相对简单，通用，有启发性的可用性原则来进行可用性评估。具体方法是，专家使用一组称为“启发式原则”的可用性规则作为指导，评定用户界面元素(如对话框，菜单，在线帮助等)是否符合这些原则。在进行启发式评估时，专家采取“角色扮演”的方法，模拟典型用户使用产品的情形，从中找出潜在的问题。参与评估的专家数目可以不同。由于启发式评估不需要用户参与，也不需要特殊设备，所以它的成本相对较低，而且较为快捷，因此也称为“经济评估法”。&lt;strong&gt;[引用3]&lt;/strong&gt;     &lt;br /&gt;走查法包括认知走查和协作走查，是从用户学习使用系统的角度来评估系统的可用性的。这种方法主要用来发现新用户使用系统时可能遇到的问题，尤其适用于没有任何用户培训和系统。走查就是逐步检查使用系统执行的过程，从中找出可用性问题。走查的重点非常明确，适合于评估系统的一小部分。&lt;strong&gt;[引用3]&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;用户测试法&lt;/strong&gt;：可用性既然是评价软件质量的标准，而且是从用户的角度出发，评价起来当然少不了用户的参与，在所有的可用性评估法中，最有效的就是用户测试法了。该方法是在测试中，让真正的用户使用软件系统，而测试人员在旁边观察，记录，测量。因此，用户测试法最能反映用户的要求和需要的。根据测试的地点不同，用户测试可分为实验室测试和现场测试。实验室测试是在可用性实验室里进行的，而现场测试则是由可用性测试人员到用户的实际使用现场进行观察和测试。根据试验设计的方法不同，用户测试以可分为有控制条件的统计试验和非正式的可用性观察测试。这两种试验方法在某些情况下也可以混合使用，所以经常被笼统的称为可用性试验。可用性的实验就是在产品实际应用的环境之外，就特定的环境、条件、使用者进行测试，藉以记录系统的表现，更能对特定的因果关系进行验证，得到量化的数据。 &lt;/p&gt;  &lt;p&gt;用户测试常用的方法包括实验室的实验、焦点团体讨论(Focus Group Discussion)及发声思考(Thinking Aloud)。焦点团体讨论是一般市场营销研究常用的手段。邀请一群使用者，一般五至八人一起就几个焦点问题进行讨论，由一位主持人掌控讨论的方向，围绕着预定的题目进行，让参与者都能畅所欲言并热烈讨论。不过若针对软件进行讨论，必须要考虑系统的规模与使用的体验，对企业的软件来说，一次的讨论绝对不够，必须要进行一系列的讨论与评价。&lt;strong&gt;[引用3]&lt;/strong&gt;     &lt;br /&gt;发声思考法是心理学研究所用的研究方法，在国外被人机交互或可用性的研究者用来评估软件的使用。发声思考法要求受测者使用指定的系统，边用边说话，说出使用之时心中想的一切，包括困难、问题、感觉等。这个方法能从每位受测者的评价过程中收集到相当大的信息，而所需邀请的受测者也不多，在国外的相关业界可说是标准的软件使用质量评价方法。&lt;strong&gt;[引用3]&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;参考文献：        &lt;br /&gt;&lt;/em&gt;[引用1]&lt;/strong&gt;：N. Baven, M. Macleod , “Usability measurement in context,” Behavior and Information Technology, 13, 1994, pp. 132-145.     &lt;br /&gt;&lt;strong&gt;[引用2]&lt;/strong&gt;：Xavier Ferre;, Natalia Juristo, Helmut Windl, Larry Constantine, &amp;quot;Usability Basics for Software Developers,&amp;quot; IEEE Software, pp. 22-29, January/February, 2001     &lt;br /&gt;&lt;strong&gt;[引用3]&lt;/strong&gt;：吴鹏越，佟秋利，杜炤。软件系统可用性评估综述，清华大学计算机科学与技术系，清华大学计算机与信息管理中心。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8227954474035807163?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8227954474035807163/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8227954474035807163' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8227954474035807163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8227954474035807163'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/blog-post_02.html' title='软件的可用性测试概述'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_7rEkBQiDq6I/S92Y_eMxwjI/AAAAAAAAAQs/bUm6-tQsL0Q/s72-c/quality_of_use_usebiltytest_hanyionet_thumb%5B8%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-6113000476928275072</id><published>2010-05-01T16:20:00.001+02:00</published><updated>2010-05-07T02:02:43.303+02: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;p&gt;Hanyi on ET 今天继续趁热打铁，今天提供应用程序的可用性测试问卷的一个简单示例。这是我的“可用性测试系列”的第三部分，如果有兴趣可以阅读前两部分：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://hanyionet.blogspot.com/2010/04/usability-testing.html"&gt;软件的可用性测试(usability testing) 要点总结（上）&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://hanyionet.blogspot.com/2010/05/usability-testing.html"&gt;软件的可用性测试(usability testing) 要点总结（下）&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;请填写此问卷&lt;/i&gt;&lt;/b&gt;&lt;i&gt; &lt;/i&gt;&lt;i&gt;。&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;我们的软件&lt;/i&gt;&lt;i&gt;开发团队非常&lt;b&gt;感谢你&lt;/b&gt;志愿参加这次可用性测试&lt;b&gt;，&lt;/b&gt;占用你&lt;/i&gt;&lt;i&gt;宝贵&lt;/i&gt;&lt;i&gt;的时间。您的参与对我们软件的应用&lt;/i&gt;&lt;i&gt;的开发&lt;/i&gt;&lt;i&gt;十分&lt;b&gt;重要&lt;/b&gt;。我们希望，参加这次可用性测试是一个有趣和愉快的经历！&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0" width="795"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="146"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 1&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="647"&gt;           &lt;p&gt;你觉得成功地完成了任务表上的所有任务？&lt;/p&gt;            &lt;p&gt;&lt;b&gt;是的&lt;/b&gt;&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;没有&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 2&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;与其他我使用过的软件相比，我发现该软件的应用原型是:&lt;/p&gt;            &lt;p&gt;&lt;b&gt;很难使用&lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常容易使用&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 3&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;作为一个观察者，我发现该软件的应用原型是:&lt;/p&gt;            &lt;p&gt;&lt;b&gt;很难使用&lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常容易使用&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 4&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;软件的目录是设置非常合理，并且功能很容易找到。&lt;/p&gt;            &lt;p&gt;&lt;b&gt;强烈反对&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常同意&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 5&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;我立刻明白了每个菜单项的功能。&lt;/p&gt;            &lt;p&gt;&lt;b&gt;强烈反对&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常同意&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 6&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;我所期待的功能在目录中都可以找到相对应的。&lt;/p&gt;            &lt;p&gt;&lt;b&gt;强烈反对&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常同意&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 7&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;该应用的按钮都设置组织良好，易于查找。&lt;/p&gt;            &lt;p&gt;&lt;b&gt;强烈反对&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常同意&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 8&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;我立刻明白每个按钮的功能。&lt;/p&gt;            &lt;p&gt;&lt;b&gt;强烈反对&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常同意&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 9&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;我所期待的功能在按钮栏中都可以找到相对应的。&lt;/p&gt;            &lt;p&gt;&lt;b&gt;强烈反对&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常同意&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 10&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;我发现该软件应用的导航的使用是：&lt;/p&gt;            &lt;p&gt;&lt;b&gt;非常困难&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常容易&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 11&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;我对这个软件应用的总体印象是：&lt;/p&gt;            &lt;p&gt;&lt;b&gt;非常负面的&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;1 … 2 … 3 … 4 … 5 … 6 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;非常正面的&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;问题&lt;/b&gt;&lt;b&gt; 12&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;你是否感兴趣参加开发团队今后的其他可用性测试？&lt;/p&gt;            &lt;p&gt;&lt;b&gt;是&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;否&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;p&gt;&lt;b&gt;姓名&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;E-mail:&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;日期&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="144"&gt;           &lt;p&gt;&lt;b&gt;附加评论&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="645"&gt;           &lt;br /&gt;            &lt;br /&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;参考及延伸阅读：&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Sample Application Usability Test Questionnaire&lt;/p&gt;  &lt;p&gt;&lt;a href="http://it.toolbox.com/blogs/enterprise-solutions/sample-application-usability-test-questionnaire-17827"&gt;http://it.toolbox.com/blogs/enterprise-solutions/sample-application-usability-test-questionnaire-17827&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sample Usability Test Plan&lt;/p&gt;  &lt;p&gt;&lt;a href="http://it.toolbox.com/blogs/enterprise-solutions/sample-usability-test-plan-17826"&gt;http://it.toolbox.com/blogs/enterprise-solutions/sample-usability-test-plan-17826&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sample Website Usability Questionnaire&lt;/p&gt;  &lt;p&gt;&lt;a href="http://it.toolbox.com/blogs/enterprise-solutions/sample-website-usability-questionnaire-17825"&gt;http://it.toolbox.com/blogs/enterprise-solutions/sample-website-usability-questionnaire-17825&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Practical Usability Testing&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.digital-web.com/articles/practical_usability_testing/"&gt;http://www.digital-web.com/articles/practical_usability_testing/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;（完）&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-6113000476928275072?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/6113000476928275072/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=6113000476928275072' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6113000476928275072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/6113000476928275072'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/blog-post.html' title='可用性测试问卷的一个简单示例'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3461372330594075236</id><published>2010-05-01T01:26:00.001+02:00</published><updated>2010-05-07T02:03:13.180+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='可用性工程'/><title type='text'>如何进行软件的可用性测试(usability testing) 要点总结（下）</title><content type='html'>&lt;p&gt;继续简要介绍可用性测试的要点：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[6]&lt;/em&gt;       &lt;br /&gt;&lt;font color="#ff8040"&gt;筹备工作&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;安装硬/软件&lt;/strong&gt;     &lt;br /&gt;- 运行安装配置&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;写出指示和关于任务的描述&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 任务是否可以进行？     &lt;br /&gt;&amp;#160; 需要多少工作时间来解决？ &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;写问卷&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 是否所有问题可以被回答和被负责？     &lt;br /&gt;&amp;#160; 是否遗失重要的问题？ &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;通知，并邀请用户和观察员&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 确保所有的人已经做好准备 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;代表职责&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 摄像机，登入，帮助，观察... &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;测试测试的设置&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 运行一个预测试！&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[7]&lt;/em&gt;       &lt;br /&gt;&lt;font color="#ff8040"&gt;重要方面&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;至少有一位观察员拥有工具使用知识      &lt;br /&gt;&lt;/strong&gt;&amp;#160; 主要的工作是熟悉交互系统/工具/产品 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;至少有一位观察员要有相关领域的知识&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 必须努力去熟悉任务域 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;批评事件的尺度&lt;/strong&gt;     &lt;br /&gt;- 如果你对用户的行为感到惊讶     &lt;br /&gt;- 如果用户意气用事     &lt;br /&gt;- 观察员之间的差异 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;了解用户的意图&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 想想，对视频的抗拒&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[8]        &lt;br /&gt;&lt;/em&gt;&lt;font color="#ff8040"&gt;询问和问卷调查&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;主观印象      &lt;br /&gt;&lt;/strong&gt;- 你喜欢什么？     &lt;br /&gt;- 你怎么不喜欢？     &lt;br /&gt;- 是缺少什么？     &lt;br /&gt;- 是有些东西多余？     &lt;br /&gt;- 你会怎么变化？ &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;主观评价      &lt;br /&gt;&lt;/strong&gt;单极：     &lt;br /&gt;1 =好，2 =好，3 =最好     &lt;br /&gt;两极：     &lt;br /&gt;-2 =太差，-1 =坏，...，2 =非常好 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;决定一个标准值      &lt;br /&gt;&lt;/strong&gt;&amp;#160; 例如，平均比1,5更好 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;留空间给意见补充&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[9]&lt;/em&gt;       &lt;br /&gt;&lt;font color="#ff8040"&gt;一个典型的测试时间表&lt;/font&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;每个情况2到2.5小时 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5个最终用户/测试者 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;额外的可用性测试的方法&lt;/strong&gt;     &lt;br /&gt;- 设计的讨论     &lt;br /&gt;- 原型     &lt;br /&gt;- 检查     &lt;br /&gt;- 面向任务的模拟 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;观察员&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;设计者，开发者&lt;/strong&gt;     &lt;br /&gt;- 对软件的变更负责 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;信息管理者&lt;/strong&gt;     &lt;br /&gt;- 对手动更改负责 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;质量经理      &lt;br /&gt;&lt;/strong&gt;- 对质量的保证负责 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;领域/工具专家      &lt;br /&gt;&lt;/strong&gt;- 对帮助提示负责 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;最终用户      &lt;br /&gt;&lt;/strong&gt;- 对任务的工具不对应负责 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;可用性工作人员1      &lt;br /&gt;&lt;/strong&gt;- 对测试的设置负责 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;可用性工作人员2&lt;/strong&gt;     &lt;br /&gt;- 对记录数据工作负责&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[10]&lt;/em&gt;       &lt;br /&gt;&lt;font color="#ff8040"&gt;观察室&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;录像机      &lt;br /&gt;'shadow'屏幕       &lt;br /&gt;登入软件       &lt;br /&gt;多个显示器       &lt;br /&gt;可用性测试的工作人应注意提供...&lt;/strong&gt;     &lt;br /&gt;- 舒适的环境     &lt;br /&gt;- 较暗淡的光线     &lt;br /&gt;- 舒适的椅子     &lt;br /&gt;- 茶点     &lt;br /&gt;- 休息&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;测试室&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;应该看起来像一个正常的工作地点&lt;/strong&gt;     &lt;br /&gt;+单向镜子     &lt;br /&gt;+摄像机，麦克风     &lt;br /&gt;[让测试者知道, 他将被观察!]&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[11]        &lt;br /&gt;&lt;/em&gt;&lt;font color="#ff8040"&gt;撰写报告&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;分析协议&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;关键事件的重要性&lt;/strong&gt;     &lt;br /&gt;[1]必须立即修复     &lt;br /&gt;[2]必须在交付前修复     &lt;br /&gt;[3]应该在交付前修复     &lt;br /&gt;[4]应该在下一版本发表前修复     &lt;br /&gt;[5]应该在未来修复 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;定量数据分析      &lt;br /&gt;&lt;/strong&gt;- 频率     &lt;br /&gt;- 均值加标准差 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;磁带的编辑&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 视频序列与关键事件&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;参考文献：&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;Jakob Nielsen, Usability engineering. Academic, 1993 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.idemployee.id.tue.nl/g.w.m.rauterberg/publications/UE_Tutorial.pdf"&gt;http://www.idemployee.id.tue.nl/g.w.m.rauterberg/publications/UE_Tutorial.pdf&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;(完)&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3461372330594075236?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3461372330594075236/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3461372330594075236' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3461372330594075236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3461372330594075236'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/05/usability-testing.html' title='如何进行软件的可用性测试(usability testing) 要点总结（下）'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-2011906859962645259</id><published>2010-04-30T01:21:00.001+02:00</published><updated>2010-05-07T02:03:39.066+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='可用性工程'/><title type='text'>如何进行软件的可用性测试(usability testing) 要点总结（上）</title><content type='html'>&lt;p&gt;最近在做一个小软件交付前的可用性测试，看了一些资料，在网上找到一个还不错的总结，这里我做一个简单的翻译，本篇文章比较长，希望对一些需要进行可用性测试的朋友有所帮助。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;什么是软件的可用性测试(usability testing)？      &lt;br /&gt;&lt;/strong&gt;一个用来记录和衡量一个交互系统的交互质量的方法。 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[1]&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;实验室或现场测试：&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;运行测试...&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 和真正的最终用户（即'测试者'）     &lt;br /&gt;&amp;#160; 使用代表性任务     &lt;br /&gt;&amp;#160; 在一个'真实的'环境 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;进行记录/协议 ...&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 所有重要事件     &lt;br /&gt;&amp;#160; 用户和观察员的全部评论     &lt;br /&gt;&amp;#160; 主观印象 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;控制/测量&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 脑力负荷 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[2]&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;形成性评价      &lt;br /&gt;&lt;/strong&gt;&amp;#160; 一个测试组（小于5）     &lt;br /&gt;&amp;#160; 一个交互系统     &lt;br /&gt;&amp;#160; 要求测试人员的意见     &lt;br /&gt;&amp;#160; 目标：找到关键事件 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;总结性评价      &lt;br /&gt;&lt;/strong&gt;&amp;#160; 两个或多个测试人员小组（大于 12）     &lt;br /&gt;&amp;#160; 测量测试人员的的计算机水平     &lt;br /&gt;&amp;#160; 两个或两个以上的接口版本     &lt;br /&gt;&amp;#160; 衡量脑力负荷     &lt;br /&gt;&amp;#160; 询问测试人员的意见     &lt;br /&gt;&amp;#160; 性能比较     &lt;br /&gt;&amp;#160; 分析与应用统计数据     &lt;br /&gt;&amp;#160; 目标：选择最好的系统&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[3]&lt;/em&gt;       &lt;br /&gt;&lt;font color="#ff8040"&gt;必要的组件&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;情景/任务&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 选择适当的工作环境 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;真正的最终用户作为测试者      &lt;br /&gt;&lt;/strong&gt;&amp;#160; 选择所有目标群体     &lt;br /&gt;&amp;#160; [任务，性别，年龄，经验，等级，工作各部门，使用语言，...] &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;交互系统&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 最小硬件/最大软件 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;观察员&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 项目经理，设计师，软件开发人员，培训教员，额外的最终用户 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;数据记录&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 音频/视频，日志文件，问卷调查&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[4]&lt;/em&gt;       &lt;br /&gt;&lt;font color="#ff8040"&gt;重要的制约&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;每个测试者的测试时间要小于2.5小时&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 否则最终用户迅速变得很累！ &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;只作重要功能的测试&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 高频率的使用     &lt;br /&gt;&amp;#160; 关键任务方面 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;只测试主要交互类型&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 典型的使用，避免重复 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;测试完整的任务      &lt;br /&gt;&lt;/strong&gt;&amp;#160; 最终用户应该会成功！ &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;社会心理方面&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 不要责怪用户/测试者！&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;[5]&lt;/em&gt;       &lt;br /&gt;&lt;font color="#ff8040"&gt;重要行动&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;测试者的简报      &lt;br /&gt;&lt;/strong&gt;&amp;#160; “我们测试软件，而不是你！”     &lt;br /&gt;&amp;#160; “你可以随时取消测试！”     &lt;br /&gt;&amp;#160; - 解释测试环境     &lt;br /&gt;&amp;#160; - 如果要记录数据时要求用户的允许 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;记录数据/关键事件&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 是否所有设备准备好了吗？     &lt;br /&gt;&amp;#160; 视频中的日期/时间戳是否正确？     &lt;br /&gt;&amp;#160; 协议中的日期/时间是否正确？ &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;收集所有测试材料&lt;/strong&gt;     &lt;br /&gt;&amp;#160; 将所有的测试材料夹在一起，放入一个文件夹中 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;测试人员汇报情况      &lt;br /&gt;&lt;/strong&gt;&amp;#160; 给予时间让测试者提问，付给测试者工资，并感谢用户！&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;参考文献：&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;Jakob Nielsen, Usability engineering. Academic, 1993 &lt;/p&gt;  &lt;p&gt;http://www.idemployee.id.tue.nl/g.w.m.rauterberg/publications/UE_Tutorial.pdf&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-2011906859962645259?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/2011906859962645259/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=2011906859962645259' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2011906859962645259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/2011906859962645259'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/04/usability-testing.html' title='如何进行软件的可用性测试(usability testing) 要点总结（上）'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3220463513157734414</id><published>2010-04-27T16:04:00.001+02:00</published><updated>2010-04-27T16:11:06.112+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='协议'/><title type='text'>VLC如何进行RTSP的支持(源码阅读心得)</title><content type='html'>&lt;p&gt;今天天气很好，心情大好，Hanyionet和大家分享一下阅读VLC的源码的一些心得。 &lt;/p&gt;  &lt;p&gt;先小小吹捧和介绍一下VLC。    &lt;br /&gt;大家都知道VLC是一个免费，开放源码，跨平台媒体播放器，并集合先进的流媒体功能可以通过IPv4或IPv6的高带宽网络进行流媒体传输。它还支持多种视频格式和流协议。VLC的编解码基于著名的开源项目FFmpeg的libavcodec的开源库。VLC同时提供不同的接口（命令行，网络，图形用户界面，远程登录），以及提供流行的语言如C，C++，C＃，Python，和Java可以使用的APIs，这使得VLC变得高度灵活，并且用于任何类型播放或流媒体处理。 &lt;/p&gt;  &lt;p&gt;VLC支持RTSP功能是通过使用liveMedia库，这个库是live555开源项目一部分。VLC支持RTSP协议，可用于在线或离线转码，视频点播服务和单播或组播流。除了这些以外，VLC还提供各种接口和API，VLC还允许被集成在一个更复杂的环境，可以让我们建立一个更先进的视频应用程序。 &lt;/p&gt;  &lt;p&gt;进入正题，VLC到底是如何进行RTSP的支持。 &lt;/p&gt;  &lt;p&gt;VLC对RTSP的支持的实现的方式是&lt;strong&gt;&lt;font color="#ff8040"&gt;通过一种输出链（output chains）。&lt;/font&gt;&lt;/strong&gt;VLC读取各种类型的视频输入（文件，流，DVD等），然后通过定义一个或多个输出链（output chains）的内容，然后用于播放流。一个链可以连接到另一个链条，然后就可以形成一个比较复杂的工作流程。下图为一个简单的例子说明。图中VLC设置并读取本地文件，然后转码，并通过使用两个链将数据传输到一个多播地址。链1将读取文件，然后转码。链2读取链1输出的转码文件，然后将流发送到至指定地址。&lt;strong&gt;&lt;font color="#ff8040"&gt;整个过程类似UNIX管道的工作方式。&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_7rEkBQiDq6I/S9bu7zqBGuI/AAAAAAAAAQg/2tNPrZauEAw/s1600-h/VLC%20RTSP%20example%20hanyionet%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="VLC RTSP example hanyionet" border="0" alt="VLC RTSP example hanyionet" src="http://lh6.ggpht.com/_7rEkBQiDq6I/S9bu8XzqiHI/AAAAAAAAAQk/3JpWusFdTNs/VLC%20RTSP%20example%20hanyionet_thumb%5B2%5D.png?imgmax=800" width="640" height="235" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Enjoy！&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3220463513157734414?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3220463513157734414/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3220463513157734414' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3220463513157734414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3220463513157734414'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/04/vlcrstp.html' title='VLC如何进行RTSP的支持(源码阅读心得)'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/S9bu8XzqiHI/AAAAAAAAAQk/3JpWusFdTNs/s72-c/VLC%20RTSP%20example%20hanyionet_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-8082132703841217499</id><published>2010-04-25T12:19:00.001+02:00</published><updated>2010-04-25T12:21:39.450+02: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;p&gt;今天想写一篇短文，谈谈两种行为：抱怨和过分计较。过分计较和抱怨这两种行为和心态，几乎是共生的。请观察一下，那些喜欢抱怨的人往往就是平日在工作上最爱计较的人。 &lt;/p&gt;  &lt;p&gt;很多人都读过《不抱怨的世界》，谈不要抱怨，这本书说的比我好上万倍，这里就直接引书中几句，关于抱怨这个行为漂亮精确的分析。 &lt;/p&gt;  &lt;p&gt;《不抱怨的世界》作者认为：“&lt;font color="#ff8040"&gt;&lt;strong&gt;抱怨就是自夸，没有人会喜欢爱吹牛的人&lt;/strong&gt;&lt;/font&gt;。”&lt;/p&gt;  &lt;p&gt;人们为什么会抱怨，书中谈到，“&lt;font color="#0080ff"&gt;没有安全感、质疑自己的重要性、不确定自我价值的人，才会吹牛和抱怨。他们会昭告自己的成就，希望看到听者眼中投射出赞赏的目光。他们也会抱怨自己遭逢的困难，以博取同情；或是把它当作藉口，以逃避自己向往却没有完成的目标。他们会抱怨，其实是因为自觉不配得到他们想要的东西。他们缺乏自我肯定，于是便藉由抱怨，把自己想要的东西推开&lt;/font&gt;。” &lt;/p&gt;  &lt;p&gt;所以不要抱怨吧，现在开始，请散播阳光和喜乐，这样会给自己的家庭和工作带来正面的影响力。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;我主要来聊聊“过于计较”这种行为。 &lt;/p&gt;  &lt;p&gt;很多人在读研究所的时候总是过于计较自己是否做得过多事情，自己的时间是否被占用，计较自己是教授的免费劳动力。很多人总是斤斤计较自己的时间，计较着读完硕士的时间等等，我认为这只是和小学生一般的“读书升级”的幼稚心态，&lt;font color="#ff8040"&gt;&lt;strong&gt;其实人生中的真正积累和收获不是因为一个硕士头衔而得到任何的变化&lt;/strong&gt;&lt;/font&gt;。过于计较的人，以最小的代价获得最大的收获为傲，认为那些花很多时间去做对自己无用的人很笨，在我看来，那些爱计较的人才是一种真正的蠢蛋。 &lt;/p&gt;  &lt;p&gt;在上班时，过于计较的人总是喜欢进行比较，他们爱发表例如此类的言论：“我只是编程的我不是测试的，这些代码又不是我要维护”等等。他们做这些所谓“不是他们的事”的时候总是不甘不愿的，超级影响团队士气。遇到这种人，最好的方法就是把他踢出项目组，然后项目组的其他同仁一起加倍诚恳和努力把项目搞定。相信我....这绝对是最好的方法，我的痛苦经验就是和爱计较的人一起做了一个项目，他一个人搞得整个团队乌烟瘴气，士气全无，项目做得很痛苦，请想想我们玩过的三国志，如果一个部队士气全无，那么这个部队就几乎毫无战斗力。 &lt;/p&gt;  &lt;p&gt;过分计较的人是无法进行真正的积累的，&lt;font color="#ff8040"&gt;&lt;strong&gt;知识和生活经验的积累往往从所谓的“困境”当中&lt;/strong&gt;&lt;/font&gt;，或者是那些过分计较的人眼中的“做免费劳动力”的过程中。 &lt;/p&gt;  &lt;p&gt;不要过于计较自己的外在得失，要做的事情很简单就是花费心力将该做的事情做好。其实&lt;font color="#ff8040"&gt;&lt;strong&gt;看事情要大方向，大格局地看事情&lt;/strong&gt;&lt;/font&gt;，不要过于计较那一点的得失。曾经看过一篇文章，谈到“&lt;strong&gt;生命就是一种长期而持续的积累过程&lt;/strong&gt;”。人生的“大格局”就是“一种长期而持续的积累过程”，我们所要坚持的大方向也就是“长期而持续的积累”，而不是不断地计较自己的外在得失。 &lt;/p&gt;  &lt;p&gt;最后给自己拍拍手，居然欢叽叽歪歪写一篇所谓的大道理的“自爽文”。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-8082132703841217499?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/8082132703841217499/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=8082132703841217499' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8082132703841217499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/8082132703841217499'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/04/blog-post_25.html' title='不要抱怨，不要过于计较'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3191180221229113454</id><published>2010-04-18T16:20:00.001+02:00</published><updated>2010-04-18T16:20:47.287+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='ffmpeg'/><category scheme='http://www.blogger.com/atom/ns#' term='SDL'/><title type='text'>FFmpeg和SDL的API</title><content type='html'>&lt;p&gt;使用FFmpeg的API和SDL的API进行视频的解码和显示，似乎还是有点技术含量的东西，我最近收到一些email询问视频的解码和显示的实现，今天hanyionet就献上博文一篇简单地说明一下如何使用这些API，其实使用这些API其实一点都不难，不要被复杂描述吓到。我们所要做就是先要了解视频的解码和显示到底是怎样的一个过程，然后了解各个API的作用。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;进行解码和视频的现实一般来说就是这样的步骤：     &lt;br /&gt;&lt;strong&gt;&lt;font color="#ff8040"&gt;初始化--&amp;gt;解码--&amp;gt;图像缩放--&amp;gt;视频显示&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;以下是一个简单的过程流程图，在每一个步骤中给出一些比较重要的API。 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/S8sVPDP4wQI/AAAAAAAAAQY/WjK2zr2-O3c/s1600-h/Process%20flow%20of%20video%20decode%20module%20new%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Process flow of video decode module new" border="0" alt="Process flow of video decode module new" src="http://lh5.ggpht.com/_7rEkBQiDq6I/S8sVPqw3elI/AAAAAAAAAQc/tSWuiDbhCds/Process%20flow%20of%20video%20decode%20module%20new_thumb%5B1%5D.png?imgmax=800" width="644" height="180" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;可以看出，&lt;strong&gt;不同的步骤的实现，就是找到并使用相对应的API。&lt;/strong&gt;     &lt;br /&gt;图中的API的具体说明，今天一同给出。 &lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;FFmpeg API&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;描述&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;av_register_all()&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;Initializes libavformat and registers all the muxers, demuxers and protocols.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;avcodec_find_decoder(…)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;Finds a decoder with a matching codec ID.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;avcodec_alloc_context()&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;Allocates an AVCodecContext and sets its fields to default values.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;avcodec_alloc_frame()&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;Allocates an AVFrame and sets its fields to default values.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;sws_getContext(…)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;Returns an SwsContext to be used in sws_scale().&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;sws_scale(…)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;Scales the data in source according to our settings in our SwsContext c. srcStride and dstStride are the source and destination linesize.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="211"&gt;         &lt;p&gt;avcodec_decode_video(…)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="509"&gt;         &lt;p&gt;Decodes a video frame from buffer into picture.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;a name="_Toc259217163"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL API&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;描述&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL_SetVideoMode()&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;Set up a video mode with the specified width, height, and bits-per-pixel.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL_CreateYUVOverlay()&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;It is used to create a YUV overlay of the specified width, height and format for the provided display.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL_BlitSurface()&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;This performs a fast blit from the source surface to the destination surface.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL_FreeSurface()&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;Frees (deletes) a SDL surface.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL_UpdateRect()&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;Makes sure the given area is updated on the given screen.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL_Flip()&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;It is used to swap screen buffers. On hardware that supports double-buffering, this function sets up a flip and returns. &lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="211"&gt;           &lt;p&gt;SDL_FreeYUVOverlay()&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="509"&gt;           &lt;p&gt;Free a YUV video overlay.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&lt;a name="_Toc259217164"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;其实要理解FFmpeg的API还有一个非常重要的地方就是理解，各种数据结构的具体内容，譬如AVFrame和AVCodecContext，个人认为这两个结构是比较重要的。    &lt;br /&gt;了解的这些API的使用方法后，现在应该做的就是找一个例子例如ffplay.c或者&lt;a href="http://dranger.com/ffmpeg/"&gt;http://dranger.com/ffmpeg/&lt;/a&gt;里的例程，体会一下，最后使用这些API搭建出属于自己的视频播放程序。     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff8040"&gt;&lt;strong&gt;Enjoy!&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-3191180221229113454?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/3191180221229113454/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=3191180221229113454' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3191180221229113454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/3191180221229113454'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/04/ffmpegsdlapi.html' title='FFmpeg和SDL的API'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_7rEkBQiDq6I/S8sVPqw3elI/AAAAAAAAAQc/tSWuiDbhCds/s72-c/Process%20flow%20of%20video%20decode%20module%20new_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-718915693123668838</id><published>2010-04-13T00:51:00.001+02:00</published><updated>2010-04-13T00:53:48.182+02: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='思考'/><category scheme='http://www.blogger.com/atom/ns#' term='读书笔记'/><title type='text'>一些书摘分享</title><content type='html'>&lt;p&gt;因为师兄在度长假，项目头不在，项目无法继续，所以我也给自己放了10天加长版的复活节假期，明天开假期就结束了，又要开始努力工作。这个假期里，读了很多以前想读的但是没有时间读五花八门的书，并且在很多地方大把大把地浪费时间。   &lt;br /&gt;最近读书时，做了一些书摘，以下是个人认为比较好的观点，在这里给出和大家分享：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;上司分配给下属的工作并不是打算要你百分之百地完成。也就是说一般分配给你的是120％～130%，而你完成110%就足够了。这种时候，也需要通过提高业绩，来增强回绝130%工作量的底气。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;“选定不必做的事比选定需要做的事”起码重要两倍以上。这是因为增加要做的事也不一定能有效地管理时间，但是只要我们能够确定哪些事我们不必做，就能切实有效地管理时间。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;《时间投资法》&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;拥有信息的人-聪明人合法地从没有信息的人-不聪明的人那里卷走金钱。只要你成为信息的提供者，那么你就可以轻松收集到你所需要的信息。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;开口说话或者写电子邮件的时候，一定要清楚地意识以下四个方面：&lt;/p&gt;    &lt;p&gt;1. 要清楚自己希望向对方传递什么样的一个整体感觉。&lt;/p&gt;    &lt;p&gt;2. 要清楚用框架对这个整体感觉进行分解后，会变成什么样的结构。&lt;/p&gt;    &lt;p&gt;3. 要清楚简化后，最重要的信息内容是什么。&lt;/p&gt;    &lt;p&gt;4. 要清楚这这个信息内容中，有必要向对方传递的层次信息是什么。&lt;/p&gt;    &lt;p&gt;提升10倍人脉的建议： &lt;/p&gt;    &lt;p&gt;1. 给予信息&lt;/p&gt;    &lt;p&gt;2. 提高电子邮件的质量，扩大联系。&lt;/p&gt;    &lt;p&gt;3. 有效利用公共邮件列表，使之成为大家集结的重要阵地&lt;/p&gt;    &lt;p&gt;4. 善于利用午餐会&lt;/p&gt;    &lt;p&gt;5. 尊重自己的交流方式&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;《效率提升10倍的google化知性生产技巧》&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;吸引力法则（想什么给什么，像万有引力，改变思想就可以改变状况），想象，学会使用自己的身体，更要学会使用自己的心灵。预先创造生活。心和想法非常重要。想象美好的人际关系。爱自己。我要什么的方式思考。感恩。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;《秘密》&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;升官是和老板认为你是有多少本事有关和一个人的未来价值，而不是你真实的实力。观察组织未来的需求，做好准备，积极主动幽默开朗。推销自己的想法。不要批评任何人。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;《老板选谁一起喝啤酒》&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;幸福就是，当你设定一个目标，你在奋斗的时候感觉快乐，你实现目标的时候也感觉快乐。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;《幸福的方法》&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;在新大陆经济环境中，能坚持到最后的企业多数都是项目型企业，他们也将成为今后的主流。因为比起容易因循守旧的金字塔式组织结构，项目型组织结构能更快更灵活地应对市场变化，更适合企业不断创新和发展的需求。     &lt;br /&gt;成功人士具有以下三个共同特征。第一，他们深知人生就是不断挑战，不断冒险的过程；第二，做自己想做的事情，而不管别人是怎么看的，也不计较收入的多少；第三，具有强烈的欲望，不断进取。一句话，他们是典型的“冒险家”。他们并不追求“安居乐业”，而是不断挑战自我，证明自我，即使失败了，也会笑着面对人生。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;《再启动》&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;还有部分书摘，这里我就不给出具体出处：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;建立自信，是成功的不二法则，自信不需要与任何人做比较，在这个世界上，每个人都有自己的特质与优点，我们不需要和任何人比较，也不需要永远认为自己不如其他人。如果总是抱着“我比不上其他人”的想法而对任何事情退缩，那将永远没有扭转命运的可能。     &lt;br /&gt;如果你觉得自己很努力了，那么就问问自己：我是否努力得感动了别人甚至是感动了自己呢？      &lt;br /&gt;不能只有专业化，工作需要职业化。      &lt;br /&gt;学历可以作为一种衡量我们工作能力的信号。即使毕业于同一所大学，在找工作时，根据你的专业不同，受到的评价也就不同。入学难度高的专业的毕业生要比其他专业的毕业生拥有一定的优势。      &lt;br /&gt;读书无须太多规矩，重在以量取胜，带着问题读书，对信息加以筛选。 &lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-718915693123668838?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/718915693123668838/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=718915693123668838' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/718915693123668838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/718915693123668838'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/04/blog-post.html' title='一些书摘分享'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-4648621893911037514</id><published>2010-04-07T23:57:00.001+02:00</published><updated>2010-04-07T23:57:06.164+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具使用技巧'/><category scheme='http://www.blogger.com/atom/ns#' term='推荐'/><title type='text'>文献管理软件JabRef</title><content type='html'>&lt;p&gt;进入正题前，照例先闲话几句，很久没有更新博客了，上个月回了一趟国，陪陪家人，和老同学朋友叙旧。在一些饭局中，听了一些了解行业本质的人对一些行业的见解和经济趋势的分析，才真的发现自己认识的肤浅，真感到“听君一席话，胜读十年书”。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_7rEkBQiDq6I/S7z_rwXBYcI/AAAAAAAAAQQ/kDJ8k9VEwWI/s1600-h/JabRef%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="JabRef" border="0" alt="JabRef" align="left" src="http://lh6.ggpht.com/_7rEkBQiDq6I/S7z_salgTKI/AAAAAAAAAQU/lTHLJrsdua4/JabRef_thumb%5B2%5D.png?imgmax=800" width="363" height="62" /&gt;&lt;/a&gt; 今天写一些文献管理软件的安装和使用，首先简单提一下&lt;a href="http://en.wikipedia.org/wiki/BibTeX"&gt;&lt;strong&gt;BibTex&lt;/strong&gt;&lt;/a&gt;。BibTeX作为TeX 组件，提供了参考文献生成功能。一般来说BibTeX工具是用来和LaTeX一起使用。&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/JabRef"&gt;JabRef&lt;/a&gt;&lt;/strong&gt;也是一种BibTeX参考文献管理软件。最重要的是它是开源的比起大名鼎鼎的&lt;a href="http://en.wikipedia.org/wiki/EndNote"&gt;&lt;strong&gt;EndNote&lt;/strong&gt;&lt;/a&gt;，其实并不逊色，EndNote在Word里用起来非常方便，最大的缺点就是要$$。我们可以使用JabRef来建立数据库也就是纯文本的bib文件，也可以从例如IEEE文献库里自动导入文献条目，用它来管理文献条目也是相当简单的，例如我们可以使用它来生成&lt;a href="http://en.wikipedia.org/wiki/BibTeX"&gt;&lt;strong&gt;BibTeXkey&lt;/strong&gt;&lt;/a&gt;，然后把库bib文件和pdf文件放在同一目录下，将pdf文件命名为BibTeXkey名，然后就可以进行关联。我只是非常简单地谈一下使用。具体使用请移步：“文献管理软件 JabRef 快速入门”&lt;a href="http://blog.solrex.org/articles/jabref-quick-guide.html"&gt;http://blog.solrex.org/articles/jabref-quick-guide.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;JabRef作为EndNote的替代，&lt;b&gt;&lt;a href="http://www.ee.ic.ac.uk/hp/staff/dmb/dmb.html"&gt;Mike Brookes&lt;/a&gt;&lt;/b&gt; 开发了一个很好的Word的add-on。     &lt;br /&gt;如果要安装使用Word 2007或 2003下的JabRef add-on请移步:&lt;a href="http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html"&gt;http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html&lt;/a&gt;     &lt;br /&gt;这里写一点快速上手的简单说明：     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;1. 下载&lt;strong&gt;MiKTeX&lt;/strong&gt;（从&lt;a href="http://miktex.org/"&gt;http://miktex.org/&lt;/a&gt;）     &lt;br /&gt;MiKTeX的是LaTeX的排版环境，我们使用它，主要是因为MiKTeX包含BibTeX之类的'引擎'可以用来生成各种期刊格式。     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;2. 安装JabRef（从&lt;a href="http://jabref.sourceforge.net/"&gt;http://jabref.sourceforge.net/&lt;/a&gt;）并重新定位JabRef文档     &lt;br /&gt;不幸的BibTeX之不支持文件名带空格，如果你的JabRef文件中名字有空格，必须重新定位JabRef文件到一个没有空格目录。     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;3. 设定Path    &lt;br /&gt;The macro requires that it can access the BibTeX package from the default path. The simplest way to set this is to go to     &lt;br /&gt;&lt;strong&gt;Start&amp;gt;&amp;gt;Settings&amp;gt;&amp;gt;Control Panel&amp;gt;&amp;gt; System&amp;gt;&amp;gt;Advanced&amp;gt;&amp;gt;Enviromental Variables&amp;gt;&amp;gt;System Variables      &lt;br /&gt;&lt;/strong&gt;here you need to edit the “Path” entry by adding the path of the BibTeX executable, failure to do so will cause an “Error 53″ The path to my BibTeX executable is &lt;strong&gt;C:\Program Files\MiKTeX 2.5\miktex\bin      &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;4. 将Word Startup Folder 设为可视    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;5. 下载Macro    &lt;br /&gt;这个Marco也就是&lt;strong&gt;Bibtex4Word.dot&lt;/strong&gt;，你可以在&lt;a href="http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html"&gt;http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html&lt;/a&gt;找到&lt;/p&gt;  &lt;p&gt;Marco要求，它可以访问从默认路径BibTeX包。最简单的方法设置：    &lt;br /&gt;&lt;em&gt;如果使用Win7或Vista&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;放入C:\Users\*用户名*\AppData\Roaming\Microsoft\Word\STARTUP &lt;/p&gt;  &lt;p&gt;&lt;em&gt;如果使用XP&lt;/em&gt;     &lt;br /&gt;放入 &amp;quot;C:\Document and Settings\*用户名*\Application Data\Microsoft\Word\STARTUP&amp;quot; &lt;/p&gt;  &lt;p&gt;6. 如果打开 Microsoft Word 2007    &lt;br /&gt;在 Add-Ins里可以找到我们的Add-on，然后你就可以开始开始引用（Citing）了。在Word 2003可以直接看到Bibtex4Word toolbar。 &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;详细使用及具体安装步骤请参考： &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Word 2007 and Jabref &lt;a href="http://freetimeblog.awardspace.com/?p=52"&gt;http://freetimeblog.awardspace.com/?p=52&lt;/a&gt;     &lt;br /&gt;How to use JabRef (BibTeX) with Microsoft Word 2003 &lt;a href="http://www.medicalnerds.com/how-to-use-jabrefbibtex-with-microsoft-word-2003/"&gt;http://www.medicalnerds.com/how-to-use-jabrefbibtex-with-microsoft-word-2003/&lt;/a&gt;     &lt;br /&gt;Bibtex4Word - Home &lt;a href="http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html"&gt;http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6976291393224066038-4648621893911037514?l=hanyionet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanyionet.blogspot.com/feeds/4648621893911037514/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6976291393224066038&amp;postID=4648621893911037514' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4648621893911037514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6976291393224066038/posts/default/4648621893911037514'/><link rel='alternate' type='text/html' href='http://hanyionet.blogspot.com/2010/04/jabref.html' title='文献管理软件JabRef'/><author><name>hanyi</name><uri>http://www.blogger.com/profile/13925171437546085791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_7rEkBQiDq6I/Sy7CaGeaI1I/AAAAAAAAAMM/OdbxruQjYw8/S220/hanyionet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_7rEkBQiDq6I/S7z_salgTKI/AAAAAAAAAQU/lTHLJrsdua4/s72-c/JabRef_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6976291393224066038.post-3505045382113355910</id><published>2010-02-27T01:03:00.001+01:00</published><updated>2010-02-27T01:09:08.354+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='编程'/><category scheme='http://www.blogger.com/atom/ns#' term='电子工程师乱弹编程'/><title type='text'>C++开发游戏手柄代码 （Developing the Joystick Code）</title><content type='html'>&lt;p&gt;还是坚持每周一博，照例写正文前废话一段：最近天气越来越好，不下雪了，偶尔下点雨，下了一次冰雹，但可以看到10+的温度了，晚上6点坐车回家的时候天还是是微亮。哈，德国的春天终于来了。    &lt;br /&gt;迫于项目时间的压力，项目只剩下最后一周的时间，本周的工作效率还不错，写了非常多的代码，突然发现，我最近最能集中心力，最具生产力的时段是下午5到6点，就是回家前一个小时，似乎所有最有创造力的生产和想法都是在这个小时产生的，很奇怪。最近，所里的咖啡机又坏了，苦了很多人，有一个意大利同事对我说说，没有咖啡就不能&lt;strong&gt;Coffee in, Code out&lt;/strong&gt;，没法编程了。还好我不喝咖啡，每天只喝茶，所里提供的各种奇怪的茶包（德国的茶包的种类真是多的恐怖，各种奇怪的口味都有，喝过一种咖喱口味的茶）。     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;好了闲话不多谈，今天谈谈关于游戏手柄joystick的代码开发，最近接触了一些多媒体子系统的Win32 API，其实非常容易，通过一些google可以找到非常多的源代码和示例代码，可以非常快的利用多媒体的Win32 API开发出一些很有趣的东西，游戏手柄joystick代码开发就是一个很经典的例子。支持游戏手柄现在是一个Win32的标准的一部分，多媒体子系统单独的Win32 API，其中支持游戏手柄是一个组成部分。但是关于游戏手柄的功能和数据结构没有定义在标准&lt;strong&gt;windows.h&lt;/strong&gt;头文件，而是位于&lt;strong&gt;mmsystem.h&lt;/strong&gt;中头文件。     &lt;br /&gt;上代码之前，一些说明： &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[1]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;要使用游戏手柄的Win32 API    &lt;br /&gt;&lt;strong&gt;#include &amp;lt;windows.h&amp;gt;      &lt;br /&gt;#include &amp;lt;mmsystem.h&amp;gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;编译器请使用&lt;strong&gt;VS2005&lt;/strong&gt;以上版本。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[2]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;当然了不要忘记加入&lt;strong&gt;winmm.lib&lt;/strong&gt;。     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[3]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;JOYSTATE数据类型包括描述游戏手柄的State    &lt;br /&gt;例如     &lt;br /&gt;&lt;/p&gt;  &lt;div style="line-height: 12px; font-family: courier new; font-size: 12px"&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;typedef&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;WORD&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTATE;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTATE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_NONE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0000L,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_LEFT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0001L,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_RIGHT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0002L,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_UP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0004L,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_DOWN&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0008L,&lt;/span&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;/table&gt;&lt;/div&gt; &lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;[4]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;我们要做的事就是，写出以下方法：    &lt;br /&gt;&lt;/p&gt;  &lt;div style="line-height: 12px; font-family: courier new; font-size: 12px"&gt;&lt;span style="color: #000000"&gt;BOOL&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;InitJoystick();&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;CaptureJoystick();&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;ReleaseJoystick();&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;CheckJoystick();&lt;/span&gt;     &lt;br /&gt;&lt;/table&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[5]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;写&lt;strong&gt;CaptureJoystick()&lt;/strong&gt;和 &lt;strong&gt;ReleaseJoystick()&lt;/strong&gt;的方法就是使用使用两个Win32 functions就是：&lt;strong&gt;joySetCapture()&lt;/strong&gt; 和 &lt;strong&gt;joyReleaseCapture()&lt;/strong&gt; 。     &lt;br /&gt;JOYINFO structure用于检索游戏手柄状态通过&lt;strong&gt;joyGetPos()&lt;/strong&gt; function。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[6]&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;以下代码结合了Qt，也可以不需要Qt运行，只需要删除Qt部分的代码即可，使用了Qt的signal slot机制，利用了&lt;strong&gt;QTime&lt;/strong&gt;的timeout()不断对CheckJoystick()进行调用，以及时更新Joystick状态。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[7]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_7rEkBQiDq6I/S4hhZpDdTQI/AAAAAAAAAQI/27n1moVLHd8/s1600-h/BTP_Joystick%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="BTP_Joystick" border="0" alt="BTP_Joystick" align="left" src="http://lh6.ggpht.com/_7rEkBQiDq6I/S4hhaCBZSBI/AAAAAAAAAQM/UNqh8wEyA44/BTP_Joystick_thumb%5B1%5D.jpg?imgmax=800" width="244" height="160" /&gt;&lt;/a&gt;以下的代码的主体部分来自网上的一些示例代码，我进行了一些修改和裁剪，编译和使用没有任何问题，我使用的是北通小手柄 BTP-C024 USB游戏手柄（如附图所示）进行测试，运行很好。&lt;strong&gt;&lt;font color="#ff8040"&gt;以下代码非常简单，应该很容易理解，不要问我，为什么不能用，或者如何使用，如果不能用，&lt;font color="#ff0000"&gt;请google或再看看代码&lt;/font&gt;（你已经有了完整的代码）&lt;/font&gt;&lt;/strong&gt;，呵呵。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="line-height: 12px; font-family: courier new; font-size: 12px"&gt;&lt;font color="#008080"&gt;1&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;/*&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;2&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\file&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;GameEngine.h&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;3&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\class&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;GameEngine&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;4&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\date&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;2010&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;5&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\bug&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;6&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\warning&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;7&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;8&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*/&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;9&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;10 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#ifndef&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;GAMEENGINE_H_&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;11 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#define&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;GAMEENGINE_H_&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;12 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;13 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#include&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;QtGui&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;gt;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;14 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;15 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#include&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;windows&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;h&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;gt;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;16 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#include&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;mmsystem&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;h&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;gt;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;17 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;18 &lt;/font&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;-----------------------------------------------------------------&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;19 &lt;/font&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Joystick&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Flags&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;20 &lt;/font&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;-----------------------------------------------------------------&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;21 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;typedef&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;WORD&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTATE;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;22 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTATE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_NONE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0000L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;23 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_LEFT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0001L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;24 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_RIGHT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0002L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;25 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_UP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0004L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;26 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_DOWN&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0008L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;27 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_FIRE1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0010L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;28 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_FIRE2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0020L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;29 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_FIRE3&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0030L,&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;30 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOY_FIRE4&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x0040L;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;31 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;32 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;QObject&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;33 &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;34 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;Q_OBJECT&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;35 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;36 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;37 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;38 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;39 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;~&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;40 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;41 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;HandleJoystick(JOYSTATE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;jsJoystickState);&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;42 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;43 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;BOOL&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;InitJoystick();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;44 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;CaptureJoystick();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;45 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;ReleaseJoystick();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;46 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;47 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;UINT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;m_uiJoystickID;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;48 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;RECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;m_rcJoystickTrip;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;49 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;HWND&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;m_hWindow;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;50 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;51 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;52 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;53 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;slots&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;54 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;CheckJoystick();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;55 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;56 &lt;/font&gt;&lt;span style="color: #000000"&gt;signals&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;57 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickLeft();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;58 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickRight();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;59 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickUp();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;60 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickDown();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;61 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickButton1();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;62 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickButton2();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;63 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickButton3();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;64 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joystickButton4();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;65 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;66 &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;67 &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;QTimer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;_poller;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;68 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;69 &lt;/font&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;70 &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;71 &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#endif&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;/*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;GAMEENGINE_H_&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*/&lt;/span&gt;     &lt;br /&gt;&lt;/table&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="line-height: 12px; font-family: courier new; font-size: 12px"&gt;&lt;font color="#008080"&gt;1&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;/*&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;2&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\file&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;GameEngine.cpp&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;3&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\class&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;GameEngine&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;4&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\date&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;2010&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;5&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\bug&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;6&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;\warning&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;7&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;8&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;*/&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;9&amp;#160;&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;10&amp;#160; &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#include&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;QDebug&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;gt;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;11&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;12&amp;#160; &lt;/font&gt;&lt;span style="color: #0000ff"&gt;#include&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;GameEngine.h&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;quot;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;13&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;14&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;15&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;GameEngine&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine()&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;16&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;17&amp;#160; &lt;/font&gt;&amp;#160; &lt;br /&gt;&lt;font color="#008080"&gt;18&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;InitJoystick();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;19&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;CaptureJoystick();&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;20&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;21&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;start&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;timer&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;to&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;trigger&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;every&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;100&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;ms&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;22&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;_poller&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;QTimer(&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;23&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;connect(_poller,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;SIGNAL(timeout()),&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;SLOT(CheckJoystick()));&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;24&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;_poller&lt;/span&gt;&lt;span style="color: #ff0000"&gt;-&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;start(&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;100&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;25&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;26&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;27&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;GameEngine&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;~&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine()&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;28&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;29&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;30&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;31&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;32&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;BOOL&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;InitJoystick()&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;33&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;34&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Make&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;sure&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;joystick&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;driver&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;is&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;present&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;35&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;UINT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;uiNumJoysticks;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;36&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;((uiNumJoysticks&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joyGetNumDevs())&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;0&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;37&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;FALSE;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;38&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;39&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Make&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;sure&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;the&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;joystick&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;is&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;attached&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;40&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOYINFO&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;jiInfo;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;41&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(joyGetPos(JOYSTICKID1,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;jiInfo)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;!&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYERR_UNPLUGGED)&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;42&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;m_uiJoystickID&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTICKID1;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;43&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/b&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;44&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;FALSE;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;45&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;46&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Calculate&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;the&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;trip&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;values&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;47&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;JOYCAPS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;jcCaps;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;48&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;joyGetDevCaps(m_uiJoystickID,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;jcCaps,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;(JOYCAPS));&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;49&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;DWORD&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;dwXCenter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;((DWORD)jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wXmin&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wXmax)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;50&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;DWORD&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;dwYCenter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;((DWORD)jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wYmin&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wYmax)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;51&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;m_rcJoystickTrip&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;left&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wXmin&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(WORD)dwXCenter)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;52&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;m_rcJoystickTrip&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;right&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wXmax&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(WORD)dwXCenter)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;53&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;m_rcJoystickTrip&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;top&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wYmin&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(WORD)dwYCenter)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;54&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;m_rcJoystickTrip&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;bottom&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(jcCaps&lt;/span&gt;&lt;span style="color: #ff0000"&gt;.&lt;/span&gt;&lt;span style="color: #000000"&gt;wYmax&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(WORD)dwYCenter)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;55&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;TRUE;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;56&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;57&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;58&amp;#160; &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;CaptureJoystick()&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;59&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;60&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Capture&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;the&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;joystick&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;61&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(m_uiJoystickID&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTICKID1)&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;62&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;63&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;joySetCapture(m_hWindow,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;m_uiJoystickID,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;TRUE);&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;64&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;qDebug()&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;Capture&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;Joystick&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008080"&gt;success!&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;65&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;66&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;67&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;68&amp;#160; &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;ReleaseJoystick()&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;69&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;70&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Release&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;the&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;joystick&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;71&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(m_uiJoystickID&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTICKID1)&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;72&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;joyReleaseCapture(m_uiJoystickID);&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;73&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;74&amp;#160; &lt;/font&gt;    &lt;br /&gt;&lt;font color="#008080"&gt;75&amp;#160; &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;GameEngine&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #000000"&gt;CheckJoystick()&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;76&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;77&amp;#160; &lt;/font&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(m_uiJoystickID&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTICKID1)&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;78&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;79&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYINFO&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;jiInfo;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;80&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYSTATE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;jsJoystickState&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #008080"&gt;0&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;81&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(joyGetPos(m_uiJoystickID,&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;jiInfo)&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;JOYERR_NOERROR)&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;82&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;83&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;Check&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;horizontal&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #008000"&gt;movement&lt;/span&gt;     &lt;br /&gt;&lt;font color="#008080"&gt;84&amp;#160; &lt;/font&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;b&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #000000"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color: #000000"&gt;(jiInfo&
