2006年8月26日

Papers Submission Deadlines

In the personal research work, paper submission deadlines are very important! To eachone, he has been interested in some special conferences, workshops or special issue of journals. Organizing and listing them is crucial. This is a basic skill of research, I believe so.

Here, I list my paper submission deadlines Bill_Lang concerning Papers Submission Deadlines!

The screenshot is as following:

Welcome!

2006年8月25日

SWCL2006 沈阳之行

8月14日到8月21日的七天里面,我在沈阳参加了SWCL2006(第三届学生计算语言学研讨会)。在这期间将LTP(语言技术平台)在会议Demo时段进行了展示,完成了《LTP:语言技术平台》和《中国人名性别自动识别》的两个报告,并且主持了Machine Learning的第二个Session。总体来说报告效果还是很不错的,也引起了很多老师和同学对语言技术平台的关注。另外一个大的收获是有幸认识了台湾中央研究院的黄居仁老师

在黄老师的特邀报告自然语言处理中的语言学与语言分析:多语言环境中的研究趋势中,我了解到一条非常重要的信息。那就是刚刚结束的COLIONG/ACL 2006上面Sally McConnell-Ginet有个特邀报告关于Language and Gender的。在黄老师的报告中也提到了Language and gender是一个新兴的NLP中的研究问题。会后和黄老师的交流过程中也得到了他对我的论文《中国人名性别自动识别》的一些指点。非常有幸的是我获得了和黄老师一起在世博园门口的合影。简短的交流之中我感受到了黄老师的gentel man的学者风度。



刚到沈阳的时候游玩了一下著名的北陵和千山。北陵中安息着皇太极和孝庄皇太后,整个园陵静谧肃穆,景色也相当不错。后来才知道了这里是世界文化遗产。千山据说是东北最有名气的旅游景点。整整一天的行程中有了很多在家乡爬峨眉山的感觉,千山虽小,但是应有尽有。三百多处的景点让我们大包眼福。会后的沈阳世博园之行也感受到了很多别致的景色。下面是一些相关的照片。

“烟的店”:第一眼看到就觉得非常特别,此后几天一直把它当成路标^_^


威严的皇太极,像是在指挥千军万马,这是何等的气势!


沈阳特色之一是中街,这个是中街附近一个街道上的雕塑


沈阳世博园内一景,昔日的夸父真是这样追日的么?赞叹艺术家的灵感。


哈哈,这个是后羿用过的弓箭,直指天顶!


像是“魔戒之双塔骑兵”中的双塔,只是规模差之甚远


世博园内玫瑰园中经典的黄玫瑰,真的很漂亮!

总体来说,此趟沈阳之行收获颇丰!

2006年8月12日

The Effective Executive

  在一个完美的世界里,我们每个人都该有自己的“军师”,就像《教父》里的那位律师,或是德尔斐神庙的神使,他能一天 24 小时跟随我们,在我们耳边说著妙策良言: “用纸,不要用塑料。用 Google,不要用 Infoseek。不行,你的老板不会喜欢你这种古板和僵硬表情的……”
 
  且慢,实际上,你现在就有了睿智的顾问供你驱使,它耐心地待在那里,等著你的召唤,你甚至可以把它揣在包里。1962 年古巴导弹危机期间,肯尼迪总统从巴巴拉 塔奇曼(Barbara Tuchman)的《八月炮火》(The Guns of August)一书中寻求智慧。这本书讲述了欧洲爆发第一次世界大战的经过。肯尼迪对他的兄弟说,“我不会像书中的人那么做,否则,人们这次就可以写一本名为《十月导弹》(The Missiles of October)的书了。”
  你不可能总是随身携带你想要的书。但是,你手边却可以有一份完美的阅读书目。正因为如此,《财富》调动一切资源,选出了 75 本书,这些书将激发你的思考,甚至是行动。

  这些书,并不是那种干巴巴的所谓经典商业读物。一方面,我们选出的有些书其实与商业无关。巴诺书店(Barnes & Noble)可能会把迈克尔•刘易斯(Michael Lewis)的《钱与球》(Moneyball)归入体育类书籍,但该书谈到投资(和招聘)的内容,要比任何咨询师的 文章都多。另外,它也不枯燥。虽然《我在通用汽车公司的日子》(My Years at General Motors)是一部经典,但却枯燥乏味。

  不过,有些经典作品我们还是喜欢的。《股票作手回忆录》(Reminiscences of a Stock Operator) 虽然写于 1923 年,但该书仍然能够与《门口的野蛮人》(Barbarians at the Gate)摆在一起。这两本书都不是教人具体怎么做的书─总的来说,我们没有选那些有意识教导人的书,而是选了那些寓教于乐的书。而且没有比一手的信息更有价值的了。既然你可以读沃伦•巴菲特(Warren Buffett)自己写的书,为什么还要去读别人写他的书呢?

  当然,要读完书单上所有的书,大概需要 75 年吧。不过,我们可以给你提个建议: 不要只是因为你没有时间看完一本书,就不去读它。打开封面,看看介绍,直接跳到第九章。或者,留著这个书目,把它放到抽屉里。因为书中自有黄金屋,它们正等待你去发掘呢!

今天随便浏览了一下这75本书的介绍《财富》的75本值得阅读的书。找到了一本现在最想看的书-《The Effective Executive》。


《有效的管理者》(The Effective Executive),彼得•德鲁克(Peter Drucker)著,1966 年出版(中译本由求是出版社出版)。在你管理别人之前,你必须学会管理自己。在这本薄薄的书里,德鲁克将告诉你如何去做。
哈哈,俺找到的是英文版的,还好每页字数不多,共有197页,就当练习英文阅读啦!

2006年8月9日

Python是垃圾?(转)


第一个常见看法是:

python和basic差不多应该是容易学,但是功能弱的语言


basic是好多人的年幼时的回忆了,gvbasic,gwbasic,qbaisc,各种版本把很多人带入了快乐的世界里面。但是很多人都会用了一段时间basic之后就把它废置了,因为觉得除了能够用来play,功能太少。即便是vb,也是功能不甚完善的,很多地方要依靠其他语言写的组件和直接调用api来完成功能。
而python由于粗看之下,也是那么的像玩具。而且那个交互式命令行给人带来的教学语言的感觉更加加强了人们的想法。
但是python其实功能不能说是弱,其实是非常强大。python内置了重要的数据结构和文件这些功能,而且包含了一个很大的标准库,基本上涵盖了从GUI到数据库到网络种种功能上的要求。而且还有很多爱好者,公司企业为python写第三方的库,这些库品种繁多,功能齐全。而且还能把其他语言的库加以包装给自己使用,直接用c这样的语言了来写扩展的库也是可以的。所以说,python像basic一样好学,但是功能却要强大很多。

第二个常见看法是:

python速度很慢,只能用在很少的应用场合

对于习惯了汇编和C++这样的语言的人,思维总是有一个惯性(包括我自己也经历了这么一个阶段)。就是看文件大小是数字节的,任何运行时的overhead都是绝对不可以的。那么一看见python这样的动态语言,而且动态得非常厉害的语言,怎么看怎么不顺眼也是情理之中了。
关键的问题首先是你是否需要省那么个100~200k的大小,现在的内存,硬盘,网络通信环境已经不大在乎这么一点的空间了,所以大小不是问题。关键的是运行时间吗?其实在很多场合下是不需要那么快的速度的,比如开一个窗口,运行如果延时100ms,你感觉得到吗?
python还能够把py文件进行一些处理变成pyc文件,加速源文件的解释执行。像java的虚拟机中的just in time或者hot spot这样的预先读取,预先编译的技术都能构同等的用于python。
python还有一个非常大的好处就是能够用C这样的快速的语言写扩展模块。在软件中一般都是20%的代码占据了80%的运行时间。这样你可以先用benchmark这样的工具看看软件是否慢得无法忍受了,然后再用profiler查出问题瓶颈在哪里,那么就可以把关键的代码用C解决掉。这样可以节省了开发时间(大部分代码用python写,比C快),而且运行速度也可以令人满意。
所以说,对于python的速度是不用多担心的。但是为了客观起见,python的却是慢的,在python中什么都是对象,这个比java这样的不那么纯的OO语言,就要差一些了。

第三个常见问题是:

由于python是动态的,程序更加容易出错了

有这个看法主要是认为,因为python是动态的,所以缺乏静态的类型检查,那么程序中的错误就很难发现了。设置可能说没有执行到的块的语法都没有得到完全彻底的检查。变量由于没有声明,所以容易产生误写的错误。事情真这么糟糕吗?

第一个缺乏类型检查是说一个函数有几个参数,但是由于参数的类型是动态确定的,所以没有办法在静态的时候就检查传入的参数和参数表是否匹配了。问题是你写的函数一定要自己测试了,而且一旦出了问题,你是非常容易找到出错的地方的。dynamic typing是那么灵活好用,多这么一点麻烦也是值得的。

第二个看法就是错误的。在python中所有语法都得到了检查的。即使是处在分支语句中。只是有可能你说的是这样的情况:
a = 1;
明明加了分号,怎么不说我错了呢?其实分号是可以用的,用来格开在一行中的不同语句。
还有可能是这样的:
if a == 0:
fsdfsdafsad
这个怪东西应该是一个语法错误吧。其实是未必。因为程序运行到这个的时候可能这个名字就绑定到了什么东西上了,未必就是错误。它是符合语句的语法的。

第三个则不是那么回事了。在basic中,你引用一个没有出现过的变量名。那么这个变量自动被分配,而且得到初始化。这个就会出问题了。而python中,你不能引用一个没有绑定到对象上的名字,而
name = 0
这样的语句就是一个声明了。没有什么问题。
name = 0
nama = 1
这个总是问题了吧。对于变量名的误拼写出现在赋值的情况的时候就会被通过,因为认为是产生一个新的名称绑定。那么这个也好找出来啊,必然是出现在赋值的情况下,比basic中的那种情况好多了

总体来说是,dynamic的东西缺少一些静态的检查的却是会使得错误隐蔽一些。但是由于动态带来的调试上的方便(比如能够一眼从出错信息中找到出错的行,以及调用流程)足以把副作用给抵消了。

希望通过我的一点解释,能够让你消去疑惑,喜欢上python。

2006年8月8日

C++程序员常用工具集

开发环境

  –Turbo c

  DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:)

  –Visual C++ 6.0/7.0

  稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能也是其一大特色。Microsoft的经典之作,功能强大自不必言说。附带的一些工具也很不错,比如:Spy++。但编译器较之同类,支持c++标准的程度不够好,尤其6.0及以前的版本。

  –BCB

  Borland的C++ Builder是可以与VC匹敌的另一个功能强大的IDE,速度和稳定性稍逊,但对c++标准支持的程度较好。

–Cygwin

  Windows平台下的C++编译器,基于gcc,又完全兼容Window特有的东西,比如对winsock的支持。从http://www.cygwin.com可以找到有关Cygwin的详细信息。

  –Dev-c++

  Windows平台下,一个类似VC、BCB的c++ IDE开发环境,属于共享软件。界面亲切优雅,size也不大,其4.9.x版有中文语言支持,无需汉化。编译器基于gcc,完全支持STL。但是对于规模较大的软件项目,恐怕难以胜任。可以从:http://www.bloodshed.net/dev/devcpp.html找到有关Dev-c++的有关信息。

  –Source Insight

  有着和Dev c++一样漂亮的界面,提供代码的编辑和察看功能,具有丰富的语法加亮功能,可以像VC一样自动弹出成员函数的提示,并具有快速方便的函数跳转功能(但是跳转速度似乎有点慢)。只是默认设置不适合时,需要仔细的调整和修改。无法查找经typedef之后的名字。

   辅助

  –Visual Assist

  VC IDE环境下的辅助编程工具,能识别各种关键字、函数、成员变量,自动给出tip,并自动更正大小写错误,标示拼写错误等。是VC开发的良好伴侣。

  –Understand for C++

  一款c/c++IDE编程的辅助工具,支持反向工程,代码导向和一些统计功能,从http://www.scitools.com可以找到有关Understand for C++的详细信息。

程序编辑器

  –EditPlus

  一款很不错的文本编辑软件,功能强大却又十分轻巧。支持不同语言的语法加亮,还有Project组织功能,具有丰富的自定义功能。通过设置User Tool,可以和其他语言编译器结合,形成一个简单的IDE。

  –Ultra Edit

  功能和EditPlus相当,通过脚本文件提供的配置功能可以定制编辑环境,但自6.0版以后一直没多大变化,就编程而言,自定义设置没有EditPlus方便。

  –EMACS

  公认的世界上功能最多,最复杂的文本编辑器,其实也可以当作程序员用的编辑器。

  –Visual Slick Edit

  一个功能强大的程序员用编辑器。最值得一提的是其定制功能,很好用,可以和EMACS相比。自带了一套PCODE解释器,用c的语法,还可以挂接动态库。配合mingw一起使用很方便。从http://www.slickedit.com可以找到有关SlickEdit的详细信息。

  –IQEdit

  全功能的程序员用编辑器,界面很漂亮,从http://pwksoftware.com可以找到有关IQEdit的详细信息。

   UML/建模

  –Rational Rose

  强大的建模工具,早已”家喻户晓”,功过自然不必多加评说了。从http://www.rationalsoftware.com.cn可以找到有关Rational Rose的详细信息。

  –Visual Modeler

MS Visual Studio 6.0所附的小工具。属于Rational和MicroSoft合作的战略产品,是Rose的简化版。
–Visio

  Microsoft的建模工具,感觉更人性化一些,但功能没有Rose多、强、专,支持正向的代码生成,以及对代码的反向工程。

  –Together

  另一款功能强大的建模工具,用java编写而成,口碑不错,不过速度稍稍慢了一些。从http://www.togethersoft.com可以找到有关Togather的详细信息,另外,以下网址提供了一个有关Together的教程:    http://www.cc.puv.fi/~tka/kurssi … /together/TCCGuide6

  –Visual UML

  支持多种语言类型,比如:VC、VB、DELPHI、CORBA IDL等,可以直接从UML设计图生成代码,简单易用,完全适合Personal use,界面也很清爽。从http://www.visualObject.com可以找到有关Visual UML的详细信息。

  –SmartDraw

  通用图表制作软件,可以用来制作组织机构图、流程图、统计图表等。随带有图库,基本满足制作各类图表的需要。从http://www.smartdraw.com可以找到有关SmartDraw的详细信息。

  –PlayCase

  国产面向对象的建模软件,兼容UML和IDEF,轻量级软件,只是界面看起来有点简朴,乃是高展先生用Delphi完成的。

   版本控制

  –ClearCase

  Rational的版本控制管理软件,功能强大,可以控制多种类型的文档,甚至包括Word、Excel、PowerPoint文档。但使用复杂,不易上手,且不是免费软件。

  –CVS

  为基于Web的分布式协同开发提供了版本控制管理手段,且是免费软件,可以通过脚本定制功能。但在权限控制方面功能相对较弱。
–VSS

  微软的版本控制管理工具,功能相对简单,适合于小型团队开发,将其整合到微软的其他开发工具中,使用起来十分方便。

  –SourceOffSite

  微软为开发人员提供的远程访问VSS数据库的工具,使数据库得以远程更新,以支持远程办公。其他的版本管理工具还包括:PVCS、VCS、RCS等。

   XML

  –expat

  用于读取和处理XML文档的c函数库,最初是James Clark的个人作品,简单轻巧,且速度快。但支持的编码方式有限,最遗憾的是不支持中文。从http://expat.sourceforge.net可以找到有关expat的详细信息。

  –xml4c

  IBM的XML Parser,用c++语言写就,功能超级强大。号称支持多达100种字符编码,能够支持中文,适合于大规模的xml应用。若只是很小范围的应用,则非最佳选择,毕竟,你需要”背负”约12M左右的dll的沉重负担。从http://www.alphaworks.ibm.com/tech/xml4c可以找到有关xml4c的详细信息。

  –Xerces c++

  Apache的XML项目,同样是c++实现,来源于IBM的xml4c,因此编程接口也是和xml4c一致的。但是目前只支持少数的字符编码,如ASCII,UTF-8,UTF-16等,不能处理包含中文字符的XML文档。从 http://xml.apache.org/xerces-c可以找到有关Xerces c++的详细信息。

   测试

  –CppUnit

  一个c++的单元测试框架,可以通过派生测试类的方式,定制具体的测试方案。xUnit家族的一员,从JUnit移植而来,JUnit是Java语言的单元测试框架。从http://cppuint.sourceforge.net可以找到有关CppUint的详细信息。

–Rational ROBOT

  Rational的自动化测试工具,通过编写脚本的方式提供自动化测试特性。其GUI方式的脚本录制功能,有助于对GUI软件进行功能测试;其VU方式的脚本录制功能,有助于测试某些软件的数据通讯功能。

  –Rational Purify

  同样是Rational的自动化测试工具,不需要被测程序的源代码,可以用来检查内存访问错误、Windows API调用错误等,以完成软件的可靠性测试,属于白盒测试。

  其他的Rational测试工具还包括:TestFactory、PureCoverage、TestManager等。

   日志

  –log4cpp

  一个用于日志记录的c++函数库,可以将内容以定制的方式记录到不同的目的地,比如:文件、控制台syslog等,同时还可以通过控制记录级别来屏蔽掉某些无关记录。从http://log4cpp.sourceforge.net可以找到有关log4cpp的详细信息。

   注释

  –Doc++

  注释文档生成工具,根据源程序中的文档注释,可以输出TeX和HTML格式的文档。除了支持c/c++语言外,还支持IDL和java。仅提供命令行使用方式。从http://docpp.sourceforge.net可以找到有关Doc++的详细信息。

  –Doxygen

  注释文档生成工具,较之Doc++功能更为齐全,可以生成包括HTML、PDF、RTF在内的多种格式的文档,并有GUI界面,除了支持c/c++语言外,还支持IDL、java、PHP、c#等。从http://www.stack.nl/~dimitri/doxygen可以找到有关Doxygen的详细信息。

2006年8月3日

欢迎参加8月5日哈工大机器学习小组第三次活动-粗糙集概况

主题:粗糙集概况
时间:2006年8月5日(周六),上午8:30~11:30
地点:哈工大动力楼620房间,主楼背后邵馆旁边

报告题目1: 处理混合数据的若干粗糙集模型
主讲人:胡清华
内容简介:Pawlak粗糙集模型基于经典的等价关系和划分进行构造,适合于处理符号型数据。然而现实应用的数据库中,往往保存的是数值型数据或符号型与数值型数据共存。如何处理该类数值型或混合型数据成为近年来粗糙及理论研究的一个热点。本次讲座将综述当前各种解决方案,分析各种方案存在的问题,然后展示近两年作者在此方面进行的一些探索。作者提出了模糊信息熵、邻域模型、模糊邻域和一类改进的模糊粗糙模型解决这一问题,本次讲座将展示各种方法的理论模型、算法设计和试验效果,并且提供程序代码共大家对比分析。

报告题目2:
论文学习:粗糙集理论研究最新进展及发展趋势
主讲人:郎君
内容简介:粗糙集理论是一种较新的软计算方法,是分析和处理不完备信息的一种有效工具。分析了粗糙集理论研究的最新进展,指出了粗糙集理论研究中存在的问题,并对粗糙集理论研究的发展趋势进行了展望。

报告题目3:论文学习:Rough sets, decision algorithms and Bayes' theorem
主讲人:叶玉玲
报告大纲:这篇论文是Pawlak在2000年撰写的文章。阐述了粗糙集,决策算法和贝叶斯理论之间的关系。

报告题目4:论文学习:基于粗糙集的客户细分研究
主讲人:姚平
内容简介:客户细分是根据客户不同的行为特征,将客户区分成不同的客户群体,供企业前台部门以及决策人员实施不同的市场营销手段。基于客户信息的客户细分,被称作为数据驱动的客户细分。本文应用粗糙集理论算法对客户数据表进行了属性约简与规则提取,证明了其有效性。

欢迎大家广泛参与,让交流成为习惯!

希望参加这次活动的同学请在如下wiki中登记一下(便于以后活动联系)。

http://ltp.ir-lab.org/mywiki/moin.cgi/%E7%B2%97%E7%B3%99%E9%9B%86

邀请大家加入哈工大机器学习小组讨论QQ群:27980716

欢迎大家多多光临咱们的机器学习论坛:
http://bbs.ir-lab.org/cgi-bin/forums.cgi?forum=20

2006年8月2日

再次犯下C++错误

接着昨天的最后一段如下代码,本以为好使了,但后后来又出现了内存泄漏和内存溢出的现象。具体征兆是这样的。刚开始处理小文本的时候只是有内存泄漏的问题,内容占用越来越多。分析发现是代码中申请的动态字符数组没有释放,每次使用都申请一次,久而久之就越来越多了。

string strTemp = "";
strTemp = Processed();
int len = strTemp.size();
char* str = new char[len];
strcpy(str, strTemp.c_str() );
return str;

内存溢出的问题是在今天早上发现了。在处理超长文本的时候,总是出现莫名奇妙的程序崩溃。经过向pineapple请教后,得到的指点是可以用如下一段代码来代替。另外pineapple还指点我说如果把上面的那段代码中第四行修改为static char* str = new char[len];会出现内存溢出的情况,因为静态字符数组的申请只是在第一次调用的时候进行,后面的调用如果遇到超出第一次len长度的字符串拷贝 strcpy就会出现内存溢出。呵呵,感觉真的好险呀!下面的这段代码中的第一句其实也是一个静态变量,但是这个变量会比较好的解决内存泄漏和内存溢出的问题。下面的这段代码在俺的程序中现在运行正常,但是还需要进行深度的测试。据pineapple说,这种实现方法仍然存在一些问题的。呵呵,明日继续请教啦!

static std::string strTemp;
strTemp = Processed();
return (char*)strTemp.c_str();

谢谢pineapple!

2006年8月1日

犯下C++低级错误

在完成新版的LTP的Socket访问模式的过程中,有一个结果不稳定的错误一直困扰着我。那就是socket返回的结果不稳定,对于短小文本结果多数时候正确,但是会偶尔出现返回结果开头字符变成乱码的情况;对于长文本几乎都不能正确返回结果。打印即将的返回值到文本文件中,每次查看又都是正确的。采用先存为文件,然后将文件内容读取到char *[]中的方法返回却又能够得到完全正确的结果。呜呜……,这个问题真的很大,一直萦绕在我的头顶,真是吃饭睡觉都在想着这个问题。

真正解决这个问题,是在我不断的缩小查错范围后发现到可能情形的。在偶像陈儒的指点下才恍然大悟,自己犯下了C++中的一种常见的错误:函数返回局部变量的地址。

原先在我的程序中,一个大函数末尾有如下一段代码(大函数返回值类型为 char*)):

string strTemp = "";
strTemp = Processed(); // 这里Processed()是举例说明,这里返回一个字符串
return (char*)strTemp.c_str();

经过多次的跟踪和调试,我找到了是最后那句return出现了问题。起初我还以为是(char*)strTemp.c_str()对于strTemp的长度有所限制。经过陈儒帮我验证,发现并没有这样的限制。等到我把上面这段代码发送给陈儒,他非常直觉的告诉我可能是返回了一个局部变量的内存地址。这个局部变量的在函数运行结束后会被释放,其内容可能会被其他程序刷新。听到这个,我才恍然大悟,结果的不稳定原因就在这里。对于短字符串,内容被刷新的可能性比较小,而长字符串(比如上M)被刷新的可能性较大,使得程序运行起来出现前面提到的文本越长结果越不稳定的情况。

真是呜呜……,这种错误在C++编程里面是很低级的错误。但是回想自己犯下这种错误的原因,我分析是以前重来没有考虑过领事申请的一个string会去return它的地址,以前的直接return内容从来没有错过的。呵呵,socket模式下要求返回char *[]使得我犯下了下这个错误。不过,还算好,算是经验积累了,以后就不会再犯这样的错误了。

针对上面的代码,我修改为如下代码:

string strTemp = "";
strTemp = Processed();
int len = strTemp.size();
char* str = new char[len];
strcpy(str, strTemp.c_str() );
return str;

这样修改之后程序终于结束了结果不稳定的情况。感谢陈儒!

呵呵,算来自己从2000年学习C语言,2003年进入实验室后开始学习C++,C/C++编程的经验已经有好几年了。但是仔细想想自己现在的C/C++水平真是不怎么样,当初自己学习C++ Primer的时候只是学习了一半,现在看来那后一半有非常大的必要性仔细学习。呵呵,俺会认真的补上这课的。这不,俺刚才又发现随着函数调用次数的增多,程序占用的内存也逐渐增多了。这是程序中有内存泄漏的表现,还需要明天认证诊断呀!