22 / 11 / 2012 buling

      最近运维那帮子把公司的RTX升级到2011版了,昨天下午听了腾讯一数据挖掘总监给我们分享数据方面的心得,听的很有感触,以前没感觉听人讲数据讲的这么传神,不过此哥们绝对牛掰。尤其是在用宽表做数据自动化查询,一般请求都是2秒内搞定,说的人激动不已。期间提到了rtx开发问题,今天闲来没事也就研究了一把,开发本来跨平台跨语言,但是有个很坑爹的ip限制(即客户端调用ip限制)问题,最后随便搞了一下web集成,现发布一个封装的半成品

var rtx_client = function(){
    var obj_api;
    var key_obj = {};
    var key_conf = {
        'im'    : 'RTXPlugin.IM',
        'pro'   : 'Profile',
        'root'  : 'KernalRoot',
        'app'   : 'AppRoot',
        'pres'  : 'Presence',
        'face'  : 'FaceImage',
        'prop'  : 'Property'
    };
    //获取对象单例
    var _get_obj = function(key, nocache){
        if(nocache || !key_obj[key]){
            key_obj[key] = obj_api.GetObject(key_conf[key]);
        }
        return key_obj[key];
    };
    //初始化
    var _init = function(){
        obj_api = new ActiveXObject("RTXClient.RTXAPI");
    };
    //获取用户信息
    var _get_profile = function(name){
        var obj_pro = _get_obj('pro');
        var ret = obj_pro.Call(1, name);
        return {
            number : ret.Value("RTXNum"),
            nick   : ret.Value("Nick"),
            name   : ret.Value("Name")
        };
    };
    //获取属性对象
    var _get_property = function(conf){
        var prop = _get_obj('prop', true);
        for(var i in conf){
            prop.Value(i) = conf[i];
        }
        return prop;
    };
    //弹出框消息
    var _send_msg = function(name){
        var obj_im = _get_obj('im');
        obj_im.call(1, name);
    };
    //弹出框消息
    var _send_msg_x = function(name, text){
        var obj_im = _get_obj('im');
        var prop = _get_property({'RTXUser':name, 'Text':text});
        obj_im.call(1, prop);
    };
    //获取我的信息
    var _my_info = function(){
        var obj_root = _get_obj('root');
        var obj_manager = obj_root.RTXBuddyManager;
        var obj_helper = _get_obj('app').GetAppObject('RTXHelper');
        if(obj_root.Account != ""){
            var sname = obj_manager.Buddy(obj_root.Account).Name;
            var desc  = obj_helper.GetBuddyDept(obj_root.Account);
            return {
                'account'  : obj_root.Account,
                'rtx_name' : sname,
                'desc'     : desc
            }
        }
        return null;
    };
    //检查在线状态
    var _check_status = function(name){
        var pres_obj = _get_obj('pres');
        var ret = pres_obj.Call(1, name);
        return ret.Value('Status');
    };
    //获取用户头像
    var _get_face_img = function(name){
        var obj_face = _get_obj('face');
        var ret = obj_face.Call(1, name);
        return {'on'   : ret.Value('Online'),
                'away' : ret.Value('Away'),
                'off'  : ret.Value('Offline')};
    };
    //检查支持度
    var _check = function(){
        return obj_api ? true : false;
    };
    try{
        _init();
    }catch(e){
        alert('出错啦:'+e);
    }
    return {
        profile   : _get_profile,
        send_msg  : _send_msg,
        send_msg_x: _send_msg_x,
        my_info   : _my_info,
        support   : _check,
        status    : _check_status,
        face_img  : _get_face_img
    }
}();

      很遗憾的是send_msg_x和profile并不能成功执行,其它执行都很顺利,估计是有什么限制。略过不言。因为是用了ActiveXObject生成对象,所以只能在ie下使用,至于firefox的兼容性没有找到方法,QQ 使用了历史很悠久的 NPAPI(Netscape Plugin Application Programming Interface)接口。NPAPI 几乎支持所有主流浏览器,包括 FireFox、Chrome、Opera(IE 从 5.5 后停止支持 NPAPI,转而使用 ActiveX)。http://www.lovelucy.info/tencent-sso.html, 值得提一点的是,rtx做sso登陆(js获取rtx的sessionid在服务端做校验)还是很不错的,以后有好项目就把他给用上,下面是点点用法

var ret //想在debug看值
$(document).ready(function(){
    if(!rtx_client.support()){
        alert('需要安装rtx插件');
        return ;
    }
    ret = rtx_client.my_info();
    //rtx_client.send_msg('ronggr');
    //alert(ret.nick);
});
22 / 11 / 2012 buling

      前段时间本来在折腾EsunPHP框架,第一版完成后没什么事就和一个guozw折腾一个交易统计界面,他主要负责的是的是数据,为了达到实时的效果,他负责统计数据后放入redis缓存,前段由php负责取出缓存,展现数据,可以访问http://www.mjix.com/wp-code/stat_demo/html/查看demo。

      之前也花了很长时间学习php扩展开发,确实想在php方面有点成长,http://phpbook.sinaapp.com/ 网站资料很好,非常容易懂,想把框架用扩展写一次,很有难度,不一定能成功,但至少是个积累过程,下面贴一下php的执行流程图

12 / 11 / 2012 buling

      这段时间把EsunPHP搞了一下,然后发现自己的水平并未见增长,又想起以前面试被问及php执行过程,结果哑口无言。某天刷微博,看见国内php大牛推荐了两个网站,其中一个是 http://phpbook.sinaapp.com 译者翻译的很好,读过很受启发,打算自己写一写扩展,但考虑到本地环境大家共用不能老是restart http server,所以就在自己账户下源码安装一个,虽然没什么,但还是打算记录一下
1、http://httpd.apache.org/download.cgi 下载Apache HTTP Server 2.2.23 (httpd)

tar -xzf httpd-2.2.23.tar.gz
cd httpd-2.2.23
#undefined reference to `apr_array_clear'
./configure --prefix=/home/xxx/soft/bin --enable-mods-shared=most --with-included-apr
make
make install

接下来修改一下/home/xxx/soft/bin/conf/httpd.conf文件

NameVirtualHost *:30080
ServerName 192.168.0.237:30080
<Directory "/home/xxx/soft/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:30080>
DocumentRoot /home/xxx/soft/html
ServerName 192.168.0.237
</VirtualHost>
#自建一个conf.d文件夹
Include conf.d/*.conf

php我自己就懒得编译了,就用系统的把

cp /etc/httpd/conf.d/php.conf ./conf.d/
cp /etc/httpd/modules/libphp5* ./modules/
./bin/apachectl restart

无标签信息 0 条