日月光华 for iPhone数据统计

Posted by hcq | Posted in Blogging | Posted on 02-04-2011

0

如果你还没有试用过 日月光华 for iPhone,可以在http://itunes.apple.com/us/app/id405894051?mt=8试用

4个月前,日月光华 for iPhone上线,到3月31日,共发布了3个版本。功能从第一版的只支持版面文字浏览到第二版支持发帖再到第三版支持看图。每次升级都有一点惊喜。

发布至今,累计安装1304次。第三版发布的一周以来,累计更新437次。其中头2天的更新量占了2/3。由此估算该目前的活跃用户数约为400人。

下载按App Store市场分,中国919,美国248,香港32,其他还有新加坡、日本、英国、朝鲜/韩国、加拿大和台湾等。

在没有任何市场推广的情况下,曾经在1月9日左右出现一次日下载最高纪录151次,之后呈半衰期1天下降。怀疑是有人或组织帮忙宣传了一下,不知是做了正面还是反面教材。

从两次升级后的更新情况看,第一次首日更新量不到50,第二次的首日更新量216。3个月的时间让这个app被更多的人接受。

App的推广主要通过微博,新浪微博和推特。用户反馈主要集中在需求,如发帖(第二版添加)、看图(第三版添加)、精华区、信件和iPad版。

目前日月光华 for iPhone已开源。地址:https://github.com/bufbomb/ghbbs-for-iphone,之后有时间或许会再创建个站点来收集反馈信息。

GB18030编码

Posted by hcq | Posted in Code Sample | Posted on 17-12-2010

0

最近写的日月光华 for iPhone需要从日月光华官网上爬数据。虽然日月光华提供了gb18030编码的xml输出支持,但是部分页面存在编码错误。这也直接导致调用NSString的initWithData:encoding:函数返回nil。需要的数据无法获得。由于这个原因,日月光华 for iPhone第一次提交被拒绝,再我Appeal了以后终于release了,但客户端上无法显示编码错误的原因依旧存在。

在写第二版客户端的时候我决定修正这个问题。

先查看了一下GB18030的编码规范,从Google上零零碎碎拼凑到如下信息:
1. GB18030编码是不定长编码,编码长度包括1字节(兼容ASCII)、2字节(兼容GB2312)和4字节(增加对繁体中文的支持)
2. 1字节,从0×00到0×7F;
3. 2字节,第一字节从0×81到0xFE,第二个字节从0×40到0×7E或从0×80到0xFE;
4. 4字节,1、2字节一组,3、4字节一组,每组第一个字节从0×81到0xFE,第二个字节从0×30到0×39;
5. 1字节的0×80编码表示出现错误。

接下来光华上的编码出了啥问题呢,Fiddler跟了下,发现是有些字段(如标题,正文,签名等)在字节层上被非正常尾截断,
如… … EC 35 EF 32 C4 48 被截断成了
… … EC 35 EF 32 C4,所以最后一个由C4 48代表的汉字无法被正常解码 (C4会与之后的字节重新组码)

好了,知道问题以后修正就很方便了,检查和修正方法主要如下:
系统内部维护一个编码状态,每读入一个字节改变这个编码状态,如果出现一个非预期的字节,那么修改当前字的第一个字节为’?',然后把读取头移到第二个字节,继续检查。

参考:

http://en.wikipedia.org/wiki/GB18030

http://www.google.com/search?hl=zh-CN&source=hp&biw=1280&bih=871&q=GB18030&aq=f&aqi=g10&aql=&oq=&gs_rfai=

解决Android模拟器无法启动的问题

Posted by hcq | Posted in How To | Posted on 16-09-2010

0

开始尝试Android开发,按照教程跑Hello World程序,结果僵在启动Emulator上,提示错误:
emulator: ERROR: unknown virtual device name: ‘myavd’
emulator: could not find virtual device named ‘myavd’

没有啥想法,Google了一下,在Android Beginner的Group上看到了有人和我相同症状,Windows下,当用户修改过自己的用户目录地址后会出现这个问题。问题的根源在于Eclipse和命令行创建虚拟设备的时候,使用的是Java API,而Emulator使用的是Windows API,两个API关于用户目录的定义不同,导致了两个API指向了两个路径,所以会有emulator error。

比较干净的解决方法是创建一个ntfs junction points。
操作很简单:
mklink /J C:\Users\someone\.android E:\someone\.android
(假设系统默认User账户是C:\Users\someone,修改后的User账户是E:\someone)
然后再运行Emulator,一切正常

关于mklink的使用,参考:http://techtraveller.blogspot.com/2009/07/android-fixed-unknown-virtual-device.html

体验了把Nokia E66刷机

Posted by hcq | Posted in How To | Posted on 14-09-2010

1

女朋友的Nokia E66短信发送功能出了问题,只好尝试冲刷固件看看有没有机会恢复。

软恢复
从手机里的设置找到恢复成出厂设置的选项,但是悲剧的事情发生了,忘记了锁码。(默认情况下Nokia E66的锁码是12345,但不知道怎么的,这个锁码在她的手机上无法使用) 软恢复失败。

硬恢复
关机,同时按住3, #, 通话键,再按电源键启动,同时按住这4个键直到进入选择国家的屏幕,选好国家和时间。又悲剧了,系统强制我输入锁码,不输入正确的就无法进入系统。硬恢复失败。

后来在网上查到软硬恢复都是无法重置锁码的

好,那来点高级的
用NSS (Nemesis Service Suit)重置锁码。这个高级,但是试了几次都出现了Error。结果百度知道了一下,说NSS只有在能正常进入待机状态的情况下重置锁码。悲剧,硬恢复以后就不能正常待机了。

绝望下,找到了终极武器,Phoenix Service Software 2010
照着dospy.com上用Phoenix刷5320的教程,下载安装Phoenix,从Phoenix里下载安装RM494(国行版白色E66对应的固件,Code: 0570010)。
按照提示,扫描,打开Update Firmware窗口。在Update Firmware的窗口里显示无法找到对应RM,奇怪了,不是下好了嘛。
结果看了下,可能是Windows 7改变过的文件系统结构导致的。默认情况下Phoenix把下载的RM文件放到了$SystemDriver$\ProgramData\Nokia\Packages\Products下了,但是Phoenix的自动搜索路劲却不包含这个。于是把Products目录下的RM494目录拷贝到$PhoenixAppFolder$\Products\下,然后重新运行Phoenix,终于检测到了RM494。
点刷机的按钮,失败… -_-b
于是又在一篇关于E71恢复遗忘的锁码里找到了办法,用Dead phone USB Flash。第一次提示连接失败,又试了一遍,进度条终于动起来了。

5分钟以后,E66重启了几次后,终于活了,并且之前无法发送短信的问题已经消失,我也又多了一个系统的刷机经验。Phoenix名副其实,让死了的E66重生。

感谢Google,感谢塞班智能手机网,感谢百度知道

修改iPhone版Foursquare api地址

Posted by hcq | Posted in How To | Posted on 02-08-2010

1

准备工作
1. Jailbreak的iPhone  (firmware 3.x)
2. 从AppStore下载foursquare
3. 7zip或其他解压缩工具
4. Hex Editor或其他16进制文件修改器
5. WinSCP或其他可以访问iPhoen文件系统的工具

步骤:
1. 从App Store安装foursquare官方版
2. 安装appcrackr (http://cydia.xsellize.com/)
3. 运行appcrackr, Setting Tab里选择Cracking Script为CrackTM,Crack Tab里选中foursquare并点Crack,等到出现提示成功框。
     
4. 运行WinSCP,连接iPhone,从/var/mobile/Documents/Cracked/里复制出破解版foursquare.ipa文件
5. 用7zip打开foursquare.ipa文件,从Payload/foursquare.app中复制出foursquare文件
6. 用Hex Editor打开foursquare
7. ANSI字符串搜索api.foursquare.com,修改为你自己的api proxy地址(别太长导致把下一个字符串覆盖)。记录下这个字符串的起始位置

8. 将刚才那个地址+0×1000,进行16进制搜索。查看搜索到的结果的后一个32位值,如果是12 00 00 00,就对了(0×12=18,也就是api.foursquare.com的长度),将12改成你的api地址的长度,注意要是16进制。


9. 保存并退出。将这个文件打包在.ipa文件里,覆盖原文件。
10. 把foursquare.ipa文件拖到iTunes里,从iPhone里把原foursquare删除,同步安装。
11. WinSCP连上iPhone,在/User/Application/xxxxxx/foursquare.app目录下,运行ldid -S foursquare进行签名。
12. 运行foursqaure,试试看是否一切正常。
13. 把签了名的foursquare文件再copy出来,覆盖foursquare.ipa里的同名文件,就可以作为破解版foursquare发布了。

php版foursquare proxy api
appengine版foursquare proxy api

下载翻墙版foursquare for iPhone

参考链接:
Remove DRM:
http://blog.gauravgiri.com/2008/07/drm-fail/

iPhone OpenSSH
http://www.appleiphoneschool.com/openssh/

Use appcrackr to crack
http://xsellize.com/topic/65975-how-to-use-appcrackr-to-crack-upload-and-submit/

关于修改iPhone App
http://tutorials.accessroot.com/arteam/site/search.php?q=iphone&r=0&s=Search&in=&ex=&ep=&be=&t=all&adv=0

Foursquare Proxy API (Appengine Version)

Posted by hcq | Posted in How To | Posted on 30-07-2010

0

早些日子foursquare和twitter一样被伟大的墙和谐了。之后luosheng写了php版的foursquare proxy api (查看)。无奈我的免费php站点不支持outgoing request,无法使用。
好在这世界上有Google Appengine,免费Host Proxy的好地方。
于是花了点时间写了个简单的Python版的4sq proxy api。可以在这里下载最新的代码。
写的时候发现了一个Google Appengine的bug,
要说这个bug就得先提一下Http Basic Authorization,这是通过在http头放置一个由用户名和密码进行base64加密过的Authorization值来进行用户认证的方式。详细的介绍可以看它的wiki
python版的urlfetch会把request头部的authorization值去掉。于是有了下面的work around方法

appengine fetch版:

auth = "username:password".encode("base64")
header = {"authorization":"Basic " + auth}
resp = fetch("http://api.foursquare.com/", headers=header)

python urlopen版:

resp = urllib.urlopen("http://username:password@api.foursquare.com")

最后在iPhone版foursquare(修改版)上试了下,基本功能已经可以正常使用了。
不过有时候AppEngine会出一些问题,比如有一段时间连不上foursquare,过段儿时间就好了。真奇怪。

Windows Live Messenger for iPhone 用户手册(多图)

Posted by hcq | Posted in 随笔 | Posted on 23-06-2010

0

对于一款优秀的应用来说,用户手册并是可选的。但对于Windows Live Messenger for iPhone来说,用户手册是必须的,因为太多的功能难以被用户发现。
这篇用户手册针对的是1.0.1版Windows Live Messenger,@  iPhone 3G with iOS4。

1.设置
此App共有两处设置地方,都是在iPhone设置 App里。
  
Sound:收到新消息时是否需要播放声音
Vibrate:收到新消息时是否需要震动
Allow nudges:是否允许发送/接受Nudge

2.登录
用户名框里输入@和后一个字母,就会提示自动完成,点Space可确认自动完成。

取消Remember my password前的勾,弹出警告框,不记密码则无法使用Push Notification。

3.Social Page
这张Page内容比较多:

1)点PSM框可修改PSM

2)点Email图标可用内置浏览器浏览Hotmail收件箱

3)点自己的头像会划出三个按钮,依次是进入Profile页面、更换头像和进入MyStatus页面(就是那个很难找的Sign out button的地方)
    (修改头像有3种方式,拍摄新照片,挑选本地照片和选择在线照片)

4)这一行可以选择What’s New的filter,其中highlights和recent的区别主要是是否对Favourate好友的What’s New加权排序
5)点别人的头像会划出哦好几个按钮,有进入Profile页面、进行IM聊天、发送Email等(如果好友输入过电话号码,那还会有拨打电话)

6)点别人的状态更新后的”+”号可以对别人的状态发表评论,点http link可以用内置浏览器打开该页面
7)点别人发布的照片类更新可以去到相应的Photos Page

8)其他各种类型的What’s New都可以点了试试
9)最下方有View More按钮和两个没啥用但必须有的Privacy和Term of use按钮

10)摇一摇iPhone可以刷新该页面

4.People Page
主要是你Messenger上的联系人

1)按Category排序,很多人在App Store上的留言对此表示不满,目前无解决办法。
2)头像也是可以点的
3)点上面的输入框可以搜索好友,在有大量好友的时候可以方便选择

4)点右上角的加号可以添加新联系人,目前不支持进行联系人分组

5)如果有待决定的邀请,那么可以通过点黄色的那一块地方接受或忽略邀请

6)同样,摇一摇可以刷新好友列表

5.Chat Page/Chat Window
该App的核心功能,

1)可以通过点击其他用户头像并选择IM按钮进入Chat Window
2)有新的未读消息时在Tab bar上方会有黄色细条提醒,并且Chat Tab的Badge Count加1,相应好友头像左侧会有蓝点提醒。点击黄色细条可以直接打开相应Chat Window(有多少用户能精准的点中这细条?)

3)无论哪里的头像都是可以点的
4)点Edit button就可以像iPhone内置短信应用删除聊天记录
5)在Chat Page好友那一格上滑动手指,会出现删除按钮,此同短信应用
6)Chat Window上可以按笑脸选择表情和振动

7)Chat Window上可以按照相机发送照片给好友

8)左右滑动Chat Window可以切换上一个/下一个聊天窗口

9)Chat Window的标题是可以点的,点完进入Profile Page
10)支持多人聊天,但必须是PC用户发出邀请,不支持iPhone用户发起多人聊天

11)Chat Window支持Landscape模式

6.Photos Page

1)点相册列表页面的左上角按钮可以创建新相册并设置相应共享权限(仅支持个人和所有人,若要使用部分共享,请使用Web修改设置)

2)点相册列表页面的右上角按钮可以上传新照片到Mobile相册(若不存在会新建),上传方式为使用iPhone拍照和选择本地相册中的照片。拍摄的照片会保留在本地的相册里。
3)Photos of you相册包含了所有你被圈出的照片
4)点相册可以进入相册页,相册页预览了该相册内的所有照片,预览图的右下角会标出该照片的评论数。两指靠近/离远可以缩小/放大预览图。没有翻页功能。

5)点击相册页右上角的按钮,会弹出选择菜单分别是播放该相册、添加新照片和修改该相册

6)上传新照片的时候可以调整照片效果,内置了数十款特效滤镜。

7)照片在上传过程中若想取消,可以点击上传的照片,进入上传队列页面,删除相应图片。

8)你还可以在照片页查看照片评论,发表新评论

9)点击照片页右上角按钮可以选择播放幻灯片、下载照片和把该照片用作头像

7.My Status Page
通过点击自己头像划出菜单上的状态按钮进入

1)点击状态可修改你的当前状态,支持隐身,点击Done按钮后起作用
2)如有多点登录,可以选择远程注销其他地方的用户
3)可以在这里Sign out

8.Push Notification

1)支持Push Notification,但偶尔会丢消息
2)按下Home按钮的时候如果状态是Available,那么会自动调整为Away。

那么多的功能,你发现了多少,又常用多少呢?
Windows Live Messenger简评

Windows Live Messenger for iPhone 简评

Posted by hcq | Posted in 随笔 | Posted on 22-06-2010

0

最近微软官方的iPhone Messenger Application(Windows Live Messenger)终于发布了,这里我从一个普通用户的角度做一些评价

千呼万唤,终始出来
微软官方iPhone版Messenger终于出现在了App Store上了。而在此前,已经有数十款Messenger相关应用在不同市场上架,从时机上看,微软已经失了先机。这个App的开发周期长得超过了想象,近20个月,不过这也呼应了微软的一贯作风,只有足够好的东西,才可以发布。坚持高品质软件的态度很好,但却错过了最佳的Messenger圈地时机,为什么不像QQ的app一样,快发快修快加功能呢

功能繁杂,定位不明
从功能上看,官方版Messenger集成了IM, What’s New, PSM, Profile, Photos, Hotmail等众多功能,几乎覆盖了Windows Live服务的所有常用功能,但是,我认为没有多少用户会在手机上关心Profile,Photos这种功能(从用户的Feedback来看也是这样)?有了iPhone Email app,还有谁会去用无法支持Push Notification的Web Email?我始终认为这款App的定位是有问题的,过分关注应用功能的全面,忽略了这是手机平台。功能繁杂的后果是内存大量消耗,响应缓慢(3GS下稍好),部分功能并不实用。Windows Live Messenger,既然是Messenger,就应该尽力把核心功能IM做好做大,在IM完善的情况下再去管那些周边功能,现在这样子,有点主次颠倒。

效果华丽,流量较高
绚丽的界面,丰富的功能,带来的是高耗电(iPhone本身就是一个耗电的东西)和高流量。据测试,Edge网络下,IM基本残疾,Photos加载十分缓慢。联通3G下,功能和体验还不错,但高带宽的副产品是高流量消耗,Photos没有得到服务器的支持,没有对照片进行缩放和压缩以减小流量,以致查看图片的时候流量消耗较大。Wifi和3G网络的差异并不大,用户体验较好。

值得改进的地方
1. Rotation的支持
   表现在部分页面支持Rotation,另一部分不支持,并且没有禁止Rotation的设置!
2. 部分难以发现的隐藏功能
   如修改状态和注销当前用户的页面入口难以找到。这也是在App Store里差评的部分主要原因;
3. 用户排列顺序
   仅支持按组(Category)排列,无多种排序方式选择,当用户有大量Offline好友的时候,查看十分不方便;
4. 设置页面
   设置页面在App以外,设置内容太少,使用不够方便;
5. Edge网络下的支持
   Edge下IM功能和Photos功能无法正常使用;
6. 稳定性和性能
   Push Notification丢消息,较耗内存,经常因Low Memory而Crash;
   各种页面响应缓慢
7. 内置浏览器页面
   内置浏览器的想法非常的好,在这款应用里实现得也非常棒,但是美中不足的是内置浏览器的页面并不统一,表现在时而有下方的菜单,时而没有,比较让人摸不清;
总得来说,这还是一个值得一试的iPhone App,它弥补了微软在iPhone上无官方Messenger的尴尬。
最后,放一些截图:
Setting Page  Signin Screen  Social Page  People Page  Chat Page  Chat Window  Photo Page   Inapp Browser   Push Notification   My Status
最后一幅图就是那很多人都找不到的”Sign Out” Feature。你可以点自己的头像再点边上的状态进入这个页面,不得不说这是一个有问题的设计。

题外话:不知道微软什么时候可以出一个Android上的官方Messenger应用,这简直是必须的。不过考虑到微软的开发周期,不会又要我们等两年吧

Windows Live Messenger for iPhone用户手册

Log分析利器: TextAnalysisTool.Net

Posted by hcq | Posted in Tools | Posted on 27-05-2010

0

最近在做Log分析时发现了一个很好用的文本工具TextAnalysisTool.Net

只要熟悉基本的正则表达式,就可以用这个工具很方便的进行日志分析。
工具本身只有一个.exe文件,复制到任何地方打开就能使用。只要把日志文件拖拽到程序界面上就可以载入日志。

TextAnalysisTool.Net最核心的功能就是过滤器,通过添加/修改过滤器,可以使你方便的从海量的日志记录里去除掉你不需要的,找到你想要的。
按下Ctrl+H快速打开创建过滤器的窗口:

过滤器类型有两种,匹配文本和匹配标记,Excluding选框表示是否排除匹配的,Color可以改变匹配成功文本的颜色,达到醒目目的。
Text, Case-sensitive和Regular expression如其名,对应文本,大小写敏感和是否使用正则表达式。
按下确定按钮后TextAnalysisTool.Net会根据匹配方式搜索日志文件,把成功匹配的文本设成Color框所选择的颜色:


可以通过选择View菜单里的只显示过滤器匹配行选项来把不想看到的行去除
已创建的过滤器可以选择是否激活或进行修改,甚至保存

这就是它的全部功能,小巧,高速且实用。

如果在作者的博客上无法下载,可以从这里下载

用FxCop做二进制代码分析(托管代码)

Posted by hcq | Posted in Tools | Posted on 17-05-2010

0

FxCop是由微软维护的一个用于分析托管代码的应用程序。通过扫描二进制代码,它可以报告各种信息,如对软件设计、软件本地化、软件性能和安全性、代码习惯等方面的可能改进。
FxCop的使用十分方便,在微软的官方网站下载目前的最新版本FxCop1.36。安装后就可以使用。
FxCop界面如下图,十分简洁,不需再做介绍。

使用也很方便,先添加你的二进制文件(Target),在修改扫描代码时你所想应用的规则(Rule),最后点Analysis就可以查看结果了。
注:当查看缺陷帮助信息时,会有一个详细介绍的Url,如
Help : http://msdn2.microsoft.com/library/ms182268(VS.90).aspx (String)
但现在似乎无法访问,其实只要把msdn2换成msdn就可以正常访问了。

经常用FxCop检查自己的代码,很容易培养出良好的编程习惯。

http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx
http://blogs.msdn.com/fxcop
http://en.wikipedia.org/wiki/FxCop