
昨晚玩到凌晨3点多,终于把原型体(Prototype)的剧情打通了。不过是走马观花般地打通,细胞记忆只拿了35%,而且电影还是E文字幕的,所以别人所说的剧情我一点都察觉不出来,真是可惜。不过原型体(Prototype)就算不谈剧情也是是一部上上的佳作,操作流畅,动作华丽,极具速度感,在曼哈顿飞奔相当有快感,作为同样开放式的游戏杀起人来那是比GTA牛逼哄哄的多,个人感觉那肉鞭才是最牛逼的武器,最适合我这种猥琐的玩家。
现在剩下都是收集控、完美控的工作了,我两者都不是,更不是剧情控,只是轻微的强迫症患者。只是现在在执行我的硬盘游戏清理计划,这是个相当漫长的计划呐。作为这个计划中第一款被清理的游戏(当然记录跟安装包还是会被保留……),始终觉得要留点文字作纪念。OK,任务完成了,下一个是刺客信条。

Tags: Prototype, 原型体, 游戏 | 3 次指导 »
写在前面
用WordPress以来,一直都用CodeColorer插件用来实现代码高亮,不过一直没花时间去看说明,用起来很苦恼。所以今天决定花点时间认真学习下,并根据作者的说明总结下各个属性的作用,还添加了些例子,以后忘了理解起来也方便些。不过都是些苦力活啦。
CodeColorer
CodeColorer是一款基于GeSHi库的WordPress代码语法高亮插件。功能简单,使用方便,是一款比较轻量的插件。CodeColorer支持[cc lang="lang"]code[/cc] 和 <code lang="lang">code</code>两种语法。这里是插件的主页,本文据此翻译修改而成。
属性说明及例子
属性列表如下,括号内是参数类型.string是字符串;integer是整数;boolean是布尔型(开关),可接受“true” “false”, “on” “off”, 整数 1 or 0.
lang (string) – 代码使用的语言。
tab_size (integer) – 用以替换制表符的空格数,可在设置界面更改。
line_numbers (boolean) – 是否显示行号,可在设置界面更改。
first_line (integer) – 指定代码块第一行的行号
highlight (string) – 用于指定整行高亮的代码行行数,参数是用半角逗号分隔的数字串(如 1,5,8,9)。
no_links (boolean) – 当值为false时,关键字将会添加一个到官方文档的链接,可在设置界面更改。
lines (integer) –指定代码块显示的行数,当值设置为-1时,不出现纵向滚动条,可在设置界面更改。
width (integer or string) – 代码块宽度,可在设置界面更改。
height (integer or string) – 代码块高度,当这个高度可显示的行数比lines指定的值大才会生效,可在设置界面更改。
rss_width (integer or string) – 代码块在RSS输出时的宽度,可在设置界面更改。
theme (string) – 代码块颜色风格 (default, blackboard, dawn, mac-classic, twitlight, vibrant),可在设置界面更改。
inline (boolean) – 内嵌模式开关,用于将一行代码插入到文本中。
strict (boolean) – 严格模式的开关。
nowrap (boolean) – 当值指定为false时,过长的行将会被自动换行,以避免出现横向滚动条。
noborder (boolean) – 是否显示边框的开关。
no_cc (boolean) – 当值为true时,code标签将会被解析,但代码块不会有格式。
class (string) – 添加一个新的CSS。
escaped (string) – 当值为false,代码块里的html转义字符不会被转义,如<不会转义为<,默认为false。
阅读全文»
Tags: CodeColorer, wordpress插件, 插件翻译, 语法高亮 | 指导 »
项目正要发布时,我用proguard打了个混淆包,想不到运行的时候出错了。proguard是Netbeans6.9 J2ME插件自带的,版本号是4.4。
无奈只好debug加反编译,发现居然混淆后的代码里,我用来挂起线程的空循环语句,所谓的busy-waiting loop被去掉了
原代码大概如下:
1 2 3 4 5
| boolean a = false;
new Thread(). start
while(a ); |
混淆后的代码while(a);这句已经不见了
加上个括号也不行
1 2 3 4 5
| boolean a = false;
new Thread(). start
while(a ){ } |
必须做些操作,循环才会正确运行。
1 2 3 4 5 6 7 8 9
| boolean a = false;
new Thread(). start
while(a ){
System. out. print("");
} |
想必是proguard给优化掉,Google了一下居然被我找到了一段Troubleshooting(原文地址),摘录如下:
阅读全文»
Tags: proguard, synchronized, valatile, 多线程, 空循环 | 指导 »
直接上图:

见左上角,幸好人品还是可以的:

以前玩扫雷时,就很想写一个自动求解的程序,在网上搜索了一番才得知扫雷的自动求解是一个NP难问题。
不过倒发现了一个非常好的ppt:how complicated is minesweeper?
Tags: minesweeper, 扫雷 | 指导 »
包含源码的第三方库
以添加一个TTS模块为例,可以按如下步骤添加:
- 把TTS的源码包复制到你的MTK软件系统根目录下,以让TTS的源码都在TTS目录中
- 在make目录下新增一个tts目录,在tts目录下添加4个新文件,分别是,tts.def、tts.inc、tts.lis、tts.pth。tts.def文件的内容需要根据内容来修改,其他3个文件中加上源文件及其目录、头文件目录即可。
- 在REL_CR_MMI_<project>.mak 中加上如下语句
CUS_REL_SRC_COMP += tts
- 把MTK工程remake一下,若没有错误,tts模块就成功加上去了。
- 如果要为Modis模拟器添加该模块,须进入到Modis目录,在createMoDIS.ini文件中,[GLOBAL_SETTINGS]下,追加
enable_libs += tts
createMoDIS.ini会在createMoDIS.pl中加载
不包括源码的第三库
添加一个无源码的库,如xxx.lib,可按照下面步骤:
- 在MTK软件系统根目录中新建一个xxx文件夹,把xxx.lib放在里面
- 在make\\Option.mak里增加下面几行,ifeq语句不是必要。
ifeq ($(strip $(XXX_SUPPORT)),TRUE)
COMPOBJS += xxx\\xxx.lib
CUS_REL_OBJ_LIST += xxx\\xxx.lib
endif
- 有 头文件,要将头文件路径加入,用CUSTOM_COMMINC如:
CUSTOM_COMMINC += ..\..\inc
- 如果加了XXX_SUPPORT判断,须在<customer>_<project>.mak文件中添加,并初始化为 TRUE:
XXX_SUPPORT = TRUE;
- 修改完成后,remake就可以将新模块添加到工程里了。
- 关于 ifeq ((XXX_SUPPORT)),TRUE)语句的意思是如果XXX_SUPPORT的值为TRUE则继续执行。strip函数详见这里。
Modis模拟器不能调用该库,Modis模拟器调用的库要经过VC编译。
生成自己的Lib库
阅读全文»
Tags: LIB, Modis, MTK, MTK新模块 | 指导 »
今天为了解决宿舍没有无线AP的情况,让hero可以上网(我只开了20M的GPRS消费)。捣鼓了一下让Hero通过Ad-Hoc连接我的笔记本来共享上网的问题,google一下,找到了两篇可以解决问题的文章,如下:
hTC G3 HERO 如何使用无线网卡共享宽带上网 ad hoc(不推荐,步骤简单,但会丢失当前已记忆的wifi热点)
ADSL+一台无线网卡笔记本实现Hero上网(推荐:步骤多一些,但是可以学到东西)
不过这种方式的局限很大,不适合长久使用(用connectify有所改善*win7 only),而且不能动态获取IP非常麻烦,如果经常要更换AP那是相当痛苦。后来,我更新我的网卡驱动,发现里面包含了Intel® My WiFi软件。驱动在此下载,要独立安装My WiFi应该也没问题。要确保网卡是下面的型号:
Intel英特尔WiFi Link 3945ABG/4965AGN/5100 AGN/5300 AGN/5150/5350/6200/6250/6300
我的是5100 AGN。安装的过程非常流畅,安装后程序会自动启动。这时只要启用了My WiFi技术,就可以在HERO上看WiFi热点了,不过,在你连接之前,还要改一下My WiFi的预配置,因为默认的密码是一串长达64位的随机字符串(真是随机的吗?)。大概类似:
1
| ch@R2ku9tAYz5aOkPDz31TAWXfCGpz72.muvx#lugh9q6e97bo~gzDiuf8DoK+P |
如果能在手机上一个个输完,那我真是五体投地。
SSID是默认的计算机名,最好也改一下。如果想要换别的加密方式,比如wep,那必须新建一个配置。因为预配置只允许用WPA2-PSK加密。
这样在计算机上的工作基本搞定了,HERO应该可以正常连接上来。如果一直卡在获取ip阶段,请确认下手机是不是开启了静态IP(无线局域网设置->menu键->高级),如果开启了最好关闭,因为Intel® My WiFi可以动态分配IP。如果要开启静态IP,默认的IP段是192.168.16.2~192.168.16.254。
如果不能上网,
请确定“过滤网络通信量”功能已被禁用(默认是禁用),在“配置式”的编辑界面->“共享”选项卡中。
再看看是否已经开启了“共享我的互联网”功能,在My WiFi的任务栏图标,右键可以开启。如果连接出现问题会有提示。
阅读全文»
Tags: Ad-Hoc, Android, Hero, HTC G3, Intel My WiFi, 无线网卡 | 1 次指导 »
前言
最近在做MTK开发,需要在程序中将GBK编码的文本文件实时转换为unicode编码,因为MTK只认Unicode。经尝试网上提供的mmi_chset_convert函数在我手上的SDK里没有用,很奇怪这个函数的只是调用了memcpy。无奈之下只能自己动手实现转换,也好趁这个机会摸清以前一直一知半解的字符编码。
说到字符编码,第一误解就是字符集(character set)和字符编码(character encoding)的混淆。以前经常把所有名词都当成字符编码(encoding),比如我就把GB2312叫成编码,实际上GB2312应该是字符集, 而它用的编码方式应该叫做EUC-CN。对于字符集跟字符编码的区别还是很难理解的(可看维基百科这里、这里跟这里),我也模糊,再说下我的理解,比如说思密达们用的字符集是KS X 1001,而他们的编码方式也是EUC,不过是叫做EUC-KR。关于EUC编码方式,实际上就是对于ASCII字符用一个字节(8bit)表示,高位(第一位)为0来表示它是 ASCII字符,而其他字符用两个字节表示(16bit),且每个字节加上0xA0(16进制),也就将它们的高位置为1,以跟ASCII字符区分开来(后面在我的程序里就可以看到这个应用)。关于这个问题可再参考Blogjava上的两篇系列文章,[1]、[2]。
当然如今把GB2312等同于编码了也不会有任何问题了。Html文档头经常出现的 charset=utf-8 对此贡献不少,这里的charset应该是指encoding,再比如说charset=gb2312实际上指的就是“EUC-CN”(强调一下utf-8、iso-8859-1都是字符编码,unicode才是字符集)。所以关于标题《从GBK到Unicode的中文字符映射》,实际上应该叫做《GBK到UTF-16(UCS2)的中文字符映射》,
GBK
GBK即汉字内码扩展规范,是“国家标准扩展”三个词的拼音缩写。具体可参考维基百科。
GBK既是字符集也是字符编码(够讨厌的吧…)[2]。不过这不重要,解决问题的关键是摸清GBK的编码方式,才能找到GBK到Unicode的映射规律。在此贴下维基百科上的图片:


由上表可见,GBK编码主要将字符分为五个区域。
其中GBK/1、GBK/2就是GB2312的字符集,其编码跟GB2312的编码是一致的,所以说GBK是向下兼容GB2312。GBK/3、GBK4就是GBK新增的汉字,许多繁体字、偏僻字都集中在此。但GBK/4中并不是全都是汉字,或者是不存在Unicode字符集中的汉字,经我统计实际上只有8059个汉字是在Unicode中存在的。剩下的GBK/5跟GBK/1一样存放都是特殊符号。
Unicode
阅读全文»
Tags: GBK, GBK转Utf-16, MTK, Unicode, UTF-16, 编码转换 | 指导 »