博文

苦水潭不能访问吗?

苦水潭迁至blogger已经有段日子了。可是前几天,自己突然无法登录新地址。以为是一时故障,未作理会。于是又拖延了些日子。大概有一个星期了吧,还是不行。 难道已经投靠了google的blogger,世界第一blog服务提供商,竟然和某些国内厂商一样么?? 一封写给blogger开发团队的email,也是石沉大海。 正在灰心丧气,准备再寻blog的时候,传来“国内blog实名几成定局的消息”。于是开动脑筋,莫不是GCD先下手为强,把国外的blog先行隔离了吧。尽管只是猜测,但有wikipedia的前车之鉴,料想GFW也没有什么不敢做的。 事实很简单。gfw+blogger搜一下,结果大把。看来真的是GFW干的。 生平最恼无端被人横加困扰。人不犯我,我不犯人。人若犯我,我必不屈服。更何况前有GFW,后有实名制,教我又如何有后路可退! gfw+突破,好在结果仍旧大把。为了自己的本本能用,gfw+linux等等,最终确定了tor+privoxy的组合。 Tor与Privoxy安装设置指南 Firefox+Tor必备教程 Linux 下网络穿墙术 而如我般惯用firefox的人,则更幸运,现成的vidalia可用,幸甚至哉。 Vidalia官网 今后的日子,苦水潭依旧会停留在blogger。给各位看官带来的些许麻烦,实在抱歉。只是我不能屈服。也请各位一道不要屈服。无论是真实世界,还是虚拟网络,闭关锁国,永远不会有光明的未来。

工程师、售后和技术支持

终于有点明白为什么MCK称IT支持人员为IT Specialist,而非某某Engineer了。 或许在外国人的眼里,被冠以Engineer头衔的,天生是些喜欢创造的人。而这类人,绝没有很大的耐心去跟别人解释,更不要说重复的解释。 可惜公司很小。一个项目下来,基本上项目维护期内的事情都要由当初负责开发的工程师来担当。这几天被问的尤其光火。就好像是一个人来问你打造一把宝刀,等你把刀造好给他之后,他却来问你这刀为什么只有一边有刃一样——两边都有刃的那是刀么!?

相声、中医和中国传统文化

前些天偶然看郭德纲在天津台做节目。当被主持人问到关于“传统相声”的问题时,有一段很精彩的叙述。可惜没有录像,无法详述原文,大意如下: “说到创新,比方说一个大厨,高级厨师,现在要发明一道新菜,这当然可以,前提是他都明白这些个原料怎么回事。 我们现在的创新呢,好比是老字号饭店,来了个新人,进厨房一看,鸡鸭鱼肉、原料齐备,菜刀、大勺,什么家伙什都有,但是也不明白都是干什么的。先拎起来菜刀:‘这干嘛使的,不要!’把这些个弄不明白的,一股脑扔掉,然后开始创新,琢磨着先用这个鞋啊,把鱼拍成肉松估计能好吃,给大伙尝尝。 但是你觉着这么弄好吃,但是人家未必爱吃。我的意思你大概明白了吧?” 这一番隐喻着实令人动容! 岂止是传统相声,我们中国宝贵的传统文化,如今莫不面临这样尴尬的境地。前阵子正好人大开会,竟有代表提出“废除中医”,真是令人痛心!民选代表尚且有如此认识,如何让人能够梦想“中华民族的伟大复兴”? 和中医一起被打倒的,还有很多古人流传下来的思想财富。孔孟儒学,老庄道术,乃至释伽佛门,“五四”以后都被打成毒草,至今难以正名。这其中尤以孔家店受的委屈最大。今天,我们固然不能责怪当年大打出手的革命青年,时势所趋,更何况孔子的思想又经过了几百、上千年的讹传。 西方的自然科学固然先进。但是论及人文学养,全球没有哪个民族如我们中华民族般五千年(少说是这个数)香火不泯而积淀深厚。尽管中国人和外国人“习相远”,但是为人处世的根本,却“性相近”。 要实现中华民族的伟大复兴,其根本在于文化的复兴。否则,跟着某些年轻的列强走历史兴衰的老路,不会有什么前途。问题在于我们这一辈,如何“为生民立命,为天地立心,为往圣继绝学,为万世开太平”。

夜宴,流氓软件以及其它

最近有两件事炒的很火。 一是夜宴终于出炉了。骂声一片。大有连冯导都堕落了的呼声。 二是奇虎和雅虎关于流氓软件的口水仗打得不亦乐乎,近日风闻又有民间组织起诉所谓流氓软件。 刚好前些日子和网友在论坛上讨论国内软件业的 盗版 情况,心理颇有些感慨,觉得这林林总总的背后,很多东西都是相通的。 影视作品和软件具有很多类似的特性,比如其物理载体的价值可以极低,可以通过互联网传播,可以相当容易的进行盗版。因此在某种程度上,可以认为影视作品是一种特殊的软件。这使中国的电影产业和中国的软件产业具备了相似性。 无论是电影还是软件,都必须在商业性、艺术性和大众性之间取得一个平衡。这是目前我们生活的时代所决定的。创作者追求艺术性,投资方追求商业性,受众认可大众性,这种制约在某些情况下是一种完美的平衡,在另外某些情况下就会变成一种无奈的悲哀。比如中国的电影,还有软件。 尽管可以找到很多理由,比如还是国民收入太低,影片或者软件本身的素质太差等等等等,不可否认的是,这些年来,国人已经被惯坏了。我们已经习惯了免费享用这些可复制的二进制数据。从而把电影人和软件人推到了一个尴尬的境地。一方面,他们有自己追求艺术的理想,另一方面,他们不得不在现实世界中生存下来。 既然不能直接从使用者上收费,于是,越来越多原本不属于电影或者软件的东西进入其中,比如广告。于是就有了冯导每次贺岁片中不断增加的广告品牌,于是有了越来越流氓的国产软件。 在市场经济环境下,消费品具有取悦消费者的倾向。这种情况下,消费品的发展方向是否良性,取决于消费者的水平。 在整体消费文化低下的中国市场,好产品很难做。市场竞争的结果,是越俗的产品,拥有越好的销量,能够攫取越多的利润。这点上,史玉柱的脑白金、征途,神舟的电脑,盛大的传奇,韩国的三星电子以及大量泡菜网游深谙其道,赚到了大票的银子。很多早期社区的转变,比如猫扑元老与小P孩竞争的失败,也缘于此。很多国际品牌到了中国市场的水土不服,最终都选择了降低自己产品在中国区域的品质来提升价格竞争力,也缘于此。 或许,这个阶段是成长过程中的必经阶段。但是,自己种的苦果,自己总归要尝。如果今天的流氓软件以及外贸化的中国电影还不能警醒我们,那么明天,我们必将尝到更多的苦头。对于历史的欠债问题,“人间正道是沧桑”,是取不得巧,偷不得懒,更躲不过的。今天我们对于自己的继续放纵,只会最终扼杀我们自己的产业。 正...

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 部署到手机的途径。这些途径当中,数据线显然首选。而众多的数据线中,提...

不要把非项目文件扔在workspace里面

workspace,当然就是eclipse的工作区。之前一直都这么做的,资源、其它脚本,统统都在workspace里面,尽管其中相当一部分根本不受eclipse管理。 一次偶然的机会,eclipse在build workspace的时候(这种操作eclipse会在很多情况下进行,比如refresh某个项目的时候)死掉了。进度永远是0%,而且无法正常退出,只能强制杀掉进程。 最开始以为是windows几天没关,又犯病了,重启之后,故障依旧。 于是留意eclipse在build workspace时候给出的提示。原来是说几个非项目的文件夹 的路径和eclipse记录的不符。eclipse还善意的提示我将这几个“项目”按正确路径重新导入即可…… 一不做二不休,把几个非项目文件夹请出了workspace。重启eclipse,故障解决。 看来,还是不要太相信IDE!!

手机 Java 之怪现象

ok,我承认题目是用来吸引眼球的。但是,不能不承认的是,这篇文章会很有用,很有用……尽管目前可能只是对我有用……因为我记性不够好…… 下面记载的都是手机 java 实现中各种奇怪的毛病,bug,或者……特性,是根据某项目的开发经验总结出来的。但是涵盖的手机型号还是有限。因此很有可能某些“特性”会存在于更多的采用了相同 JVM(比如平台相同、生产厂商)的手机上。 == 早期 S60 的内存泄漏 == 这个 bug 可以上溯至 2003 年,甚至更早。表现为 java 应用中如果使用了 Class.getResourceAsStream("本地文件") 无法释放其占用的内存,是的,没有任何办法,无论是调用获得的的 InputStream 实例的 close() 或将其设为 null,甚至显式强制 System.gc(),都没有效果。结果就是至少和本地文件同尺寸的内存成为了无法回收的垃圾。这个问题还影响到以 Class.getResourceAsStream() 为基础的 Image.createImage()(这个是最要命的,如何能够不使用图片资源呢!)。 这个 bug 据说在新的 S60 上已经解决了。但是 Nokia 3230(4.0526.2ch)、Nokia 7610(6.0525.0ch)都存在这个问题。对于这些个有问题的机型,在 java 程序中是无法完美解决这个问题的,只能尽量避免。比如集中、统一载入资源,永不释放(也就是说,尽量控制泄漏的次数)。当然,这会对已有代码造成很大影响。毕竟手机 java 应用是内存受限系统的典型,大多数情况下,珍贵的内存中应该只保留需要的资源。 == 键盘响应事件 == 在 MIDP1 中,获取键盘事件只能自己实现 Canvas.keyPressed()。但是 Motorola E398 和 SonyEricsson K700c 的实现却很奇怪。表现为左右软键有可能在这个方法中捕获不到。而是否能够成功捕获,取决于 keyPressed() 方法中代码的行数…… 我承认我没彻底搞清楚这其中的玄机。鬼知道 Motorola 和 SonyEricsson 是怎么实现的 JVM。我只知道把 keyPressed 中的所有代码提取到另外一个函数中,在 keyPressed 只把参数传递给新函数,问题就消失了…… =...