2007年12月12日

zz 一位大牛整理的Python资源

Python学习

link: http://www.elias.cn/Develop/Python

基本内容

Python基本安装:

Python文档:

常用插件:

  • http://www.pfdubois.com/numpy/ Python的数学运算库,有时候一些别的库也会调用里面的一些功能,比如数组什么的;
  • http://www.pythonware.com/products/pil/ Python下著名的图像处理库Pil;
  • http://simpy.sourceforge.net/ 利用Python进行仿真、模拟的解决方案;
  • Matplotlib 据说是一个用来绘制二维图形的Python模块,它克隆了许多Matlab中的函数, 用以帮助Python用户轻松获得高质量(达到出版水平)的二维图形;
  • http://www.amk.ca/python/code/crypto python的加解密扩展模块;
  • http://cjkpython.i18n.org/ 提供与python有关的CJK语言支持功能:转码、显示之类。
  • Psyco、Pyrex:两个用于提高Python代码运行效率的解决方案;
  • PyflakesPyCheckerPyLint:都是用来做Python代码语法检查的工具。
  • http://wxpython.sourceforge.net/ 基于wxWindows的易用且强大的图形界面开发包wxPython;
  • http://www.pygame.org/ 用Python帮助开发游戏的库,也可以用这个来播放视频或者音频什么的,大概依靠的是SDL;
  • http://starship.python.net/crew/theller/py2exe/ win下将Python程序编译为可执行程序的工具,是一个让程序脱离Python运行环境的办法,也可以生成Windows服务或者COM组件。其他能完成Python脚本到可执行文件这个工作的还有Gordon McMillan's Installer、Linux专用的freeze以及py2app、setuptools等。不过此类工具难免与一些模块有一些兼容性的问题,需要现用现测一下。
  • 嵌入式数据库:BerkeleyDB的Python版,当然还有其他的好多。
  • PEAK提供一些关于超轻量线程框架等基础性重要类库实现。

部分常用工具:

  • http://www.scons.org/ Java有Ant这个巨火的构建工具,Python的特性允许我们构建更新类型的构建工具,就是scons了。
  • Python Sidebar for Mozilla FireFox的一个插件,提供一个用来查看Python文档、函数库的侧边栏。
  • IPython 很好用的Python Shell。wxPython发行版还自带了PyCrust、PyShell、PyAlaCarte和PyAlaMode等几个工具,分别是图形界面Shell和代码编辑器等,分别具有不同特点可以根据自己的需要选用。
  • Easy Install 快速安装Python模块的易用性解决方案。

推荐资源:

代码示例:

其他东西:

有意思的东西:

  • Howie:用Python实现的MSN对话机器人。
  • Cankiri:用一个Python脚本实现的屏幕录像机。

参考资料


Python IDE

我的IDE选择经验

[zz] Performing a t-test with Excel

from: http://eeb.bio.utk.edu/weltzin/GenEcol03/Stats/ttest.htm

1. Arrange your data so that each sample is in its own column, as in the following example:

Sample 1  Sample 2

7.85         12.50

8.51         12.94

13.66       6.26

11.03       6.10

6.59         13.19

8.04         10.74

14.16       6.06

8.13         12.53

6.79         15.45

11.06       15.64

5.83         15.19

10.73       14.93

6.68         7.94

5.02         8.28

10.37       12.65

2. It is always useful to look at a summary graph of your data. In this case, we can plot the mean value of the response variable for each sample. To do this with Excel, first calculate the means (by clicking at the “formula” icon in the toolbar, and selecting “average”) and the standard deviation (select “standard deviation” in the “formula” menu) of each of your samples. Then you can plot the mean for each sample using a bar graph. To to this, click on the “Chart wizard” icon in the toolbar, choose the “column” graph type, and click next. Select the means of the two samples as the data you want to plot); click next. You will have the option of adding a title, axes labels, etc.; do so if you wish, and next, and click finish in the last window. This will produce a graph like Figure 1 below.

Once you have plotted the means, you can add error bars with the standard deviation of your samples. This will give you an idea of the variability of your data. To do this, right-click once on one of the columns. This will open a menu; select “Format data series,” and go to the “Y error bars” window. Click the red arrows in the custom error amount (lower part of window); this will shrink the window. Select the cells where the standard deviations of your samples are, and click the red arrow again. You will have to this twice, for the + and – error bars. Click “OK.” This will modify your graph, as shown in Figure 2.

By looking at this graph, it is evident that the mean for sample 1 is lower than the mean for sample 2. Is this difference statistically significant? Well, the answer to that depends not only on the difference between the means of the two samples, but also on the difference between their variability. This is exactly what a t-test takes into account. (See an example of how variability of the data can determine the statistical significance of a t-test.)

3. To perform a t-test, go to the “Tools” menu, and select the “Data analysis” option; this will open the Analysis ToolPak. (If there is no “Data analysis” option in your “Tools” menu, then you have to install it; click here for help installing the Analysis ToolPak.) Select the two-sample t-test or the paired t-test option, as appropriate.

4. In the t-test window, select the ranges of each of your two variables. Select the significance level (alpha = 0.05 is the conventional value). In the “Output options” section select “New Worksheet Ply;” this will create a new page with your results. Click “OK.”

5. In the results page a table will be created with the following information:

t-Test: Two-Sample Assuming Equal Variances

image

Rows (1), (2), and (3) give you the mean, variance and number of observations for each variable. Row (4) gives you the “pooled” variance (i.e., for both samples together), used to calculate the t statistic. Row (5) gives the hypothesized mean difference (usually zero). Row (6) gives the “degrees of freedom.” Row (7) presents the t statistic (the highest the absolute value, the less similar the means of the two samples are). Row (8) gives you the one-tailed probability that the t statistic calculated for your data is lower than or equal to the critical t-value [given in row (9)]. Rows (10) and (11) give the probability and critical t-value for two tails. (You should use a one-tailed test if your hypothesis is that the mean of sample 1 is either higher or lower than the mean of sample 2; you should use a two-tailed test if your hypothesis is that the means of the two samples differ, no matter which one is higher and which is lower.)

So, in this example, the mean of sample 2 is higher than the mean of sample 1. Suppose our hypothesis was that the means are different, no matter which one is higher; we would then use the two-tailed test. This difference is statistically significant, since the two-tailed probability is 0.001587, which is much lower than alpha (i.e., 0.05).

2007年12月4日

eclipse中编辑器的换行

最近的Java、Python代码都在Eclipse中完成,一直在默默的忍受着不能自动换行的困扰。看了好几种解决方案,终于找到有人写了一个插件来实现这种功能。

转载备份如下:

link: http://www.java125.cn/article.asp?id=1307

 

【  Software updates  】→ 【  Find and Install  】→【  search for new features to install  】,点击【  New Remote Site  】按钮),在“  Name  ”中填入“  wordwrap  ”,“  URL  ”中填入“http://ahtik.com/eclipse-update/”,然后点击【  Finish  】安装即可。安装完毕后在文本编辑器的右键菜单中就可以看到“Virtual Word Wrap”了。

 

哈哈,在编辑器中右键菜单中选中“Virtual Word Wrap”后就能自动换行了,而且会随着编辑器的边界自动调整换行的方式,总之就是非常非常的方便咯。

2007年11月28日

重回FreeMind

记得2004年Cr向我推荐了这一款软件,由于当时好像只有0.6版本,感觉不是很好,找到强大的MindManager后就不再使用了。由于现在不能用D版软件,准备完成一个想法的实验,不能使用MindManager,现在只能再考虑一下FreeMind了。仔细查看,现在这个软件的版本已经到了0.9beta13了,试用了一下,感觉功能以及美观上都不弱于MindManager。还发现有一个专门的视频教程介绍0.7版的如何使用,看完以后顿觉FreeMind真的已经很好了。毫无疑问,我已经选定它了。

感兴趣的朋友可以看看下面的几个链接:

FreeMind主站

FreeMind视频教学课程

2007年11月23日

寻找失败

成功不能被复制,但失败总在不停复制。看看别人是怎么倒下的,你可以更早地成功。

盛大首席架构师周爱民的专访里,看到如下10条建议:

  1. 不要急。
  2. 不要只做不想。
  3. 听别人的话,即使你不想听。
  4. 订一个五个期的目标,写一个一年期的计划,然后回顾它。
  5. 学好中文,学好写文章,学会打标点符号。
  6. 把工作当成事业做,天天都在做事业,才会成功。
  7. 理论看不懂,就去实践;实践遇到问题,就去看理论。
  8. 参加一个开源项目,如果没你感兴趣的,就自己发起一个。
  9. 保持自己对某一件事物的热心、执着,即使这件事与你是不是程序员毫无关系。
  10. 成功不能被复制,但失败总在不停复制。看看别人是怎么倒下的,你可以更早地成功。

最后一条,感觉有道理。事实上丁磊就经常对别人讲他的成功不可复制。一个人的精力和时间都是有限的,那么如何学习别人失败的经历呢?我想可以多关注一些讲述如何失败的东西。简单找了一下,居然发现还真有这样的东西。

Failure Magazine 

呵呵,这个网站非常有意思

2007年11月22日

UML很重要,初学

准备开始涉及一些程序架构设计方面的东西,感觉UML这个东西在程序开发中非常重要,以前尝试过一次C++程序开发过程中和UML图的不断交互,那样写出来的代码非常清晰,对整个代码的架构掌握的比较清楚。现在开始采用Java编程,也准备采用这种策略来实现一把,毕竟“Java是正儿八经”的编程语言啊 :)

先转载两篇讲述UML在程序开发过程中的重要性的短文,如下。

------------------------------------------------------------------------------------------------------------------------------------

Java开发为什么需要UML?

       知道UML造成了怎样的局面大混乱吗?知道什么样的功能是UML拥有但JAVA不具备的吗?知道我们为什么需要除JAVA外的另一种电脑语言吗?UML并不仅仅只是JAVA或者其它什么语言的替代品。UML并不仅仅只是JAVA或者其它什么语言的替代品。UML是面向对象的分析及设计的注释。 UML是独立于那些传统设计语言之外的一种语言。因为UML并不依附于某种语言,而且它被用作是联系沟通Java、 C++ 、Smalltalk等语言的基础工具。通过使用UML,可以在开始编码之前规划好整个系统,并且开发人员清楚自己所负责的模块在整个系统中所起的作用。

更为重要的是,UML可以帮你记录下从设计就开始出现的错误,要知道糟糕的设计会带来一系列的麻烦。设想一下,在源代码编制到一半的时候,你突然发现你所需要的信息已经枯竭了,但你却没有办法重新取得信息,因为你没有引用Object,甚至于你引用了object,然而信息确是非public 的。显然的,你将花费数天时间来找出代码的变化。

UML可以帮您摆脱如下一些困境:代码随着细节的增多而累积,因此,查找哪些是系统的基本要素,了解objects之间的关系如何以及它们之间怎么联系都会变得困难起来。当大量的代码产生出来的时候,做一些改变也变得困难。因此决定一个对象的功能被分配到协作中的设置是一项主要的工作。甚至有时只是改变一个方法的名称那样简单事情,也很可能导致一个很长的编辑----编译---错误循环。

在编码之前高水平的设计是进行正确的需求分析和精确的定义,UML的自动化工具固然重要,但UML在设计讨论中就显得更为有用。

Source: http://www.cndw.com/tech/program/2006042862137.asp

------------------------------------------------------------------------------------------------------------------------------------

程序员眼中的UML

UML自1997年诞生以来,受到无数厂商、组织、专家学者的追捧和拥护,短短几年时间,便有一统天下之势。提起建模语言,舍UML其谁?
UML相关标准

OMG组织作为影响力最大的面向对象技术的机构,早早便将UML收入囊中,力捧其为标准建模语言。OMG在CORBA取得成功之后,最大的着力点便是MDA架构,而MDA架构的四大标准UML、MOF、XMI和CWM中,围绕着UML的技术便有三种:UML本身自不必说,版本已经到了2.0;MOF作为“建模语言的语言”,似乎就是为UML量身定做的,虽说MOF有能力创建出与UML并驾齐驱的建模语言,但是似乎没有看到谁这么干,大家只是在努力的发展UML的“方言”,例如UML Profile for CORBA,UML Profile for EJB等等;XMI是“模型的标准存储交换格式”,为了解决不同的建模工具创建的模型不能互用的问题,OMG创建了XMI作为模型的存储交换标准。这样一来,UML工具更加可以大行其道,使用不同的建模工具创建的UML模型可以互相交流,只要它们都基于XMI。
UML相关工具

工具的多寡与优劣可以看出某个技术的受欢迎程度,在建模工具中,不说100%,大概也有90%支持了UML语言。最出名的UML工具Rational Rose,被IBM收购了;Eclipse下面的UML工具EclipseUML让开发它的小公司Omondo也出名了;国内也有一个UML工具,听说效果也不错,就是楚凡科技的Trufun Plato 2005。至于其他国际上有点名气的UML工具,更是不胜枚举,几乎有点软件实力的国家,都有自己的UML工具。

当然,UML不仅仅出现在专用的UML工具中,它也频繁出现在最新的各种开发环境中。例如编程开发环境JBuilder,具有将代码转换为UML类图的功能;Together就更进一步,直接实现了代码和类图的同步转换;Eclipse作为最优秀的开放式开发平台,拥有众多的UML相关插件,除了前面提到的EclipseUML,比较有名的还有EMF和UML2。

UML在MDA出现之后,在OMG的概念中,成为了MDA的一个子集(虽然UML的名气远远大于MDA)。因此众多的MDA工具中,几乎都少不了UML功能。我认为很多MDA工具就是从UML工具直接改过来的。
UML使用现状

照理说来,如火如荼的标准和工具应该催生出如火如荼的应用才对,可是UML的使用状况实在不尽如人意。无论是身边的还是网络上的朋友,在项目中使用UML的都是凤毛麟角,即便使用了UML,也是在很小的范围内,完全没有发挥出1%的功效。现在总结一下目前我所知道的UML使用现状:

  • 读代码时,用UML工具进行逆向工程,可以清晰的观察代码结构,方便理解代码。
  • 写代码时,由于开发平台可以自动生成UML类图,因此有时观察UML类图得到比较清晰的代码结构。例如Together或者JBuilder等工具。当然,如果没有自动生成的UML图,大部分人也不会寻找其他工具去生成UML类图的。
  • 撰写科技论文时,使用UML来表达系统架构或者系统流程等。
  • 部分对UML非常熟悉的程序员,在开始写代码时,先画UML类图,然后利用工具生成代码,最后对代码进行扩展。

从上面的使用现状可以看出,很多人把UML当成一种可有可无的技术。即使使用了UML,也只是围绕着UML中的类图,其他的UML图都抛到一边去了。造成这种状况的原因,一方面固然是因为国内的正规大型软件项目比较少,软件工程技术起步很晚;另一方面是由于国内不管是架构师、系统分析员、软件工程师、程序员、测试人员等等实质上都是程序员而已,很多人是赶着鸭子上架成了架构师或者系统分析员的。这种状况下,软件工程的概念难以深入人心,UML更加成了一个国内项目的鸡肋。

看看国外的架构师、UML专家们,往往都是满脸大胡子,在计算机领域中浸淫了3,40年;而中国最古老的程序员,也只有十几年经验,除去在黑暗中摸索的几年,有十年以上开发经验的程序员少之又少。不经历几个大型项目,要使用软件工程技术是不可能的,也是不能起到什么效果的。因此,有人堂而皇之的撰文“UML的三大硬伤”,将UML驳斥得一无是处。高喊口号打倒某东西是很容易的,关键是打倒了UML何以取而代之?
程序员眼中的UML

既然国内90%以上的软件开发人员都是程序员,那么程序员眼中的UML到底应该是什么样子的呢?我很期望有一本好书能够让程序员们快速的掌握自己所需的UML知识,遗憾的是目前还没有看到这样的一本书。无论是“三友”的UML经典教材还是国内的一些“xx天精通UML”都不符合这样的要求。没有一本是“有中国特色的UML教材――一本写给程序员的UML入门书”。

作为一个程序员,我很了解其他同僚的心理,如果拿到一本书,翻了一个小时还没有找到可以run的HelloWorld,90%的人会大叫一声“去nmd”,然后把书扔进废纸堆。不能怪我们急功近利,在这个技术术语满天飞,连底层平台都动荡不安的年代,谁还有时间和兴趣看一些与自己无关的东西呢?

我很能想象一个程序员,好不容易空出时间来看看最近很热的UML技术,当他拿到一本UML入门以后,开始寻找对自己有用的东西。在开始的一个小时,满篇都是需求分析,use case,甚至书的作者还在饶有兴趣的介绍use case有六种译法:用例、用况、用案……对不起,老子一百年都没做过需求分析了,也不想知道这个狗屁的use case到底叫什么。于是开始后悔在china-pub上又白花了这么多银子。

还有些书上信誓旦旦的说“学好UML,走遍天下都不怕”,如果你做需求分析,你可以用UML和客户交流;如果你做系统分析员,你可以用UML设计系统;如果你做程序员,你可以用UML生成程序;如果你做测试员,你可以基于UML设计测试用例。而实际情况是什么呢?国内的客户有几个懂UML?懂UML的人差不多自己都可以把软件写出来了,还需要请你做需求分析么?别说客户了,上次听同学说和北京某大科研所的工程师们交流,无意中说起了UML,在场的竟然只有一个稍微了解,而且坚持认为那是一种画图工具(那位仁兄其实也没错,Visio不就是一个画图工具么)。

虽然状况如此不堪,但是UML确实是一个很优秀的“交流语言”、“代码生成工具”和“系统设计工具”。让我们擦干身上的献血,掩埋战友的尸体,睁大迷蒙的双眼来看清UML对程序员的作用。UML有九种图,作用各自不同,基本上涵盖了软件工程的各个方面,很多人就是不堪于忍受知识不足的困惑与“侮辱”(很多程序员认为一种技术自己看不懂就是对自己的侮辱),从而放弃了整片UML森林。他们怕的不是在UML这棵树上吊死,而是怕在UML森林里面迷路。但是我想说,知识学习的过程就是去芜存精,找出对自己有用的东西,然后掌握之。对于程序员来说,UML的价值就体现在三个方面:

一、UML是最好的交流语言,无论是与其他程序员交流,还是与领域专家、测试员或者用户交流。原因只有一点,UML是标准的,就像英语一样,无论多么该死,大家还是忙着把自己的论文改成英文的。当然,在小的领域可能有更好的交流方言,但是在大而长远的交流中,使用标准的交流语言是稳妥的。

二、UML是很好的代码生成工具,其实代码生成功能并不是由UML语言和规范提供的,而是由UML工具提供的,而且不同的UML工具提供的代码生成功能还不尽相同。例如Rose提供简单的代码框架生成,而Eclipse插件EMF可以生成功能丰富,提供了各种设计模式的代码包。无论如何,如果程序员可以从UML入手来写程序,比直接敲代码要高级那么一点点。从文档、版本控制、维护、测试等各方面来说,画UML类图比直接写代码都要高那么一点点。

三、UML是很好的系统设计工具。对于程序员来说,很少用到“设计”这个词,大部分时候我们都是在“编写”或者“实现”。但是勿庸置疑,程序员的许多工作中还是需要 “设计”的。包和组件之间的依赖关系、复杂操作的流程、对象之间的关联和状态、程序的部署等等,都经常是程序员的工作。那么上面的四种情况可以用UML的组件图、序列图、对象图和部署图来设计。虽然,不同的程序员有不同的设计方法或者设计图例,不过,UML是标准的。不要忽视标准的力量,标准的东西意味着在全世界范围内都有可能会被看懂,不标准的东西可能出了你的办公室就没人能够清晰、准确的理解了。
后记

Blog好久没有更新,因为最近一直忙于一些俗物,于是想写点清高的东西。但是写完之后再看,好像也不怎么清高,反而更俗了。

前段时间写论文时,需要用到UML2.0的类图元模型,在UML2.0的规范中寻觅了好久,发现类图元模型已经被拆分到三个包里面了,因为UML2.0的规范实在是太大太繁琐了。于是有感于UML之博大精深,说好听是博大精深,难听点就是乱七八糟。不过OMG历来如此,当初的CORBA如果更简约一点,也许J2EE根本就没有立足之地。

感慨之后就是想把UML中对自己有用的部分整理出来,在整理之前免不了到处翻资料,这篇文档就是翻资料的一些感触了。希望能够将UML的有用部分都整理出来,形成一个系列的文档。

Source: http://dxxhh.cnblogs.com/archive/2005/11/18/279882.html

------------------------------------------------------------------------------------------------------------------------------------

2007年11月21日

点滴

Java里面比较两个字符串是否相等不能直接用“=”。那样只能比较两个对象是否是同一个,也就是比较对象的地址而已。这一点在学Java的时候看到过,但是一时疏忽居然忘了,害得我今天花了一个小时时间来修改用于字符串比较的“=”。Java里类的成员变量不要随便将一个静态变量在某个非静态函数中自增,否则会出现严重的问题,当然如果确实需要这种功能的话,需要格外谨慎的。这段时间用Java编程,感觉Java还是很方便的,按照XF的话来说,Java是“正儿八经的编程语言”:)

Google真牛啊!今天试用了Google Calendar的手机短信提醒功能。真的很棒啊,最为关键的一点是用户不需要支付任何费用。这下子好了,也不用买个高档手机来导入Outlook的提醒了。另外得知Google正准备推出Google手机,据说能和Gmail以及搜索功能绑定,呵呵,值得期待啊。

这些日子了解到一些新加坡的历史,值得借鉴啊~!