Feb 08, 2010 (Mon) この日を編集
_ Rapache (mod_r) を使って R で CGI を書くよ。グラフ画像出力編
前回のつづきです。前回は rapache の設定と簡単なCGIを作ってみました。今度は画像を出力して表示する CGI を作ります。内容は、乱数を適当に作ってヒストグラムを作画するCGIです。画像はランダムなファイル名で保存します。
# Functions
header <- function(contenttype) {
setContentType(contenttype)
}
html.head <- function(content) {
cat("<head>\n")
cat(content)
cat("</head>\n")
}
html.body <- function(content) {
cat("<body>\n")
cat(content)
cat("</body></html>\n")
}
randomFileName <- function(prefix, postfix) {
filename <- paste(
prefix,
sprintf("%08d", as.integer(runif(1, 0, 10^7))),
postfix,
sep=""
)
return(filename)
}
# Main
image_dir <- "/var/www/images"
filename <- randomFileName("hist_", ".png")
filepath <- paste(image_dir, filename, sep="/")
data <- rnorm(1000)
# output html
header("text/html")
html.head("<title>Test</title>")
png(filepath)
hist(data)
dev.off()
html.body(
paste(
'<img src="/images/',
filename,
'">',
sep=""
)
)
リロードすると画像が変わるのがわかると思います。次回はもっと役に立つものを作ってみます。
寧々さんかわいいです。
_ Rapache (mod_r) を使って R で CGI を書くよ。テンプレートエンジンBrew編
前回は寧n、いえ、なんでもないです、前回のコードでは、cat() を使ってがんばってHTMLタグを出力していました。これは気持ち悪いです。RのコードとHTMLのコードを分けておかないと、どちらかに変更があった場合に、お互いの影響に配慮しながら修正をしなければならなくなります。これは面倒ですね。
こんなときは、テンプレートエンジンを使って、HTMLを作る部分とRのコードをなるべく分けるのが良いですね。R にも Ruby でいうところの erb のようなテンプレートエンジンがあります。今回は、brew というテンプレートフレームワークを使います。
brewのインストールと設定
まず brew をインストールします
sudo R
install.pakcages("brew")
q()
次に apache の設定をします。
sudo mkdir /var/www/brew sudo jed /etc/apache2/sites-available/default
RHandler に brew を設定します。
# brew
<Directory /var/www/brew>
#SetHandler r-handler
SetHandler r-script
RHandler brew::brew
</Directory>
前回のコードを brew を使って書き直してみます。まずメインのコードです。
cd /var/www/brew sudo jed index.r
ほぼHTMLですね。プロット部分を別なファイル hist.r に追い出しています。brew() でこれを読み込みます。
<% setContentType('text/html') %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html>
<head><title>Test</title>
</head>
<body>
<% brew('/var/www/brew/hist.r') %>
</body>
</html>
プロットを描画するコード hist.r は以下の通り。ほぼ R のコードですね。このコードは画像を作り、最終的にはその画像のパスが入った img タグを作ります。
<%
randomFileName <- function(prefix, postfix) {
filename <- paste(
prefix,
sprintf("%08d", as.integer(runif(1, 0, 10^7))),
postfix,
sep=""
)
return(filename)
}
image_dir <- "/var/www/images"
filename <- randomFileName("hist_", ".png")
filepath <- paste(image_dir, filename, sep="/")
data <- rnorm(1000)
png(filepath)
hist(data)
dev.off()
%>
<img src="/images/<%=filename%>">
http://localhost/brew/index.r にアクセスすると前回と同じようにヒストグラムが表示されます。リロードするとグラフが変わるのを確認してみてください。
これで「HTMLを組む」コードと「計算しプロットを作図する」コードがだいぶ分かれて見通しが良くなりました。次回こそなにか役に立つものを作ってみたいと思います。
Feb 07, 2010 (Sun) この日を編集
_ Rapache (mod_r) を使って R で CGI を書くよ。Hello, World編
みなさん、こんばとらー。仕事で遺伝子発現データベースを作っているのですが、表示するグラフが Pixiv が保有する全イラスト数である490万枚 (2009/06発表) を越えてしまいました、やりました!(なにが? 所内の内部向けなので、PVが数百ですがw むこうは2億PV。
画像を吐くために Sun Grid Engine で PC クラスタをぶんまわしたりしています、頭わるいですね。数値データをグラフにするだけなので、WWWサーバで on the fly でグラフを描画すべきなのですが、サーバが Celeron, メモリ 800MB というという有様だったので躊躇していました。今回は新しいサーバに引っ越したので、R で on the fly 描画にトライしたいと思います。
まずは mod_R, いわゆる rapache というまぎらわしい名前のパッケージをセットアップし動作するところまでやってみましょう。環境は Ubuntu 9.10 です。
rapache のインストール
まず、R を apt の source list に入れる。これで apt で最新の R を入れ放題。
deb http://cran.r-project.org/bin/linux/ubuntu intrepid/
次に rapache と関連パッケージを入れます。
apt-get install r-base-dev apache2-mpm-prefork apache2-prefork-dev wget http://biostat.mc.vanderbilt.edu/rapache/files/rapache-latest.tar.gz rapachedir=`tar tzf rapache-latest.tar.gz | head -1` tar xzvf rapache-latest.tar.gz cd $rapachedir ./configure make sudo make install
rapacheの設定
それでは Apache の設定をしましょう。最近は Ruby on Rails を使うので Apache の設定はひさしぶりです。
sudo emacs -nw /etc/apache2/mods-available/R.load LoadModule R_module /usr/lib/apache2/modules/mod_R.so
sudo emacs -nw /etc/apache2/mods-available/R.conf
<IfModule mod_R.c> ROutputErrors
<Location /RApacheInfo>
SetHandler r-info
</Location>
</IfModule>
cd /etc/apache2/mods-enabled sudo sudo ln -s ../mods-available/R.load sudo sudo ln -s ../mods-available/R.conf
Apache を再起動する。
sudo /etc/init.d/apache2 restart * Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ...done.
これで apache の設定は完了。
http://localhost/RApacheInfo/
にアクセスするとサーバーの状態が表示されます。

RでCGIを書いてみる
さっそく、Hello, world しましょう。
まずは Apache の設定をします。
sudo jed /etc/apache2/sites-available/default
# rapache
<Directory /var/www/rapachetest>
SetHandler r-handler
RFileHandler /var/www/R/test.R
</Directory>
sudo mkdir /etc/www/R sudo mkdir /etc/www/rapachetest cd /etc/www/R
Hello, world のコード書きます。
sudo jed test.R
# Functions
header <- function() {
setContentType("text/html")
}
html.head <- function(content) {
cat("<head>\n")
cat(content)
cat("</head>\n")
}
html.body <- function(content) {
cat("<body>\n")
cat(content)
cat("</body></html>\n")
}
# Main
header()
html.head("<title>Test</title>")
html.body("Hello, world!\n")
以下にアクセスします。 http://localhost/rapachetest/

これで終了です。今回は rapache の設定と hello, world をやってみました。次回はグラフを画像を吐いてみます。
Nov 19, 2009 (Thu) この日を編集
_ 理化学研究所の最新の成果をお伝えするついったーbotを作りました #shiwake3
事業仕分け関連の議論では、研究者のアウトリーチへの努力不足が言われているようです。大学や研究所でウェブや新聞などで成果発表するよう努力しているようですが、あまり届いていないようです。そもそもRSSも吐かないようなサイトが多く、これでは定点観測することは技術的にも無理があります。これを一般のひとやサイエンスファンのかたに強いるかたちになっているのが現状です。
一方、ついったーは情報の伝達が速いだけでなく、伝搬する範囲がとても広くヘテロだと思います。これは気軽にアカウントをフォローしたり、RTのように気軽に発言を転送する文化があるからでしょう。またRSSも出力するのでRSSリーダーで追いかけることも可能です。
というわけで、自分が所属している理化学研究所のプレスリリースを自動的についったーに流すプログラム (bot) を「非公式に」作成しました。研究者はもとより、サイエンスファンのみなさまにフォローして頂いて、気軽にRTしてもらえればと思います。現在のところは、今回話題になったNSC(スパコン)やSpring8、PSC(植物センター)と生命分子システム(ターゲットタンパク)、感染症研究ネットワーク支援センターに加え、免疫、生命情報基盤、ゲノム医学、CDB(発生・再生), OSC(ゲノム)のニュースを配信しています。近々、全所のニュースを配信する予定です。
日経バイオテクノロジーのヘッドラインを流す http://twitter.com/nikkei_btj もあわせてどうぞ。BTJには、アカデミアのひとはワンコインで全文が見れるサービスもあります。業界紙は減る一方の苦しい戦いを強いられているのではないでしょうか、蛋白質・核酸・酵素は休刊するそうです。育てるつもりで加入してあげてください。
追記: あ、あれ? nikkei_btj 動いてない>< サーバ死んでる、近々直しますね。サーバの電源落ちてました。起動して様子みます。
追記: SPring8 のプレスリリースも追加しました。
追記: 次世代スーパーコンピュータ開発実施本部のプレスリリースも追加しました。
追記 (20091120): 今回仕分けの対象になった植物センターと生命分子システム(ターゲットタンパク)、感染症研究ネットワーク支援センターを加えました。さらに、免疫、生命情報基盤、ゲノム医学も加えました。
Nov 15, 2009 (Sun) この日を編集
_ 科研費削減の反対署名活動が始まっています #shiwake3
ほかにも、賛成・反対に関わらず、事業仕分けに対して具体的なアクションを興している団体・サイトを探しています。事業仕分けWS3まとめWiki までお知らせください。
Nov 14, 2009 (Sat) この日を編集
_ 「事業仕分けWS3 まとめウィキ」ができています #shiwake3
ぼうのうさんが事業仕分けWS3 まとめウィキを立ててくれました。ありがとうございます。この手のコンテンツはユーザーが編集に参加しないと意味がないと個人的には思っています。よって、かなりページの構造を修正してコンテンツを追記してみました。みなさんもどうぞ。
理想的にはあらゆる情報がここに集まるようになって、それぞれが考えたり行動したりするための情報リソースになったらいいなと思っています。
Nov 13, 2009 (Fri) この日を編集
_ 「定量生物学の会」第二回年会の"参加登録開始" #q-bio2010
「定量生物学の会」第二回年会の参加登録を開始しました。すでに定員の半分が埋まっていますのでお早めにどうぞ!
現在、分子生物学・発生生物学・生物物理学・そして理論生物学など生命科学研究の各領域において、「定量的な方法論で新しい生命像を構築する」という活動が将来を担う大きな方向性として相互依存的に浮上しつつあります。定量生物学の会はこうした背景を受けて、定量性を高く意識した生命科学について、その方向性や解決すべき点などを具体的な問題設定のもとで議論する場として、昨年から本格的に活動を開始しました。幅広いバックグランドの研究者が集い、オープンな雰囲気で議論を進めています。
第二回年会のプログラムの詳細などは下記URLをご覧下さい。
Oct 31, 2009 (Sat) この日を編集
_ Twitterのリスト機能を使ってバイオ関連のアカウントを集めてみた
「バイオ関連の Twitter アカウントのリストをつくったよ」 にあるアカウントをすべてリストに追加してみました。ご自由にフォロー、どうぞ。
リンクは誰にも妨げられないあなたの権利です。お好きにどうぞ。
CC 表示2.1 日本
このサイトの各種商品のリンクは
Amazonアソシエイトや楽天アフィリエイト
を利用している場合があります。