2012年6月26日火曜日

ログレベル

難しいです。
「どのレベルで、どのようなログを出力するのか」が。

たいていの場合は組織やチームで決められているかもしれませんが、
個人で利用する場合やログレベルごとの出力ないようを任された場合なかなか行動に窮するものがあります。

私がそこいらのウェブ上で情報を集め出した個人的な答えが以下です。
なおWebアプリケーションの実装においてログを利用することを想定しています。

Untitled document

ログレベル
ログ閲覧者
利用シーン
出力する内容
ERROR
運用者・開発者
ユーザーが処理を続行できない場合
  • データベースを利用できない
  • データID
  • 例外をキャッチして処理した場合、そのスタックトレース
  • 例外をキャッチしてそのままスローした場合、キャッチした場所
  • 原因の候補
WARN
運用者・開発者
ユーザーは処理を続行できるが、アプリケーションが異常なデータを処理した場合
  • データID
  • 問題の内容
  • 発生箇所
  • 原因の候補
INFO
運用者・開発者
処理は正常だが、ユーザーが特殊な作業を行った場合
  • データID
  • 処理の内容
  • 処理の開始と終了の場所
  • 処理の開始前のデータの状態と、処理後のデータの状態
DEBUG
開発者
上述以外で、開発者が必要だと判断したもの
任意

2012年1月19日木曜日

PyramidフレームワークでPython+WSGIのWebアプリ(3)MVCに則ったサンプル(BankAccount)

pyramidフレームワークを用いて残高表示・入金・出金の機能を備えたBankAccountなるwebシステムを作ります.

ロジックはpyramid+makoテンプレート,DBはsqlite3,そして実行はWSGIの仕組みを用います.

今回の目的はMVCアーキテクチャに則って実装するための部品(プログラムファイル)としてどのようなものがあるかをしること,そしてそれぞれの部品にどのようなロジックを書けばいいかの傾向をつかむことです.

方針として,まずどのファイルにどのような記述をすればよいかをざっと示しますので,ご自分の環境で動作を確認してください.ひとまず動作させるところまでできればどこに何があればどうなるのか,俯瞰的に眺められるはずです.


1. 環境設定

まずはじめにpythonの環境を整えます.

前回はpyramidなどの外部パッケージをシステム側に直接インストールしましたが,今回はvirtualenvとよばれる小さなpython処理系をつくり,そこにpyramidをインストールします.このようなことをする理由としては,

  • 仮想環境上でアプリケーションが完結するのでシステムへの影響が少ない
  • 外部パッケージ部分で問題が発生し収集がつかなくなったとき,仮想環境ごと削除すればリセットできる
といったように問題を局所化できます.

さて,その方法ですが,仮想環境を作りたいディレクトリにて,

$python2.6 --version
Python 2.6.5
$easy_install-2.6 virtualenv
$virtualenv --no-site-packages pyramidtut
のようにします.するとpyramidtutディレクトリには,

$ls
bin include lib lib64
のように見えるはずです.

bin/ にはpythonの実行コマンドが格納されており,仮想環境で実行するアプリケーションに対しては以降すべてこのbinディレクトリから実行コマンドを選択していくことになります.

この際,外部パッケージによってはシステム側で使う場合と実行コマンドの名前が変更されているものもあります(paster create ... -> pcreate ... など)ので,注意してください.

次に必要なパッケージを仮想環境上にインストールします.

$pwd
/home/hoge/pyramidtut

$bin/easy_install-2.6 pyramid sqlalchemy pyramid_tm sqlahelper
必要な外部パッケージは以上となります.

 さらに,pyramidプロジェクトを作成します.
$bin/pcreate -t starter bankaccount
tオプションは「テンプレートを作成せよ」という意味です.starterはpyramidが所有するテンプレートの一つで,最小限の構成をあらかじめ持つテンプレートが作成されます.そしてそのプロジェクト名をbankaccountとしているわけです.

これで,準備が完了しました.


2. 実装

まずはプロジェクトの構成を確認します.

だいたい右図のようになっているはずです.

これから変更を施していくファイルは,

  • bankaccount/templates/index.mak
  • bankaccount/___init___.py
  • bankaccount/models.py
  • bankaccount/resources.py
  • bankaccount/views.py
  • development.ini
です.ひとつずつその実装例を載せていきます.


  • developent.ini
静的な情報を記述するファイルです.WSGIではこのファイルが引数となります.
[app:main]のブロックを以下のように変更してください.


  • ___init___.py
アプリケーションの初期化を行うファイルです.以下のように記述してください.


  • views.py
ユーザのURLアクセスに反応して起動するメソッドの内容を定義します.



  • resources.py
データベースアクセスのためのクエリなど,複数の機会から使い回すことのできる処理やインスタンスをまとめ,必要に応じて取得できるようにしておくためのクラスがあります.


  • mdoels.py
ロジックです.主にviewsから呼び出されます.



  • index.mak
makoテンプレートと呼ばれるものです.一般的なHTML記述に加え,pythonのコードを記述することができます.この仕組みを用いることにより,DBからデータをひっぱってきて表示したり,フォームのアクションスクリプトに先述のメソッドなどを指定することができます.




3. 実行実行アンドアクセス

以上の変更が完了したら,WSGIとして実行します.
$pwd
/home/hoge/pyramidtut/bankaccount
$../bin/pserve development.ini
[DEBUG]:BankAccount_15
Starting server in PID 3320.
serving on 0.0.0.0:6543 view at http://127.0.0.1:6543

エラーなど出ず,この状態になったならば出力にあるURLにアクセスしてみます.

以下のような画面が出れば成功です.
Balanceが現在DBに保持されている残高,Depositで入金処理,Withdrawで引き出し処理です.実際にフォームへ値を入れてBalanceの変化を観察してみましょう.意図通りの結果になりましたか?



今回の内容は以上です.全体構成とサンプルを動かすための開発の流れに焦点を起きました.次回はそれぞれのPythonファイルの詳細な記述を見ていくつもりで,この連番では最後の記事になる予定です.これはまだ僕も勉強中です.

もし実行された方は,成否をお知らせいただくとより内容のクオリティアップを期待できますので,気が向いたらコメント等でご一報ください.

うまくいかない場合はOSやエラー内容など明示していただけると助かります.

2011年12月16日金曜日

任意のプログラム実行に対して自動でoprofileを開始・終了するシェルスクリプト

研究の実験の際に作成しました.ご自由にお使いください.
使い方は,下記ソースコードを適当なシェルスクリプトのファイル(例えばhoge.sh)として保存し,
# . hoge.sh 任意の実行コマンド及び引数群
などとすれば利用できます.


2011年12月14日水曜日

VMWare Serverを利用して測定したデータを公開するときの制約

が,あるそうで,

VMware Serverを利用して構築した仮想マシン上で測定した性能の情報を公開するためには,VMware側の許可をもらう必要があるようです.


具体的にはサイト:http://www.vmware.com/download/eula/server.html 3.3 Restrictions. にある記述,
You may use the Software to conduct internal performance testing and benchmarking studies, the results of which you (and not unauthorized third parties) may publish or publicly disseminate; provided that VMware has reviewed and approved of the methodology, assumptions and other parameters of the study. Please contact VMware at benchmark@vmware.com to request such review.”


 を元にしています.これは例えば,仮想マシン上のL2キャッスミス数や消費電力の値について計測したとき,その妥当性について確認を行う,という旨だと理解しています.


つまり修士論文のための実験結果を出してから,論文を提出するまでの期間でVMware側にデータを確認してもらう必要がある,ということになりますね.時間の猶予を考えると難しい.というか無理.

2011年12月9日金曜日

VMware Server2のインストール環境まとめ

先日,Apache VCLを構築する機会があり,その過程であるVMware Server2のインストールでハマりにハマったのでメモしておきます.

ちなみに,Apache VCLとはクラウド環境を構築するための一つのソリューションおよび環境セットです.大きく,マネジメントノードデータベース+ウェブノード管理対象ノードにマシンの役割が分けられ,管理者は,管理対象ノードに立ち上がる仮想マシンを一般ユーザへ提供する形となります.

特徴はなんといっても無料で構築できる点です.最低マシンが2台あればすぐに試すことが出来るでしょう.

ややOpenStackなどの影に隠れている感はありますが,ブラックボックス化されてしまっているクラウドコンピューティングの仕組みを理解するのにはうってつけの教材の一つだと思います.



本題です.このVCLですが,管理対象ノードの仮想化エンジンにはVMware Serverを利用します.しかしこのVMware Server,ヴイエムウェアがサポートを終了した関係もあってか,Linuxカーネルの進化に追いついていないようです.具体的には新しいカーネルであるほどインストール時に問題が発生する傾向にあります.

結論から言うとCentOS5.7(kernel-2.6.18)+VMware Server2+glibc-2.5-34という環境で動作を確認していますので,この組み合わせが無難ではないかと考えています.


以下,僕が遭遇した問題についてまとめておきます.


2011年11月5日土曜日

PyramidフレームワークでPython+WSGIのWebアプリ(2)インストール 〜 Hello, world

前回に続き,pyramidのインストールおよび簡単なhelloworldプログラムの実行までを紹介したいと思います.基本的にWindowsでも可能ですが,自身の環境が基となっているのでCentOS向けの内容です.

インストール

それでは早速pyramidのインストールとhelloworldの表示まで進めていきます.

今回使用した環境は以下のような構成です:
OS : CentOS5.7
CPU : Intel(R) Core(TM)2 Duo CPU @ 2.40GHz
Mem : 512MB
Disk : 20GB

必要なパッケージをインストールします.ここで,CentOS5.7の場合だと標準のyumリポジトリではPython2.4が最新です.pyramidはPython26を想定していますのでEPELリポジトリを追加します.

Python2.6をインストールします.
# yum install python26 python26-devel --enablerepo=epel 
 以降,python26を基本コマンドとして使用していきます.

さて,pyramidのインストールにはeasy_installを使用します(Rubyのgemにあたる仕組みです).これを使えるようにするためにはez_setup.pyというファイルを利用してeasy_installを取り込みます.
#python26 ez_setup.py

あとはpyramidをインストールするのみです.
#easy_install-2.6 pyramid
いろいろなパッケージが自動ダウンロードされると思います.すべて pyramidを構成する依存パッケージです.

これで,pyramidを使用してwebアプリケーションを作成する準備ができました.

Hello World

公式のドキュメントによれば,最も単純なpyramidアプリケーションの記述は以下です:
この記述をhelloworld.pyとして保存します.あとは,ウェブ用などの一般ユーザにて,
$ python helloworld.py
serving on 0.0.0.0:8080 view at http://127.0.0.1:8080
 という状況になればOKです.ブラウザに以下のURLを打ち込みます.
http://127.0.0.1:8080/hello/hogehoge
hogehogeというメッセージが表示されているウェブ画面が確認できれば完成です.

PyramidフレームワークでPython+WSGIのWebアプリ(3)MVCに則ったサンプル(BankAccount)

2011年10月20日木曜日

PyramidフレームワークでPython+WSGIのWebアプリ(1)とっかかり

Webアプリケーションを作成するとき,そのための道具は枚挙に暇がありませんが,Python界隈がにぎわっているようです.


僕はこれまでJava系のフレームワークしか利用したことがなかったのですが,スクリプト言語でのWebアプリも興味深いですね.


というわけでPythonでのWebアプリ作成を検討します.


理由は上記のものもありますが,ちょっと遊んでみようと思って,日本語でのドキュメントやチュートリアルなんかが少ないな,と感じたので,皆さんと共有できれば幸い,というのが大きいです.


Google App Engineも,PythonのWebアプリケーションフレームワークで実装しているんだとか.


そうだ,Pyramidをつかおう

さて,早速PythonでのWebアプリ作成にとりかかりたいと思います.


ここで気になるのが道具ですね.どうも,Python単体では,いろいろやろうと思うと限界がありそうです.そこで,JavaでいうTomcatやglassfishにあたる,Webアプリケーションフレームワークが欲しくなります.


Python界では本当に多くのフレームワークがあり,選択肢が多いです:
  • Twisted
  • Zope
  • CherryPy
  • TurboGears
  • Django
  • Pylons
老舗にあたるのがどうやらTurboGearsのようです.が,ここではPylonsに注目してみようと思います.理由は,開発スピードが早く日本語のドキュメントが少ないこと,Ruby on Railsを彷彿させるMVCアーキテクチャを採用していること,包括的に多くのフレームワークを持ちつつ,シンプルな記述も可能であること,などです.
フレームワークのフレームワークとでも言えばいいでしょうか.Pylonsは他の多くの仕組みを自身に持っています.アプリケーションサーバでいうと富士通のInterstageがSpringやStrutsなどのオープンソースフレームワークを抱えていますが,ちょうどそのようなイメージです.


そして,Pylonsを含む上記リストアップしたフレームワークの特徴として,WSGIに準拠している,というものがあります.
WSGIとはフレームワークを用いてサーバとアプリがやりとりをするとき,その方法をPythonで定義したものです.ちょうど,JavaでいうServletやjspみたいなものです.
よって,Pylonsを使ってWebアプリを作り続けたが,他のフレームワークへ移行したいというシーンがあったとき,それまでのがんばりが無駄になることはありません.WSGIに準拠したフレームワークであれば,我々はその実装を意識することなく,Webアプリのコードが書けます.


が,このPylons,開発スピードが速いのもあってか,バージョン1.0を境にサポートは行うが新しく開発はしないというメンテナンスモード,レガシーステータスに設定されてしまいました.
事情としては,
The Pylons web framework 1.x line will continue to be maintained, though not enhanced. We will provide a package that allows Pylons 1.x applications and Pyramid applications to run in the same interpreter. The future of Pylon-style web application development is Pyramid
ということらしいです.
かわりに,このPylonsを統合するような形で新しくフレームワークがリリースされました.それがPyramidです.このフレームワークについては日本語のドキュメントが圧倒的に少なく,また利用事例も少ないようです.


公式のドキュメントはこれでもかというほど充実しているので,それらを紐解きつつ,実践的なWebアプリを実装していきたいと思います.


と,いうわけで次回から実際にインストールしてみて,使ってみた時の記録をまとめていきたいと思います.





PyramidフレームワークでPython+WSGIのWebアプリ(2)インストール 〜 Hello, world



PyramidフレームワークでPython+WSGIのWebアプリ(3)MVCに則ったサンプル(BankAccount)