10月 272014
 

必要に迫られて perl でグラフを書くことになりました。 perl でグラフを書くためには以下のモジュールを利用すれば良いみたいです。

円グラフ: GD::Graph::pie
線グラフ: GD::Graph::lines
棒グラフ: GD::Graph::bars
棒と線の混ざったグラフ: GD::Graph::mixed

などを利用するとサクっとグラフが書けるし、ウェブで検索すると、そのためのサイトがちらほらとあるので非常に簡単にグラフが書けてよかったです。

しかし、GD::Graph の問題点もちらほら。

一個目
GD::Graph::mixed を利用したとき、グラフの右側が折れ線グラフの値のラベルで左側が棒グラフのラベルだとした場合、 y2_min_value の値が有効にならないみたいです。 y1_min_value の値と一緒になってしまうという、明らかにバグちっくな動作をしてしまう。利用している GD::Graph のバージョンの影響もあるのかな?

ちょっとサンプルコードを。

$graph->set(
        :
    types        => [ qw(bars lines) ],
    y1_max_value => 5,
    y1_min_value => 0,
    y2_max_value => 100,
    y2_min_value => 70,
        :
);

 

上記のようなコードにした場合、y1_min_value も y2_min_value も結局 “0” から始まってしまうので mixed グラフはあきらめて lines と bar のグラフを二個表示させるようにしました。orz

 
二個目
円グラフでグラフの中に文字を表示したい場合、その文字列が長いと悲しい状態になってしまいますなぁ・・。

以下、サンプルのグラフ。

test_pie0

でもって、これを回避するために GD::Text::Align など GD::Text 系を利用して色々編集できるらしいのですが、ウェブで探してもサンプルコードや、実際に表示できる成果物のグラフが無いので利用するのを断念しました。

php でグラフを書く場合には絵グラフの横に各フィールドの説明分を表示できるみたいなんですが perl ではそれができないみたいです。
表示しようとする文字列に “\n” を入れると改行はしてくれますが、センタリングしてほしいなぁ。とか、均等割付けしてほしいなぁ。と思う場合にはどうすんべな。とか思うのですが、それもあきらめました。
なので、 HTML で以下のように表示するようにしました。

test_pie1

これは簡単にできたのでコードを掲載してみます。

#!/usr/bin/perl

use strict;

use GD::Graph::pie;
use GD::Graph::colour qw( :files );
use GD::Text;

use Jcode;

GD::Graph::colour::read_rgb("./rgb.txt");

my @count  = qw(4 5 3 2 5);
my @color  = qw(OldLace OliveDrab OrangeRed PaleGoldenrod PaleTurquoise);
my @title  = (
    "1.長い文字列のデータ $count[0]",
    "2.長い文字列のデータ $count[1]",
    "3.長い文字列のデータ $count[2]",
    "4.長い文字列のデータ $count[3]",
    "5.長い文字列のデータ $count[4]",
);

#my @data = ([@title],[@count]);
my @data = ([@count],[@count]);

my $pie   = GD::Graph::pie->new(190,200);
$pie->set(title   => jcode("円グラフ")->utf8,
    axislabelclr  => 'black',
    dclrs         => [ @color ],
    pie_height    => 0,
    start_angle   => 180,
    transparent   => 0,
);

GD::Text->font_path("./");
$pie->set_title_font("ume-tgc4.ttf",8);
$pie->set_value_font("ume-tgc4.ttf",9);

my $image = $pie->plot(\@data);

my $graph = "./test_pie.png";
open( OUT,">$graph");
binmode OUT;
print OUT $image->png();
close OUT;

my $html = &make_title(\@title,\@count,\@color);

print "Content-type: text/html;charaset=utf-8\n\n";
print <<EOF;
<HTML>
<HEAD><META HTTP-EQUIV="Content-type" CONTENT="text/html;charset=utf-8"></HEAD>
<BODY>
<TABLE BORDER="0">
<TR><TD><IMG SRC="${graph}"></TD><TD>${html}</TD></TR>
</TABLE>
</BODY>
<html>
EOF

exit 1;

##
sub make_title {
    my ($title,$count,$color) = @_;

    my $c = 0;
    my $html = "<table bgcolor=\"#DCDCDC\" border=0 class=\"sen\">\n";
    foreach (@$title) {
        $html .= "<tr bgcolor=\"#FFFFFF\" class=\"font\">\n";
        $html .= "<td bgcolor=\"$color->[$c]\">$count->[$c]</td>\n";
        $html .= "<td>$title->[$c]</td>\n</tr>\n";
        $c++;
    }
    $html .= "</table>\n";

    return ($html);
}

 

メインルーチンはグラフを書くのに一生懸命になっていて、サブルーチンの make_title() では TABLE タグを利用していてダサいですが、円グラフのフィールドに書くべき文字列を別途表示するようにしました。
既に組み立てた配列のデータをそのまま利用しているので比較的容易に情報を別途表示することが可能になりました。
詳細についてはコードをじっくりと追ってみてください;-)。あ。 make_title() の中ではスタイルシートとかバシバシ書くと更に見栄えが良くなると思います。

とまぁ、こんな感じで文字列が長い円グラフもなんとか見栄え良く表示できるようになりました。めでたしめでたし;-)。

 
ちなみに上記のコード中で利用している rgb.txt は emacs や netpbm に含まれているモノを利用できます。フォントは ume-tgc4.ttf を利用していますが、これは ume フォントに含まれているモノを利用しました。

10月 202014
 

FreeBSD の ports-current を追いかけていると、いつの間にか mail/majordomo が削除されてしまいました。以前の ports ツリーから消える前の ports を眺めてみると Makefile に NO_STAGE= yes という記述があり、この記述があると BROKEN になってしまうんですね。

なので、 ports のメンテナの方も stage 対応にしないでそのまま ports ツリーから削除してしまったのでしょうなぁ。

僕自身は今でも majordomo を利用していて perl-5.16 対応にするのが大変だったりしているわけですが、まぁ、まだ使っているしねぇ。消えるのは悲しいねぇ。などと思った次第です。

 
メーリングリストの配信システムは、最近では mail/mailman があったりしますが apache までインストールしてしまうので仕掛けが随分と大げさになってしまいます。 もう一個、メーリングリスト配信システムとしては fml もあったりしますが、こちらも随分と古い(枯れている)し、 ports にはなってないし・・。
#上記のように書きつつ fml のサイトを見たらっ!! あいやっ!! 今てもメンテされているのですねぇ。失礼しました。 fml8 ですかっ!!
#あとは FreeBSD の ports になるのを待つばかり。でしょうか;-)。

さくらのレンタルサーバでは今でも fml が利用されているかな?

 
と、いうことで、いっちょ majordomo を stage 環境に対応させてみるかねぇ。などと思い ports を作ってみました。 ports ツリーから削除される前の majordomo の ports を参考にして、 stage 環境に対応してみました。

この majordomo の ports というのは内部でスクリプトをガシガシ動かしていて『ふむ。こりゃー stage 環境に移行するのは大変だわー。』などと思ったんですけどもねぇ・・。

以下の URL に stage 環境に対応した majorodomo の ports を置いたので、ノラ ports でも構わない。と、いう人がいましたら利用してみてください。

http://icmpv6.org/Prog/FreeBSD_ports/ports-majordomo-20141020.tgz

ちょっと ports の説明をすると、今まであったものからの変更点は以下になります。

1. Doc の下や man はバッサリと削除したのでインストールされません。
2. 古い ports では test-l というサンプル ML が用意されるのですが、それもインストールされません。
3. 今回 contrib/ というディレクトリ内に僕が改造して利用している sequencer を入れておきました。試してみたい方はインストールしてみてください。 make install ではインストールされません。

だいたいこんな感じでしょうか。 Makefile に ${INSTALL} をたくさん書くのが面倒だったのであまり必要でないものはインストールしないようにしました。それが Doc であり man であったりします;-)。

sequencer は Subject: ヘッダに ML 名を付けたり、番号を付加したりするものですが、日本語対応と Re: たくさん付く問題などの対応のために多少改修して使いやすくしています。

majordomo の ports がなくなって愕然としている人いましたらご利用頂ければと思います。

 
ちなみに、 portmaster -D -a 実行時に「majordomo なんて ports 知らないよ。」などと怒られる場合には以下の手順で回避することができます。

# mkdir -p /var/db/pkg/majordomo-1.94.5_8
# cp /dev/null /var/db/pkg/majordomo-1.94.5_8/+IGNOREME

 

こーすると、 portmaster 実行時には majordomo を無視してくれるようになります。

とまぁ、どちらにしても majordomo は前時代的だし、メーリングリスト自体もそもそも前時代的なモノになりつつあるのかもしれませんなぁ・・。

10月 112014
 

いやぁ。遅ればせながら、 iPhone6 を購入しました。予約無しでアキバのヨドバシカメラに並び始めたのが 15:45 で、ずいぶんと待ちました。店員さんの対応開始が大体 16:45 くらいでしょうか。実際に対応し始めてもらうとサクサクっと大体 30 分くらいで終了。

今回は Softbank の機種変更で、二年間みっちりと使った iPhon5 から iPhone6 に切り替えました。 iPhone6+ も考えたんだけど、結局、値段の一番安い iPhone6 の 16G で、色はスペースグレーにしました。
iPhone はやっぱり”黒”だろう。ってのが僕の中にあるのでねぇ・・。

で、 SoftBank では以前に利用したいたヤツの下取りと、僕の場合は 10,000yen 分の T ポイントがもらえるようです。一括で購入したので 5% のヨドバシのポイントが付くのと、僕はヨドバシのポイントが 5,000yen 分くらいあったのでそれをそのまま iPhone6 の代金に割り当てました。それでも 65,000yen ほどするので iPhone6 は随分と高価な端末ですねぇ。

と、いうか、ちょっと前に ZTE Blade Vec 4G を購入しているんですけどねぇ。とわいいつつ、一回大画面になれてしまうと中々 iPhone5 は利用できない。老眼には iPhone5 はツライでしょうか・・。f(^^;;。
しかし、 iOS もこれで画面がでかくなりました。

と、いうことで iPhone ファミリーの写真を;-)。

IMG_5201_iPhone6_1_1

僕は初代 iPod Touch から利用していて『うひ。iOS というのはすげーぞっ!!』ってんで、iPhone3G で出たタイミングですぐに飛びついた、自分でいうのもなんだけど、非常に IT リテラシーの高い人です;-P。あとは二年に一回ずつ無印の iPhone を買い換えていく。と、言う状態になっています。左から iPhone3G -> 4 -> 5 -> 6 と並んでいます。

こちらが裏側。

IMG_5208_iPhone6_1_2

初代から “s” 飛ばしですが、コツコツと貯めていったモノですね。下取りにも出さずに。今回はいよいよ下取りに出そうかとや持っているのでこの写真ももう最後になるかと思われます。

 
さて。まだ使い込んでいない iPhone6 ですが、iTunes 経由で iPhone5 のバックアップをそのまま適用したらサクっと利用できるようになりました。なので、みてくれとか特に変わったというようなこともなく、スルリと移行できた。と、いう感じでしょうか。
あとはサイズが大きくナッなって嬉しい。ってところで第一回目はシュウリョー。と、いうことで。あ。二回目があるかは解りませんが。