猫型エンジニアのブログ

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

落ち葉拾い

PCのハードウェア周りに関して LPICの勉強で、ハードウェア周りを再度復習しようと思っていると見つけたサイトです。とてもよくまとまっています。ハードウェア周りも調べていると、なかなか面白いですね。パソコンの仕組みwww.way-on.com.twチップセット CP…

デバイスの確認

こういうハードウェア周りの話はすごい苦手意識があります。 SCSI・USB・PCI 用語の確認 SCSI・USB・PCIはいずれも、コンピュータ内部のハードウェアや周辺機器がデータのやり取りを行うインタフェース規格。よってUSBデバイスは、USBの規格を満たしている通…

問題2.1~問題2.3

問題2.1 (define (make-new-rat n d) (if ( < 0 (* n d)) (make-rat (abs n) (abs d)) (cons (* -1 (abs n)) (abs d))))

rpmコマンドの使い方

RPM(Redhat Package Manager)パッケージを扱う方法としては、yumコマンドとrpmコマンドの2通りがあり、ここではrpmコマンドの使い方をまとめる。 インストール rpm -i アンインストール rpm -e アップグレード rpm -U

メモ

デジタル証明書とSSL証明書の違い SSL プロトコルの一つ。 公開鍵暗号、秘密鍵暗号、デジタル署名、デジタル証明書の技術を組み合わせるSSL証明書 サイトの運営組織が実在し、ドメイン名の使用権<ドメインの使用権>があること WebブラウザとWebサーバ間で…

2.1

データによる抽象の構造 2章では「手続き」を組み合わせて「合成手続き」を構築したように、「データ」を組み合わせて「合成データ」を構築する(例 「整数」というデータを組み合わせて、「有理数」を構築する)。注意: 抽象という単語が本文で繰り返されて…

YUMの使い方

パッケージ管理システムであるYUM(Yellow dog Updater, Modified)に関してのまとめです。 YUMの概要 yumコマンドを使うことで、RPMパッケージのインストール・アップデート・検索が行える。 リポジトリ(=RPMパッケージ管理サイト)にアクセスすることで、…

test

Pythonのデコレータについてまとめました。デコレータは他の関数を引数にする関数である「高階関数」を利用しています。 デコレータの形式 @decorator def func(): pass 上のようにデコレート対象の関数の頭にデコレータ用の関数を@をつけて使用します。こう…

スレッドのメモ

スレッド関連のソースコードによく出てくる単語・関数名をまとめました。実はこの文章を書くとき、初めてキューを利用しているコードをみました。 スレッドプール 実行時のオーバヘッドを低減するために、ユーザからのリクエストなどをトリガーとしてスレッ…

(翻訳)Greenlet vs Thread

Greenletの勉強にあたって検索ででてきた、以下のGreenletおよびスレッドの比較に関するページ python - Greenlet Vs. Threads - Stack Overflow の一部分を意訳しました。和訳された技術書のように、典型的な非常に読みにくい日本語になってしまいました...…

デコレータ

Pythonのデコレータについてまとめました。デコレータは他の関数を引数にする関数である「高階関数」を利用しています。 デコレータの形式 @decorator def func(): pass 上のようにデコレート対象の関数の頭にデコレータ用の関数を@をつけて使用します。こう…

contextlibモジュール

Pythonでファイルの読み書き 以下のようにしてファイルの読み書きができます。 # -*- coding: utf-8 -*- if __name__ == "__main__": f = open("test.txt","w") f.write("Pythonでファイルを開きました") f.close() f = open("test.txt","r") for row in f: …

引数としての関数

Pythonでは引数として関数を渡すことができます。以下の例のfooは「引数として受け取った関数を実行する」関数です。 # test.py def foo(func): func() def bar(): print "bar" foo(bar) 実行結果 [root@localhost ~]# python test.py bar たしかに引数とし…

WSGIServerの中身

実際に実行されるアプリケーションのdemo_appは以下の通りです。ちょっと珍しい書き方ですが、出力内容を文字列バッファのStringIOオブジェクトに一旦保存して、それをreturnで返しています。 def demo_app(environ,start_response): from StringIO import S…

WSGIServerの実行例

wsgiの実装例としてLib/wsgiref/simple_server.pyからソースコードを抜粋しました。 from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import urllib, sys from wsgiref.handlers import SimpleHandler __version__ = "0.1" __all__ = ['WSGI…

SimpleHTTPServerの仕組み

SimpleHTTPServerの概要に関してはこのドキュメントが役立ちます。ソースコードからわかるように、BaseHTTPHandlerを継承したクラスになります。動作はシンプルでsend_headメソッドでファイルを開いて、do_GET関数で開いたファイルをコピーしています。試し…

Pythn小技

使うまで知らなかったPythonの小技(常識?)を集めてみました。 真偽値 PythonではNone,False,0,[]など一部のオブジェクトが偽であり、それ以外のオブジェクトは全て真です。よってほとんどのオブジェクトのbool値は真になります。0が偽で1が真などはC言語…

OpenVSwitchの基本設定

OpenVSwitchを用いて基本的な設定をするまでの流れをまとめました。リピータハブもしくはL2スイッチとして動作させるのが目的です。 1.「ブリッジを作成」 2.「作成したブリッジにポートを追加」 3.「アクションの設定(リピータハブ or L2スイッチ)」 の順…

BaseHTTPServerの仕組み

つぎはいよいよBaseHTTPServerです。ここがとても参考になります。 TCPServerで、ソケット周りの基本的な機能はすでに実装がなされています。そのためHTTPServer自体はTCPServerを継承してserver_bindをオーバライドしたのみの、シンプルなクラスです。 clas…

TCPServerの仕組み

具体的にサーバを動作させる場合は、BaseServerを継承したサーバを用います。ここではTCPServerを使ってみます。 TCPServerの中身 ここを参照すると、以下の例のようにBaseServerでインタフェースのみであった部分を継承して、tcp用のソケットプログラミング…

BaseServerの仕組み

Python上で動作する様々なフレームワークやライブラリを見ていると、よくサーバがつかわれているのがよく見られます。そこで、Python上でサーバがどのように実装されているのかを見てみました。ライブラリのコードを読むと勉強になるといいますが、確かにそ…

WSGIとは

WSGI Servers - Full Stack Python WSGI Servers - Full Stack Python 上のリンクを参照にしました。 Webアプリケーションの構成 一般的な3層モデルのWebアプリケーションは、プレゼンテーション層はWebサーバ(例:Apache)、アプリケーション層はアプリケー…

Ryuのアプリを作る その1

Ryu

上司に「Ryuに何か新しい機能を実装してコミュニティに投稿します」と宣言してしまったために、Ryuで何か新しい機能を実装します。REST経由で設定できるDHCP機能を作成しようと思います。 仕事でよくRyuをいじっているので、動くものを作るだけなくRyuの内部…

カプセル化

Javaやc++に比べると限定的ですが、Pythonもカプセル化の機能を持っています。 _をひとつ先頭に付ける Pythonでは_を先頭に付けた変数や関数はクラスの内部からのみアクセスする、という規則があります。ただしこれは規則というよりは習慣に近く、実際にはク…

Pythonのログ関数の使い方-その2

Level3 リモート端末のファイルにログを出力する # -*- coding:utf-8 -*- import logging logging.basicConfig( # ログレベルを指定 level=logging.DEBUG, # ログの書式を指定 左から時刻、ログレベル、モジュール名、関数名、行数、内容 format="%(asctime)…

Pythonのログ関数の使い方-その1

Pythonの標準ライブラリのlogginモジュールの使い方です。 Level1 ログを書式を指定して表示させる # -*- coding:utf-8 -*- import logging logging.basicConfig( # ログレベルを指定 level=logging.DEBUG, # ログの書式を指定 左から時刻、ログレベル、モジ…

OVSDBの使い方

OVSDBの詳細に関してはRFC7047を参照してください。 スキーマの確認 vswitch.ovsschemaにスキーマの記載があります。以下に一部抜粋しました。 # vi /usr/share/openvswitch/vswitch.ovsschema "sFlow": { "columns": { "targets": { "type": {"key": "strin…

仮想ディスクのフォーマットの変換

KVMで作成した仮想ディスクのフォーマットの変換の仕方です。容量の大きなraw形式のイメージをqcow2形式に変換してみます。 現在のファイルサイズは12Gでraw形式です。 #qemu-img info ubuntu12.04-openvswitch.img image: ubuntu12.04-openvswitch.img file…

Pygameのインストール

Pygameのインストールはソースからコンパイルやパッケージからインストールなど複数の方法があるようです。いろいろ探してみましたが、一番簡単なのはUbuntuを用いる方法でした。 Ubuntu12.04の場合ならば、以下のコマンドで完了します。 # apt-get install …

import済みモジュールの確認

class test_class: def _init_(sele, value): self.value = value >>> import sys >>> import test_modules >>> sys.modules['test_modules'] <module 'test_modules' from 'test_modules.py'> >>> test_modules <module 'test_modules' from 'test_modules.py'> >>> sys.modules {'copy_reg': </module></module>