SlideShare a Scribd company logo
1 of 81
Clojureの
スレッディングマクロ
っぽいものをRubyで実装してみた話
について
esm LT
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
自己紹介
▸ 久納 工
▸ 2006年入社
▸ ITサービス事業部
Clojure
▸Clojure (発音は/'klouʒər/[2], クロージャー)はプログラミング言
語であり、LISP系の言語の方言の一つである。関数型プログラ
ミングのプログラミングスタイルでのインタラクティブな開発
を支援し、マルチスレッドプログラムの開発を容易化する汎用
言語である。Clojure言語のプログラムはJava仮想マシンと
Microsoft .NET 共通言語ランタイムで動作する。Clojure言語は
「データとしてのプログラムコード」 (英語:「code as data」)
という思想で設計されており、洗練されたマクロ機構を持つ。
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
Wikipediaより
Clojure
▸Clojure (発音は/'klouʒər/[2], クロージャー)はプログラミング言
語であり、LISP系の言語の方言の一つである。関数型プログラ
ミングのプログラミングスタイルでのインタラクティブな開発
を支援し、マルチスレッドプログラムの開発を容易化する汎用
言語である。Clojure言語のプログラムはJava仮想マシンと
Microsoft .NET 共通言語ランタイムで動作する。Clojure言語は
「データとしてのプログラムコード」 (英語:「code as data」)
という思想で設計されており、洗練されたマクロ機構を持つ。
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
Wikipediaより
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロとは
ClojureのS式だと
(reduce + 100
(map #(* %1 2)
(filter even?
[1 2 3 4])))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロとは
ClojureのS式だと
(reduce + 100
(map #(* %1 2)
(filter even?
[1 2 3 4]))) こう実行されて
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロとは
ClojureのS式だと
(reduce + 100
(map #(* %1 2)
(filter even?
[1 2 3 4])))
;;=> 112
こうなる
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロとは
スレッディングマクロだと
(->>
[1 2 3 4]
(filter even?)
(map #(* %1 2))
(reduce + 100))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロとは
スレッディングマクロだと
(->>
[1 2 3 4]
(filter even?)
(map #(* %1 2))
(reduce + 100))
こう実行されて
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロとは
スレッディングマクロだと
(->>
[1 2 3 4]
(filter even?)
(map #(* %1 2))
(reduce + 100))
;;=> 112
こうなる
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロの利点
スレッディングマクロ
(->>
[1 2 3 4]
(filter even?)
(map #(* %1 2))
(reduce + 100))
S式のみ
(reduce + 100
(map #(* %1 2)
(filter even?
[1 2 3 4])))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロの利点
スレッディングマクロ
(->>
[1 2 3 4]
(filter even?)
(map #(* %1 2))
(reduce + 100))
S式のみ
(reduce + 100
(map #(* %1 2)
(filter even?
[1 2 3 4])))
スレッディングマクロを使うと
評価の時系列順に上から読むことが出来る
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
他にもあるスレッディングマクロの利点
ClojureのS式だと
(reduce + 100
(map #(* %1 2)
(filter even?
[1 2 3 4])))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
他にもあるスレッディングマクロの利点
ClojureのS式だと
(reduce + 100
..(map #(* %1 2)
....(filter even?
......[1 2 3 4])))
インデントはこうなる
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
他にもあるスレッディングマクロの利点
スレッディングマクロだと
(->>
[1 2 3 4]
(filter even?)
(map #(* %1 2))
(reduce + 100))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
他にもあるスレッディングマクロの利点
スレッディングマクロだと
(->>
..[1 2 3 4]
..(filter even?)
..(map #(* %1 2))
..(reduce + 100))
インデントはこうなる
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
他にもあるスレッディングマクロの利点
スレッディングマクロ
(->>
[1 2 3 4]
(filter even?)
(map #(* %1 2))
(reduce + 100))
S式のみ
(reduce + 100
(map #(* %1 2)
(filter even?
[1 2 3 4])))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
他にもあるスレッディングマクロの利点
スレッディングマクロ
(->>
..[1 2 3 4]
..(filter even?)
..(map #(* %1 2))
..(reduce + 100))
S式のみ
(reduce + 100
..(map #(* %1 2)
....(filter even?
......[1 2 3 4])))
コードのインデントが深くならない
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
スレッディングマクロの利点
他にも有るけど割愛
Clojureの
スレッディングマクロ
っぽいものをRubyで実装してみた話
について
esm LT
Clojureの
スレッディングマクロ
っぽいものをRubyで実装してみた話
について
esm LT
Clojureの
スレッディングマクロ
っぽいものをRubyで実装してみた話
について
第二部
esm LT
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
Rubyのラムダ式でS式相当の処理を書くと…
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
Rubyのラムダ式でS式相当の処理を書くと…
-> (collection) { collection.reduce(100, :+) }.
call(-> (collection) { collection.map {|e| e * 2 } }.
call(-> (collection) { collection.select(&:even?) }.
call([1, 2, 3, 4])))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
Rubyのラムダ式でS式相当の処理を書くと…
-> (collection) { collection.reduce(100, :+) }.
call(-> (collection) { collection.map {|e| e * 2 } }.
call(-> (collection) { collection.select(&:even?) }.
call([1, 2, 3, 4])))
これをスレッディングマクロっぽく
書けるようにする
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
基本のアイディア
[
-> (collection) { collection.select(&:even?) },
-> (collection) {
collection.map {|e| e * 2 }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
基本のアイディア
[
-> (collection) { collection.select(&:even?) },
-> (collection) {
collection.map {|e| e * 2 }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
Procの配列に対して
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
基本のアイディア
[
-> (collection) { collection.select(&:even?) },
-> (collection) {
collection.map {|e| e * 2 }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
Procの配列に対して
reduceして、処理結果に順々に適用する
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
基本のアイディア
[
-> (collection) { collection.select(&:even?) },
-> (collection) {
collection.map {|e| e * 2 }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
=> 112
Procの配列に対して
reduceして、処理結果に順々に適用する
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
とりあえずここまで実装してみる
def thread_last(*procs)
procs[1..-1].reduce(procs.first) {|acc, proc|
proc.call acc
}
end
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
とりあえずここまで実装してみる
def thread_last(*procs)
procs[1..-1].reduce(procs.first) {|acc, proc|
proc.call acc
}
end
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (collection) { collection.map {|e| e * 2 } },
-> (collection) { collection.reduce(100, :+) }
)
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
とりあえずここまで実装してみる
def thread_last(*procs)
procs[1..-1].reduce(procs.first) {|acc, proc|
proc.call acc
}
end
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (collection) { collection.map {|e| e * 2 } },
-> (collection) { collection.reduce(100, :+) }
)
=> 112
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
とりあえずここまで実装してみる
def thread_last(*procs)
procs[1..-1].reduce(procs.first) {|acc, proc|
proc.call acc
}
end
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (collection) { collection.map {|e| e * 2 } },
-> (collection) { collection.reduce(100, :+) }
)
=> 112 出来た!
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
基本のアイディア
[
-> (collection) { collection.select(&:even?) },
-> (collection) {
collection.map {|e| e * 2 }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときはどうする?
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときはどうする?
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
} nを指定したい
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときはどうする?
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ArgumentError: wrong number of arguments (given 1,
expected 2)
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときはどうする?
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ArgumentError: wrong number of arguments (given 1,
expected 2)
一つの引数にだけ
Procを適用している
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときは
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
},
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときはこうする!
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
}.curry[2],
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときはこうする!
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
}.curry[2],
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
=> 112
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
こんなときはこうする!
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
}.curry[2],
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
curryとは?
60sec で分かる(と良いなと
思う)
カリー化と部分適用
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
関数がただ一つの引数だけをとるようにすること
。この状態の関数をカリー化されていると呼ぶ。
2引数の関数はカリー化することで、引数の数が
一つである関数と、その関数を返す引数の数が一
つの関数に分けられる。
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
Ruby で書くと…
->(x, y) { x + y }.call(2, 3)
=> 5
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
Ruby で書くと…
->(x, y) { x + y }.call(2, 3)
=> 5
->(x) { -> (y) { x + y } }.call(2).call(3)
=> 5
カリー化(手動)
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
Ruby で書くと…
->(x, y) { x + y }.call(2, 3)
=> 5
->(x, y) { x + y }.curry[2][3]
=> 5
カリー化
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
Ruby で書くと…
->(x, y) { x + y }.call(2, 3)
->(x, y) { x + y }.curry[2][3]
``-> (y) { 2 + y }`` 相当のProcが返ってくる
カリー化
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
任意の数の引数のProcをカリー化出来る
->(x, y, z) { x + y + z }.curry[2][3][4]
=> 9
->(x, y, z, xx, yy, zz) { x + y + z + xx + yy + zz
}.curry[2][3][4][5][6][7]
=> 27
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
途中で変数に取ることも出来る
partialized_proc = ->(x, y) { x + y }.curry[2]
=> #<Proc:0x007feaa2f4c6f0 (lambda)>
partialized_proc[3]
=> 5
60sec で分かる(と良いなと思う)カリー化と部分適用
カリー化とは
途中で変数に取ることも出来る
partialized_proc = ->(x, y) { x + y }.curry[2]
=> #<Proc:0x007feaa2f4c6f0 (lambda)>
partialized_proc[3]
=> 5
全ての引数が渡されると処理結果が返ってくる
60sec で分かる(と良いなと思う)カリー化と部分適用
部分適用とは
部分適用とは、関数に対して全ての引数を一度に
渡さず、一部の引数だけ渡すことができる仕組み
。
60sec で分かる(と良いなと思う)カリー化と部分適用
部分適用とは
partialized_proc = ->(x, y) { x + y }.curry[2]
=> #<Proc:0x007feaa2f4c6f0 (lambda)>
partialized_proc[3]
=> 5
60sec で分かる(と良いなと思う)カリー化と部分適用
部分適用とは
partialized_proc = ->(x, y) { x + y }.curry[2]
=> #<Proc:0x007feaa2f4c6f0 (lambda)>
partialized_proc[3]
=> 5
これが部分適用された状態のProc
60sec で分かる(と良いなと
思う)
カリー化と部分適用
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
⚠注意事項
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
⚠注意事項
Clojureではスレッディングマクロの実現に
Transducersという機構を使用しています。
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
⚠注意事項
Clojureではスレッディングマクロの実現に
Transducersという機構を使用しています。
が、ここではTransducersについては触れません。
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
この書き方を
[
-> (collection) { collection.select(&:even?) },
-> (n, collection) {
collection.map {|e| e * n }
}.curry[2],
-> (collection) { collection.reduce(100, :+) }
].reduce([1, 2, 3, 4]) {
|acc, proc| proc.call(acc)
}
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
thread_last に適用すると…
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (n, collection) { collection.map {|e| e * n }.curry[2] },
-> (collection) { collection.reduce(100, :+) }
)
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
thread_last に適用すると…
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (n, collection) { collection.map {|e| e * n }.curry[2] },
-> (collection) { collection.reduce(100, :+) }
)
=> 112
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
thread_last に適用すると…
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (n, collection) { collection.map {|e| e * n }.curry[2] },
-> (collection) { collection.reduce(100, :+) }
)
=> 112
利用者がcurryしないといけない
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
いちいちcurryしたくない……
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
いちいちcurryしたくない……
class Proc
def |(arg)
self.curry[arg]
end
end
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
いちいちcurryしたくない……
class Proc
def |(arg)
self.curry[arg]
end
end
Procに | メソッドを生やす
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
いちいちcurryしたくない……
class Proc
def |(arg)
self.curry[arg]
end
end
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (n, collection) { collection.map {|e| e * n } } | 2,
-> (collection) { collection.reduce(100, :+) }
)
Procに | メソッドを生やす
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
いちいちcurryしたくない……
class Proc
def |(arg)
self.curry[arg]
end
end
thread_last(
[1,2,3,4],
-> (collection) { collection.select(&:even?) },
-> (n, collection) { collection.map {|e| e * n } } | 2,
-> (collection) { collection.reduce(100, :+) }
)
=> 112
Procに | メソッドを生やす
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
thread_last(->>) が出来た!
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
thread_last(->>) が出来た!
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
色々なスレッディングマクロ
‣ ->
‣ ->>
‣ as->
‣ some->
‣ some->>
‣ cond->
‣ cond->>
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
色々なスレッディングマクロ
‣ ->
‣ ->>
‣ as->
‣ some->
‣ some->>
‣ cond->
‣ cond->>
まだまだ戦いは続く……
▸一番最初の値にProcが来ることもある。ので、最初がProcならば実行する。もちろん引数の数が不定なのでcallで
はなくcurryで。
▸Procに生やした|メソッドで即時curryしていたけど、thread_first(->) のときは実行する寸前までカリー化したくな
いので、実行時まで配列で持っているようにした。
▸thread_as(as->) するときは引数の挿入場所を選べる。シンボルで表現したいがProcの結果がシンボルになること
も有るので、表現しきれない。のでProcに新たなメソッド&を生やした。かつ、挿入位置を表す型を用意した。
▸map とかreduceとかするラムダ式を一々書きたくない……ので、引数で受け取ったCollectionをレシーバーとして
mapを実行するメソッド_map(proc)がincludeしたクラスのselfに生えるようにした。reduce, selectに関しても同
様。
▸↑で作ったメソッドで、Procを渡したいときとBlockを渡したいときがある。
▸Clojureの->>と同じようなメソッドのエイリアスを設けたいが、- 始まりのメソッドは書けない。マルチバイトは
いけるので、色々考えた結果これが一番近いと思う。 ``ー✈✈``
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
戦いの記録(ダイジェスト版)
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
色々やった結果
-> (collection) { collection.reduce(100, :+) }.
call(-> (collection) { collection.map {|e| e * 2 } }.
call(-> (collection) { collection.select(&:even?) }.
call([1, 2, 3, 4])))
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
色々やった結果
-> (collection) { collection.reduce(100, :+) }.
call(-> (collection) { collection.map {|e| e * 2 } }.
call(-> (collection) { collection.select(&:even?) }.
call([1, 2, 3, 4])))
thread_last(
[1, 2, 3, 4],
_select(&:even?),
_map(-> (e) { e * 2 }),
_reduce(100, &:+)
)
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
色々やった結果
-> (collection) { collection.reduce(100, :+) }.
call(-> (collection) { collection.map {|e| e * 2 } }.
call(-> (collection) { collection.select(&:even?) }.
call([1, 2, 3, 4])))
thread_last(
[1, 2, 3, 4],
_select(&:even?),
_map(-> (e) { e * 2 }),
_reduce(100, &:+)
)
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
なお……
thread_last(
[1, 2, 3, 4],
_select(&:even?),
_map(-> (e) { e * 2 }),
_reduce(100, &:+)
)
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
なお……
thread_last(
[1, 2, 3, 4],
_select(&:even?),
_map(-> (e) { e * 2 }),
_reduce(100, &:+)
)
このコードをラムダ式を使わずに
普通に書くと……
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
なお……
[1, 2, 3, 4].
select(&:even?).
map {|e| e * 2}.
reduce(100, :+)
thread_last(
[1, 2, 3, 4],
_select(&:even?),
_map(-> (e) { e * 2 }),
_reduce(100, &:+)
)
このコードをラムダ式を使わずに
普通に書くと……
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
結論。
ClojureのスレッディングマクロっぽいものをRubyで実装してみた話につい
て
結論。
素のRubyすごい
Clojureの
スレッディングマクロ
っぽいものをRubyで実装してみた話
について
第二部
esm LT

More Related Content

What's hot

PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)Satoshi Yamada
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」Nagi Teramo
 
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニングより深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニングYuto Hayamizu
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-uedayou
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_publicKazuaki Ishizaki
 
mxnetで頑張る深層学習
mxnetで頑張る深層学習mxnetで頑張る深層学習
mxnetで頑張る深層学習Takashi Kitano
 
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-Yasuyuki Sugai
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)Hiromu Shioya
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by HapyrusKoichi Fujikawa
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習x1 ichi
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Seiya Tokui
 
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会Satoshi Yamada
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPyShiqiao Du
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)Satoshi Yamada
 

What's hot (20)

PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニングより深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
 
mxnetで頑張る深層学習
mxnetで頑張る深層学習mxnetで頑張る深層学習
mxnetで頑張る深層学習
 
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
 
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
 
Rakuten tech conf
Rakuten tech confRakuten tech conf
Rakuten tech conf
 
20071030
2007103020071030
20071030
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
 
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
 
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
 

Similar to Esm lt threading_macro

第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまでMugen Fujii
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Daiyu Hatakeyama
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GParsTakahiro Sugiura
 
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Takahiro Harada
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめLispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめSatoshi imai
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)TatsuyaKatayama
 
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Applicationguestc68147
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
関東第2回r勉強会
関東第2回r勉強会関東第2回r勉強会
関東第2回r勉強会Paweł Rusin
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8Kohei KaiGai
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 

Similar to Esm lt threading_macro (20)

Juliaで並列計算
Juliaで並列計算Juliaで並列計算
Juliaで並列計算
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
LINQ概要
LINQ概要LINQ概要
LINQ概要
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GPars
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめLispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
 
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
関東第2回r勉強会
関東第2回r勉強会関東第2回r勉強会
関東第2回r勉強会
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

Esm lt threading_macro