Skip to content

Commit

Permalink
Revised part1 hello trema.
Browse files Browse the repository at this point in the history
  • Loading branch information
yasuhito committed Feb 20, 2014
1 parent a5d6118 commit 281a6aa
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 55 deletions.
102 changes: 50 additions & 52 deletions hello_trema/hello_trema.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@


<!SLIDE commandline>
## 演習: "Hello Trema!" を実行 #############################################
## "Hello Trema!" を実行 #######################################################

### 以下のコマンドを入力し、Trema を実行します :
### 以下のコマンドを入力し、Trema を起動してみよう:

$ cd Tutorials/Trema
$ cd trema-tutorial
$ trema run hello-trema.rb
Hello Trema! # Ctrl-C to quit

Expand All @@ -16,29 +16,29 @@
![overview](hello_trema.png)


<!SLIDE small>
# 基本コマンド : `trema run` ###############################################
<!SLIDE medium>
# コントローラの起動 ###########################################################

$ trema run [controller-file]

* 上記コマンドで、コントローラを実行します
* Ctrl-c で停止します
* `trema help run` でオプションリストを表示します
* コントローラを実行
* Ctrl-c で停止
* `trema help run` でオプションを表示


<!SLIDE small>
# 書いたコードをすぐ動かす #################################################################
<!SLIDE medium incremental>
# すぐに動かせる ###############################################################

* `trema run` コマンドで、書いたコントローラをすぐ実行できます
* 書いたコントローラを、即座にテストできます
* 短いサイクルで "コーディング、テスト、デバッグ" を繰り返す開発スタイルを実現できます
* `trema run` で、書いたコントローラをすぐ実行
* 仮想ネットワークで動作をテスト
* "コーディング、テスト、デバッグ" の短いサイクル


<!SLIDE small>
# Trema 上での コントローラの書き方 #############################################
# Trema でのコントローラの書き方 ###############################################


<!SLIDE small>
<!SLIDE medium>
# hello-trema.rb ###############################################################

@@@ ruby
Expand All @@ -48,101 +48,100 @@
end
end

* シンプルですが、これだけで完全なコントローラのコードになっています
* (ただし Hello Trema! と表示するだけのものです)
* シンプル! これだけでコントローラが動く
* (ただし Hello Trema! と表示するだけ)


<!SLIDE small>
# コントローラクラス #############################################################
# コントローラクラス ###########################################################

@@@ ruby
class HelloController < Controller
# ...
end

* すべてのコントローラは、クラスとして実装します (`class HelloController`)
* Trema クラスライブラリに用意されている `Controller` クラスのサブクラスとして実装します
* コントローラに必要なメソッドは、自動的に継承されます (flow-mod メッセージの送信等)
* すべてのコントローラはクラス (`class HelloController)
* Trema `Controller` クラスを継承
* コントローラに必要なメソッドも継承 (FlowMod の送信等)


<!SLIDE small>
# イベントハンドラ ###############################################################
# イベントハンドラ #############################################################

@@@ ruby
class MyController < Controller
def start # start-up event handler
# ...
end
def packet_in dpid, msg # Packet-in received handler

def packet_in(dpid, msg) # Packet-in received handler
# ...
end

# ...
end

* イベントドリブン形式で、コントローラを記述します
* 各イベントハンドラを、インスタンスメソッドとして実装します
* イベントドリブンにコントローラを記述
* 各イベントハンドラをインスタンスメソッドとして実装


<!SLIDE small>
# イベントハンドラ (Floodlight の場合) #################################################
# イベントハンドラ (Floodlight の場合) #########################################

@@@ java
// Packet-in handling in Floodlight
public Command receive(IOFSwitch sw, ...) {
switch (msg.getType()) {
case PACKET_IN:
return this.handlePacketIn(sw, ...);
...

// ...

private Command handlePacketIn(IOFSwitch sw, ...) {
...
// ...

* Floodlight では、複雑なイベント振り分けを必要とします
* おまじないが多いため、コードの見通しが悪くなります
* Floodlight では複雑なイベント振り分けが必要
* 「おまじない」が多く、コードの見通しが悪い


<!SLIDE small>
# イベントの振り分け ################################################################
# イベントの振り分け ###########################################################

@@@ ruby
# Packet-in handling in Trema
class MyController < Controller
def start # automatically called at startup
# ...
end
def packet_in dpid, msg # automatically caled when receiving a packet-in

def packet_in(dpid, msg) # automatically caled when receiving a packet-in
# ...
end
end

* Trema はイベントの振り分けにリフレクションを使っています
* そのため、複雑になりがちなディスパッチやハンドラ登録を行う必要はありません
* Trema はイベントの振り分けにリフレクションを使う
* 面倒なイベントディスパッチやハンドラの登録が不要


<!SLIDE small transition=uncover>
# コーディングのための工夫 #######################################################
# コーディングのための工夫 #####################################################

* 簡潔なコードを書くための工夫
* e.g., "handler name" == "message name"
* イベントディスパッチのような、おまじないを不要に
* 楽しいプログラミングのために、お約束事やつまらない部分を削減
* "handler name" == "message name"
* イベントディスパッチのような「おまじない」を不要に
* お約束やつまらない部分を削減し, 楽しくプログラミング


<!SLIDE small>
# 短く書く ################################################################
# 短く書こう ###################################################################

* コードの長さと生産性の間には強い相関関係
* e.g. Arc Programming Language [Paul Graham]
* e.g., Arc Programming Language [Paul Graham]
* コードを短くすることで、
* お約束コードを書く時間を最小にする
* バグ混入の可能性を少なくする
* バグの可能性を少なくする

<br />

## Trema は、実行時の効率性よりも
## <b>プログラマーの生産性</b>に重きをおいています
## Trema は性能よりも
## <b>プログラマーの生産性</b>を重視


<!SLIDE small>
Expand All @@ -155,6 +154,5 @@
end
end

* ロギングレベル毎に用意されたシンプルな API (debug, info, etc)
* `trema ruby` で、Logging API を含む API リファレンスを表示

* ロギングレベルに応じたシンプルな API (debug, info, etc.)
* `trema ruby` で Logging API を含む API リファレンスを表示
2 changes: 1 addition & 1 deletion intro/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@


<!SLIDE incremental>
# Trema とは ################################################################
# Trema とは ###################################################################

* Ruby 用 OpenFlow 開発フレームワーク
* <http://github.com/trema/trema>
Expand Down
8 changes: 6 additions & 2 deletions styles.css
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
.medium {
font-size: 90%;
}

.small {
font-size: 70%;
font-size: 80%;
}

.smaller {
font-size: 60%;
font-size: 70%;
}

.slide_info {
Expand Down

0 comments on commit 281a6aa

Please sign in to comment.