思考的时间

  • 五月 18th, 2010

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

jquery flot 对ie6/7/8支持问题

  • 五月 3rd, 2010

flot是基于jquery的一个chart插件,功能随没有JQchart功能强大(非专业性的图表项目,强大可以用臃肿代替),也没有google chart api使用方便,但这个小东西使用起来还是很方便,显示效果很好。
flot对firefox和chrome支持很好,稍加修饰即可显示出流畅的图表,但在ie下显示空白,看了一些解决方案,说flot不支持ie,其实是早期不支持ie8,现在已经全面对ie进行了支持。如果在ie下显示空白,可以加入”excanvas.js”文件(发布包里包含此文件)来修复:

<?php
<!--
[if IE]><script type="text/javascript" src="../excanvas.min.js"></script><![endif]-->

即使加入以上内容,ie还有可能会出现空白,这个问题困扰我了好几个小时,最后检查结论是:在ie下,json数据格式中,不能有多余的逗号(虽然在chrome下显示正常):

<?php
$
(function () {
        $.
plot($("#newimg"),
            
[[[0,2],[413,2]],[[0,3],[0,3]]],//这里最后逗号不能少
            
{
            
yaxis:{
                
max:"20",
                
ticks:[[2,"xhat"]],
                
labelwidth:10//最后加逗号chrome正常,ie各版本全部显示空白
            
},
            
shadowSize:5,
            
lines:{show:true},
            
points:{show:true},
            
grid:{hoverable:true, clickable:true},
            
xaxis:{max:10}
            
}
        
);
    
});

希望这个结论能帮到同样遇到此问题的同学。

无语

  • 四月 30th, 2010

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

Assigning the return value of new by reference is deprecated in xxxx的解决办法

  • 四月 20th, 2010

自从php5.3,越来越多的人会遇到“Assigning the return value of new by reference is deprecated in xxxx”这样的提示,尤其是在国外产品中(例如wordpress、joolma),很多人的解决办法很简单:把php版本换回就版本就ok了。毫无疑问这是个好办法,对这种遇到问题不求甚解的态度可能会让人看到些什么。我认为要换回php的旧版本,其实是对php技术爱好者的一种羞辱(用词不当,大致是这个意思)。解决办法:php5.3开始后,废除了php中的”=&”符号,所以要想复制,直接用=引用即可。详细如下:

1、PHP5对象复制是采用引用的方式;
2、如果不采用引用方式,则需要在复制对象时加关键字 clone;
3、如果在复制的过程中,同时要变更某些属性,则增加函数_clone();

中庸的庸,不是指的平庸

  • 四月 15th, 2010

很多情况下,我一直认为技术能改变一切,或者说“只有”技术可以让改变来得更加彻底。虽然我不想承认,但我还是理智的发现我的这个观点错了。技术自然可以改变很多事情,但对于人类特有的感情来说,还是有很大区别的。发现某段程序错了,导致了很严重的失误,但经过查找,终归回找到错误并修复之。感情不一样,里面没有ctrl+z,没有undo。生意场上大致也是这么一个道理,当面临感情和利润的纠纷时,如果选择了利润,那么恭喜你,你是一个成功的商人;但如果选择了感情,那么你可能是一个伟大的商界领袖了。所以纯粹以金钱为目的的活动应该不会被历史认同,纯粹为感情而生也不会为历史作出太多贡献,纯粹为技术而生可能也会被历史遗忘。但是如果让在我在目前注重的技术与感情中间选择的话,虽然我仍不能完全认同感情第一,但现在我会选择后者,我宁愿扔掉一些技术的清高,索回一些人类最珍贵的感情。
又想到了“小胜在技巧,中胜在实力,大胜在人格”,技术再牛只能算小胜,做生意成功叫中胜,真正大胜的是人格这个感情化的东西。
突然,想到了这样一个标题:中庸的庸,不是指的平庸。

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

  • 四月 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的新闻,和一个淘宝搜索推广,没什么实际意义。

测试一下你的最快击键速度[附排行榜]

  • 四月 4th, 2010

输入速度全球排行榜。
作者:刘华栋 2010.4 原创作品,欢迎转载流传
无标题
具体使用方法很简单,打开下边这个页面,直接用键盘开始输入字母a到z,顺序不能弄错,输入完成即会自动显示用时。
虽然这可能是个无聊的作品,但还是花了我不少时间才搞定,中间涉及js、css、php、mysql,我自己的26个字母的输入记录是<5秒,具体多少忘了。我的目标是达到4s以内,不过看来希望不大。
挑战地址:http://www.liuhuadong.com/labs/top.php

tips:
数据库中使用group by的时候,可以同时使用min(字段名)/max(字段名)来获取每个group中的最值,这个sql语法简直太棒了,大大减少坐在电脑前呼出的二氧化碳含量,节能环保。

vim之gg=G

  • 四月 3rd, 2010

无论你是vim老手还是菜鸟,vim总会给你一些惊喜甚至是惊奇。就像今天发现gg=G全文缩进这个命令一样(或者说发现=为缩进)
例如目前代码:
无标题
使用命令:=}(当然不是标题中的gg=G,vim的微妙之处就在于你看到一个命令会联想到很多自己想要的组合命令)
无标题

php判断访问iphone访问

  • 三月 29th, 2010

为discuz做的iphone版本基本完工,为了方便访问,直接在首页对iphone的访问进行了判断,然后直接跳转
无标题
使用以上代码判断,经测试效果很好。

@