SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Pattern match
with case class
佐々木 海(Sasaki Kai)
第2回Swift勉強会
@TechBuzzSpace
Who am I?
佐々木 海(Sasaki Kai)
@Lewuathe
プラットフォームエンジニア
emailとか、Push通知とか
C/C++, nodejs, Python
iOSアプリは普段作ってません
Topic
ケースクラスを使ったパターンマッチを
Swiftで実装してみた話
What is case class?
Scalaに組み込みの仕組み
!
!
クラス名の前にcaseキーワード
abstract class Expr
case class Var(name: String) extends Expr
case class Number(num: Double) extends Expr
Why case class?
ファクトリメソッドの生成
Why case class?
ファクトリメソッドの生成
constant memberの生成
Why case class?
ファクトリメソッドの生成
constant memberの生成
toString,equalsとかの実装
Why case class?
ファクトリメソッドの生成
constant memberの生成
toString,equalsとかの実装
コンストラクタパターン
What is constructor
pattern?
case class User(name: String, age: Int){}
!
!
!
What is constructor
pattern?
case class User(name: String, age: Int){}
!
val you = User(“Nobita”, 12)
!
!
!
What is constructor
pattern?
case class User(name: String, age: Int){}
!
val you = User(“Nobita”, 12)
!
you match {
case User(“Takeshi”, 13) => “He is Takeshi”
case User(“Nobita”, 12) => “He is Nobita”
case _ => “Who is he?”
}
!
What is constructor
pattern?
要するに
!
コンストラクタに渡された引数リストで
パターンマッチを行う仕組み
BTW, Swift?
Swiftではパターンマッチが使える
switch文
loop
変数binding
tuple, identifier
BTW, Swift?
でもコンストラクタパターンは使えない
SwiftCase
コンストラクタパターンによるマッ
チングをするためのライブラリ
https://github.com/Lewuathe/SwiftCase
How to use
class User: SwiftCase {
let name: String
let age: Int
!
init(name: String, age: Int) {
self.name = name
self.age = age
super.init(name, age)
}
}
!
How to use
class User: SwiftCase {
let name: String
let age: Int
!
init(name: String, age: Int) {
self.name = name
self.age = age
super.init(name, age)
}
}
!
SwiftCaseを
継承させる
How to use
class User: SwiftCase {
let name: String
let age: Int
!
init(name: String, age: Int) {
self.name = name
self.age = age
super.init(name, age)
}
}
!
SwiftCaseを
継承させる
superクラスの
initializerに
パラメタリストを渡す
How to use
let user = User(name: “Nobita”, 12)
!
switch user {
case User(name: “Takeshi”, age: 13):
println(“He is Takeshi”)
case User(name: “Nobita”, age: 12):
println(“He is Nobita”)
case default:
println(“Who is he?”)
}
!
// -> He is Nobita
!
How to use
let user = User(name: “Nobita”, 12)
!
switch user {
case User(name: “Takeshi”, age: 13):
println(“He is Takeshi”)
case User(name: “Nobita”, age: 12):
println(“He is Nobita”)
case default:
println(“Who is he?”)
}
!
// -> He is Nobita
直書き
Recursive match
class UserPair: SwiftCase {
let first: User
let second: User
!
init(first: User, second: User) {
self.first = first
self.second = second
super.init(first, second)
}
}
!
メンバにUser型
Recursive match
class UserPair: SwiftCase {
let first: User
let second: User
!
init(first: User, second: User) {
self.first = first
self.second = second
super.init(first, second)
}
}
!
メンバにUser型
superクラスの
initializerに
パラメタリストを渡す
Recursive match
let nobi = User(name: “Nobita”, 12)
let take = User(name: “Takeshi”, 13)
!
!
let userPair = UserPair(first: nobi,
second: take)
!
!
Recursive match
switch userPair {
case User(“Takeshi”, 13):
println(“He is Takeshi”)
case UserPair(User(name: “Nobita”, age: 100),
User(name: “Takeshi”, age: 99)):
println(“They are too old”)
case UserPair(User(name: “Nobita”, age: 12),
User(name: “Takeshi”, age: 13)):
println(“Yes, that’s right”)
case default:
println(“Who are they?”)
}
!
Recursive match
switch userPair {
case User(“Takeshi”, 13):
println(“He is Takeshi”)
case UserPair(User(name: “Nobita”, age: 100),
User(name: “Takeshi”, age: 99)):
println(“They are too old”)
case UserPair(User(name: “Nobita”, age: 12),
User(name: “Takeshi”, age: 13)):
println(“Yes, that’s right”)
case default:
println(“Who are they?”)
}
!
Recursive match
switch userPair {
case User(“Takeshi”, 13):
println(“He is Takeshi”)
case UserPair(User(name: “Nobita”, age: 100),
User(name: “Takeshi”, age: 99)):
println(“They are too old”)
case UserPair(User(name: “Nobita”, age: 12),
User(name: “Takeshi”, age: 13)):
println(“Yes, that’s right”)
case default:
println(“Who are they?”)
}
!
メンバのメンバ
とmatch
Why SwiftCase?
コンストラクタパターンによるマッチング
SwiftCase同士での再帰的なマッチング
Tips
Expression pattern
Type casting pattern
Equitable Protocol
Variadic Parameters
Expression Pattern
switch文のパターンマッチで呼ばれる
func ~= (c1: SwiftCase, c2: SwiftCase)-> Bool {
return internalMathcing(c1, c2)
}
Typecasting Pattern
ある型としてその変数が利用できる
かを判定できる
let m = matchArr[i] as? SwiftCase
optional typeとしてcast
した結果を返してくれる
Equitable Protocol
== 演算子を定義している
今回matchingに==を使っている
Equitable Protocol
== 演算子を定義している
今回matchingに==を使っている
NSObjectのサブクラスに対して
Equitable Protocol
== 演算子を定義している
今回matchingに==を使っている
NSObjectのサブクラスに対して
AnyはEquitableでない
Variadic Parameters
可変長引数
init(_ params: NSObject...) {
// Do something
}
NSObjectのコレクション型
Variadic Parameters
可変長引数
init(_ params: NSObject...) {
// Do something
}
NSObjectのコレクション型
名前付きパラメタを
要求しない
In Conclusion
コンストラクタパターンは便利
Advanced Swiftの内容がよくわかった
できれば変数束縛も実装したい(たぶんできない)
Reference
The Swift programming language
https://developer.apple.com/library/prerelease/
ios/documentation/Swift/Conceptual/
Swift_Programming_Language/index.html#//
apple_ref/doc/uid/TP40014097
Advanced Swift
https://developer.apple.com/videos/wwdc/2014/?
id=404
Thank you

Mais conteúdo relacionado

Mais procurados

コンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについてコンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについてYASUKAZU NAGATOMI
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiTomohiro Kumagai
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Yoshiaki Shibutani
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosTomohiro Kumagai
 
Deep dive into oss written in swift
Deep dive into oss written in swiftDeep dive into oss written in swift
Deep dive into oss written in swiftYuki Asai
 
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」三七男 山本
 
StreamingAPIを使用したTwitter Bot @waketi の紹介
StreamingAPIを使用したTwitter Bot @waketi の紹介 StreamingAPIを使用したTwitter Bot @waketi の紹介
StreamingAPIを使用したTwitter Bot @waketi の紹介 kaiba d
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向azuma satoshi
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafeプロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafeTomohiro Kumagai
 
PostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementPostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementSatoshi Nagayasu
 
【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014
【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014
【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014Keigo Yamazaki
 

Mais procurados (12)

コンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについてコンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについて
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
 
Deep dive into oss written in swift
Deep dive into oss written in swiftDeep dive into oss written in swift
Deep dive into oss written in swift
 
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
 
StreamingAPIを使用したTwitter Bot @waketi の紹介
StreamingAPIを使用したTwitter Bot @waketi の紹介 StreamingAPIを使用したTwitter Bot @waketi の紹介
StreamingAPIを使用したTwitter Bot @waketi の紹介
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafeプロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafe
 
PostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer ManagementPostgreSQL Internals - Buffer Management
PostgreSQL Internals - Buffer Management
 
【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014
【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014
【XSS Bonsai】 受賞のご挨拶 by @ymzkei5 【SECCON 2014】 - Dec 08, 2014
 

Semelhante a Pattern match with case class

from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition心 谷本
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4AdvancedTechNight
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について豊明 尾古
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動Shinichi Kozake
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSONYuka Ezura
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„和弘 井之上
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java心 谷本
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Shinichi Tomita
 

Semelhante a Pattern match with case class (20)

from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSON
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携
 

Mais de Kai Sasaki

Graviton 2で実現する
コスト効率のよいCDP基盤
Graviton 2で実現する
コスト効率のよいCDP基盤Graviton 2で実現する
コスト効率のよいCDP基盤
Graviton 2で実現する
コスト効率のよいCDP基盤Kai Sasaki
 
Infrastructure for auto scaling distributed system
Infrastructure for auto scaling distributed systemInfrastructure for auto scaling distributed system
Infrastructure for auto scaling distributed systemKai Sasaki
 
Continuous Optimization for Distributed BigData Analysis
Continuous Optimization for Distributed BigData AnalysisContinuous Optimization for Distributed BigData Analysis
Continuous Optimization for Distributed BigData AnalysisKai Sasaki
 
Recent Changes and Challenges for Future Presto
Recent Changes and Challenges for Future PrestoRecent Changes and Challenges for Future Presto
Recent Changes and Challenges for Future PrestoKai Sasaki
 
Real World Storage in Treasure Data
Real World Storage in Treasure DataReal World Storage in Treasure Data
Real World Storage in Treasure DataKai Sasaki
 
20180522 infra autoscaling_system
20180522 infra autoscaling_system20180522 infra autoscaling_system
20180522 infra autoscaling_systemKai Sasaki
 
User Defined Partitioning on PlazmaDB
User Defined Partitioning on PlazmaDBUser Defined Partitioning on PlazmaDB
User Defined Partitioning on PlazmaDBKai Sasaki
 
Deep dive into deeplearn.js
Deep dive into deeplearn.jsDeep dive into deeplearn.js
Deep dive into deeplearn.jsKai Sasaki
 
Optimizing Presto Connector on Cloud Storage
Optimizing Presto Connector on Cloud StorageOptimizing Presto Connector on Cloud Storage
Optimizing Presto Connector on Cloud StorageKai Sasaki
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178Kai Sasaki
 
How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case Kai Sasaki
 
Managing multi tenant resource toward Hive 2.0
Managing multi tenant resource toward Hive 2.0Managing multi tenant resource toward Hive 2.0
Managing multi tenant resource toward Hive 2.0Kai Sasaki
 
Embulk makes Japan visible
Embulk makes Japan visibleEmbulk makes Japan visible
Embulk makes Japan visibleKai Sasaki
 
Maintainable cloud architecture_of_hadoop
Maintainable cloud architecture_of_hadoopMaintainable cloud architecture_of_hadoop
Maintainable cloud architecture_of_hadoopKai Sasaki
 
図でわかるHDFS Erasure Coding
図でわかるHDFS Erasure Coding図でわかるHDFS Erasure Coding
図でわかるHDFS Erasure CodingKai Sasaki
 
Spark MLlib code reading ~optimization~
Spark MLlib code reading ~optimization~Spark MLlib code reading ~optimization~
Spark MLlib code reading ~optimization~Kai Sasaki
 
How I tried MADE
How I tried MADEHow I tried MADE
How I tried MADEKai Sasaki
 
Reading kernel org
Reading kernel orgReading kernel org
Reading kernel orgKai Sasaki
 

Mais de Kai Sasaki (20)

Graviton 2で実現する
コスト効率のよいCDP基盤
Graviton 2で実現する
コスト効率のよいCDP基盤Graviton 2で実現する
コスト効率のよいCDP基盤
Graviton 2で実現する
コスト効率のよいCDP基盤
 
Infrastructure for auto scaling distributed system
Infrastructure for auto scaling distributed systemInfrastructure for auto scaling distributed system
Infrastructure for auto scaling distributed system
 
Continuous Optimization for Distributed BigData Analysis
Continuous Optimization for Distributed BigData AnalysisContinuous Optimization for Distributed BigData Analysis
Continuous Optimization for Distributed BigData Analysis
 
Recent Changes and Challenges for Future Presto
Recent Changes and Challenges for Future PrestoRecent Changes and Challenges for Future Presto
Recent Changes and Challenges for Future Presto
 
Real World Storage in Treasure Data
Real World Storage in Treasure DataReal World Storage in Treasure Data
Real World Storage in Treasure Data
 
20180522 infra autoscaling_system
20180522 infra autoscaling_system20180522 infra autoscaling_system
20180522 infra autoscaling_system
 
User Defined Partitioning on PlazmaDB
User Defined Partitioning on PlazmaDBUser Defined Partitioning on PlazmaDB
User Defined Partitioning on PlazmaDB
 
Deep dive into deeplearn.js
Deep dive into deeplearn.jsDeep dive into deeplearn.js
Deep dive into deeplearn.js
 
Optimizing Presto Connector on Cloud Storage
Optimizing Presto Connector on Cloud StorageOptimizing Presto Connector on Cloud Storage
Optimizing Presto Connector on Cloud Storage
 
Presto updates to 0.178
Presto updates to 0.178Presto updates to 0.178
Presto updates to 0.178
 
How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case How to ensure Presto scalability 
in multi use case
How to ensure Presto scalability 
in multi use case
 
Managing multi tenant resource toward Hive 2.0
Managing multi tenant resource toward Hive 2.0Managing multi tenant resource toward Hive 2.0
Managing multi tenant resource toward Hive 2.0
 
Embulk makes Japan visible
Embulk makes Japan visibleEmbulk makes Japan visible
Embulk makes Japan visible
 
Maintainable cloud architecture_of_hadoop
Maintainable cloud architecture_of_hadoopMaintainable cloud architecture_of_hadoop
Maintainable cloud architecture_of_hadoop
 
図でわかるHDFS Erasure Coding
図でわかるHDFS Erasure Coding図でわかるHDFS Erasure Coding
図でわかるHDFS Erasure Coding
 
Spark MLlib code reading ~optimization~
Spark MLlib code reading ~optimization~Spark MLlib code reading ~optimization~
Spark MLlib code reading ~optimization~
 
How I tried MADE
How I tried MADEHow I tried MADE
How I tried MADE
 
Reading kernel org
Reading kernel orgReading kernel org
Reading kernel org
 
Reading drill
Reading drillReading drill
Reading drill
 
Kernel ext4
Kernel ext4Kernel ext4
Kernel ext4
 

Pattern match with case class