2010年8月2日月曜日

OpenFlashChartで折れ線グラフを描く

どうも、俺@週明け仕事中です。

今日はphpの便利なFlashグラフ作成ライブラリOpen Flash Chartを使って折れ線グラフを描く方法をメモします。

.swfファイルの配置などは割愛します。
上記URLから一式ファイルを落として、open-flash-chart.swfをサーバへ置き、クライアント側からはjavascriptで
<script src="swfobject.js" type="text/javascript"></script>
swfobject.embledSWF("open-flash-chart.swf");
のように呼び出すだけです。

では、折れ線グラフ(2本の折れ線)を作るためにサーバ側では
<?php
$chart = new OFC_Chart();

// 1本目
$line = new OFC_Charts_Line();
$line->set_values(array(1,2,3));
$line->set_width(2);
$line->set_colour("#000000");
$chart->add_element($line);

// tool_tipを使う場合
$dot = new OFC_Charts_Line_Dot();
$dot->set_dot_size(3);
$dot->set_halo_size(1);
$dot->set_colour("#000000");
$dot->set_tooltip("ここはツールチップ #val##x_label#");
$line->set_default_dot_style($dot);

/Charts/OFC_Charts_Line.phpに以下のメソッド追加
function set_tooltip($tip) {
$this->tip = $tip;
}
function set_default_dot_style($style) {
$this->{"dot-style"} = $style;
}


// 2本目
$line = new OFC_Charts_Line();
$line->set_values(array(4,5,6));
$line->set_width(2);
$line->set_colour("#000000");
$chart->add_element($line);

// tool_tipを使う場合
$dot = new OFC_Charts_Line_Dot();
$dot->set_dot_size(3);
$dot->set_halo_size(1);
$dot->set_colour("#000000");
$dot->set_tooltip("ここはツールチップ #val##x_label#");
$line->set_default_dot_style($dot);


// Y軸
$y = new OFC_Elements_Axis_Y();
$y->set_range(0,100,10);// Y軸の幅
$y->set_colour("#000000")
$y->set_grid_colour("#cccccc");
$chart->set_y_axis($y);

// X軸
$x_label = new OFC_Elements_Axis_X_Label_Set();
$x_label->set_labels(array("その1", "その2"));
$x_label->set_steps(1);
$x_label->set_colour("#000000");

$x = new OFC_Elements_Axis_X();
$x->set_labels($x_label);
$x->set_colour("#000000");
$x->set_grid_colour("#cccccc");
$x->set_range(0,null,null);

$chart->set_x_axis($x);

print $chart->toPrettyString();
exit;
こんな感じです。

詳細は公式を見てね。

2010年7月15日木曜日

apacheにmod_rewriteを追加する。

どうも、俺@連続投稿です。

apacheに組み込まれているモジュールを確認する場合は
# httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile
...
で確認できます。今日は「やべっ!RewriteEngine使うためのmod_rewrite入ってねーじゃん!」という場合どうするかのメモです。

まぁ、簡単なのはapacheを --enable-rewrite 追加して再インストールで良いのですが、再インストールできないような場合(例えばapacheを止められないような場合)。

まず適当なDirを作成
# mkdir /usr/local/apache2/my_dir
し、rewrite用のプログラムファイルを持ってきます。
# find /usr/local/src/httpd-2.2.6/ -name "*rewrite*"
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.lo
/usr/local/src/httpd-2.2.6/modules/mappers/libmod_rewrite.la
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.exp
/usr/local/src/httpd-2.2.6/modules/mappers/.libs/libmod_rewrite.a
/usr/local/src/httpd-2.2.6/modules/mappers/.libs/libmod_rewrite.la
/usr/local/src/httpd-2.2.6/modules/mappers/.libs/mod_rewrite.o
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.o
/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.c
/usr/local/src/httpd-2.2.6/modules/mappers/NWGNUrewrite
...
たくさん出てきます。
ココで必要なのは
「mod_rewrite_c」と「mod_rewirte.h」の2つです。(たぶん

# cp /usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.c /usr/local/apache2/my_dir
# cp /usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.h /usr/local/apache2/my_dir
します。

次にビルドします。
# cd /usr/local/apache2/my_dir
# /usr/local/apache2/bin/apxs -c mod_rewrite.c
とすると
# ls -la
drwxr-xr-x 2 root root 4096 Jul 15 18:54 .libs
-rw-r--r-- 1 root root 154702 Jul 15 18:53 mod_rewrite.c
-rw-r--r-- 1 root root 1340 Jul 15 18:53 mod_rewrite.h
-rw-r--r-- 1 root root 822 Jul 15 18:54 mod_rewrite.la
-rw-r--r-- 1 root root 324 Jul 15 18:54 mod_rewrite.lo
-rw-r--r-- 1 root root 197344 Jul 15 18:54 mod_rewrite.o
-rw-r--r-- 1 root root 0 Jul 15 18:54 mod_rewrite.slo
とたくさんファイルが出来上がります。
次にインストールです。
 # /usr/local/apache2/bin/apxs -i -a -n rewrite mod_rewrite.la
完了です。

あとはhttpd.confをいつものように編集すれば完了です。


以上でぇぇぇえぇす。

postgrsql.8.4.xでcreatedb実行時に文字コードエラー

どうも、俺@残業中です。

postgresql.8.4系で
$ createdb hoge_db -E UTF8
createdb: database creation failed: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (EUC_JP)
HINT: Use the same encoding as in the template database, or use template0 as template.
のエラーが出ました。

これはinitdb時に文字コードをEUC-JPで作成したためUTF-8なデータベースが作成できないよ!というエラーです。ちなみにpostgresql8.4系から出るエラーだそうです。

こんな時は、「Use the same encoding as in the template database, or use template0 as template」しましょう。
つまり、template0のテンプレートデータベースを使ってcreatedbしましょう。

$ createdb hoge_db -E UTF8 -T template0
これで出来るはずです。

テンプレートデータベースとはなんじゃらほい?ですが、
PostgreSQL テンプレートデータベースに説明があります。
template1というデータベースはデータベース作成時に元となるテンプレートで、initdbなどした初期設定の情報などが入っています。
template0というデータベースは、初期設定のないテンプレートだそうです。


ちゃんちゃん。

2010年7月7日水曜日

snmpで独自(特定)のプログラム実行結果を取得する

どうも、俺@仕事中です。

今日はsnmpで独自で作成したプログラムの実行結果を取得する方法についてメモです。
snmpd.confに
# vim snmpd.conf
exec foo_program /usr/local/bin/php /etc/snmp/bin/foo.php
exec bar_program /usr/local/bin/php /etc/snmp/bin/bar.php
とし、/etc/snmpd/bin以下に実行プログラムを書きます。
2つ書いたのは、例えばMRTGでデータ取得する場合は2つのデータを必要とするからです。
それぞれのプログラムは適当に
<?php print 10. "\n";
みたいにしておきます。

この場合、snmpでは
.1.3.6.1.4.1.2021.8.1.101.1 /etc/snmp/bin/foo.phpの実行結果
.1.3.6.1.4.1.2021.8.1.101.2 /etc/snmp/bin/bar.phpの実行結果
を取得できます。
一番最後の「1」は、snmpd.confに書いた上からの順番です。

ちなみに
.1.3.6.1.4.1.2021.8.1.100.1 /etc/snmpd/bin/foo.phpの戻り値
.1.3.6.1.4.1.2021.8.1.100.2 /etc/snmpd/bin/bar.phpの戻り値
が取得できます。

テストで
# snmpwalk -v 1 host_name -c community_name .1.3.6.1.4.1.2021.8.1.101.1
10
# snmpwalk -v 1 host_name -c community_name .1.3.6.1.4.1.2021.8.1.101.2
10
で確認してください。

以上でええええええええええす。

2010年7月6日火曜日

postgresqlで日付データをフォーマットさせる

どうも、俺@一生懸命仕事中です。

今日はpostgresqlで日付データをフォーマットして出力する方法についてメモです。
例えばtimestamp型のカラムは
select regist_date from table_name
regist_date
--------------------
2010-06-29 14:53:53
2010-06-29 15:07:03
2010-06-29 17:28:57
2010-07-01 17:07:55
2010-07-06 14:10:33
のような出力になるのですが、これを年月日の部分だけで切り取りたい場合。
※(yyyy-mm-ddの部分だけ表示したい)

そんな場合は
select to_char(regist_date, 'yyyy/MM/dd') from table_name
to_cahr
----------------
2010/06/29
2010/06/29
2010/06/29
2010/07/01
2010/07/06
でも良いし、
select date(regist_date) from table_name
date
----------------
2010-06-29
2010-06-29
2010-06-29
2010-07-01
2010-07-06
でも良いですよー。

以上だよーーーん。