web.pyでWSGI

web.pyを使ってやっとメインのロジック部分が完成、いままでweb.pyをスタンドアローンで実行させ作っていたのでApacheと連携しさせてみることに。
既にCGIとしてPythonは動くのでアクセスしてみると・・・web.pyを使ったアプリは動かない。

うーん

なのでWSGIで動かしてみることを試してみる、とりあえずmod_wsgiのモジュールをGoogle Code Archive - Long-term storage for Google Code Project Hosting.で探してみるとない・・・。
動かす環境はWindowsXP+Apache2.0.63+Python2.5、各バージョンに合ったバイナリモジュールがない・・・

仕方なく他のサイトを検索してみたところ何とか発見!!http://adal.chiriliuc.com/mod_wsgi/

httpd.confに以下を記述

LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /wsgi "D:/Apache2/htdocs/hogehoge/hogehoge.py/"

動かない

Premature end of script headers: hogehoge.py

flupも必要みたいなのでhttp://trac.saddi.com/flupから入手してインストール
flup-1.0.2.tar.gz解凍して

python setup.py install

まだ動かないのでとりあえずhttp://webpy.org/install/ja通りにサンプルプログラムとhttpd.confを設定してみたところ無事成功

違いはhttpd.confに以下を追加したから?まあ後で調べよう


    SetHandler wsgi-script
    Options ExecCGI FollowSymLinks

で実際に自分のプログラムを動かすと・・・

mod_wsgi (pid=656):Target WSGI script 'D:/Apache2/htdocs/hogehoge/hogehoge.py' does not contain WSGI application 'application'.

よく調べてみると

スタンドアローンの時は任意だったみたいだけどwsgi経由にするときはオブジェクト名は"application"にするのか〜

(修正前)

app = web.wsgifunc(web.webpyfunc(urls, globals()))

(修正後)

application = web.wsgifunc(web.webpyfunc(urls, globals()))

やっと動いた〜!!

さらにスタンドアローンの時はクライアントから接続しているとき不安定な時があったけど安定している、実はクライアントはVBAXmlHttpRequestを使ったアプリだったのでこの不安定さはてっきりMS仕様かと思っていた。

とりあえず一段落

いや〜疲れた

地デジ対策とインターネット回線速度強化の為に光にしようと思い調べだしたら大変、今の使い方を変えずにするために

で、結局
NTT東日本
OCN
ぷらら

に電話して情報収集、これにするとあっちがだめとか、これじゃないと使えないとか、こっちが得でとか、モデムとルータと050電話対応機器とONUとかIP電話、ドットフォン、VOIPがごちゃごちゃな説明と・・・

ふー疲れた。

とりあえず

と言う構成にすることで何とか今の機械を無駄なく使えやりたいことができそう。

ポイントはひかりTVにすると今持っているHDレコーダでハイビジョン録画ができない、録画できても標準画質でなおかつ番組表予約ができない、ひかりTV対応テレビでも地デジを見るならひかりTV専用チューナが必要。でもってひかりTVフレッツ光ネクストの必要あり
ドットフォンよりドットフォン光の方がたとえ使わなくても月額料はちょっと安くなる。

たぶんそれぞれのホームページをじっくり読めばたぶん分かったかもしれないがどのページもいいことばかりで制約や条件などは注釈で分かりずらいのが感想。

またpythonを始めた

ちょっとしたアプリを作ることになりせっかくなので勉強がてらpythonで作ってみることに。

今回HTTPでpythonアプリに接続させるので簡単なフレームを探してみてweb.pyを選択。
情報を検索すると意外に少ない・・・・と言うかそれほどシンプルということかな。

データ格納用のDBは大がかりにインストールしたくなくまた件数もたかがしれているのでsqlite3を選択

さて、あとは検索サイトでサンプルを見つけながら作ってみよう♪

vSphereのSNMP設定

SNMP経由でVMWare vSphere ESX4のリソース情報を取得できないかと試してみた。

とりあえず以下の資料を参考に試す
・vSphere Command-Line Interface Installation and Reference Guide
・Configuring the Net-SNMP Agent onESX Hosts

操作はWindowsPCから行うためCLIをインストールしておく

SSHでESXに接続しsnmpデーモン(NET-SNMP)の状態を確認し起動していたら停止
(SSH)

service snmpd status
service snmpd stop

■操作PCから組込SNMPの設定状態を確認
(CLI)

vicfg-snmp.pl --server [サーバIP] --username root --password [パスワード] --show

■コミュニティ構成設定
NET-SNMPで161番ポートを使うため組込SNMPは別ポートを指定(171とか)
(CLI)

vicfg-snmp.pl --server [サーバIP] --username root --password [パスワード] -c [コミュニティ名]
vicfg-snmp.pl --server [サーバIP] --username root --password [パスワード] -p [ポート番号]

■組込SNMPを有効にする
(SSH)

vicfg-snmp.pl --server [サーバIP] --username root --password [パスワード] --enable

以下のエラーメッセージが出てしまったが調べるためにmgmt-vmwareやNET-SNMPの再起動をしていたら直ってしまった・・・。

■とりあえず再度mgmt-vmwareを再起動
(SSH)

service mgmt-vmware restart

■NET-SNMPのconfigファイル(/etc/snmp/snmpd.conf)に以下を追加

view systemview included .1.3.6.1.4.1.5876
proxy -v 1 [組込SNMPのコミュニティ名] udp:127.0.0.1:[組込SNMPポート番号] .1.3.6.1.4.1.5876
 

■snmpdを再起動
(SSH)

service snmpd restart

■接続確認

snmpwalk -v 1 localhost -c [NET-SNMPコミュニティ名] .1.3.6.1.2.1.1 ←OS基本情報
snmpwalk -v 1 localhost:171 -c [組込SNMPコミュニティ名] .1.3.6.1.4.1.5876 ←組込SNMPからvmware基本情報
snmpwalk -v 1 localhost -c [NET-SNMPコミュニティ名] .1.3.6.1.4.1.5876 ←NET-SNMP経由でvmware基本情報

外部から隠せ素できない場合はF/Wでsnmpポートが塞がれている可能性がある、F/Wの設定変更は通常のLinuxとは違う設定管理をしているみたい(通常のLinuxなら/etc/sysconfig/iptablesがあるがESXにはない)でvSphere Clientで行うのが簡単でよいみたい。

(vSphere Client)
・【インベントリ】パネルでホストを選択
・【構成】タブを選択
・【セキュリティプロファイル】をクリック
・プロパティウインドウで構成の詳細を編集

コマンドで行うならesxcfg-firewallコマンドらしい(ESX構成ガイド参照)


あとはMIBブラウザでMIBを使ったアクセスするために今回はGetifを使いダウンロードしたVMWARE-MIBをGetifインストールディレクトリ内にあるMibsに展開してあげるだけ。

ただよくよく調べてみるとSNMP経由では自分がほしいCPU、メモリ使用率が取得できなかった・・・がっかり

ちなみに今回は検証のためセキュリティを考えない設定なのでコミュニティ名とかsnmpポートのアクセス制限は未考慮

こんなところに設定がある

普段ちょくちょく使う”ファイル名を指定して実行”、テキストエディタリモートデスクトップやらスタートメニューからマウスを使って起動するのが面倒。
ただふとした時からファイル名を指定するときにパスが補完してくれなくなった・・・・まあMSだし色々インストールしていたりすればだんだん動作がおかしくなるのは”仕様”かもしれないけど何となく調べてみたらIEに設定項目があるらしい

・インターネットオプションから「詳細設定」のタブを選び、「インラインコンプリートをする」

へー、確かにチェックがはずれていた・・・たぶんIEの動作検証で色々設定を変更して戻し忘れらしく自分が悪かったようです。しかしなんで設定箇所がIEなのか?と疑問に”わざと”思ってみた、IEは明らかにOSと連携していてただインターネットを見るだけではない、その結果欧州から独占禁止法に抵触という問題になるわけだ。

でもこの設定はせめてexplorerのオプションにあった方がまだしっくりくるな。

Jasperreports/iReport その3

iReportでテンプレートファイルの作成が完了したので簡単なpdf出力プログラムを作成してみた、今回はcsvファイルからの作成なのでサンプルソースを探してみると・・・・

iReport

とっても参考になりました!!

iReportのJRCSVDataSourceConnectionクラスを使えば自分でいちいちCSVファイルを読み込むロジックをコーディングする必要もなくとても便利、参考になったソースから修正した部分(データの動的部分は当然使うデータによって異なる)は

バージョンが変わってパッケージ名が変わったのかな。

import com.jaspersoft.ireport.designer.connection.JRCSVDataSourceConnection;

使うCSVデータはカンマ区切りではなくタブ区切りを指定し改行コードはWindows標準のCRLFを指定

jd.setFiledDelimiter("\t");
jd.setRecordDelimiter("\r\n");

簡単♪

Jasperreports/iReport その2

データソースの設定でCSVも読み込めることは分かったものの今回は使うテキストデータは区切り文字がタブで改行コードはcrlf、なので設定する際はFiledseparatorでタブを選択しRow separatorはNew Line(Windows)を選択しておかないといけないらしい。また一行目はデータではなくカラム名なので設定画面下にある1行目をskipする様にチェックを入れておく必要があるみたい。

iReportでのデザインはあまり複雑な事をするつもりないので一つ一つのプロパティはよく分からないけど、データソースを設定してあればプレビューボタン脇にボタンでフィールド名を取り込める便利な機能があるので一つ一つ手動設定がいらないのが便利、ただしフィールドの属性がデフォルトではStringのため計算したい場合やPateernプロパティでカンマ区切り表示したい場合は取り込んだフィールドの型を数字型(Long等)に変更しておいてからフォームにドラッグドロップしておくのが良さそう、もっともStringのままでもドラッグドロップして作成されたTextFieldのTextFieldExpressionで型変換(Long.parseLong(${フィールド名}))しかつExpressionClassを数字型に変更すればPatternプロパティによる表示形式が有効になるみたい(設定しないと例外エラーが発生)

基本的なデザインはクリスタルレポートやSVF、Accessのレポートデザインとにたりよったりな感じなので意外に使い方は慣れることができそう、できればエラーはStackTraceではなくちゃんとエラーメッセージを表示してほしい・・・