2009年8月27日星期四

突然再次萌了蓝牙

起因是我在淘宝上突然发现了水木行那款酷似快译通的迷你蓝牙键盘。让人想起 BB 的那种两个大拇指可以操作的设计让我疯狂的长草了~不过它不是特别完美,我想要给我的 N72 外接 BB 那样的键盘,更小一点、单手也不是不可以操作的那种。
从可行性上说,给 N72 装个 Nokia Wireless Keyboard S60 2nd ,就可以用蓝牙键盘。不过后来看到大家基本都在说 N70/N72 不支持蓝牙键盘用第三方中文输入法,只能打英文,自带输入法也只有诺基亚出的某古董折叠蓝牙键盘支持。唯一的希望应该是点讯——传说中最强大的梅花输入法的新名字。它比较新,我模糊的印象里它的设置有全键盘的选项,当时还很奇怪呢~
据说 Remote s60 可以通过蓝牙用电脑的键盘控制手机,有空可以试试~

我家的无线化进程是随着 N72 的进门开始的,当时顺便买了一个 1.2 的适配器。传点小东西的确很爽,还可以玩用手机模拟蓝牙鼠标移动光标给人捣乱的把戏,或者让电脑音箱代替手机扬声器放音乐(可惜 N72 不支持 A2DP ,单声道的效果不是一般的烂,我这么钝的耳朵都能听出来)。
最实用的功能是电脑端的 m-router 和手机端的 Gnubox 配合,让手机共享电脑的宽带上网……可以省 N 多银子。( wifi ?我家没一样东西带这个功能)可惜 Bt 接入点是条贼船:按照一般的教程设置成默认接入点之后,除非程序本身给出接入点选择的功能,都只能使用这个 Bt ~毕竟不可能一天 24 小时守着电脑,不能让俄版 Opera Mini 用 GPRS 上网,这是多么残酷的事情啊(>.<) 待我找到解决方法(不把 Bt 设置为默认接入点,每次上网都弹出对话框选择、实在不行就重启删除 c:\system\data\cdbv3.dat 重新设置),已经是很久之后的事情了,更重要的是……我已经不睡在有计算机的房间了。即使有 Class 1 的蓝牙也没用,因为手机蓝牙的功率是有限的。难道要买个本子当蓝牙中继不成?有机会要仔细研究一下 BlueZ ,看看有什么可以折腾的~

有一段时间家里的双机互连线总是莫名抽风,我忍无可忍的又入了一个 2.0 的适配器,组建了蓝牙局域网。上次给电脑升级,我捎带着弄了一个立体声蓝牙耳机——其实想给下一个手机用,目前主要跟电脑配合着听歌,用在不支持 A2DP 的 N72 上未免太奇怪了。试着用 Xubuntu 的时候怎么也搞不定蓝牙耳机的立体声输出,着实折腾得不轻。
关于蓝牙立体声,如果要轻松一点的话也许可以弄个蓝牙音频发射器。软件问题硬件解决~不但额外花¥,而且 AVRCP 也不能用了>_<

昨天下班到家,发现家里的鼠标终于寿终正寝了一只~老爹前天折腾鼠标线还抱怨电脑后面的线太多了。
原本想弄个蓝牙键鼠套装,本质是企图捎带让手机用,不过想想在 linux 下能否使用不好说。实在犯不着花那么大的价钱冒风险,弄个 2.4G 的无线鼠标应该就可以了。

2009年8月26日星期三

浏览器调用

昨天才定下了图标,我其实并没有真正开始动爪写 fatuipy 的代码,因为有几个问题没解决:没有通读 api 手册、没有看明白现有的代码、没有考虑好数据存放的方法,一些不容易在客户端内部实现的功能没想好怎么用浏览器折腾—— search api 貌似不包括在普通的 api 里,所以仅用自建 api 的话 hash tag 不可用(>_<)可以在 pys60 里正常调用的自带浏览器和 Opera Mobile 8.65 都不会翻墙的说。
今天折腾了一下,鉴于s60 的 java 平台很废柴,调用 Opera Mini 本身打开就要半天,打开特定 url 并不具有太大的吸引力。 ucweb ?我搜到摇滚米饭在他的留言簿上说他也向 ucweb 提过希望官方提供 pys60 调用接口的事,不过和我的建议一样,石沉大海。我不会封装 symbian c++ 。 pass 之!(我的阴暗心理莫名的满足~原因未知)
刚才想到的方案是……用 opera mobile 开山寨大波~ url 很友好,不怕墙,速度不错, opera mobile 也比残到一定境界的自带浏览器好很多。
今天的收获:浏览器不会翻墙,服务器会翻就可以了~哈哈

2009年8月22日星期六

与 cmwap 斗争

前天早晨在推上 @zaykl 问我可否走 cmwap 使用飞信 api 。我折腾了这三天,总算是有个结果了。回答是肯定的,完全可以。
移动 wap 网关是大坏蛋。我们发送访问某 url 的请求,移动总会拦截第一次请求,可能返回一个可解析的 wml 页面,其中包含所请求页面 url 加一个尾巴构成的跳转地址;也可能是返回一串伪·乱码数据。根据我的不完全归纳,这种数据以 "\x01\x01\x01\x01" 结尾,不支持按 utf-8 解码。从 print 出来的内容上看,疑似和 wap 缓存机制有关。二者状态代码都是 200 成功,但其实都没有成功。第二次及之后的请求才能真正传到目的服务器上去。
具体到通过 wap 使用飞信 api 这件事,服务器返回的状态可能是 200 成功(但返回的字符串可能告诉你发送成功、没发出去、没加好友、密码错误等等)或者 302 重定向。
据说只有 s60 会有返回伪·乱码的情形发生、自动处理 302 重定向也存在问题, s40 则都没问题。以我个人的经历,前天几乎没碰上伪·乱码,碰上只以为是偶尔抽风,昨天渐渐多起来,今天又忽而连续出现好几次,忽而神隐。但没见大家讨论出个所以然,毕竟这不仅跟手机终端有关,能跟天朝移动 wap 网关的设备、设置扯上关系,多么 RP 也都是正常。
搜到的思路一般是把必然会被拦截的第一次访问作为初始化的一部份,之后怎么调用都应该正常返回。
我写的方法是检测返回的数据,发现是以 xml 声明开头或者以 "\x01\x01\x01\x01" 结尾就再请求一遍。
这里给出的是我的测试代码,没有封装,只是实践一下,证明其可行性。
⊙u⊙代码开始⊙u⊙
import httplib
import socket
apo=socket.access_point(8)
socket.set_default_access_point(apo)
# 我的手机上 cmwap 接入点 id 是 8 ,这么写方便~
# 具体手机上接入点 id 可以用 socket.access_points 来看,也可以参考金色葡萄的源代码来看如何设置和保存接入点。
conn = httplib.HTTPConnection("10.0.0.172",80) # 连接移动的 wap 网关
url=r'https://fetionapi.appspot.com/api/?from=13888888888&pw=xxxxxxxx&to=13999999999&msg=test'
# 具体数据请换成可以用的手机号、飞信密码、飞信好友的手机号及要发的信息
# 用户名、密码的保存、中文信息的发送请继续参考金色葡萄XD
# 用 https 请求比较好。我绕了很令人吐血的弯路,原因在下面说。
conn.request('GET',url)
r=conn.getresponse()
s0=r.read()
print r.status
if s0.startswith("<?xml version=") or s0.endswith("\x01\x01\x01\x01"): # 是移动劫持返回的数据
# s0.endswith("\x01\x01\x01\x01") 这个判断条件很可能是不对滴~但我也没碰上反例,有人碰上的话麻烦一定过来吱一声啊~
print s0
conn.request('GET',url)
r=conn.getresponse()
print r.status
s=r.read()
print "Request again.",s.decode("utf-8")
else: # 道路已经打通,是从 fetionapi.appspot.com 取得的返回数据
print s0.decode("utf-8")
conn.close()
apo.stop()
⊙u⊙代码结束⊙u⊙
测试环境: 诺基亚 N72 ,python s60 1.44 ,浙江移动神州行 cmwap 接入点。
=}=}=}=}废话(笔记/心得)开始的分割线,没兴趣的可以 goto 页面底端=}=}=}=}
我包月的流量不分接入点,几乎从不用 wap 。幸好反编译过 pys60 时间同步程序(作者是乐迅 PY 软件开发区的"√ゞ絕配ぷ无恋℡")的源代码,见过一点使用 cmwap 接入点的例子,折腾起来还有点底。开头的那段基本都是抄的。
=}=}=}=}一觉睡了18个小时,时间偷偷溜走的分割线=}=}=}=}
折腾良久,才知道移动会在第一次访问网页的时候劫持请求,转到确认要收钱的页面上去,里面的链接通向请求的页面,米有牙齿的移动还在链接的后面加了个 ?t= 随机数字串的尾巴。搜到有人说再次请求就 ok ,可我这里直就 302 错误了……而对 http 协议基本一窍不通的我甚至连重定向后的地址应该在哪里取都没概念~囧
又耽搁了好久才想起有 dir 这么个宝贝,把返回的那堆东西对着 httplib 的源代码一个属性一个属性的看。总算找到了~
※※见招拆招的一点一点跳转的代码开始※※
# 此处的代码最后都没有用到
# 因为是从废弃的代码尸体上一块一块摘过来的,所以也不保证能够正常运行,只是作为思路的记录和参考
# 移动拦截请求返回的页面有两种,我只处理了其中一种不是乱码的,所以这个思路有错误
def c(convert_str):
# 从移动的xml里提取跳转的url时用到,把特殊符号转回原来的样子
convert_str = convert_str.replace('&amp;','&')
convert_str = convert_str.replace('&quot;','"')
convert_str = convert_str.replace('&apos;',"'")
convert_str = convert_str.replace('&lt;','<')
convert_str = convert_str.replace('&gt;','>')
return convert_str

# 上接第一次请求
if r.status==200:
# 如果请求成功
# 这里只处理了劫持返回的 wml ,因为当时伪·乱码几乎没出现过
# 有效 url 在" <go href="xxxxxxxx"></go> "的 "xxxxxxxx" 位置
s=r.read()
newadr=c(s[s.find("<go href=")+10:s.rfind("></go>")-1])
# 返回需要访问的网址
# 遇到伪·乱码就会返回空字符串,后面就出错了(>_<)
conn.request('GET',newadr) # 访问之
r=conn.getresponse()
※※一点一点跳转的代码暂停※※
=}=}=}=}被 302 弄得焦头烂额的分割线=}=}=}=}
不知啥时候我爪贱的删除了 "https" 的 "s" ,在开始的 url 中用了 http 请求,太失策了!拦截页面提取出来的 url 是 http://fetionapi.appspot.com:80/...&t=xxxxx ,访问这个 url 会出现 302 重定向到 https://fetionapi.appspot.com/...&t=xxxxx ,再访问它,不知为啥会取不到返回的 字符串"Yes :) 成功发送!",非常不爽啊~
从一开始就用 https 的话,我就没碰上过 302 重定向的问题。
※※一点一点跳转代码继续:使用 http 请求时遇上 302 重定向的处理代码※※
if r.status==302:
print r.getheader("Location")
conn.request('GET', r.getheader("Location"))
# 不可以用 r=conn.getresponse() ,因为会引发 "ResponseNotReady" 的异常。
# 于是也取不到返回的字符串,无法知道飞信到底发出去没,讨厌死了!
※※一点一点跳转的代码摘录到此为止※※
开始的时候是把"一点一点跳转"的这些代码用 while 语句弄在一起,不管你跳转一次两次还是三次,一直跳到返回的函数以 "Yes" 开头为止。
随着伪·乱码的频频出现,我只好放弃这个思路,被移动劫持了直接重发。就像在开头写的那样。
=}=}=}=}只懂得开场不懂得终场的分割线=}=}=}=}
知道 conn.close() 也知道 apo.stop() ,但是单用哪个都不不能及时关闭连接。我果然够笨~两个连起来用似乎不管什么顺序都可以关闭连接。
从萝莉, sorry 是逻辑上说似乎应该是先 conn.close() 再 apo.stop() ?那就这个样子好了。
=}=}=}=}忆苦思甜的分割线=}=}=}=}
说实话,用 cmnet 接入点的时候,我是直接用了 urllib.urlopen 来实现的,所以完全没想到用 httplib 和 socket 会这么复杂(>_<)
§§附送我自己用的走 cmnet 的飞信函数§§
def fetion(number,msg,mytel,pw):
apo=socket.access_point(3)
# 这个 3 是我的手机 cmnet 的接入点 ID ,就像开头的 8 一样。
apo.start()
url="""https://fetionapi.appspot.com/api/?from="""+mytel+"&pw="+pw+"&to="+number+'&msg='+urllib.quote(msg.encode("utf-8"))
answer=urllib.urlopen(url.encode("utf-8"))
apo.stop()
appuifw.note(answer.read().decode("utf-8"),'conf',1)
§§搞定!简单吧§§
如果给自己发,稍等片刻短信就来了。
=}=}=}=}笔记/心得结束、闲话开始的分割线=}=}=}=}
今天和同事换班,在家里继续休息了一整天。于是连续的三个休息日除了吃饭睡觉就解决了这么一个问题~飘浮。
不过收获的确蛮大的。起码心理上不害怕 http 了~囧
认真码字才发现自己语言表达能力退化严重。泪奔~
这次的人生体验:迷路时能看到更多的风景。
=}=}=}=}废话(笔记/心得)彻底结束的分割线=}=}=}=}

参考资料:
http://goldengrape.org/2009/05/fetion_for_the_one/ 给同一个人的飞信
http://careerman.blog.ccidnet.com/blog-htm-itemid-2483039-uid-12026-do-showone-type-blog.html symbian cmwap 接入点 小结
http://topic.csdn.net/u/20080510/20/e0696874-b3f7-4dad-80ea-09e591854165.html 使用cmwap方式访问网络,返回的数据是乱码?
http://topic.csdn.net/u/20070810/11/02c1f8f7-23b9-4307-8de6-2cae07a92e0d.html [讨论]nokia S60用cmwap连接网络,好像经常数据被移动替换了
http://www.zj.monternet.com/download/zj/wap_faq.doc 浙江移动WAP技术FAQ

2009年8月20日星期四

笔记笔记~

http://www.cnbeta.com/articles/91215.htm 电信用户申诉完全攻略[附申诉实例]
甚好甚强巨~

http://firedances.blogcn.com/diary,27684881.shtml "日本百名漫画家笔下的八一五"漫画展
我用 Opera 放大到190% 看的,感触很多……

http://heifenbrug.com/2009/03/01/blogger-favcion/ 无足挂齿的一点点技术,替换blogspot的显示图标
显然我有些地方没做对>.<有空对照着折腾吧

==========
附言:
我真是变态啊~折腾出来用飞信 api 发短信只限于下班的时候给老妈报平安~这通用性不是一点半点的差,可我就需要这么多功能,再多也没用了囧
下一个先折腾自动循环语音报时、桌面显示备忘录还是 pys60 发推呢?备忘录要涉及的东西多,可是最急用,囧。
刚才打字用搜狗学到一个生词 fatuity , google 说 noun 1.糊涂 2.昏庸 3.愚笨。甚好~决定了俺(打算)用 pys60 1.44 写的 s60v2 twitter 客户端名字就叫 fatuipy :发推 py ……多么简洁明了美好啊~
呃,先抢下名字再说~啥时候开始写不知道,囧。应该不会太监,因为自己要用~

2009年8月17日星期一

N72 提示“不信任的证书”问题解决!

为了用 profimail 必须要解决这个问题。因为貌似弹出提示不及时按"继续"的话, profimail 会死掉……囧。就算平时用 N72 自带的邮件客户端发 email (我通常用这个来写 blog ),每次发送的时候弹提示也很烦人~
解决方法如下:准备活动是用自带浏览器或者 Opera Mobile 浏览器访问 http://www.thawte.com/roots/index.html 这个网页,它会变成 https 的连接,一般是不会弹出"不信任"提示的,因为它家的证书 s60v2 已经内置了。有问题的话就把这个网页上的表填一下,应该能下载到一个压缩包,安装其中某几个(哪几个?我没遇到过,所以懒得研究。反正都装上也没多大,嘿嘿)
访问 Gmail 弹提示的原因出在给 google 发证书的 Equifax ,它的证书并不在 s60v2 的信任证书列表里,据说三版就内置了。用手机浏览器访问 http://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority_DER.cer ,或者下载这个文件再在手机打开也行,按照提示信任并添加上访问网络的选项。搞定!

网上一般都提示到 www.ocasta.co.uk/cert.html 去看,可是这个网页已经不存在了囧。连点提示都没有就断了线索。 http://www.final4ever.com/vb/s60-applications/125741-gmail-untrusted-certificate-problem-solved.html 这里有提示,是 Equifax 的问题。具体在哪个网页上找到下载链接的我忘记了囧~

ps:要是给这篇拟个副标题,绝对是"偷懒万万要不得",其实早想到只要把手机调成英文 google 一下提示的词必然有解答,但偏偏懒得去弄(>_<),后果就是浪费了好几天的光阴……

2009年8月15日星期六

将 ucweb 英文版修改为国内服务器

越来越不待见 ucweb 了,可没办法。我用的是 6.3 版英文版的。 不知为啥 fetionapi.appspot.com 只能用中文版的访问。于是就做了个英文版的共存,把图标改成 ucweb5 的蓝色图标, .app 文件里有三处 unicode 字符串 "300" 改成 "999" (<-据说是传给服务器的语言代号, 300 是英文, 999 是中文,在安装包文件名上也可以发现),英文版版本号 08072511 也要改成中文版版本号,我用的是 08070412 。版本号每次都在语言代号后面出现,很好找(^-^)
有时间可以参照 http://os.deepin.org/read-htm-tid-1085784.html 这个 hack 一下 lp_navi.cd_data ,导航的链接我从来不用,把 twitter 、 dabr 、 wiki 之类的加进去应该不错~
写程序 high 得死去活来的热忱差不多前两天就熄火了~终于脱离了癫狂状态,真好。

2009年8月14日星期五

profimail 实在不是一点半点的爽啊啊啊啊~

稍微折腾一下就很顺手了。毕竟在 Opera 的 M2 上已经有了不少心得。
可以只下载邮件的开头部份,对于泡园子来说真是非常实用的功能呢~
老版本的 s60 上很难得有这么有爱的软件了。 lonely cat games 的实力没得说, x-plore 和 smart movie 都是他们的神作。
以前我把能找到的 n72 邮件程序都试了一圈,结论是唯一满足我要求并且可用的就是 profimail ~不过当年没收入, 200 多人民币绝对是巨款了……
profimail 目前在打六折~税后折合人民币150……好想好想买~恰好老妈本月意外的多给了200块……呃……可是还有预定的书款要支付(>_<)
(有了这个大概很可以缓解我对于 BB 的渴望吧……不过以后真的离了邮件不能活了囧)

2009年8月13日星期四

咩咩~突然有要 level up 的预感呢~

昨天似乎有点明白了 dive into python 里那个之前总觉得是天书的"自省"到底是啥~今天因为有新点子要实现,爬去搜设计模式……迷迷糊糊的看了也许是台湾式术语的一点介绍,也有一点点明白了。
总之都是碰了以前不敢碰的东西呢……也许是好的开始,逐渐发现以前那些觉得艰涩不解的好东西其实就是那个东西而已……好比函数我从四年级就接触,会用会解,可实际上顿悟它是什么东西已经是初二了orz
我真的很笨的……

吃苍蝇的夜晚

这几天写程序 high 到不能自拔,连我自己都想给自己电击一下。今晚终于想起来分心听点音乐。
天天动听提示要升级,我没多想,点了是……安完觉得界面华丽了,但问题是我并不特别待见华丽的样子本身——比如苹果系列的东西。终于可以用快捷键调音量了。出现在屏幕下方的关不掉的提示栏让人有不祥的预感——流氓软件如迅雷暴风都有这种东西。果然,联网找不到我要的歌词,却下了一堆排行榜什么的东西。以前不是没有,只是不这么流氓的放在显眼的位置强迫人看。我感觉像吃了只苍蝇,重新下载了 3.31 版,安了回去。
我真的是相当喜欢 Lrc 歌词显示的功能……靠,难不成这种东西也要自己写才能放心不碰到流氓?
联想到 ucweb 最近把用户名改成了数字,这种跟 ipv9 一样的从字母到数字的倒退是否意味着 ucweb 要向玩数字账号的老大哥腾迅学习呢?
真的是非常怨念可以用流量压缩的 Opera Mobile ……N72 用面向低端机的 Opera Mini 来说有点浪费,塞班的 java 平台支持怎一个烂字了得(>_<),用直接解析网页的 Opera Mobile 则感到力不从心,毕竟配置古老,对应版本的 Opera Mobile 也相当早了,不支持压缩。 ucweb 正好填补了这个高不成低不就的空缺。其实我相当的喜欢 ucweb 。如果一个月收 5 块钱流量和服务费可以不被不感兴趣的新闻和广告骚扰,我大概眉头也不会皱一下。天天动听要是标价 20 块终身没有广告,我想我也会买。比起动辄十几美金的外国软件,国产软件的成本优势其实很大。可惜破解和盗版太猖獗,卖软件挣不到钱,就只好做流氓了。
二版机也就这样了。不能想太多。不然更恶心。

2009年8月12日星期三

刚刚反应过来,当时做梦想到短信中心存在某个文件里,读出来就知道到当前门号了,确有其事……跟获取当前主题的道理一样,找了一下,就在手机的 c:\system\shareddata\100058be.ini , SmsSCA……
囧。早知灯是火,饭熟已多时。这回才要彻底泪奔了呢~

2009年8月11日星期二

搜一下就有了……

python s60 的飞信程序=v=
http://goldengrape.org/2009/05/fetion_for_the_one/
作者是金色葡萄 (@@goldengrape) ,在 blog 上第一反应找 twitter 帐号尾行之XD 然后才是把 blog 的 feed 加入 google reader 。


--

2009年8月10日星期一

囧囧的火星一下

一直不知道 pys60 怎么振动。今天查了一下,用 miso.vibrate(1000,100) ,前一个参数是振动时间,以毫秒为单位,后一个参数是振动强度,可以取 1~100 之间的值。( http://www.icebugger.cn/2009/03/20/experience-pys60-3/
嗯,我没性趣用手机当 Masturbator ,虽然安了那个小软件。不过按完按钮有事情发生真的挺不错的~尤其是不看屏幕进行操作的时候~

用 python 处理 xls 文件

想让每日作业计划需要的 excel 文件自动生成~
用 PyExcelerator 的资料
http://blog.chinaunix.net/u/10686/showart_529096.html 使用 pyExcelerator 读 Execl 文件 by libin1983
http://blog.donews.com/limodou/archive/2005/07/09/460033.aspx [Python模块]使用pyExcelerator来读写Excel文件 by limodou
http://cocobear.info/blog/2009/01/16/use-python-deal-with-excel/ 使用Python处理Excel表格使用Python处理Excel表格 by 可可熊
大家真是没创意,标题都差不多 =v=


打算用 PyExcelerator ,不行再上 win32com 。
xlrd ?以前试图用过,可惜摸不着边,有心理阴影,实在不行再说吧>.<

第一个坎是不会安模块=.= 还好有 readme 和 google 。右键我的电脑-属性-高级-环境变量,在 path 里加上 python 的安装位置。然后捣鼓着弄好了。

第二个问题是…… PyExcelerator 的读和写完全找不到关系哎>.< 读倒是出乎想象的简单。可是写……
http://www.unix.com/shell-programming-scripting/82612-perl-split-excel-workbook-indiv-excel-files.html
这里给了现成的代码^v^
意料之内, PyExcelerator 读得不错,不过写出来就很干瘪了>.<

虽然心理上非常讨厌只支持 windows 的东西,但是没办法……安了个 PythonWin ,以便使用 win32com 。

http://ipython.javaeye.com/blog/328249 python写excel文件
也许可以用~

http://jinheking.javaeye.com/blog/163250 python 读取excel(ZT)
看起来很不错哦~不过问题貌似是没有出处囧

http://topic.csdn.net/u/20080611/14/854cae71-4c6a-43ef-8c17-14ef1b3c42a5.html
三楼有个使用win32com.client的封装

今天大概是没希望写完了。不过进度很乐观。明晚美好的夜班又有有意义的事可做了=v=

2009年8月9日星期日

充分利用有限的条件追求无限的快感

pys60 对于二版机的放弃当然是没办法的事情。好歹不是像一版机那样 image 连 open 方法都没有。所以呢~就在能够折腾的范围里尽情折腾吧XD
QR 助手全面重写中~

想当然

想当然的以为 python 可以像 c++ 那样把同名但参数个数不同的函数当作不同的函数。于是噼哩啪啦的出错鸟~
动力十足的乖乖爬去仔细看 Tutorial 的相关章节,倒是因祸得福。

重来

昨晚睡醒了,把那堆东西重新写成类的形式。感觉还是不爽。毕竟使用 appswitch 的时候不需要考虑程序是否在运行,但每次都从 appswitch.process_list 里取得 appswitch 可用的程序名则限制了只能对正在运行的程序操作——仔细想想实在蠢得要命。所以把 appswitch 可用的程序名持久化是必然的。
今天把 cerealizer 翻出来,哈~好久不用连名字都忘记鸟~ pickle 的替代品,用之前要注册一下类。我想也许以前没用它最大的可能性就是当时不会用类。笑。
囧囧的发现一个 bug ~当 DEdit 开启多任务之后,开启的进程 uid 都是 1 。
猪是怎么死的?答曰:笨死的。←说的就是我(>_<)竟然忘了还有一个叫作 applist 的模块。自pia~
被一个非常低级的错误折腾了一个多小时。通过赋值语句调用的方法当然要 return 点东西回来,可我愣是给忘了,在方法内部造成赋值就直接光秃秃的 return 了>_< 于是每次运行完了赋值结果都是 None 。囧死~

2009年8月8日星期六

折腾了一夜

在 appswitch.application_list 里,跟 appswitch.process_list 里的项目对比,除了神秘的 EiksrvBackdrop
不能关也没界面之外,别的都能对上号。
试着用了 try...except ,果然很爽。同样想试着用 class ,不过并没有足够的动力~哈哈~等需要的时候再说吧。

笨蛋笨蛋,我是笨蛋

这回又是一个没有文档的东西救了我~ appswitch.process_list() 准确的说,它是个"同人"版本里的原创内容(出处在这里 http://discussion.forum.nokia.com/forum/showthread.php?t=68541 )。哇哈哈~这个版本的 appswitch 我一直在用,但手头原来搜集到的源代码包都是官方版本,所以不太清楚那东西该怎么用。
伟大的 cyke64 大人再次给出好东西,那个辅助的 start_app 真是不错,俺自己也写了一个。准备敲打敲打扩充一下,毕竟用中文还是不能指望直接用一个 appname 参数一勺烩——自己试着写一个通用模块真的感觉很棒(*^_^*)。
在搜索的过程中,被一个自称中国男孩在论坛上让大牛们说中文的家伙囧到了(>_<)这孩子一定没看过《提问的智慧》。

今天算是和标题耗上了~20090807

今天从早晨就开始慢慢写~
把短信查手机余额的脚本扩展了一下,根据当前的门号发不同的短信指令。没什么特别的,一直想弄,只不过今天才动手——同理还加了个按红键显示软件界面的功能,以后肯定得扩展,目前先搭个框框。
今天为了偷懒从程序 .app 的名称得到 appswitch 模块里能用的名字,把 _caption.rsc 的这类文件折腾得不轻, google 到两种—— a 码和 u 码(懒得看英文(>_<))。结合以前在手机上玩汉化的痛苦经历,好不容易 hack 出一种,结果还不对,一怒之下把手机上 95 个 _caption.rsc 都搜出来挨个看并且分类。
在十六进制编辑器里看,用于这种标题文件的字符串其实有两种:字符数 + 字节数 + 内容,字符数 + "ab" + 内容。前者是 ascii 码,英文字符数等于字节数,中文里二者一般不相等,需要在"内容"开头加 "0f" 表示以下是双字节内容;结尾应该加 "e0" ,因为有字节数指针,也可以省略。"字符数 + "ab" + 内容"没什么好说的,内容也是统一的双字节,很爽。
一般汉化所说的 u 码文件,含有 2 个带 "ab" 的这种串。可 a 码文件用哪种的都有,甚至还有一样一串的、一串是空串的、一共只有一串的(>_<)
最令我绝望的是, appswitch 里可以用的字符串并不一定是 _caption.rsc 的哪一个⊙o⊙
囧死了。还好自己用的程序里需要涉及的软件不多,希望不要碰上太变态的。万一碰上了……就跟丫拼了!(像 z 盘的内置程序这样木有 _caption.rsc 的咋办咧?囧)
我就是觉得连名字都知道的程序,再为它去专门手工维护一个 appswitch 用的小名,超级不爽~

2009年8月6日星期四

节约

惊闻单位要发的手机不能卖。可爱的 N72 依然要继续服役~我在 pys60 的时间又宽裕了很多。也许下一步可以开始期盼 Android 出不带触摸的 GC 双模机哈~毕竟现在看不出有人企图把 jython 搬到黑莓上的迹象。不能自己折腾的话,玩手机的乐趣起码少掉三分之一。
继续折腾日夜模式切换的脚本,希望给里面加上让 QReader 改变背景颜色的功能。为了延长 flash 有限的寿命,多读少写是个好方法。所以决定在切换日夜模式的时候只对当前正打开的 QReader 起作用。其它的背景颜色切换大可以放在 QR 助手里启动之前进行。
按照我的使用习惯,用代码修改 QReader.ini 里的颜色并不难~修改之后,在阅读界面,关闭文件再重新打开即可生效;在文件列表界面,如果选中了文件可以打开文件再关上,更万无一失的方法是退出程序再进去(*^_^*)
想要优化一下 QR 助手的显示,又不想通过另开一个文件来进行进程间通信。突然想起来传说中 s60 的 system\Shareddata 文件夹下有一堆系统设置文件,应该有当前主题的吧?用修改时间很容易找到是 10005a32.ini 。虽然没有权限编辑,但是只要用 os.path.getsize("c:\\system\\shareddata\\10005a32.ini") 取到不同的文件大小,能够对应不同的情况就可以了XD
真 TMD 的美好~

杀虫

嗯,懒得动手所以先动脑子被证明是正确的(>_<)莫名其妙跑出来的 bug 被顺利的杀掉了。产生 bug 的原因是退出的时候把 while 循环的循环变量置为 0 ,于是在循环内部停止按键映射的语句就不会被执行。囧

bug

把截图语句换成 pass 竟然也可以……囧。
决定把背景色切换丢在沉默启动的脚本里做。
冒出一个奇怪的 bug ,QReader 退出之后,按键映射竟然还继续有效(>_<)
我的 RP 未免太差……算了。本来不想伤筋动骨的改程序最主要的部份。现在看来是不可能了……恰好我也想改一下它的逻辑了~

2009年8月5日星期三

折腾

睡够了~看够了帅哥,继续折腾代码。
把阅读时的删除键改成切换来笔记或花痴用。就是有时候不记得要用……囧
不能用 end_app 的原因是用它 QReader 就不会保存阅读进度(>_<)
其实可以考虑用挂机键~嘿嘿。但是白屏是免不了的囧~那个没办法。可惜试验发现不行唉~模拟按下挂机键什么都不会发生。(>_<)
现在的思路是把关闭变成两步,如果正在阅读,就退出到文件列表。加了一个截图的语句之后再用 end_app() 就不会白屏,直接结束程序依然会白~囧

2009年8月4日星期二

响应神的号召

http://www.venganza.org/2009/07/21/help-team-fsm-raise-100k-on-kiva/
连 FSM 大神都发话了,怎能不从XD
kiva.org 是我在有收入之前就决定参加的项目。从工作以来每个月存100人民币——我的可支配收入的三分之一打算专款专用在 kiva.org 上。问题在于我没有支持 VISA 的信用卡。把招行的信用卡销卡之后,我目前是一张信用卡也没有。
浦发现在的 WOW 卡费用政策其实挺烂的,要那么多的前期投入,刷六次免年费也只是跟招行的普通卡一样。我就是为了不花多余的钱才想弄个免年费的卡=.=所以还要再等下一轮政策>.<
算了,再说什么也只是 YY 而已。因为我的收入不够 WOW 卡的申请标准呢……爬走。

再次火星……招行的手机支付

https://mobile.cmbchina.com 招商银行手机银行
好吧是我多心了。我以前以为招行的手机银行需要走 wap 验证手机号信息(像浦发那样)……原来只要在支持 wap 的浏览器里输入短信里的支付网址就可以=v=(看了 http://blog.cn-ic.org/?p=306 才知道)
亲爱的 Opera 再次原生支持~真是令人感动。
浦发的手机网银就是走 wap 的,我的水货 N72 上不能登录——不知道是哪里的问题。不过反正我也只在电脑上买东西,何况上网流量还是挺贵的。
从某种意义上看,招行算是变相开通了和浦发类似的手机短信验证业务,二者区别在于招行的验证信息就是支付网址,从键盘上敲的要多一些。
我还是乖乖的用我的浦发就很舒服^v^

2009年8月3日星期一

清理

终于忍不住,对乱到自己都无法忍受的代码们下手了~
起因是好不容易实现了 QR 助手的主界面可以和桌面颜色同步,但退出 QReader 之后会有短暂的白屏,于是 QR 助手的主界面就必然是白的了囧。
或许用 end_app 是个好主意。只是我记得以前试过,似乎有哪里是会出问题的。

2009年8月2日星期日

纠结

我还想用删除键来把写 Email 的"信息"或者"电子邮件"界面切换到前台。背景颜色切换也许可以试试 hack QReader 的 ini 文件来实现,毕竟是依赖于桌面主题的操作,纯手动感觉很蠢(>_<)

Keycapture 会死循环吗?

在 Keycapture 的函数里调用了被捕获的键的 Keypress ,似乎会引起死循环。以前似乎就碰到过,但是没有仔细研究,没有找到问题所在,更没有比较好的方法——现在也实在没有。
昨天晚上为了让删除键在文件列表下可以完成删除这个动作,真是费了九牛二虎之力。最后还是通过模拟按键调用菜单中的删除实现的。
真丑!可是我没有更好的办法了(>﹏<)

2009年8月1日星期六

着迷

我想我是迷上截图取点看颜色来判断当前状态这种方法了~真是令我不安。因为它太好用同时也太偷懒了~哈哈~
我目前碰到的问题是 QR 助手里并没有合适的键用于绑定切换背景颜色的功能……我只要一个键就好……但问题是看起来的确没有。
试试看把删除键重载吧~判别当前是不是文件列表可以用图标中黑白灰以外的颜色——它们不会在阅读界面的类似位置出现,也与主题无关。我好聪明(*^_^*)

遭遇系统 bug

前两天随手把手机上的 pys60 从 1.4.4 升级到了 1.4.5 。今天突然发现自己写的语音报时出了毛病,上午8点报成了下午4点。
确认我没写错,调试了一下。原来是 time.time() 给出了奇怪的返回值,在当前系统时间上又加上了一遍和世界标准时的时差:设置成伦敦时间一切正常,设置成柏林时间多一个钟头,设置成北京时间就会多八个钟头(>_<)
在 pys60 1.4.5 下:
time.localtime(time.time())=(2009, 8, 1, 22, 3, 48, 5, 213, -1)
time.gmtime(time.time())=(2009, 8, 1, 6, 3, 48, 5, 213, -1)
time.timezone=-28800
囧~咋办捏?虽然可以用 time.gmtime(time.time()-time.timezone) 代替 time.localtime(time.time()) ,不过实在太丑了。所以我还是乖乖的用 1.4.4吧~
很难得不是我的错导致了 bug ~哈哈~