OpenDaylight入门教程

2014-08-02 by muzi

关于OpenDaylight

OpenDaylight is an open platform for network programmability to enable SDN and create a solid foundation for NFV for networks at any size and scale.

对于SDN而言,ODL(OpenDaylight)是一个开源的可编程的平台,简单的说是一个非常有野心开源控制器而不仅仅只是控制器。

opendaylight官网:http://www.opendaylight.org/

环境配置

  • jdk需要1.6以上。

    sudo apt-get -y install openjdk-7-jdk

更多安装信息请查看:https://wiki.opendaylight.org/view ...

read more

【python爬虫】抓取淘宝模特图片——20分钟爬虫之旅

2014-07-24 by muzi

前言

很多人说学Python最终需要写一个爬虫才能算是学成出山了,而我就是那个留级生,一直没有写过。炎热的夏日,以及看java的抑郁,让我无聊之中萌生了这个想法。于是在百度的帮助下,写完了这个教程。视频教程可以去百度学堂看,我就是在那里看的。

spider

代码详解就不多加介绍,注释相信已经很明确了,请看代码。

import urllib2
import urllib
import sys

class get_mm_pic(object):
    def __init__(self,page_num):
    self.page_num = page_num
    self.mmurl= "http://mm.taobao.com/json/request_top_list.htm?type=0&page="#抓取的链接
    def get_pic(self):
    i = 1
    page_num ...
read more

关于这个世界的思考

2014-07-14 by muzi

宇宙的位置

我时常在想地球作为一个行星在太阳系中,而太阳系作为一个星系在银河系中这种情况和电子围绕原子运转,而不同的原子组成一个微观世界一样。从而我得出结论,在某种意义上,微观世界和宏观的宇宙遵循着同样的物理原理。这一点也可以由万有引力得以印证。当然这种认识是非常肤浅的!仅仅是感官上的认识。没有太大的根据。

那么如果我们的宏观作为另一个更大的世界的微观,那么我们就成为了别人世界的原子和电子。依次类推,我们的世界可能是很多重世界中的一个环节。但是我们本身并不能看到这个层次。就像假如我们是生存在电子上的生物,而他们的一生,或者从这个种族有意识,有记录的历史环节中都无法和这个原子以及这个原子周边的世界发生交集。当发生交集的时候,很可能就是毁灭的一刻。所以在他们的意识形态中,他们的世界就是这个电子,或者更大一点的范围。但是他们无法意识到他们是组成宏观世界材料的一个极其普通以及微小到甚至宏观世界的概念里很长一段时间没有他们的存在。所以他们就生存在他们认为的全世界中,安然繁衍。不知道当某一天电子上的生物得知自己在这个世界中是那么微小,稍有不慎,整个电子星球就毁灭,而他们却完全没有还手之力的时候,会不会充满恐惧。当然我觉得在那样的世界里面,时间也应当和空间一样,需要用非常细小的粒度去衡量,举个不恰当的例子,比如飞秒是他们世界的秒。那么我们就可以想象一个围观的世界上面,时间和空间都浓缩的空间里,有另一个小世界存在。而他们的意识中他们的世界是很大的,正如我们意识中的一样。

从另一个角度看。如果我们这个世界是外面“大世界”的一个微小到根本看不见的存在。那么也可以理解。在他们的很长一段时间之内,他们也无法认识到由许多我们这样的世界组成的系统构成了他们世界中的组基础的材料如我们世界中的碳或者铁等元素 ...

read more

nox实现nat功能

2014-05-04 by muzi

前言

nat功能是一个非常简单,但却非常重要的功能。保留10,127,192三个网段作为公网地址,通过nat实现地址复用,可以解决现网IPV4地址不够用的尴尬局面。本篇主要讲如何使用nox实现nat的demo.

环境

  • nox 安装比较困难,请参看其他教程
  • mininet 网络环境搭建神器

控制器

首先在nox/src/coreapps/switch中找到switch.cc。 在class switch中添加成员变量uint32_t src_ip,nat_ip;由于只是一个简单的demo,就不做映射列表了。

handle_packet_in中将if(setup_flows && out_port!=-1)的逻辑修改如下:

if (setup_flows && out_port != -1)
{
    auto fm = v1::ofp_flow_mod().match(flow).buffer_id(pi.buffer_id())
               .cookie(0).command(v1::ofp_flow_mod ...
read more

[c]线程池的实现

2014-04-28 by muzi

前言

这是C语言培训的最后一题,线程池,今天看了看控制器的代码,看到了线程池的影子,然后发现应该赶紧写完这篇了。哎,文笔不行,写书写成屎了!希望再修改几次能不丢人吧。

本篇主要介绍如何实现一个线程池模型,task是简单的打印,当然如果你想让线程池完成你的功能线程的管理,只需要将task换成你的线程就可以了。

线程池

(摘自百度百科)线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。

组成:

  • 线程池管理器(ThreadPoolManager):用于创建并管理线程池
  • 工作线程(WorkThread): 线程池中线程
  • 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
  • 任务队列:用于存放没有处理的任务。提供一种缓冲机制。

更多可访问:http://baike.baidu.com/link?url=caXqYSEEEDLS28VYuSzSxPbTM3dt_5WwXqF2-TUxR8ptJxggJaJHfTZ3_9Hs4urU#2

threadpool.h

threadpool.h的功能主要是定义工作线程的结构和线程池结构,声明相关的函数,如创建函数。

#ifndef ...
read more