前 的个人资料miss your eye照片日志列表 工具 帮助

日志


4月29日

存在

听说四舅姥爷前天晚上升天了,多年不联系了,记忆里剩下的就是个整日不停批评所有人的天津老头,小时候常去他家的原因很简单,我放假一定要去动物园,而他家就在动物园旁边,一转眼我快到了那时老妈的年纪,人像所有存在的东西一样,不停新旧更替着,只是宇宙命太长,人几乎体会不到变化,感受不了日月星辰的悲伤,细菌命又太短,更新换代见得太多,早麻木不仁了,所以人大概能明白的,只有人和人之间的事情。
4月22日

政治型土匪

闲时翻看《隐蔽的秩序》,随便看到一则离奇的绑票,32年北霸天绑架了两个英国人,所要130w银元,外加武器烟土绸缎无数,扬言1个礼拜无答复,就割耳朵,2个礼拜无答复就毙了。外加一条,日本人一周内撤出满洲,无条件放人。

肉票本人是对本国政府没什么信心的,他对北霸天说:能掏钱救我的就只有老爹,老爹显然没钱。
北霸天回答:放心,你们政府会掏钱的。
肉票:不可能,你想想,你们的公民被绑了,你们中央政府能管么?(当然不管)
北霸天:(不耐烦)就算你们政府不管,日本人也会管的

结果日本人真的管了,因为英国人扬言要开进东北解决问题。这事里里外外有无限多可感可叹的,不过我没什么才气眼光,分析不透,各位大可自己琢磨,我就好奇这个北霸天,完全智慧啊,马上wiki之,无果,google之,找到不少无关紧要的,不过有一个着实不错,更添几天离奇有趣。

“……抗日义勇军为解决军用物资在营口绑架英国人的事件时,有个很重要的人物叫'北霸天'……”

4月11日

久しぶりの歌

大学時代に好きな歌…

玉置浩二 「元気な町」

しかられても あつまって あそんでた
いつまででもいたかった
はなれたくなくて
みんな輝く季節に 走り出したあの時
そのめになにが見えたの

oh good time
きみと二人で
good time
いつでも
good time
みんな笑顔で
good time
思い出すのさ 生まれた町

手を叩いて 抱き合って 喜んで
いつまででも手をぶった さよならのひに
かぜにうかんだぼうしは夢を運ぶひこうせん
そのときなにがみえるの

Oh good time
せかいちゅうから
good time
届けて
good time
あいしあえるさ
good time
おもいだすのさ元気な町

一日中わらってたり ずっとないてたときも
そのめはなにをみてたの

Oh goodtime
きみとならんで
good time
いつでも
good time
とどけて
good time
すきといえるさ
good time

思い出すのさ 生まれた時

「碧い瞳のエリス」
なくした夢はあおい海の色
あなたにそっとうちあけたい
ひとりきりをわすれるように
どんなにかなしいことも わたしにつたえて
あなたのひとみのエリス みつめかえして

なきたいよるにひらくふるいはこ
少女でいればしかられない
恋のために髪を切る日は
涙運ぶその風が 教えてくれるよ
あなたにあうためだけに 生まれてきたと

初めて聞いた声が懐かしい
思い出よりも暖かくて
二人きりでねむれるように
見つめてかなえる願い ことばはなくても
あなたにあうためだけにやさしくなれる

どんなに悲しいことも わたしにつたえて
あなたの瞳のエリスみつめかえして

「かなしみにさようなら」
なかないでひとりで ほほえんでみつめて
あなたのそばにいるから

夢にまで涙があふれるくらい
こいはこわれやすくて
だきしめるうてのつよさでさえなぜか
ゆれるこころをとめられない

でもなかないでひとりで ほほえんでみつめて
あなたのそばにいるから
唇をかさねてだしかめるのに
ゆめのつづきさがすの
うつむいてひとつのよるにいることも
きっとあなたはわすれている

もうなかないでひとりでほほえんでみつめて
あなたのそばにいるから
かなしみにさよならほほえんでさよなら
あいをふたりために

なかないでひとりでほほえんでみつめて
あなたのそばにいるから
かなしみにさよならほほえんでさよなら
ひとりじゃないさ
なかないでひとりで その胸にときめく
愛をかなえられたら
かざらないことばでなくせないこころで
ひとつになれる

なかないでひとりでほほえんでみつめて
あなたのそばにいるから
かなしみにさよなら

思い出の置き場で、昔の中に迷うようだ
何か探して、いつか出て行くって、自分まで知らぬ
いつもだいじなものを失うこと恐れている
じぶんがじぶんのことゆるせないじゃないか
じぶんにちょくめんできないじゃないか

4月4日

各种不靠谱的事

不靠谱的事碰见的实在是有点多…

你瞧,我下班时用的好好的mac os x,忙完了活,心想ubuntu说装老没空装,就用parallels desktop装个虚拟机好了,结果,parallelsdesktop怎么也没法进图形安装模式,我只好手动设置分辨率,从1280x800,1280x768,1024x768,800x600,640x480……统统没戏,郁闷之余换vmware fusion,更糟糕,连启动都不行,mksQuatz什么什么的报错,虽说,是跟我的显卡有关系,但是,总而言之就是统统不靠谱。

我心想算了,不整了,拷个psp游戏回家玩去,嗯,那个fedora 8的lvm卷坏掉了,30g呢,不如用来装娱乐数据,于是打开mac里的diskutil,很痛快的做了个ntfs分区,拉了个铁拳的iso上去,就关机回家了。

到家之后洗手撒尿,插线开机,我日,径直蹦出来一个GRUB>

我先是一惊,马上开始反省,我搞掉了linux的分区,莫非……扯!grub的文件都在/boot那个ext3分区上,跟lvm没关系,啊,那是谁搞掉了我的grub stage2?必定是mac了,这就去找它算帐。我顺手敲了个rootnoverify (hd0, 按一下tab,grub列出来了3个ntfs分区,除此之外,没了。

完,mac也不见了,我k,太强了,还自尽了,现在只能进xp看看怎么补救了,老天,xp可别出什么问题,我可什么盘都没带回来,要是都嗝屁了,清明节只好欲断魂去了。赶紧chainloader +1, boot,万幸万幸,xp能进。

进了xp,马上打开winhex,一看,好么,分区表后两项都被清零了,只能手写了,我那个恨啊,罪魁祸首不用说就是mac的paragon ntfs驱动了,唉,算了算了,反正也是盗来使的,又不能打上门去索赔,求人不如靠自己,当务之急,先恢复了再说。

在后面那100多G unallocated space里搜索H+,迅速就找到了HFS+的分区起始扇区,至于分区大小,这是最后一个主分区,结尾应该有8M自由空间,不过谁还管那些,填满,起始c/h/s ?完全不会算,LBA模式嘛,一律fe ff ff,分区类型AF,改完马上重启,mac恢复了,不过磁盘大小有改变,头一次进入系统时黑屏了,再重启进单用户安全模式,fsck一下就好了。

然后是我的/boot,文件系统是ext3,这个就比较苦恼了,ext3没有像ntfs和hfs plus那样特征明显的signature,不太好找起始扇区位置,我从前一个扇区结束处+63的扇区,掐着指头算了算,指头数量不够,不小心算错了2次,搞的人情绪焦躁,这个分区要是搞不定,每次启动都得手敲好几条命令才能进ntloader菜单,这种重复运动会要命的,第三次,我用计算器算了一把,总算对了。

一个本该是看jabber的美好夜晚,就这么给耽搁了,唉,看书无意思,编码没心情
4月3日

邪恶的actionscript3

正在c/c++/object c里快乐遨游的时候,突然被分配个任务,用actionscript搞定ejabberd的登录过程。

我在一片茫然中上路了,jabber是个我听说过的词,仅此而已,于是google之,搞来大堆的xmpp协议,粗看了一点认证相关的,知道了ejabberd得用sasl进行认证登录。对这些自然我毫无概念,没办法,只好先问同事,有没能登录的客户端?答曰有,叫pandin还是什么的,拿过来先打开登录了一把,用抓包工具整下来一堆packet,一看,不少是base64的,马上拿base64 -d挨个解开看了看,好了,有素材了,接着研究xmpp。

认证过程基本如下:
C: <?xml version="1.0"?><stream:stream to="marble.kwibbler.com" xml:lang="zh-cn" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

S: <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='1786012635' from='marble.kwibbler.com' version='1.0' xml:lang='en'>

S: <stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism></mechanisms><register xmlns='http://jabber.org/features/iq-register'/></stream:features>


你看,到此为止,server给了2个认证机制选择,不过选PLAIN我试了不成,具体为什么也没时间琢磨了,一群人等着呢。

C: <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="DIGEST-MD5"/>

S: <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>[base64encode string_auth] </challenge>
C: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">[base64 encode string_response]</response>..
S: <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>[base64 encode string_rspauth] </challenge>
C: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
S: …<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>………………………

server回复的第一个string_auth,base64 decode之后是如下格式:
nonce="3539877537",qop="auth",charset=utf-8,algorithm=md5-sess

client给这个challenge回复:
username="test",realm="",nonce="3539877537",cnonce="bcddb6df1c013edf047bd2570e42512bf6eb49e9",nc=00000001,qop=auth,digest-uri="xmpp/[yourhostdomain]",charset=utf-8,response=57358c45f63660ffdad3d5a4aaae55df


cnonce是随便生成的一个串,我在actionscript里是生成一个uuid,nc是response的编号,理论上说,这个串base64之后是一次发出去的,nc基本上不会有变化。唯一一个来源不明的东西,就是response的生成过程。

这玩意还真是麻烦,生成过程如下:
1. ha1 = md5(username:realm:password)
2. ha2 = md5(ha1 + ":nonce:cnonce").toString()
3. ha3 = md5("AUTHENTICATE:xmpp/yourhostdomain").toString()
4. ha4 = md5(ha2 + ":nonce:nc:cnonce:qop:" + ha3).toString()

ha4就是response了,注意ha1并没有toString,md5 hash之后得到的是16个字节的原始数据,再追加上:nonce:cnonce,对于c来说,想处理错都很难,actionscript就麻烦了,对字串没有逐字节操作的方式,如果逐字符操作,不幸的碰到一个被解释为双字节甚至多字节utf字符的话,一次就跳过了多个字节,假如无视了这个,某些人品差的帐号密码组合就没法登录了。

我翻了老半天as的文档外加google,也没找到一个String和ByteArray互转的好办法,最后只能一狠心,给String和ByteArray各做了一个md5的method,代码不用说,相当丑陋,不过总算拯救了一批人品差的用户。

ejabberd也还是有不少怪癖的,比如client发送的xml流里一旦有了0,就会回一个/stream:stream并断开链接,可怜的actionscript3的XMLSocket默认会给每个发送的xml包尾追加0,所以xmlsocket这种高级货基本就成了摆设,用socket吧,就得自己parseXML,偏偏XMLDocument的parseXML贼严格,你说socket这玩意,本来就没保证过每次都正好收到一个完整的xmlnode,所以parseXML就出了各种语法畸形,安全沙箱,烦死了,整的我只好人肉增加pending,拼凑xmlnode。

总之actionscript用起来是挺缚手缚脚的,还有就是我比较贱,对于只new没delete全靠垃圾收集的玩意,永远都惴惴不安的,我控制欲太强,实在是不喜欢这么高智能的玩意。
4月2日

iphone开发

iphone到手之前,就事先试过sdk了,网上的反响也不错,就以为拿iphoneSDK开发iphone应用也一马平川了。一试才知道并非如此,首先apple在sdk上做了些限制,利用apple iphoneSDK所能做的应用程序范围不大,假如真的把iphone做为OS看待,那么这个SDK也确实小家子气了点儿;其次SDK已经beta2了,beta1和beta2对应的firmware分别是1.2和2.0beta(?我不是特别确定),随便编译个程序出来,搁我的1.1.4上,大部分不转。这么看来,挺好一个SDK摆在眼前,却不知道怎么派上用场。

头一个问题的解决办法是导入一些hack过的头文件,包含了许多low-level API定义,网上随处都是教程,这种随时可以过期的信息,我也不必拿来凑字了。第二个问题也有人在hackt0sh上给出了方法,把iphoneSDK复制一份,将文件系统替换为1.1.4的,配合前面的low-level头文件,再加上一个xcode的工程模版,甚至可以用上apple自己的编译器和ide,当然opensource toolchain的拥趸们反对这样做,此外想必使用官方SDK之外制作的应用程序,也会被拒绝登录applestore。

这些说的有些远了,对于使用xcode+officialSDK+1.1.4的人来说,可能会碰到<AudioToolbox/AudioQueue.h>找不到的情况,从运行着1.1.4的iphone上获取的filesystem中确实找不到AudioToolbox.framework的头文件,不过我试过了,SDK beta2的iPhoneOS2.0里的头文件替换过来时可以用的,至少NES模拟器我可以编译出1.1.4可用的版本了。

太容易过时的知识不免让人有些郁闷,假如iphone应用开发者大部分的精力都放到与新版本os+sdk搏斗移植上,开发者的体验自然高不到哪去,那么使用者体验也乐观不起来。