投稿日 2009年7月22日 水曜日 カテゴリ Python 投稿者 matsushitaコメントは受け付けていません。 

こんにちは。松下です。

ごくごく最近からですが、macを使って開発を行っています。

また、ごくごく最近からですが、pythonを使って開発を行っています。

macには標準で、python2.5.1が入っていましたが、3.0を使いたかったのでmac portsで3.0をインストールしました。

今度は2.4を仕事で使うことになったので、2.4をインストールしました。 用途によって、複数バージョンのpythonを使い分けていたのですが、結構面倒くさいです。

で、何かいい方法をないか探したところ、複数バージョンのpythonを切り替えることができるpython_selectというものを発見しました。

早速インストール。

$sudo port install python_select

以下のような方法で、バージョンを切り替えることができます。

$python_select python24
Selecting version "python24" for python

バージョンを確認すると、見事に切り替わってます。

$python -V
Python 2.4.6

バージョンの確認は以下のようにします。

$ python_select -l
Available versions:
none python24 python25 python25-apple python30

バージョンの切り替えが面倒だなと思っている方は是非お試しください。

投稿日 2009年7月21日 火曜日 カテゴリ Amazon EC2, EC2 投稿者 sugimotoコメント(0) » 

Amazon EC2 でインスタンスをいつでも複製/復元できるよう自分用のAMIを作成していたところ、ec2-bundle-vol に失敗しました。

-bash-3.2# ec2-bundle-vol -d /mnt -k xxxxx.pem -c xxxxx.pem  -u xxxx-xxxxx-xxxx
 Please specify a value for arch [i386]:
 Copying / into the image file /mnt/image...
 Excluding:
          /sys
          /proc
          /dev/pts
          /proc/sys/fs/binfmt_misc
          /dev
          /media
          /mnt
          /proc
          /sys
          /mnt/image
          /mnt/img-mnt
 1+0 records in
 1+0 records out
 1048576 bytes (1.0 MB) copied, 0.001797 seconds, 584 MB/s
 mke2fs 1.39 (29-May-2006)
 ERROR: execution failed: "rsync -rlpgoD -t -r -S -l --exclude /sys --exclude /proc --exclude /dev/pts --exclude /proc/sys/fs/binfmt_misc --exclude /dev --exclude /media --exclude /mnt --exclude /proc --exclude /sys --exclude /mnt/image --exclude /mnt/img-mnt -X /* /mnt/img-mnt 2>&1 > /dev/null"

つい1日前には同じインスタンスから実行できたのに。。。

rsync コマンドが実行エラーってなってます。 ec2-bundle-vol がrsyncコマンドを実行して、途中で失敗したようです。

ネットで調べてみると、rsyncコマンドの実行エラーで失敗する理由として、2つのパターンがあるようです。

1. volume保存用の領域が足りない

AMI保存用のイメージファイルを作成中にインスタンスのディスク領域を使いきった場合、エラーとなるようです。 この場合は、インスタンス内のいらないファイルを削除するしかないですね。。

2. rsync実行中にファイルが削除されたりしてしまった

rsyncコマンドの途中で対象となっているファイルやディレクトリが変更されると、コマンドが失敗します。

プログラムの動作中に ec2-bundle-vol を起動すると、rsyncコマンドが失敗してしまうことがあるということ。

エラーメッセージの中にあるrsyncコマンドを直接実行すると、どちらが原因かわかるようです。

-bash-3.2# rsync -rlpgoD -t -r -S -l --exclude /sys --exclude /proc --exclude /dev/pts --exclude /proc/sys/fs/binfmt_misc --exclude /dev --exclude /media --exclude /mnt --exclude /proc --exclude /sys --exclude /mnt/image --exclude /mnt/img-mnt -X /* /mnt/img-mnt
file has vanished: "/var/nagios/spool/checkresults/check1n3woE"
rsync warning: some files vanished before they could be transferred (code 24) at main.c(892) [sender=2.6.8]

/var/nagios/spool にあるファイルがなくなったということです。

nagiosはサーバー監視用のサービスですね。確かに昨日インストールしました。AMIを作成する間は、止めてしまいましょう。

sudo /etc/init.d/nagios stop

nagiosを止めたら ec2-bundle-vol コマンドが成功し、無事にAMIが作成できました。めでたしめでたし。

Daemon のようなプログラムは実行しているという認識が低いので、要注意ですね。

投稿日 2009年7月17日 金曜日 カテゴリ Trac 投稿者 omaeコメント(0) » 

omae です。

ブラウザで見てるページを TracWiki ですぐにリンクしたいな…というときに使っている bookmarklet を紹介します。といっても TracLink 形式の文字列を作って window.prompt() で表示するだけのものです。

javascript:(function(t,u){if(/\]|^[%22']/.test(t)){if(!/^%22/.test(t)&&!/"\]/.test(t)){t='%22'+t+'%22'}else%20if(!/'/.test(t)&&!/'\]/.test(t)){t=%22'%22+t+%22'%22}else{t="'"+t.replace(/'/g,'')+"'"}}prompt('copy','['+u+'%20'+t+']')})(document.title.replace(/[\x00-\x1f]+|^\s+|\s+$/g,''),location.href)

適当なページでこの bookmarklet を実行すると TracLink 形式の文字列が window.prompt() で表示されるので、コピーしてください。Firefox では windows.prompt() の代わりに window.alert() でもよいと思います。(選択可能なので)

この bookmarklet の内容ですが、まず TracWiki では [URL label] という形式でリンクを作成することが出来るようになっています。

[ で始まって ] で終わりを表すようになっているわけですので、label に ] を含んでいる場合にはそのまま書くことは出来ません。このような場合には

[http://example.com/ "Apple]["]
[http://example.com/ 'Apple][']

というようにして double-quote もしくは single-quote で囲ってあげることで記述できます。

囲われているかどうかは label 部分が double-quote もしくは single-quote で開始しているかどうかで判断されるので、double-quote で開始しているなら sinlge-quote で囲い、single-quote で開始しているなら double-quote で囲います。

とは言っても label で表現したい文字列が

"'Apple']["

というような場合、囲ったりするだけではどうしようもないのでこの bookmarklet ではそのような場合には single-quote ' を除去して single-quote で囲うようにしてあります。

ちなみにこの場合に bookmarklet から得られる文字列は

[http://example.com/ '"Apple]["']

になります。

投稿日 2009年7月16日 木曜日 カテゴリ ソフトウェア開発, プロジェクト管理 投稿者 syojiコメントは受け付けていません。 

近年、ソフトウェア開発の品質管理についてのセミナーやイベントが増えてきていると思う。これは官公庁などが数年前から言ってたことで、ソフトウェア産業の課題として「ソフトウェアの信頼性向上」がもっとも急がなければならない課題であると言われている。ことに関係してると思われる。

上の例は組込ソフトウェアを中心に業界全体について記述されているが、自分たちの一番身近なところでソフトウェアの品質管理に役立つであろう、Excel テンプレートを公開したいと思う。

当社のようにエンタープライズ系のソフトウェアを開発している企業においても、課題管理、障害管理、バグ管理といわれる情報を簡単に確実に管理することは、開発の効率化やバグを漏らさずに修正し、品質の向上につながると考えている。 特に

  • バグの発生日、発見者、再現方法、対応者、対応内容、テスト状況等の情報管理
  • ソースコードの変更、改修内容、改修理由

を追跡できることが重要である。

バグ管理のためのシステム「バグトラッキングシステム」があるが(実際に当社の開発では利用している)いきなり、バグトラッキングシステムと言っても導入までの手順や仕組みを理解する必要があり、障壁は高い。

そこで、「もっと簡単に、だれでも、すぐに」バグ管理をはじめることができる、MS Excel テンプレートを公開する。

バグ管理をするために最低限必要なこととして

  • 起票日 障害を発見した日を入力する
  • 起票者 障害を発見した人の名前を入力する
  • 区分 バグか課題か要望なのか・・・を決める
  • 状態 バグが発生した後、現在の状態「未着手」「完了」「対応なし」などを管理するための場所
  • 内容 バグの再現方法や発生状況をわかりやすく書く場所

ここまでの情報がバグを報告する人が記入する内容である。

バグに対して、開発者側の項目として

  • 担当(チーム、人) だれが担当するのか名前を入力する
  • 回答日/対応日 バグに対して回答した日を入力する
  • 対応内容 対応した内容を出来るだけ分かりやすく入力する

20090716

簡単にということで項目を挙げていったが、多くなってしまった。

実際に開発現場で運用する場合、もっと多くの項目が必要になると思われる。 もし利用されるという方は、自分たちの環境やワークフローに合わせてカスタマイズしてもらえればと思う。

ダウンロードはこちら(template_bts.zip)

Microsoft Excel 2003 にて確認。 NOD32(2009/07/16)でウィルスチェック済み
投稿日 2009年7月15日 水曜日 カテゴリ javascript 投稿者 matsushitaコメントは受け付けていません。 

Flotってご存知ですか

こんにちは。松下です。

みなさんはFlotというjqueryベースのjavascriptグラフ描画ライブラリををご存知でしょうか?

データ形式はjsonで行うことができ、flashベースのOpenFlashChartのように複雑なことはできないですが、きれいなグラフを簡単に描画することができます。

データのやり取りがjson形式で行うためサーバ側でデータをjsonに加工すれば、あとはライブラリがプロットするだけなので、扱いがかなり楽です。

flot sample

簡単なHow toをご紹介したいと思います。

まずは簡単に描画してみる

描画の仕方は、flotの描画ライブラリの呼び出し( $.plot()) 行うだけです。 以下に例を示します。ここでは、第一引数で描画を行う場所、第二引数でデータを設定してライブラリを呼び出しています。

var d1 = [
            [1, 96],
            [2, 89],
            [3, 85],
            [4, 90],
            [5, 87],
            [6, 86],
            [8, 83],
            [9, 86],
         ];
var d2 = [
            [1, 137],
            [2, 135],
            [3, 130],
            [4, 129],
            [5, 120],
            [6, 124],
            [8, 125],
            [9, 126],
         ];

var data_list = [];
data_list[data_list.length] = {label: "low", data:d1};
data_list[data_list.length] = {label: "high", data:d2};

$.plot($("#placeholder"), data_list);

flot sample1

棒グラフも描画することが可能です。

var d1 =  [
        [1950, 2535093],
            [1955, 2770753],
            [1960, 3031931],
            [1965, 3342771],
            [1970, 3698676],
            [1975, 4076080],
            [1980, 4451470],
            [1985, 4855264],
            [1990, 5294879],
            [1995, 5719045],
            [2000, 6124123],
            [2005, 6514751],
            [2010, 6906558],
            [2015, 7295135],
            [2020, 7667090],
            [2025, 8010509],
            [2030, 8317707],
            [2035, 8587050],
            [2040, 8823546],
            [2045, 9025982],
            [2050, 9191287]
        ];

var data_list = [];
data_list[data_list.length] = {label:'total', data:d1};

var options = {
    bars: {
    show: true,
    barWidth: 3,
    align: "center"
  }
};

$.plot($("#bar_placeholder"), data_list, options);

棒グラフ

判例の位置を変える

flotのコードをみると、判例で指定可能なオプションは以下のようになっています。 このうち、position、及びcontainerオプションを使うことで位置の変更をすることが可能です。 positionオプションは、

legend: {
    show: boolean,
    labelFormatter: null or (fn: string -> string),
    labelBoxBorderColor: color,
    noColumns: number,
    position: "ne" or "nw" or "se" or "sw",
    margin: number of pixels,
    backgroundColor: null or color,
    backgroundOpacity: number in 0.0 - 1.0,
    container: null or jQuery object
}

positionオプションは、凡例を領域内で任意の位置に表示ためのオプションで、以下の内容に設定することが可能です。

  • neが右上
  • nwが左上
  • seが右下
  • swが左下

コードでは以下のようにして指定します。このコードでは、左下に配置しています。

var data list = [];
.
.
[略]
.
.

var options = {
    legend:{position:'sw'}
};
$.plot($("#placeholder"), data_list, options);

判例の位置を変える

containerオプションは、判例を表示するコンテナでデフォルトnullで、グラフの描画領域内に表示されます。 containerオプションを使うことで判例の表示をグラフ描画領域外に配置することが可能です。

以下にコードサンプルを示します。

var data list = [];
.
.
[略]
.
.
var options = {
    legend:{container: $("#container")}
};
$.plot($("#placeholder"), data_list, options);

描画領域外に判例を表示する

最後にもう一つ。noColumnsオプションを指定することで、横並びにしたい判例の数を指定できます。 デフォルトでは、判例はすべて縦方向に展開されますが、このオプションを指定することで、同じ行に2個、3個と表示することが可能になります。

以下にコードサンプルを示します。ここでは、1行に2個判例を表示するように設定しています。

var data list = [];
.
.
[略]
.
.
var options = {
    legend:{noColumns: 2}
};
$.plot($("#placeholder"), data_list, options);

判例を横並びにする

いかがでしょうか。ブラウザでグラフを扱いたい方は是非おすすめします。

機会があれば、その他のいろいろな使い方をご紹介したいと思います。

« 前ページへ次ページへ »