一年又一年(2009年之六 国庆)

1949-2009,今年是建国六十周年。

大概一年多前,网络上、报纸上就在热烈讨论如何庆祝的事情了,很多献礼片陆续地播出了,很多回顾祖国60年发展历程的展览也开始了,各个社区也在组织各种庆祝活动。六十周年大庆,阅兵式是必不可少的了,这个消息后来得到了官方的正式,一时间成为大家议论的焦点,都非常期待。

阅兵仪式非常壮观,更兴奋的是,在阅兵式结束后,所有的装备到通过京通快速返回,刚好从家门口经过,连忙找出相机,把经过的装备全都拍了下来。

住在高速公路旁边,每天深受噪音污染,这次总算得到了补偿。

一年又一年(2009年之五 买车)

不懈的努力和焦虑的等待后,儿子上学的事终于搞定了。7月10日,就在全市中小学放假前一天,终于接到学校通知,儿子被录取了。

为了给孩子选一所好学校,我们全家从年初就开始联系,现在终于如愿以偿了。学校不错,就是离家太远,为了接送方便,我们决定买辆车。

我对车不懂,也不感兴趣,家就住在地铁旁,上班的地方离地铁也不远,在加上北京让人无法忍耐的堵车,平时对车的需求真的不大。不过现在为了孩子,还是决定出手了。

先在网上搜了搜,选了几款比较适合自己的,又咨询了几个有车的朋友,终于选中了东风日产的骐达,一来日本车省油,二来这款车的车顶高、空间大,于是,到4S店就订了,4S店说一般不会超过30天提车。当时觉得也不错,正好有时间练练车,从驾校出来后还一直没摸过车呢。

可谁知这一等居然等了2个多月,直到快到国庆的时候,4S店打来电话,说临近建国60周年大庆,很多外地的大车不能进京了,必须等到十一长假后才能提车。想想反正也已经这样了,既然这么长时间都等了,也不在乎多等几天。

10月11日,是和4S店约好了提车的日子。一切都挺顺利,中午的时候就把车开走了。虽然保险还没有生效,不过自信应该没问题。之后的几天,基本上就是忙着上牌、选车位、买些车内必备的东西了。好在公司决定在那周关闭 (shutdown) 一周,所以这一切都办理得不紧不慢。

一年又一年(2009年之四 出差)

入Adobe不久,我就被告知要去美国出差,去和Flex的开发团队一起工作几周,一方面互相了解,同时也可以参加一些培训。

以前在Sun的时候也曾多次去美国出差,本来应该没有什么特别的,不过这次稍微有些不同:这次是去美国的大城市—-旧金山,而且就在市中心。

在启程之前,我在美国的一位同事就给我写了一封长长的email,为我介绍当地的情况,还为我预定了酒店,特别提醒我旧金山市内的治安不好,要注意安全。

出发之前,上map.google.com查了查,发现酒店到公司的距离并不远,大概2英里左右,一个非常适合骑自行车的距离,于是就联系了一个在旧金山附近的朋友,向他借了辆自行车,约好了在酒店大堂见面。等我到酒店后,朋友已经在大堂等我了,不过他很抱歉地告诉我,锁在酒店门口的自行车,在不到5分钟的时间里,已经被小偷偷走了。我真觉得不可思议,大白天的,在酒店门口,居然还会发生这种事,这也让我真正体会到了同事的提醒决不是危言耸听了。

由于没有了自行车,每天只好不行上下班,虽然路程不算近,但是可以走走看看也不错。

Adobe在旧金山的办公室很特别,是一栋很旧的红砖楼,估计怎么也有5、60年了。从外面看,根本无法想象这是一家世界级软件公司的办公楼,倒像是一座仓库。走进公司大楼,发现里面的装修也非常特别,为了加固整栋大楼,楼内架起了很多木头的和钢的梁,这些加固用的梁没有任何装饰的暴露在外面,感觉非常不同,完全不同于北京的高档写字楼。整座大楼被分割成三层,之所以说是”被分割成”,是因为楼板感觉不像是原来就有的,而是后来加上去的,走在上面,脚步稍微重一些,这个楼板都在颤动。而就在这里,正在开发着世界上一些最著名的软件产品,比如FlashPlayer、Flex等等。

与同事们逐渐熟悉了之后才知道,原来Flex team中有很多人是来自于Sun的Java开发团队了,甚至包括像Hans Muller、Chaet Haas这样在Java领域的领军人物。

通过与Flex team共同工作的几周时间,我不仅对Flex的开发流程有了初步的了解,也和很多人建立了良好的关系,使我更加觉得,能够有机会参与这样一个项目是多么的自豪。

一年又一年(2009年之三 Flex)

开始参与Flex产品之后,才对Flex有了个基本了解。

Flex其实是一个产品家族的名称,包括Flex SDK、FlashBuilder和FlashCatalyst,Flex SDK是一个开源的产品,FlashBuilder和FlashCatalyst也是基于著名的开源平台Eclipse,这对于我这个开源拥护者无疑是非常有吸引力的,而且更大的惊喜是Flex中大量的使用了Java技术,且不说FlashBuilder是采用Eclipse作为平台,Flex SDK的编译器就是用Java语言写的。

Flex应用经过编译,可以成为ActionScript的字节码,在FlashPlayer虚拟机上运行,这个概念对于熟悉Java或.NET技术的人来讲并不陌生。

相比于Java的虚拟机,FlashPlayer要简单很多,同时大小上也小很多。Flex的组件库也没有Java Swing那么庞大而复杂,但这可能恰恰是Flex的优势吧—-没有了Java 2D复杂的组件,使开发者易于学习,据说大多数的Flex开发者都不知计算机专业的。

Flex的核心是ActionScript,一种非常类似Java的语言。虽然名字看上去像一种脚本语言,其实ActionScript是需要编译的,不过并不是编译成真正的机器代码,而是一种可以运行在FlashPlayer虚拟机上的字节码。不过,Adobe觉得直接使用ActionScript开发Flex应用还是不够简单快捷,所以有提供了一种称之为MXML的语言来描述用户界面。MXML完全采用XML的语法定义,开发者可以根据自己的设计,描述用户界面的结构,MXML中可以嵌入ActionScript语句,用来描述事物逻辑和事件响应。在编译的时候,MXML先被转成ActionScript程序,而后再被编译。

FlashBuilder则是一个基于Eclipse的集成开发环境,提供了可视化的界面设计、方便的代码跟踪和调试等功能,最大限度的提高了开发者的生产率。

FlashCatalyst是个非常有特色的产品,它并不是给程序员使用的,而是给UI设计者使用的。设计人员可以把一些预先在Photoshop中编辑好的图形导入到Catalyst中,使用这些图形生成或定制一些个性化的UI控件,并对这些控件的效果进行设计。Catalyst并不提供代码的编写和调试功能(实际上也不需要),经Catalyst设计的项目可以被导入到FlashBuilder中,有程序员来定义和实现具体的业务逻辑。Catalyst有机地把Flex和Adobe其他的产品进行了连接,为Flex应用的设计和开发提供了全面的解决方案,使得Photoshop、Illustrator等产品可以被应用到Flex应用开发上,建立了一套Flex开发的生态系统,这一点是Flex的竞争产品(Silverlight和JavaFX)所不具备的。

Flex最吸引人的地方无疑是它丰富的控件库和绚丽的视觉效果,而作为一个普通的开发人员又根本不用去深入了解如何去实现它,只需要通过一些简单的描述 (使用MXML的语法) 就可以做出非常漂亮的应用,比我以前用Java 2D写不知道要简单多少倍。

随着对Flex的深入了解,我进一步体会到Flex对Internet应用的支持。Flex非常好的封装了访问HTTP和web服务的接口,使得访问Internet上的应用就像从一个变量上读取数据那么简单,你根本不需要知道一个web service是如何被调用的。

通过半年左右的学习,我对Flex已经有了一个比较全面的认识,我相信每一个使用过Flex的人都会喜欢上它。想想也是,现在99%以上的PC都已经预装了FlashPlayer,对于这样一个如此容易获得的平台,哪个程序员会不动心呢?

一年又一年(2009年之二 加入Adobe)

休息了一个月之后,开始找工作。很多同事都很帮忙,介绍了一些很好的机会,Adobe就是其中之一。在加入Adobe之前,我还收到了几个offer,其中一个是一家事业单位的软件部主任(正处级),是工业和信息化部下负责电子政务和国产软件评测、推广工作的,当时非常犹豫,不知道该如何决定。事业单位,虽然收入上无法和外资企业相比,但非常稳定,而且职位不错,后来还是考虑再三,觉得自己还是无法适应国营企事业单位的种种规章制度和很好地处理各种错综复杂的关系,决定去Adobe。

在此之前,对Adobe这家公司了解不多,只知道几个有名的产品,像Acorbat,Photoshop, Dreamwaver等,这次的机会是Flex QE Lead。Flex对于我来说是个全新的产品,之前虽有耳闻,但从没有真正使用过。为此,我在网上查找了一些资料,发现这个产品不错,和我原来熟悉的Java技术非常类似,更重要的是Flex是目前流行的RIA(Rich Internet Application)的解决方案,在Cloud Computing时代下Client端的解决方案,很高兴能有机会继续工作在这样一个前沿的产品上,所以就决定加入Adobe。

在到Adobe上班后,才发觉Adobe的工作环境是非常好的,每个人的工位面积都很大,和原来在Sun的一样,办公室内提供了丰富的食品和饮料,每天上下午各有一次水果的时间,设备的配置也是很先进,包括有连接VPN的Token,视频会议系统等等,不过有些不适应的地方,最大的一个就是Adobe的全部工作环境都是基于 Microsoft Windows 的,这对于我这个用惯了UNIX的”Windows盲”来说感到很不方便,不过好在还有Mac可以用,最后还是在网上搜到了unixkit tiny这个开源产品,算是在Windows上建立了个简单得不能再简单的UNIX环境。

一年又一年(2009年之一 裁员)

知不觉,又到了年底。回想起来,2009年对于我还是很不平常的,有些事情还是应该记录一下。

在这一年里,我”终于”离开了自己服务了12年的Sun Microsystems公司,不是自愿的。回想起来,自己自1997年加入Sun,伴随她的成长、辉煌和衰退,能有机会亲身见证和经历这样一段历史,可以说我是幸运的。Sun自2000年开始,一直在走下坡路,业务收缩,市场份额下降,其中也经历了几次裁员,还更换了CEO,但一直未见起色,而始于2008年底的金融危机,毫无疑问的使Sun更加雪上加霜。

其实在公司正式通知之前,我已经有了预感,或是说猜到了。在此之前,有一些猎头公司一直在和我联系,介绍一些外边的机会,但我始终都不感兴趣,因为Sun的文化和技术深深吸引着我,Sun的”网络就是计算机”的理念,让我认识到Sun在创立之初就敏锐地预示了几十年后计算机发展的方向。今天,”云计算”的概念对于大家已经不再遥远,当我们再次回头来看Sun几十年前提出的这个口号的时候,不得不由衷地感到钦佩。

在离开Sun之后,Sun提供了一个非常好的服务,聘请了一家专业的咨询公司为受到影响的员工提供”再就业”培训,培训非常细致,从心态调整、职业规划、自我潜能的开发、简历撰写到面试指导,都非常专业。这些年来,一直到忙于产品和技术,自己很少有时间去考虑这些问题,也很少认识到以前的工作的真正价值。通过这次裁员和培训,发现自己还有不少潜质、优点和不足,感觉自己成长了不少,自己的心态也调整了很多,从某种程度上,开始感到自己很幸运,感激这次被裁了。

家有学童 之 第一次家长会

我的记忆里,小学生期末考试就是考察一下本学期的内容,尤其是一年级,又没有作文的压力,考双百(语文、数学)都是非常平常的事,但是,当我参加了儿子的第一次家长会之后,才认识到原来现在的小学生已经基本上没有可能做到了,估计我去考也未必能拿100分。

第一次家长会基本上是有关这学期语文和数学期末考试的。因为现在学校都非常强调素质教育,所以现在的考试都增强了这方面的考察,有些题目都是前所未遇的。为了保证公平,这次的考试采用全区统一出题和判卷,监考老师要互相轮换,就是老师不能监考自己的班。

语文和数学考试都要经过三轮,然后将总成绩相加,最后的成绩才是期末考试的最终成绩。

语文三次考试的内容各不相同,第一次占10分,主要考察学生的朗读(8分)和背诵(2)分。

朗读的要求是:

  1. 正确(5分):不丢字、添字、重复,字音正确;
  2. 流利(2分):朗读连贯,疑问句、感叹句要正确,停顿正确,语速正确,有感情;
  3. 声音洪亮(1分);

背诵的要求倒是蛮简单的,只是要求正确,估计不会太难。

第二次主要考拼音和生字,占20分,题型也是五花八门,有连线、写字、标拼音……

第三次考语文基础,包括组词、造句、基本句型,占70分。

数学考试也是分三次进行,第一次5分,题目有点儿”变态”:把一捆火柴棍散在桌子上,让学生一把抓起10根,不许数,就靠直觉去抓,抓两次。据说是为了考察对数字的直觉和敏感。

第二次考口算,5分钟完成40道口算题,占20分,有加法、减法、连加、连减、加减混合、添括号、倒等式、不等式比较,等等。

第三次考数学综合,占75分,包括的题型也很多,有些题目相当”费脑子”,因为题目中的给的信息有的多余的,有的不是特别明显,需要对给出的信息加以区分和提炼,才能把和问题有关的信息找出来,应用到解题中,这一点对其实就是考察学生对信息的整理和分析,比如老师给了个例子,三个球A、B、C,其中有一个有残缺,但是从表面上看不出来,如果把A和B放到天平上,A比B重,能不能判断出那个是有残缺的?在这个题目中,”残缺”是个隐含的信息,就是指某个球比正常的”轻”,所以B就是那个要找的。老实说,当我刚刚听到这个题目时,一下子也没反应过来,小学生可能就困难了,估计很多小学生不知道该怎么答。

虽然,现在的小学生可能无法享受我小时候考试得”双百”的喜悦,但是我对现在学校有意识的培养学生的表达和分析能力的做法非常赞同,现在的孩子面临我们小时候完全不同的社会,要求他们不仅要有过硬的理论知识和实践能力,同时与人沟通、表达和对浩若烟海的信息的甄别筛选能力也都是非常重要的,而且从某些方面来看甚至超过了对知识的要求。

以前我觉得所谓的素质教育就是让孩子培养些特长,比如很多家长让孩子学钢琴、舞蹈等等,虽然这也是素质教育的一部分,但绝对不是全部。通过这次家长会,我对素质教育有了更深入的认识,也算是和孩子一起成长吧:-)

Solved a FlashBuilder Bug

With a couple of hours investigation, I solved a FlashBuilder bug.

The bug exists on FlashBuilder plugin. FlashBuilder 4.0 is releasing two installer binary: standalone application and a plugin for Eclipse. If FlashBuilder plugin is installed to a directory with non-ASCII character, user can’t find the plugin when the user launches Eclipse.

After some investigation, I found Eclipse loaded the additional plugins from some directories, and these directories were list in the /…/eclipse-host-distro/dropins/*. For FlashBulider’s plugin, the file is dropins/com.adobe.feature.core.nl1.link. In the file, FlashBuilder plugin’s installation directory will be recorded for Eclipse to look for plugins.

Eclipse requests the file is encoded in Unicode ASCII encoding, that Java is using. For non-ASCII characters, the characters should be expressed in the format of “\uxxxx”. However, the file is in “UTF-8″ encoding, when FlashBuilder plugin is installed.

I was confused that why the bug only existed FlashBuilder plugin, but didn’t happen to FlashBuilder standalone application. Finally, I got the answer: FlashBuilder plugin is using “InstallEverywhere” installer, and FlashBuilder standalone is using an installer framework called “Obiwan”.

I am so happy that I can solve the issur for installer team. However, I start to worry: do other products have the same issue, if they are also using “InstallEverywhere” installer? I hope this is a FlashBuilder specific issue.

Nobel Prize Ceremonies through Flash Player

Nobel Prize is a dream of numerous scientists. Nobel Prize Ceremonies will be held on Dec. 10, 2009. Every year, thousands of people are invited to Stockholm to attend the ceremonies.

Now, with Adobe‘s technology, more people can see the ceremonies from internet without attending it in person. They can hear the prize winner to introduce their achievements, their stories, and share the happiness with these world-class masters.

The first entry

This is my first blog entry from Adobe.

Today, I received the email notification from blog administration team to inform me that my blog had been set up. Is it exciting?

Since I joined in Adobe in April, I have been considering to set up my blog. However, it is so complicated to find out the right way how to do that. Generally, many blog sites provide the self-registry service to enable employees to set up their blogs by themselves, however, I didn’t find any information how to do that from Adobe’s website, and either did I get any result from Adobe intranet. And finally, I decided to ask service desk for help.

I contacted the service desk. The service desk receiption was an India lady and she is very nice. She told me that she needed some time to find out the approach to set up a blog. After 5 minutes later, she told me that she was sorry to keep me wait, and she still needed some minutes to find the solution for me. After about 10 minutes, she told me a URL about how to request a blog on http://blogs.adobe.com. It is a really long URL, and I didn’t think that I could remember that correctly. Fortunately, the lady told that she could send me an email, and submit the request form from the system. Adobe’s service desk is really great!

After one day’s wait, my blog was set up, and an email was sent to me.

It is really great that I can blog in Adobe. With the blog, I can record and share my work and career at Adobe with the people I know and I don’t know.