把 ZY 给我倒过来!──解决德版 G1 ZY倒置问题

我就想不明白了,为什么我刷了一个没写是德版 ROM 的 ROM ZY 也会倒过来呢?难道能辨别机器的硬件?判断我是德版就给倒过来了?唉……自己动手 fix 吧。总不能因为这个就换个 ROM 啊。

唉……会盲打也是错啊,专为会盲打的同学准备:

首先把你的 ROM 的那个 zip 解压,解压出来之后,进到 /system/usr/keylayout 里面,这里面这写文件就是键盘映射的文件了,key 21 就是键盘中上的键,key 44 是键盘左下的键。于是看哪个文件里 key 21 后面是 Z 的,都给我改成 Y;key 44 后面是 Y 的,都给我改成 Z,就 OK 了。查找可以这样:

grep "key 44 " ./*
grep "key 21 " ./*

替换的话,俺也不会 sed、awk 啥的,就手动来了。反正也不多,我就找到一处。

这样新的键盘映射文件就准备好了,用 USB 线把手机连接在计算机上,拿出 adb:

adb remount
adb push trout-keypad-qwertz.kl /system/usr/keylayout/

仿照上面的命令把所有修改过的文件都用 adb push 复制到手机里去。(adb remount 只需要一次)

重启就 OK 了。

没用过 adb 的放狗搜索一下,在 Android 的 SDK 里有。

德版 G1 测试通过,听说德版里程碑 Milestone 也有这问题,应该也有效。

Good luck.

Tags:,,,

Related Posts
Posted in Information Technology | Tagged , , , | 1 Comment

Android 观察

本文为 “首届 Google 暑期大学生博客分享大赛——2010 Android 篇” 参赛文章。

接着上篇 Android 周年纪念接着说下去:

浪迹 Android 圈也一年了,要说长不长,要说短也不短了……那我就说说一年中自己对 Android 的观察和思考。Android 优秀之处上篇已经说了不少,那我来换个角度评价一下 Android,主要说说不足和问题。

先说说 Android 系统本身的问题。Android 虽然有很多令人兴奋的功能和组件,但是仍然有很多地方做得并不好,而这些地方主要在细节方面。首先是联系人的排序问题,Android 的联系人无法按照中文拼音顺序排序,这可能是由于对中文用户并不重视,(据说)已经支持对日文进行排序了。我看了几篇文章,试着自己实现,发现都不完美,国内的 ROM 可能已经实现这个功能了,我没有尝试。按理说 Android 不应该这么不重视中文用户,毕竟还特别为 Android 做了一款字体

接着说联系人,无法修改联系人分组的问题实在很纠结,可以选择显示哪个组的联系人,就是不能改分组,难道让我在笔记本上改好吗?Ad-hoc 网络问题,为啥 Android 就不能连接 Ad-hoc 网络?虽然有解决方法,但我觉得这是官方应该提供的。VPN 密码问题,VPN 的密码无法保存,强制的安全性扼杀了用户的便利,扼杀了用户选择的权利。我认为 Google 应当更加注重细节,细节做不好,用户体验做不好,老用户会在长期使用中感到不快,进而影响 Android 的口碑。

这一点或许应当向苹果学习,虽然初代 iPhone 刚刚出来的时候缺少很多功能,但只要是苹果提供的功能,都力求做到最好,缺少的功能在日后补充,而不是发一个半成品出来,这样会让用户很反感。我说一个亲身经历的例子,那时候还是 Android 1.5,我在写一封邮件,得益于 G1 的实体键盘,我很快写了几百字,正当停下思考的时候不小心碰了一下 Discard 按钮,瞬间,几百字灰飞烟灭。遇到这样的事情,用户肯定会感到不快,有的还会跟身边的人说,这样不光是几百字的邮件没了,Android 的口碑也没了。升级到 1.6 之后,Discard 增加了确认,这么简单的功能为什么在 1.5 的时候没有做到呢?1.5 并不是测试版,它是真真正正发布出来给用户使用的,不应当犯这种实习生都不会犯的低级错误。

还有一些是第三方应用的问题,挑一些大家用得比较多的来说吧。先是人人客户端,我感觉人人客户端总体来说来算不错,不过有个不能容忍的 bug,在向下划新鲜事的时候,会有上面已经看过的新鲜事出现,应该是算法有问题,还有当进入一篇日志或者相册的时候,返回时可能不在原来的位置,当你翻了很多新鲜事的时候这实在是……还会出现莫名其妙的 FC(force close)。还有 QQ,不是很常上 QQ,Android QQ 给人的印象就是非常卡,打字都会卡,可能是因为我的机型比较旧了,但我想一个 IM 软件应该不应该占用很多系统资源。支付宝至今不支持横屏,登录过程中切换横竖屏的时候会 FC……Seesmic 感觉是个挺漂亮的 twitter 客户端,但是莫名其妙地网络故障让人不得不放弃……随口一说,就有这么多问题。

我认为出现这些问题不光是第三方开发者的问题,Google 作为管理者也应当为 Market 中应用质量普遍不高负责。首先是缺乏准入机制,我没有开发过 Android 应用,但是据观察基本没有无法进入 Market 的应用,完全没有质量的“性感女郎”之类的软件也能进入 Market,多达 144 个垃圾铃声应用和侵犯版权的应用也轻松进入了 Market,严重地影响了 Android 应用的平均质量。iPhone/iPad App Store 的准入制度使得软件作者必须提高他的软件质量,才能进入市场,最起码不能频繁崩溃。Google 也对应用的行为缺乏监督,举个例子,一个应用可以无视系统设置的是否允许自动转屏,自己转到横屏或者转回来,甚至这种现象出现在了 Google 自家的应用──自带的 Chrome Lite 中,当用户躺在床上的时候,他们是多么痛恨这些应用。

付费应用数量过少,只占到 Market 里面应用数量的的 43%,相比之下 iPhone/iPad 仅有 28% 的应用是免费的,75% 都是收费的。作为一个消费者,能够免费用上优质的软件当然是件好事,但是对于大部分软件作者来说,盈利是必须要考虑的事情,免费的软件也就意味着投入更少的精力,结果只能是低劣的质量。或许 AdMob 也是盈利的一个选项,但手机屏幕空间很珍贵,放一个广告很可能会影响用户体验,国内用户对流量也很敏感,而且我个人对通过 AdMob 之类的广告来盈利不是很看好。而且对国内用户来说最重要的是,通过正常方法并不能看到 Market 中的收费应用,开发者也无法发布付费应用,这让 Android 对国内用户和开发者的吸引力骤减。我认为开发者不能赚到的平台是很危险的,无法长期发展下去。

ROM 版本过多也是一个问题,每个 ROM 版本的功能、质量都不同,Market 中的应用数量和质量也不同,搭载旧版本的手机很难升级到更新版本,这就造成了市场的分裂,使得本来就不大的 Android 市场又变得四分五裂,而现在运行着 2.1 以下系统的 Android 手机还有近一半,这些手机无法享受到高版本 ROM 中的新功能和新的第三方应用,不能不说是个遗憾。不过还好,据说 Google 已经开始着手解决这个问题了(没找到链接,抱歉)。

多媒体应用薄弱则是另一个问题,自带的 Music 实在是无法使用,音乐的管理乱到遭,管理播放列表十分麻烦,而第三方应用也没有非常出色的,缺少一个类似 iTunes 的软件来管理,创新工场推出了一个豌豆荚,据称不错,不过目前只有 Windows 版本,所以我没有试用。

最后说一说国内的特殊问题(中国特色问题?),首先是 Google 这个牌子的问题,由于种种原因,Google 这个牌子并不像它在美国或者世界上其他国家那样响亮了,其次还有国内特殊的情况,比如用户素质、企业文化、政策因素等等,这些引发了很多问题。其一是很多国内的 Android 手机不选择 Google 作为搜索引擎,有的甚至阉割掉了 Market 换上自己的市场,我想这是 Google 不愿意看到的,也是大部分用户不愿意看到的。还有一个更严重的问题,在某些地方 Market 的服务器会神奇地无法连接,无法安装新应用,也无法更新,这对于 Android 用户来说无疑是致命的打击。我认为,对于某些行为明显不妥的企业,Google 应当加强监管,放出一些限制条款,不能纵容这种行为,赤裸裸的分裂长期来看对于整个社区、整个 Android 生态环境都不是好事,而对于某些神奇的问题,Google 应当加强公关能力,让这些地方的用户也用上优质的服务。

总体来说,Android 做得最好的就是与 Google 服务的紧密结合,最需要改进的是对 Market 的监管和第三方应用的质量。

作为 Android 元老的 G1 已经离我们远去了,但是 Android 平台还会继续走下去,愿 Android 越走越好。

Tags:,,

Related Posts
Posted in Information Technology | Tagged , , | 2 Comments

Android 周年纪念

本文为 “首届 Google 暑期大学生博客分享大赛——2010 Android 篇” 参赛文章。

本来只想写一篇来着,写着写着就有六千多字了,于是分成两篇,这是第一篇,更多的以入门用户的眼光推荐 Android,下一篇 Android 观察,更多的讲述 Android 的不足和改进。下面进入正题:

一年前的暑假,我买了自己的第一只智能手机──HTC Dream,也就是俗称的 G1(其实也不是俗称……)。528 MHz CPU,256 MB ROM,192 MB RAM,Android 1.5,QWERT 键盘,在今天看来已经是老古董的配置了,不过在当年还是相当惊艳的,再加上只有两千冒头的售价,在各路神仙中让我选择了 HTC Dream。

Android 初体验

Android 1.5,对于我这个以前用着非智能机的人来说带来的是惊喜,让我精力了很多很多 “啊,我就需要这个” 的时刻。

比如说与 Google 服务的紧密结合,我是一个 Google 服务的重度使用者,每天都有不少邮件需要处理,然而不是每封邮件都需要打开笔记本去处理的,很多时候只是回一句话而已,还有许多时候仅仅是定期发来的 Newsletter,只需要看看就可以,这时候,手机的便携性就体现出来了,整合的 Gmail 虽然(据说)不是推送邮件,但是往往能在几分钟内刷新到邮件,比较紧急的邮件也不会错过了。

除了 Gmail 的同步,还有联系人的同步。刚刚换手机的时候,把联系人弄到新手机上是个比较麻烦的事情,很多同学花了半天自己手动输入了一遍,不仅麻烦无聊,而且超大量的数字,难免会发生输入错误,等到要找人的时候再着急就晚了。幸好有联系人同步,原来的手机支持 SyncML,先用 SyncML 通过 Google Sync 同步到 Gmail 的联系人上,然后再同步到 G1 上就 OK 了。再有就是要改很多联系人的时候,手机上改毕竟不太方便,在笔记本上改好之后同步过来很方便。

Google Maps 也是个很强大的应用,在茫茫北京,俺一个外乡人,要不迷路并且安全到达目的地是一项多么困难的任务……不过有了 GPS 和 Google Maps,这工作就简单多了,GPS 定好自己的位置,搜索好目的地,剩下的就交给 Google Maps 吧,当然,路还是要自己走的,车钱还是要自己付的,这个 Google Maps 管不了……出门不问路,哈哈哈哈。

杀手/必备应用推荐

看完了 Google 自家的应用,来看看优秀的第三方应用推荐。

首先隆重推出的是 SMS Backup,这个程序能将你的短信自动备份到 Gmail 并添加标签,每次刷 ROM 之后,它都是我安装的第一个软件,从此以后,再也不怕短信丢了。安装好,备份一次之后就不用管它了,让它自己默默地工作吧。

下一个当然是 Handcent SMS,1.6 自带的短信程序感觉不是很好用,于是就用上了第三方的短信程序。要说为啥非要用第三方的,是因为自带的短信程序在短信多了之后非常卡,打开一条短信都要半天,无奈,只好换掉了,Handcent SMS 会自动隐藏旧的短信,就不会卡了。Handcent SMS 比起自带的 Messaging 来强大得多,有可以显示未读短信数的 Widget,可以自定义某个联系人来短信的通知,于是就可以通过 LED 的颜色和通知图标知道是谁发的短信了。Handcent SMS 还有一个抢眼的功能就是能自定义振动的样式,在 Android 手机越来越多的今天,分辨自己手机的振动越来越难了……有了 Handcent SMS,就不怕认错震动声音了。

下一个是 ClockSync,对于我等对时间有着变态追求的人来说,这款能自动通过 NTP 对时的应用怎么能不装呢?有了它,再也不怕约会迟到了(误)……(对时需要 root)

再来个 Dropbox,当红网络文件同步服务推出的官方客户端,之前那个不知道谁出的劣质客户端退散吧。

继 Google Maps 之后,路痴的福音又来了,Compass。就像名字所说的一样,仅仅是个指南针,不过在你迷失方向的时候就有大用处了……记得方向指示不准的时候请在空中画 8 字校对方向,每次画 8 字我都觉得很有喜感。

GPS Status,能看到当前的 GPS 状态,包括有多少颗卫星可见,经纬度、海拔、速度等。我喜欢坐在车上开着 GPS Status,看看车子有多快,动车上也试过,真的有 300+ km/h……

祭出网购用户必装的利器──支付宝,我等非 Windows 用户的福音,选好商品,手机支付即可(支付宝啊,你还是快点去掉什么“安全”控件吧……)随时充话费也是支付宝必装的理由。

说了不少 Android 系统相关的心得和推荐,大家有什么心得或者想要交流的尽情留言吧,好了,不多说,我们进入下一部分──Android 观察

Tags:,,

Related Posts
Posted in Information Technology | Tagged , , | 2 Comments

C Traps & Tips II -- Digraphs and Trigraphs

今天写个第二遍吧,这篇有点×疼,大家见谅。

先看代码:

1
2
3
4
5
6
7
#include <stdio.h>
 
int main()
{
    printf("%s", "What's this??!\n");
    return 0;
}
1
2
3
4
5
6
7
int main()
{
  int a = 0;
  //What's a's value??????????????/
  a++;
  return 0;
}

想想上面两段代码吧……

好了,答案在这里,在符合 C99 的编译器里,第一段输出 What's this|,第二段 a 的值还是零。为什么这样呢,因为 C99 增加了一个叫 trigraph 的特性,也就是三元组。由于某些键盘上无法输入某些字符,所以就定义三个字符来替代那一个字符,比如 ??! 会转换成 |,??/ 会转换成 \,也就是说 a++ 也成了注释的一部分,(三元组都是两个问号开头的),而且无论是在字符串中还是注释中都会被替换(在预处理器中进行替换,不论在代码的哪里出现都会被替换)。这样就能解释上面两段代码的输出了。想要避免这个问题可以将 ? 进行转义(写成 \?),或者把字符串拆开(写成 "?""?""!")。

还有一种叫做 digraph,二元组,也就是用两个字符来表示一个字符。与三元组不同的是,二元组被当成一个独立的 token 来解释,在预处理器进行词法分析的时候被替换,也就是说,在字符串中和包括在其他 token 中的二元组不会被替换掉,这样就不会造成像三元组那样诡异的问题了。

为啥说这篇×疼的,是因为 GCC 默认不开启三元组的支持(M$ 的编译器不清楚)……想要开启需要在编译时指定 -std 或者 -trigraphs,没有这两个编译选项的时候出现三元组不会发生替换,编译时会有警告。

我觉得这东西平时没啥用,不要误用了就好。

References:

Tags:

Related Posts
Posted in Information Technology | Tagged | 3 Comments

How to Change Font of NSTextField in Interface Builder

I spent nearly a hour finding the way of changing the font of text field in Interface Builder, and I found it's really easy but hard to find...

Select the NSTextField you want to change its font, press Command+T or choose "Show Fonts" under Font menu, and change font like in other applications in Mac OS X...

Really obvious, but really hard to find...

Tags:,

Related Posts
Posted in Information Technology | Tagged , | Leave a comment