
生命的轮回
开篇就拟了这么一个很大的标题,是因为一想起要回顾一下刚刚过去的 2014 年,有两件事立刻浮现在我的脑海中:外婆的去世和女儿的出生。这两件事相隔很近,以至于每每念及都会唏嘘感慨生命的更替变化,令人困惑又心生敬畏。

开篇就拟了这么一个很大的标题,是因为一想起要回顾一下刚刚过去的 2014 年,有两件事立刻浮现在我的脑海中:外婆的去世和女儿的出生。这两件事相隔很近,以至于每每念及都会唏嘘感慨生命的更替变化,令人困惑又心生敬畏。
上次年度回顾里说到,我要细谈一下自学考试的经历。当初我以为只是简单地考几年试的事情,没料到却如戏剧一般起伏变化。每念及此,我都觉得应该把它记录下来,算是对这段不太平坦的求学之路的一个总结。今天我决定动笔。
我这两天玩下来,最深的感受是,这是个活跃加熟人圈子(我这里不说朋友圈以免误导大家)的产品。 很多人不是没看到别人用吗?那是因为你很少用微信跟人交流,它就把你排斥在外了。那么微信红包在业务逻辑上做了哪些设定,使其区别于一般电商的红包玩法呢?
红包对个人只能发给最近聊过天的人。如果你想发给没聊过天的好友,必须把这些人拉出来建群,不能发完就散。所以它是提供给活跃用户来玩的,这个门槛能激发入场玩家的「优越感」。

眼看 2013 年就要跨过,眼看这个 blog 又要草长齐腰,眼看笔头日益生疏如写外语,在这最后一两个小时,还是来回顾一下走过的这个 2013 年吧。
当期望输出列表而列表没有数据时,使用 null 还是 empty list? 这是让很多程序员迷惑的问题。当你有很多选择的时候,通常只有一种是最合适的(当然很多时候这句话前面要加上一个「在特定条件下」的定语)。针对输出/返回空还是空列表的问题,很多人多年程序设计经验表明,应该总是使用空列表。
今天,我要向大家宣布一件事儿,我将要转岗到集团无线部门。还有几个小时我就无法使用现在的 @alipay.com 邮箱了,所以赶在域账号变更前和大家 say goodbye, 并让你了解到更多信息。
今天来说说 Code Review(代码审查,以下简称为 CR)。
在一支自认为还算正规的研发团队中,CR 应该是值得做而且必须要做的环节。下面是维基百科对 Code Review 的定义:
是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。
CR 有多种形式,结对 CR(两人坐在一起讨论)、多人 CR(一对多);既有在线进行(借助 Review Board 之类的软件)也有离线进行(一伙人坐在一起讨论)的。
个人建议,在可能的情况下,应尽量选择多人坐在一起 CR,这里称之为「集体 CR」。借用一个时髦概念,集体 CR 可以说是 O2O CR,从线上到线下,哈哈。先看看为什么要进行 CR:
要使页面在当前页跳转到下一页,有几种实现方式:
<a href="new/path">goto</a>Location: http://host/new/path<meta http-equiv="refresh" content="1; url=new/path />"location.href 属性location.href = 'new/path';location.replace() 方法location.replace('new/path');以上方法实现方式不同,可以灵活运用于不同场景。悲剧的是,虽然可以达成跳转需求,但通过一些方式跳转到新页面时不会带上引用页地址 (referrer, HTTP header 错误地把它拼写成 “referer”). 为什么需要引用页?
毫无疑问,JavaScript 是当前最流行脚本语言,不过我认为它获此境遇是历史原因造成的,而非源自优秀的设计。相反,JavaScript 的设计过于灵活和随意,以致坊间流传着各种“杂技”,其中不乏冠之以“高性能”的技巧。而初学者和 JavaScript “熟手” 面对这样的耍杂代码无所适从,不求甚解之下就往往忽略了它。
但是,为什么这些奇技淫巧的代码没有导致语法错误?为什么它也能运行?如何举一反三?解开这些问题,需要了解被大多数人忽略的 JavaScript 基础知识。这里试图解析一些 tricks, 告诉你它们背后的秘密。
最近,同事遇到了 JavaScript 调用 Flash ActionScript 接口失败的问题,并总结了一些改进方法。看到分享后,结合之前遇到类似的问题,我也总结了一下浏览器插件,包括ActiveX 控件(在IE中)或插件(非IE中)中的互操作问题。