Soumettre la recherche
Mettre en ligne
Ruby1.9のfiberのかっこいい使い方
•
Télécharger en tant que PPTX, PDF
•
10 j'aime
•
2,679 vues
Kindai University
Suivre
Technologie
Signaler
Partager
Signaler
Partager
1 sur 23
Télécharger maintenant
Recommandé
Ruby講座一回目
Ruby講座一回目
Masayuki Matsumoto
Ruby講座一回目
Ruby講座一回目
Masayuki Matsumoto
Start!! Ruby
Start!! Ruby
mitim
ランダム・シャッフル
ランダム・シャッフル
Maruyama Tetsutaro
Ruby1.9のfiberのかっこよくつかおう
Ruby1.9のfiberのかっこよくつかおう
Kindai University
I Pv6 Service Deployment Guideline
I Pv6 Service Deployment Guideline
guestfcd0535
Ruby 1.9 Fibers
Ruby 1.9 Fibers
Kevin Ball
new Objctive-C literal syntax
new Objctive-C literal syntax
Wataru Kimura
Recommandé
Ruby講座一回目
Ruby講座一回目
Masayuki Matsumoto
Ruby講座一回目
Ruby講座一回目
Masayuki Matsumoto
Start!! Ruby
Start!! Ruby
mitim
ランダム・シャッフル
ランダム・シャッフル
Maruyama Tetsutaro
Ruby1.9のfiberのかっこよくつかおう
Ruby1.9のfiberのかっこよくつかおう
Kindai University
I Pv6 Service Deployment Guideline
I Pv6 Service Deployment Guideline
guestfcd0535
Ruby 1.9 Fibers
Ruby 1.9 Fibers
Kevin Ball
new Objctive-C literal syntax
new Objctive-C literal syntax
Wataru Kimura
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
masaaki komori
Next Generation Web Application Architecture
Next Generation Web Application Architecture
Koji SHIMADA
Sinatraのススメ
Sinatraのススメ
@odailly_jp Odai
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
Rubyはとても「人間的」
Rubyはとても「人間的」
Kazuhiro Serizawa
本格的に始めるzsh
本格的に始めるzsh
Hideaki Miyake
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
プログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強すること
なおき きしだ
Project Lambdaの基礎
Project Lambdaの基礎
Yuichi Sakuraba
受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術
Hiroshi Koyama
Code as data as code.
Code as data as code.
Mike Fogus
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
ushiostarfish _
ES6 at PayPal
ES6 at PayPal
Jamund Ferguson
Eclipse活用術
Eclipse活用術
Masahiro Wakame
Storm Anatomy
Storm Anatomy
Eiichiro Uchiumi
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Naotoshi Seo
ChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef Antipatterns
Julian Dunn
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
Hideaki Miyake
Build Your Own SaaS using Docker
Build Your Own SaaS using Docker
Julien Barbier
Blockchain and Virtual Currency- Technical issues -
Blockchain and Virtual Currency- Technical issues -
Kindai University
Gbec finance and blockchain
Gbec finance and blockchain
Kindai University
Contenu connexe
En vedette
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
masaaki komori
Next Generation Web Application Architecture
Next Generation Web Application Architecture
Koji SHIMADA
Sinatraのススメ
Sinatraのススメ
@odailly_jp Odai
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
Rubyはとても「人間的」
Rubyはとても「人間的」
Kazuhiro Serizawa
本格的に始めるzsh
本格的に始めるzsh
Hideaki Miyake
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
プログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強すること
なおき きしだ
Project Lambdaの基礎
Project Lambdaの基礎
Yuichi Sakuraba
受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術
Hiroshi Koyama
Code as data as code.
Code as data as code.
Mike Fogus
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
ushiostarfish _
ES6 at PayPal
ES6 at PayPal
Jamund Ferguson
Eclipse活用術
Eclipse活用術
Masahiro Wakame
Storm Anatomy
Storm Anatomy
Eiichiro Uchiumi
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Naotoshi Seo
ChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef Antipatterns
Julian Dunn
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
Hideaki Miyake
Build Your Own SaaS using Docker
Build Your Own SaaS using Docker
Julien Barbier
En vedette
(20)
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
Next Generation Web Application Architecture
Next Generation Web Application Architecture
Sinatraのススメ
Sinatraのススメ
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
Rubyはとても「人間的」
Rubyはとても「人間的」
本格的に始めるzsh
本格的に始めるzsh
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
プログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強すること
Project Lambdaの基礎
Project Lambdaの基礎
受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術
Code as data as code.
Code as data as code.
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
ES6 at PayPal
ES6 at PayPal
Eclipse活用術
Eclipse活用術
Storm Anatomy
Storm Anatomy
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
ChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef Antipatterns
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
Build Your Own SaaS using Docker
Build Your Own SaaS using Docker
Plus de Kindai University
Blockchain and Virtual Currency- Technical issues -
Blockchain and Virtual Currency- Technical issues -
Kindai University
Gbec finance and blockchain
Gbec finance and blockchain
Kindai University
Blockchian definition
Blockchian definition
Kindai University
Blockchain economy
Blockchain economy
Kindai University
ブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンス
Kindai University
福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー
Kindai University
福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版
Kindai University
ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築
Kindai University
やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨
Kindai University
FinTechと金融サービスの将来像
FinTechと金融サービスの将来像
Kindai University
Congre chain説明資料
Congre chain説明資料
Kindai University
仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech
Kindai University
ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題
Kindai University
ブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocol
Kindai University
Open fintech and Kachatter
Open fintech and Kachatter
Kindai University
電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決
Kindai University
仮想通貨実験計画
仮想通貨実験計画
Kindai University
Bit Nexus
Bit Nexus
Kindai University
電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)
Kindai University
薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト
Kindai University
Plus de Kindai University
(20)
Blockchain and Virtual Currency- Technical issues -
Blockchain and Virtual Currency- Technical issues -
Gbec finance and blockchain
Gbec finance and blockchain
Blockchian definition
Blockchian definition
Blockchain economy
Blockchain economy
ブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンス
福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版
ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築
やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨
FinTechと金融サービスの将来像
FinTechと金融サービスの将来像
Congre chain説明資料
Congre chain説明資料
仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech
ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題
ブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocol
Open fintech and Kachatter
Open fintech and Kachatter
電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決
仮想通貨実験計画
仮想通貨実験計画
Bit Nexus
Bit Nexus
電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)
薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト
Dernier
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
Dernier
(9)
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
Ruby1.9のfiberのかっこいい使い方
1.
Ruby1.9のFiberとクロージャのかっこいい使い方 Rubyist九州 山崎重一郎
2.
まず、関数、クロージャ、継続の気持ちを説明してみます マインド Rubyではどうなっているのか?
3.
関数とマインド 関数はいつも上から目線 自分自身の心が行っていることを幽体離脱して外から眺める感じ
ああして こうして こうなったら こうして 関数の定義
4.
0マインド 「何もない」状態を考えてみましょう 0
= φ = {} {}
5.
1マインド 「何もない」と思っている自分を見ている自分 1 = {φ}
{}
6.
2マインド 1マインドの自分を見ている自分 2 = {φ,{φ}}
7.
3マインド 2マインドの自分を見ている自分 3 = {φ,{φ},{φ,{φ}}}
8.
ωマインド これってずっと無限にできるよねと思っている自分 ω = {φ,{φ},{φ,{φ}},...}
... 「我はαでありωである」 ヨハネの黙示録
9.
ω+1マインド 「これってずっと無限にできるよねと思っている自分」を見ている自分 ω+1 = {ω}
10.
11.
まだまだ 3ωマインド ω×ωマインド
ωωマインド .... ★でも、ずっとずっとやると精神を病みます
12.
ωマインドの関数定義 λを使うことがωマインドの例 ->
x { ... } 階乗の再帰的定義 fact = -> n {n==0 ? 1 : n*fact[n-1]} ★下のように書く方が Ruby っぽいけど fact = -> x {(1..x).reduce(:*)}
13.
ω+ωマインドの関数定義 λを二つ使うとω+ω ->
x { -> y {...} } 組み合わせ関数(再帰なのですっごく遅い) combi=->n{->r{r==1 ?n:(n==r ?1:combi[n-1][r-1]+combi[n-1][r])}}
14.
でも有限のマインドも大切 クロージャ:上から目線でつくった状態 ωマインドの視点から -> nマインド(状態)を見る
ファイバー:継続、ジェネレータ ジェネレータ: n マインドから ωマインドを見る その逆も
15.
16.
関数のメモ化 関数には時間の概念がない でも、もう一つ上のωの視点から見おろせば状態が作れる
組み合わせ関数のメモ化 combi_memo= ->m { ->n {m[n]||={}; ->r {m[n][r]||=combi[n][r]}}} > cm=combi_memo[{}] > cm[3][2] => 3 > cm[30][7] => 2035800 > eval('m',cm.binding) => {3=>{2=>3}, 30=>{7=>2035800}}
17.
Fiber f=Fiber.new{|x|
puts '最初' Fiber.yield puts x y=Fiber.yield puts y } > f.resume 3 #new メソッドへ 最初 => nil > f.resume #yield メソッドへ 3 => nil > f.resume7 #yield メソッドへ 7 => nil > f.resume FiberError: dead fiber called 継続、軽量スレッド Fiber.new {|x|...} ファイバーの生成 Fiver.yield(obj) 親のコンテクストに行く resume(obj) メソッド 子供のコンテクストに行く (途中でとまっていた処理を継続)
18.
Fiber によるジェネレータ nマインドとωマインドを行き来する
無限ループでデータを無限に生成するプログラムの最初のn要素 自然数ジェネレータ num= -> a {loop {a+=1}} > num[0] ... 無限ループ〜 無限集合を素直に生成しているんだけどね ファイバーにした自然数ジェネレータ n = Fiber.new{|a|loop{Fiber.yielda+=1}} 無限集合の最初の5個だけ取り出す (Haskellみたいでかっこいい!) > 5.times {puts n.resume 0} 1 2 3 4 5 => 5
19.
Fiber によるジェネレータ フィボナッチ数列バージョン!
フィボナッチ数列ジェネレータ fib = -> x {a,b=x loop {a; a,b=b,a+b}} >fib[[0,1]] ... 無限ループ〜 フィボナッチ数列を素直に生成している ファイバーにしたフィボナッチ数列ジェネレータ f = Fiber.new{|x| a,b=x loop {Fiber.yielda; a,b=b,a+b}} 無限集合の最初の5個だけ取り出す > 5.times {puts f.resume [0,1]} 0 1 1 2 3 => 5 もっとHaskellチックにこんなのもいいかも! deff.take(n) n.times {puts self.resume} end > f.take 10
20.
Fiberによるコルーチンで軽量イベント駆動マシン 初期のMacintosh OS
多数のコルーチンの集合体でできていた (すっごく軽量なスレッドみたいなもの) Macintosh 128K 8MHz 128Kb コルーチン コルーチン コルーチン コルーチン 操作による イベント 実際のメモリ コルーチン ビットマップ への表示など
21.
Fiberによるコルーチンで軽量イベント駆動マシン Rails 3.2
からPjaxが標準に WebサーバにFiberプールで軽量スレッド メモリ節約、起動/再起動の高速化 コルーチン コルーチン Pjax ブラウザ コルーチン コルーチン 操作による イベント Fiber対応Webサーバ unicornとかGoliathとか コルーチン ブラウザへの 表示変更
22.
FiberとThreadの比較 出典:Ruby Fibers
Vs Ruby Threads http://oldmoe.blogspot.com/2008/08/ruby-fibers-vs-ruby-threads.html
23.
Fiberによるリアルタイム処理 次回にね!
Télécharger maintenant