2011年终团队里的各种总结

恐怖的12月终于在各种文档、各种催材料、各种跑腿中过去了。本月博客却是一篇都没写。
想到这个月在团队还是交了不少总结的,权且发上来充充数吧。

2011年Dian团队个人总结

还记得去年的个人总结写得一气呵成,但是今年的却怎么也不知道从何下笔了。可能真是老了吧,回头看看去年的总结,感觉当初真是嫩得没边了,哈哈。

今年待了两个项目,海外和IPTV。老实说,最后在海外的那段时间里我没做出多大贡献,主要是自己心态变化了,没有以前那么积极了。另一方面项目中标的机率也越来越小,金额越来越低。这样干到5月份,被周导拉到IPTV,没能陪海外走完最后的合同,感觉自己挺不厚道的。

因为之前一直是在c++上混,也感觉有些疲倦了,一直想找点其它方向的项目做做。所以一听说周导要开始弄IPTV组了,又是用java写一个完整的PC客户端程序,便觉得很对我的胃口。尽管以前海外组的项目中每个系列都是一个很庞大的工程,但是通常我们每次的需求只是关系到这个工程的一小部分,不涉及到全局,这也是外包项目的通病。但是IPTV的项目就完全是我们自己放开手去实现整个程序了。所以程序的可扩展性,可维护性,可分工性以及总体的架构便都成了我们需要考虑的问题。

其实到后来才发现其实最关键的问题还是与甲方沟通,因为我们的程序生成的模板文件最终是被甲方制作的一个渲染引擎来渲染的,所以这之间的接口协商就成为了一个大问题,需要双方之间频繁的沟通。两次去深圳UT starcom研发中心出差的经历也让我受益匪浅。

要说今年与去年最大的不同,我觉得是今年除了项目上的活动,我还更多的参与到团队队委会的工作中来。其实我这人一直都是极讨厌做这种事的,但一路上阴差阳错走到今天。一开始被古国杰拉去做基金部副部,进去后发现基金部就俩人。快到换届时上一届队委会拉人去竞选,我表态说,如果基金部没人去竞选的话,我就去了。结果遇上大部制改革,基金部和其它几个部合并成一个技术部。结果技术部又没人去竞选,我就只好硬着头皮上了。在这个过程中,我收获最大的是并行工作能力的提高,因为团队各项事务杂且多,项目上的压力也是挺大的,如何在各种事务中快速切换便成了一个难点。还好,到目前为止还没酿成什么大错。

这也是我第二次,也是最后一次写年终个人总结了。还有六个月也就要离开了,趁着最后的这段时间,还得多做点事,在团队发展的过程中留下我的足迹。… Read the rest

RCP开发中引入第三方jar包时的几个陷阱

其实我一直觉得这种东西算不上技术,只是一些小知识点罢了,知道则有,不知则无,去网上搜一搜就出来了。网上也有不少人已经写过一些这方面的东西,但有些陷阱还是没有特别的点明。RCP开发简直就是一个坑的世界,即使你侥幸没掉进这个坑,后面还有无数个坑在等着你。搞得现在大部分的时间都是花在如何从坑里爬出来,而不是如何朝着既定目标前进了。 RCP开发/eclipse插件开发在对第三方jar包的引入上,与普通java应用有着诸多不同。以下几个问题,应该特别引起重视:

1.不要直接在工程属性->Java Build Path页中引入jar包

在我们的思维定式下,引入第三方包就是直接右击工程,进入Properties,再找到  build Path页。但是这在eclipse插件开发中是绝对不提倡的,正确的做法是打开本插件的plugin.xml文件,进入runtime页,在ClassPath区里进行增删。因为这样,才会在MAINFEST.MF文件的Bundle-ClassPath项中有相应同步。

2.不要忘了“.”

如果你没有引入第三方包,没加这个”.”还不要紧。但是如果对1中提到的地方作了修改,而在ClassPath里没有加一个名为”.”的项,最后所有原本就存在的类全都不包含在ClassPath里了。 … Read the rest

Web Page Editor中绝对定位(absolute)问题的解决

既然有所谓“问题的解决”,那么必然就意味着原来是有问题的。原生态的Web Page Editor中默认的absolute开关是关着的(是的,虽然很费解,但它的确是关着的)。所以即使你在代码里写了带有position:absolute,它也会直接将其忽略掉。
打开这个开关的方法是,来到类PDPreferences中,将static属性DEFAULT_CSS_ENABLE_ABSOLUTE_POSITIONING设为true;
但是如果仅仅设其为true,若你在一个空文档里写入一行:

<div style=’”position:absolute;left:10,;top10;”。
然后用web page editor打开此文档,你会发现Console视图下会发现报了一堆NullPointerException错误,且整个视图都比较混乱。跟踪调试一段时间后,我发现其根本原因在于CSSLayout::findContainingPositionedFigure()返回了一个空值。… Read the rest

在RCP程序中集成Jetty

jetty是个开源的serverlt容器,由于良好的设计,它非常容易被嵌入到其它程序中,作为一个内嵌服务器而存在。
那么我们如何在自己的RCP程序中使用Jetty呢?

方法一:使用扩展点

这种方法比较容易实现,但缺点是无法在运行时改变参数,因为它的参数基本上都是在plugin.xml里就写好的。使用扩展点去集成Jetty,只需要在Plugin dependences 页面中添加如下插件:

javax.servlet
org.mortbay.jetty.server
org.mortbay.jetty.util
org.eclipse.equinox.http.jetty

Read the rest

为 Web Page Editor 定制控件

Web Page Editor本身就自带了HTML和JSP的两大组控件,但是这些控件功能太简单了,你拖一个div控件出来,也就生成一个<div></div>,拖一个a控件出来,就生成一个<a></a>。有那拖的功夫,还不如自己拿键盘敲呢。比起Dreamweaver和Myeclipse的控件来说,差了不知道几个数量级。

想要定制控件,先得看看Palette(就是控件面版)上的每一项是怎么新建出来的。HTML和JSP控件最终都利用了以下代码在Palette中新建条目。

	private TagToolPaletteEntry internalCreateTagEntry(final TaglibPaletteDrawer category,
			final 
Read the rest

为Web Page Editor添加拖动功能

对于可视化的页面编辑来说,控件的全局拖动功能是必不可少的。但很奇怪的是,原生的org.eclipse.jst.pagedesigner插件并没有实现这一功能(这个官方插件简直就是个渣!)。没关系,源代码在手,我们自己搞定它!

拖动功能对应的Command是MoveNodeCommand。原有的拖动只是调换两个元素的位置,不能拖动到画布上的任意空位置。对GEF、Draw2D有过了解的朋友应该对ToolbarLayout、FlowLayout和XYLayout有所印象。前两者都是继承自OrderedLayout,它们会按指定的方向排列显示图形,拖动不同的图形只会改变这个排列顺序。Web page editor中的layout就和这种layout比较相似,所以在原本的环境中,根本没有考虑当一个标签为postion:absolute时的全局拖动该怎么处理。

原有的MoveNodeCommand构造函数形式为

 MoveNodeCommand(IHTMLGraphicalViewer viewer,IDOMPosition insertionPoint, Node originalNode)
Read the rest

GEF:EditPolicy的本质

初学GEF的人经常被EditPolicy各种奇怪的Role和Command弄得晕头转向。现在我们就从代码层来剖析一下EditPolicy到底是个什么玩意儿吧。

1.installEditPolicy()到底做了什么

通常情况下,重写EditPart的时候少不了改写createEditPolicies()函数,它通常具有如下的形式:

    protected void createEditPolicies() {
        installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new NodeDirectEditPolicy());
        
Read the rest

Hello darkness my old friend.

恐怕佛家所说的“顿悟”也就是这种感觉吧。

前几天在喷嚏网的乐活区看到一篇文章:别向这个操蛋的世界投降(原文http://www.u148.net/article/42220.html)。感觉这篇文章把我以前心里想的一些东西条理化的讲出来了。

小的时候,小到我才第一次思考爱情这回事的时候,我就对一个问题百思不得其解:你喜欢一个人,而这个人在茫茫人海中又恰巧喜欢你,这是多么大的一个巧合啊!而幼小的我放眼望去,这个世界上充斥着不可胜数的一对对巧合。

你究竟是喜欢一个人本身,还是喜欢一种预期,一种前景,喜欢一种对方和你上床睡觉结婚生子的可能性?这个年龄很多人都急吼吼地寻找另一半抱团取暖。要我说,其中有多少是真的喜欢对方本身,这很难说。我这么说可能一来打击面太广,二来没有调查取证,所以显得不那么令人信服。其实这很好判断,那就是扪心自问:换一个人行不行?

在文章的结尾,作者写道:

我知道,很多人笑我幼稚。就连身边很好的朋友也常常对我说:“我保证,XX年之后你就不这样想了。”当然了,他们一再看着我过了XX年,还是一如既往地这么幼稚。这算幼稚吗?我只是觉得大家的理解不同罢了。

当然,我并不是说我不会放弃。就像我08年在《等死你》当中写的:“也许有一天我会放弃,但是我绝不会像那些自以为看透了的人那样,等到将来自己的儿孙后辈面临这种类似的境遇的时候,傻逼哄哄地嘲讽他们,说一些“别犯傻了,爱情这东西,就是……”之类的屁话。我会对他说:“儿子,老爸当年也等过,但是老爸比较没种,没有坚持到底,就向这个急躁的世界缴械投降了。希望你比老爸有出息。去吧,坚持你自己的内心,老爸支持你。”

是的,虽然自知终须一败,但请再多坚持一会,别向这个操蛋的世界投降。

Read the rest

深入浅出Web Page Editor

1 简介

Web Page Editor(以下简称WPE)是eclipse开源子项目WTP的一部分。其插件名全称为:org.eclipse.jst.pagedesigner。Java EE开发环境会自带这个插件包。如果没有,也可以到http://download.eclipse.org/webtools/downloads/页面下载。它主要提供一个WYSIWYG的Web开发环境,支持控件拖拽,CSS可视化编辑等等。由于它是开源的,所以一般常常可以用来作为开发Web开发RCP程序的基础。它本身也预留了插件接口,以方便开发人员扩充自定义插件,以供拖放。

目前这个版本1.3.2的Page Editor还残留着严重的排版问题,几乎所有的块级元素都会一股脑儿的顺次排下来,而不去理会它们的CSS属性中是否有positon:absolute。但是这不妨碍我们对它现有的结构进行分析。… Read the rest