快速原型技术

一种基于标签解析的快速原型前端框架:

./skel index.html

 

方案1:静态解析

 

index.html的内容为:

 

<div>

   <h1>标题</h1>

   <banner title=“顶端banner” theme=“c” fixed=“bottom”>

      <icon type=“home” />

   </banner>

</div>

 

解析器遇到banner、icon等不认识的内容时,自动调用banner parser, icon parser来生成对应内容。

本方案和JSX差不多是相同的方案了。有一定难度。更多内容可参考 https://facebook.github.io/jsx/

 

方案2:动态解析

 

index.html的内容为

<div>

  {template banner title=“顶端banner” theme=“c” fixed=“bottom”}

<div>

 

本方案比较呆板简单,和w7用的方案类似。可配置程度低。但很简单。可以基于php实现动态编程,动态展开模板内容。

 

 

 

支付宝第三方平台 Slogan

各位Hackthon的组长,感谢大家贡献了你们最棒的idea给比赛。我看到有些团队已经有同学了,有些团队还在等待小伙伴的加入。明天中午1点半,黄龙国际3楼及北京、成都、上海三个分会场,会举办平台产品技术部的Open Day“ T Talk”,鲁肃和鲁肃的D会和大家分享技术的主题和颁发1月份的平台月度之星。每次这样的活动都有一个彩蛋环节,明天的彩蛋环节就留给了这次的Hackthon。如果你期待有小伙伴的加入,可以在明天的会场上发表自己的演说,我们可以称之为: elevator pitch

 

从一线大都市到五线小县城,微信地推海报随处可见,“扫码送现金”,“转发送红包”,等等,为微信的普及,微信支付的推广做出了巨大的贡献。这个过程中,张小龙,不花一分钱!
一切的原因都要归结为大量微信第三方平台的存在,极大降低了微信营销的门槛,全国各地的广告营销企业嗅到商机,全力以赴为微信做推广,并从中分得一杯羹。
支付宝,也可以!我们需要一个支付宝第三方平台,助力中小企业支付宝营销,为支付宝O2O开疆拓土。

两个本科老师的近况

谈及高考,谈及大学,回想大学里印象深刻的老师。

 

我的两位老师:喻之斌,高建生。

 

喻老师近况:

http://people.ucas.ac.cn/~0033155

2012-10~现在, 中国科学院深圳先进技术研究院, 研究员 所长助理
2012-01~2012-05,比利时根特大学, 博士后研究员
2010-11~2012-01,意大利锡耶纳大学, 博士后研究员
2009-01~2010-02,美国德克萨斯大学奥斯汀分校, 访问学者
2003-09~2008-12,华中科技大学计算机学院, 工学博士
2000-07~2012-09,华中科技大学, 助教,讲师,副教授,院长助理,党支部组织委员
1997-09~2000-06,华中科技大学, 工学硕士
1994-07~1997-08,湖北伶俐工贸有限公司, 技术员 技术副厂长
1990-09~1994-06,湖北工业大学, 工学学士
科研项目
( 1 ) 海云大数据系统关键技术研究, 参与, 部委级, 2012-07–2016-12
( 2 ) 云计算检验检测平台, 参与, 国家级, 2011-07–2015-12
( 3 ) 基于云计算的国际大宗商品交易系统关键技术研究, 主持, 省级, 2015-01–2017-12
( 4 ) 大规模数据中心能耗可扩展理论研究, 参与, 国家级, 2012-01–2016-12
 
 
高老师近况:
07年被软件学院挖去后,继续讲课。14年还在讲课,还在讲组成原理。
没有什么大的科研业绩,始终默默耕耘在教学第一线。学生评价:http://teacher.zjut.cc/t16415/
 
 

2015年总结&2016年展望

 

2015年总结&2016年展望
 
== 2015 ==
 
除了工作,不记得2015年做过什么了。那么就说说工作吧。今年全部的工作内容都围绕SQL的设计和实现展开,解析器啦,生成器啦,执行器啦,扎扎实实步步为营,做设计,写代码,帮助一下新人成长,并没有什么大的可圈可点之处,都是分内之事。2015年五月份,OB 过了五周年的生日,北京的同学们还开了一个简短的生日party;2015年五月份,白哥离开了我们,我很想念他。到了年关,白哥已经很少被提到,明年的端午还有中秋,再到年关,不知是否还会被想起;2015年7月份,又搞了一次996运动,说实在话,比起上一次的996工作强度还好,就是家属工作比较难做一些;2015年1212,顶着巨大的工作压力任性地去了趟四川南充,支援支付宝线下支付活动,竹翁忧心忡忡地问聿明,你们去几天?晓楚的活儿还没干完呢。
 
 
除了雾霾,不记得2015年的生活是什么颜色了。2015年,除了一趟福鼎团队团建,太原朋友婚礼,并没有远游,每空出一丁点时间都是回家,1月一次,2月一次,5月一次,10月一次,12月一次。一来人大了更喜欢故乡的宁静,二来有空尽可能多陪陪父母,谁知道将来的时间会如何流淌?2015年的雾霾,让生活变得毫无意义,2015年的雾霾,并没有在2016年消散,2016,该如何继续面对?想必,每一个能够做选择的人,都有自己心中的答案。
 
2015年,看东西很杂,不成系统,大部分是Article,很少是Book。Article分为两个主要来源,朋友圈,虎嗅掘金Medium等专业App。读Article的收获都是浅刺激,读完发表一下感叹评论,然后就忘得一干二净,能内化的少之又少。读Book太少了,特别是专业书太少了,一大缺憾。 (顺便说一下,虎嗅彻底垃圾了,以前每日必看,现在我觉得每一篇都在浪费我的时间。多好的媒体,一遇到资本,真是让人悲伤。人,独立的人,又何尝不是)
 
2015年,公司工作之外,学习了两个新鲜玩意儿:Docker,React,都很屌。
 
2015年,几乎不写生活博客,技术博客倒是经常更新。不过都是流水账,记录些结论。
 
2015年,认识了很多朋友,世界的色彩更加斑斓多彩。
 
2015年,尽最大努力为老婆创造了自我成长的空间,monkey同学心智的成长,是这一年最大的收获。不要以为成年人的心智就可以停止生长,你我,何尝不是要继续成长。然而,能不能成长,会不会定格,就看命了。命不好的,凑合稀里糊涂往前过,也未尝不可。心智成长,得靠自己去悟,也得靠去跟生活交锋。没有悟性,生活是生活,我是我,老死不相往来;不接触乌七八糟的生活,悟出来的也只能是个温柔乡,或是一部连续剧,远没有实实在在的第一人称体验来得深刻。2015年,在生活的熏陶下,monkey对人对事的认识,较之从前,有质的飞跃。善哉善哉。
 
 
总之,2015年之于我,就好比微博时代的阅读,是碎片化的,散了时间一地。
 
 
== 2016 ==
 
如果延续2015的工作学习生活模式,自己会给自己打负分。
 
2016年,工作要更系统,更具有连贯性,还要多看相关的书。拓宽对OB的学习边界。
 
2016年,博客要更系统,要写一些高质量的、系统的文章来,写中学,学中写,少写流水账。
 
2016年,回馈那些信任和支持我的朋友。
 
2016年,要改变节奏,过健康、高效的生活。
 
2016年,要带monkey冲出亚洲。
 
 
2016年1月3日,@武汉汉口火车站

可复用的web代码结构

1. 后端代码可复用问题

 * 业务逻辑复用

    – 一次性逻辑

    – 多种场景出现的逻辑

 

 

 * 基础功能复用

    – composer方案

 

2. 前端代码复用问题

 * CSS问题

    – 展现独立于所有代码

 * 组件复用问题

    – Webpack + AngularJS + React  [1][2][3],其中React可能是一种很有前途的方案。具体可以看看React-Bootstrap项目就能理解。

 

 

[1] http://webpack.github.io/

[2] http://www.shmck.com/webpack-angular-part-1/

[3] http://react-bootstrap.github.io/getting-started.html#browser-globals

想起小时候一件事

小时候,是很顽皮的。小学的时候,是有派别的。我很多时候跟那几个”最有势力“的娃儿不是”一班儿“的,特别是打架的时候。

校园里,有一根铁棒,相隔1米5的两个方形水泥柱子,就是一个单杠。为了适应不同年级身高的学生,柱子上从高到低有三个水平洞眼,需要不同的高度,就把铁棒插到不同的眼中。

单杠

  单杠只有一个,同时最多只能容纳两个人玩,孩子却有一群,于是,便生出许多事端来,最常见的,就是想独占,你不让,我便抢,口角开路,棍棒随行。

  那一日,不记得是何原因,我和一个娃儿争抢起铁棒,把铁棒从柱子中抽出来,继续你拉我扯,从操场追扯到教室走廊,然后他们一派的还加入了另一个小朋友帮忙抢,不知怎么回事,一拉一扯,我的脑袋被铁棒打中,瞬间天旋地转,昏倒。吓得老师迅速召集了两个高年级的小朋友背着我往医院赶。

  印象最深刻的是,背着我跑的时候,我觉得更昏了,就喊着说”别跑,别跑,不好过“,于是他们就改走,然而我还是觉得他们在跑,一个劲喊”别跑,别跑“。

  到了医院,被放在医生的办公桌上看了一把,被定义为轻微脑震荡,休息一下就罢了。

  不记得第二天有没有接着去上课。

  如今,那两个小伙伴都在同一个城市打工,前不久还在微信的一段小视频里面看到了他们俩。

 

 

 

 

 

 

学习SQLSTATE

1. 什么是SQLSTATE

shell> SELECT * FROM no_such_table;
ERROR 1146 (42S02): Table ‘test.no_such_table’ doesn’t exist

上面执行一条SQL语句出错后的显示。1146是MySQL自己定义的错误码,42S02是ANSI SQL和ODBC定义的错误码,“Table ‘test.no_such_table’ doesn’t exist”是MySQL返回的错误原因。

其中,42S02就是本文要讨论的SQLSTATE

 

2. 为什么要有SQLSTATE

42S02是ANSI SQL和ODBC定义的错误码,可以理解成是错误码标准。假设没有SQLSTATE,世界会是什么样子?你开发了一款数据库驱动程序,希望兼容MySQL、Oracle、SQLServer。对于锁冲突,MySQL返回错误码2011,Oracle返回9912,SQLServer返回3231(以上3个数据为杜撰),如果你希望检查到锁冲突后,立即执行do_something(),那你需要这样写代码:

if (2011 == conn.errno || 9912 == conn.errno || 3231 == conn.errno) {
    do_something();
}

如果还希望支持Postgre,则需要增加Postgre的错误码处理。这是个悲伤地故事,不想再讲。

可见,数据库自定义错误码是靠不住的,他们各自为政。也许你会想,为什么这些数据库厂商不能协调一下,统一一下错误码呢?理想很丰满,现实很骨感。因为在某个特定数据库内部实现中,可能内部定义了四五个不同的错误码来表示锁冲突,用一个错误码无法满足内部逻辑的需求。所以,完美的解决方式是:

*. 内部,用数据库自己的错误码,爱怎么用就怎么用,当需要把这个错误码输出到外部的时候,先做一个转换,将内部错误码转换成SQLSTATE。
*. 数据库驱动程序只看SQLSTATE,忽略数据库自定义错误码。

 

3. SQLSTATE数据格式详解

SQLSTATE包含5个字母,前两位表示错误类别,后三位表示子类,均有0~9,A~Z(大写)这些字符组成。00000表示没有错误。

前两个字母定义的错误类别:

00 = 没有错误

01 = 有WARNING

02 = 游标NOT FOUND

> 02 表示某种异常,MySQL的异常,详细见http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html  这里定义了MySQL内部800多个错误码与SQLSTATE的映射

 

并不是每一个内部错误码都能明确映射到一个有意义的SQLSTATE,对于这一类内部错误码,统统都映射到HY000这个SQLSTATE上去,意思就是:我也不知道咱们这个错误码对应哪个SQLSTATE好,就这么凑合着吧。例如:Error: 1004 SQLSTATE: HY000 (ER_CANT_CREATE_FILE)

 关于SQLSTATE的格式,还有很多讲究,详细参考这篇文档,比较清晰:https://mariadb.com/kb/en/sql-99/sqlstate-codes/  


4. 数据库中如何实现SQLSTATE

可以创建一个Map,将错误码映射到SQLSTATE即可。如果错误码的规划设计正好是从0~N,或者0~-N,那么可以直接用数组来实现这个映射,错误码即为数组的下标;更通用的方式,还是用数组,只不过查找方式是二分查找,也很方便。

MySQL中的实现,详见share/errmsg.txt和include/sql_state.h 。

 

5. OceanBase中如何实现SQLSTATE

参见lib/ob_errno.cpp

可以看到,与MySQL相比,OB还多了一个负担:把OceanBase内部错误码尽可能映射成MySQL内部错误码。啥时候别人写数据库的时候能把内部错误码映射成OceanBase的啊?

 

 

 

疲倦

最近突然有了岁末年初的疲倦。连着两周,一场接一场的生病。身体似乎一下到了负荷的临界点。

目睹了太多的污秽与丑陋,只想关掉和世界连接的窗口找个地方静一静,休息休息。

前段时间老余问我,有没有在这种沸腾燃烧之后沉静下来想一想,自己又没有错过或失去什么。当然的我踌躇满志,意气风发的说,没有!

昨晚,一个人坐在沙发上,心神不宁的看着电影,突然发现,我已经很久都没有坐下来看一部电影了,这个我曾经自诩为人生最大的爱好的事我居然很久都没做了。

我用力奔跑着前进,来不及也顾不上看身边的风景,我得到了一些想要的,也得到了更多不想要的。

老余的问题是有深意的,是的,我想我已经失去了它们。

【商业的秘密】2015年1月review

1月份过去了,这一个月学到的做到的感受到的比去年一年都多。记录一点感受在此:

1、1月份主要的业绩集中在一个高ARPU值的模块产品上,用户数减少,但收入增多。可见产品的定价策略很重要。定价可以传递出极其丰富的信息,对于产品的格调、筛选用户、提高收入、降低成本都有着非常重要的意义。

2、在销售方面,是否还要采取走量的销售模式值得思考。理想的方式是通过提高定价、丰富服务内容、丰富功能层级的方式包装出不同的价值的产品,销售给不同需求层次的用户。比如:基本版、升级版、黄金版等等。减少产品的销售量,提高每个用户的服务质量。

3、逼格非常重要,产品不必迎合所有人的胃口,而应该去寻找真正理解产品价值的用户,他们能把产品玩出花样,实现甚至提高产品的附加价值,这样也是间接为自己的产品树立了范例和标杆,是良性循环。

4、产品盗版问题,首先对于盗版产品,发现了应该给予坚决的回应,这个是一个维护自己声誉和原创精神的机会,借由这种回应可以做很多事件营销活动。一方面是博取公众的同理心和同情心,另外一方面是广告效应。其次要从技术方面去做防范,不要顾虑有人会见招拆招就不去做。技术上的防范可以让盗版商产生一定的忌惮心理,但最主要的是这样做是给已经付费的用户立一个姿态,你对于他们的权益是很重视的。

5、题外话:多和人聊天,在聊和交流的过程中会得出很多新的想法,碰撞出火花是一定的。另外应该思考,在团体合作的时候,如何能用机制去规避或防范人性的贪婪和欲望,虽然,这个可能是永远无解的难题。