14 / 07 / 2013 buling

      好快,就像是昨天,还在华科草坪一起讨论来深圳的事情。前两天一直被人力的妹子问:“你的签约已经到期了,是否要续签呢”。签?不甘心再来一个这样的三年;不签?我要去哪儿呢。
      今天这篇博客终于要写给自己了,写给过去三年。10年7月开始正式入职,接下来3个月的培训计划,我的老大是王松林(博客),从“http请求状态码”到“php本地cache”到“ICE中间件”,这三个月让我学到了很多基础知识,成长很快。接下来就是开始了500PAI网站的开发,主要负责的是支付和拍点两个模块,还有一个简单的Com_Page(不太记得名字了)的框架类。年底,由于我对后端技术的向往,海涛拉我进入了系统平台
      进入之前,完成了一个自动化邮件发送系统(PHP+ICE+PYTHON),从技术看这就是过渡,从PHP向后端脚本处理的过渡。我的第二个老大黎冠星(博客),他是我有今天这样一个非常重要的人。还记得10年春节前,只有两三天就要除夕了(那年我没有回家),给我分配了一个任务短信网关的开发(CMPP2.0协议),我python也就一个hello word水平,socket通信都不知为何物,更别说什么,前两个字节怎么读写。不过有时候不逼到那个地步了,就勤奋不起来。我把星哥写过的代码用公司打印机打印出来带回去学习,慢慢也看出来一些东西,CMPP完成了,然后就SMGP、SGIP,到此第一个正式的后台任务上线了。吃个饭,回来写。
//edit at 2013-08-07
      话说某人说这个饭吃的有点长。也是因为当时没有什么情愫来把这篇博客写完整,就一直停留在这里。接着,第一个项目做完后来也陆陆续续做了很多别的项目。总体说来,这三年大概可以分这么几个阶段:1、最开始半年(10.06-10.12月)一直在学习php基础,已经了解一些后端的知识;2、后1年(11.01-11.12)做了很多小项目也得到了老大的认可;3、再一年(12.01-12.12)是一个被老大们看来悲剧的一年,因为这一年本应该参加开发的项目我都拒绝了;4、最后半年(13.01-13.07)不温不火的半年却对我很重要。
      前两个阶段就不提了,意义不大,第三个阶段我之所以拒绝无非是做的事情太没有挑战性,如果是个技术人就应该拒绝,如果是个好员工就不应该。这一年的结果落得一个人人都喜欢对我说:“你有个坏习惯不好,喜欢挑项目,要改”,我想说现在的我不是去年的我,应该没人信,这不是很重要。不过回想来,如果再来一次我还是会拒绝,真的很没有什么追求,从rocket项目的订单化说起,我觉得订单这样的东西不应该是我们讨论出来的结果,而应该是行业共识,那么多开源的购物系统被大众检测,我们从没有研究分析过,最终就被几个人决定了,没有意义。再说德州扑克,又是python,还是python,毫无争议的python,设计过度已经远远超过预期,一样没有意义。所幸在这段时间学习了android开发,虽然没有牛人指点,但开发普通应用基本没有难度,再年尾,沉下心来写了一个php框架,虽然有些点我个人还是有争议性,但毕竟大部分都是在我的意料内实现的。
      再说最后这个阶段,都说事情很容易好头烂尾,还好我幸运的收了个尾。今年分组,ht想让我继续待原组,考虑到我这性格也不会怎么样,如果这样又是毫无意义。所以还是申请进了架构组,进组前和shil谈话我就说很想写c++,最后这半年基本上都在c++上面,用ace开发配置中心,虽然过程有点挣扎,但结果无非是好的,不会的时候各种折腾的结果就是很熟练。以前对c++总是近而远之,现在已经不再害怕,即便今天老大让写c++也毫不示弱。这跟当你对一个事物产生了崇敬感以至于以后都不敢靠近,当有一天逼不得已得亲密接触后才发现原来他也没有那么神秘,这跟女神一样,泡到手一样也会成为凡物。
      走之前我和很多朋友聊过天,都或多少涉及到公司技术的现状,且不评,我只记得,当你离开一家公司的时候原因应该是以下两者其一:
1、你已经学会了所以应该了解的东西,靠自己才能成长
2、你的能力超出了公司可以支付你的能力,其实这跟第一条是对应的,因为现在的环境已经没有办法发挥自己的能力了。
最后,虽然我不太明确目前离职的原因,但潜意识理由再这二者中。做事,态度决定结果,无愧于心,无愧于行

无标签信息 0 条

glog初始化的一些方法,其中如果要实时flush日志,可以设置FLAGS_logbufsecs=0;

    FLAGS_logbufsecs = 1;
    google::InitGoogleLogging("");
    google::SetLogDestination(google::GLOG_INFO, "./xxx.log.");

glog 不支持按天轮转日志,所以需要对glog源码做一些修改,修改如下
修改 src/logging.cc文件,第913行(LogFileObject::Write开始之前)加上如下代码

/***************CHANGE LOG BY DAY*************/
int _now_day = 0;
bool DayHasChanged(){
    time_t tt;
    time(&tt);
    struct tm *p;
    p=localtime(&tt);
    if(_now_day != p->tm_mday){
        _now_day = p->tm_mday;
        return true;
    }
    return false;
}
/********************************************/
//再修改LogFileObject::Write方法中判断语句加入
if (static_cast(file_length_ >> 20) >= MaxLogSize() ||
      PidHasChanged() || DayHasChanged()) {

      接上一篇触屏插件 touchwipe,这篇是触屏广告切换插件,是基于touchwipe开发的,下面看看效果吧,独立地址:http://www.mjix.com/wp-code/plugin/tab.html
下载地址:http://www.mjix.com/wp-code/plugin/zepto.tabwipe.js

下面说一下使用方法:

~function(){
    /******轮换广告测试*****/
    var tabins = $('.wipe-list-ulo').tabwipe({
        done_process : 0.4, //移动超过40%则跳转
        ani_time : 300, //动画切换时间
        max_speed:800, //滑屏速度超过800dip跳转
        is_circle : true, //循环滚动
        callback : function(index){ //切换回调
            $('.gcdt-list-curo div').removeClass('cur').eq(index).addClass('cur');
        }
    }).interval(2000);
    //支持点击切换图片
    $('.gcdt-list-cur div').click(function(){
        tabins.move($(this).index());
    });
}();

1、上面的参数配置写的很明确了,我就不多说了,如果不想要循环滑动效果,只需要修改is_circle为false就好了
2、为了灵活使用这个插件,所以切换条没有固定,需要自己实现其风格,有的可能是原点,有的是横条,随自己喜欢
3、去掉 .interval(2000);则可以去除自动切换效果,其中2000为2秒中自动切换一次。
4、赶紧下载使用一下吧!

无标签信息 0 条

      最近本来一直忙于写c++的配置中心,写博客的时间越来越少了,前段时间无线同事有几个touch事件的需求我就接了顺便学习练手。我把touch事件抽离出来做了一个封装,理论上这个plugin应该是兼容jquery的,代码不多,下面先上使用方法:
演示地址test.mjix.com下载地址:http://www.mjix.com/wp-code/plugin/zepto.touchwipe.js

$('#test').touchwipe({
    listen : 'x', //监听x轴方向的滑动
    start  :  function(result){
        alert('开始触屏了');
    },
    move   : function(result){
        alert('正在滑动:'+result.dx+"____"+result.dy);
    },
    stop   : function(result){
        alert('结束了');
    }
});

      目前事件就三个start doing stop,下面对touchwipe的入参配置做一下说明:
1、listen:①、x监听x轴方面的滑动,不影响y轴方面的滚动;②、y监听y轴方面的滑动,不影响x轴方向浏览器自带的切换效果(uc);③、a监听x、y两个方向的触屏,这样浏览器的x和y方向默认事件都将被屏蔽,除非业务需要应该明确指定x和y
2、min_distance:最小触发距离,默认为6像素。
3、start:触屏开始回调事件。参数有{x:起点x值, y:起点y值},适合做一些初始化事情
4、move:触屏移动回调事件。参数有{x:x值, y:y值, dx:x方向移动差值, dy:y方向移动差值, du:(‘x’, ‘y’)其中一值,表明当前趋势为“水平方面滑动”或“垂直方向滑动”},适合做一些效果
5、stop:触屏结束回调事件。参数有{dx:x方向移动差值, dy:y方向移动差值, speed:du方向的速度,可以再移动速度大于多少时做一些触发事件}
备注:方向一致原则:一旦方向确定以后都不会变化,如触屏上去第一次move感知到时为水平反向移动,那么在移动过程中从水平移动变成垂直移动也不会影响du的值。这跟四川麻将的缺一门很像,第一轮打出的那一张就是你注定要缺的那一门,中途是不可以更换的

今天在对python的扩展做压力测试时发现内存一直在猛涨,结果发现原来是在返回PyDict_New的时候出现了问题,原来的代码如下:

    PyObject *d = PyDict_New();
    map::iterator it=result.begin();
    for(; it!=result.end(); ++it){
        PyDict_SetItem(d, Py_BuildValue("s", it->first.c_str()), Py_BuildValue("s", it->second.c_str()));
    }

后来google发现一篇文章写的很不错:http://blog.csdn.net/littlegrizzly/article/details/7701096,就不多说了,直接上修正后的代码:

    for(; it!=result.end(); ++it){
        PyObject *key = Py_BuildValue("s", it->first.c_str());
        PyObject *val = Py_BuildValue("s", it->second.c_str());
        PyDict_SetItem(d, key, val);
        Py_XDECREF(key);
        Py_XDECREF(val);
    }
无标签信息 0 条