作者归档:raywill

自我节奏的调整

最近在做OceanBase RootServer重构后的测试,主要测试工具是用我们牛逼QA开发出的obtest神器。

测试结果总是不太稳定,各种细节错误且不完全复现,很耗人。导致积极性下降。

调整策略:测试期间给自己安排一些优化/重构的活儿,穿插着做事情。

自主做事最精彩

写了两年半的OceanBase,知识体系却依然没有完善,思考原因:缺乏实践。OceanBase中大家都是螺丝钉,各自负责一亩三分地,别人地里种了什么虽然能看个大致,比如施的什么肥,打的什么桩,搭的什么架子,种的哪种秧,但若问为何是这种肥,怎么非得打个桩,架子斜着搭,却又种南瓜秧,则是问着我了。知其然,不知其所以然,是学习OceanBase的最大的难题。

企图从分析源码的角度来体会作者意图的方式失败了。总是不得要领,收益甚浅。

还是祭出老办法:好记性不如烂笔头。动手写码,写一个简单一些的NoSQL系统出来。俗话说,麻雀虽小五脏俱全,只要这个系统能完整做下来,一定会受益甚丰。

于是,MacrayKV诞生。取这个名字是因为这个项目带上了Macduan学弟一起做,我的id是Raywill,俩名字一凑,macray,读起来还蛮上口的。KV则表示key-value存储的意思。就这样了。

没多少天就发现,自主做事最精彩!创新的激情在自主做事的情况下能得到最大激发。比如今天:

基于tcmalloc写了一个线程安全的全局内存分配器,写完之后必须测试一下。为了测试线程安全的特性,必须使用多线程编程。淘宝多隆写的tbsys系统库提供了比较好的多线程封装,用起来已经比较方便了,但在测试代码中多处用多线程时则会发现有大量的冗余代码。每一个需要并发的代码片段都需要创建一个类和一个回调方法,把并发的代码填在回调方法里面。这么做有两个坏处:(1)打乱了测试代码的连贯性。 (2)代码冗余不易维护。(3)还得记忆多线程封装库的用法,我记性太差,每次都要查。

今天早上突发奇想,能不能有一种类似intel #progrm parallel这样的directive呢?这种想法很大程度上是受了前不久coolshell上《数据即代码:元驱动编程》这篇文章的影响。摸索了三十分钟,一个C++的宏方案出台,相当好用:

TEST_F(ObTCFactoryTest, mt_basic_test)
{
  // 第一次并发测试
  BEGIN_THREAD_CODE(my_run, 50)
  {
    for (int i = 0; i < 1000000; ++i)
    {
      Base *b1 = base_tc_factory_t::get_instance()->get(0);
      ASSERT_TRUE(NULL != b1);
    }
    base_tc_factory_t::get_instance()->stat();
  } END_THREAD_CODE(my_run);


  // 一些同步测试代码
  // put your code here


  // 第二次并发测试
  BEGIN_THREAD_CODE(my_run2, 50)
  {
    for (int i = 0; i < 1000000; ++i)
    {
      Base *b1 = base_tc_factory_t::get_instance()->get(0);
      ASSERT_TRUE(NULL != b1);
    }
    base_tc_factory_t::get_instance()->stat();
  } END_THREAD_CODE(my_run2);

}

其实现也是极简的:

#define BEGIN_THREAD_CODE(class_name, thread_count) \
  class _##class_name : public tbsys::CDefaultRunnable \
  { \
    public: \
    _##class_name() { _threadCount = thread_count; } \
  void run(tbsys::CThread *thread, void *arg) { \
    UNUSED(thread); UNUSED(arg); \

#define END_THREAD_CODE(class_name) \
  }};\
  _##class_name my_##class_name; \
  my_##class_name.start();  my_##class_name.wait();

 

more code details here

然后,我就把这个方案移植到了OceanBase,得到了@郁白 的大力赞扬。OceanBase UpdateServer模块的单元测试对于并发测试的需求非常旺盛,希望以后能在代码中处处看到它的使用。

希望自己坚持下去,马上做,做精彩。

我的第一次线上授课感受

在TMT沙龙邮件组上无意看到一个叫做“多贝”的网络课堂,为所有人提供了一个在线的学习交流环境。一直和Jasimin说要试水一下在线教育,何不参与一把呢?正好YangJie同学希望学习OceanBase的编码规范,不如我就在这里开一次在线课程吧。跟YangJie说了一下,他十分乐意,那就干吧!

开课时间最初定在8点,因为下班迟了,改成了8:20。

8:20开课,YangJie同学还给我另喊了一个学员过来。一堂只有2个学生的课开始了。

说一下对这个平台的感受。

缺点:

1. 讲起来很不习惯,因为没有交互,我只对着一个白板说呀说呀。感觉像是给空气讲课。

2. 平台对pdf的支持很不好,字太小了。

3. 旁边的聊天窗口太简单了,对于编程授课,希望加入一个实时代码同步编辑窗口(还记得google wave吗?),有利于同步演示。

优点:

1. 课件展示的同步功能很赞

2. 画笔功能很赞

 

 

 

个人/产品可以改进的点:

1. 习惯对着白板讲课

2. 素材要准备好

3. 当一次听众,感受一下

4. 讲课的过程也是录制的过程,就好了

单双号

2013年10月18日起的3天,北京实行更为严格的机动车限号规则:单双号。雾霾已经来临,就在外面。200米对面的央视大楼轮廓若隐若现,如梦如幻。

9.16日到10.7日都是在家度过的,嗓子不适问题基本消失。如今,雾霾笼罩了北京,我的嗓子又逐渐开始不适起来。这是体质问题,也是体制问题。格局一旦形成,它带来的后果是必然的。所以,对于我们年轻人来说,“布局”才是最重要的。它耗费不了多少时间,却能影响一生。然而,如何布局?眼见利益、长远利益平衡博弈而已。

号外:团队进入备战状态已经1月有余,每年一次的双十一大考,何时从容应对?大约是因为有需求才有动力吧。平日里做功能,临考前做性能,跟高中时候的考试有几分相似呢。不过,高中时候的优等生临考前却总是最轻松的。

支付宝热线旁听记

加入支付宝(现在该叫“小微金服”)已经数月有余,这一周开始了“百支”培训,本无甚么新意,跟“百淘”类似。不过,今天有个新鲜事,甚有意思。下午五点到六点的项目是进驻客满组,到客服身边去看他们回复在线问题,听他们回答客户热线。

在这里,可以明白什么叫真正的需求,在这里,可以明白怎样的产品才是好产品。
准备周末找上一天时间去听电话。
举个例子:有用户想开店,开店不是得传身份证照片么?结果有用户问:您好,我身份证还在派出所,上传户口本行不?兄弟,做产品的时候,您能想出这种问题吗?

试水小感

在市场经济的大池塘里小试了一把水,实现了VPS服务器资金投入100%收回,感受颇多,现记录如下:

1、推广渠道:

a) SNS平台

利用qq签名和发微博的形式发表产品信息,得到了良好的反馈,有五名潜在客户通过此渠道主动联系:

lucy、niko、nandy、玄侯、陈卓

经过洽谈,成交三笔生意(lucy、niko、玄侯),一名客户流失、一名客户进行了较深入的洽谈

b)人际推广

通过现有人际圈主动推广,获得两名潜在用户:一默、芬芬

均对产品表示浓厚兴趣,均有可能在后期进行购买。

总结:建立良好的人际圈有助于产品推广、SNS是一个可以考虑的产品推广平台。

2、价格定位

在与客户进行交流的过程中,对于价格客户给予的反馈是:划算、便宜,这一点让我感觉震撼,也深刻的体会到了推出产品时合理价格定位的重要。

同样的产品,尤其是可持续性使用的产品,应结合产品使用周期仔细思考产品投放市场的价格,并仔细思考受众的心理变化。

3、产品改进

a) 产品使用的要求越高,也就意味着产品的受众越窄。

b) 不要用自己的思维去定义用户,不要拿自己的想法去代替用户的想法。

c) 提前预见到市场的变动和用户可能出现的想法,并因此迅速做出反应。

4、客户服务

良好的客户服务和后续维护对于建立口碑和推销产品会起到很大的作用。