作者存档

Global Learning

国外大学的公开课貌似已经火了一段时间了,最近终于有人把它当成事业来做,并且,在我看来,找到了正确的方式。

最早出来的貌似是Coursera,是由stanford的两个老师牵头的。我现在在跟上面的两门课,Machine Learning和Compilers。Algorithms I 这门课刚刚上完,按照professor的邮件,II 会在”late summer or so”到来

my course, coursera

为什么说“找到了正确的方向”呢?因为它每周都留有作业(quiz, 即选择填空之类的题目,和programming assignment),相对严格的时间表,以及,给成绩合格的学生发证书…这就使得整个过程更加concrete,更加有互动,而不是像之前那种,“我们放在网上了,大家都来看啊 = =b…”

跟Coursera差不多同时期的还有Udacity,貌似也是stanford出来的,上面现在全部是CS的课程,据说更偏入门一点

MIT这种stanford的老对头当然也坐不住,出来搞了个MITx,现在上面只有一门电路课。最近又拉了好基友harvard下水,合并成了edX。会有神马大动作拭目以待了

所有这几个网站的课程列表可以在class central查看,真是个幸福的时代啊

safari扩展一枚

功能是点击后在url里面添加.sixxs.org,然后就可以用IPv6的方式访问相应网站,然后就可以打开某些不和谐但又很有用的网站了,比如blogspot

safari-6-extension

创建扩展的时候在safari里居然看到了“chrome”字样,果然webkit已经被chrome占领了么…

webkit被chrome占领

用safari并且能用IPv6的童鞋可以在此下载扩展

ssh相关技巧

因为现在经常要ssh登陆到机房的机器里面去各种折腾,在各种纠结之后就有了各种技巧

1.scp

可以在不同的机器之间用的cp,传说中的这台电脑上ctrl-c,然后另一台电脑上ctrl-v…

用法

scp localPath userName@remoteHost:remotePath

或者

scp userName@remoteHost:remotePath localPath

2.登陆不输密码

首先用一路回车法生成一对密匙:

ssh-keygen

这时id_rsa和id_rsa.pub这两个文件会生成在~/.ssh/底下,然后把id_rsa.pub,也就是公钥,添加到远程机器的~/.ssh/authorized_keys这个文件里面

remote$ cat id_rsa.pub >> ~/.ssh/authorized_keys

参考 1

3.断开ssh而不中断正在执行的命令

有时候,比如在安装神马大型程序的时候,命令会执行很久。而如果这个时候断开ssh,正在做的事情就会被迫中止,肿么办喃

方法是使用“虚拟”的终端screen:

screen

ctrl-a然后按d是从虚拟终端里面切换出来,怎么再回去喃?

screen -ls

假如输出是:

There is a screen on:
559.ttys000.cans-macbook	(Detached)

输入

screen -r 559

即可

参考 1

OpenStack Nova源码分析(一)

写出这么大个题目来,把自己都吓到了…然后赶紧在后面补了个(一),以示我的分析仍然很粗浅

建议想看源码的童鞋先看下这个视频,这也是目前来讲除了官方文档之外为数不多的资料了

应该说我跟他的理解比较接近,但是有出入…见仁见智吧

言归正传

我下载的版本是nova 2011.3 Diablo,也即2011年的最后一个稳定版。下载解压完毕后得到一个名为“nova-2011.3”的文件夹,下文约定以这个文件夹为根目录“/”

(1)

整个项目的入口应该是从/setup.py开始的,这个文件在设置了各种环境变量、语言翻译之后调用了setup()这个函数进行安装。安装的过程也大概就是把目录里的文件该放哪放哪,细节我木有仔细看…因为当初的主要目标也是要理个框架出来,以后要做那块的开发可以详细看

下面应该注意的是/bin这个文件夹。里面是nova各个服务的启动程序和给管理员的命令行程序。其实它们也都是python脚本,可以直接打开

简单看两个启动脚本先:

# from /bin/nova-api
for api in flags.FLAGS.enabled_apis:
    servers.append(service.WSGIService(api))
service.serve(*servers)
service.wait()

# from /bin/nova-compute
server = service.Service.create(binary='nova-compute')
service.serve(server)
service.wait()

可以看到nova里面有两种service类型(service的定义在/nova/service.py),WSGI service和普通service

按照我的理解,前者是对外提供ReSTful API的,后者是对内提供RPC调用的

显然service是要一直在后台跑的,所以最后service.wait()一直等待直到结束

然后看给管理员的命令行程序之一,/bin/nova-manage

这个程序的大致流程是,先对用户命令进行解析分类,确定相应的响应类,然后RPC调用具体的服务处理

文件里有个叫做“CATEGORIES”的列表,表示的是从用户命令到响应class之间的对应关系

(2)

至此,整个项目的大致流程就理清楚了,下面看一些我觉得重要的基础组件

第一个是flags这个模块。这个模块基于python-gflags这个项目,用来处理可由用户定义的各个参数,包括配置文件和通过命令行传入的参数。它的神奇之处是支持分布式的参数定义,即每个参数仅当需要处理的时候才会被定义,并且通过“import”互相联系起来
比如/nova/service.py里的这几个参数定义:

flags.DEFINE_string('ec2_listen', "0.0.0.0",
                    'IP address for EC2 API to listen')
flags.DEFINE_integer('ec2_listen_port', 8773, 'port for ec2 api to listen')
flags.DEFINE_string('osapi_listen', "0.0.0.0",
                    'IP address for OpenStack API to listen')
flags.DEFINE_integer('osapi_listen_port', 8774, 'port for os api to listen')

括号里面按顺序是参数名称,默认值和简短说明

另一个是rpc这个模块。这个模块默认调用kombu处理AMPQ,也就是经常在nova文档里面出现的RabbitMQ。

(3)

下面是我眼里openstack的结构

最下面是最基础的flags、database、rpc之类的模块,然后上面是nova-***这些服务,对外提供nova-api,服务用户

openstack结构图

另外提供一个幻灯片,上周小组讨论时候的