読者です 読者をやめる 読者になる 読者になる

猫型エンジニアのブログ

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

このサイトの目次

OpenFlow 主にコントローラおよびスイッチの設定方法のまとめです。 OpenvSwitch OpenvSwitchのインストールから設定方法を紹介しています。 サーバ設定 主にCentOSやUbuntuをサーバとして利用する際の設定方法を紹介しています。 プロトコル プロトコルおよ…

はじめてのシステム開発 2

RedMine この開発規模が数億越え確実なんだけど、お客さんの要件がひどすぎる。200件近い要望(←要求仕様では決してない)の山がまず整理できない。そこでお正月に勉強していたRedMineを導入して整理したところ、チーム内ですごい評価された。やっててよ…

はじめてのシステム開発 1

はじめてのシステム開発編 IT業界に入ってもう中堅なんだけど、はじめて「要件定義〜試験」という頭からお尻までの開発にアサインされました。これまではOSSの検証とか、プロトタイプ作成とかばっかりではじめての経験。ということで、新しい環境だけあって…

プロジェクト管理 その2 

初めてのPLとしての業務の終わりが見えてきたので、今後にその経験を生かすためのメモ。 スケジュール管理の大変さ PLということはプロジェクトの進捗管理をする「責任者」という立場。この責任者は具体的には、対上司・対顧客・対チームメンバーとの3者が…

SIPお勉強 その11

SIP

UACのリクエストの送信動作については「12.2.1.1 リクエストの生成」に記載がありました。ここでもlr(ルースルーティング)の有無によって動作は変わるようです。 なんかごちゃっと書いてありますけど、クライアント側としてはリクエスト送信時には、おそら…

SIPお勉強 その10

SIPの仕様の中でもプロキシの転送周りは特に複雑な気がします。まだちょっとあやふやなところがあるため後で書き換えする予定。 ▪️ルースルーティング vs ストリクトルーティング 下にRFCの仕様から抜粋しましたが、これだけじゃ結局違いが全然わからないで…

SIPお勉強 その9

SIP

こつこつとSIPサーバの実装は進めています。レジストラを実装しているのですが、実装するたびに毎回発見があります。 レジスタサーバにおいて「ドメイン」はキーとなる概念ですね。From/ToヘッダはAORですが、コンタクトアドレスはAORではないことの違いがよ…

リーダブルコード

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典出版社/メーカー: オライリージャパン発売日: 2012/06/23メディア: 単行本(ソフトカバー)購入: 68人…

言語のしくみ その8

当たり前だけど適当な変数を用いてロック代わりにするのはダメなんですね。 4−5 ロックフリーアルゴリズム 全体の流れとしては「スレッドセーフを実現する手法の一つとしてロックがあるが、ロックは処理効率が低下」する。そのためロックを用いないスレッ…

プロジェクト管理 その2

来月からいよいよPJ始まるけど、うまくいくのかなぁ...。 第7章 プロジェクト管理とは「時間管理」「コスト管理」「品質管理」である。 時間管理 要求管理や品質管理とことなり時間管理だけは熟練の技がいらない。 時間管理は厳密にやりすぎると上手くいか…

言語のしくみ その7

4−2基本テータ構造 データ構造から見るCの性格 とても大切そうなことなのでメモ。でもなんとなくわかるような、わからないような...。「結局は生のCPUの動作が想像できれば自然なこと」だそうです。 Cの基本データ構造の特徴の一つは、1バイトから8バイ…

SIPお勉強 その8 

SIP

REGISTERリクエスト RFC3261の「10.2 REGISTERリクエストの構築」に基づくREGISTERリクエストの必須ヘッダフィールドに関するによる制約事項は以下の通り。 Request-URI: SIP URIのuserinfoと@コンポーネントが存在してはならない[MUST NOT]。 To: Toヘッダ…

SIPお勉強 その7

SIP

あいかわらずちょこちょことgithubのSIPのソースコードは更新しています。RFCも並行して読んでいるが、SIPは意味が重複しているように見えるヘッダが多く使い分けがよくわからない...。 ToフィールドとRequest-URIの違い どちらも「宛先」という意味では同じ…

言語のしくみ その6

2-7 AST(抽象構文木)に変換 抽象構文木をたどるには再帰呼び出しを実行する。 抽象構文木をたどる処理系は、メモリ空間に不連続に存在する構造体にアクセスする。よってキャッシュ効率は落ちてしまい性能がでない。 多くの処理系ではアクセスは狭い領域で…

SIPお勉強 その5

SIP

「やっぱり実際に実装するのが一番勉強になるね」ということでSIPのサーバプログラムを書き始めました。とりあえずregisterやinviteの処理くらいはできるところまで実装するのが目標です。サーバとしての実用性を考えるとC言語等で実装が当然望ましいのです…

言語のしくみ その5

言語設計者はCPUの内部構造まで意識しないといけないとか、大変ですね...。(>_ 2-6 キャッシュとシンボル キャッシュの有効活用 どれだけ効率的にキャッシュを利用できるかで、CPUの性能は50倍程度は異なる。 コア間で共有するキャッシュ上のデータの書き…

プロジェクト管理 その1

今まではプレイヤーとして業務に取り組んできましたが、そろそろマネージメント業務も任されるようになりました。ということで3冊プロジェクト管理の本を読んでみました。 まずは1冊目「ソフトウェアプロジェクト管理」から。ここでは本の概要とそこでの要…

SIPお勉強 その3

SIP

RFC3263から大切そうな用語をつまみ食いしました。日本語約は大変助かりますが、AORの訳が不明瞭なため私が直しました。 SIP URIコンポーネントとSIPS URIコンポーネント userinfoは省略できるけどhostは略せないのね。一見変なようだけど、これは下のAORの…

SIPお勉強 その2

SIP

SIPを理解するのに一番確実なのは、RFCを見ながら実際にSIPスタックを実装することだと思う。時間があれば是非やってみたいけど、なかなか難しそう。とりあえずこことかに参考になりそうな資料がある。いままでだましだましでSIP業務やってきたけど、RFCを真…

SIPお勉強 その1

SIP

業務でSIPを使うようになったので、そのお勉強メモです。できる限りRFCや専門書籍に当たって正確な理解を深めたい。 SIP標準化の歴史 ここを参照。結構紆余曲折を経てるのね。 まずRFC SIP関連のRFCは以下のサイトに和訳付きでまとまっています。全部で40…

言語のしくみ その4

2-2 新言語「Streem」 シェルは自然な形でマルチコアを活用している Streemの特徴 軽量なコンカレント実行 競合条件の排除(すべてのデータ構造はイミュータブル) 計算モデル 2-3 文法チェッカーをまず作る 字句解析:lex 構文解析:yacc 2-4 イベントループ…

言語のしくみ その3

「並列」と「平行」の違いってすっごくわかりにくいですよね...。私も以前相当悩みました。ですがCPUのマルチコア化の傾向は今後も続くため、マルチコアの活用技術が脚光をあびるのは時代の流れなのですね。勉強になります。 マルチコア化への対応技術 ソフ…

言語のしくみ その2

PythonのVMという単語が、以前は何を意味しているのかがわかりませんでしたが、今はすっきりしました!というかVMの話しているのに、RISCやCISCの話が出てきてびっくり...。この本レベル高いな。プロセスVMって本当にCPUを意識するんですね...。 1-3 バーチ…

言語のしくみ その1

まつもとゆきひろ 言語のしくみ作者: まつもとゆきひろ出版社/メーカー: 日経BP社発売日: 2016/12/22メディア: 単行本この商品を含むブログ (1件) を見る今年の年末年始の勉強本の紹介です。 1-2 言語処理系の仕組み 「プログラミング言語」 =「言語」+「…

情報処理試験対策

単に教科書を読むだけではあまり意味がなく、自分の言葉で噛み砕いて咀嚼しないと覚えられません。 メインメモリ メモリインターリブ メモリアクセスの局在性を利用して、複数のメモリバンクに対して並列にアクセスすることで、メモリアクセスを高速化させる…

Gitの使い方

はじめに 今更ですがようやくGitおよびGitHubの使い方の勉強を始めました。いままで何となく使っていたため、本格的に勉強するのは初めてです。 Gitの解説サイトは星の数ほどありますが、自分自身の言葉で書き直すと理解が深まります。 GitとGitHubの違い Gi…

数学ガール・ガロア理論

数学ガール/ガロア理論作者: 結城浩出版社/メーカー: SBクリエイティブ株式会社発売日: 2014/07/24メディア: Kindle版この商品を含むブログを見る 頭の体操に今年の夏中にガロア理論の概要を理解しようと思う。厳密な数学的証明などは傍においておいて、と…

コンピュータシステムの理論と実装(第4章〜)

第4章 機械語 Hackコンピュータの仕様 ノイマン型コンピュータHackの仕様は以下の通り レジスタ:16bit幅のレジスタのDとAのレジスタを持つ メモリアドレス空間:ともに16bit幅の命令メモリとデータメモリを持つ、アドレス空間はともに15bit 注意 仕様によ…

コンピュータシステムの理論と実装(第1章〜第3章)

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方作者: Noam Nisan,Shimon Schocken,斎藤康毅出版社/メーカー: オライリージャパン発売日: 2015/03/25メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) を見る まだSICPも2章の…

IRQ

# cat /proc/interrupts CPU0 0: 175 IO-APIC-edge timer 1: 167 IO-APIC-edge i8042 8: 0 IO-APIC-edge rtc0 9: 0 IO-APIC-fasteoi acpi 12: 225 IO-APIC-edge i8042 14: 5195 IO-APIC-edge ata_piix 15: 39732 IO-APIC-edge ata_piix 19: 30270 IO-APIC-fa…

落ち葉拾い

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用のソケットプログラミング…