今回はお盆休み中ということもあってか,20名弱と少ない参加人数でした.そう言う私は風邪気味で,ちょっとログを追えていない部分があります(;´Д`).
##セッションネタ
- yuguiさんの Redmine RESTful 化
- REST の話も含める
- Java を使って Ruby の Class を書く方法
- git を maiha さんに教える
セッションの割り振りの時,どうせなら3つともやってしまおうと言うことになり,1時間15分 x 3という時間割になりました.
##時間割
- 13:15~14:30
- 14:40~15:55
- 16:05~17:20
##Redmine RESTful 化
- Trac に対する利点は?
- 複数のプロジェクトを管理できる
- 親子関係を1階層だけだが作れる
- 複雑な Role を作成することができる
- プラグインがある
###REST の話
- Web サービスとは
- RESTful
- RPC(SOAP)
- ある URI に Method を含む内容を POST する
- hybrid(XML-RPC)
- RESTfulとは(高橋さん)
- Web は世界初の大規模分散アーキテクチャ
- REST はアーキテクチャスタイル
- HTTP Method で PUT/DELETE とか言ってるのは,原理主義者にとっては異端
- 原論文を見ないといけない?
- GET URL が重要
- URL にリソースに関する全ての情報が入っている
- cachable(キャッシュ可能)なリソース
- 認証はクライアントサイドで毎回認証情報をサーバに送信する
- RESTful だとサーバは stateless なのでセッション管理はクライアントでやるべき.
- Webサービスでユーザ個別の Presentation なのは,「ようこそ**さん」とかユーザへのメッセージとか
- この部分だけを更新するような Rich Client(Flash/Javascript)があれば,分離できる.
- 共通部分は cachable
- ユーザ個別の部分は認証込みのリクエストを出す.
- 認証は SSL-Basic認証が最強?
- DNS Poisoning 問題に波及
- どの部分をスケールして欲しいかで,認証・キャッシュなどを使い分ける
- 日本では確認画面が問題
- 確認画面は RESTful ?
- Lock 機構?
- HTTP Status
- 201 Created は新しく URI (リソース) が生成されたときに返す
- Updated は 204 (no content)
- Ruby Authentication
- RubyConf 2008 (http://www.rubyconf.org/)) の Talk Proposal の最後
- REST をお手軽にやるには
- RESTful Web サービス 読書会
- 原論文
- 山本洋平さんのブログ
- Ricoh Lab の HP
##Java を使って Ruby の Class を書く方法
- JRuby とは
- JavaVM で動く Ruby 実装
- JIT,事前にコンパイル可能
- Java の機能,ライブラリが Ruby Class のように呼び出せる.
- Java Integration による Bridge 機能
- 開発者
- Charles 0 Nutter
- 日本文化に明るい
- ささださんにメイド喫茶に連れて行かれた.
- Thomas E Enebo
- 彼女が腐女子
- JRuby を拡張したい
- 動かしたいパッケージが C
- openssl, RMagick4J, etc..
- 速くしたい
- M な方におすすめ
- 素直に Ruby で書けば数行ですむところを,無理矢理数十行書きたい人向け
- 今日の話は超生もの
- コアな部分なので,開発が早いと interface の後方互換性が保てないかもしれないので,明日はもうコンパイルできないかもしれません.とのこと.
- 拡張の仕方
- 普通に Ruby で書く
- Java Class も呼べる
- Duby で書く
- 型修飾ができる Ruby
- コンパイラ型
- 手軽に書けて,バイトコードに変換できる.
- 実行速度が速い
- Hash リテラルっぽい書き方で型を指定できる.
- JRuby の拡張機能を書く言語?
def foo(str)
{str => :string, return => :integer}
puts str
return str.to_i
end
- Java で書く
- 速い
- が,面倒
- jar パッケージ化できる
- JRuby には
- JRuby ソースコード
- Java SE 5.0
- Java クラスと Ruby クラス
- クラス/メソッドの可視性
- public/protected/private の扱い
- オーバーロード
- Ruby にはない
- 引数の数で同名メソッドを複数定義できる.あと型とかでも.
- オープンクラス
- 既に定義したクラスにメソッドや変数などを追記するには
- Java で書くときに必要なこと
- Memory Allocation
- JRuby の Ruby ランタイムにクラスやモジュールを登録する
- Ruby で言う ObjectSpace.
- Annotation
- Java 5から導入
- @~ を使って,クラス/メソッドに情報を付加する
- javadoc/Rdoc っぽい
- メソッドやクラスに宣言的にメタ情報を記述
- JRuby アノテーション
- クラス
@JRubyClass(name = "Iconv")
class IconvClass {
...
}
- メソッド
- 引数の数/可変長引数(required)
- インスタンスか,特異か(meta)
- ブロックの有無
- ブロックを受け取らないメソッドにできる.(frame)
@JRubyMethod(name = "open", required = 2, frame = true, meta = true)
public static IRubyObject open(...){
...
}
- モジュール
- ロードの JRuby 拡張
require 'hogehoge' # .class/.jar も探索する
require 'hogehoge.class'
require 'hogehoge.jar'
- .jar をロードする
- jarredScript
- jar に固めた class ファイルをロードする仕組み
- jarredScript
- 規約指向
- クラス名と jar ファイル名を合わせる
- LoadService
- JRuby が jar 内から拡張クラスを探すきっかけになる
- まとめ : JRuby を拡張しよう
- メモリアロケーション
- JRuby の Ruby ランタイムにオブジェクトを登録する感じ
- アノテーション
- 引数の数や特異メソッドなどの注釈をつける
- jar に固める
##git を maiha さんに教える ###まず git とは
- 読み方?
- ギット?ジット?
- Matz や RailsConf 2008 ではジット
- 今日からジット
- git
- SCM/VCM
- 分散
- DVCM
- Subversion と git の連携
###全く知らない Subversion の人に git を説明
- Local Repository と Remote Repository
- Local Repository が Subversion の Working Copy に対応
- オフラインでコミットできる
- ディレクトリかツリーか
- git clone
- Remote Repository から Local Repository にリポジトリをコピーする
- リビジョン番号がない
- SHA1 でリビジョン番号のようなハッシュで管理している
###遊びの人から仕事の人へ
- Subversion から持ってくる
% git svn clone [URL]
% git svn dcommit
- Subversion リポジトリがメインの時で,PC1/PC2で作業したい
- PC1 で更新
- PC2 で PC1 から pull
- PC2 で更新
- PC1 で PC2 から pull
- PC2 で更新して,PC1 に push しても,PC2 の .git 配下は更新されるが,ファイルが古いまま
- git stash
- HEADに戻すが,最終更新状態も記録している
- branch の処理が楽?
- git checkout /path/to
- 特定のディレクトリだけ任意の brance に戻す・変える
- master 以外の branch で,git rebase master
- master のコミットを全て適用した後に,その branch のコミットを適用する
- git は奥が深い
話を追えないほど展開が速かったので,あとで思い出しながら実際にやってみようと思います.
##まとめ
- KPT はHPを参照
参加人数が少なかったので3セッションになりましたが,これはいいですね.いままで「あっちも聞きたかったなぁ」と言うのが多々あったので.次回は git で有名な人が来るかもしれないらしいので,ちょっと期待.
comments powered by Disqus