SlideShare a Scribd company logo
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

KEY
OSC 2012 HIROSHIMA
Tomohiko Himura
 
PDF
Hiroshimarb 027-fiber
Tomohiko Himura
 
PDF
Hiroshimarbについて
Tomohiko Himura
 
PDF
すごい広島
Tomohiko Himura
 
PDF
Hakyllで遊んでみた。
Tomohiko Himura
 
PDF
黒い画面入門 + パッケージ管理紹介 + Macの使い方とか
Tomohiko Himura
 
PDF
すごい Hiroshima で楽しく学ぼう
Tomohiko Himura
 
PDF
つながりをゆるふわにしよう Active supprt notifications
Tomohiko Himura
 
OSC 2012 HIROSHIMA
Tomohiko Himura
 
Hiroshimarb 027-fiber
Tomohiko Himura
 
Hiroshimarbについて
Tomohiko Himura
 
すごい広島
Tomohiko Himura
 
Hakyllで遊んでみた。
Tomohiko Himura
 
黒い画面入門 + パッケージ管理紹介 + Macの使い方とか
Tomohiko Himura
 
すごい Hiroshima で楽しく学ぼう
Tomohiko Himura
 
つながりをゆるふわにしよう Active supprt notifications
Tomohiko Himura
 

Viewers also liked (9)

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

Similar to Hiroshimarb 027-fiber (20)

PDF
Fiberの使いどころ
Tomoya Kawanishi
 
PDF
Enumerable lazy について
Tomoya Kawanishi
 
PPTX
Ruby1.9のfiberのかっこよくつかおう
Kindai University
 
PDF
2011年12月16日
nukaemon
 
PDF
フィボナッチ数列の作り方
Tomoya Kawanishi
 
PDF
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
mametter
 
PDF
コルーチンを使おう
amusementcreators
 
PDF
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
 
ODP
Lt会01_uetch
Tomoaki Ueda
 
PDF
2011年12月9日
nukaemon
 
PPTX
20150725 オープンキャンパス資料
Takeo Kunishima
 
PDF
mrubyのfiberを試してみた
Kindai University
 
PPTX
岡山県立大学オープンキャンパス資料
Takeo Kunishima
 
PPTX
Enshu5
sudahiroshi
 
PPTX
Ruby講座一回目
Masayuki Matsumoto
 
PDF
"What Does Your Code Smell Like?"で学ぶPerl6
risou
 
PPTX
Ruby講座一回目
Masayuki Matsumoto
 
PDF
新しくプログラミング言語・・・Rubyでやってみた
Tomoaki Ueda
 
PPTX
20160723 オープンキャンパス資料
Takeo Kunishima
 
PDF
入門 超絶技巧プログラミング !
Nobutada Matsubara
 
Fiberの使いどころ
Tomoya Kawanishi
 
Enumerable lazy について
Tomoya Kawanishi
 
Ruby1.9のfiberのかっこよくつかおう
Kindai University
 
2011年12月16日
nukaemon
 
フィボナッチ数列の作り方
Tomoya Kawanishi
 
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
mametter
 
コルーチンを使おう
amusementcreators
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
 
Lt会01_uetch
Tomoaki Ueda
 
2011年12月9日
nukaemon
 
20150725 オープンキャンパス資料
Takeo Kunishima
 
mrubyのfiberを試してみた
Kindai University
 
岡山県立大学オープンキャンパス資料
Takeo Kunishima
 
Enshu5
sudahiroshi
 
Ruby講座一回目
Masayuki Matsumoto
 
"What Does Your Code Smell Like?"で学ぶPerl6
risou
 
Ruby講座一回目
Masayuki Matsumoto
 
新しくプログラミング言語・・・Rubyでやってみた
Tomoaki Ueda
 
20160723 オープンキャンパス資料
Takeo Kunishima
 
入門 超絶技巧プログラミング !
Nobutada Matsubara
 
Ad

More from Tomohiko Himura (9)

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

Hiroshimarb 027-fiber