google app engine for java (手嶋屋勉強会)
DESCRIPTION
バレンタインまでに最速で彼女をつくる方法TRANSCRIPT
![Page 1: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/1.jpg)
GoogleApp Engine
for Java
~バレンタインまでに最速で彼女をつくる方法~手嶋屋 深町英太郎
![Page 2: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/2.jpg)
![Page 3: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/3.jpg)
•最近Clojureを始めました
![Page 4: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/4.jpg)
•最近Clojureを始めました
•ClojureはJavaVMで動く大変クールなLisp
![Page 5: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/5.jpg)
•最近Clojureを始めました
•ClojureはJavaVMで動く大変クールなLisp
•ただ動くサーバがない
![Page 6: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/6.jpg)
•最近Clojureを始めました
•ClojureはJavaVMで動く大変クールなLisp
•ただ動くサーバがない
•「それAppEngineで動くよ」
![Page 7: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/7.jpg)
•最近Clojureを始めました
•ClojureはJavaVMで動く大変クールなLisp
•ただ動くサーバがない
•「それAppEngineで動くよ」
•えっ
![Page 8: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/8.jpg)
![Page 9: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/9.jpg)
•Google App Engine始めました
![Page 10: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/10.jpg)
•Google App Engine始めました
•Google App Engineとは
![Page 11: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/11.jpg)
•Google App Engine始めました
•Google App Engineとは
•Googleが提供するWeb Application Platform
![Page 12: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/12.jpg)
•Google App Engine始めました
•Google App Engineとは
•Googleが提供するWeb Application Platform
•略してGAE
![Page 13: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/13.jpg)
•Google App Engine始めました
•Google App Engineとは
•Googleが提供するWeb Application Platform
•略してGAE
•読み方は がえ
![Page 14: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/14.jpg)
Google App Engine
![Page 15: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/15.jpg)
• Webアプリケーションを公開できる
Google App Engine
![Page 16: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/16.jpg)
• Webアプリケーションを公開できる
•無料で (500万PV/月、容量500MBまで)
Google App Engine
![Page 17: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/17.jpg)
• Webアプリケーションを公開できる
•無料で (500万PV/月、容量500MBまで)
• PythonとJavaのみをサポート
Google App Engine
![Page 18: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/18.jpg)
• Webアプリケーションを公開できる
•無料で (500万PV/月、容量500MBまで)
• PythonとJavaのみをサポート
•もしくはJVMの言語、JRuby, Clojure, Scala, Groovy, Rhino,
Quercus...
Google App Engine
![Page 19: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/19.jpg)
• Webアプリケーションを公開できる
•無料で (500万PV/月、容量500MBまで)
• PythonとJavaのみをサポート
•もしくはJVMの言語、JRuby, Clojure, Scala, Groovy, Rhino,
Quercus...
• http://en.wikipedia.org/wiki/List_of_JVM_languages
Google App Engine
![Page 20: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/20.jpg)
何を作る?
![Page 21: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/21.jpg)
•何か作ろうと思う
何を作る?
![Page 22: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/22.jpg)
•何か作ろうと思う
•カヤックの外村さんのブログを読むなど
何を作る?
![Page 23: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/23.jpg)
•何か作ろうと思う
•カヤックの外村さんのブログを読むなど
•「そうだ、彼女をつくろう」
何を作る?
![Page 24: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/24.jpg)
だけど...
![Page 25: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/25.jpg)
だけど...
•せっかくだから手嶋屋で使えるものがいいよね
![Page 26: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/26.jpg)
だけど...
•せっかくだから手嶋屋で使えるものがいいよね
•手嶋屋で使えるもの...
![Page 27: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/27.jpg)
だけど...
•せっかくだから手嶋屋で使えるものがいいよね
•手嶋屋で使えるもの...
•手嶋屋っぽいもの...
![Page 28: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/28.jpg)
だけど...
•せっかくだから手嶋屋で使えるものがいいよね
•手嶋屋で使えるもの...
•手嶋屋っぽいもの...
•手嶋屋と言えば...
![Page 29: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/29.jpg)
だけど...
•せっかくだから手嶋屋で使えるものがいいよね
•手嶋屋で使えるもの...
•手嶋屋っぽいもの...
•手嶋屋と言えば...
•手嶋屋と言えば、國忠さん だよね
![Page 30: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/30.jpg)
だけど...
•せっかくだから手嶋屋で使えるものがいいよね
•手嶋屋で使えるもの...
•手嶋屋っぽいもの...
•手嶋屋と言えば...
•手嶋屋と言えば、國忠さん だよね
![Page 31: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/31.jpg)
そうだ、國忠さんをつくろう
![Page 32: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/32.jpg)
國忠さんとは
![Page 33: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/33.jpg)
國忠さんとは•誰もが知る最速道を極める者
![Page 34: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/34.jpg)
國忠さんとは•誰もが知る最速道を極める者
•最速道とは
![Page 35: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/35.jpg)
國忠さんとは•誰もが知る最速道を極める者
•最速道とは
•抜く
![Page 36: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/36.jpg)
國忠さんとは•誰もが知る最速道を極める者
•最速道とは
•抜く
•斬る
![Page 37: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/37.jpg)
國忠さんとは•誰もが知る最速道を極める者
•最速道とは
•抜く
•斬る
•納める
![Page 38: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/38.jpg)
國忠さんとは•誰もが知る最速道を極める者
•最速道とは
•抜く
•斬る
•納める
•モテる
![Page 39: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/39.jpg)
最速道はリア充に通ず。
![Page 40: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/40.jpg)
@kunitada_bot
![Page 41: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/41.jpg)
@kunitada_bot
•抜く : 手嶋屋のツイートからランダムに選ぶ
![Page 42: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/42.jpg)
@kunitada_bot
•抜く : 手嶋屋のツイートからランダムに選ぶ
•斬る : 最速化(kunitadize)する
![Page 43: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/43.jpg)
@kunitada_bot
•抜く : 手嶋屋のツイートからランダムに選ぶ
•斬る : 最速化(kunitadize)する
•納める : 結果をツイートする
![Page 44: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/44.jpg)
@kunitada_bot
•抜く : 手嶋屋のツイートからランダムに選ぶ
•斬る : 最速化(kunitadize)する
•納める : 結果をツイートする
•モテる : フォロワーが増える
![Page 45: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/45.jpg)
準備
![Page 46: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/46.jpg)
準備
![Page 47: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/47.jpg)
準備
•今回はJRubyを使うことに
![Page 48: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/48.jpg)
準備
•今回はJRubyを使うことに
• RubyGems (v1.3.5) をインストールする
![Page 49: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/49.jpg)
準備
•今回はJRubyを使うことに
• RubyGems (v1.3.5) をインストールする
• sudo gem install google-appengine
![Page 50: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/50.jpg)
準備
•今回はJRubyを使うことに
• RubyGems (v1.3.5) をインストールする
• sudo gem install google-appengine
• mkdir kunitada-bot
![Page 51: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/51.jpg)
準備
•今回はJRubyを使うことに
• RubyGems (v1.3.5) をインストールする
• sudo gem install google-appengine
• mkdir kunitada-bot
• cd kunitada-bot
![Page 52: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/52.jpg)
準備
![Page 53: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/53.jpg)
準備
• vi Gemfile
![Page 54: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/54.jpg)
準備
• vi Gemfile
• vi config.ru
![Page 55: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/55.jpg)
準備
• vi Gemfile
• vi config.ru
• vi main.rb
![Page 56: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/56.jpg)
準備
• vi Gemfile
• vi config.ru
• vi main.rb
• appcfg.rb bundle .
![Page 57: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/57.jpg)
準備
• vi Gemfile
• vi config.ru
• vi main.rb
• appcfg.rb bundle .
• JRubyやSinatraなどのGemモジュールなどを自動でDL
して同梱してくれる
![Page 58: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/58.jpg)
構造把握
![Page 59: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/59.jpg)
構造把握
![Page 60: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/60.jpg)
構造把握
• GAE/Jではスクリプトを直接叩けない
![Page 61: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/61.jpg)
構造把握
• GAE/Jではスクリプトを直接叩けない
• URLでアプリケーションの区別を行う
![Page 62: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/62.jpg)
構造把握
• GAE/Jではスクリプトを直接叩けない
• URLでアプリケーションの区別を行う
• Sinatraを使って最速で記述
![Page 63: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/63.jpg)
構造把握
• GAE/Jではスクリプトを直接叩けない
• URLでアプリケーションの区別を行う
• Sinatraを使って最速で記述
require 'rubygems'require 'sinatra'
get '/' do 'Hello World!!'end
get ‘/kunitadize’ do # 処理を記述end
(main.rb)
![Page 64: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/64.jpg)
抜く
![Page 65: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/65.jpg)
Twitter APIでTL取得
![Page 66: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/66.jpg)
Twitter APIでTL取得
• GAE/Jで他のWeb上のリソースにアクセスするには
![Page 67: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/67.jpg)
Twitter APIでTL取得
• GAE/Jで他のWeb上のリソースにアクセスするには
• URL Fetch APIを使う
![Page 68: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/68.jpg)
Twitter APIでTL取得
• GAE/Jで他のWeb上のリソースにアクセスするには
• URL Fetch APIを使う
• res = AppEngine::URLFetch.fetch(url, params)
![Page 69: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/69.jpg)
Twitter APIでTL取得
• GAE/Jで他のWeb上のリソースにアクセスするには
• URL Fetch APIを使う
• res = AppEngine::URLFetch.fetch(url, params)
• tweets = JSON.parse(res)
![Page 70: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/70.jpg)
Twitter APIでTL取得
• GAE/Jで他のWeb上のリソースにアクセスするには
• URL Fetch APIを使う
• res = AppEngine::URLFetch.fetch(url, params)
• tweets = JSON.parse(res)
• tweets.shuffle.shift
![Page 71: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/71.jpg)
斬る
![Page 72: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/72.jpg)
kunitadizeする
![Page 73: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/73.jpg)
kunitadizeする
•ツイートの適切な位置に「最速で」を追加する
![Page 74: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/74.jpg)
kunitadizeする
•ツイートの適切な位置に「最速で」を追加する
• Yahoo!係り受け解析で形態素解析して判定
![Page 75: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/75.jpg)
kunitadizeする
•ツイートの適切な位置に「最速で」を追加する
• Yahoo!係り受け解析で形態素解析して判定
•全裸botのソースコードを参考にして、
![Page 76: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/76.jpg)
kunitadizeする
•ツイートの適切な位置に「最速で」を追加する
• Yahoo!係り受け解析で形態素解析して判定
•全裸botのソースコードを参考にして、
•全裸botとの完全互換を実現 (@sugyan++)
![Page 77: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/77.jpg)
納める
![Page 78: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/78.jpg)
Twitterにツイートする
![Page 79: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/79.jpg)
Twitterにツイートする
• URL Fetch APIでTwitterのUpdate APIを最速で叩く
![Page 80: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/80.jpg)
Twitterにツイートする
• URL Fetch APIでTwitterのUpdate APIを最速で叩く
•以上。
![Page 81: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/81.jpg)
Twitterにツイートする
• URL Fetch APIでTwitterのUpdate APIを最速で叩く
•以上。
• $ dev_appserver.rb .
![Page 82: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/82.jpg)
Twitterにツイートする
• URL Fetch APIでTwitterのUpdate APIを最速で叩く
•以上。
• $ dev_appserver.rb .
• http://localhost:8080/kunitadize にアクセス
![Page 83: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/83.jpg)
定期的に実行
![Page 84: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/84.jpg)
定期的にkunitadizeする
![Page 85: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/85.jpg)
定期的にkunitadizeする
•一定時間ごとにkunitadize
するには?
![Page 86: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/86.jpg)
定期的にkunitadizeする
•一定時間ごとにkunitadize
するには?
• GAEではちょっと変わったCronが使える
![Page 87: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/87.jpg)
定期的にkunitadizeする
•一定時間ごとにkunitadize
するには?
• GAEではちょっと変わったCronが使える
• WEB-INF/cron.xmlに記述
![Page 88: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/88.jpg)
定期的にkunitadizeする
•一定時間ごとにkunitadize
するには?
• GAEではちょっと変わったCronが使える
• WEB-INF/cron.xmlに記述
(WEB-INF/cron.xml)<?xml version="1.0" encoding="UTF-8"?>
<cronentries> <cron> <url>/kunitadize</url> <description>kunitadize a random tweet</description> <schedule>every 30 minutes</schedule> </cron></cronentries>
![Page 89: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/89.jpg)
公開
![Page 90: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/90.jpg)
アプリを公開する
![Page 91: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/91.jpg)
アプリを公開する
•あらかじめGAEの開発者登録をしておく
![Page 92: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/92.jpg)
アプリを公開する
•あらかじめGAEの開発者登録をしておく
•アプリケーション登録をする
![Page 93: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/93.jpg)
アプリを公開する
•あらかじめGAEの開発者登録をしておく
•アプリケーション登録をする
• $ appcfg.rb update .
![Page 94: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/94.jpg)
アプリを公開する
•あらかじめGAEの開発者登録をしておく
•アプリケーション登録をする
• $ appcfg.rb update .
•初回はE-mailアドレスとパスワードを聞かれる
![Page 95: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/95.jpg)
アプリを公開する
•あらかじめGAEの開発者登録をしておく
•アプリケーション登録をする
• $ appcfg.rb update .
•初回はE-mailアドレスとパスワードを聞かれる
• https://appengine.google.com/ にアクセスして確認
![Page 96: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/96.jpg)
AppEngine API
![Page 97: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/97.jpg)
AppEngine API
![Page 98: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/98.jpg)
AppEngine API
• Datastore
![Page 99: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/99.jpg)
AppEngine API
• Datastore
• Memcache
![Page 100: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/100.jpg)
AppEngine API
• Datastore
• Memcache
• URL Fetch
![Page 101: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/101.jpg)
AppEngine API
• Datastore
• Memcache
• URL Fetch
• Mail (送受信)
![Page 102: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/102.jpg)
AppEngine API
• Datastore
• Memcache
• URL Fetch
• Mail (送受信)
• XMPP通信
![Page 103: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/103.jpg)
AppEngine API
• Datastore
• Memcache
• URL Fetch
• Mail (送受信)
• XMPP通信
• Image
![Page 104: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/104.jpg)
AppEngine API
• Datastore
• Memcache
• URL Fetch
• Mail (送受信)
• XMPP通信
• Image
• Google Account認証
![Page 105: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/105.jpg)
AppEngine API
• Datastore
• Memcache
• URL Fetch
• Mail (送受信)
• XMPP通信
• Image
• Google Account認証
• Task Queue
![Page 106: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/106.jpg)
AppEngine API
• Datastore
• Memcache
• URL Fetch
• Mail (送受信)
• XMPP通信
• Image
• Google Account認証
• Task Queue
• Cron
![Page 107: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/107.jpg)
AppEngineの制約
![Page 108: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/108.jpg)
AppEngineの制約
![Page 109: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/109.jpg)
AppEngineの制約
•ローカルへのファイル保存
![Page 110: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/110.jpg)
AppEngineの制約
•ローカルへのファイル保存
•ソフトウェアのインストール
![Page 111: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/111.jpg)
AppEngineの制約
•ローカルへのファイル保存
•ソフトウェアのインストール
• ffmpegとかFlash Compiler入れて動画サイトとかは無理
![Page 112: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/112.jpg)
AppEngineの制約
•ローカルへのファイル保存
•ソフトウェアのインストール
• ffmpegとかFlash Compiler入れて動画サイトとかは無理
•アプリ間でDatastoreの共有はできない
![Page 113: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/113.jpg)
AppEngineの制約
•ローカルへのファイル保存
•ソフトウェアのインストール
• ffmpegとかFlash Compiler入れて動画サイトとかは無理
•アプリ間でDatastoreの共有はできない
• frontendとbackendでアプリ分割が不可能
![Page 114: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/114.jpg)
AppEngineの制約
![Page 115: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/115.jpg)
AppEngineの制約
• 30秒以上の実行はkillされる
![Page 116: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/116.jpg)
AppEngineの制約
• 30秒以上の実行はkillされる
• JRuby on Rails + ActiveRecordは難しい
![Page 117: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/117.jpg)
AppEngineの制約
• 30秒以上の実行はkillされる
• JRuby on Rails + ActiveRecordは難しい
• Sinatra + DataMapperで我慢
![Page 118: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/118.jpg)
AppEngineの制約
![Page 119: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/119.jpg)
AppEngineの制約
•一定時間アクセスがないとメモリキャッシュから消える
![Page 120: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/120.jpg)
AppEngineの制約
•一定時間アクセスがないとメモリキャッシュから消える
•アクセスが遅くなる
![Page 121: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/121.jpg)
AppEngineの制約
•一定時間アクセスがないとメモリキャッシュから消える
•アクセスが遅くなる
•定期的にcronでURLを叩くなどのハックが必要
![Page 122: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/122.jpg)
AppEngineの制約
•一定時間アクセスがないとメモリキャッシュから消える
•アクセスが遅くなる
•定期的にcronでURLを叩くなどのハックが必要
• RDBMSが使えない (代わりにDatastore)
![Page 123: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/123.jpg)
Datastore
![Page 124: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/124.jpg)
Datastoreとは
![Page 125: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/125.jpg)
Datastoreとは
•非リレーショナルなDB
![Page 126: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/126.jpg)
Datastoreとは
•非リレーショナルなDB
• Table、Columnの概念がない
![Page 127: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/127.jpg)
Datastoreとは
•非リレーショナルなDB
• Table、Columnの概念がない
•レコードはEntityと呼ばれ、kindとpropertyの値を持つ
![Page 128: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/128.jpg)
Datastoreとは
•非リレーショナルなDB
• Table、Columnの概念がない
•レコードはEntityと呼ばれ、kindとpropertyの値を持つ
• kind ⇒ テーブル?
![Page 129: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/129.jpg)
Datastoreとは
•非リレーショナルなDB
• Table、Columnの概念がない
•レコードはEntityと呼ばれ、kindとpropertyの値を持つ
• kind ⇒ テーブル?
• property ⇒ カラム?
![Page 130: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/130.jpg)
Datastoreの特徴
![Page 131: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/131.jpg)
Datastoreの特徴
•呼び方が違うだけじゃないの?
![Page 132: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/132.jpg)
Datastoreの特徴
•呼び方が違うだけじゃないの?
•同じkindでも違うpropertyを持つことができる
![Page 133: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/133.jpg)
Datastoreの特徴
•呼び方が違うだけじゃないの?
•同じkindでも違うpropertyを持つことができる
• 1つのpropertyに複数の値を持つことができる
![Page 134: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/134.jpg)
Datastoreの特徴
•呼び方が違うだけじゃないの?
•同じkindでも違うpropertyを持つことができる
• 1つのpropertyに複数の値を持つことができる
•⇒ “スキーマレス
![Page 135: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/135.jpg)
Datastoreの検索
![Page 136: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/136.jpg)
Datastoreの検索
• DatastoreはKey-Value-Storeである
![Page 137: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/137.jpg)
Datastoreの検索
• DatastoreはKey-Value-Storeである
•各EntityはユニークなKeyを持つ
![Page 138: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/138.jpg)
Datastoreの検索
• DatastoreはKey-Value-Storeである
•各EntityはユニークなKeyを持つ
•そのKeyで検索するので無駄な走査がない
![Page 139: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/139.jpg)
Datastoreの検索
• DatastoreはKey-Value-Storeである
•各EntityはユニークなKeyを持つ
•そのKeyで検索するので無駄な走査がない
•アクセス速度はEntity数に依存しない
![Page 140: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/140.jpg)
Datastoreの検索
• DatastoreはKey-Value-Storeである
•各EntityはユニークなKeyを持つ
•そのKeyで検索するので無駄な走査がない
•アクセス速度はEntity数に依存しない
•最速。
![Page 141: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/141.jpg)
Datastoreの困った所
![Page 142: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/142.jpg)
Datastoreの困った所
• JavaのDatastore APIか、GQLでアクセス
![Page 143: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/143.jpg)
Datastoreの困った所
• JavaのDatastore APIか、GQLでアクセス
•制約が多くて面倒
![Page 144: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/144.jpg)
Datastoreの困った所
• JavaのDatastore APIか、GQLでアクセス
•制約が多くて面倒
• DataMapperを使えば自由にアクセス & 永続化
![Page 145: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/145.jpg)
Datastoreの困った所
• JavaのDatastore APIか、GQLでアクセス
•制約が多くて面倒
• DataMapperを使えば自由にアクセス & 永続化
•あんまり問題ない?
![Page 146: Google App Engine for Java (手嶋屋勉強会)](https://reader038.vdocuments.site/reader038/viewer/2022102901/55568fa2d8b42acc5e8b493b/html5/thumbnails/146.jpg)
参考
• http://tech.kayac.com/archive/gae-jruby-twitter-bot.html
• http://code.google.com/p/appengine-jruby/
• http://d.hatena.ne.jp/shibason/20091018/1255866012
•書籍 : Programming Google App Engine