猫型エンジニアのブログ

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

オブジェクトの名前と値

inspect.getmenbersに関して調べたところ、 inspect.getmembers(object[, predicate])(原文) オブジェクトの全メンバーを、 (名前, 値) の組み合わせのリストで返します。リストはメンバー名でソートされています。 predicate が指定されている場合、 predic…

再帰を用いたループ文

(define (loop n) (cond ((= n 0)(display 'end)) ((display n)(newline)(loop (- n 1))))) > (loop 10) 10 9 8 7 6 5 4 3 2 1 end >

問題1.27〜問題1.29

問題1.27 カールマイケル数はフェルマーテストはパスしますが合成数になりました。 (define (carmichael-test n) (fermat-chrmichael-test n (- n 1))) (define (fermat-chrmichael-test n m) (cond ((= m 0) true) ((= (expmod m n n) m)(fermat-chrmichael…

問題1.24~問題1.26

問題1.24 fast-primeの試行回数に正解はないのですが、ここでは200としています。 比較するのはnが1000近傍の場合と、(1000)^2 = 1000000近傍での処理時間の比較です。そのため、比較結果は試行回数に依存しません。log n^2 = 2log nのため、おおよそ2倍と…

ジェネレータ式

ジェネレータを簡易に生成できるジェネレータ式の使用例です。listからfor文を使ってジェネレータを作成しています。 こういったのを自然に使いこなせるようになるととてもかっこいいのですが… >>> numbers_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> type(…

1.3 高階手続き

1.1および1.2で扱っていた手続きはどれも「引数を用いない」か、「引数としてデータ(数値)」を使用する手続きであった。ここでは「引数として手続き」を用いる高階手続きを扱う。

LVMの設定

CentOSを新規にインストールしたら、/homeにかなり容量が割り当てられていました。インストール後にこれらを/rootに割り当てなおす方法を以下にまとめました。 LVMは使えるようになると、パーティション管理が非常に楽になりとても便利です。 現状の確認 /ho…

gpartedのインストール

CentOS6.4に以下のようにしてgpartedのインストールおよび起動を行いました。 # wget http://sourceforge.net/projects/gparted/files/gparted/gparted-0.9.0/gparted-0.9.0.tar.bz2/download # tar jxf gparted-0.9.0.tar.bz2 # cd gparted-0.9.0 # yum ins…

ディスクサイズ

容量が300GBのqcow形式の場合、7.0GBしか割り当てられていない。 # ls -ahl Controller-1.03-template.img -rw-------. 1 qemu qemu 7.0G 5\u6708 20 11:22 2014 Controller-1.03-template.img容量が200GBのraw形式の場合、200GB割り当てられている。 # ls -…

問題1.21~問題1.23

問題1.21 > (smallest-divisor 199) 199 > (smallest-divisor 1999) 1999 > (smallest-divisor 19999) 7 問題1.22 (define (search-for-primes n m) (cond ((< m n)(newline) 'done) ((timed-prime-test n)(search-for-primes (+ n 1) m)) (else (search-for…

モジュールの読み込み

>>> import itertools >>> app_lists = ['app1', 'app2,app3'] >>> app_lists = [app for app in itertools.chain.from_iterable(app.split(',') for app in app_lists)] >>> print app_lists ['app1', 'app2', 'app3'] >>> type(app.split(',') for app in …

1.2.4~1.2.6

1.2.4 べき乗 べき乗を計算する手続きにおいて、各手続きのステップ数およびスペースの増加に関して4通りが紹介されている。・線形再帰 ステップ・スペースともにO(n) ・線形反復的 ステップはO(n)、スペースはO(1) ・対数的再帰 ステップはO(log n)、スペー…

CentOS6.4のカーネルアップデート(パッケージインストール)

前回のカーネルを新規にコンパイルする方法だととても時間がかかってしまいます。もっとうまい方法がないのかと検索したらありました。 CentOSの標準のリポジトリには3.X系のカーネルはないのですが、代わりにCentOS-Xenのリポジトリを利用する方法です。 # …

CentOS6.4のカーネルアップデート(カーネルコンパイル)

どうしてもCentOS上で仮想マシンの入れ子環境を作る必要があったために、カーネルのアップデートを行いました。カーネルのバージョンを2.6.32-358=>3.6にアップデートするのが目標です。 以下がその際に実施したコマンドになります。make menuconfigでは対話…

問題1.18~問題1.20

問題1.18 (define (double x) (+ x x)) (define (halve x) (cond ((even? x) (/ x 2)) (else 0))) (define (even? x) (= (remainder x 2) 0)) (define (new-times a b ) (times-iter a b b 0)) (define (times-iter a b counter product) (cond ((= counter …

引数の解析

Ryuではoslo.configというモジュールを用いて引数の解析を行っています。manager.pyの該当ソースコードを一部抜粋修正しました。 #test-config.py from ryu import cfg import sys from ryu import version CONF = cfg.CONF CONF.register_cli_opts([ cfg.Li…

問題1.15~問題1.17

問題1.15 問題1.16 (define (expt b n) (expt-iter b n 1)) (define (expt-iter b counter product) (cond ((= counter 0) product) ((even? counter) (square (expt-iter b (/ counter 2) product))) ( else (expt-iter b (- counter 1) (* b product))))) …

アプリケーションモジュール

Ryuのアプリケーションの実体はPythonのモジュール。 モジュール中にryu.base.app_manager.RyuAppを継承したサブクラスが、最低一つは必要になる。 RyuAppの class RestAPI(app_manager.RyuApp): _CONTEXTS = { 'network': network.Network, 'wsgi': WSGIApp…

モジュールとクラス

Pythonでモジュールとクラスの違いです。基本の基本ですが、意外によく分かっていませんでした。 Pythonにおけるモジュールとクラスの違い モジュールはファイルからなり、モジュール中にクラス・メソッド・定数などが定義されている。要するにクラスはモジ…

問題1.9~問題1.15

問題1.9 以下のように前者の式は再帰的プロセスであり、後者の式は反復的プロセスとなる。 この場合も再帰的な手続きのプロセスが、再帰的とは限らない例である。 (+ 4 5) (inc (+ 3 5)) (inc (inc (+ 2 5))) (inc (inc (inc (+ 1 5)))) (inc (inc (inc (inc…

1.2.1~1.2.3

1.2.1 線形再帰と反復 階上計算を行う2つの手続きが紹介されている。 ・線形再帰的プロセス:計算に遅延演算の列を使用するプロセス ・線形反復的プロセス:計算にプロセスを完全に記述する状態変数を使用プロセス 手続きとプロセスは明確に異なる。ここで紹…

問題1.6~問題1.8

問題1.6 (if ⟨predicate⟩ ⟨consequent⟩ ⟨alternative⟩)において、predicateが真ならばconsequentを評価し、predicateが偽ならばalternativeを評価する。 つまり、consequentとalternativeは必ずどちらか片方しか評価されない。しかしnew-ifの場合、consequen…

1.1.7~1.1.8

1.1.7 例:Newton法による平方根 数学の平方根の関数:平方根の定義を与える。(ありようの記述) 計算機科学の平方根の手続き:平方根の計算方法を与える。(なし方の記述) 数学では通常平叙文的(対象が何か)であり、計算機科学では通常命令文的(対象を…

問題1.1〜問題1.5

問題1.1 略 問題1.2 略 問題1.3 > (define (problem1-3 a b c) (cond ((and (>= b a) (>= c a)) (+ (* b b) (* c c))) ((and (>= a b) (>= c b)) (+ (* a a) (* c c))) ((and (>= a c) (>= b c)) (+ (* a a) (* b b))))) > (problem1-3 1 3 5) 34 > (problem…

Ryuの起動プロセス

ryu/cmd/manager.pyのmain関数を読んでみました。 以下のように、ソースコードの一部分のみの実行も簡単にできるので、Pythonは本当に楽です。 >>> from ryu import utils >>> import inspect >>> import itertools >>> from ryu.base.app_manager import Ap…

ryu / ryu / lib / addrconv.py

ライブラリ中のパケット関連のクラスの中によく使用されています。実際にやっていることはライブラリのnetaddrのラッパです。 実行結果 提供されているAPIを実行してみました。 名前の通り、アドレスのバイナリとテキスト表示の変換を行います。 >>> from ry…

1.1.4~1.1.6

1.1.4 合成手続き defineにより合成手続きに名前を付けることができる(前回は数や演算結果に名前を付けていた)。 一度defineで定義された場合、ユーザ定義の合成手続きと、解釈系にあらかじめ備わっている基本演算子の区別はつかない。合成手続きのbodyに…

SICP 勉強メモの目次

コンピュータ関係の書籍の中では、著名な計算機プログラムの構造と解釈を読み進めていきます。昔は書籍版しかなかったのですが、今ではWebで公開されていてとても助かります。 昔院生の時に読みましたが、挫折したもののリベンジです。大学院から情報系に進…

1.1.1 ~ 1.1.3

1 手続きによる抽象の構築 抽象化は、一般的に計算機科学においては対象に関する詳細を捨象すること(Wikipedia) 1.1 プログラムの要素 抽象化:合成物に名前をつけ、単一のものとして扱う。 例: 一番単純な抽象化は、defineを用いて、名前と数の対応付け…

Eventletの使い方(サーバ版)

前回はクライアント版のプログラムで並列化されているのを確認したので、今度はサーバ側のプログラムを作成してみます。 サーバプログラム import eventlet def handle(clientSock, clientAddr): data = clientSock.recv(1024).strip() clientSock.sendall(d…