Loading…

「胡扯」:我的2016

题外话 《我的少女时代》真的是部蛮好看的电影 :) 正文 地球公转一圈需要365天,然而就又到了和25岁说告别的日子了。讲道理,细数一下整个2016,对我来说还是发生了不少事的。 关键词:离职 自打到了Pearson,在做了不少奇奇怪怪的项目、稀里糊涂干了两年半System Analyst,终于还是到了该离职的时候。遇到了一群有意思的同事,也见识了办公室政治;接触过终日摸鱼的同事,也碰到了善解人意的mentor,然而天下终究无不散的筵席,人免不了想要离开comfort zone去尝试一些新的挑战,再踏上一个新的征程。虽然无法再在一起共事,但我想这阻止不了我们闲暇小聚、乱扯八卦的热情。 江湖不远,情谊不散。 To: Larry、Eiliy、Mark、Penny、Sarah、Kenny,当然还有教会我很多事的Jackie、Stephen。 非常感谢你们过去对我的帮助,包容了我的错误,体谅了我的任性。 关键词:旅游 我曾经反复和好友念叨:读书时有大把时间挥霍却没钱负担,而工作后有了钱却没了时间——好不滑稽。因而很早之前,我就打定了主意要小存一笔钱然后裸辞去见识一下祖国的大好江山满足一下打小就有的关于旅游的怨念。 重庆…

「谈谈」:Fermi-UI的一些思考

感觉博客又长草了,逮着空隙来更一篇。 扳着手头算算,正儿八经学JavaScript也已经有三年时间了,还记得刚毕业的时候曾经给自己定下过一个目标:给公司或者自己写一套UI library,免得每次到做项目的时候都要为UI而费很多心思,可惜的是在创图时间不长,临到最后离职也未能如愿,而且现在回头想想,当初也算是空有想法而力有未逮。而到了新公司之后,因为需要,又花了一部分心思点了一些后端的技能树,而主要的时间也是在解决数据和内部工具的问题,这个愿景也就一直搁置了。不过好在,最后还是找机会完成了一个库 - Fermi, 给了自己一个交代。 简单的来说,Fermi是一个基于AngularJS实现的UI库,封装一些开发中常见的元素,e.g. Tab、Progress、Tooltip等等,而得益于Angular Directive提供的Custom Element特性,这些基础组件可以像原生控件一样以声明式的形式被应用在HTML模板中,由AngularJS在客户端的运行时将这些元素自动展开并替换原来的DOM节点。 一个典型的进度条: <Fermi:Line value="Progress.line" default="0"></Fermi:Line> 一些设计…

「谈谈」:简议Callback、Actor、CSP等并发模型

锲子 距离记事似乎已经很久了,按说应该动笔写F#那篇的,无奈前一段时间太忙,所以耽搁了,思路也就断了。 好不容易最近得了一些空,因此把一些以前指定的计划重新翻了一些出来,试图做些进展。其中之一就是学Scala和Akka。 之前由于IDE的原因刚起了个头就放弃了,但好在这次发现了Ensime这个项目,发现Scala在Atom上似乎也可以编的比较顺手。 正文 因为Node.js的缘故导致我在业余时对消息传递(Message Passing)系统很感兴趣,最早研究过Comet,后来把玩过Websocket,但随着学习的深入,发现后端的高并发支撑架构其实才是乐趣真正的所在,Non-bloking I/O、Coroutine、Asynchronous、Distributed etc,Node.js虽也以高并发成名,但碍于某些原因,业务一旦上了正轨,面临超高规模的并发挑战时,它还是会显得力有未逮。因此便将目光转移到了其他的语言与模型比如Erlang,不过与其说erl是一门语言,倒不如说是一个分布式系统,因为其剑走偏锋,单纯用语言来衡量并不完全(一直想用erl写一个socks5接口,到现在也只写了一半,罪过罪过)。WhatsApp后端基于erl架构获得了单节点最高可以负载C3000K的并发能力,凭的就是基于Actor(?)的消息通讯模型,异步、Immutable、…

「谈谈」:浏览器内的异步以及事件轮询

以下内容整理于关于浏览器处理事件的问题?,配合博客做了一定修改,题目看起来很大,但其实没几句话。(有朋友关心的:ng2,我抽空会再研究下,然后post出来的) 先引 @冯东先生之前的一段回答。 但凡这种「既是单线程又是异步」的语言有一个共同特点:它们是 event-driven 的。驱动它们的 event 来自一个异构的平台。这些语言的 top-level 不象 C 那样是 main,而是一组 event-handler。虽然所有 event-handler 都在同一个线程内执行,但是它们被调用的时机是由那个驱动平台决定的。而且设计要求每个 event-handler 要尽快结束。未做完的工作可以通知那个异构的驱动平台来完成。所以那个驱动平台可以有许多线程。 恰好,浏览器就是这种 event-driven 架构的软件。 事实上,ECMAScript并没有从语言上约定其异步的特性,我们所探讨的“异步”都是由执行引擎所赋予的。于Firefox,这个引擎是SpiderMonkey,于Node.js这个引擎是V8。而提供这个异步能力的机制,…

「谈谈」:React.js 下的组件式开发

最近尝试了下Facebook的React,感觉特别好用,花了两天,写了个简单的组件,等把手上的项目里的几个安全漏洞修了,过来写篇文章分享一下。 一如既往的,我这人比较啰嗦,文章或许比较长,还请海涵。这里不得不提一下@题叶,多亏他孜孜不倦的在国内推广React,我才有机会认识它,同时这篇文章里也摘要了一些他之前译文中的内容,一并感谢。 什么是React.js 背景,为什么我需要React React.js是Facebook公司在2014年前后推出的一款前端的UI库,它并不像Foundation或者bootstrap那些围绕jQuery以及CSS而开发的UI脚手架,你仍然得实打实的为你的模块编写代码,只是开发的模式和以前大有不同。 就像我之前在博客中提到过的一样,2010年后,由于社会上对F2E需求的爆发性增长,不少顶级互联网公司对都FE这个领域开始了不同程度的探索。于是,人们开始在前端领域谈MVC、谈MVVM、谈SPA、谈components,而就这些特性而言,Google的Angular(下称ng)已然是众多框架中的翘楚,它允许Dev可以以MVVM的方式很快的实现各种诸如数据双向绑定、自定义标签等等的需求。但所谓有利就有弊,ng对普通Jser的依旧有着很大的要求,而且ng本身是一个高度复杂的框架,而有时候在一些webapp上,我只是想可以快一点、再"快"一点的写view层的模块,并不需要ng这样重量级框架。 而面临这样需求,…

「谈谈」:What's GeneratorFunction in ES6

题外话 选一张好的题图真是重要,可以不断push你把坑填了,让你下意识的希望写出一些出色的内容以期望其可以配得上这张优秀的照片。 好了,闲话挂起,一如既往,这篇「谈谈」我们来谈谈未来十年的ECMAScripht标准中一个新的且相当重要的实现。 什么是生成器 认识我的友人都知道,在我有限的时间里所玩过的几门语言中,对JavaScript我实际上是有偏爱的,但是对它的服务端平台Node.js却一直又爱又恨,以至于网上很多人建议学习Node.js作为第一门语言时,我经常是反而去推荐Python,原因无他,当Coder选择node.js作为平台来实现项目时,无非看中的就是它基于Reactor模型异步调用的高效,但这中间却需要编码人员付出相当的心血来维护随之而来的"副作用"——callback hell, aka 回调噩梦。 但随着ECMAScript标准的逐渐推进,在最新一版的ES6里出现了新的特性——Generator Function,通过其在流程控制中的特殊行为,可以使得编程者不再陷在回调地狱里难以自拔。 如果单纯从yield的行为与表现来看,简而言之,我们可以认为它是一个异步的return。 事实上,我认识yield这个关键词不可谓不曲折了,第一次见yield是在公司里写Lua脚本,彼时年幼,不知道coroutine是个什么玩意儿,生生的漏过了Lua蕴藏着的独一无二的宝藏,以至于当被callback hell嵌套的不能自拔,回过头来再看时,才发现Lua的协程实现又何止惊为天人。 后来陆陆续续的在玩Python、学C#…

「谈谈」: How to implement Befunge Interpreter

题前 之前在有看到死月撸了一个BrainF**k的解释器,因为不甘寂寞所以这次也循例来撸个和BrainF**k差不多的解释器——Befunge,同样感谢下@Bolt_白衣苍狗,我也是看了他的专栏才知道有codewars这么好玩的地方。 什么是Befunge 依照惯例贴下codewars问题描述。原题在此 Your task is to write a method which will interpret Befunge-93 code! Befunge-93 is a language in which the code is presented not as a series of instructions, but as instructions scattered on a 2D plane; your…