Latest Posts

Infrastructure for one-man team

Sun Apr 13 2014 19:14:00 GMT+0800 (CST)

虽然One-man team这个标题看起来有些悲伤,但其实不然,遇到过太多小团队(小于5人)。他们有的自己创业,有的是在工作之余开发一些有意思的小玩意。总之,对于他们,没有专职的OPS、也没有专职的SCM,应用从线下都线上全是一个(或少数)人全部操办。

本人也对此深有体会。从小型博客,到爬虫和文搜,都在没有传统互联网公司的相应专职保障的条件下,实现了稳定运行。最近又折腾了不少东西,这里特别想总结和分享一下——如果只有一个人的团队,该如何维护自己的基础设施。

很庆幸我们生活在云计算时代,这一切都可以通过可控范围内的成本去实现。

DOM Traversal

2014-03-08 16:30

DOM2提供了三种遍历DOM树的方法。分别是:

  1. 利用Node上的节点属性来进行遍历
  2. 利用NodeIterator
  3. 利用TreeWalker

虽然后两种只有在PC端的新浏览器(IE9+)中可用,但是移动端使用是完全OK的。

我们假设一个应用场景,计数所有标签元素的个数,分别利用三种方法来解决这个问题。

相关用例代码:

var count = 0;
traverse(window.document, function(node) {
  // console.log(node.nodeType);
  if(node.nodeType === 1) {//it's a element
    count++;
  }
});
console.log("Total Elements in document: " + count);

注意,我们这里在回调内显示判断了nodeType。事实上这个操作,对于后两种方式是不需要的。后文会详细解释。

Mocking a Web Service for Intergreted Tests

2013-08-08 11:26

现在CI在开源项目的普及度很高了。不管项目多大,都可以利用Travis CI的服务为你的代码免费执行CI逻辑。如果这方面的话题你还感到很陌生的话,可以通过以下的几个链接了解以下:

CI里面的测试脚本(不管是BDD或TDD),都有一个很基本的要求,要求测试本身不依赖第三方的服务。那么在以下情景下,就会产生一些问题:

  • 一个dropbox的客户端SDK测试
  • rackspace的API客户端测试

对于这样的程序,除了提供一个测试专用的服务器环境,你似乎没有办法去真正测试完整流程。

但是,有一点还是可以做到的。作为客户端的开发人员,你是可以测试你的客户端请求是否满足接口需求的。

本文就会针对这样的场景,讲述通过测试框架来模拟服务端接口,进行本地测试。虽然是以NodeJS的相关代码为例子,但是类似的框架或工具,在每个语言都存在。

ZMQ Learning Notes, Part 2

2013-07-25 16:26

ZMQ Scoket

利用zmq的socket,不管在何种语言之下,都有几个固定的行为。

  • socket生命周期管理: zmq_socket(), zmq_close()
  • socket设置: zmq_setsockopt(), zmq_getsockopt()
  • socket接入:zmq_bind(), zmq_connect()
  • socket消息传递:zmq_send(), zmq_recv()

其他的一些特性

  • 进行zmq_bind()的被称为server
  • 进行zmq_connect的被称为client
  • ZMQ支持inproc、ipc、tcp、pgm、epgm通讯
  • 一个zmq socket可以有多组流入和流出的连接
  • 没有所谓的zmq_accept,连接过程都是自动的
  • zmq处理了网络连接的可用性问题,会尝试重连
  • server节点可以bind多种协议,同时接受信息

发送和接受消息

zmq最底层的是使用zmq_msg_send()和zmq_msg_recv()来处理消息,对象是message_t的结构体。

TCP socket和ZMQ socket的不同:

  • ØMQ sockets carry messages, like UDP, rather than a stream of bytes as TCP does. A ØMQ message is length-specified binary data. We’ll come to messages shortly, their design is optimized for performance and so a little tricky.
  • ØMQ sockets do their I/O in a background thread. This means that messages arrive in local input queues and are sent from local output queues, no matter what your application is busy doing.
  • ØMQ sockets have one-to-N routing behavior built-in, according to the socket type.

还有另外一组更高级的函数,zmq_send()和zmq_recv()。由于是异步IO,前者会缓存一部分消息,并且也不直接和message_t打交到。

ZMQ Learning Notes, Part 1

2013-07-24 13:06

Introduction

引言就不说了,贴一段网上的介绍

近几年有关”Message Queue”的项目层出不穷,知名的就有十几种,这主要是因为后摩尔定律时代,分布式处理逐渐成为主流,业界需要一套标准来解决分布式计算环境中节点之间的消息通信。几年的竞争下来,Apache基金会旗下的符合AMQP/1.0标准的RabbitMQ已经得到了广泛的认可,成为领先的MQ项目。

然而,ZeroMQ是个异类。iMatrix公司早期也是计划按照AMQP/1.0标准开发一个类似RabbitMQ的项目,名字叫做OpenAMQ。然而,随着项目的推进,iMatrix公司在这个项目上迷失了方向。iMatrix的CEO Pieter Hintjens在一篇文章中描述了自己对AMQP标准化进程的困惑和思考,并认为AMQP中存在一些无法克服的问题。2010年3月,iMatrix公司宣布退出AMQP/1.0标准化,放弃OpenAMQ项目,并正式启动了ØMQ,即ZeroMQ。

ActiveMQ、RabiitMQ什么的也用过不少,对于Broker模式的队列系统,褒贬不一。ZMQ就是无Broker的通信系统,用过的都说好。

之前很零散的阅读了一些第三方教程,并在项目中使用过几次。而这次,是决定系统性的阅读官方的指南。这一些列文档会记录阅读笔记和一些试验操作。

一些有用的链接:

第一步分会通过三个简单的通讯模型来引入ZMQ的基本概念,和大致用法。

考虑捐赠一些费用来维持博客运行吧!

如果觉得内容对你有帮助,就来支持我吧!博客运行需要支付CDN的带宽费用和域名租用的费用;每年都有不小的开销。
您可以通过支付宝来资助该博客。