2009年2月21日星期六

霹雳布袋戏

1984年-1988年

01.霹雳城.8集.1984年.开始发行录像带.VHS.
02.霹雳神兵.8集.1985年.
03.霹雳金榜.8集.19886年.
04.霹雳震九宵.8集.1987年.
05.霹雳战将.8集.1988 年.

1988年-1990年

06.霹雳金光.16集.1988-06.
07.霹雳眼.20集.1989-06.
08.霹雳至尊.15集.1989-11.
09.霹雳孔雀令.10集.1989-11.
10.霹雳剑魂.20集.1990-01.
11.霹雳异数.40集.1990-02.
12.霹雳劫.30集.1990-03.
13.霹雳天阙.30集.1990-06.

1991年-1995年

14.霹雳紫脉线.20集.1992-05.
15.霹雳烽云.20集.1993-04.
16.霹雳天命.14集.1993-11.
17.霹雳狂刀.60集.1993-12.
18.霹雳王朝.30集.1995-03.
19.霹雳幽灵箭【第一部】.25集.1995-09.

1996年-2000年

20.霹雳外传之叶小钗传奇.6集.1996-02.
21.霹雳幽灵箭【第二部】.20集.1996-03.
22.霹雳英雄榜.50集.1996-07.
23.霹雳烽火录.30集.1997-03.
24.霹雳风暴.40集.1997-07.
25.霹雳狂刀之创世狂人.50集.1998-04.
26.霹雳雷霆.30集.1999-02.开始发行录像带.VHS.VCD.
27.霹雳英雄榜之江湖血路.40集.1999-07.
28.霹雳英雄榜之风起云涌【第一部】.20集.2000-03.
29.霹雳英雄榜之风起云涌【第二部】.30集.2000-07.

2001年-2005年

30.霹雳英雄榜之争王记.30集.2001-01.
31.霹雳图腾.20集.2001-05.开始发行VCD.DVD.D5.1集1片.
32.霹雳异数之龙图霸业.40集.2001-08.
33.霹雳封灵岛.20集.2002-04.
34.霹雳兵燹.48集.2002-07.
35.霹雳刀锋.30集.2003-01.
36.霹雳异数之万里征途.32集.2003-06.
37.霹雳九皇座.50集.2003-11.
38.霹雳劫之阇城血印.26集.2004-04.
39.霹雳劫之末世录.24集.2004-07.
40.霹雳皇朝之龙城圣影.40集.2004-10.
41.霹雳剑踪.30集.2005-02.
42.霹雳兵燹之刀戟戡魔录.30集.2005-06.
43.霹雳兵燹之刀戟戡魔录【第二部】.40集.2005-09.开始仅发行DVD.D9.2集1片.

2006年-2010年

44.霹雳奇象.40集.2006-02.
45.霹雳谜城.40集.2006-06.
46.霹雳皇龙纪.50集.2006-11.
47.霹雳皇朝之铡龑史.30集.2007-05.
48.霹雳开疆纪.40集.2007-08.
49.霹雳神州.30集.2008-01.
50.霹雳神州II之苍玄泣.46集.2008-04.
51.霹雳神州III之天罪.2008-09.
52 . 霹雳天启 . 2009-03

2009年2月16日星期一

2008的过去-纪念在ARDC实习的半年

现在是2009年的2月16日,今天和老大说明了我的去意,老大也没说什么,即使说什么我也听不进去了。我意已决,兄勿多言。

半年前,也就是2008年7月15日一早,我背着个包和张兄一起来到ARDC(SHARP ADVANCED R&D CENTER),看到了分配给我使用的座位与电脑,见到了我这半年实习的领导,见到了和我一起共事半年的共事,也听到了目前项目组的当前工作项目,终于开始了人生头一次离开校园的实习。也许我还年轻,看不了它的成长,也许我太浮躁,总想去外面的花花世界看看,也许我真的性格使然,实习期间也没认识几个朋友,几乎有一半时间在想自己的事情,也许是初涉社会的茫然与无知,总认为老大给的任务还是比较简单的,在早早做完后,就开始看各种招聘实习相关的信息。也许我真的是想赌一把,最终选择离开了ARDC,选择去另外一家可能实习待遇还不如ARDC、公司规模远没有作为世界500强之一的SHARP大,甚至面对的可能会有很多加班、更加幸苦的单位!但是我毕竟是个年轻人,“身于忧患,死于安乐”,“机会永远大于安定”,最终选择了离开,从一个火坑往另外一个火坑义无反顾的跳了进去!

首先说一下ARDC,实际是由日本本部直接投资的,但是由于成立初期,僧少粥也少,暂时挂在SES下属,财务也是由SES把持。经济大权不在自己手上,其实对ARDC的发展还是有所限制的。ARDC主要是为SHARP其产品、其子公司各种需求而制作软件的,基本是属于自产自销的地步,即亏损了有母公司买单,盈利了也不一定能得到好处。我个人觉得如果ARDC要做到长远发展,软件开发必须要“走出去”。

我在ARDC一共参加了2个项目。头一个项目是SVG Authoring Tool,说白了,就是基于J2SE,利用NetBean IDE,编写的SVG创作工具。
1. SVG文件为了增强与用户的交互性,曾加了animation和set属性,用来标记动画效果。animation和set中用begin,end来标记动画触发的一些时间标记,而begin和end应该可以相互关联,如果有animation(set)被删除的话,begin与set理论上也应做相应的修改;如果图形元素删除,所属的animation、set也一并删除。而在实际的程序中,begin与end已经作为固定的字符串属性赋给了相应的animation(set),与它所对应的animation(set)间并没有直接的联系,这就给操作上带来了问题,造成系统在运行后产生系统垃圾的可能性大为提高。我的修改方案是在animation(set)中新建一个静态的Hashmap对象,用来存储animation(set)之间的相互映射关系,每次SVG载入时,通过载入,初始化animation(set)之间的关系,当对animation(set)的begin、set或者其本身进行操作时,相应的修改这个静态的Hashmap,退出时相应的从Hashmap中读取映射关系,加以保存。但我这种修改方案随之带来一个问题,增加了一个变量,同时就引入了数个方法,这样虽然解决了问题,但由于引入了一个新的关系,导致程序产生了新的未知BUG,甚至是ERROR,FAULT。在发现了这些问题后,解决方法是尽量采用局部变量,在不增加系统方法的前提下,增加局部变量以减少系统的开销。
2. SvgDocument类过于庞大,SVG Authoring Tool设计SVG文件可以通过软件输出成*.svg格式的文件,这就要求将存储在内存中的对象按照svg文件格式逐条输出,svg文件有手机、TV上两种版本,而且存在一定的差异性。原先的程序是每个版本一个方法,其存在不少代码功能上的重复不说,而且每个方法都过于庞大,不宜读懂,如果修改起来很是麻烦,重构是不可避免的,将相同的过程抽象出getEntityXml(),getDefsXML(),getDescriptionXML()等各种不同的方法。
3. SVG Authoring Tool由于功能日趋完善,代码愈来愈多,所积累下来的BUG数目也与日俱增,其中大多涉及到SWING上面的一些设置与属性的相互关系。日方也提出了一些修改意见,animation(set)创建时,会有ID的属性,原先可以自动按顺序排列的功能取消,ID可以不连续,大大简化了对animation(set)的操作。

第二个项目是基于J2ME的手机CXMDF阅读器。
1. MIDP的文字断行功能。CXMDF的菜单都是基于MIDP底层面板进行编写的,对于排版这种高级的属性必须自行实现。文字断行也就是显示英文的时候,在一行的末尾不能将单词硬生生的拆开,使得一个单词横跨两行,影响阅读,主要是对单词是否结束做逻辑上的判断。判断一个单词的显示宽度,如果没有超过一行则从下一行开始显示;如果超过一行的宽度,则根据剩下的宽度找出单词应该断开的位置,插入“--“,前半段在第一后结尾显示,后半段则另起一行,从下一行开始显示。
2. TextDlg的完成。根据日方给出的界面式样书,从主要的界面样式中分离出比较有代表性和抽象性的TextDlg,主要在其上完成对文本信息的显示。TextDlg继承自AbstractDlg,后者是所有Dlg的抽象类。AbstractDlg中已经实现了drawBackgroud,drawButton等方法,TextDlg主要实现drawDialog显示界面上的文本内容,dialogLoop通过循环实现对按键事件的相应。前者对文本以及文本后的按钮进行显示布局,若文本只有极少的一行则只需将该文本全屏居中显示即可,若行数多了,则不仅由上到下的居中处理,而且通过dialogLoop实现滚屏效果。附在文本后的按钮则按照不同的要求显示成按钮与链接两种模式。
3. 实现漫画场景中显示菜单的功能,包括页面跳转、和功能菜单。因为之前项目中已经完成了几个Dlg的开发工作,这里的工作实际便是通过调用这几个Dlg来完成相应的功能,其中包括稍微修改了KomaSelectDlg的绘制布局,在BookSelectCanvas中增加了Property字段,用来判断显示菜单的事件,增加字段用来判断check是否有下一本书等。
4. 系统中一些BUG的处理工作。当阅读器显示漫画场景的时候,若该漫画场景存在特殊效果,例如渐变、震动等,在漫画显示这些特殊效果时,无法做到翻页等命令,即特效无法被cancle。原因是处理画面特效效果的代码,与开启按键监听的代码是在一个线程中顺序执行的,即setlayout,drawlayout结束之后才开始监听按键。我的做法是将drawlayout中处理画面特效的代码独立作为一个线程来处理,但是在系统中多增加了一个线程,可能带来了与其他线程的冲突。事实也证明了我这种方法存在问题,应为Java对于这种线程的先后执行并没有明确的先后顺序,导致虽然实现了键盘监听,但特效的处理会向后延迟。

CXMDF项目主要有日方(本部)提供设计方案,我们ARDC主要负责核心包的开发,测试交由香港的团队外包给第三方的公司来完成;而在我们的核心包开发完毕之后,台湾、香港的团队将完成基于核心包的外围应用程序的开发,并适用于当地的运营商和手机平台。

综述一下,在ARDC的半年,算是对我启蒙的半年,在这半年我学到了很多东西,不过还很难说我已经从学生的角色中走出来了,路漫漫其修远兮,吾将上下而求索!

2009年2月12日星期四

软件工程师的一些思考

作为技术能力,软件工程师不可不知的10个概念:

1. 接口(Interfaces)
软件工程中最重要的概念是界面。任何软件都是一个真实系统的模型。如何使用简单的用户界面进行模型化至关重要。很多软件系统走这样的极端,缺乏抽象的冗长代码,或者过分设计而导致无谓的复杂。 在众多软件工程书籍中,Robert Martin 写的《敏捷编程》值得一读。 关于模型化,以下方法对你会有帮助。首先,去掉那些只有在将来才可能用得着的方法,代码越精练越好。第二,不要总认为以前的东西是对的,要善于改变。第三,要有耐心并享受过程。

2. 惯例与模板 (Conventions and Templates)
命名惯例和基础模板在编程模式中常被忽视,然而它可能是最强大的方法。命名惯例使软件自动化成为可能,如,Java Beans 框架在 getter 和 setter 方法中,使用简单的命名惯例。del.icio.us 网站的 URL 命名也使用统一的格式,如 http://del.icio.us/tag/software 会将用户带到所有标签为 software 的页。 很多社会网络均使用简单命名,如,你的名字是 johnsmith ,那你的头像可能命名为 johnsmith.jpg,而你的 rss 聚合文件的命名很可能是 johnsmith.xml 。 命名惯例还用于单元测试,如,JUnit 单元测试工具会辨认所有以 test 开头的类。 我们这里说的模板(templates )指的并不是 C++ 或 Java 语言中的 constructs,我们说的是一些包含变量的模板文件,用户可以替换变量并输出最终结果。 Cold Fusion 是最先使用模板的程序之一,后来,Java 使用 JSP 实现模板功能。Apache 近来为 Java 开发了非常好用的通用模板, Velocity。PHP 本身就是基于模板的,因为它支持 eval 函数。

3. 分层 (Layering)
用分层来讨论软件架构是最容易的。John Lakos 曾出版过一本关于大型 C++ 系统的书。Lakos 认为软件包含了层,书中介绍了层的概念,方法是,对每个软件组件,数一下它所依赖的组件数目就可以知道它的复杂程度。 Lakos 认为,一个好的软件拥有金字塔结构,就是说,软件组件拥有层层积累的复杂度,但每个组件本身必须简单,一个优秀的软件包含很多小的,可重复使用的模块,每个模块有自己的职责。一个好的系统中,组件之间的依赖性不可交叉,整个系统是各种各样的组件堆积起来,形成一个金字塔。 Lakos 在软件工程的很多方面都是先驱,最著名的是 Refactoring (代码重构)。代码重构指的是,在编程过程中需要不断地对代码进行改造以保证其结构的健壮与灵活。

4. 算法的复杂性 (Algorithmic Complexity)
关于算法的复杂性,软件工程师需要理解这样几件事。第一,大O标记法(big O notation);第二,你永远都不应该使用嵌套式循环(循环里面套循环),你应该使用 Hash 表,数组或单一循环;第三,如今优秀类库比比皆是,我们不必过分纠缠于这些库的效能的差别,我们以后还有机会进行细调;最后,不要忽视算法的优雅及性能,编写紧凑的,可读的代码可以让你的算法更简单,更干净。

5. 散列法(Hashing)
Hashing 的目的是加速访问速度。如果数据是序列存储的,从中查询一个项的时间取决于数据列的大小。而散列法对每一个项计算一个数字作为索引,在一个好的 Hashing 算法下,数据查找的速度是一样的。 除了存储数据,散列法对分布式系统也很重要。统一散列法(uniform hash )用来在云数据库环境下,在不同计算机之间分存数据。Google 的索引服务就是这种方法的体现,每一个 URL 都被散列分布到特定计算机。 散列函数非常复杂,但现代类库中都有现成的类,重要的是,如何对散列法进行细调以获得最好的性能。

6. 缓存(Caching)
缓存对现代 Web 程序不可或缺,缓存是从数据库取回,并存放在内存中的数据。因为数据库直接存取的代价非常高,将数据从数据库取回并放在缓存中访问就变得十分必要。比如,你有一个网站,要显示上周的畅销书,你可以从数据将畅销书榜一次性取回放在缓存中,而不必在每次访问时都去数据库读数据。 缓存需要代价,只有最常用的内容才可以放入缓存。很多现代程序,包括 Facebook,依靠一种叫做 Memcached 的分布式缓存系统,该系统是 Brad Firzpatrick 在工作于 LiveJournal 项目时开发的,Memcached 使用网络中空闲的内存资源建立缓存机制,Memcached 类库在很多流行编程语言,包括 Java 和 PHP 中都有。

7. 并发 (Concurrency)
并发是软件工程师最容易犯错的地方,这可以理解,因为我们一直遵从线形思维,然而并发在现代系统中非常重要。 并发是程序中的并行处理,多数现代编程语言包含内置的并发能力,在 Java,指的是线程。关于并发,最经典的例子是“生产/消费”模式,生产方生产数据和任务,并放入工作线程消费或执行。并发的复杂性在于,线程需要经常访问共同数据,每个线程都有自己的执行顺序,但需要访问共同数据。Doug Lea 曾写过一个最复杂的并发类,现在是 core Java 的一部分。

8. 云计算 (Cloud Computing)
RWW 最近的关于云计算的文章 Reaching For The Sky Through Compute Clouds 讲到了云计算如何改变大规模 Web 应用的发布。大规模的并行,低成本,与快速投入市场。 并行算法发明以来,首先迎来的是网格计算,网格计算是借助空闲的桌面计算机资源进行并行计算。最著名的例子是 Berkley 大学的 SETI@home 计划,该计划使用空闲的 CPU 资源分析太空数据。金融机构也大规模实施网格计算进行风险分析。空闲的资源,加上 J2EE 平台的崛起,迎来了云计算的概念:应用服务虚拟化。就是应用按需运行,并可以随着时间和用户规模而实时改变。 云计算最生动的例子是 Amazon 的 Web 服务,一组可以通过 API 进行调用的应用,如云服务(EC2),一个用来存储大型媒体文件的数据库(S3),索引服务(SimpleDB),序列服务(SQS)

9. 安全 (Security)
随着黑客的崛起与数据敏感性的上升,安全变得非常重要。安全是个广义的概念,涉及验证,授权与信息传输。 验证是对用户的身份进行检查,如要求用户输入密码。验证通常需要结合 SSL (secure socket layer)进行;授权在公司业务系统中非常重要,尤其是一些工作流系统。最近开发的 OAuth 协议可以帮助 Web 服务将相应信息向相应用户开放。Flickr 便使用这种方式管理私人照片和数据的访问权限。 另外一个安全领域是网络设防,这关系到操作系统,配置与监控。不仅网络危险重重,任何软件都是。Firefox 被称为最安全的浏览器,仍然需要频频发布安全补丁。要为你的系统编写安全代码就需要明白各种潜在的问题。

10. 关系数据库 (Relational Databases)
关系数据库因为在大规模 Web 服务上缺乏可扩充性而颇受微词,然而,关系数据库仍然是近20年来计算机技术中最伟大的成就。关系数据库对处理订单,公司数据方面有着出色的表现。 关系数据库的核心是以记录表示数据,记录存放在数据库表,数据库使用查询语言(SQL)对数据进行搜索与查询,同时,数据库对各个数据表进行关联。
数据库的标准化技术(normalization)讲的是使用正确的方式对数据进行分存以降低冗余,并加快存取速度。

JAVA软件工程师需具备的能力
  • 深入理解OOA/OOD,具备软件工程思想 
  • 熟悉J2EE体系架构及设计模式 
  • 熟悉JBuilder或Eclipse IDE工具 
  • 熟悉oracle/sqlserver/db2至少一种数据库 
  • 熟悉Unix/Linux系统 
  • 熟悉UML建模,熟练掌握ROSE。 
  • 熟悉weblogic和websphere的配置和开发 
  • 独立完成需求分析、设计、开发和单元测试
  •  n年以上应用项目开发经验 
  • 能够迅速接受新技术,快速学习 
  • 专业化、规范化
J2EE软件工程师应具备的能力
  • 1.熟练掌握java语言,深入理解OOP,OOA,OOD等编程思想. 
  • 2.掌握j2ee各个技术模块 (jsp/servlet, jdbc, ejb, websphere, weblogic等) 
  • 3.熟悉各种Java IDE和相关开发工具 (Eclipse, Jbuilder, WSAD<最牛>, CVS, ANT, Junit) 
  • 4.理解ROB的设计原理, 熟练掌握Oracle/SQL Server/DB2 其中至少一种. 
  • 5.熟悉UML建模, 熟练掌握Rational Rose 
  • 6.深入理解Design Patten, 熟悉 Struts,spring,hibernate等框架技术 
  • 7.有中,大型项目开发经验,能独立完成整个软件模块分析,设计开发,单元测试 
  • 8.能迅速接受新技术,快速学习和应用 
  • 9.熟悉软件工程,了解前沿技术规范(CMM)和先进开发模式(RUP, XP) 
  • 10.英语,逻辑思维能力,团队精神等非技术要求.
软件工程师的实务职业生涯规划
  1. 好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手!
  2. 可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!
  3. 不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国日本,一律如此!
  4. 多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!
  5. 知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!
  6. 抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!
  7. 逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好--尽管你可能技术不错!
  8. 工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!
  9. 要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...
  10. 该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!

2009年2月3日星期二

IT技术EN缩写总结-不断更新

计算机方面技术越来越多,英文缩写也愈来愈多,简直多如牛毛,总结一下,不断跟新

DataBase

SQL:Structured Query Language结构化查询语言
DDL:Data Definition Language数据库定义语言,负责数据机构定义与数据库对象定义的语言

MDAC:Microsoft Data Access Components
ODBC:Open Database Connectivity开发数据库互连
DAO:Data Access Objects数据访问对象
RDO:Remote Data Objects远程数据对象
OLE DB:Object Linking and Embedding DataBase对象链接嵌入式数据库
ADO:ActiveX Data Objects,是一个用来存取数据源的COM组件
ADOX:ADO Extensions for DDL and Security,DDL与安全ADO扩展
RDS:Remote Data Service

URL:Uniform/Universal Resource Locator统一资源定位符
IIS:Internet Information Services互联网信息服务

COM:Component Object Model组件对象模型(元件对象模型)

.Net
CLR:Common Language Runtime共通语言运行平台
MSIL:Microsoft Intermediate Language微软中间语言
JIT:Just In Time即时
CTS:Common Type System公共类型系统

MSDN:Microsoft Developer Network微软开发网络

API:Application Programming Interface应用程序接口(应用编程接口)

XML
XML:Extensible Markup Language可扩展标记语言
XSL:Extensible Stylesheet Language扩展样式表语言
XSLT:XSL Transformations,XSL转换
XSL-FO:Extensible Stylesheet Language Formatting Objects可扩展样式表语言格式化对象
XLink:XML Linking Language,XML链接语言
XPointer:XML Pointer Language,XML指针语言
DTD:Document Type Definition文档类型定义
XSD:XML Schema Definition,XML Schema定义
XML DOM:XML Document Object Model,XML文档对象模型
SOAP:Simple Object Access Protocol简单对象访问协议
WSDL:Web Services Description Language网络服务描述语言
RDF:Resource Description Framework资源描述框架
RSS:
WAP:Wireless Application Protocol无线应用协议

Java
ANT:Another Neat Tool(另一个整洁的工具),

2008的过去-纪念科索的一年

想了很久,还是想写点东西留给已经过去一个月的2008年,这一年很多事情发生了,很多事情没有发生,总之有精彩也有失落,还是记个流水帐吧。

2008年实在老邓的算法考试中开始的,过了元旦便是考试,算是对研一上学期的总结。老实说这考试其实不难,如果好好准备再加上平时再认真点,应该不成问题。

鼠年的春节是在家里的仓库中度过的,第一次在这个“新家”过年啊,运气非常好,回到家第二天老天便开始下雪了,而且一下就没个停,2008年初的雪灾便开始了。在家浑浑噩噩地过了一个春节,终于回到了学校,开始了这一比较关键的学期,在这一学期里面将决定我的实习单位,而这一学期里确实发生了不少事情,不管从个人来讲还是从研究生会、班级来讲。

说到东南大学软件学院研究生会,不得不提到“科索”虚拟公司。这个科索,是英文“CoseSoft”的音译,也就是软件学院的Software的意思。这个虚拟公司也是对原来研究生会的改组,不再工商局注册,在学院注册,呵呵,注册资本为¥20,000整(这一点我非常感谢我们的老吴院长-吴介一同志,真的,对于我们这个较为冲动、不是很成熟的行动不仅有精神上的支持,更有物质上的支持,难能可贵,不愧是老院长,我们的楷模啊),目的并不是为了给软院创收,我们也暂时没这个能力,哈,单纯是为了大家能有一个比较好的学习实践的环境,不是简简单单的课程实践,而是很多实实在在的具体项目。

从上到下我说一下科索的组织架构,单说学生这一层面,不包括老师、学院的部分。“食物链”的最上端是个叫“主席”的人,呵呵,也就相当于学生会会长的职位,主要是对我们公司的日常工作进行总体把握,监督和督促各个部长的工作,总理公司日常的各种事务,包括初期的筹划、人员的招募、公司标志的确定、服务器的日常管理等等很多事务都是这位宋兄牵头的,可谓劳苦功高啊。“食物链”往下看,有五大支柱部分,简称“五柱”(这种说法好像很NB,怎么当初没想到,呵呵),分别是Web开发部(主打软件),嵌入式开发部(主打硬件),人力资源部,培训部,还有一个貌似可以叫做财务部。“食物链”的最下端便是众多的公司普通“员工”了,可以被剥削,被压迫的对象,呵呵,不过我们之间没有任何强制手段亦没有任何报酬,这种关系从建立起来便显得很脆弱。

财务部,主管的是一个叫波波的小男生(年纪貌似比我大一岁,呵呵),主要是对公司的日常支出进行统筹规划,下面还有一个日常辅助秘书(是我们这个“公司”唯一有“小秘”的人啊),不过我好像觉得平时支出几乎为零,主要的支出还是活动支出。2007年的最后,我们公司的年会由波波牵头组织的,我个人觉得还是比较成功的,虽然其中毛病不断,意外不断,呵呵。培训部头便是朱老大,培训部一年貌似也没有什么动静,说搞培训都雷声大雨点小或者没有,可能朱老大确实很忙吧,一笔带过。人力组员部头是位女士,叫狒狒(为什么叫狒狒,怎么叫狒狒,我这就不多说了),貌似也是公司刚建立招募人员的时候忙活了一整,之后也没什么大事,一笔带过。嵌入式开发部,管事的是个胖子,比较喜欢吃零食(他的桌子上一半是零食,一半是电路板、电线等等乱七八糟的元器件,我一直觉得他那的零食会不会有工业污染啊。。。),他们部门主要负责了外面公司接过来的一个项目,大体是一块板子的底层通信的问题。作为一个旁观者,整个实施、设计、进度管理的过程中确实暴露出了很多问题,我基本是在和我的项目进行对比,改进。最后这个项目无痛流产了,这其中有太多因素交织在一起了,不仅是技术的问题、领导者、甚至与老师之间的交流都存在问题,不多说了。

Web开发部,其实这个部门的名字就存在问题,两个项目中之后一个项目涉及Web,另一个压根不是,当初为什么叫Web开发部,这个名字不是太好。我这个部长也是稀里糊涂的混到了,也是“部长级人物”里面唯一参加过人员招募所谓的“面试”的人了,呵呵,荣幸之至啊,起初没有“掺和”研究生会的事情,是因为我的另外一个头衔,不过怎么又“掺和”了,着实让人摸不着头脑。开发部内主要有两个项目,一个是学院的校友录系统,这个主要由小华负责;一个是组织部的党校考试系统,这个由我负责。

说到这个考试系统,着实让我捶胸顿足,仰天长啸,好不痛苦啊。技术水平只能算一般,在同学们当中还算说得过去,头一次带人一起做项目,我可是想了很久,可是真正实践起来可又是另一番景象。
  1. 首先是如何计划、如何安排进度、如何管理队员。以前学过了软件工程,了解了面向对象的分析与开发过程,但都是一知半解,谈不上缺乏经验,是没有经验可谈!这个项目实施过程几乎是一边摸索、一边前进、一边修正的不停循环。
  2. 需求,是我和组织部的老师商量后确定了的,然后由我再统一向各个组员转述,分工任务。第一个环节就出现了问题,一下子上来了整个考试系统,功能较为繁杂,且需要在N多台机器上进行部署。对于主要功能的剥离基本上还算成功,但是需求的细节却是经过了反复确认。由于经验不足,在主题框架与细节功能剥离过程中并没有做到完全的面向对象、比较好的解耦合,使得后期需求的变更让整个开发付出了比较大的代价,而且在部署期间出现了些并发症!
  3. 对于开发工作和技术的选择,选择了C#+SQL Server2000。为什么C#?起初客户需要对MS Office文档进行操作,自然而然采用了Visual Studio平台,开发人员主要是大二的同学组成,C++作为基础大一已经学过,C#已经开始学习了;而我对于C#没有经验,很多技术细节把握不了。当初选择这个语言,也是想自我挑战一下,可是开发到后期依然出现了危机。当习惯了Java平台,即使在困难的问题,网上找不到答案的问题,把底层的代码翻出来,看看是怎么实现的,几乎不存在解决不了的问题。而MS的平台,尤其是其.Net Framework优秀的封装性,底层代码无法得知,在服务器与客户端异步通信时经常会发生一些“概率性”的BUG,很难捕捉问题在哪里,这也几乎成了我们这个系统最大的不安定因素和测试失败的最大原因。
  4. 对于任务的分配,依然存在不少问题。开始是让研究生组完成系统的设计,然后交由本科生开发完成。主要是考虑研究生大多数并不是本专业出生,技术能力层次不齐,过于薄弱,且不想少数本科生那样比较好“使唤”,呵呵。而本科生其实真正做事情的没有几个,想想自己本科的时候什么样子就知道了,呵呵。在设计阶段,由于对技术把握的不是很好以及需求的反复确认,使得详细设计几乎与开发过程断开了,唯一起到作用的大概还是数据库的详细设计。而在开发过程中,完全交由本科生开发,而我统合代码。我是在本科生的基础上整合代码的,可以说基本框架是出自他们之手。没有经验的开发导致了我们这个项目的结构比较混乱,而且缺少注释,使得开发、需求变更、BUG修改都会要付出很大的代价。以至于后来个人忙于寻找实习单位,只是完成了一个初始版本,将这个系统交给了本科生们。
  5. 过程控制,事先缺少比较详细的计划安排,导致了开发过程中的进度控制不太好。这一点不完全是主观原因,处于学校的环境中,还是要以上课为主,只能用少量的课余时间在完成了其他一些琐事之后再来管这个项目的事情。
  6. 在测试过程中,对于真实的运行环境估计不足,是导致数次系统出问题的首要原因。
  7. 。。。。。。
这么多的问题其实还是用经验不足就可以概括了,一回生,二回熟,如果回头再重新做这个项目,我应该会管理、控制的更好的。不过最后把所有的文档、代码顺利移交给本科的同学了,据说开发到现在已经快顺利部署了,恭喜他们了,呵呵。

科索,拜了。在这里我学到了不少东西,永远不会忘记我的第一个“项目”。


我的简介