Hildon input framework and plugins

啧啧,真是复杂的玩意儿。
半夜没事就看看这个东西,想想怎么让n900上有中文输入。他们提到的一个日本人在做的基于him plugin机制,加上ibus输入法引擎做后端的东西,我也google到了。 http://domaemon.blogspot.com/ 访问需要翻墙。看起来人家好像进展不错?我其实是很希望人家赶紧做好,那ibus支持的输入法应该就都支持了,比如中文。。

其实我对n900的sdk也不是很熟。n810时,我都编译了直接在真机上跑,n900还没有真机。虽然him plugin example已经更新,但我编译安装了,完全不知道怎么启用能看看效果,这点也比较orz.
我现在两个思路,简单的就是看看能不能修正scim for mameo,让它跑起来。据说只是获取焦点的问题。我通过比较him framework的svn历史版本,大概也能找出些需要的相关代码。不过nokia其实不太厚道。这些东西都是内部开发的,开发完一次性merge到开源分支上,中间的逐次修改的记录就没有了。上面的那个日本人的blog里提及为什么不用scim,一个是说用him插件机制容易切换系统原有输入法和cjk输入法,这点其实我没看出来,虽然我确实认为这个蛮重要的,并且如果用scim的确基本就不可能了。他还说,因为浏览器不支持preedit就不能用scim,这点我表示怀疑。这个preedit我没理解错,就是inline input,那种输入英文字母,还没转成中文前的时候就先在输入框里显示,一般还带个下划线那种。但是scim是支持over-the-fly模式的,就是自己弹出个小框来做预输入区,中文字完全后再送入客户端文本框,所以我觉得这应该不是个问题。当然,能不能捕获到浏览器内部的输入框就是另外一个问题了,这好像在很多平台上都是比较麻烦的事情。

另外一个思路,就是我打算用最简单的方法改改him或framework。我目前都不能确定him和him framework两个项目间具体什么关系。但看到点的一些代码中的事件处理,我相信应该可以做如下处理:就是关着键盘时,什么都不改,该怎么用软键盘就怎么用,也就不能支持cjk输入;打开键盘时,原来继续要传给him plugin的全部拦截掉,自己送给一个输入法后端变成中文,直接上屏。我是觉得这样子代码入口会比较好定位,折腾plugin的话,除了本来就要做的和输入法引擎的联调外,还要做些ui,以及一大堆需要补全的接口。

当然,我还是只是想想而已。我在him及him framework的代码中都加了几行debug输出,编译安装,竟然都没有这些debug信息出来,让我很失望。。不知道是什么原因没能替换成功。再说了。。

台湾行6-周末高雄游

写了前五篇就懒了,剩下的拖了好久,这篇的内容是11月7号和8号的。
======
我琢磨了一晚上,也没有能做出什么好的旅行计划来,只好先到火车站看看。大概么,有两个选项,花莲或者高雄。我退了台北的房间,和人家预订了下周一开始回来住,寄存了行李,背着我的电脑包就出发了。嗯,没有了电脑,我就活不了啊。因为起得没有预期的早,十点多才来到车站。台铁,高铁售票都有售票机,和买捷运票差不多。

不过台铁买票可真复杂,先选从北到南,还是从南到北,这步我根本不能理解是为了什么。然后选品牌,大概就是说有三家在运营,接着才是选从哪到哪和日期时间。然后告诉我已经没有票,这时只能回到第一步重来。这是买去花莲的票,因为高铁不到花莲。在选了最近三四班车都没有票后,我实在懒得再试了,就决定不如坐高铁去高雄好了。听说高铁亏损严重,应该就是太贵没什么人坐。果然,票很容易就买到了。高铁几乎平均十分钟就有一班,频繁得和捷运一样,而且只有一条线,从北到南,左营是最南端一站,去高雄就是到这站。选起来很方便,差不多两三步就完,就是确实挺贵的。台北到高雄,去时有八五折,一千二百多台币,回来就是一千四百多。我也不知道这打折有没有规律的,按说不像是按时间段打折的。买五分钟后的高铁票都没有关系的,进站就和进捷运一样,也没什么候车室,看准方向上车就好了。嗯,不过高铁好像不同班次也有区别,台北到高雄有的是一个半小时到,有的是两小时到,据说时间短的经停站少,时间长的是每站都停。经过我亲身试验,反正短的确实好像中间只停两三站。没坐过时间长的那个。对了,售票机可以刷信用卡。 read more

半夜发烧记

我越来越觉得自己是个爱护自己的好孩子了。

话说我下午五点多太困,就睡了半个小时,起来就觉得头晕晕的,大概是有点冻感冒之类,不过我没有太在意。吃吃饭,上上网,看看电视,打发着时间。到了12点多,就头晕得厉害,我也分不清是感冒呢,还是本来就困了,我作息时间本来就不规律,自己也算不好的。不过既然头晕了,还能怎么着呢,一改往日两点左右才睡觉的习惯,这十二点半就睡了。我其实有想着睡前是不是先吃点感冒药,可是找找麻烦,我自己都头晕着呢,生病了一个人是比较麻烦。想到我上个月这时候也感冒发烧,那次好像37度6,我都没去医院,吃了两包板蓝根过了四五天就好了,我一直是认为上次应该是得甲流了。 read more

台湾行5-第五天

其实过来工作也不是很忙,这天起得晚了些,我就打算不去客户那边了。本来有计划周五出发去其它城市,然后周一回来,这样有四天三夜出去玩,也不少。不过前一天没去成夜店,加上我还没有想好去哪玩,就先留着了。早上还是做了些事情,不能什么活都不干。

十一点多完事出门。我有听说淡水风景很好,想去看看。前一天坐过捷运,知道有这一站。虽然还不知道出站以后怎么走,不过到了再说吧,反正时间还多,大不了就打车问问喽。这次的捷运更加空,我也有机会拍照片。捷运车箱还是和北京地铁城铁很不同啦,果然比较像火车。车箱很长,每节都有四个门开。好像大多时候都是露天段,但也不太像城铁,捷运好像更靠近地面一些,就是好像市内段的火车一样。所以沿途看风景更好,比如下面就是临到淡水站时,在车上拍的。 read more

台湾行4-第三四天

工作的日子总是类似,又有些忙,就两天合起来一起写吧。

这两天台北的天气好得一塌糊涂。天空好蓝好蓝。我原来以为是北京污染太严重,但是后来想想去欧洲时,或者杭州成都啊,都没有看到过这样好看的远景。大概是这些城市也都高楼林立,目不及远吧。早晨八九点出门,一路坐在计程车上看着窗外,心情都格外好。在高架桥上,能看到好远好远,和风景画上一样。我突然开始喜欢上这个城市。不过我和司机师傅夸赞说你们台北天气真好,他打击了我一下,说你这是向外看,从外往里看也是灰蒙蒙一片了-_- read more

台湾行3-第二天

在台湾的第二天,就得开始工作了。去客户那边,在台北县新店市。所以,台湾的行政规划分法和大陆有不同啦。台湾省下面就是县,然后县下面有县辖市,不过有两个市不同,就是台北市和高雄市,这两个是直辖市。没有错,他们这也叫台湾省的,因为中华民国下还有个福建省,金门那些地方他们就算福建省。路上的车牌,有两行,上面一行小字写“台湾省”,“台北市”或者“高雄市”,第二行就是大大字体的一个号码了。我第一天打车时就问司机,这第一行这么小,肇事逃跑时看得清么。司机说,不难认,因为一般总共就上面说的那三种可能性。当然,也可能他们这一行没有意义啦,光有车号码就够了,不像大陆前面要加省。
read more

台湾行2-第一天

我坐的是国泰cx564的航班到台北桃园机场的。往返含税也就1200多一点,好便宜啊。机上乘务mm们有香港的,也有台湾的,长相有好有坏,平均成绩只能算普普啦。不过我觉得她们工作服不错,不像国内那样死板严肃。而且刚上飞机,她们还和大家聊聊天,有好嗲的台湾音。没图没真像,不过,我没好意思拍。

前一天晚上没睡好,大概只睡了四五个钟头吧,飞机上困得要死,除了吃点心时醒着,其它时间基本半困半醒间。不过本来也就一个钟头多一刻的飞行时间,很快就到啦。跟着大家走啊走,就先到证照查验了。排队时我才发现,原来同机的有一个大陆旅行团。他们要先内部排队,我赶紧趁这时间就先拍前面去了。我突然觉得一个人出大陆出差还是不太方便,有什么问题都没个同伴一起想下,好像什么都要靠自己。 read more

台湾行1-出行准备

大陆同胞现在去台湾还不是很方便,当然,事实上不止是台湾啦。我们公司和htc有合作关系,之前一直是新加坡同事过去的。但总不好让人老一直出差着,尤其是他夫人最近两周要生他们第二个小孩啦,我就算是过去帮忙顶差喽。不过我对这种出差,还是比较有爱啦,中间的周末可以自己安排。希望工作不要太忙,这样平时晚上也可以逛逛。

提前一个多月我们就开始准备了。其实那边希望我尽早去,当然也尽可能时间长点喽。问过旅行社,要么作旅游签去,可以让我脱团,这样最快可以赶上十一的团。不过那样只有7天的时间,而且十一我们是放国庆假,我也不肯,所以还是办时间长一些的商务签证。我觉得办这个还是比较贵的啦,含北京出发的往返机票是5000,不含机票是2500。因为我有其它安排,所以就没有连机票一起。需要准备的东西并不是很多,像是护照,身份证,户口复印件和照片一类,很平常。为了少办一个国内这边需要的台湾通行证,就必须经由第三方入台的,就是不能直航啦,享受不到大三通的便利了。一般自然是挑的经香港去台湾。

但旅行社办这个连港澳通行证都不用。话说我的港澳通行证有两次签注,却一次也没用过。第一次时户口还在学校,北京户口可以做自由行,当时办了一年的,后来反正没找到合适时间就没去。今年四月回家时,也加了次签注,原来没想到这次到台湾,只是想去玩的,但是当时不知道怎么想的,只做了三个月内的签注,然后还是要跟团。。

商务签证需要对方公司出邀请。听说旅行团也可以代办的,不过要五万押金。我们还是让我们合作公司出邀请了。不过不知道是公司申请流程复杂,还是台湾人做事就是有些拖拉,盖个章拖了一周,我也是10月26号才拿到台湾的入出境许可证。在这之前半个月,我就已经收到旅行社寄回的护照了。上面加了一页马来西亚的签证,那页纸上竟然还写着价钱,80块钱,真便宜。
read more

Android用NDK和整套源码下编译JNI的不同

前些天要写个jni程序,因为才几行代码,想着用ndk开发可能容易些,就先研究了下。不过最终我的代码虽然只有几行,但需要libdl,因为用到了dlopen一类的函数,只能又换到用android源码体系下编译。
不过两个都用了下,就发现了些不同。我其实并不能确定这些是不是实际存在的差异的,我只是拿ndk的sample和我见到的android源码里的jni代码做的比较
1. ndk支持的库很少,所以用以前最好先看看自己需要的功能是不是已经包括了,省得白忙活。不过人家是有解释的,说ndk里有的库才是稳定的,其它的建议你不要用。嗯,google总是这一套说辞,不公开的api也是。至于要看android源码中多了哪些库,make modules后grep一下lib开头的应该就是了,不过也不是所有都能用啦。
2. 注册函数的方法是不同的。举例说,我在com/evan129/jnitest/jniutils.java有个native int foo()方法,需要在jni中实现
在ndk中,你只要实现这个函数,然后函数名是以jint java_com_evan129_jnitest_jniutils_foo(jnienv* env, jobject thiz) 命名既可。也就是说,如果你的jni只要实现这个函数,并且功能也很简单的话,那么你的jni c/cpp文件里只需要这一个函数就完事了。
但在android源码中编译jni代码是不同的,jni中的函数名无所谓。不过你至少还需要加一个
jniexport jint jnicall jni_onload(javavm* vm, void* reserved)方法,这个方法你可以找个现有的复制一把就行,检查运行环境的。然后主要是这个方法中会调用(*env).registernatives函数,在这里把jni中的方法和java文件中的方法关联起来。
看起来像是ndk自动补上了这部分工作,我并不清楚原理啦。
3. 有个很诡异的区别,自动传入的jnienv* env好像不是一个东西。因为在android源码中使用这个env一般是如env->newstringutf(…),而ndk中sample里的一处是(*env)->newstringutf(…) 这env和*env差很大吧。但两处函数传入的都是jnienv* env,我只能怀疑jnienv的定义是不是都是不同的。

末了,就是说下我这个很简单的jni折腾了我两天的一个问题。如前所说,我是用android源码来编译的,自己在packages/app/下建了pinyinjni工程,下面有个jni目录,每次直接用mmm packages/app/pinyinjni/jni来编译。jni目录下的android.mk中指定的名字是这样的local_module := libpinyin 每次编译都很顺利,生成了libpinyin.so。但是我在java文件里,system.loadlibrary(“libpinyin”)总是失败。感谢paranoia@newsmth帮我解决了这个问题,告诉我在loadlibrary时用”pinyin”。但是,这个事情实在太奇怪了,那文件名是libpinyin.so啊,而且我在这里用/data/data/…/libpinyin.so这种完整路径也会失败,我以前虽然没写过jni,但调用过,用完整路径指定jni so文件应该不会有问题的。或者,从另一个角度想,如果我local_module的名字不是用lib开头的,那它调用时应该用什么名字?这个”lib”前缀又是哪步删除的?我没有多做测试了,但是猜想ndk中应该是没有这种诡异的问题的。

智能手机进入高速发展期

首发于ifanr.com

题目好像还是有些不对,应该说智能手机已经高速发展了一阵子了吧。iphone吸引了大量的开发者为其创作软件,也吸引了越来越多的用户给自己的手机下载点新软件。我记得国内有些人对智能手机的定义就是,能够安装第三方软件。palm, windows mobile, s60当然都可以,但我观察身边的很多这些手机的用户,仍然不知道同步,不知道可以装软件,或者说至少没有这方面的欲望。从这点上来说,iphone开创了一个新的时代。iphone再好,也只是apple公司自家的甜苹果。google为我们带来了android。它并没有给用户带来巨大的变革,但给众多手机厂商指明了方向。wm平台也有着众多的手机厂商跟进,不过我从他们对android的重视体会到更多的热情。还要感谢mtk,让众多国内山寨厂体会到做手机也能赚钱的,长远来看,他们也是有意识到智能手机重要性,逐步跟进的(插一句,我很欣赏meizu,虽然我没在用m8)。iphone让用户拥抱智能手机,android让厂商拥抱智能手机。

相比起“智能手机”这名字,我更喜欢pda的中译名,“掌上电脑”。从一个理工类出身的手机开发者角度看,目前我还没有体会到手机智能到哪,我期待着哪天,我就对着它说,“帮我约xx晚上一起吃饭吧,挑个离我们家近点的,哦,最近上火,不要太辣口味的”,然后5:30pm 日程提醒响起,指示好路线目的地。好吧,其实这不是重点,我是想来夸下现在智能手机的电脑化的。palm,wm繁荣的时代,就已经有了企业用软件,但毕竟只是小部分行业和人群使用。blackberry带来了电邮的革命。可惜,大多人的工作不只是收发邮件这么简单。

iphone带来了浏览器的移动化。优质的浏览器体验和网页支持,让很多网站服务只需要较小的改动,就能让用户不再需要笔记本电脑,有个手机就能完成这些功能。pc上的联网应用,也是从c/s向现在b/s过渡得多。不说办公系统脱离胖客户端,变成web版;网页版的gtalk和web qq的出现,让我也很惊讶,原来web可以做的这么多。那么,iphone把握住了这个发展方向。曾经的网站,发展大了,才会去考虑做手机客户端,而且只是一个锦上添花的事情。网站开发人员鲜有熟悉手机开发的,不论外包,新招人,要理解需求,都给服务推向手机端带来了困难。即使同个手机平台,不同的分辨率适配等都不是件容易的事情。今天,web程序员只要改个布局就可以,而如手机版的gmail,facebook,给我带来不亚于本地客户端软件的体验。

不过还是要承认,我们的服务不仅仅有web页,或者说现在的手机浏览器还不能完全发挥手机的全部功能,比如还没有在浏览器页面里发个短信的。而android从另一个角度拉近了手机和pc的距离,就是开发简单化。java的移植性和众多的开发人员给这个平台注入了活力。会写c代码的人,不是马上就会写palm, s60的程序的;但是会写java代码的人,学习android是很快的。android只是对ui代码移植性差,对后面的逻辑代码,类库支持非常好。我们就把一般用在服务器上的web搜索引擎的类库,直接放在android上面使用,相当完美。嗯,当然一部分也要归功于当今的手机硬件发展。让开发人员不必再去斤斤计较那一点点内存,掌握那么多手机开发必要的计较,让更多的程序员容易的来为手机平台做开发。

这里,还要提下nokia的maemo平台。相较于android要重新开发ui部分,更不用说以前的那些开发复杂,几乎没听说过原生第三方程序的linux平台,maemo对于桌面端的移植带来了变化。我曾经把一个linux pc桌面上的bbs浏览软件,没有改任何代码,编译放在n810上跑,表现非常好。maemo上可以带来完整的pc浏览器,office编辑套件,几乎所有你pc上用的软件。只是,有点小可惜的是,我指的是linux桌面的软件。客户来说,并不是以前的linux手机很弱,只是没有赶上好时代。大概它们要是也用了这么大的分辨率,用上现在这么高主频的cpu,也有这么大的内存容量,也可以这么玩。但就现状来说,就只有这月就上市的n900做到了。有不少基于linux自改界面的手机,也有很多和linux pc桌面相像的移动设备,甚至还有装了win xp的不比手机大多少的移动设备。但是,n900带来了它们的结合,一个和普通桌面linux gui有较好代码级兼容的手持电话设备。我也不是什么都玩过,我不能确定,是否已经有类似的东西。但我还要说,它还是nokia出的,大公司的品质。apple出iphone,google出android,大概背后都需要强力的推手。我并没有忘记wm,虽然我曾经,甚至现在还是不太接受它的用户体验。但是,微软嘛,不说自己系统慢,说你硬件不够好啦。现在,手机的速度越来越快,屏幕分辨率一直在提升,曾经的pc显示器也才800×600。或许哪天,你的wm手机上跑的是完整的和你在桌面上用的是一模一样的word,excel了。

如前所说,曾经的软件,网站都是在pc上发展好了,再来考虑手机平台。我感觉到,现在这个差距越来越小了。时下流行的是sns网站和服务,且不说twitter这样离不开手机用户的,facebook,国内的校内网也都不能忽视手机平台了。iphone带来用户思路的改变,android带来厂商对智能平台的支持,加上网站服务商对手机平台的重视,何愁智能手机不更快更好的发展,拉近与电脑的距离。

现在几乎没什么新的pda出现了,但我们的掌上电脑并没有消失,只是它现在多了电话功能。展望未来,我不好说是笔记本取代手机,还是手机取代笔记本电脑,但希望那时,平时出个门不用带这么多东西了。那时候,电力大概不是问题,我们有核能电池,有无线非接触式充电;显示屏大小不是问题,戴个眼镜,直接投射入眼就好了;输入也不是问题,右手在左手手心写个字,就出现在屏幕上了,甚至是脑子里想一个字的样子,它就识别了。一切皆有功能,科技以人为本嘛。

祝贺ifanr周年庆,希望ifanr越办越好。

Page 2 of 161234510...Last »