SlideShare a Scribd company logo
1 of 35
Download to read offline
Fiber の
       サンプルをかいてみた



       2013/02/02
       広島Ruby勉強会 #027

13年2月2日土曜日
Fiber
13年2月2日土曜日
別名



             マイクロスレッド


              コルーチン


13年2月2日土曜日
状態管理を意識せずに行える
             ため、協調的処理、イテレー
             タ、無限リスト、パイプな
             ど、継続状況を持つプログラ
             ムが容易に記述できる。

13年2月2日土曜日
ゲームプログラミングでみたことある




13年2月2日土曜日
ということで
             それ系のサンプルをかいてみた




13年2月2日土曜日
http://www.youtube.com/watch?v=UOIOVLrBDEA

13年2月2日土曜日
もっと派手にすればよかった




13年2月2日土曜日
どんなコードを書きたいか



13年2月2日土曜日
10回 下に移動する


             10回 右に移動する


             10回 上に移動する


             10回 左に移動する



13年2月2日土曜日
10.times do
               down
             end

             10.times do
               right
             end

             10.times do
               up
             end

             10.times do
               left
             end


13年2月2日土曜日
そうはうまくいかぬ




13年2月2日土曜日
Fiber を使わずかいてみよう




13年2月2日土曜日
def step
     if @time < 10
       @x += 1
     elsif @time >=10 and @time < 20
       @y += 1
     elsif @time >= 20 and @time < 30
       @x -= 1
     elsif @time >= 30 and @time < 40
       @y -= 1
     else
       @x = 0
       @y = 0
       @time = 0
     end
     @time += 1
   end


13年2月2日土曜日
状態を管理する必要がある
   def step
     if @time < 10
       @x += 1
     elsif @time >=10 and @time < 20
       @y += 1
     elsif @time >= 20 and @time < 30
       @x -= 1
     elsif @time >= 30 and @time < 40
       @y -= 1
     else
       @x = 0
       @y = 0
       @time = 0
     end
     @time += 1
   end                   状態の更新が必要

13年2月2日土曜日
どの状態か判断が必要
   def step
     if @time < 10      下に移動する時
       @x += 1
     elsif @time >=10 and @time < 20 右に移動する時
       @y += 1
     elsif @time >= 20 and @time < 30 上に移動する時
       @x -= 1
     elsif @time >= 30 and @time < 40 左に移動する時
       @y -= 1
     else
       @x = 0
       @y = 0
       @time = 0
     end
     @time += 1
   end


13年2月2日土曜日
Fiber を使うと?




13年2月2日土曜日
def step
                 fiber.resume
             end




13年2月2日土曜日
@fiber   ||= Fiber.new do
               loop   do
                 @x   = 5
                 @y   = 5

                 10.times do
                   @x += 1
                   Fiber.yield
                 end

                 10.times do
                   @y += 1
                   Fiber.yield
                 end

                 10.times do
                   @x -= 1
                   Fiber.yield
                 end

                 10.times do
                   @y -= 1
                   Fiber.yield
                 end
               end
             end
13年2月2日土曜日
10.times do
               down
             end

             10.times do
               right
             end

             10.times do
               up
             end

             10.times do
               left
             end


13年2月2日土曜日
@fiber   ||= Fiber.new do
               loop   do
                 @x   = 5
                 @y   = 5

                 10.times do
                   @x += 1
                   Fiber.yield
                 end

                 10.times do
                   @y += 1
                   Fiber.yield
                 end

                 10.times do
                   @x -= 1
                   Fiber.yield
                 end

                 10.times do
                   @y -= 1
                   Fiber.yield
                 end
               end
             end
13年2月2日土曜日
概ね希望どおりかける




13年2月2日土曜日
Fiber.yield を呼んだところで止めたままにできる




13年2月2日土曜日
再開するには Fiber#resume を使用する




13年2月2日土曜日
メイン   サブ




                        止めておいたところ
                        からそのまま再開で
                        きる




13年2月2日土曜日
step メソッドで Fiber を再開させるだけ
       Fiber の中では必要なとこで止まる
       状態をそのまま維持




13年2月2日土曜日
実際にはあちこちまわるけど
                 プログラムは


  真っ直ぐ書ける

13年2月2日土曜日
おまけ



13年2月2日土曜日
描画には
   OpenGL とかつかってがんばる方法もあるけど
   Curses を使いました




13年2月2日土曜日
Curses

13年2月2日土曜日
http://ja.wikipedia.org/wiki/Curses



             curses(カーシス、カーズィス)は
             UNIX系システムでの端末制御ライブラリで
             ある。
             テキストユーザインタフェース(TUI)アプ
             リケーションを作成するのに使われる。
             名称は cursor optimization に由来する。

13年2月2日土曜日
端末の画面の特定の位置に文字を置く




13年2月2日土曜日
Curses.setpos(x,y)
             Curses.addstr('*')




13年2月2日土曜日
ソースコード




         https://github.com/eiel/Fiber-Sample



13年2月2日土曜日
ご清聴ありがとうございます




13年2月2日土曜日

More Related Content

Viewers also liked

広島で Ruby が流行らないのはどう考えても俺たちが悪い
広島で Ruby が流行らないのはどう考えても俺たちが悪い広島で Ruby が流行らないのはどう考えても俺たちが悪い
広島で Ruby が流行らないのはどう考えても俺たちが悪いTomohiko Himura
 
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島Tomohiko Himura
 
SNS 「github」で遊ぼう
SNS 「github」で遊ぼうSNS 「github」で遊ぼう
SNS 「github」で遊ぼうTomohiko Himura
 
Mac OS X のパッケージ管理紹介/比較
Mac OS X のパッケージ管理紹介/比較Mac OS X のパッケージ管理紹介/比較
Mac OS X のパッケージ管理紹介/比較Tomohiko Himura
 
Rails の自動読み込みを支える技術
Rails の自動読み込みを支える技術Rails の自動読み込みを支える技術
Rails の自動読み込みを支える技術Tomohiko Himura
 
軽量マークアップ言語で気楽にマークアップ
軽量マークアップ言語で気楽にマークアップ軽量マークアップ言語で気楽にマークアップ
軽量マークアップ言語で気楽にマークアップTomohiko Himura
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門Tomohiko Himura
 

Viewers also liked (9)

広島で Ruby が流行らないのはどう考えても俺たちが悪い
広島で Ruby が流行らないのはどう考えても俺たちが悪い広島で Ruby が流行らないのはどう考えても俺たちが悪い
広島で Ruby が流行らないのはどう考えても俺たちが悪い
 
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
 
SNS 「github」で遊ぼう
SNS 「github」で遊ぼうSNS 「github」で遊ぼう
SNS 「github」で遊ぼう
 
Git 仕組み 入門
Git 仕組み 入門Git 仕組み 入門
Git 仕組み 入門
 
Mac OS X のパッケージ管理紹介/比較
Mac OS X のパッケージ管理紹介/比較Mac OS X のパッケージ管理紹介/比較
Mac OS X のパッケージ管理紹介/比較
 
Rails の自動読み込みを支える技術
Rails の自動読み込みを支える技術Rails の自動読み込みを支える技術
Rails の自動読み込みを支える技術
 
Liquid の紹介
Liquid の紹介Liquid の紹介
Liquid の紹介
 
軽量マークアップ言語で気楽にマークアップ
軽量マークアップ言語で気楽にマークアップ軽量マークアップ言語で気楽にマークアップ
軽量マークアップ言語で気楽にマークアップ
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
 

More from Tomohiko Himura

コンピュータをもっと使おう
コンピュータをもっと使おうコンピュータをもっと使おう
コンピュータをもっと使おうTomohiko Himura
 
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。Tomohiko Himura
 
Rails プロジェクトでスタートダッシュを決める
Rails プロジェクトでスタートダッシュを決めるRails プロジェクトでスタートダッシュを決める
Rails プロジェクトでスタートダッシュを決めるTomohiko Himura
 
すごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試したすごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試したTomohiko Himura
 
Rails Guide 翻訳しようぜ。
Rails Guide 翻訳しようぜ。Rails Guide 翻訳しようぜ。
Rails Guide 翻訳しようぜ。Tomohiko Himura
 
日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 githubTomohiko Himura
 

More from Tomohiko Himura (9)

コンピュータをもっと使おう
コンピュータをもっと使おうコンピュータをもっと使おう
コンピュータをもっと使おう
 
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
 
Rails プロジェクトでスタートダッシュを決める
Rails プロジェクトでスタートダッシュを決めるRails プロジェクトでスタートダッシュを決める
Rails プロジェクトでスタートダッシュを決める
 
すごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試したすごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試した
 
Rails Guide 翻訳しようぜ。
Rails Guide 翻訳しようぜ。Rails Guide 翻訳しようぜ。
Rails Guide 翻訳しようぜ。
 
Hiroshima.rb on github
Hiroshima.rb on githubHiroshima.rb on github
Hiroshima.rb on github
 
日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github
 
Augmの裏側
Augmの裏側Augmの裏側
Augmの裏側
 
git-webtouchmeeting
git-webtouchmeetinggit-webtouchmeeting
git-webtouchmeeting
 

Hiroshimarb 027-fiber