五一过后,事实上五一之前就知道了,项目组大调整,开始转型做别的了。一个对整个组来说的全新领域。我面对又一次一个全新的转型—从python到java。所以最近很忙,而且看起来还会忙很长一段时间。
首先需要声明的是,编程语言的选择实在是没什么好说的,编程的能力基本上和语言毫无关系,此文只是记录下游走于各个语言,以及各种经历的一些感触。
从大学说起,大学的课程基本上是Java的,因为面向对象。C++是一门选修课,学得认真,加上有点基础,最后成绩不错。但是回头来看,SSD,傻傻的。
大学的时候不喜欢Java,一个是写个Hello World真心有点复杂,另一个是,当时的笔记本跑eclipse实在吃力。但是不得不说的是我还是很喜欢eclipse的强大,那会在集训队打酱油的时候回寝室都是用eclipse配的C++环境做题的,虽然有点慢,但是字体和代码看起来都很漂亮。
到了大三结束的暑期实习,嵌入式,java,c++三个方向,也毫不犹豫的选择C++,C++班只有19个人,Java班和嵌入式估计都有100人吧~
,完成的媒体播放器的代码现在我这儿也没有,估计就算有,也不敢看,应该是到处都是坏味道的代码吧。
不禁想起C++班的侯老师,确实指点了不少C++的陷阱,可惜当时不以为然,没有记录,现在多半都还了。
阅读全文
最近被问及C++的多态实现原理,老实说,除了知道个一个指针和虚表的概念,其他并不了解。今天稍微闲点,回头来拿指针指來指去的喵喵虚表到底是个什么结构。一切建立在虚表存在和虚表指针存在且存在在对象首部的理论基础上。
class Base
{
public:
virtual void f() { cout << "Base::f" << endl; }
void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
private:
int n;
};
class Derive1 : public Base
{ // 重写一个虚函数
public:
virtual void f() { cout << "Derive1::f" << endl; }
// virtual void h() { cout << "Derive1::h" << endl; }
};
class Derive2 : public Base
{ // 重写两个虚函数
virtual void f() { cout << "Derive2::f" << endl; }
virtual void h() { cout << "Derive2::h" << endl; }
};
class Derive3 : public Base
{ // 重写两个函数,并增加一个虚函数
virtual void f() { cout << "Derive3::f" << endl; }
virtual void j() { cout << "Derive3::j" << endl; }
virtual void h() { cout << "Derive3::h" << endl; }
};
typedef void (*Func)(void);
先上代码,1个基类,3个类继承它,并以不同的特色重写基类的函数,然后定义了相应的函数指针。 阅读全文
#include <stdio.h>
#include <iostream>
class complex
{
public:
complex() {};
complex(double r) : re(r), im(0)
{
std::cout << "Construct complex(double)" << std::endl;
}
complex(double r, double i) : re(r), im(i) {}
complex(const complex& c) : re(c.re), im(c.im)
{
std::cout << "Copy contrcut complex(complex&)" << std::endl;
}
complex& operator=(const complex& c)
{
std::cout << "operator = " << std::endl;
if (this != &c)
{
this->re = c.re;
this->im = c.im;
}
return *this;
}
virtual ~complex() {}
friend std::ostream& operator<<(std::ostream&, const complex&);
private:
double re, im;
};
std::ostream& operator<<(std::ostream& out, const complex& c)
{
out << c.re << ", " << c.im;
return out;
}
int main(int argc, char *argv[])
{
complex b = 3;
complex c = b;
std::cout << b << std::endl;;
std::cout << c << std::endl;;
return 0;
}
构造函数是有关如何建立起给定类型的一个值的地方。当程序里需要一个某类型的值,而某个构造函数又能通过把所提供的值作为初始式或者被赋值的值,去创建一个这样的值的时候,这个构造函数就会被调用。因此,具有一个参数的构造函数也可能不需要现实地调用。
complex b = 3; 的意思是 complex b = complex(3);
摘自C艹程序设计语言特别版P241
不过,老实说,真心的还没见过哪个书上,或是谁的代码里面有complex b = 3这种形式的代码,通常都是complex b(3)这样的显示的调用不同的构造函数。
而且按照书中的解释complex b = complex(3),这种写法应该是存在一次构造函数,和一次复制构造函数的调用的,结果运行结果显示并没有调用复制构造函数。。我郁闷。。。
后来,忍痛把复制构造函数加了private限定后,过不了编译了。也证明理论上是需要复制构造的,只是编译器太“聪明”了。不过,在没有加任何优化选项的情况下,编译器的这个行为,真的让人很没有安全感。。(GCC4.4.3)也没找到禁用这种默认优化的选项。 
长这么大还不知道编译器到底私底下做了多少事情。惭愧。
未完待续。。。
闲来无聊,最近围观到赖总关于那些基于protobuf的RPC的点评http://blog.csdn.net/lanphaday/archive/2011/04/10/6313243.aspx,加上项目上使用protobuf也有些时日了,并且最近还在看gevent,最终就有了gprotobuf这个想法:基于gevent和protobuf的RPC框架。
总得来说,没什么亮点,只是机械的组合。代码结构是照着工作项目里面搬的,RPC消息格式其实大同小异,对gevent也只是一知半解,只知道对python标准库中的socket,urllib2等进行了hack,其他的网络相关的API都不知道怎么用。文档太少,跟tornado一个级别的文档量。tornado可以说是纯python的,看源码也算是颇有心得。gevent就麻烦了,首先基于libevent,然而libevent并不熟悉,加上gevent非纯python,混搭了python,C,再加上一个c-ares,让人心生畏惧。我还是决定从libevent着手,不过这是下一步的事情了。
消息格式的设计,其实感觉都大同小异,个人觉得还是很认同,simpler is better。
enum ResponseType {
RESPONSE_OK = 0;
RESPONSE_ERROR = 1;
};
message Request {
required bytes uuid = 1;
required string service = 2;
required string method = 3;
optional bytes request = 4;
};
message Response {
required bytes uuid = 1;
required ResponseType type = 2;
optional bytes response = 3;
optional string error = 4;
};
message Error {
required string info = 1;
};
Parallel Pipelining是必须的,所以有uuid。
最后的代码中message Error 并没有用到,服务端出现错误,客户端本来就无能为力,只能log一下,所以只返回以一个字符串,用Error再包一层也无意义。
目前的不足:
1. 毫无测试,只有一个Echo的demo
2. 错误处理很弱,还有不少地方的exception都只是一个pass
,这个真心的很尴尬。
3. 服务端没有安全相关的措施,例如,频繁收到某ip的非法格式的消息,采取严厉措施。
4. 没有benchmark,没有和tornado的实现对比,对性能一无所知。
5. 我忘记写setup.py了。
6. 无任何有意义的注释。(目前注释都是emacs生成,占据50%的代码行数了吧
)
7. gevent文档里面并没有看到更新socket监听事件的函数,只有add和cancel,所以客户端连进来之后,直接add了READ和WRITE,而没有动态的修改需要监听的socket事件,这个地方让我很纠结,兴许add可以当作修改用?哎,也不知道该问谁。。。
最近心情略显骚动,打乱了原本的阅读和学习计划,让我今天很不爽。我还是应该先稳稳的走自己的路,让别人打的去。。。
最近闲得蛋碎,开始再度深入学习C艹,大半年没碰C艹,现在再来围观,与大学时的意境已大相径庭,但是我还是更愿意从一个纯C的东西开始,比如libevent,或是redis,或是libev呢~
每小时至少起身活动一次~(去围观别人写代码吧,或者去阳台假装抽根烟- -!)
每日至少抽半个小时,锻炼身体~(路总,求带)
每日至少抽半个小时,阅读源码~
每日至少抽1个小时,阅读书籍,可动手~
每日至少抽15分钟,思考,今天干了什么,简单记录。思考,明天阅读什么源码,阅读什么书籍~
每日要不要抽1个小时,打打dota呢?暂不实施。。。
每周至少1次,给家里打电话~
每周至少抽2个小时,整理新学的知识,记录分享之~(虽然我文笔很搓)
每周至少1次,睡个懒觉吧~
每周至少1次,看个电影吧~
每月至少1次,推进自己的项目,做喜欢的事情(现在还没有,求思路啊~~~)
每月至少1次,好好吃点什么吧,对得起咱自己啊。。。
每年至少1次,出去旅个行吧,每个月攒500,1年一次enough~
每年至少1次,想想每年还能干点什么,现在实在想不到什么了。。。
~Easier said than done~
明天就在GAE上搭一个提醒系统,以免忘记了。也作为第一个个人项目~虽然这个提醒的时机不太好掌握~
~Easier said than done~
此次香港顺利走私macbook pro回来。。。很是满意,但是目前还不会用,悲剧。。。
这次懒得传照片了,也没去什么景点,维多利亚港,感觉上也不比上次暂别武汉最后一天的时候,胡总和老眭夜游长江的江滩好看多少。。>_<, 所以免去照片,只记录下。
最happy的事:走私macbook pro,无风险。。。(在这说出来应该不会被追捕吧。。。)
最尴尬的事:买macbook pro的时候,随口问:你有没有电影拷给我,我在火车上看啊?销售人员淡定的表示:电影和音乐都是有版权的。。。瞬间我就石化了。。。个大陆土鳖。。。
最无厘头的事:某走累了,打个的去星光大道,被司机无情的拒载,因为星光大道在左前方100–200米处。。。
最蛋疼的事:尖沙咀到红勘其实只有一站地铁,但是必须从某指定入口进入才能搭上这条线路的地铁,不像广州地铁,拿着地铁票先进地铁站再具体找哪条线。。结果悲剧的随意从一个口子进去了,发现找不到要找的地铁,险些还出不去了。。。
最浪费的事:在disney花100HKD把disney门票升级成多次入园门票,7月15日之前一直有效,但是事实上,经过两次的disney经历,已全然没了兴致。。。权当友情匿名赞助disney建设了吧~下一步的目标,难道是海洋公园?不靠谱,其实深圳欢乐谷应该就可以了~近期出行的兴致似乎忽的又被提了起来,在此求深圳同学包养~阿杜,你懂的~既然哥去HK你来珠海,错过了,那么哥就直接深入虎穴吧~(阿杜见,请留名~)
最羡慕的事:我表示,第二天去买macbook的时候,发现百老汇(及其周边的商品)的上班时间多在11点甚至11点半,额。。。敢起得比我还晚。。。看起来就是国内喜欢很早就开始上班了。。。悲剧。。羡慕嫉妒恨~
最近3天,迎接机密检查,公司断网,我这应用各种高科技手段上网,上班写日志,真是对不起敏感词啊~
香港,已渐渐远去,下一次香港,应该至少是我的macbook退役,或是我钱多得没处花或是脑袋又一根经了,想买iphone的时候了吧~谁又知道那时候我是混哪里的呢。。。香港再见~
自打前两天收到一条交行的短信,说工资卡上扣了10元的年费,也正式提醒我,来珠海这个工作岗位已经一年了,没这个短信还真忘记有这个事情了额。。感谢交通银行,但是我还是不喜欢你,你太坑爹了~~
一年前,赶上过完年的特快火车,和喆哥一起去往珠海,听着坐在对面的姐姐给我讲述她的经历,告诉我起步的第一份工作很重要~
一年前刚开工的时候,跟着老大峰哥也是各种羞涩,做着在当时看来觉得很无聊的跨平台的代码移植工作,而现在看来,那时候的无聊工作也是能从峰哥那儿,听峰哥分享他过去的各种经历和经验~
两个多月的实习工作在当时看来过得很慢,现在看来也是弹指一挥。。老实说,当时并没有习惯从一个学生过度到外出务工人员的生活。。。
而等我,正式进入工作,再次回到珠海的时候,发现很多东西都变了。。。工作内容变了,峰哥的感觉也不太对。。。打了半个月的酱油,才渐渐知道,组里的一个元老准备走了~而没过多久也传言所在的项目组可能不会再做下去了,没有找到合适的运营模式。。。然后最终的结果跟那些谣言又都不一样,元老留下来了,我所在的项目组没有拆,而是另外一个项目组拆了,但是峰哥被调到了另外一个组,我们组由另外一个老大带,涛哥。
项目组虽然还在,但是方向仍然变化了,我正式入职以来做的那个部分暂时不做了,推迟到当时的明年,我跟组内另外一个同学一起做服务端的调度,也开始了从c艹到python的转型。。。年后来了,涛哥也被调走了。。。
作为一个python和网络小白,在另外这同学的带领下也渐渐的熟悉起来。。而当时闹得最沸腾的事情摸过于转正评审了。闹得人心惶惶,寝室难安。身边也有一个接一个的人离开,也一度开始怀疑自己是不是来错地方了。。。好在后来也算莫名其妙的过关了。。但是也怀念那会在公司阳台上,大家紧张的讨论评审能不能过的时光。。。
等刚刚摸清点服务端调度的情况,领我入门的哥们换到其他组了,哥得一个人搞起了,直到现在。。。也算对python有个一知半解了,对emacs的python开发环境也很是熟悉和满意了,也深深的爱上python这玩意了。。。但是,单靠这个找工作的话,有点吃力,大家还是喜欢c++和java帝,辅修可能python会比较吃香。。。
工作就这么着了,有传言说工资要调整,一刀切,可能我还在这一刀的上面,哎,难。。。这可怎么活啊。。。
另一件值得庆幸的事情是macbook终于出新品种了,虽然从各方位来看,这次的新品种有点腿,但是毕竟苦心等了11个月了,不出手都对不起自己了。。去年由于没有挣钱,舍不得买,等到挣钱想买的时候,总觉他的cpu有点腿,不舍得买,如今正是大好时机。纠结于买国行还是国行学生机,买港行还是找路子买港行学生机,是淘宝,还是代售点,还是亲自出征,最终决定亲自体验一把走私的瘾~不过去香港还得等一个月,哥专心致志等了你一年,你可别到时候就断货了啊~~~
珠海已经进入夏天了,哥又穿着拖鞋上班咯~
很是庆幸工作之后仍然能有13天这样的长假,加上还请了一天的假,14天的时间来温故沉淀了小半年,一年,两年的各种感情,见各种想见的人~
老实说,回来一趟真心不容易,给交通事业部贡献了力所能及的力量:来回高铁2×500,广洲珠海汽车2×70,武汉的士8×30,嘿嘿。
回来第一天,先去电脑城,在老胡的陪同下,想把无线路由和机械键盘的事搞定,可惜去的那天正好资讯广场,电脑大世界,南极电脑城全线关门,只剩下赛博里还有几家提供服务,路由轻松搞定,机械键盘倒是悲剧了,后来果断在网上订了个,去珠海就能用了,希望能适应吧~
第二天打了一上午酱油,下午找个故人吃个饭,还拿了个尴尬的红包。。。 阅读全文
今天,准确的说是昨天,涛哥让给个总结,简单点,果断了就,就拿来当年度总结吧。。。
另外今晚,在小黑屋,三国杀玩得正high呢,玲姐上来,要领四个人去陪四个领导玩三国杀。。。囧了个囧啊,玩到转中。。。敢问,领导怎么不让我陪他们玩dota开黑呢!!!
今天6点起床,买票,体验了一把春运。。果然给力啊,哥很走运的买到了2车2座,最近也是常跟2结缘,连最近公司电脑重新分配ip的时候也能拿到X.X.X.22这样吉利的ip。。。更给力的是,小牛角在路子后面买的票,就瞬间已经到了2车40多座了。。。最后还给力的吃上了KFC的营养早餐,话说,两年前KFC早餐的油条的故事现在想想还是都会笑。。。
公司最近几个月也是一直在折腾,各种部门往北京迁移,不愿意去北京的,走的走,被走的被走,换项目组的换项目组,总之是人心散了,队伍不好带。。。
自己所在的在线编辑项目组,由当初校招之后的四五十人,位置都不够的环境,到现在剩下一半都不到,到年后只留下11人,已经包括在线文字,在线表格,经理,产品。。。至于年后来了,项目组还能存在多久,也尤未可知也。。。
回顾这半年,渐渐的远离了C++,摸着石头过河的接触python也有小半年了,代码能力上应该来说没有什么提升,因为没写几行代码,但是却借此机会了解到了不少网络方面的知识,不得不承认在大学的《计算机网络》确实是一门基础的课,但是对于时下正流行的网络技术囊括太少,加上自己大学酱油打多了,导致到工作中的时候才发现自己不是一点点的小白。有幸遇到一个给力的同事,王2,跟着后面也接触到了tornado,redis,zookeeper,django,protobuf等等各种给力的开源项目,并且组合应用到自己的项目组,也渐渐发现自己喜欢网络上的这些东西了,就像当初dota打得high的时候喜欢上hook了一样,兴致就这么来了。
旺仔最近似乎递交了辞职信,准备回家闭关一两个月再来。想法和我的差不多,其实恰逢上个月,公司陆续又裁了一些新人,走了一些老人,我也考虑过要回去修整一两个月,但是考虑到现在,还是没有做出这样的决定。。事实这是一个非常复杂的问题,也会一直的考虑。。。其实说白了是自己不够牛B,牛B的话就没有那么多需要考虑的了。。
最近闲得蛋疼,当掌门人的vip到期之后,发现诸多不便,又开始操作起以前改写过的vs的挤房器,代码不多,稍稍改改就可以用到zmr上,可是半年没碰过c++了,写起来各种不顺利,加上掌门人本身的安全机制确实比vs牛一些,所以还有了一些新的问题,花了几乎一下午加一晚上的时间才搞定。。。真是写了半年的python代码,再回头去写c++,那c++的语法就显得太没有亲和力了,各种悲剧。。。还是用我喜欢的那句话描述:站在天堂看地狱,人生就象情景剧,站在地狱看天堂,为谁辛苦为谁忙。。。
前段时间还闲着看了一下git,发现确实比svn给力很多,可惜现在还没有能力给自己创造很多的使用git的机会。。。
总之,这一两个月,比较闲,所以也有时间系统的接触了一些东西,还是很充实的。。。但是也有很多遗憾的东西:iOS4.2的完美破解从圣诞节跳票到现在,导致我的touch还是只有比较少的几个东西。。。项目组本季度的目标完成得很不好,老大估计是被大佬批评了,我们几个开发人员也是郁闷得很,加上马上的项目组的拆分,实在是和悲剧的事情。。。头发也真心的有五个月没剪过了,省了不少钱,但是还是得剪了,不然回武汉该挨骂了。。。还有最终要的就是新的macbook pro什么时候出啊,我的小破本已经真的不行了,几乎不能用了,你敢出我就敢立刻买,贷款也买。。。