Ming-Zhe

茗记(一)

还是这几天

一直没有时间写博客,只能每次来写这种来回顾这几天了。


vim初体验

本来写了一篇有关配置vim了博客,结果发现和网上的重复率太高就懒得传上来了,展示下最终vim的样子就OK了。

用vim,就像一位小伙伴说的那样,是一种精神。是对代码的执着,对技术的热情。开始做一个伪高手吧。。。呵呵


KOA

之前用express,这也是我接触node.js只有使用的第一个框架。感觉很好,同样还是那帮人开发,koa自然我也不会放过。学习的同时,帮着做了一下koa的翻译工作。欢迎小伙伴们来指点。网站在这里

还是那句话,技术没有止境,我在探索的路上,永不停歇。


python

同样是为了可视化的报告,帮同学做了一个三围的地理可视化界面,用python实现的。

python确实相当强大,有各种库的支持,全球的开发者在为这个语言添枝加叶,用起来得心应手。。。


gnuplot

也是在帮小伙伴做可视化报告时发现的一个很不错的小工具。gnuplot是用来做科学视图的,可以对函数或者数据进行2D/3D的可视化。

上图是对f(x,y)=sin(sqrt(x∗x+y∗y))/sqrt(x∗x+y∗y)函数的可视化。

上图是对一组数据进行的可视化,可以抽象的想成是某地地形,或者是地域降雨量分布什么的。

这是从立体图中抽取出来的一个截面,用等高线表示。

这个工具十分轻巧,功能比着matlab也一点不差,非常适合轻量级的科研或者教学使用。而且安装方便,用mac的小伙伴们只需要在macport下安装即可。


向前看

接下来,除了几门考试,时间就比较充裕了,有几个大任务一定要抓紧了。不想给自己强加什么硬性的目标,觉得不现实,这样的学习节奏也不科学。只有几个大方向,一个是IOS的学习,一个是node.js的加强。这两块工作所需的内容其实是蛮多的,脑子里已经基本有了思路。另外穿插的,还有一些服务器的知识,包括nginx,和一些服务器编程。


现在回过头来看,还真的不容易。。。




爱生活,爱技术。
愿结识各路小伙伴。
找到我:

微博:http://weibo.com/afmz

Github:http://github.com/Ming-Zhe

E-mail:law.gravitys@gmail.com

基于Node的下一代Web开发框架--koa

由 Express 原班人马打造的 koa,致力于成为一个更小、更健壮、更富有表现力的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率。Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。


安装koa

koa 依赖支持 generator 的 Node 环境,也就是说,node的版本要在 0.11.9 或者更高,否则将无法执行。

用npm:

1
$ npm install koa

或者,选择安装在全局:

1
$ npm install -g koa


Example

这是一个koa的简单例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var koa = require('koa');
var app = koa();
// logger
app.use(function *(next){
var start = new Date;
yield next;
var ms = new Date - start;
console.log('%s %s - %s', this.method, this.url, ms);
});
// response
app.use(function *(){
this.body = 'Hello World';
});
app.listen(3000);

与普通的 function 不同,generator functions 以 function* 声明。以这种关键词声明的函数支持 yield。在后面会讲到 yield 的用法和意义。


执行koa

执行koa时需要在 —-harmony 模式下运行,为了方便可以将 node 设置为默认启动 harmony 模式的别名:

1
alias node='node --harmony'

这样在执行相关js的时候就可以直接使用了。


Cascading

这是一个比较抽象的概念。Koa 中间件以一种非常传统的方式级联起来,也就是这里所谓的Cascading。

在以往的 Node 开发中,频繁使用回调不太便于展示复杂的代码逻辑,在 Koa 中,我们可以写出真正具有表现力的中间件。与 Connect 实现中间件的方法相对比,Koa 的做法不是简单的将控制权依次移交给一个又一个的中间件直到程序结束,Koa 执行代码的方式有点像回形针,用户请求通过中间件,遇到 yield next 关键字时,会被传递到下一个符合请求的路由(downstream),在 yield next 捕获不到下一个中间件时,逆序返回继续执行代码(upstream)。

下边这个例子展现了使用这一特殊方法书写的 Hello World 范例:一开始,用户的请求通过 x-response-time 中间件和 logging 中间件,这两个中间件记录了一些请求细节,然后「穿过」 response 中间件一次,最终结束请求,返回 「Hello World」。

当程序运行到 yield next 时,代码流会暂停执行这个中间件的剩余代码,转而切换到下一个被定义的中间件执行代码,这样切换控制权的方式,被称为 downstream,当没有下一个中间件执行 downstream 的时候,代码将会逆序执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var koa = require('koa');
var app = koa();
// x-response-time
app.use(function *(next){
// (1) 进入路由
var start = new Date;
yield next;
// (5) 再次进入 x-response-time 中间件,记录2次通过此中间件「穿越」的时间
var ms = new Date - start;
this.set('X-Response-Time', ms + 'ms');
// (6) 返回 this.body
});
// logger
app.use(function *(next){
// (2) 进入 logger 中间件
var start = new Date;
yield next;
// (4) 再次进入 logger 中间件,记录2次通过此中间件「穿越」的时间
var ms = new Date - start;
console.log('%s %s - %s', this.method, this.url, ms);
});
// response
app.use(function *(){
// (3) 进入 response 中间件,没有捕获到下一个符合条件的中间件,传递到 upstream
this.body = 'Hello World';
});
app.listen(3000);

在上方的范例代码中,中间件以此被执行的顺序已经在注释中标记出来。你也可以自己尝试运行一下这个范例,并打印记录下各个环节的输出与耗时。

1
2
3
4
5
6
7
8
9
10
11
12
.middleware1 {
// (1) do some stuff
.middleware2 {
// (2) do some other stuff
.middleware3 {
// (3) NO next yield !
// this.body = 'hello world'
}
// (4) do some other stuff later
}
// (5) do some stuff lastest and return
}

上方的伪代码中标注了中间件的执行顺序,看起来是不是有点像 ruby 执行代码块(block)时 yield 的表现了?也许这能帮助你更好的理解 koa 运作的方式。


中间件(Middleware)

实际上,这些只是初步理解了koa基础,koa有很多第三方开发的中间件,这些中间件的熟练运用才是关键,github有很多这方面的库,每个都有详细的例子解释。以下是常用的一些:


小结

这些天确实做了写有关koa的工作,集合开源的力量做了一个 中文文档 有更详细的API说明。

在这里要感谢 一米 对网站建设的大力贡献,还要感谢 郭宇 对翻译工作的大力贡献,此中文文档遵循MIT协议,转载著名出处即可。




爱生活,爱技术。
愿结识各路小伙伴。
找到我:

微博:http://weibo.com/afmz

Github:http://github.com/Ming-Zhe

E-mail:law.gravitys@gmail.com