猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

Eventletの使い方(クライアント版)

PythonのモジュールEventletを触ってみます。並列プログラミング難しいです。基本的にここを参照しています。 とりあえず触ってみる ネットワークを介しての問い合わせはIO処理に時間がかかっているはずです。そのためGETメソッドを逐次処理する場合と、even…

MacBook AirにSICPの環境構築

MacでもSICPの勉強をしたいので、環境構築の仕方についてまとめました。 DrRacketのダウンロード ここからDrRacketをダウンロードしてきます。以前はDrSchemeだったのに変わってしまったのですね。SICP用の環境設定がうまくいきません。どうしたらいいんだろ…

並列処理の用語

Pythonのソースコードを読んで理解する必要があるので、はじめてまともに向き合いました。今まで並列処理が必要になったことなどないので、本当に手さぐり状態です。ライブラリのドキュメントを読んでいても書いてある意味が分からないので、この分野で使わ…

Ryuのソースコード解読メモ

オブジェクト指向のプログラムなので、アプリケーションを作成するプログラマが把握する必要のあるメソッドと、裏で動作するためユーザが意識する必要のないメソッドが混ざっている。比率としては、圧倒的に後者の方が多い。プログラマが把握しているのは氷…

同期処理と非同期処理

それぞれの違い 同期処理では、あるタスクが実行している間、他のタスクの処理は中断される方式です。非同期処理は、あるタスクが実行をしている際に、他のタスクが別の処理を実行できる方式になります。 メリット・デメリット 同期処理の場合は、時間がかか…

Ryu関連のドキュメント

Ryuのソースコードです。何はともあれ、これがないと始まりません。 https://github.com/osrg/ryu日本語で非常に丁寧に書かれています。まず初めによむならこれが一番です。 http://osrg.github.io/ryu-book/ja/Ryubook.pdfRyuのアーキテクチャ全般に関する…

memo

TO READ http://methane.github.io/gevent-tutorial-ja/

WSGIのお勉強 その2

WSGIに準拠したWebアプリケーション例 このページを参考にしました。 #wsgi-test1.py def application(environ, start_response): start_response('200 OK', [('Content-type', 'text/plain')]) return 'Hello, world' from wsgiref import simple_server if…

本物のプログラマかどうかの分岐点

最近Ryuのソースコードを読んでいるのですが、「Ryuのソースコードを読む」というよりも「Pythonのモジュールの使い方を読む」ことの方が多く、ちょっと意外でした。 しかし、既存のモジュールを組み合わせただけで複雑な機能が実装できると考えると、実装の…

vyattaの設定

たまに扱うvyattaの設定のメモです。こちらに詳しい設定情報が記載されています。 IPアドレスの割り当て $ configure [edit] # set interfaces ethernet eth1 address 192.168.10.254/24 [edit] sshの有効化 # set service ssh [edit] # commit [edit] # sav…

mapperモジュールの使い方

ここを参照にしたmapperモジュールの使い方の簡単にメモです。 インストール # easy_install routes 使い方 まず特定のURLのパターンをmap.connect()で作成します。そしてそのパターンにURLがマッチした場合に、URLから辞書型のオブジェクトを作成します。 …

requestsモジュールの使い方

以前はPythonでHTTP関連の処理を行う際にurllibモジュールを使用していましたが、より便利なrequestsモジュールを使用してみます。 詳細に関してはこちらを参考にしてください。 インストール # easy_install requests 使用例 Googleにアクセスしてステータ…

mininetの使い方

mininetでよく使われるコマンドの使い方は以下の通りです。 フローエントリの表示 全てのスイッチのフローエントリが表示されます。 mininet> dpctl dump-flows *** s1 ------------------------------------------------------------------------ NXST_FLOW…

json形式のリクエストのパース

rest.pyの動作確認

Ryu

RyuのRESTを扱うサンプルコードの内で、最もシンプルなrest.pyを動かしてみました。ローカルでrest.pyを起動させ、同じくローカルから自身に対してcurlコマンドでhttpリクエストを送信します。 下の例ではGETリクエストでの表示とPOSTリクエストでの登録しか…

Ubuntu12.04にRyuをソースコードからインストール

久しぶりにRyuをインストールしようとしたら、いくつか注意点がありました。うまく行かない場合は以下を参照にしてみてください。 これまでのインストール方法 # apt-get update # apt-get install git python-pip libevent-dev python-dev python-gflags uw…

WSGIのお勉強 その2

前回に引き続きWSGIに関してです。今度はリクエスト毎の処理の分岐、およびパラメータの取得も行ってみます。 ソースコード リクエストの分岐 パラメータの取得

Pythonにおける引数の取り扱い

Pythonのソースコードを読んでいると、よく*argsや**keyargsといった文字が関数の引数にでてきます。これらの使い方に関してです。 キーワード引数 別名名前付き引数ともいいます。以下の使い方のように引数に名前と初期値をあらかじめ設定しておくことがで…

curlコマンドの使い方

RESTAPIなどでHTTP関連のリクエストを手軽に扱えるcurlコマンドの使い方です。 ユーザ名・パスワードの指定 "-u ユーザ名:パスワード" で指定を行います。 # curl -u "username":"password" http://IPaddr:Port/pass ファイルの指定 カレントディレクトリの…

mininetのインストール

手軽にNWを構築できるmininetをUbuntu12.04にインストールしました。設定済みのVMをダウンロードする方法もありますが、ソースコードからインストールしました。 パッケージのインストール $ sudo apt-get install gcc make screen psmisc xterm ssh iperf i…

WSGIのお勉強 その1

WSGIとは Pythonのドキュメントからの抜粋です。 Web Server Gateway Interface (WSGI) は、Web サーバソフトウェアと Python で記述された Web アプリケーションとの標準インターフェースです。標準インターフェースを持つことで、WSGI をサポートするアプ…

KVMを用いてのライブマイグレーションの設定 その3

KVMを用いてのライブマイグレーションの設定 その2の続きです。 Ubuntuでルートユーザの作成 ルートユーザでUbuntuにログインする必要があります。それぞれのKVMホストにて、こちらを参考にして設定を行ってください。 virt-manager上でのリモート接続 virt-…

Pythonでパイプ付きシェルコマンドの実行

Pythonのプログラム内部においてシェルコマンドを実行するには、subprocessやos.systemなどいくつか方法があります。その中でももっとも簡単なのがshの利用です。 インストール pipコマンドでインストールします。 # pip install sh Downloading/unpacking s…

KVMを用いてのライブマイグレーションの設定 その2

KVMを用いてのライブマイグレーションの設定 その1の続きです。KVMホスト側の設定手順です。KVMおよびvirt-managerはインストール済みと仮定しています。 パッケージのインストール # apt-get install nfs-common ストレージプールの設定 ここからはvirt-man…

KVMを用いてのライブマイグレーションの設定 その1

NFSサーバではCentOS6.3を、KVMが動作するホストOSとしてUbuntu12.04をそれぞれ使用しています 全体構成 上の図のようにKVMホスト2台とNFSサーバ1台からなります。両KVMホスト間をVMが無停止で行き来するのが目的です。VMのイメージファイルは全てNFSサーバ…

Pythonでソケットプログラミング その3

Pythonの標準ライブラリを用いてエコーサーバを書き直してみます。 標準ライブラリの利用 import SocketServer class MyTCPHandler(SocketServer.BaseRequestHandler): def handle(self): self.data = self.request.recv(1024).strip() self.request.sendall…

プロトコル

ブラウザ側でキャッシュを無効化 curlコマンドの使い方

サーバ設定

CentOS6.4でブリッジの作成 CentOS6.3にVNCサーバをインストール CentOS6.4のカーネルアップデート(カーネルコンパイル) CentOS6.4のカーネルアップデート(パッケージインストール) CentOS6.4にgpartedをインストール Ubuntu12.04でrootユーザの作成 iptable…

OpenvSwitch

OpenVSwitchのインストール Ubuntu12.03にOpenvSwitchをパッケージからインストール Ubuntu12.04.2にOpenvSwitchをソースコードからインストール OpenFlowSwitchとしてのOpenvSwitchの詳細設定 OpenVSwitchの設定 OpenvSwitchの基本設定 OpenvSwitchのログレ…

OpenFlow

OpenvSwitch関連と組み合わせることで、簡単にOpenflowの環境構築が行えます。 OpenFlowコントローラのインストール CentOS6.4にRyuをパッケージからインストール CentOS6.4にRyuをソースコードからインストール Ubuntu12.04にRyuをソースコードからインスト…