FontRouter两周年回眸

  回顾FontRouter的发展历程,转眼已经历了两度春秋。

  2004年,那段激情燃烧的岁月里,经过好友的推荐,我来到了当时国内最大的Symbian智能手机论坛“WDA中文网”。针对Symbian中文本地化支持的研究潮流在那时几乎长期居于WDA学术氛围的主导地位,涌现了很多像hsz76、tomken这样为着Symbian中文优化不懈努力的斗士,他们对Symbian中文支持力求完美的精神深深打动了那时才刚刚接触Symbian的我。FontRouter的计划就是在这样的背景下诞生的。

  2004年10月15日,FontRouter 0.1 beta 在WDA上发布了。虽然这个版本尚没有真正运用Open Font System的力量,但它所创造的影响已经为FontRouter赢得了众多的支持者。“从MMC卡加载字体”这一重要的突破为当时所有研究Symbian字体的斗士们带来了福音,因为那时候对字体的不慎修改常常会导致NG上最可怕的灾难——白屏。一旦字体可以从MMC卡加载,就意味着可以从此远离“白屏”的烦恼了!

  2004年10月18日,FontRouter 0.8 beta 诞生了。为什么我用“诞生”这个词来描述这一版本的发布呢?那是因为,从0.8开始,FontRouter首次完全实现了通过Open Font System构架对中英文字体混合显示的支持。这一实现方式从根本上颠覆了当时以字体修改为手段的Symbian中文化研究思想,它所带来的影响甚至直接超越了NOKIA官方提供的中文支持。

  中英文字体混合显示,同屏渲染的效果绝非NOKIA中文版手机所能比拟的。用过英文版机型的朋友或许都会对多样化的英文字体效果情有独钟,LatinPlain12、LatinBold12、LatinBold13、LatinBold17、LatinBold19五种界面字体共同塑造出了Symbian优雅的英文字体风格。可惜的是,当相应的英文机型被NOKIA中文化之后,为了屈就于中文字体的尺寸,五种英文字体被“缩减”成了两种,而且字模也远没有原英文字体美观。更可笑的是,在NOKIA中文机型中,部分应用软件或者Java程序竟然会出现中文显示为“口口”的情况。FontRouter的出现从根本上扭转了这一局面,从此中英文字体的显示风格可以相得益彰,从此无论应用软件还是Java程序都告别“口口”。以致于在相当长一段时间内,发烧级的S60机友甚至偏爱英文+FontRouter更甚中文机型。

  注:“口口”是当Symbian在当前字体中找不到Unicode对应的字模时采用的替代符号,形如“口”而得名。

[待续…]

第一次自己动手修家电

  长这么大,第一次自己动手修家电……

  年少时,也曾动手修过收音机、电动飞机模型之类的玩意儿,不过要说到家电,还真从来没拆开过呢。其实这次修的不过是寝室的电风扇而已,虽然也勉强归为家电一族,但整个过程纯属于那种技术含量很低的半手工活。

  风扇不转已有好些时日了,在深圳步入这种“秋不高气不爽”的天气后还真缺少不了它呢。于是,今晚回来便将它给彻底的大卸八块,之至最核心的电机裸露在我面前为止。这敲敲,那打打,左听听,右嗅嗅,再直盯盯的凝视了好一阵子,还是没能找出故障所在;插上电源调至大档后,能略微感觉到中轴的颤动,看来电路问题的可能性较小,多半是积灰太多,润滑不足。家中没有机油之类的润滑剂,搜索了半天,最后好不容易找到了一点类油脂微粘稠略带异味的糊状物(这玩意儿的学名我还是不说出来的好……),总算可以充当一下润滑剂了。怎料,添加进去后接通电源,电机仍旧没有一点起色。

  罢了罢了,再也想不到别的办法了,将零件都装回去了事。全部组装好后,环视四周,还好没有多出一个半个的零件来。本着打死也就再试这么一次的心理,最后一次接通了电源,谁知扇叶竟然很不领情的“呼呼”转了起来,愣的我在一旁目瞪口呆……

  尽管到头来都没弄清楚是咋个修好的,不过事实终于又一次证明,上天总是会眷顾那些付出过辛勤劳动的人!

Timer in Symbian Development

(1)TTime::HomeTime() / TTime::UniversalTime()

  最常见的时间获取手段,精度不高;因涉及一定的运算过程,效率较低。适用于需要以常规“年月日时分秒”方式使用时间的场合。在EKA2平台下,其精度与低阶系统时钟(Nanokernel Timer)一致,通常为微妙级别。通过 HAL::Get(HAL::ENanoTickPeriod, result) 可以获的具体精度。
  注意:它们使用的是系统时间,这是可以被其它进程修改的。

(2)User::TickCount()

  传统的Tick计数器,精度通常仅为1/64秒(可能随硬件有差异),适用于精度要求较低的场合。通过 HAL::Get(HAL::ESystemTickPeriod, result) 可以获得具体精度。
  注意:在休眠(Standby)状态下,TickCount将停止计数,所以User::TickCount()在休眠状态下将“损失”计时!

(3)User::NTickCount()

  低阶系统时钟(Nanokernel Timer),通常提供微妙级Tick。通过 HAL::Get(HAL::ENanoTickPeriod, result) 可以获得具体精度。
  注意:Symbian OS 6.x 没有此API。与TickCount不同的是,User::NTickCount()在休眠状态下不“损失”计时。

(4)User::FastCounter()

  返回值类似于Tick,提供Symbian OS所能支持的最高精度,通常比TTime::HomeTime()更准确。(如果硬件不支持high resolution timer,则毫秒级时钟替代)而且,因为它采用快速的exec call读取一个硬件寄存器的数值,效率很高。通过 HAL::Get(HALData::EFastCounterFrequency, result) 可以获得其具体精度。
  注意:在每次终端从休眠状态激活后,它将同步至正确的数值,也就是说User::FastCounter()在休眠状态下其实也是不“损失”计时的。

  另外,User::After(), CPeriodic也会在休眠状态下“损失”计时,所以在手机这种特殊的应用环境中,需要特别注意不同定时器在“休眠”状态下计时的差异。

DreamHost九周年——服务升级、庆典专享优惠码

  今天收到DreamHost Newsletter,原来DreamHost已经九岁了。到官方网站一看,果然装修一新!

  庆典活动中最利好的消息要数“服务升级计划”:空间容量扩至10倍!(没错,现在L1即可拥有200G!)每月带宽翻倍!(L1:2TB/month)包括每周递增的容量也享受同比增幅。无论是新用户还是老用户均可享受到!

  不过,按照目前双0%的使用率来说,这个升级计划对我来说只能起到心理安慰的作用,最重要的还是看DreamHost如何改善上个月连续出现的一系列网络问题。

  说起网络问题,9月份的状况确实让人很担忧。从SiteUptime.com给出的统计数据来看,我所在的服务器9月份一共出现了8次Outage(其中2次还发生在我更新Blog的时候),Downtime约4小时30分钟(0.626%)。不过,从最近这一周多时间的表现来看,似乎确如DreamHost在Newsletter中用了整整一个章节所解释的那样,基本消除了网络故障。但愿DreamHost能在后续的时间里以实际行动证明这一点。

  另外,DreamHost如同往年一样,也推出了九周年庆典Promo Code:9999,不过它只能比普通推荐码多享受不到3美元的优惠,而且还仅有今天一天的有效期,超过10月4日即作废。看来,DreamHost是越来越小气咯……

胜利抵达峨眉金顶!

今天又是充实的一天,早上8点从息心所出发,下午4点就抵达了金顶。一路上大家士气如虹,行进速度大大超越预期,达到了4kph。接引殿之上的旅程基本已是walk in the cloud。:) 云中雨的感觉就好比《第一次亲密接触》中那浪漫的香水雨,轻柔拂面,微湿脸颊,分不清是雨水还是汗水。整个金顶完全笼罩在云雾之中,让人有如临仙境的遐想。伸出手去,轻轻的,想要攫取一片云彩,它却从指间不经意遛走。