SlideShare ist ein Scribd-Unternehmen logo
1 von 72
Downloaden Sie, um offline zu lesen
+ ^
| | @giorgionatili
+-------------------------------------+--------------+
FRP + Kotlin
A journey into new programming paradigms
and magical operators
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
About Me
/ :
/ :'
.. / :'
( , '
|( '
( ` .---.
` 
.-..-.
(   _.._.--. `.
' '._`-._..-'``__ `-. '. ..7
'. ``` /``` `'.   `-.-~-.`-/
.-.:>. __. '.   | ( `'
( ( . .  ) 
`'-._ `'(__. :  
.7 (_. ( :
.' ,  '-
__--': . . `'
/ ,: ,/ /__. . .
'--'` `--' `' / | : /|
/ | |` |
/ | : (
.' .'| '. '
( / | : '.
(  (  
 )./- 
(` ,./.-''-:.
+ Engineering Manager at Akamai‹
(NG2 on desktop and mobile)
+ VP of Engineering at Sync Think‹
(Android, VR and Python)
+ Founder of Mobile Tea ‹
(www.meetup.com/pro/mobiletea)
+ Leader of the Boston Twitter UG
+ Organizer of DroidCon Boston‹
(www.droidcon-boston.com)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Agenda
+ Functional Reactive Programming
+ Kotlin in a nutshell
+ RxKotlin: FRP with Android
+ Kotlin and multithreading
+ ^
| | @giorgionatili
+-------------------------------------+--------------+
Functional
Reactive
Programming
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
What the hell is FRP
+ FRP is a programming paradigm
+ It focuses on reacting to streams of
changes (data and events)
+ It favors function composition,
avoidance of global state and side
effects
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Programming Paradigm
+ Humans do not think like computer so
we add abstractions
+ FRP is an abstraction just like
imperative programming idioms are
abstractions for binary instructions
+ FRP is all about capturing evolving
values (aka Observer pattern on
steroids 🚀)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Streams
+ a, b, c, d are emitted values
+ X is an error
+ | is the 'completed' signal
+ ---> is the timeline
+ --a---b-c---d---X---|->
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Functions
Composition
+ The values returned by any operator
are chain-able (functional magic 😎)
+ The original input is immutable
val strings = listOf("one", "two", "treee", "a", "four")
val filtered = strings.filter { it.length >= 3 }
.map { it.toUpperCase() }
println(filtered) // ONE, TWO, THREE, FOUR
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Disclaimer
RxJava and RxKotlin are not pure
FRP, in fact, FRP involves
continuos time whereas the Reactive
Extensions only deal with discrete
event over time.
Anyway, the implementation and the
chain-able operators make RxJava
and RxKotlin a good enough solution
for Android apps.
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Installation
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Observable<T>
+ An Observable represents a flowing
stream of values
+ UI events
+ Data processed in background
+ The most similar abstraction is
Iterable<T>
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Push vs Pull
+ Observable is push based, it decides
when to emit values
+ Iterable is pull based, it sits until
the some ask for the next() value
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Push vs Pull
// Java
Range range = new Range(1, 10);
Iterator<Integer> it = range.iterator();
while(it.hasNext()) {
int cur = it.next();
System.out.println(cur);
}
// RxJava
Observable.range(1, 10).subscribe({ println(it); });
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Observable Specs
Every Observable can emit an arbitrary
number of values optionally followed
by completion or error (but not both)
interface Observer < T > {
void onNext( T t) // Data
void onError( Throwable t) // Error
void onCompleted() // Stream completion
}
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Create an Observable
Observable are lazy, creation doesn’t
trigger any action
Observable < Tweet > tweets = Observable.create( s -> {
getDataFromServerWithCallback( args, data -> {
try {
s.onNext( data );
s.onCompleted();
} catch (Throwable t) {
s.onError(t);
}
});
});
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Subscribe to an
Observable
Subscription activates the Observable
Observable < Tweet > tweets = // ...
tweets.subscribe(
(Tweet tweet) -> {‹
println( tweet );
},(Throwable t) -> { ‹
t.printStackTrace();
});
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Cold vs Hot
Observables
+ A cold Observable is entirely lazy
+ Hot Observables might already be
emitting events no matter how many
Subscribers they have
+ Hot Observables occur when we have
absolutely no control over the source
of events (aka taps)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
FlatMap
Transform the items emitted by an
Observable into Observables, then
flatten the emissions from those into a
single Observable
// Returns a List of websites based on text search
Observable<List<String>> query(String text);
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.subscribe(url -> System.out.println(url));
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Scan
Apply a function to each item emitted by
an Observable, sequentially, and emit
each successive value
‹
+----1---2------3------4--------5-------------->
‹
scan((x, y) -> (x + y));
+----1---3------6------10-------15------------->
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
GroupBy
Observable.from(NumbersGenerator.getList(1000))
.groupBy((i) -> 0 == (int)i % 2 ? "EVEN" : "ODD")
.subscribe((group) -> {
println("Key " + ((GroupedObservable)group).getKey());
((GroupedObservable)group).subscribe((x) ->‹
println(((GroupedObservable)group).getKey() + ": " + x));
});
Divide an Observable into a set of
Observables that each emit a different
group of items from the original
Observable, organized by key
😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Distinct
The Distinct operator filters an
Observable by only allowing items
through that have not already been
emitted
Observable < Integer > randomInts = Observable.create( subscriber -> {
Random random = new Random();
while (! subscriber.isUnsubscribed()) {
subscriber.onNext( random.nextInt( 1000 ));
}
});
Observable < Integer > uniqueRandomInts = randomInts
.distinct()
.take( 10);
😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Take
Emit only the first n items emitted by
an Observable
Observable.interval(1, TimeUnit.SECONDS)
.map { it.toInt() }
.take(20) 😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Buffer
Creates a new buffer starting with the
first emitted item from the source
Observable, and every skip items
thereafter, fills each buffer with count
items
+--1----2----3----------4-----5------6------->
‹
buffer(count=2, skip|3)
+-----1---2-----------------4-----5--------->
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Debounce
Only emit an item from an Observable if
a particular timespan has passed without
it emitting another item
String[] items = {"one", "two", "three", "four", "five"};
Observable.from(items)
.debounce(item -> item.equals("one")
? Observable.empty()
: Observable.timer(1, TimeUnit.SECONDS));
đŸ˜Č
😏
😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
FRP Use Cases
+ Processing user (tap, swipe, etc.) and
system events (GPS, gyroscope, etc.)
+ Responding and processing any IO event
(asynchronously)
+ Handling events and data pushed from
other sources
+ Many, many, many others! :)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Handling User Input
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(final Subscriber<? super String> subscriber) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(final CharSequence s,
final int start, final int count, final int after){}
@Override
public void onTextChanged(final CharSequence s,
final int start, final int before, final int count) {‹
subscriber.onNext(s.toString());
}
@Override
public void afterTextChanged(final Editable s) { }
});
}
})
.debounce(1000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(final String s) {
textView.setText("Output : " + s);
}
});
Create
Emit
Handle stream
Subscribe
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016
+ ^
| | @giorgionatili
+-------------------------------------+--------------+
Kotlin in a
Nutshell
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Why Kotlin
+ Data classes
+ Inferred datatypes
+ Nullable types
+ Arguments default value
+ Lambda expression and "elvis" operator
+ Extension functions
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Install the Plugin
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Kotlin and the JVM
* Interoperable 100%
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Nullable Types
Nothing can be null in Kotlin until is
not specified
val a : String = null // won't compile!
var b : Int // neither! must be initialized
val ok : String? = null // OK :)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Data Classes
// Java
public class User {
private final String nickname;
public User(String nickname) {
this.nickname = nickname;
}
public String getNickname() {
return nickname;
}
}
// Kotlin
class User (val nickname: String)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Custom Getters
class SubscribingUser(val email: String) {
val nickname: String
get() {
return email.substringBefore("@")
}
}
😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Inferred Datatypes
The data type can be inferred by the
context or by the first assignment
class LengthCounter {
var counter = 0
private set
fun addWord(word: String) {
counter += word.length
}
}
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Inline Functions and
Default Values
+ Functions can be declared outside of a
class and imported in others
+ Arguments can have default values
reducing the number of methods
overloads
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Elvis Operator
This is the name used for this
operator ?:, you can use it to
give an alternative value in
case the object is null
try {
// code...
} catch (e: Throwable) {
Log.e("TAG", e.message ?: "Error message")
}
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Lambas
+ Small chunks of code that can be
passed to other functions
+ The ability to treat functions as
values is part of the functional
programming paradigm
val people = listOf(Person("Alice", 29), ‹
Person("Bob", 31))
println(people.maxBy { it.age }) 😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
The "apply" Function
+ The apply function allows to execute
multiple operations on the same object
+ The apply function converts its first
argument into a receiver of the lambda
passed as a second argument
fun alphabet() = StringBuilder().apply {
for (letter in 'A'..'Z') {
append(letter)
}
append("nNow I know the alphabet!")
}.toString()
😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
The "with" Function
The with function works like the apply
one and returns the object to which is
applied
fun alphabet() = with(StringBuilder()) {
for (letter in 'A'..'Z') {
append(letter)
}
toString()
}
😏
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
High-Order Functions
A higher-order function is a function
that takes functions as parameters, or
returns a function
fun <T> lock(lock: Lock, body: () -> T): T {
lock.lock()
try {
return body()
}
finally {
lock.unlock()
}
}
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Extension Functions
+ Functions that add a new behavior to a
class
+ It’s a way to extend classes which
lack some useful functions
fun String.lastChar(): Char = this.get(this.length - 1)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Java to Kotlin
+ On the main menu, point to Code menu.
+ Choose Convert Java File to Kotlin
File
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016
+ ^
| | @giorgionatili
+-------------------------------------+--------------+
Recap
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
What We Got so Far
+ FRP is a programming paradigm
+ RxJava is a library for composing
asynchronous and event-based programs
using observable sequences for the
Java VM
+ Kotlin is a statically-typed
programming language that runs on the
Java Virtual Machine
+ ^
| | @giorgionatili
+-------------------------------------+--------------+
RxKotlin: FRP
with Android
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Concise
+ The words extends and implement were
replaced by a colon :
+ Methods are defined with the fun
keyword, the return type is optional
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Click Listeners
The lack of lambdas in Java 7 is the
reason why listeners and callbacks are
so awful to write with Kotlin
myButton.setOnClickListener { navigateToDetail() }
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Toasts and Snacks
fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT){
Toast.makeText(this, message, duration).show()
}
toast("Hello Kotlin!")
fun View.snack(message: String, length: Int = Snackbar.LENGTH_LONG,
f: Snackbar.() -> Unit) {
val snack = Snackbar.make(this, message, length)
snack.f()
snack.show()
}
view.snack("This is my snack")
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Composability
view.snack("Snack message") {
action("Action") { toast("Action clicked") }
}
fun Snackbar.action(action: String, color: Int? = null,
listener: (View) -> Unit) {
setAction(action, listener)
color?.let { setActionTextColor(color) }
}
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Android Extensions
+ By adding a specific import, the
plugin will be able to create a set of
properties for an activity, a
fragment, or even a view
+ The name of the properties will be the
ones defined in the XML you are
importing
import kotlinx.android.synthetic.main.activity_detail.*
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Inflate
fun ViewGroup.inflate(layoutId: Int): View {
return LayoutInflater.from(context)
.inflate(layoutId, this, false)
}
val view = container?.inflate(R.layout.news_fragment)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
RxBindings
import kotlinx.android.synthetic.main.activity_detail.editText
RxTextView.afterTextChangeEvents(editText)
.debounce(1000, TimeUnit.MILLISECONDS)
.subscribe { tvChangeEvent ->
textView.text = "Output : " + tvChangeEvent.view().text
}
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016
+ ^
| | @giorgionatili
+-------------------------------------+--------------+
Multithreading
Made Simple
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
RxJava and
Parallelization
+ A common question about RxJava is how
to achieve parallelization, or
emitting multiple items concurrently
from an Observable.
+ This definition breaks the Observable
contract which states that onNext()
must be called sequentially and never
concurrently
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Schedulers
+ immediate(), creates and returns a Scheduler that
executes work immediately on the current thread
+ trampoline(), creates and returns a Scheduler
that queues work on the current thread to be
executed after the current work completes
+ newThread(), creates and returns a Scheduler that
creates a new Thread for each unit of work
+ computation(), creates and returns a Scheduler
intended for computational work
+ io(), creates and returns a Scheduler intended
for IO-bound work (unbounded, multiple threads)
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
subscribeOn()
The method subscribeOn() allows you to
move the execution of the Observable
code into another thread and with an
specific behavior
val subscription = newsManager.getNews()
.subscribeOn(Schedulers.io())
.subscribe ({}, {})
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
observeOn()
The observeOn() method allows to
specify where to execute the functions
provided in the subscribe() one
val subscription = newsManager.getNews()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ({}, {})
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Altogether Now
Observable.just("Hello World")
// each subscription is going to be on a new thread
.subscribeOn(Schedulers.newThread())
// observation on the main thread
.observeOn(AndroidSchedulers.mainThread()))
.subscribe(object:Subscriber<String>(){
override fun onCompleted() {
// Completed
}
override fun onError(e: Throwable?) {
// Handle error here
}
override fun onNext(t: String?) {
Log.e("Output",t);
}
})
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016
+ ^
| | @giorgionatili
+-------------------------------------+--------------+
Take Aways
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Functional Reactive
Programming
+ FRP doesn’t solve all the problems
+ FRP hide complexities and make our
code more readable
+ Getting started with FRP is simple and
fast
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
RxJava & RxAndroid
+ RxJava and RxAndroid are not a pure
FRP implementation (Sodium, Reactive-
banana are pure FRP)
+ RxExtensions are a tool to uniform
your programming paradigm
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Kotlin
+ Kotlin run on top of the JVM
+ Kotlin can help improving the
readability of your code
+ Kotlin is extremely functional, almost
everything is an expression
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Trade Off
“Programmers know the benefits of
everything and the tradeoffs of
nothing”
–Rich Hickey
+--------------X----X---X---X---X------------>
+---------------------------------#MobileTea->
Resources
+ https://github.com/miquelbeltran/rxjava-
examples
+ https://github.com/marukami/RxKotlin-
Android-Samples
+ https://github.com/JakeWharton/RxBinding
+ https://gist.github.com/GiorgioNatili/
d4a20d4513ee544c0700854d123360d7
+ https://nilhcem.github.io/swift-is-like-
kotlin/
Schedule‹
7:00 pm - 7:30 pm Welcome with beers and snacks
7:30 pm - 8:35 pm Screening of "Design Disruptors"
8:35 pm - 9:30 pm Networking moment and aperitif
GiovedĂŹ 1 Dicembre, ore 19:00 , Luiss Enlabs, Stazione Termini, Roma
DESIGN DISRUPTORS is a full-length documentary
featuring design leaders and product designers from
15+ industry-toppling companies—valued at more
than $1trillion dollars combined.
Free, but registration is required :)
–Giorgio Natili :)
“FRP programmers do it better.”

Weitere Àhnliche Inhalte

Was ist angesagt?

AST: threats and opportunities
AST: threats and opportunitiesAST: threats and opportunities
AST: threats and opportunitiesAlexander Lifanov
 
Ramco C Question Paper 2003
Ramco  C  Question  Paper 2003Ramco  C  Question  Paper 2003
Ramco C Question Paper 2003ncct
 
Tensorflow and python : fault detection system - PyCon Taiwan 2017
Tensorflow and python : fault detection system - PyCon Taiwan 2017Tensorflow and python : fault detection system - PyCon Taiwan 2017
Tensorflow and python : fault detection system - PyCon Taiwan 2017Eric Ahn
 
My sql statements by okello erick
My sql statements by okello erickMy sql statements by okello erick
My sql statements by okello erickokelloerick
 
MySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queriesMySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queriesDamien Seguy
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Drizzle to MySQL, Stress Free Migration
Drizzle to MySQL, Stress Free MigrationDrizzle to MySQL, Stress Free Migration
Drizzle to MySQL, Stress Free MigrationAndrew Hutchings
 
"optrees" package in R and examples.(optrees:finds optimal trees in weighted ...
"optrees" package in R and examples.(optrees:finds optimal trees in weighted ..."optrees" package in R and examples.(optrees:finds optimal trees in weighted ...
"optrees" package in R and examples.(optrees:finds optimal trees in weighted ...Dr. Volkan OBAN
 
Bytes in the Machine: Inside the CPython interpreter
Bytes in the Machine: Inside the CPython interpreterBytes in the Machine: Inside the CPython interpreter
Bytes in the Machine: Inside the CPython interpreterakaptur
 
Highlight Utility Styles
Highlight Utility StylesHighlight Utility Styles
Highlight Utility StylesAngela Byron
 
Do snow.rwn
Do snow.rwnDo snow.rwn
Do snow.rwnARUN DN
 
Cisco vs. huawei CLI Commands
Cisco vs. huawei CLI CommandsCisco vs. huawei CLI Commands
Cisco vs. huawei CLI CommandsBootcamp SCL
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용I Goo Lee
 
Kotlin standard
Kotlin standardKotlin standard
Kotlin standardMyeongin Woo
 
Kubernetes Tutorial
Kubernetes TutorialKubernetes Tutorial
Kubernetes TutorialCi Jie Li
 
The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181Mahmoud Samir Fayed
 
Crushing the Head of the Snake by Robert Brewer PyData SV 2014
Crushing the Head of the Snake by Robert Brewer PyData SV 2014Crushing the Head of the Snake by Robert Brewer PyData SV 2014
Crushing the Head of the Snake by Robert Brewer PyData SV 2014PyData
 
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPythonByterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPythonakaptur
 

Was ist angesagt? (20)

AST: threats and opportunities
AST: threats and opportunitiesAST: threats and opportunities
AST: threats and opportunities
 
Ramco C Question Paper 2003
Ramco  C  Question  Paper 2003Ramco  C  Question  Paper 2003
Ramco C Question Paper 2003
 
Tensorflow and python : fault detection system - PyCon Taiwan 2017
Tensorflow and python : fault detection system - PyCon Taiwan 2017Tensorflow and python : fault detection system - PyCon Taiwan 2017
Tensorflow and python : fault detection system - PyCon Taiwan 2017
 
My sql statements by okello erick
My sql statements by okello erickMy sql statements by okello erick
My sql statements by okello erick
 
MySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queriesMySQL Kitchen : spice up your everyday SQL queries
MySQL Kitchen : spice up your everyday SQL queries
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Drizzle to MySQL, Stress Free Migration
Drizzle to MySQL, Stress Free MigrationDrizzle to MySQL, Stress Free Migration
Drizzle to MySQL, Stress Free Migration
 
"optrees" package in R and examples.(optrees:finds optimal trees in weighted ...
"optrees" package in R and examples.(optrees:finds optimal trees in weighted ..."optrees" package in R and examples.(optrees:finds optimal trees in weighted ...
"optrees" package in R and examples.(optrees:finds optimal trees in weighted ...
 
Bytes in the Machine: Inside the CPython interpreter
Bytes in the Machine: Inside the CPython interpreterBytes in the Machine: Inside the CPython interpreter
Bytes in the Machine: Inside the CPython interpreter
 
Highlight Utility Styles
Highlight Utility StylesHighlight Utility Styles
Highlight Utility Styles
 
Do snow.rwn
Do snow.rwnDo snow.rwn
Do snow.rwn
 
Cisco vs. huawei CLI Commands
Cisco vs. huawei CLI CommandsCisco vs. huawei CLI Commands
Cisco vs. huawei CLI Commands
 
Python sqlite3
Python sqlite3Python sqlite3
Python sqlite3
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
 
Elixir @ Paris.rb
Elixir @ Paris.rbElixir @ Paris.rb
Elixir @ Paris.rb
 
Kotlin standard
Kotlin standardKotlin standard
Kotlin standard
 
Kubernetes Tutorial
Kubernetes TutorialKubernetes Tutorial
Kubernetes Tutorial
 
The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181
 
Crushing the Head of the Snake by Robert Brewer PyData SV 2014
Crushing the Head of the Snake by Robert Brewer PyData SV 2014Crushing the Head of the Snake by Robert Brewer PyData SV 2014
Crushing the Head of the Snake by Robert Brewer PyData SV 2014
 
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPythonByterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
 

Andere mochten auch

Yet another startup built on Clojure(Script)
Yet another startup built on Clojure(Script)Yet another startup built on Clojure(Script)
Yet another startup built on Clojure(Script)Paul Lam
 
Be More Productive with Kotlin
Be More Productive with KotlinBe More Productive with Kotlin
Be More Productive with KotlinBrandon Wever
 
Clojure at BackType
Clojure at BackTypeClojure at BackType
Clojure at BackTypenathanmarz
 
Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Andrey Breslav
 
Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011Andrey Breslav
 
Kotlin @ CSClub & Yandex
Kotlin @ CSClub & YandexKotlin @ CSClub & Yandex
Kotlin @ CSClub & YandexAndrey Breslav
 
Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014Andrey Breslav
 
Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015Andrey Breslav
 
Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011Andrey Breslav
 
Introduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clearIntroduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clearAndrey Breslav
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinAndrey Breslav
 
ĐĄĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»
ĐĄĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»ХĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»
ĐĄĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»e-Legion
 
Creare Docker da zero con GoLang - Giulio De Donato
Creare Docker da zero con GoLang - Giulio De DonatoCreare Docker da zero con GoLang - Giulio De Donato
Creare Docker da zero con GoLang - Giulio De DonatoCodemotion
 
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...Codemotion
 
From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...
From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...
From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...Codemotion
 
Situational Awareness, Botnet and Malware Detection in the Modern Era - Davi...
Situational Awareness, Botnet and Malware Detection in the Modern Era  - Davi...Situational Awareness, Botnet and Malware Detection in the Modern Era  - Davi...
Situational Awareness, Botnet and Malware Detection in the Modern Era - Davi...Codemotion
 
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016Codemotion
 
Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...
Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...
Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...Codemotion
 

Andere mochten auch (20)

Yet another startup built on Clojure(Script)
Yet another startup built on Clojure(Script)Yet another startup built on Clojure(Script)
Yet another startup built on Clojure(Script)
 
Be More Productive with Kotlin
Be More Productive with KotlinBe More Productive with Kotlin
Be More Productive with Kotlin
 
Clojure at BackType
Clojure at BackTypeClojure at BackType
Clojure at BackType
 
Kotlin
KotlinKotlin
Kotlin
 
Fun with Kotlin
Fun with KotlinFun with Kotlin
Fun with Kotlin
 
Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011
 
Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011
 
Kotlin @ CSClub & Yandex
Kotlin @ CSClub & YandexKotlin @ CSClub & Yandex
Kotlin @ CSClub & Yandex
 
Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014
 
Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015
 
Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011
 
Introduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clearIntroduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clear
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in Kotlin
 
ĐĄĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»
ĐĄĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»ХĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»
ĐĄĐČĐ”Ń‚Đ»Đ°ĐœĐ° ИсаĐșĐŸĐČĐ° «ЯзыĐș Kotlin»
 
Creare Docker da zero con GoLang - Giulio De Donato
Creare Docker da zero con GoLang - Giulio De DonatoCreare Docker da zero con GoLang - Giulio De Donato
Creare Docker da zero con GoLang - Giulio De Donato
 
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
Knowledge is Power: Getting out of trouble by understanding Git - Steve Smith...
 
From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...
From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...
From a developer to a teamleader — an unexpected journey - Vitaly Sharovatov ...
 
Situational Awareness, Botnet and Malware Detection in the Modern Era - Davi...
Situational Awareness, Botnet and Malware Detection in the Modern Era  - Davi...Situational Awareness, Botnet and Malware Detection in the Modern Era  - Davi...
Situational Awareness, Botnet and Malware Detection in the Modern Era - Davi...
 
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
The new features of PHP 7 - Enrico Zimuel - Codemotion Milan 2016
 
Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...
Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...
Virtual Reality gaming: analysis of Yon Paradox development - Fabio Mosca - C...
 

Ähnlich wie Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016

M|18 Querying Data at a Previous Point in Time
M|18 Querying Data at a Previous Point in TimeM|18 Querying Data at a Previous Point in Time
M|18 Querying Data at a Previous Point in TimeMariaDB plc
 
Mysqlfunctions
MysqlfunctionsMysqlfunctions
MysqlfunctionsN13M
 
Kickstat File_Draft_ESXI5.1_Template
Kickstat File_Draft_ESXI5.1_TemplateKickstat File_Draft_ESXI5.1_Template
Kickstat File_Draft_ESXI5.1_TemplateLuca Viscomi
 
제 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€
제 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€ì œ 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€
제 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€EXEM
 
Python sqlite3 - flask
Python   sqlite3 - flaskPython   sqlite3 - flask
Python sqlite3 - flaskEueung Mulyana
 
Mysql56 replication
Mysql56 replicationMysql56 replication
Mysql56 replicationChris Makayal
 
Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰
Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰
Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰Yaman Rajab
 
Couch to OpenStack: Glance - July, 23, 2013
Couch to OpenStack: Glance - July, 23, 2013Couch to OpenStack: Glance - July, 23, 2013
Couch to OpenStack: Glance - July, 23, 2013Trevor Roberts Jr.
 
濙しいäșșぼためぼSphinx 慄門 demo
濙しいäșșぼためぼSphinx 慄門 demo濙しいäșșぼためぼSphinx 慄門 demo
濙しいäșșぼためぼSphinx 慄門 demoFumihito Yokoyama
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQLJussi Pohjolainen
 
Hi Dear,Let me break your code into the parts to make you understa.pdf
Hi Dear,Let me break your code into the parts to make you understa.pdfHi Dear,Let me break your code into the parts to make you understa.pdf
Hi Dear,Let me break your code into the parts to make you understa.pdfankitcom
 
Oracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor formatOracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor formatFranck Pachot
 
Cruel (SQL) Intentions
Cruel (SQL) IntentionsCruel (SQL) Intentions
Cruel (SQL) Intentionsezra_c
 
16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboards16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboardsDenis Ristic
 

Ähnlich wie Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016 (20)

M|18 Querying Data at a Previous Point in Time
M|18 Querying Data at a Previous Point in TimeM|18 Querying Data at a Previous Point in Time
M|18 Querying Data at a Previous Point in Time
 
neutronæ”‹èŻ•äŸ‹ć­
neutronæ”‹èŻ•äŸ‹ć­neutronæ”‹èŻ•äŸ‹ć­
neutronæ”‹èŻ•äŸ‹ć­
 
Mysqlfunctions
MysqlfunctionsMysqlfunctions
Mysqlfunctions
 
Kickstat File_Draft_ESXI5.1_Template
Kickstat File_Draft_ESXI5.1_TemplateKickstat File_Draft_ESXI5.1_Template
Kickstat File_Draft_ESXI5.1_Template
 
제 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€
제 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€ì œ 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€
제 6회 엑셈 수요 ì„žëŻžë‚˜ ìžëŁŒ ì—°ê”Źì»ší…ìž íŒ€
 
Pdxpugday2010 pg90
Pdxpugday2010 pg90Pdxpugday2010 pg90
Pdxpugday2010 pg90
 
Python sqlite3 - flask
Python   sqlite3 - flaskPython   sqlite3 - flask
Python sqlite3 - flask
 
Mysql56 replication
Mysql56 replicationMysql56 replication
Mysql56 replication
 
MySQL SQL Tutorial
MySQL SQL TutorialMySQL SQL Tutorial
MySQL SQL Tutorial
 
Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰
Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰
Ű§Ù„ŰŹÙ„ŰłŰ© Ű§Ù„ŰŁÙˆÙ„Ù‰
 
Couch to OpenStack: Glance - July, 23, 2013
Couch to OpenStack: Glance - July, 23, 2013Couch to OpenStack: Glance - July, 23, 2013
Couch to OpenStack: Glance - July, 23, 2013
 
濙しいäșșぼためぼSphinx 慄門 demo
濙しいäșșぼためぼSphinx 慄門 demo濙しいäșșぼためぼSphinx 慄門 demo
濙しいäșșぼためぼSphinx 慄門 demo
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQL
 
Hi Dear,Let me break your code into the parts to make you understa.pdf
Hi Dear,Let me break your code into the parts to make you understa.pdfHi Dear,Let me break your code into the parts to make you understa.pdf
Hi Dear,Let me break your code into the parts to make you understa.pdf
 
Oracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor formatOracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor format
 
Cruel (SQL) Intentions
Cruel (SQL) IntentionsCruel (SQL) Intentions
Cruel (SQL) Intentions
 
Sql2
Sql2Sql2
Sql2
 
Explain
ExplainExplain
Explain
 
16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboards16 MySQL Optimization #burningkeyboards
16 MySQL Optimization #burningkeyboards
 

Mehr von Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

Mehr von Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard SĂŒselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

KĂŒrzlich hochgeladen

Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"DianaGray10
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideIEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideHironori Washizaki
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdfPaige Cruz
 
The Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API ManagementThe Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API ManagementNuwan Dias
 
100+ ChatGPT Prompts for SEO Optimization
100+ ChatGPT Prompts for SEO Optimization100+ ChatGPT Prompts for SEO Optimization
100+ ChatGPT Prompts for SEO Optimizationarrow10202532yuvraj
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
Meet the new FSP 3000 M-Flex800ℱ
Meet the new FSP 3000 M-Flex800ℱMeet the new FSP 3000 M-Flex800ℱ
Meet the new FSP 3000 M-Flex800ℱAdtran
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 

KĂŒrzlich hochgeladen (20)

Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
UiPath Clipboard AI: "A TIME Magazine Best Invention of 2023 Unveiled"
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK GuideIEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
IEEE Computer Society’s Strategic Activities and Products including SWEBOK Guide
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf99.99% of Your Traces  Are (Probably) Trash (SRECon NA 2024).pdf
99.99% of Your Traces Are (Probably) Trash (SRECon NA 2024).pdf
 
The Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API ManagementThe Kubernetes Gateway API and its role in Cloud Native API Management
The Kubernetes Gateway API and its role in Cloud Native API Management
 
100+ ChatGPT Prompts for SEO Optimization
100+ ChatGPT Prompts for SEO Optimization100+ ChatGPT Prompts for SEO Optimization
100+ ChatGPT Prompts for SEO Optimization
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
Meet the new FSP 3000 M-Flex800ℱ
Meet the new FSP 3000 M-Flex800ℱMeet the new FSP 3000 M-Flex800ℱ
Meet the new FSP 3000 M-Flex800ℱ
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 

Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Codemotion Milan 2016