• 検索結果がありません。

勉強会 資料 Google Developer Group 京都 07 24

N/A
N/A
Protected

Academic year: 2018

シェア "勉強会 資料 Google Developer Group 京都 07 24"

Copied!
50
0
0

読み込み中.... (全文を見る)

全文

(1)

各種情報

無線 LAN アクセスポイント

– AP0007406A1B99

– Jumpstart-P1-4b363d

(2)

Google App Engine Hackathon in Kyoto

第二回 事前勉強会

京都GTUG

マネージャー 山下大介

(3)

はじめに

• 本日は、みなさまお越し下さいまして、ありが

とうございます。

(4)

注意点

• 写真撮影はご自由にどうぞ。

– フラッシュは控えて頂けると助かります。 – ブログへの掲載も問題ありません。

スタッフ以外の顔が入っているものは、加工していた だくか個別に許可を取って下さい。

(5)

注意点

• スタッフもイベントの様子を撮影します。

8月8日のHackathon終了後に京都GTUGおよ び京都GTUGが許諾したメディアなどで公開され ます。

– 参加者には事前に写真データが共有され、公開 されると問題のある写真はご連絡頂ければ、削 除・加工の措置を取ります。

(6)

自己紹介

山下 大介

メール:[email protected]

ブログ:http://blog.daisukeyamashita.com/ – twitterhttp://twitter.com/dddaisuke

京都GTUG マネージャー

• 株式会社SOBAプロジェクト 取締役

– KRP2号館2階

会社では自社開発のP2P通信方式による、VoIP技術の普及に努めており、ここ 数年は主にサーバサイド周りの技術検証/実装をしています 。(主に、ウェブ会 議システムのSOBA CITYSOBA mierukaの開発)

(7)

京都 GTUG とは?

正式名称

Kyoto Google Technology User Group

Kyoto GTUG

Kyoto GTUG Kyoto GTUG Kyoto GTUG

目的

純粋・シンプルにGoogleのテクノロジーを 理解・習得するための活動をする。

(これは、世界中のGTUG共通の目的)

*漢字表記の「京都GTUG」は国内のみの利用でお願いします。

(8)

Google Technology User Group とは?

現在、全世界で30ヶ国70を超える地域でローカルなGTUG が設立されています。

http://www.gtugs.org/directory

各地域で、Googleのテクノロジーに興味のある方々が組織 を立ち上げています。

将来的には、地域を越えたイベントもやりたいよね!という 話が、マネージャのMLでやりとりされています。

(9)

京都 GTUG へ!

• まだ、参加してない方はぜひ参加して下さいね!

http://kyoto-gtug.org/

http://kyoto-gtug.org/ http://kyoto-gtug.org/ http://kyoto-gtug.org/

http://group.kyoto-gtug.org/

http://group.kyoto-gtug.org/ http://group.kyoto-gtug.org/ http://group.kyoto-gtug.org/

(10)

勉強会に入る前に・・・

• Hackathon で利用しようと思っている言語を

教えてください。

– Python – Java

その他(PHP, Ruby, Scala・・・)

(11)

• GAE/J上でRubyを実行してみる

• GAE/J上でPHPを実行してみる

(12)

Nothing is impossible on the JVM

JVM 上で不可能なことなど何もない

Charles Nutter

(13)

Nothing is impossible on the JVM

• JRubyでコア開発メンバーを務めるチャールズ・ナッ ター氏が、200961日にサンフランシスコで行わ れたCommunity OneJavaOne)の講演で語った 台詞です。

(14)

JVM Ruby を実行する JRuby

• JRubyは、RubyインタープリタのJavaによるオープンな実装です。

いくつかのライセンスで公開されています。 – Java 1.5+で動作します。

現在のバージョンは1.2

主要開発者はサン・マイクロシステムズに雇用されています。

– ThoughtWorksに雇用されてる人もいるよ!

• Ruby 1.8.6 リファレンス実装よりも多くの場合高速に動作する。

ベンチマーク1 ベンチマーク2

(15)

JRuby Java との連携

• JRubyRubyは基本的に同じですが、JRuby の強 力な機能の一つとして、Javaプラットフォームのクラ スを呼び出すことができます。

(16)

環境のセットアップ

• Java

– JDK/JREどちらでも良い – JAVA_HOMEの設定

• Google App Engine SDK for Java

http://code.google.com/intl/ja/appengine/downloads.html – $APP_ENGINE/binにパスを通す

(17)

環境のセットアップ

• JRuby

http://dist.codehaus.org/jruby/current/

• 1.2.0以降が良さそう(現在1.3.0

• JRuby, Ruby stdlib, RubyGems, rakeが含まれる

– <jruby-dir>/binPATHに追加

• gems

– gem install rspec

– jruby -S gem install rspec

• WarblerRackが同梱されています)

– jruby -S gem install warbler

(18)

JRuby から Java を呼び出す

include Java

frame = javax.swing.JFrame.new()

frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!')) frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE) frame.pack()

frame.set_visible(true)

frame.content_pane.add label frame.visible = true

また、JavaコードをよりRuby的なアンダースコアを使った 命名規則で呼び出し、JavaBeanのプロパティを属性とし て参照できる。

まず "include Java"(以前のバージョンでは "require 'java'"として

JRuby Java サポートをロードする。以下の例は、 Java JFrame JLabel を付与したものを生成する。

Wikipediaより引用 http://ja.wikipedia.org/wiki/JRuby

(19)

デモ

Live Demo

(20)

Rails

• David Heinemeier Hanssonにより開発

プロジェクト管理ツール"basecamp"の開発に用いられたコードを一般化

基本理念「同じことを繰り返さない」

– DRY:Don't Repeat Yourself (The Pragmatic Programmer:達人プログラマー) 「設定より規約」(CoC:Convention over Configuration)

強固なソフトウェア

プログラマーの生産性のために、最適化されている

オープンソース

すばらしいコミュニティ、プラグイン、拡張

(21)

Rails + JRuby

簡単なセットアップ

• すばらしいパフォーマンス

数千のライブラリー

簡単なデプロイ

• 幅広いデータベースのサポート

• プラットフォームから独立している

– JRuby on Rails on AS/400, calling DB2

(22)

Warbler

• Railsアプリをwarファイルに固めるGem

自身を含める

– JRubyとサーブレットアダプタを含める

• jruby -S gem install warbler

• jruby -S warble config

• jruby -S warble

(23)

Rack

• ウェブアプリケーションをディスパッチするための良 く定義されたインタフェース

基本的にすべてのRubyウェブフレームワークで、サ ポートされます。

• JRuby-rack

– RackServlet

– JRubyランタイムのプーリング

(24)

Reggae

• Ruby Enabled GooGle App Engine

↑どう見ても無理やりです(笑)

単純化されたサポート

設定

– Gem-to-Jar バンドラー

– Rackアプリをローカル開発サーバーで簡単に実行できます 簡単にデプロイできます

• という、夢を見ました(笑)

これは、また完成していません。。。

(25)

DataMapper

• Ruby ORM ツール

• データソース用のアダプター

– dm-datastore-adapter

• DataMapperインターフェイスを経由したシンプルな クエリーをサポートしています。

(26)

Sinatra

require 'rubygems' require 'sinatra' get '/' do

'Hello world!' end

Sinatraは、ウェブアプリケーションをRubyに書くための小さいDSL

Domain Specific Language)です。Railsは大げさすぎるという時に利用 します。

シンプルなコード:

SinatraGoogle App Engine上でJRuby-rackと一緒に利用するときに 、 より良く動作します。

(27)

Ramaze

(ラマゼ)

• Sinatraのように小さなウェブフレームワークです。

• 特徴として、モジュラーな設計で、いろいろな部分が 取り替え可能です。

• Rackの下で実行されます。

• DataMapperと共に動作します。

• シンプルで自由度が高いです。

• スレッドの利用を回避するために簡単なパッチを必 要とします。

(28)

Google App Engine Service

JRuby ラッパー

(29)

bumble

• DB のかわりに、 Google DataStore にアクセ

スするためのライブラリ

(30)

dm-datastore-adapter

• DataMapper から Google DataStore にアクセ

スするためのアダプタ

(31)

BeeU

動作を保護するために、問題のコントローラに以下を加え てください。

UserServiceとの非常に簡単な統合

認証状態を自動的に設定するため、application.rbに以下 のコードを加えます:

include BeeU

before_filter :assign_user

before_filter :assign_admin_status

require_admin :remove

(32)

image-gae

• ImageScience のかわりに、 Google 独自の画

像処理ライブラリにアクセスするラッパー

(33)

pony-gae

• Google のメールサービス利用ラッパー

(34)

urlfetch-gae

• net/http が直接利用できないので、通信をす

るための URL フェッチラッパー

(35)

rb-gae-support

現在開発中!

• GAE の各 API に対する全ラッパー

(36)

制限

ファイル制限

ファイル数 < 1000

• 3000個に増えているハズですが試していません

– jarファイルのサイズ < 10MB

通信の制限

– net/http,activeresourceなどRubyURLフェッチライブラリは利用できない

データストアの制限

– ActiveRecordは利用できない

• Image API

– RMagick/attachment_fu/ImageScience/ImageVoodoo/javax.imageが利用できない

スレッドが利用できない

ファイルを書き出すことができない

いくつかのリフレクションが使えない

(37)

GAE JRuby 最も簡単に使う方法

<application>アプリケーションIDIDIDID</application>

<version>バージョン名</version>

 http://github.com/nicksieger/jruby-rack/tree/master/examples/rails

画面中央の[download]ボタンからファイルをダウンロード

  /examples/rails/appengine-web.xml

 /examples/rails

 $ jruby -S rake appengine:deploy email={email} password={pass}

Windowsの場合、事前に以下のファイルを修正しておく /examples/rails/lib/tasks/deploy.rake

92,94行目 cattype

96行目 appcfg.shappcfg.cmd

(38)

GAE JRuby 最も簡単に使う方法

最初の一回だけ、エラーになると思いますので、以下のコマンドを実行し て下さい。二回目以降は正常にアップロードできると思います。

>appcfg.cmd --email=メールアドレス --passin --enable_jar_splitting update tmp/war Password for メールアドレス: パスワード

(39)

デモ

ソースコードはHackathon用のリポジトリに入っています http://code.kyoto-gtug.org/

(40)

• GAE/J上でRubyを実行してみる

• GAE/J上でPHPを実行してみる

(41)

Quercus

• JavaベースのPHPプロセッサ

• Javaで実装されているためセキュリティ面でより安全

• mod_phpよりも高速

• Javaクラスにコンパイルされて実行されるため、既存の Java用プロファイラ等を利用可能

もちろん、既存のJavaライブラリを利用することもできる

(42)

セットアップ

以下の5ファイルを[プロジェクトdir/war/WEB-INF/lib]にコ ピーする。

• http://quercus.caucho.com/download/quercus-3.1.6.war

• jar xf quercus-3.1.6.war

– WEB-INF/lib/quercus.jar – WEB-INF/lib/resin-util.jar – WEB-INF/lib/script-10.jar

• http://dist.codehaus.org/jetty/jetty-6.1.17/jetty-6.1.17.zip

– lib/jetty-6.1.17.jar – lib/jetty-util-6.1.17.jar

(43)

appengine-web.xml (一部)

<!-- Quercus用の設定 -->

<!-- PHPファイルを静的なファイルから除外 -->

<static-files>

<exclude path="/**.php" />

</static-files>

<!-- PHPファイルをリソースファイルとして登録 -->

<resource-files>

<include path="/**.php" />

</resource-files>

(44)

web.xml (一部)

<servlet>

<servlet-name>Quercus Servlet</servlet-name>

<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> <init-param>

<param-name>script-encoding</param-name> <param-value>UTF-8</param-value>

</init-param> <init-param>

<param-name>ini-file</param-name>

<param-value>WEB-INF/php.ini</param-value> </init-param>

</servlet>

<servlet-mapping>

<servlet-name>Quercus Servlet</servlet-name> <url-pattern>*.php</url-pattern>

</servlet-mapping>

(45)

php.ini

• php.iniは「war/WEB-INF」に配置する。

• QuercusPHP環境では、バイト列がISO-8859-1として扱 われるので、Unicodeとして扱いたい場合には、

unicode.semanticsonにする必要があります。

unicode.semantics=on

unicode.http_input_encoding=UTF-8 unicode.output_encoding=UTF-8 unicode.runtime_encoding=UTF-8

文字コードについては、この辺りが詳しい:http://www.atmarkit.co.jp/fjava/column/koyama/koyama05_2.html

(46)

ソースコード( php ファイル)の設置

• phpファイルは、warディレクトリに配置します

• srcにファイルが1個も存在しない場合、Google

App Engineへのデプロイに失敗します。(クライアン ト側の制限)

(47)

デモ

ソースコードはHackathon用のリポジトリに入っています http://code.kyoto-gtug.org/

(48)

Hackathon に向けて

• Hackathon に向けて、 Google App Engine

開発されたアプリをみんなで見てみましょう!

具体的には、「 appspot.com 」ドメインを検索

すると良いです。

http://app-gallery.appspot.com/ 」などを見

て回るのも良いと思います。

(49)

リポジトリの変更

リポジトリのURLが少し、長いのでリポジトリを取得 しなおしました。

• Google Code

http://code.google.com/p/kyoto-gtug/

ショートリンク

http://code.kyoto-gtug.org/

(50)

以上です。

質問をどうぞ!

参照

関連したドキュメント

しかし私の理解と違うのは、寿岳章子が京都の「よろこび」を残さず読者に見せてくれる

操作は前章と同じです。但し中継子機の ACSH は、親機では無く中継器が送信する電波を受信します。本機を 前章①の操作で

手動のレバーを押して津波がどのようにして起きるかを観察 することができます。シミュレーターの前には、 「地図で見る日本

荒天の際に係留する場合は、1つのビットに 2 本(可能であれば 3

つまり、p 型の語が p 型の語を修飾するという関係になっている。しかし、p 型の語同士の Merge

本プログラム受講生が新しい価値観を持つことができ、自身の今後進むべき道の一助になることを心から願って

とである。内乱が落ち着き,ひとつの国としての統合がすすんだアメリカ社会

Google マップ上で誰もがその情報を閲覧することが可能となる。Google マイマップは、Google マップの情報を基に作成されるため、Google