2006年9月24日

夜宴,流氓软件以及其它

最近有两件事炒的很火。

一是夜宴终于出炉了。骂声一片。大有连冯导都堕落了的呼声。

二是奇虎和雅虎关于流氓软件的口水仗打得不亦乐乎,近日风闻又有民间组织起诉所谓流氓软件。

刚好前些日子和网友在论坛上讨论国内软件业的盗版情况,心理颇有些感慨,觉得这林林总总的背后,很多东西都是相通的。

影视作品和软件具有很多类似的特性,比如其物理载体的价值可以极低,可以通过互联网传播,可以相当容易的进行盗版。因此在某种程度上,可以认为影视作品是一种特殊的软件。这使中国的电影产业和中国的软件产业具备了相似性。

无论是电影还是软件,都必须在商业性、艺术性和大众性之间取得一个平衡。这是目前我们生活的时代所决定的。创作者追求艺术性,投资方追求商业性,受众认可大众性,这种制约在某些情况下是一种完美的平衡,在另外某些情况下就会变成一种无奈的悲哀。比如中国的电影,还有软件。

尽管可以找到很多理由,比如还是国民收入太低,影片或者软件本身的素质太差等等等等,不可否认的是,这些年来,国人已经被惯坏了。我们已经习惯了免费享用这些可复制的二进制数据。从而把电影人和软件人推到了一个尴尬的境地。一方面,他们有自己追求艺术的理想,另一方面,他们不得不在现实世界中生存下来。

既然不能直接从使用者上收费,于是,越来越多原本不属于电影或者软件的东西进入其中,比如广告。于是就有了冯导每次贺岁片中不断增加的广告品牌,于是有了越来越流氓的国产软件。

在市场经济环境下,消费品具有取悦消费者的倾向。这种情况下,消费品的发展方向是否良性,取决于消费者的水平。

在整体消费文化低下的中国市场,好产品很难做。市场竞争的结果,是越俗的产品,拥有越好的销量,能够攫取越多的利润。这点上,史玉柱的脑白金、征途,神舟的电脑,盛大的传奇,韩国的三星电子以及大量泡菜网游深谙其道,赚到了大票的银子。很多早期社区的转变,比如猫扑元老与小P孩竞争的失败,也缘于此。很多国际品牌到了中国市场的水土不服,最终都选择了降低自己产品在中国区域的品质来提升价格竞争力,也缘于此。

或许,这个阶段是成长过程中的必经阶段。但是,自己种的苦果,自己总归要尝。如果今天的流氓软件以及外贸化的中国电影还不能警醒我们,那么明天,我们必将尝到更多的苦头。对于历史的欠债问题,“人间正道是沧桑”,是取不得巧,偷不得懒,更躲不过的。今天我们对于自己的继续放纵,只会最终扼杀我们自己的产业。

正如一个不太恰当的例子:一个小孩子,生在中国,但是成长过程中,中国人不但饿他的肚子,还要讥讽嘲笑他,那么可以想象,最终的结局,不是这个小孩子死掉,就是这个小孩子走掉。

真是应了那句台词:“出来混,迟早要还的。”

2006年9月4日

J2ME 开发上手指南

概述

J2ME 是 Java 2 Micro Edition 的缩写,最新的官方名称是 JavaME(Sun 似乎很喜欢改名字,从 Oak 到 Java,从 Java 到 J2?E,再到现在 Java?E),可 以认为是 Java 为移动设备(手机、PDA 以及其它计算能力和能源供应都受限的设备)剪裁的一套 API。基本上,如果有 J2SE 的开发经验,上手 J2ME 会非常快。除了个别类或方法,J2ME 基本上是 J2SE 的一个子集。Java 在保持语言体验统一性这一点上,做得确实非常好。

J2ME 采用比较混乱的方式来描述自身的版本。整个 J2ME API 被划分为 Configuration 和 Profile。而 Configuration 和 Profile 又各自拥有其版本。关于混乱现象的解释,一两句话难以说清,有兴趣的同学可以随便抓本 J2ME 的书过来,第一章必然有大篇文字解释这些匪夷所思的现象[1]。

J2ME 最吸引人的地方(或者说是吸引我的地方),就在于其针对的平台计算能力有限。这并不是受虐。运算速度、可用内存、以及最终生成字 节码尺寸的限制使得 J2ME 应用通常比较小巧玲珑。以早期支持 J2ME 的设备为例,可用的 Heap不过 200k,最终生成的代码(包含各种资源文件,如图片)不得超过 64k,这就使得面向这种平台开发的 J2ME 应用规模基本上不会超过一个人的能力范围。这样可以有效避免协作、过程等等令人不胜其烦的软件工程概念的引入,从而使开发人员重新回归到编写代码的乐趣中去。

开发环境

抛开感情因素,Windows 是进行 J2ME 开发的首选平台。为什么呢? 首先,开发 J2ME 所必须的开发包,只有 Sun 官方的 WTK(Wireless ToolKit)[2]对 Linux 提供了良好的支持。其它如 Nokia,与 Windows 版本的更新速度来看,其 Linux 版本更新相当慢且陈旧,而其它如 SonyEricsson[3] 和 Motorola[4] 则根本没有 Linux 版本的开发包。 其次,数据线。J2ME 的开发是离不开真机测试的。模拟器上在完美的代码到了真机上还是有可能运行得一塌糊涂。因此开发人员应该要有一个比较便捷的将 J2ME 部署到手机的途径。这些途径当中,数据线显然首选。而众多的数据线中,提供 Linux 支持的几乎没有。

必备软件

必备软件只有一个,那就是开发包。如 Sun 官方的 WTK,Nokia 的 Carbide.J[5],或者其它同类软件。以 WTK 为例,KToolBar 提供了基本的创建项目、编译、运行、调试、打包的环境,而 J2ME 代码,则可以用任何文本编辑器来写。

可选软件

用优秀的 IDE 开发 J2ME 可以事半功倍。目前绝大多数的 J2ME 程序员都使用 eclipse[6],IBM的开源 Java IDE。通过 eclipse 提供基本的 Java IDE 功能(如自动代码提示、重构、build 等等),通过 eclipseme[7] 插件管理众多 WTK,可以很方便将程序在不同的模拟器上进行测试。

另外,Sun 主推的 Netbeans[8] 也有很多人说好用。可惜我没有用过,不好妄下结论。不过曾经见过 Netbeans 的截图,甚至可以直接生成 J2ME 项目的页面流图,确实惊艳。需要注意的是 Netbeans(目前稳定版本5.0)也需要另外安装 MobilityPack 才行。最新 的消息刚刚提到,Sun 把 MobilityPack 开源了。

最后,值得一提的是,Java 的字节码很容易被反编译。因此几乎所有发行的 J2ME 应用都需要经过混淆。目前,市面上的非商业混淆器似乎只剩下了一个 ProGuard[9],不过值得欣慰的是,这款开源的混淆器很好用,eclipseme 也对其进行了很好的支持。

常见问题

svn+ssh

eclipse 已经集成了版本控制的能力,其默认集成的是 cvs。当然,subclipse 插件给 eclipse 提供了同样优秀的 svn 集成。通常,使用 eclipse 来进行各种 svn 操作是没有问题的。但是实际使用中发现,svn+ssh 的项目在 windows+eclipse 环境下无法正常工作。


参考资料

[1] SymbianOS J2ME编程指南

[2] Sun J2ME

[3] SonyEricsson Developer World

[4] MOTODEV

[5] Forum NOKIA

[6] Eclipse.org home

[7] EclipseME Home Page

[8] NetBeans Downloads

[9] ProGuard