Your SlideShare is downloading. ×
RでつくるWebアプリ~rApache編~
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

RでつくるWebアプリ~rApache編~

4,145
views

Published on

Rでろくろを回してみようとした

Rでろくろを回してみようとした

Published in: Career

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,145
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Rで作るWebアプリ rApache編 ~featuring ROKURO~ 2012/05/26 Tokyo.R#23 和田 計也サイバー系
  • 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属す る組織の公式見解で はありません。2012/5/26 1
  • 3. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  最近は大きなグラフの仕事してます  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究2012/5/26 2
  • 4. サイバー系 初めに 夏野剛 R2.0 2004/10 DoCoMo2.0 2007/04 Tim OReilly Web2.0 2005 T Nakagawa, et al. RoKuRo2.0 John Schwartz 2012/05 BI2.0 2007/052012/5/26 3
  • 5. サイバー系 アメーバピグで遊んでみた2012/5/26 4
  • 6. サイバー系 ろくろを回すWebアプリをつくる  最初に  別にブラウザ上でろくろ回さなくても良くね?とか言わない  概要  rApache  RookとrApacheの関係  RookアプリのrApacheへのデプロイ  ろくろ回し2012/5/26 5
  • 7. サイバー系 準備 ##Ubuntu 12.04上で構築しました #Rのインストール sudo apt-get install r-base r-base-dev #Rookライブラリのインストール sudo R install.packages(“Rook”, lib=“/usr/local/lib/R/site-library”) #rglライブラリのインストール sudo apt-get build-dep r-cran-rgl sudo R install.packages(“rgl“, lib=“/usr/local/lib/R/site-library”)2012/5/26 6
  • 8. サイバー系 準備 ##Ubuntu 12.04上で構築しました #Apache関連のモジュールインストール sudo apt-get install apache2-mpm-prefork apache2- prefork-dev #rApache(mod_R)のインストール wget http://www.rapache.net/rapache-1.1.20.tar.gz tar xzvf rapache-1.1.20.tar.gz cd rapache-1.1.20 ./configure make sudo make install2012/5/26 7
  • 9. サイバー系 rApacheを動かしてみる ##Ubuntu 12.04上で構築しました #mod_Rモジュールのインポート設定 vi /etc/apache2/mods-enabled/r.load #↓のように1行書く LoadModule R_module /usr/lib/apache2/modules/mod_R.so #rApache(mod_R)の設定 vi /etc/apache2/mods-enabled/r.conf #↓のように3行書く <Location /RApacheInfo> SetHandler r-info </Location> #apacheにRモジュールを追加 sudo a2enmod r #apache再起動 sudo /etc/init.d/apache2 reload2012/5/26 8
  • 10. サイバー系 rApacheでthe world ##Ubuntu 12.04上で構築しました #rApache(mod_R)の設定 vi /etc/apache2/mods-enabled/r.conf #↓のように4行書く <Location /world> cat(“<html><body><h1>the world</h1></body></html>”) SetHandler r-handler SetFileHandler /home/wdkz/world.r </Location> #apache再起動 sudo /etc/init.d/apache2 reload2012/5/26 9
  • 11. サイバー系 RookとrApacheの整理 Rook rApache 一言 簡単にWebアプリ作れるよ Apache上でR動かすよ 対応OS Win, MacOSX, Linux MacOSX, Linux インストール CRAN wget configure make make install 特長 お手軽 信頼のApache 欠点 Webサーバがとにかくよく落 何かと面倒 ちる 最後に 何て読むの? Rookをデプロイ出来る! 作者2012/5/26 10
  • 12. サイバー系 (おさらい)RookによるWebアプリ Rook.holiday <- function(env) { source("holiday.R") req = Rook::Request$new(env) 入力formとか結果表示 res = Rook::Response$new() はhtmlで力業で書く res$write(いつ?:¥n) res$write(<form method="POST">¥n) res$write(<input type="text" name="xdim" value="2012">¥n) res$write(<input type="submit" name="Go", value="holiday">¥n</form>¥n<br>) if (!is.null(req$POST())) { y <- req$POST()[["xdim"]] #テキストフォームの入力値を取得 holidays <- holiday(y) #holiday関数の結果を取得 res$write("<p>") if(length(holidays)==1){ res$write(as.character(holidays)) }else if(is.matrix(holidays)){ for(i in 1:nrow(holidays)){ res$write(paste(as.character(holidays[i,1]), "<br>¥n", sep="")) } }else{ for(i in 1:nrow(holidays)){ res$write(paste(as.character(holidays[i,1]), " | ", as.character(holidays[i,2]), "<br>",sep="")) } } res$write("</p>") } res$finish() }2012/5/26 11
  • 13. サイバー系 (おさらい)RookによるWebアプリ  Rook内蔵Webサーバ起動部分 holiday.start <- function(){ s <<- Rhttpd$new() #グローバル領域に変数を作成 #前ページで定義したRook.holiday関数にholidayと名付けて s$add(app = Rook.holiday, name = “holiday”) s$start() s$browse(“holiday”) #Rook.holiday関数を呼び出す } これで、デフォルトブラウザが起動する2012/5/26 12
  • 14. サイバー系 rApacheにRookアプリをデプロイする #rApache(mod_R)の設定 vi /etc/apache2/mods-enabled/r.conf #↓のように4行書く URL 先ほどのRook.holiday関数を定義した <Location /holiday> ファイル名がholiday.R SetHandler r-handler RFileEval /home/wdkz/holiday.R:Rook::Server$call(Rook.holiday) </Location> html表示させる関数名 #apache再起動 sudo /etc/init.d/apache2 reload2012/5/26 13
  • 15. サイバー系 ろくろ回し全容本当はやりたかったこと 出来上がったもの ろくろ 画像 ろくろ 画像 パラメータ ファイル パラメータ ファイル rglパッケージのplot3d, rglパッケージのplot3d, writeWebGL writeWebGL で静的にろくろ生成 で動的にろくろ生成 ブラウザ上で回す(WebGL) ブラウザ上で回らない(WebGL)2012/5/26 14
  • 16. サイバー系 (参考)ろくろ描写部分x <- y <-100:100f <- function(x,y){x^2+y^2}z <- outer(x,y,f)z[which(z>(max(x)^2))] <- NA ここら辺、強引にz軸座標決めてるfor(i in 1:ncol(z)){ z[which(max(z[,i],na.rm=TRUE)==z[,i]),i] <- max(z, na.rm=TRUE)}for(i in 1:nrow(z)){ z[i,which(max(z[i,],na.rm=TRUE)==z[i,])] <- max(z, na.rm=TRUE)} バックグラウンドの透過度MAXbg3d(alpha=0)persp3d(z, col="green", xlab="", ylab="", zlab="", axes=FALSE, box=FALSE, aspect=c(1,1,0.9), texture="ameba_s.png")writeWebGL(width=500, height=500) テクスチャを入れる WebGLを書き出す 緩募: 回転体の 生成方法2012/5/26 15
  • 17. サイバー系 html部分_Rookで書いてますrokuro.html <- function(env){ req <- Rook::Request$new(env) ここら辺で入力フォーム書いてる res <- Rook::Response$new() res$write(<form name="form1", method="POST" enctype="multipart/form-data">¥n) res$write(<input type="file" name="data">¥n<br><br>¥n) res$write(お前は今まで食ったパンの枚数を覚えているのか:¥n) res$write(<input type="submit" name="Go", value="Rokuro!">¥n</form>¥n<br>¥n) if(!is.null(req$POST())){ f.name <- req$POST()[[“data”]]$tempfile #POSTの値取得 res <- Rook::Response$new() #新しい画面に f.name2 <- strsplit(paste(f.name, ".jpg", sep=""), "/") f.name2 <- f.name2[[1]][length(f.name2[[1]])] full.name2 <- paste("/tmp/", f.name2, sep="") file.copy(from=f.name, to=full.name2) pic.size <- read.jpeg(full.name2)#入力画像の縦横値取得 f.rename <- paste(as.integer(Sys.time()), “.html”, sep=“”)#適当なファイル名 write.rokuro(f.rename, full.name2, dim(pic.size)[1], dim(pic.size)[2])#WebGL出力 res$write(paste(‘<meta http-equiv=“Refresh” content=“0; URL=’, s$full_url(‘pic’), ‘/‘, f.rename, ’”>’, sep=‘’))#WebGLのページにリダイレクト } res$finish()}2012/5/26 16
  • 18. サイバー系 ろくろアプリ(Rook)をrApacheにデプロイする #rApache(mod_R)の設定 vi /etc/apache2/mods-enabled/r.conf #↓のように4行書く URL 先ほどのRook.holiday関数を定義した <Location /rokuro> ファイル名がholiday.R SetHandler r-handler RFileEval /home/wdkz/rokuro.R:Rook::Server$call(rokuro.html) </Location> html表示させる関数名 #apache再起動 sudo /etc/init.d/apache2 reload2012/5/26 17
  • 19. サイバー系 ろくろDemoない 注:ろくろはマウスで グリグリやって回す2012/5/26 18
  • 20. サイバー系 今回の反省点  ろくろの描写も都度都度したかった  mod_RからX11が使えなくて、plot3d → writeWebGLコ ンボが動的に使えなかった 緩募: mod_Rから X11使う方法  ろくろを回したかった  rglのspin3dなら、R上なら回るんだけどwriteWebGLで WebGLに書きだしても自動で回らない (2012/05/26現在)  ろくろというか、ノッポさんの帽子になっちゃった  手抜きしすぎたな2012/5/26 19
  • 21. サイバー系 (まとめ)RをWebアプリ化するには ①Rでサクサクっとスクリプトを書く ↓ ②RookでサクサクっとWebアプリ化 ↓ ③rApacheにサクサクっとデプロイ で ろくろを回そうとしてみた話おしまい。2012/5/26 20