Archive for the ‘不知所云’ Category

我希望的世界

星期日, 五月 23rd, 2010

读高中的时候,“新概念”作文正是开始的时候,记忆特别深刻,第一名的作者是某校的“韩寒”,作文名字叫杯中窥人,当时就专门买了本新概念作文回来,就为了看一下这篇文章,一看才知原来自己才疏学浅到如此地步。
10年后,那个叫韩寒的成了全球最有影响力的人物之一。前几天韩寒发表的这段话我又开始记忆深刻了:
“不通过房地产或者卖地,不通过低端的加工业,一样有高GDP,而且是人均。好人不翻墙,坏人进监狱,有影响世界的文化,有别国模仿的文艺,一样干净的环境,一样自由的空气,看着被关进笼子的权力,把酒言欢,言无不尽。”

思考的时间

星期二, 五月 18th, 2010

如果一天花两个小时在公交车上度过,思考的时间就来了。我很庆幸终于有时间思考一下我原本感兴趣却没时间思考的问题了。

无语

星期五, 四月 30th, 2010

感冒,去诊所拿了一堆药,回来一看,里面赫然躺着一瓶眼药水。
tnnd!

中国移动飞信通信协议分析

星期二, 四月 13th, 2010

作者:刘华栋 2010.4.13
本文目的在于探讨学习,请勿用于非学习外的任何用途,否则后果自负。

出于某些需求,要用到手机短信提醒功能,自然还是免费的好。网上流传了很多版本关于飞信的通信协议,大同小异(基本都是基于2.0的,飞信现在2010协议版本为4.0),当飞信更新了一部分协议内容时,这些流行的协议似乎有些问题出现,最典型的就是:

旧版本飞信协议支持输入任何手机号码,只要是发送者好友,即可发送手机短信。
新版本飞信协议支持输入任何飞信号码,只要是发送者好友,即可发送手机短信。
新旧版本都支持发送登陆者自身手机号码为接收手机的短信。

如果我有100个飞信好友,莫非我要记住100个飞信号码?如果我要提供一个飞信接口给大伙,莫非大伙要记住他们好友的飞信号码?
当然,写本文的目的就在于从根本上解决上述两个问题(其实是一回事)。

通过对飞信协议多个版本进行了抓包分析,发现数据包格式没什么大的变化。唯一重要的变化是第五行:

M fetion.com.cn SIP-C/4.0
F:88888888
I: 10
Q: 2 M
T: sip:99999999@fetion.com.cn;p=640
//上面一行旧版本协议这里是:
//T: tel:13599999999
C: text/plain
K: SaveHistory
L: 4

这里就出现一个问题,要想发送手机短信,提交过来手机号不行,需要提交手机号对应的飞信号码才能识别,如何才能把手机号码转换为飞信号码就是解决问题的关键。经对新协议抓包分析,发现并不能直接从手机号码转换成飞信号码,但是中间有一个很不错的变量叫做”user-id”,每个手机号对应一个飞信号码,同样对应每个user-id(至于为什么会多出来一个user-id,我想可能是飞信公司准备把飞信号码当做一种商业资源来使用吧)。其实我们用户的真正的飞信号码是这个user-id,所谓飞信号码,无非是一个数字昵称(another nickname)而已。明白这些,问题就好办了:

1.发送接收者手机号码,抓包获取该号码的user-id
2.发送请求好友列表信息(登陆后自动完成);
3.匹配1user-id,对应的飞信号码(注意格式:fetion_num@fetion.com.cn)
4.发送飞信号码、短信内容,Done

具体代码省略,关键正则函数:

//获取飞信号码
function get_fetion_id($userid, $rst) {
    
preg_match("/ri="sip:(d{6,10}+)@fetion.com.cn;p=(d{0,6}+)"
        user-id=
"$userid/i",$rst, $matches);
    //同理重构函数获取user-id
    //preg_match(
"/user-id="([0-9]+)"/i", $rst, $matches);
    return
$matches[1];
}
?>

这样同样还会存在一个问题:给自己手机号码发送的时候转换不到自己的自己的user-id。解决办法也很简单,只需要在手机号码提交过来最初判断一下是否为登陆号码即可,如果是,取消所有转换,直接进行第4步骤即可发送。

纸上谈兵无用,演示:
Demo1:http://www.liuhuadong.com/phoneme
Demo2:http://labs.liuhuadong.com/cmcc/index.php(暂无,睡醒后继续)
QQREADERC927A243851272DC

加上一个百度新闻和淘宝搜索

星期六, 四月 10th, 2010

博客增加一个百度关于google nexus one的新闻,和一个淘宝搜索推广,没什么实际意义。

面试经历

星期四, 三月 11th, 2010

一直认为在这个城市里面,没有多少php人才,直到昨天面试,发现一个问题竟然是从来没听说过的名词,巨受打击。
一:康盛ucenter跨域登陆的实现方式;
http协议头部分加入P3P(第一次听说这个名词)。至于p3p是什么,阅读这里。g了下发现国内对此技术关注并不是很高,只查到网易通行证在不同域登陆时采用了此;当然还有ucenter。
二:操作ucenter中实例实现同步登陆。
这个以前遇到过,只是没有总结。面试时一直把重点放在了解决通信正常的问题上,其实这完全不是重点。回来后网上查了很多此问题的解决方案,大多都不靠谱,正确解决方案应该是这样:实例ucexample_1.php中有获取cookie函数

$_COOKIE['Example_auth']

,这里面的Example_auth没有被赋值,所以不会被synlogin同步,赋值即可。解决方法有两种,都很简单,一是修改ucexample_1.php文件,把$_COOKIE['Example_auth']换成$_COOKIE['auth'],这里的auth是另外应用的cookie设置的值;

/**
 * 获取当前用户的 UID 和 用户名
 * Cookie 解密直接用 uc_authcode 函数,用户使用自己的函数
 */

if(!empty($_COOKIE['auth'])) {
    
list($Example_uid, $Example_username) = explode("t", uc_authcode($_COOKIE['auth'], 'DECODE'));
} else {
    
$Example_uid = $Example_username = '';
}

二是修改同步应用的uc.php,在synlogin里面新增一个cookie赋值语句:

_setcookie('Example_auth', _authcode($uid."t".$username, 'ENCODE'));

两种方法其实是一回事。
回顾这两个问题,发现这两个问题不是一般php人能问的出来的,所以,莫非提问题的那位是康盛的人??无论怎么说,这次面试给我留下了相当深刻的印象,让我学到了一些东西,也思考到很多东西,记之。

密码保护:虎年大吉

星期三, 三月 3rd, 2010

这是一篇受密码保护的文章。您需要提供访问密码:


discuz in iphone

星期六, 二月 27th, 2010

这两天一直在搞这个,话不多说,先上图:
0123

祝大家虎年如意

星期六, 二月 13th, 2010

祝认识我的所有人:虎年吉祥、身体健康、万事如意!我就不再一一发短信了

小新闻一则

星期一, 二月 8th, 2010

先看新闻一则。

回忆起n年前,许昌某处,全华永普张旭我们一起闲聊的时候,忘了是哪个说的:hd呀,你看人家那个李强……(后面省略)。当时确实不以为然,自从经历了一些事情后,那些邪恶的想法就从来消失在萌芽状态,感觉这些想法有些不靠谱。我应该在内心里感谢大学里面的老师们,给我了很好的学习机会和很多帮助;感谢张旭和我一起体验第一次坐电梯的感觉;感谢在cm工作的几年里接受的正面的文化熏陶,使我受益匪浅;感谢几位好朋友一起交流而意识到的想法。看到这个新闻后我就在想,如果我当时听取了那个建议,那现在这个新闻中是否就会出现我的名字了。

于是,我的大脑立刻又出现了那句我已经给很多人讲过的话:小胜在技巧,中胜在实力,大胜在人格。

如今似乎又回到了刚毕业的状态,又要做出一些选择,只不过在选择中承受了更大的压力。好的是,目标明朗了,那点压力又能算得了什么呢。与以前的虚无的梦想相比,现在的方向似乎更加明确了一点,目标更加清晰一些。早该到来的汹涌的压力们,是迎接你们到来的时候了。

在通往陌生城市的路上,看着窗外一波一波伴随着火车前进而倒退的风景,我在心里对自己说:hi,我回来了。