2017年3月1日
请问八哥五年内的职业规划是什么?(来自小密圈)
这个问题让我犹豫了好久好久啊。因为5年确实很难预料会发生什么。先回顾一下过去的几年职业路径吧。
工作前两年基本在学习,怒补基本功,以及作为一个工程师,在职场上的职责是什么,怎么样去参与项目做事情。
接下来几年有幸开始慢慢主导一些项目的开发工作,慢慢学会了如何以产品思维来思考技术工作,明白技术为产品服务。这期间也有去充当一半产品经理的角色,去参与需求的规划,去关注用户的反馈,去解答用户的疑问。当然期间也在一直在补充前端技术并开始接触新技术和开源社区,对前端的知识体系有了更深刻的认知。
如果说工作到现在学到了什么核心竞争力的话,可能是两个方面。一方面是清楚地知道前端的能力、职责和限制,有什么需求能清楚知道能不能做,以及如何做,代价如何。另一方面则是积累了一些产品研发全流程的经验,知道研发过程各个角色的立场和思维模式,尤其是产品思维。
2017年2月27日
ES2015(ES6)中新增了几种数据类型,包括Map WeakMap Set WeakSet等。其中Map可以与我们熟悉的对象Object进行对照,他们的功能都是提供一个键值对集合,主要的区别在于Object的key只能是字符串,而Map的key可以是任意类型。关于Map的大致用法可以参考MDN,我在前一篇文章《也谈JavaScript数组去重》中也有提及。
今天要讨论的主角是WeakMap。
按照MDN上的说明
WeakMap 对象是键/值对的集合,且其中的键是弱引用的。其键只能是对象,而值则可以是任意的。
从这段描述来看,我们可以大致推断出,WeakMap与Map的主要区别在于两点:
这两点意味着什么呢?反正我第一眼看到的时候不是拉格良日懵就是三元二次懵的状态。于是围绕WeakMap去查阅了一些资料,渐渐地有了一些更深入的认识,记录成本文。
2017年2月24日
开年来真的有点忙,好不容易写起来的公众号又好久没拔草了。
最近忙的其中一件事是写一个slides,也就是传说中的PPT。(明明用的是keynote,你才PPT,你全家都PPT!)写的是web前端的一些普及性的介绍。
在写的过程中,发现越写越悲观,写到最后竟然隐隐觉得web要完。当然,这是一件政治极其不正确的事情,所以也不敢到处乱发,只能当成呓语在公众号写一写,给为数不多的朋友诉一诉这其中的一些想法。
曾经有几年,大家是非常热衷于web标准的。但是如果问一问现在来面试的朋友,估计应该没有多少人还在意web标准这件事情。大家会关注 Angular / React / Vue ,会关注 AR / VR ,但是真的没有人关注web标准。
那我们关注一下可好?
唉,算了。反正大概的感觉就是真正需要成为标准的东西一直拖拖拉拉,比如像 web components 至今没有定稿,导致至今没有一个像样的组件方案。最后靠框架来填补这块空白。而像 web bluetooth / web usb / web vr 这类的东西倒是层出不穷。
除了标准本身外,厂商的跟进也是个大问题。一方面厂商对标准越来越不上心,爱理不理,另一方面,又为了各自的利益,先做非标准实现,再回头去影响标准。
总而言之,标准现在就是一锅粥。
2017年2月3日
眼睛一闭一睁,一个春节过去了哈?各位吃好玩好睡好了吗?听说今天很多人开工啦,于是我终于知道了原来我初八上班是很晚的,感谢公司,感谢郭嘉,感谢MTV。
新年新气象,希望大家抓紧时间吹吹牛,然后用剩下的一年,哦不对,是90%年,去实现自己吹过的牛。
不过新年新气象倒并不是促使我想发点东西的原因,想发文章最主要的原因还是因为昨天晚上到今天又被Docker折腾到半死。
事情是这样:手上有一个小站,用Docker部署在阿里云上,操作系统选用的是无比拉风的CoreOS,就是传说中那个用Docker构建,内置Docker的系统,这个系统还有一个很NB的功能,就是会自己升级……自动升级……自动……升级。
前天晚上收到告警,网站down了。不过彼时正处在调整堵车9小时后万念俱灰的情绪中,所以没有管它。昨天回深后到晚上才又想起来这事,奇怪的是所有的服务都在跑,但是容器之前的网络都不通了。于是找资料,升级docker composer,升级composer的配置文件版本,折腾Docker新的网络模型……
2017年2月3日
什么阶段考虑进入创业公司?
其实我并没有认真的思考过这个问题。职业发展是一个涉及到很多方面的问题,包括职业方向上的规划、薪资水平、工作环境、团队氛围等很多方面。
因为标的公司是创业公司,一般来说,从薪资、工作环境上不会有明显优势,因此个人觉得主要考虑点在于个人成长和团队氛围上。
2017年1月19日
来自知乎问题小程序上线后市场反应如何
尘归尘,土归土。正在回归正常。
小程序一直在强调自己线下场景的定位,奈何开发者、媒体总是不信邪,非要赌小程序会有流量红利,会给自己带来线上流量。甚至在微信明确说微信中没有入口,没有应用商店之后,仍然有一大波人围着不愿散去。
现在打脸了吧。线上流量红利真的一点没给。于是这波围观的人一哄而散,甚至还会留下一堆唱衰的评价,“你看,我就说这玩意没鸟用吧”,殊不知,正是自己的期望过高导致现在的巨大落差。
回归到小程序自己的定位来说,其实非常明确,就是线下场景。具体的微信公开课Pro上已经详细阐述过,这里就不复制了,有兴趣的自己找。
2017年1月13日
来自知乎问题微信小程序为什么不用HTML5、CSS,自己搞了个WXML、WXSS,很多框架用不了,好处一点不知道?
假设我们把问题稍微改一下哈:
iOS应用为什么不用HTML5、CSS,自己搞了个OC / swift / autolayout / storyboard,很多框架用不了,好处一点不知道,以前项目根本没法移植,而且我们习惯的jquery、auicss、图标等完全用不了,也没见OC / swift / autolayout / storyboard有什么好处,完全理解不了。。。
嗯。我只是改一下题目,不回答。可自行思考。
为什么没有人问上面改过的问题,而小程序就有人问呢?只是因为小程序和web长得很像,所以就觉得要用web来做吗?那长得像的话是不是就能直接用web做呢?
答案是,大部分是可以的。比如文本、图片、输入框等等,都可以。
但是,也有一部分小程序的功能是web完全不具备的,例如扫码、获取设备信息、获取罗盘信息、等等。
此外,还有一小部分是web做起来很困难的。比如上面有人提到的地图、fixed的文本输入、视频相关、sticky定位等。
除了能力上的限制以外,还有相当一部分是来自于性能上的限制,也即虽然很多东西用web确实可以做,但是性能是很差的。
2017年1月5日
JavaScript的数组去重是一个老生常谈的话题了。随便搜一搜就能找到非常多不同版本的解法。
昨天在微博上看到一篇文章,也写数组去重,主要推崇的方法是将利用数组元素当作对象key来去重。我在微博转发了“用对象key去重不是个好办法…”然后作者问什么才是推荐的方法。
细想一下,这样一个看似简单的需求,如果要做到完备,涉及的知识和需要注意的地方着实不少,于是诞生此文。
要去重,首先得定义,什么叫作“重复”,即具体到代码而言,两个数据在什么情况下可以算是相等的。这并不是一个很容易的问题。
对于原始值而言,我们很容易想到1
和1
是相等的,'1'
和'1'
也是相等的。那么,1
和'1'
是相等的么?
如果这个问题还好说,只要回答“是”或者“不是”即可。那么下面这些情况就没那么容易了。
2016年12月29日
2016年11月8日
2016年9月25日
2016年1月27日
相比其他语言(特指PHP)而言,Node.js应用更需要关注出错信息,因为一旦处理不慎,就会导致应用crash。
一种偷懒的方法是使用PM2之类的进程管理软件来启动Node.js进程,从而达到出错crash后自动重新启动应用的目的。
当然更好的办法则是手工捕获错误,然后进行适当的处理,防止应用产生未被接住的错误导致crash。
在捕获到Node.js产生的错误后,下一步自然是记录到错误日志中,以便日后可以进行分析,并针对性地排查修改。本文要说的,即是对错误日志的处理方式之一——告警。
告警是运维工作中非常重要的一个环节,它能让开发者(维护者)及时获知应用出错状态和详情,及早介入处理,将线上故障的影响降低到最低。而要实现告警功能,则需要从两方面入手,一方面是对错误信息进行集中处理(分类、分级、合并、限流等),另一方面需要将这些错误信息及时推送出去。