2011年6月21日星期二

读书随笔

今天下午觉得工作效率很低,所以不想上班,直接回家,随手写一些东西吧。
最近工作效率很低,刚刚读了《程序员的思维修炼:开发认知潜能的九堂课》,才明白多任务处理对生产力会造成重大损失,工作时我常常喜欢多任务工作,看来这是错误的。
书中提到:

一项研究发现,一般情况下,多任务处理将耗费你20%至40%的生产力。多任务处理在这里是指在不同的抽象层次上执行多个并发任务。而在同一代码区域休整几个错误不能算作多任务处理,回几个类似的电话或做多道菜也不算。当你中断代码修正而去回应无关的即时消息、电子邮件或电话时,或者快速浏览新闻网站时,你才会遇到麻烦。
科学家认为,试图把注意力同时放在几件事情上,意味着你在每件事情上都会处理得很差。如果你持续中断正在进行的任务,去检查电子邮件或者回复即时消息,你的有效智商会下降10分。相比之下,吸大麻烟卷导致下降的智商仅4分。


前几天读了一本书《The Research Student's Guide to Success》,上面提到PhD的定义,很有趣,但是很真实。


“A PhD is about finding out more and more about less and less until one eventually knows everything about nothing.”


据《程序员的思维修炼:开发认知潜能的九堂课》说,成为专家之前的积极的实践需要四个条件:


1.需要一个明确定义的任务
2.任务需要有适当的难度——有挑战性但可行
3.任务环境可以提供大量反馈,以便于你采取行动
4.提供重复犯错和纠正错误的机会


继续谈编程:
最近常常使用复制-粘贴式编程(把Google作为IDE的一部分),很多情况下缺乏思考,这样不可取,这绝不是积极的实践。
好的程序员能写出人能读懂的代码,这谁都知道,但是我们是否常常问问自己,自己是否以“好程序员”的标准来要求自己,去写让人读懂的代码。
刚刚还看到一个有趣的说法,很深刻:


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. [出处]


[出处] http://learnpythonthehardway.org/book/advice.html

2011年6月20日星期一

随机性

很久没有写读书笔记了,最近也没有读什么“闲书”,忙着啃一些工作上需要的工具书。今天来简单记录一下这个周末读的《随机致富的傻瓜》,让人看得入迷,美中不足的是中文版翻得有些生涩。纳西姆·塔勒布(Nassim Taleb)的这本书妙趣横生,有很有知识性。
以下是一些书摘,作者的观点独具一格,令人玩味无穷:

这本书提到了三个锦囊:
一、偏态。概率分布上的不对称,黑天鹅事件的出现就是最典型的偏态。现实意义就是失败的代价过于沉重、难以承受,那么这件事成功的概率有多高都无关紧要。
二、存活者偏差。由于我们只看到成功者,而由此形成对机遇的歪曲看法。比如说我们认为长的漂亮的人薪水比较高,其实是我们只会注意那些薪水比较高的人,或者说那些薪水比较高的人容易引起我们的注意罢了。
三、路径依赖。有点像物理学上的惯性,人们过去的选择决定了他们现在和未来可能的选择。要完全摆脱路径依赖,就要完全不受过去行为的束缚,摆脱了路径依赖,每一天来说都是一张白纸。

时间尺度短的新闻充斥噪声,时间尺度长的历史中噪声则多已剔除。

如果一年报酬率为15%,波动性为每年10%,那么,任何一年赚钱的概率为93%,一个月为67%,一天为54%,任何一秒赚到钱的概率只有50.02%……在很短的时间尺度内,我们观察到的是变异性而非报酬率,也就是说,噪声湮没了有用的真实的信息,使我们情绪失控痛苦不已。

投资人和企业要赚的不是概率,而是白花花的钞票。因此对他们来说,某个事件发生的可能性多大并不重要,重要的是那件事发生时能赚多少钱。利润出现的频率有多高并不重要,结果多少才重要。

财务工程financial engineering的应用就带有浓厚的伪科学成分。应用这些方法的人,衡量风险是以过去的历史作为未来的指针。这里我们只想说,由于分布有可能缺乏定常性,这整个观念可能大错特错,且必须付出非常惨痛的代价。

致富纯粹是自私行为,不是社会行为。资本主义的优点在于社会能够善用人们的贪婪,而不是他们的善行,同时也不需要颂扬这种贪婪为一种道德后知性成就。成为有钱人不是一种道德成就。

常识不过是18岁以前学到的错误观念,路径依赖是理性思考的敌人。

容易受随机性愚弄的性格特征:
1、在某种程度上过高估计了自己信念的可命性,不是经济学意义上的就是统计学意义上的。
2、有与仓位联姻的倾向。死抱住一个思想不放对交易员、科学家或其他任何人都不是好事情。
3、经常变换说法的倾向。赔钱的时候会就变成“着眼于长远利益”的投资人,在交易员和投资人之间来回摆动,根据命运的最新变化而给自己定位。
4、事先没有确切的行动计划来应对万一出现的赔钱局面。他们干脆就不知道有这种可能。在市场急剧下跌,并没有依照事先确定的方案反应以后,买了更多。
5、不会做批判性思考。这表现在,不能用“止损”的方式修正他们的态势。
6、拒不接受。在出现损失的情况下,没有表现出明确地接受现实。

我们有必要在知识中接受不对称;有些情况下,利用统计学和计量经济学是有帮助的。但我不希望自己的生活依赖于它。如果统计科学能够在哪些方面给我带来好处,我就用它。如果它带来一种威胁,那么我就不用。我要去掉过去资料中的危险成分,只利用它的精华。在此前提下,我要利用统计学和归纳法来下富有进取性的赌注,但我不会用它们来对风险和资金损失进行管理。根据从一些观察中得来的想法(其中包括过去历史)进行交易,然而又采取措施以确保如果他们弄错了的话,损失会限制在最小的范围内(而且这种概率不从过去数据中得出)。在采用一种交易策略之前就知道哪些事件会证明他们的想法是错误的,而且为此留下余地。一旦那种情况出现,他们就会中止交易。这叫做止损点(stop loss),这是一个预先确定下来的退出点,是一种防范黑天鹅的措施。

要重新建立一个较少信息、较多决定性的古代社会,好比说生活在19世纪,但同时还要能享受到技术进步的一些好处,一切医学领域里的突破以及我们这个时代在社会公平方面取得的所有成就。这样一来我就拥有一切事物中最好的东西了。这就叫进化。

人们总把科学与科学家混为一谈。科学是伟大的,但科学家个体却是危险的。他们是人,人类所具有的认识偏差他们都具有,而且可能更甚于普通人。因为多数科学家都比较顽固,否则他们哪来的那种耐力和精力去完成交给他们的那些艰巨任务。 科学家有时不得不像个廉价的辩护律师一样行为,而不像个纯正的追求真理的人。

命运女神唯一不能控制的东西,是你的行为。

 

最后我来说一下:其实我们经常低估随机现象,在生活中我们对于随机性的无视与误解随处可见。重视随机性,使用随机性对生命以及的钱财进行了解,这样才可能避免风险。

2011年6月8日星期三

使用EA(Enterprise Architecture)自动生成UML图

使用EA(Enterprise Architecture)已经一段时间了,这里谈谈一个小技巧 -- 自动生成UML图。

  • a. 新建一个Project,add一个class mode,(如果建的是空Project,请在Project Browser的Model中add a package)
  • b. 在Project文件夹上点击鼠标右键 选中code engineering 然后选Import Source Directory,然后可以自己做一些设定,例如Source Type的设定等等
  • c. 生成完毕后,可以在UML 类图就会出现在project browser里面,点击这些类图就会发现挤成一团,我们可以使用Layout Diagram图标,进行自动排布,如下图所示。这个图标在Diagram Toolbar里面,如果没有找到Diagram Toolbar,可以点击View-->Toolbar-->Diagram

EA Layout Diagram

大功告成,很简单吧,如果不满意,觉得我们的class diagram显示太多信息,可以在图中点击这个class,然后点鼠标右键,选Feature Visibility,然后可以进行设定,可以对Attribute和Operation的可见性进行调整,如下图所示。

EA Feature Visibility

如果想保存我们生成的UML diagram成为图形格式,可以在Menu中选择Diagram,然后选择Save Image..,更简单的方法就是按快捷键啦,也就是ctrl+T。
 

Sparxsystems提供的UML 2.3教程也相当不错这里推荐一下:
http://www.sparxsystems.cn/resources/uml2_tutorial/index.html


版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者hanyionet信息。

2011年6月7日星期二

关于 Side-by-Side 问题的解决

上个月回国20天,回来上班也比较忙,没有更新博客。
今天写一些关于Side-by-Side error或Side-by-Side Configuration Issues,其实我很久以前就想记录一下解决方法。

什么情况下会遇到Side-by-Side Configuration Issues呢?
如果在Win7下使用VS2008编译一个程序,然后换一台WinXP机器下运行就有可能会出现Side-By-Side errors
如下警告:
The application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

如果不同机器的Win7也许会有如下警告:
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail.


附注一些关于WinSxS的介绍:
百度百科:http://baike.baidu.com/view/599776.htm
维基百科:http://en.wikipedia.org/wiki/Side-by-side_assembly
WinSxS文件夹体积虽然很大,但是并不神秘。简单来说系统使用“WinSxS”(Windows Side-by-Side)文件夹来存储各个版本的Windows 组件,减少因为动态链接库(Dynamic Link Libraries,DLL)引起的配置问题(DLL hell)。


可执行文件的或DLL的manifest。可以使用UltraEdit打开来看看。Manifest information一般在文件的最后,应该可以发现类似XML格式的描述,这就是Mainfest information。
但是也可以不使用UltraEdit来打开文件找Mainfest information,可以使用Kenny Kerr 编的工具很方便地查看manifest information。请见:
http://weblogs.asp.net/kennykerr/archive/2007/07/10/manifest-view-1-0.aspx


使用这个工具随便开一个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。

manifest view example

接下来我们要做的就是在%WINDIR%WinSxS里找找是否有类似x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.762_none_....这样的文件,这个文件名也就是由manifest information所组成的。
如果没有,我们就需要installer并包含这个文件,然后再安装这个installer,Side-by-Side的问题就可以解决。
 

  
延伸一下:
也许我们会想要绕开(bypass)WinSxS对于CRT/MFC/ATL DLLs的处理,可以看看这篇文章

从VC8开始,我们就有两个方式分配CRT/MFC/ATL的DLL。

1. 将DLLs和我们的application放在相同目录中并且放入一个有效的manifest对于这些DLLs
2. 安装redist.exe,并且DLL将安装到WinSxS目录
 
如果我们想要和全局的DLLs无关,我们也许会认为将DLLs放入applications目录就可以了,但是这是一个误解
其实如果DLL已经被安装在WinSxS目录,那么local的DLLs将会被忽略。
绕开WinSxS其实很简单,只要从我们编译生成的.exe和.dll中manifests中移除“publicKeyToken”就可以了。
 
接上图例子,我们只需要删除publicKeyToken="1fc8b3b9a1e18e3b"就可以了。 
 
 
 
参考以及延伸阅读:
Resolving Side-by-Side Configuration Issues:http://buffered.io/2008/05/17/resolving-side-by-side-configuration-issues/
Microsoft Visual C++ 2008 Redistributable Package (x86):http://www.microsoft.com/downloads/en/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en
The Secret Of Windows Vista / Windows 7 Winsxs Folder.:http://www.winvistaclub.com/f16.html
How to bypass the WinSxS for CRT/MFC/ATL DLLs:http://blog.kalmbachnet.de/?postid=80