2015 阅读志

每年到这个时候,都习惯回顾一下一年来读过些什么。因为每当自己浮躁不安的时候,都会刻意地提醒自己静下心来去阅读,跳出周遭缠绕的种种,以换取自我的回归。阅读很多时候是生活的承载,能脱离生活的琐碎、情感的偏差,安静、祥和地记录下一年来走过的日子,思考、体验过的点滴。2015年读过不少的书籍: <文学回忆录> <巨流河> <亲爱的安德烈> <蛤蟆的油> <感动,如此创造-日本电影配乐大师久石让的音乐梦> < »

实现支持消息合并机制的并发阻塞队列

最近我维护的一个系统(下文简称 A)需要实现一个消息队列,大致的场景是:B系统监控某任务的状态,当状态有变化时通过调用 A 的 RESTful 接口请求将最新的状态推送至 A,A 接受到消息后将其插入到自己的消息队列中,然后再从队列中取出消息并再广播给第三方的系统。针对该场景,该消息队列需要支持以下两个主要特性: 保证消息的接受及发送的 FIFO . 支持消息合并。由于消息的内容是对特定任务不同状态的描述,若该任务有最新消息到达,那么已接受到的该任务之前的消息需要从消息队列中去除而不必再进行推送。 实现消息生产-消费的 FIFO,在 »

浅谈『计算能力』的输出

近一两年云计算市场越来越火热,我司最初作为支撑集团内部业务的云计算基础设施部门开始有精力也开始有能力对外输出自身的『计算』能力。『输出』也是我在一段时间以来在公司内听得最多的一个词汇之一了。 那么谈论输出『计算能力』,首先,什么是计算呢?计算是根据一定的模型对输入进行变换得到一个或多个输出。那么输出计算能力,可以是输出: 模型, 比如 Algorithmia 这类平台,厂商或者是开发者可以在平台上对外提供乃至售卖算法实现或者训练好的算法模型。 输入,可能是已有的数据,比如很多商业数据采集分析机构能够对外提供经过一定加工甚至未经加工过的领域数据。另外一个很重要的『输入』就是机器。也许很多人可能不理解为什么会把机器归入到『输入』 »

Sheva.js

sheva.js 是业余时间实现的一个简单的 Parser Combinator Liabrary(解析器组合子)。其能够通过若干简单的解析器(parser),进而组合实现功能更加强大的解析器。具体可以参看 sheva.js README 中所描述的一个计算器的例子。 组合子(combinator)是函数式编程里面的重要思想。如果说OO是归纳法(分析归纳需求,然后根据需求分解问题,解决问题),那么 “面向组合子”就是“演绎法” »

旧文重刊,关于圣诞

不知不觉又到了圣诞节,前些天和朋友讨论圣诞的时候,想到了自己中学时在博客上写这篇文章 - 《圣诞:属于年轻,属于自由》。时至今日,我大抵还是认同当时的观点的,简单的说,圣诞对于我以及我周围很多的同龄人们来说, 大致是“节不嫌多,假不嫌少”心态的“消费品”,一个自我狂欢与放松的承载品。好了,请看年轻时候的笔者是怎么来说这事儿的吧 :) 圣诞:属于年轻,属于自由 又是一年年末,又是一个圣诞,看着大街上自由欢乐的人们,不禁被他们所感染, »

<Rework> 读书笔记

这两天读了 37signals 久负盛名的 Rework 一书,根据自己一些思考做了些摘录和笔记。 “现实世界”只是社会中一些人为自己无所作为开脱的借口,他们期待看到新概念被斩落下,他们认为这个社会还没有准备好迎接变革,也无力引发变革。所以,“现实世界” 跟你没有一点关系。 失败只能教会你不要重蹈覆辙,只有成功才是极具现实价值的宝贵财富。逗留在过去的失败中是无法进化的,进化是建立在成功的基础之上的。持续的成功,才能持续的进化。 用 “商业猜想”来代替“商业计划”,长期计划的时间表总是靠不住的,做计划就是在用过去推动未来, »

开源项目- Etherpty

Etherpty 这个项目其实4月份和 Hayeah 讨论过后就实现了最初的原型版本,只是当时代码比较混乱,后来忙着实习等等琐事,导致整个项目被闲置了下来。最近,正好有点时间,所以对所有代码进行了重构,以提高可维护性和可扩展性。 简单的来说,etherpty 是一个通过 url 非常便捷的直播、分享你的 pty 的工具。作为分享者,你只需要运行 etherpty share 命令便能获取一个带有 token 的 »

生日随笔

在今年暑假实习的时候,我其中的一项工作是实现一个数据同步权限申请认证的 API,其中申请这个流程可以有两种方式: 自动提交申请到后台并告知用户让其等待审批结果; 将需要提交的申请信息通过弹窗的方式告知用户,用户在查看确认后点击“申请”按钮提交申请。 对于这个小细节的决策,我最初的看法是尽量减少用户的操作,尽可能的帮助用户自动化的完成流程。之后和春哥讨论这个细节,他说了他的看法,其中四个字让我印象深刻-“公民意识”。虽然是个很小的细节,但是听到“公民意识”这个词汇的时候对我触动还挺大的-数据同步权限的申请看似是个很小的流程,但是是保证数据安全的很重要的环节,业务的逻辑应该保证申请人足够确认自己即将做的一切行为的合理、合法性。站在不同的高度看到的问题是完全不一样的。高度决定视野,决定眼界。 »

什么是变量?

对于程序员来说,明白什么是变量通常是学习编程的第一课,因为它是编程语言中最基本也是最重要的抽象机制之一。那么,变量是什么?广义上说,变量是对计算机中一个或一系列存储单元的抽象,我们可以从六个维度来刻画一个变量:(名字,地址,值,类型,生存周期,作用域)。而与这个六个维度都与一个重要的概念相关:绑定(binding)。绑定是说将某一个属性(即上面提到的6个维度)关联到变量之上,不同的绑定对象、绑定时机、绑定位置会对其它的属性造成不同的影响。所以,我们先从绑定的概念开始,逐步延伸到变量的各个方面。 »

开源项目- Mat2Py

Mat2py 这个小项目源于我自身的需求 - 将一些 Matlab 代码转换为能够不经修改就能运行的 Python 代码。所以 Mat2py 就是这样一个能够完成代码转换的编译器,目前能够完成基本的代码转换,并提供了一定的扩展性。 作为暑假期间完成的业余小项目,前后开发大概用了20个晚上的时间。总的来说,开发难度不大,从词法分析到语法分析,到代码生成,用时间最多的是在语法分析部分(Parser),在语法分析的时候,由于没有 Matlab 语言的语法说明,所以只有自己根据经验设计语法规则, »