Feng's Daily

2016年终总结 进入正轨的人生

前言

又到了写年终总结的时候了。这是我第二次写年终总结了。

2015年对我来说算是转折的一年,发生了很多我没有想到的事情。不过现在想想,这也能称得上是塞翁失马焉知非福了。

时间过得好快,在不断前行之余,我想也是时候回头看看,到底做了些什么了。

如果说2015对于我来说,是转折的一年的话。那么2016,对我来说,就是人生渐渐进入正轨的一年吧。

最后的学校生涯

2016年,我终于要毕业了。

我一直不太喜欢学校,和教务处,校团委各种各样的组织打交道真的是非常的烦人,特别对于一个程序员来说。

我一直觉得我可以很开心的度过一个毕业典礼,然后,就开始新的生涯。

我以为我不会哭的,不过没想到还是会哭。

伴着音乐响起,当唱起《再见》的时候。

我就想起了,和同学一起玩游戏的时候,一起吃火锅的时候,一起聊过的天。也许那些日常琐事,更加值得令人感动吧。

恩,没办法,还是会哭呢,根本停不下来。

我这个人很反感别人说高中同学不如初中同学,大学同学不如高中同学关系更好这类的言论。当大学同学来

如何更好的了解ECMAScript

本文源自于前段时间在团队内部的分享。稍微自己总结一下。
本文写自2016年9月21日。鉴于前端的飞速发展,一段时间后不能保证文章内的内容还没有过时。

什么是ECMAScript

首先既然要更好的了解,起码得先说说什么是 ECMAScript。

ECMAScript 是一种由 ECMA国际(前身为欧洲计算机制造商协会)通过 ECMA-262 标准化的脚本程序设计语言。

看起来出现了很多奇怪的名词,ECMA国际?ECMA-262?黑人问号???

那么然后来稍微介绍一下什么是 ECMA国际。

ECMA国际

Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。

与国家政府标准机构不同,Ecma国际是企业会员制的组织。组织的标准化过程比较商业化,自称这种营运方式减少官僚追求效果。

上面这些信息都可以在 WIKI 中找到。大家可以很明确的看到,Ecma国际是一家和企业密切相连的组织,所以 Ecma国际制定的规范都是由各类企业来做主要的制定和推广。

那么既然说到了 Ecma国际,那么它都做了些什么事呢?

其实 Ecma国际负责了很多标准的制定,比如有如下这些规范。大家可以看到这里面有我们今天的主角,ECMAScript 规范。

  • CD-ROM格式(之后被国际标准化组织批准为ISO 9660)
  • C#语言规范
  • C++/CLI语言规范
  • 通用语言架构(CLI)
  • ECMAScript语言规范(JavaScript)
  • Eiffel语言
  • 电子产品环境化设计要素
  • Universal 3D标准
  • OOXML
  • Dart语言规范

JAVASCRIPT的诞生

在说 ECMA262 之前,我们先来讲讲 javascript 的历史。

在1994年,Netscape 发布了 Navigator0.9,但是因为那个时候的浏览器缺乏和用户有良好交互的能力。所以 Netscape 急切渴望一门可以在浏览器中运行,可以提供一定用户交互的语言。

然后在1995年,Netscape 让 Brendan Eich 去开发这门语言。然而,javascript 诞生了。

然而在此之后,Microsoft 推出了一门类似的语言,JScript。

Netscape 为了提升 javascript 的竞争力,于是将 javascript 提供给 ECMA组织 进行标准化。

然后,1997年7月,ECMA262 标准出台。

时隔14年之后,ECMA-262 标准也被另一个国际标准化组织 ISO(International Organization for Standardization)在2011年6月批准,标准号是 ISO-16262。

ECMAScript 作为一门脚本程序设计语言标准,并不只有 javascript 这一种实现,它也有很多的方言实现。比如有下面这些语言:

  • JavaScript
  • Ejscript
  • JScript .NET
  • ActionScript
  • DMDScript
  • CriScript
  • InScript
  • 飞速发展和稳定期

在 ECMAScript 规范初版发布后不久。

1998年6月,ECMAScript 2.0 发布。

1999年12月,ECMAScript 3.0 发布。

这时,ECMAScript 规范本身也相对比较完善和稳定了,但是接下来的事情,就比较悲剧了。

2007年10月。。。。ECMAScript 4.0 草案发布。

这次的新规范,历时颇久,规范的新内容也有了很多争议。

在制定ES4的时候,是分成了两个工作组同时工作的。

一边是以 Adobe, Mozilla, Opera 和 Google为主的 ECMAScript 4 工作组。

一边是以 Microsoft 和 Yahoo 为主的 ECMAScript 3.1 工作组。

ECMAScript 4 的很多主张比较激进,改动较大。而 ECMAScript 3.1 则主张小幅更新。

最终经过 TC39 的会议,决定将一部分不那么激进的改动保留发布为 ECMAScript 3.1,然后将一部分比较激进的部分放置到 ES.NEXT 中,命名为 Harmony(和谐),留待以后再进行商榷。接下来,ECMAScript 3.1 变成了 ECMAScript 5,而 ES.NEXT 中的那些特性,则有着相当一部分被ECMAScript 6,也就是 ECMAScript 2015 所吸收了。所以说虽然 ECMAScript 4 被废弃了,但是它终究还是通过另一种方式活了下来。

然后,2009年12月,ECMAScript 5 发布。

2011年6月,ECMAScript 5.1 发布。

TC39

中间插个小话题。其实在前面大家仔细看,会发现有个名词,TC39。为了接下来的内容,所以先来解释一下 TC39 是什么。

TC(Technical Committees)

TG(Task Groups)

在ECMA国际,每个标准都会有一个 TC 来负责,而一个 TC 中可能会有不同的 TG 来负责不同的工作。而负责 ECMA262,也就是我们所说的 ECMAScript 的就是 TC39(以前叫 TC39-TG1)。

Ecma organisation 在这里我们可以看到各个 TC,并且可以查看其负责的标准。

ECMAScript 2015

接下来是一部重头戏。

2015年6月,ECMAScript 6,也就是 ECMAScript 2015 发布了。

新的规范中,带有大量 ECMAScript 4 中激进特性,以及常年的提案积累。所以 ECMAScript 6 里和前一版标准有了非常大的差别。

从 ECMAScript 6 开始,标准有了新的,更加规范化和快速的制定流程。面对着每年一次的,频繁的标准更替,再采用1234的版本号来标注规范显得不太合适。所以从 ECMAScript 6 开始,就开始采用年号来做版本。即 ECMAScript 2015。

新的规范制定流程

在新的规范制定流程中,要求成文标准要从事实标准中诞生,实现先于标准存在,大家可以在接下来的流程说明中看出来。

每个新特性,从开始到完成一共要经历5个阶段。

strawman (稻草人)阶段

proposal(提案)阶段

  • TC39制定成员作为 champion
  • TC39审阅通过
  • 有实现的 Demo 或者 Polyfill
  • 初步描写标准的语义语法算法复杂度解决的问题等

Draft(草案)阶段

  • 有两个或两个以上的实现(包括babel这类的转译实现)
  • 使用正式的语言描述该语法,api等

candidate(候选)阶段

  • 至少2个实现,可以为实验性实现
  • ECMAScript spec editor 通过审核
  • TC39 review 通过
  • 文本编写完成

Finished(完成)阶段

  • 编写 test 262 测试用例
  • 通过两个实现该特性的内核测试
  • ECMAScript spec editor 通过审核
  • 开发者表示支持和认可

接下来,在每年的3月和9月,都会提交新特性的申请,在 ECMA General Assembly 通过以后,被添加到标准中去。

值得注意的是,TC39 每年的工作日程也是规划好了的。

每年的3月,TC39 会召开会议,将完成的特性添加到标准中。

每年的4月到6月,会由 ECMA CC 和 ECMA CG 来做 Review。

每年的7月,批准通过新标准并且发布。所以,ECMAScript 2016 标准,其实也已经正式发布了,虽然只新增了两个特性。我们现在已经可以开始看 ECMAScript 2017 的草案了。

迷茫的新特性

对于有些人来说,前端的更新总是很突兀,很让人迷茫。

但是其实不是的。变化总是一点一点发生的。

GitHub - tc39/proposals: Tracking ECMAScript Proposals

我们可以在 TC39 的 Github 仓库中找到完成了,废弃的,以及正在进行中的提案。

多去关注这些东西,对于很多新事物的到来,我们也就不会有多惊讶了。

别的 ECMA 标准?

和 ECMAScript 有关的标准只有 ECMA262 吗?

其实不是。和 ECMAScript 有关的标准有 ECMA262,ECMA290,ECMA327,ECMA357,ECMA402,ECMA404,ECMA414等等。

其中290,327,357等等没有推广开来,被废弃。

ECMA 262 是语言规范本身。

ECMA 402 则是制定一些基于 ECMAScript 5 或者之后版本的一些国际化 API 标准。

ECMA 404 是JSON规范。

ECMA 414 则规定了哪些规范是和 ECMAScript 有关的。目前内部就包含了 262,402和404。

备注

如果大家想更好的关注标准的变化,可以订阅 TC39 的邮件组,关注 TC39 的 Github,并且在 Twitter 上关注 TC39 的成员。

引用

我的2015到2016

前言

说老实话,本来是不太想写年终总结的,毕竟这么多年了,也从来没有养成过这种习惯。而且有的事情发在别的地方总会担心被人说成是炫耀或者自作多情,而且我本身也不那么在意别人的看法。不过2015这一年也确实发生了很多的事情。

说老实话,我以前一直觉得自己特别幸运

想去的学校,去了

想去的专业,去了

想做的事情,做了

深爱的人,有了

想要去工作的公司,也很随意的就进去了

总觉得一路上顺风顺水,自己也从来都不喜欢追忆过去,因为一直觉得自己遇到的已经是最好。如果拿玄幻小说的修行来比喻的话,自己修的就是顺心意,按心之所想,一路前行。

早早的就认识到自己的局限性,确实很多事情都不是自己能够做的到的。金庸的《白马啸西风》中有这样的句子。

那些都是很好很好的,可是我偏偏不喜欢

恩,我呢,只追求自己喜欢的一部分就好了,算是比较知足的类型。不过虽然如此,但是我也有自己的技术追求的,只是相对来说看得没有那么重了吧。我仍然是最看重家庭。能和喜欢的人在一起就好。

不过虽说一路上顺风顺水的样子,但是在2015这一年,自己也经受了不少波折,不过自己也获得了很多,说实话,自己很感激所呆过的所有团队。

总结从哪里开始写呢,不如,就先从工作开始理起来吧。

工作

2015这一年,最早是2月份的时候,让之前在阿里的师兄内推了自己,不过因为自己想要和更多的前端一起共事,放弃了老部门,转投了蚂蚁金服。这次实习面试其实挺坑的。一开始的时候,上海的面试官发现我投的是杭州而非上海,告知要将我的简历转到杭州的部门去,结果手滑把我的面试给挂了。恩,怎么说呢,当时挺烦躁也挺尴尬的吧,毕竟自己都去过一次阿里了,而且这次有帮忙推别的同学,结果别人过了,自己挂了,实在是尴尬。不过所幸最后朋友帮忙联系了支付宝的 HR,解决了问题。另外,自己真是对阿里爱得深沉,实习面试只投了阿里一家,这也和自己的自信也有关吧,基本上投了就过,不太想投别的,毕竟别人面试也挺辛苦的。

然后在7月的时候,结束了学校的工程实训。说起工程实训,虽然是个很坑的东西,但是自己每次都会选用自己没用过的技术,然后去做一个产品出来,所以最终感觉也没那么亏,只是老师确实什么忙都没帮上。

恩,话接上文,结束了工程实训,然后就怀着忐忑的心理又去了支付宝,这是我,第二次以实习生的身份来到杭州。

在那边去了一个介于基础建设和业务的小组,主要是负责做一些基础建设的工具平台或者业务中台。蚂蚁金服的体验技术部是一个很棒的地方,而且有着很完善的前后端分离经验和 React 开发经验。在支付宝这里,我度过了难忘的四个月时光,恩,四个月。大部分人都在得知阿里缩招的消息就离职了,但是说实话,leader 的看重和这里完善的基础建设,先进的架构思想,愉快的技术环境,都让我无法舍弃,一直等待着希望。最终,还是没等到。

不过自己也不后悔,在这里自己做了很多,也学到了很多。负责了一部分后端的前端培训工作,制作的视频教程也受到了多方赞赏,leader 还推荐我去做新人培训的讲师。在这里,留下了很多难忘的回忆,项目组里的核心大项目自己的代码提交量排到了第三,也是开发的主力之一。并且在后期,有了良好的产品意识,得到了玉伯的认可,感觉自己不虚此行。在这里,大牛云集,对我这样一个小前端来说,真的是很棒的地方呢。同事也都 nice。自己换了一次组,第一个 leader 是个很漂亮的姐姐,人非常和蔼,做饭也很好吃。在这边工作基本每周末都会大家一起去某个同事家里吃饭或者外出野营,大家的关系真的很好呢。第二任 leader 是个看起来比较严肃的人。不过虽然说严肃,但是并不算是凶的类型,很认真,也很有幽默感,非常赞的 leader,经常帮我各种忙。之前跟张秋怡他们聊天的时候,经常会说到一句话,公司不是家。是的呀,公司不是家,不过我觉得,体验技术部算是我的一个小家呢。这里给了我外界难以给予的视野,让我看到了很多有趣的想法和架构。

还记得第一次和玉伯他们去饭店吃饭,向玉伯敬酒,感谢他接受自己来这里,以及明年再次来这里。哎,没想到,这句话,只实现了个开头,却没有如期结束。

还记得那天,leader 早上找我聊天,说应该留不了了。说实话,自己已经做了两个月的心理准备了,原以为可以很平淡的接受,没想到还是忍不住哭了。哎,真的很喜欢很喜欢这里。

临走的那天,发了封内网的告别帖,看到同事们,朋友们为我祝福,看到大家一个个的用旺旺安慰我。真的很温暖,恩,很温暖呢。

然后,辗转来到了美团,这也是我多年的实习里,最后一份实习工作。

初来到美团,内心其实是崩溃的。有的同事的代码水平差,新写的代码全是问题,自己碍于面子也无法全部告诉对方,新思想难以推进。自己一度产生了毁三方再找工作的念头。不过因为rank说可以转岗的事情,自己又有了那么一点点期待。

后来新 leader 来了,全权负责这里的前端工作。新 leader 和自己一样是个激进派,革新派,自从来了以后就不停的推进前端的分离化和工程化,而且新 leader 对我也很看重,会让我去负责很多有趣的事情。这个时候,rank的转岗通知过来了,这时候自己很纠结。不过没想多久,还是明白,自己还是想更多去学习。随后便同意了转岗,只是没想到,转岗因为公司政策的原因,卡到HR的地方失败了。

恩,虽然失败了,不过其实自己没有刚来的时候那么在意了。新 leader 是个很 nice 的人。并且愿意让我去发挥自己的能力,我没什么可抱怨的了。

并且在美团这里,第一次,第二次,以及第N次,以一个实习生的身份,做了社招面试官的身份。说实话,虽然已经不止面过一次了,但是每次面试前总觉得很惶恐,担心自己被碾压,担心没面好。不过结果基本都是,那些工作了四五年有名企经历的人,漏洞百出。我总觉得他们只去完成工作的螺丝而已,并不爱着技术。另外自己也负责一部分wiki文档的编写。

这一年经历的东西很多,事实上,自己每年都在经历不同的事情,不过我是很幸运的。不管是难过还是快乐,事后总是证明,那些,都使我更加强大。自己是个很懒的人,希望自己能勤快点。

感情

熟悉我的人其实都知道,我这个人看起来没什么情绪的样子,其实对感情这回事,是很看重的。

我对于谈恋爱这件事是很慎重的,如果我不确定自己喜欢对方的话,是不会准备去开始的。也许趁着年轻玩玩也好,不过这对我来说总是难以接受的。所幸的是这样的我很快的碰到了我亲爱的另一半。我和她在2014年相识,相互爱恋着度过了2015这一年,发生过很多事情,开心的,惊讶的,难过的。而我们总是越爱越深。

因为真的很爱她,所以不舍得她难过,从来不会和她吵架。如果一个人说永远不会和另一个人吵架,这个基本上不会有人相信的吧,毕竟,这个世界上没有什么是永远的。不过我还是要说,我永远都不会和她吵架。如果我永远不生气的话,那么,一个人是,怎么也没办法吵起来的。我想,只要她还爱着我,我就没有会生气的理由,不管怎么样,她爱我就好。

尽管是这样说,不过这过去的一年里,自己也并没有做到最好,有的时候还是会让她伤心,但是自己绝不会不理她。毕竟,伤心的是她,也是我,不把她哄回来,我怎么开心呢。

2016,自己努力做的更好吧,毕竟是要让我娶回家的人。

最后的最后

最后的最后,说点闲言碎语。

不管怎么样呢,这一年,过得很有趣很充实,说实话,2016可能会因为自己给自己挖的一些坑变得有点艰难,但是我想困难总是可以克服的,这点信心还是有的。

不管怎么样,我很幸福。

那么,让我一直幸福下去吧。不要太贪心,只要小小的满足就好。

Github用户识别机制

前段时间有朋友遇到了一些github提交的问题,我做了一点小的调查,就在这里记录一下吧。

首先问题有三个:

  • 所有“鬼栈”的 commits 都没有被记在 contributions 里;
  • 添加 email 之后,历史记录中,Huxpro 是被识别为一个用户(可以单独看 commit,看 profile),但鬼栈不是;
  • Update README.md 之后,全部用户被修正了。
  1. “鬼栈”的 commits 没有计入,Github help 中在 Setting your email in Git 中,有说明。

    Make sure that the email address you set in your local Git configuration has been added to your GitHub account’s email settings. After adding your email, commits that used that email address will automatically be counted in your contributions graph. There is no limit to the number of email addresses you can add to your account.

    因为你的git config中的email没有添加到 Github 账户中,在你添加 email 以后,过去使用这个email的commit将会自动计数。

  2. 这个来看 Github help 的 Why are my commits linked to the wrong user?

    这里说明这是 Github 的一种报错的机制。
    里面有三种情况:

    • 未识别的作者(有 email 地址):这时候你需要添加 email 地址到你的 Github 账户中去,这样就是之前说的,会自动识别。
    • 未识别的作者(无email地址):这其实是说你所使用的 email 地址已经用在了别的用户账号里,这时候你需要修改 git config 中的 email,并且在 Github 用户中添加该 email。但是这种情况,过去的 commit 在修改之后仍然无法被连接到正确的用户,这时候你需要通过脚本来修改提交记录(慎行)Changing author info
    • 不可用的 email:这说明你的 git config 里的 email 地址是一个空白或者没有按照 email 格式正确填写。这时候和2中做一样的操作就可以了,而且此处的 commit 历史记录也无法正确被连接,需要脚本来帮忙。
  3. 在 Setting your username in Git 中有一个小贴士

    Tip: You don’t have to use your real name—any name works. Git actually associates commits by email address; the username is only used for identification. If you use your email address associated with a GitHub account, we’ll use your GitHub username, instead of this name.

    Github 会通过你的 email 来识别用户,并且一般来说,还会用你的 Github username 替换掉你设置的 username。

    所以,当你更新 Update README.md 之后,根据 git config 中的 email 地址,Github 正确识别了 email,并且将你的“鬼栈”用户名替换为了 Huxpro。而根据 Github help,你修改了邮件地址,只会自动计入,而不会自动将用户名替换并正确连接。只有当你更新之后,因为 email 识别的问题,全部“鬼栈”都被替换成了你的用户名。

大概就是这样,详情可以去查阅 GitHub Help - GitHub Enterprise Documentation

阿里巴巴实习感言

不得不说,阿里巴巴是一个让人感到幸福的地方。

在这个地方,虽然周围的同事大部分都年长了我很多,但是我却感受到了一种难得的自由和平等。

不知道明年还会不会再去,但是,我想,我一定不会忘记他们。

大家帮了我很多,让我明白了很多。

这是一个比学校更像学校,也是一个比学校更像家的地方。

我有时候都会有点后悔,今年应该去百度的,明年来阿里然后一直呆在这里不走了。呆在这里这的很开心。

谢谢你们。

收获

  • 学会了骑自行车。别笑,我以前一直都不会骑车,公司里到处都是自行车,然后终于在夜深人静的时候让我练成了自行车大法,不过话说回来自行车真好玩。

  • 更多的思考业务。工作的时候,往往技术问题是次要的,业务问题才是比较重要的。

HTML全局属性介绍

前言

HTML中存在很多全局属性,但是我们可能却对此并不了解,所以我做一下整理和解释。

目录

2014年实习面试经过

说一下结局,百度和阿里巴巴最后都给了我offer,虽然也蛮喜欢百度的,不过因为百度给的比较晚,而且也认识了很多一起要去阿里实习的朋友,所以我最后决定去阿里。

我应聘的职位是实习前端开发工程师。