SlideShare a Scribd company logo
REACTIVE JAVASCRIPT MIT RXJS - BASTA! 2016
MAXIMILIAN BERGHOFF - 02.03.2016
Maximilian Berghoff
@ElectricMaxxx
github.com/electrimaxxx
Mayflower GmbH - Würzburg
Maximilian.Berghoff@mayflower.de
REACTIVE EXTENSIONS -
RX
HISTORY
ERIK MEIER
BRAIN BACKMAN
MATHEW PODWYSOCKI
LINQ TO EVENTS
VOLTA
WINDOWS FORMS
<=>
WEB FORMS
BEISPIEL:
DRAG & DROP
MAUSBEWEGUNG VERFOLGEN
EVENT LISTENER REGISTRIEREN
elem.addEventListener('mousedown', mousedown, false); 
elem.addEventListener('mouseup', mouseup, false); 
elem.addEventListener('mousemove', mousemove, false); 
MOUSE DOWN
function mousedown(e) { 
    isDown = true; 
    state = { startX: e.offsetX, startY: e.offsetY}; 
}
MOUSE MOVE
function mousemove(e) { 
    if (!isDown) {return;} 
    var delta = { 
        endX: e.clientX ­ state.startX, 
        endY: e.clientY ­ state.startY 
    };
}
MOUSE UP
function mouseup (e) { 
    isDown = false; 
    state = null; 
}
UNSUBSCRIBE
function dispose() { 
    elem.removeEventListener('mousedown', mousedown, false); 
    elem.removeEventListener('mouseup', mouseup, false); 
    elem.removeEventListener('mousemove', mousemove, false); 
}
DIE AKTEURE
ITERATOR PATTERN
var Iterator = function () {}; 
Iterator.prototype.next(); 
Iterator.prototype.rewind(); 
Iterator.prototype.current(); 
Iterator.prototype.hasNext(); 
TRAVERSIEREN
while (Iterator.hasNext()) { 
    console.log(Iterator.next()); 
}
GEDANKENSPIEL
Liste von Cocktails
Eigenschaften: id, name, zutaten, prozent, ...
Aufgabe: "id & name von allem Contails mit prozent > 5.0"
var cocktails = [ 
    {id: 100001, name: 'Piña Colada', zutaten: [], prozent: 5.0 }, 
    { id: 100002, name: ' Tequila Sunrise', zutaten: [], prozent: 6.0 },
    { id: 100003, name: ' Long Island', zutaten: [], prozent: 7.0 }, 
];
var newList = []; 
for(var i = 0; i <= cocktails.length; i++) { 
    if (cocktails[i].prozent > 5.0) { 
        newList.push({id: cocktails[i].id, title: cocktails[i].title}) 
    }
}
console.log(newList); 
var newList = []; 
cocktails.forEach(function (cocktail) { 
    if (cocktails[i].prozent > 5.0) { 
        newList.push({id: cocktail.id, title: cocktail.title}) 
    }
});
var godOnes = cocktails 
    .filter(function (cocktail) { 
      return cocktail.prozent > 5; 
  })
  .map(function (cocktail) { 
      return {id: cocktail.id, name: cocktail.name}; 
  });
OBSERVER PATTERN
Observable.prototype.subscribe() 
Observer.prototype.notify() 
var Observable = function () {}; 
Observable.prototype.subscribe = function () {}; 
Observable.prototype.unsubscribe = function () {}; 
var Observer = function () {}; 
Observer.prototype.notify = function() {}; 
WARUM?
Entkopplung
weniger prozedualer Code
Erweiterbarkeit erhöht
DIE HOCHZEIT
By Ziko van Dijk (shot by myself) [ or ],GFDL CC BY-SA 3.0 via Wikimedia
Commons
REACTIVE EXTENSION
RxJava
RxJS
Rx.Net
Rx.Scala
Rx.Clojure
Rx.Swift
...
REACTIVEX.IO
GITHUB.COM/REACTIVE-EXTIONSION
STREAM VON EVENTS
var list = [1, 2, 3, 4, 5]; 
list.forEach(function (item) { 
    console.log("nexItem: %s", item); 
});
var list = [1, 2, 3, 4, 5]; 
var source = Rx.Observable.fromArray(list); 
var disposal = source.subscribe( 
    function (x) {console.log('Next: ' + x);}, 
    function (err) {console.log('Error: ' + err);}, 
    function () {console.log('Completed');}); 
disposal.dispose(); 
OBSERVER
By Vince Alongi (Flickr) [ ],CC BY 2.0 via Wikimedia Commons
var disposal = source.subscribe( 
    function (x) {console.log('Next: ' + x);}, 
    function (err) {console.log('Error: ' + err);}, 
    function () {console.log('Completed');} 
);
function Observer() { } 
Observer.prototype.onNext = function (value) { ... }; 
Observer.prototype.onError = function (error) { ... }; 
Observer.prototype.onCompleted = function () { ... }; 
var source = Rx.Observable.range(1,10); 
var reducedSource = source.filter(function (value) { 
    return value % 2 === 0; 
});
var disposal1 = reducedSource.subscribe( 
    function (x) {console.log('Next 1: ' + x);}, 
    function (err) {console.log('Error 1: ' + err);}, 
    function () {console.log('Completed 1.');} 
);
disposal1.dispose(); 
var disposal2 = source.subscribe( 
    function (x) {console.log('Next 2: ' + x);}, 
    function (err) {console.log('Error 2: ' + err);}, 
    function () {console.log('Completed 2');} 
);
disposal2.dispose(); 
> Next 1: 2 
> Next 1: 4 
> Next 1: 6 
> Next 1: 8 
> Next 1: 10 
> Completed 1. 
> Next 2: 1 
> Next 2: 2 
> Next 2: 3 
> Next 2: 4 
> Next 2: 5 
> Next 2: 6 
> Next 2: 7 
> Next 2: 8 
> Next 2: 9 
> Next 2: 10 
> Completed 2 
OBSERVALBE
function Disposable() { } 
Disposable.prototype.dispose = function () { ... } 
function Observable() { } 
/**
 * @return Disposable 
 */
Observable.prototype.subscribe = function (observer) { ... } 
YOUTUBE
(ER-) ZEUGUNG
Rx.Observable.create() 
var source = Rx.Observable.create(function (observer) { 
  observer.onNext(42); 
  observer.onCompleted(); 
  return function () { 
    console.log('disposed'); 
  }
});
var subscription = source.subscribe( 
  function (x) { console.log('onNext: %s', x); }, 
  function (e) { console.log('onError: %s', e); }, 
  function () { console.log('onCompleted'); } 
  );
subscription.dispose(); 
> onNext: 42 
> onCompleted 
> disposed 
Rx.Observable.range() 
var source = Rx.Observable.range(1, 5); 
var subscription = source.subscribe( 
  function (x) { console.log('onNext: %s', x); }, 
  function (e) { console.log('onError: %s', e); }, 
  function () { console.log('onCompleted'); } 
);
> onNext: 1 
> onNext: 2 
> onNext: 3 
> onNext: 4 
> onNext: 5 
Rx.Observable.fromEvent(element, eventName, [selector]) 
// oder
Rx.Observable.fromCallback(func, [context], [selector]) 
var input = $('#input'); 
var source = Rx.Observable.fromEvent(input, 'keyup'); 
var subscription = source.subscribe( 
  function (x) {console.log('Next: key pressed!');}, 
  function (err) {console.log('Error: %s', err);}, 
  function () {console.log('Completed');}); 
var fs = require('fs'), 
    Rx = require('rx'); 
var exists = Rx.Observable.fromCallback(fs.exists); 
var source = exists('file.txt'); 
var subscription = source.subscribe( 
    function (x) {console.log('Next: ' + x);}, 
    function (err) {console.log('Error: ' + err);}, 
    function () {console.log('Completed');} 
  );
LINQ
LANGUAGE INTEGRATED QUERY
von Unbekannt [Public domain], via Wikimedia Commons
KOMBINATION
.concat(); 
// oder
.merge(); 
var sourceOne = Rx.Observable.range(1,5); 
var sourceTwo = Rx.Observable.range(6,5); 
var merged = sourceOne.concat(sourceTwo); 
var disposal = merged.subscribe(function (x) { 
    console.log('Concat onNext: ' + x);  
});
OUTPUT
> Concat onNext: 1 
> Concat onNext: 2 
> Concat onNext: 3 
> Concat onNext: 4 
> Concat onNext: 5 
> Concat onNext: 6 
> Concat onNext: 7 
> Concat onNext: 8 
> Concat onNext: 9 
> Concat onNext: 10 
var sourceOne = Rx.Observable.range(1,5); 
var sourceTwo = Rx.Observable.range(6,5); 
var merged = sourceOne.merge(sourceTwo); 
var disposal = merged.subscribe(function (x) { 
    console.log('Merged onNext: ' + x);  
});
OUTPUT
> Merged onNext: 1 
> Merged onNext: 6 
> Merged onNext: 2 
> Merged onNext: 7 
> Merged onNext: 3 
> Merged onNext: 8 
> Merged onNext: 4 
> Merged onNext: 9 
> Merged onNext: 5 
> Merged onNext: 10 
FILTER
var source = Rx.Observable.range(1,10); 
var filtered = source.filter(function (x) { 
    return x % 2 === 0; 
});
var disposal = filtered.subscribe(function (x) { 
    console.log('onNext: ' + x); 
});
OUTPUT
> onNext: 2 
> onNext: 4 
> onNext: 6 
> onNext: 8 
> onNext: 10 
PROJEKTIONEN
var list = [ 
    {id: 100001, name: 'Piña Colada', zutaten: [], prozent: 5.0 }, 
    { id: 100002, name: ' Tequila Sunrise', zutaten: [], prozent: 6.0 },
    { id: 100003, name: ' Long Island', zutaten: [], prozent: 7.0 }, 
];
var source = Rx.Observable.from(list); 
var ids = source.map(function (item) { 
    return item.id; 
});
var disposal = ids.subscribe(function (x) { 
    console.log('onNext Id: ' + x); 
});
disposal.dispose(); 
OUTPUT
onNext Id: 100001 
onNext Id: 100002 
onNext Id: 100003 
?
.flatMap(); 
var source = Rx.Observable 
    .range(1, 2) 
    .flatMap(function (x) { 
        return Rx.Observable.range(x, 2); 
    });
var subscription = source.subscribe( 
    function (x) { 
        console.log('onNext: ' + x); 
    }
);
return Rx.Observable.range(1, 2); 
return Rx.Observable.range(2, 2); 
OUTPUT
> onNext: 1 
> onNext: 2 
> onNext: 2 
> onNext: 3 
NOCH MEHR?
GITHUB/DOKUMENTATION
PROMISES?
Single Value
Cancellation?
ARRAY OPERATOREN
VS.
RX OPERATOREN
ARRAY OPERATOREN
Komplette Liste wird durch gereicht
dabei auf jedem Eintrag
Projektion - map, ..
Gefiltert - reduce, filter
Ergänzt - concat, merge
RX OPERTOREN
Jedes Event/Jeder Eintrag einzeln
dabei
Projektion - map, ..
Gefiltert - reduce, filter
Ergänzt - concat, merge
Filter = STOP => nicht weiter gereicht
Ergänzung nur der Zugang für weiteren Stream
ACTION
von Thiemo Schuff (Eigenes Werk) [ ],CC BY-SA 3.0 via Wikimedia
Commons
<input type="text" id="input"/> 
<h2>Results</h2> 
<ul id="results"> 
</ul>
    var $input = $('#input'); 
    var $results = $('#results'); 
    var suggestions = Rx.Observable.fromEvent($input, 'keyup'); 
var suggestions = Rx.Observable.fromEvent($input, 'keyup') 
        .pluck('target', 'value') 
        .filter(function(text) { return text.length > 2 }) 
        .debounce(500 /* ms */) 
        .distinctUntilChanged(); 
    ...
    flatMapLatest(function (term) { 
            return $.ajax({ 
                url: 'https://en.wikipedia.org/w/api.php', 
                dataType: 'jsonp', 
                data: { 
                    action: 'opensearch', 
                    format: 'json', 
                    search: term 
                } 
            }).promise(); 
        }); 
    ...
    .subscribe( 
        function(data) { 
            $results 
                .empty() 
                .append($.map(data[1], function (value) { 
                    return $('<li>').text(value); 
                })) 
        }, 
        function(error) { 
            $results 
                .empty() 
                .append($('<li>')) 
                .text('Error:' + error); 
        } 
    );
JS FIDDLE
By Musik- och teatermuseet (Own work) [ ],CC BY-SA 3.0 via Wikimedia
Commons
QUESTIONS?
Ask Now!
Twitter: @ElectricMaxxx
Mail: Maximilian.Berghoff@mayflower.de
LINKS
, Slideshare folgtSlides in Markdown
RxJS docs
Marbles
Liste an Tutorials
Repository
Ausführliches Tutorial
Video Tutorials
Buch
ALTERNATIVEN
cyclejs
BACONJS
THANK YOU!
< <

More Related Content

Viewers also liked

RESTing on HTTP
RESTing on HTTPRESTing on HTTP
RESTing on HTTP
Maximilian Berghoff
 
Meetup Openstack : At the heart of IT revolution
Meetup Openstack : At the heart of IT revolutionMeetup Openstack : At the heart of IT revolution
Meetup Openstack : At the heart of IT revolution
Laurent Grangeau
 
Modelagem computacional
Modelagem computacionalModelagem computacional
Modelagem computacional
NRFACIL www.nrfacil.com.br
 
Preparing for examination
Preparing for examinationPreparing for examination
क्रांतीयुग
क्रांतीयुगक्रांतीयुग
क्रांतीयुग
Jnana Prabodhini Educational Resource Center
 
Rest
RestRest
RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23
Maximilian Berghoff
 
Fns sst-apt- 26-passagem de gado
Fns sst-apt- 26-passagem de gadoFns sst-apt- 26-passagem de gado
Fns sst-apt- 26-passagem de gado
NRFACIL www.nrfacil.com.br
 
Fns sst-apt- 27-passagem inferior
Fns sst-apt- 27-passagem inferiorFns sst-apt- 27-passagem inferior
Fns sst-apt- 27-passagem inferior
NRFACIL www.nrfacil.com.br
 
Πολιτικοί
ΠολιτικοίΠολιτικοί
Πολιτικοίstne
 
Λαογράφοι
ΛαογράφοιΛαογράφοι
Λαογράφοιstne
 
Mit dem API ins CMS
Mit dem API ins CMSMit dem API ins CMS
Mit dem API ins CMS
Maximilian Berghoff
 
PORTFOLIO 2015 net
PORTFOLIO 2015 netPORTFOLIO 2015 net
PORTFOLIO 2015 net3darchdeco
 
आपली पृथ्वी आणि तिची वैशिष्ट्ये
आपली पृथ्वी आणि तिची वैशिष्ट्येआपली पृथ्वी आणि तिची वैशिष्ट्ये
आपली पृथ्वी आणि तिची वैशिष्ट्ये
Jnana Prabodhini Educational Resource Center
 
APT - BUEIROS
APT - BUEIROSAPT - BUEIROS
APT - CANTEIRO DE OBRA
APT - CANTEIRO DE OBRAAPT - CANTEIRO DE OBRA
APT - CANTEIRO DE OBRA
NRFACIL www.nrfacil.com.br
 
Animals
AnimalsAnimals
The desert g
The desert gThe desert g

Viewers also liked (19)

RESTing on HTTP
RESTing on HTTPRESTing on HTTP
RESTing on HTTP
 
Meetup Openstack : At the heart of IT revolution
Meetup Openstack : At the heart of IT revolutionMeetup Openstack : At the heart of IT revolution
Meetup Openstack : At the heart of IT revolution
 
Modelagem computacional
Modelagem computacionalModelagem computacional
Modelagem computacional
 
Preparing for examination
Preparing for examinationPreparing for examination
Preparing for examination
 
क्रांतीयुग
क्रांतीयुगक्रांतीयुग
क्रांतीयुग
 
Rest
RestRest
Rest
 
RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23
 
Fns sst-apt- 26-passagem de gado
Fns sst-apt- 26-passagem de gadoFns sst-apt- 26-passagem de gado
Fns sst-apt- 26-passagem de gado
 
Fns sst-apt- 27-passagem inferior
Fns sst-apt- 27-passagem inferiorFns sst-apt- 27-passagem inferior
Fns sst-apt- 27-passagem inferior
 
Πολιτικοί
ΠολιτικοίΠολιτικοί
Πολιτικοί
 
साधी यंत्रे
साधी यंत्रेसाधी यंत्रे
साधी यंत्रे
 
Λαογράφοι
ΛαογράφοιΛαογράφοι
Λαογράφοι
 
Mit dem API ins CMS
Mit dem API ins CMSMit dem API ins CMS
Mit dem API ins CMS
 
PORTFOLIO 2015 net
PORTFOLIO 2015 netPORTFOLIO 2015 net
PORTFOLIO 2015 net
 
आपली पृथ्वी आणि तिची वैशिष्ट्ये
आपली पृथ्वी आणि तिची वैशिष्ट्येआपली पृथ्वी आणि तिची वैशिष्ट्ये
आपली पृथ्वी आणि तिची वैशिष्ट्ये
 
APT - BUEIROS
APT - BUEIROSAPT - BUEIROS
APT - BUEIROS
 
APT - CANTEIRO DE OBRA
APT - CANTEIRO DE OBRAAPT - CANTEIRO DE OBRA
APT - CANTEIRO DE OBRA
 
Animals
AnimalsAnimals
Animals
 
The desert g
The desert gThe desert g
The desert g
 

Similar to Reactive java script mit rxjs basta! 2016

Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016
Codemotion
 
MVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin WayMVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin Way
Zeyad Gasser
 
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Codemotion
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
FDConf
 
Prescribing RX Responsibly
Prescribing RX ResponsiblyPrescribing RX Responsibly
Prescribing RX Responsibly
Nareg Khoshafian
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
Jenya Terpil
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGL
gerbille
 
Ultimate Node.js countdown: the coolest Application Express examples
Ultimate Node.js countdown: the coolest Application Express examplesUltimate Node.js countdown: the coolest Application Express examples
Ultimate Node.js countdown: the coolest Application Express examples
Alan Arentsen
 
Throttle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web AppsThrottle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web Apps
Almir Filho
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of today
gerbille
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScript
jnewmanux
 
jQuery for Beginners
jQuery for Beginners jQuery for Beginners
jQuery for Beginners
NAILBITER
 
jsDay 2016 recap
jsDay 2016 recapjsDay 2016 recap
jsDay 2016 recap
Giorgio Cefaro
 
ViewController.swift Calculatorimport Cocoaimport UIKit.pdf
 ViewController.swift Calculatorimport Cocoaimport UIKit.pdf ViewController.swift Calculatorimport Cocoaimport UIKit.pdf
ViewController.swift Calculatorimport Cocoaimport UIKit.pdf
arasanlethers
 
From zero to hero with the reactive extensions for JavaScript
From zero to hero with the reactive extensions for JavaScriptFrom zero to hero with the reactive extensions for JavaScript
From zero to hero with the reactive extensions for JavaScript
Maurice De Beijer [MVP]
 
How to ship customer value faster with step functions
How to ship customer value faster with step functionsHow to ship customer value faster with step functions
How to ship customer value faster with step functions
Yan Cui
 
Understanding Functions and "this" in the World of ES2017+
Understanding Functions and "this" in the World of ES2017+Understanding Functions and "this" in the World of ES2017+
Understanding Functions and "this" in the World of ES2017+
Bryan Hughes
 
Rxjs kyivjs 2015
Rxjs kyivjs 2015Rxjs kyivjs 2015
Rxjs kyivjs 2015
Alexander Mostovenko
 
README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia
Richard Radics
 
Yahoo presentation: JavaScript Events
Yahoo presentation: JavaScript EventsYahoo presentation: JavaScript Events
Yahoo presentation: JavaScript Events
Peter-Paul Koch
 

Similar to Reactive java script mit rxjs basta! 2016 (20)

Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016Promises are so passé - Tim Perry - Codemotion Milan 2016
Promises are so passé - Tim Perry - Codemotion Milan 2016
 
MVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin WayMVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin Way
 
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
Prescribing RX Responsibly
Prescribing RX ResponsiblyPrescribing RX Responsibly
Prescribing RX Responsibly
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGL
 
Ultimate Node.js countdown: the coolest Application Express examples
Ultimate Node.js countdown: the coolest Application Express examplesUltimate Node.js countdown: the coolest Application Express examples
Ultimate Node.js countdown: the coolest Application Express examples
 
Throttle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web AppsThrottle and Debounce Patterns in Web Apps
Throttle and Debounce Patterns in Web Apps
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of today
 
Understanding Asynchronous JavaScript
Understanding Asynchronous JavaScriptUnderstanding Asynchronous JavaScript
Understanding Asynchronous JavaScript
 
jQuery for Beginners
jQuery for Beginners jQuery for Beginners
jQuery for Beginners
 
jsDay 2016 recap
jsDay 2016 recapjsDay 2016 recap
jsDay 2016 recap
 
ViewController.swift Calculatorimport Cocoaimport UIKit.pdf
 ViewController.swift Calculatorimport Cocoaimport UIKit.pdf ViewController.swift Calculatorimport Cocoaimport UIKit.pdf
ViewController.swift Calculatorimport Cocoaimport UIKit.pdf
 
From zero to hero with the reactive extensions for JavaScript
From zero to hero with the reactive extensions for JavaScriptFrom zero to hero with the reactive extensions for JavaScript
From zero to hero with the reactive extensions for JavaScript
 
How to ship customer value faster with step functions
How to ship customer value faster with step functionsHow to ship customer value faster with step functions
How to ship customer value faster with step functions
 
Understanding Functions and "this" in the World of ES2017+
Understanding Functions and "this" in the World of ES2017+Understanding Functions and "this" in the World of ES2017+
Understanding Functions and "this" in the World of ES2017+
 
Rxjs kyivjs 2015
Rxjs kyivjs 2015Rxjs kyivjs 2015
Rxjs kyivjs 2015
 
README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia README.MD for building the first purely digital mobile bank in Indonesia
README.MD for building the first purely digital mobile bank in Indonesia
 
Yahoo presentation: JavaScript Events
Yahoo presentation: JavaScript EventsYahoo presentation: JavaScript Events
Yahoo presentation: JavaScript Events
 

More from Maximilian Berghoff

Sustainability in der deploy pipeline
Sustainability in der deploy pipelineSustainability in der deploy pipeline
Sustainability in der deploy pipeline
Maximilian Berghoff
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
Maximilian Berghoff
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
Maximilian Berghoff
 
Natural language understanding meets php php ruhr 2018
Natural language understanding meets php   php ruhr 2018Natural language understanding meets php   php ruhr 2018
Natural language understanding meets php php ruhr 2018
Maximilian Berghoff
 
NLU meets PHP
NLU meets PHPNLU meets PHP
NLU meets PHP
Maximilian Berghoff
 
Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019
Maximilian Berghoff
 
Search engine optimization for symfony developers
Search engine optimization for symfony developersSearch engine optimization for symfony developers
Search engine optimization for symfony developers
Maximilian Berghoff
 
Introduction into FrOSCon PHP Track
Introduction into FrOSCon PHP TrackIntroduction into FrOSCon PHP Track
Introduction into FrOSCon PHP Track
Maximilian Berghoff
 
Angular Workshop FrOSCon 2018
Angular Workshop  FrOSCon 2018Angular Workshop  FrOSCon 2018
Angular Workshop FrOSCon 2018
Maximilian Berghoff
 
API Plattform - A Backend in Minutes
API Plattform - A Backend in MinutesAPI Plattform - A Backend in Minutes
API Plattform - A Backend in Minutes
Maximilian Berghoff
 
The content manager loves the tree
The content manager loves the treeThe content manager loves the tree
The content manager loves the tree
Maximilian Berghoff
 
Aspects Of Code Quality meetup
Aspects Of Code Quality   meetupAspects Of Code Quality   meetup
Aspects Of Code Quality meetup
Maximilian Berghoff
 
Extending a symfony application by cms features
Extending a symfony application by cms featuresExtending a symfony application by cms features
Extending a symfony application by cms features
Maximilian Berghoff
 
Concepts of Code Quality
Concepts of Code QualityConcepts of Code Quality
Concepts of Code Quality
Maximilian Berghoff
 
Eine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweiternEine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweitern
Maximilian Berghoff
 

More from Maximilian Berghoff (15)

Sustainability in der deploy pipeline
Sustainability in der deploy pipelineSustainability in der deploy pipeline
Sustainability in der deploy pipeline
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
 
Natural language understanding meets php php ruhr 2018
Natural language understanding meets php   php ruhr 2018Natural language understanding meets php   php ruhr 2018
Natural language understanding meets php php ruhr 2018
 
NLU meets PHP
NLU meets PHPNLU meets PHP
NLU meets PHP
 
Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019Angular Mini Hackathon Code Talks 2019
Angular Mini Hackathon Code Talks 2019
 
Search engine optimization for symfony developers
Search engine optimization for symfony developersSearch engine optimization for symfony developers
Search engine optimization for symfony developers
 
Introduction into FrOSCon PHP Track
Introduction into FrOSCon PHP TrackIntroduction into FrOSCon PHP Track
Introduction into FrOSCon PHP Track
 
Angular Workshop FrOSCon 2018
Angular Workshop  FrOSCon 2018Angular Workshop  FrOSCon 2018
Angular Workshop FrOSCon 2018
 
API Plattform - A Backend in Minutes
API Plattform - A Backend in MinutesAPI Plattform - A Backend in Minutes
API Plattform - A Backend in Minutes
 
The content manager loves the tree
The content manager loves the treeThe content manager loves the tree
The content manager loves the tree
 
Aspects Of Code Quality meetup
Aspects Of Code Quality   meetupAspects Of Code Quality   meetup
Aspects Of Code Quality meetup
 
Extending a symfony application by cms features
Extending a symfony application by cms featuresExtending a symfony application by cms features
Extending a symfony application by cms features
 
Concepts of Code Quality
Concepts of Code QualityConcepts of Code Quality
Concepts of Code Quality
 
Eine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweiternEine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweitern
 

Recently uploaded

Securing BGP: Operational Strategies and Best Practices for Network Defenders...
Securing BGP: Operational Strategies and Best Practices for Network Defenders...Securing BGP: Operational Strategies and Best Practices for Network Defenders...
Securing BGP: Operational Strategies and Best Practices for Network Defenders...
APNIC
 
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
3a0sd7z3
 
How to make a complaint to the police for Social Media Fraud.pdf
How to make a complaint to the police for Social Media Fraud.pdfHow to make a complaint to the police for Social Media Fraud.pdf
How to make a complaint to the police for Social Media Fraud.pdf
Infosec train
 
Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...
Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...
Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...
APNIC
 
一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理
一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理
一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理
thezot
 
HijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process HollowingHijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process Hollowing
Donato Onofri
 
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
rtunex8r
 
一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理
一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理
一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理
dtagbe
 
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
3a0sd7z3
 
cyber crime.pptx..........................
cyber crime.pptx..........................cyber crime.pptx..........................
cyber crime.pptx..........................
GNAMBIKARAO
 
Bengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal BrandingBengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal Branding
Tarandeep Singh
 

Recently uploaded (11)

Securing BGP: Operational Strategies and Best Practices for Network Defenders...
Securing BGP: Operational Strategies and Best Practices for Network Defenders...Securing BGP: Operational Strategies and Best Practices for Network Defenders...
Securing BGP: Operational Strategies and Best Practices for Network Defenders...
 
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
快速办理(Vic毕业证书)惠灵顿维多利亚大学毕业证完成信一模一样
 
How to make a complaint to the police for Social Media Fraud.pdf
How to make a complaint to the police for Social Media Fraud.pdfHow to make a complaint to the police for Social Media Fraud.pdf
How to make a complaint to the police for Social Media Fraud.pdf
 
Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...
Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...
Honeypots Unveiled: Proactive Defense Tactics for Cyber Security, Phoenix Sum...
 
一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理
一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理
一比一原版新西兰林肯大学毕业证(Lincoln毕业证书)学历如何办理
 
HijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process HollowingHijackLoader Evolution: Interactive Process Hollowing
HijackLoader Evolution: Interactive Process Hollowing
 
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
怎么办理(umiami毕业证书)美国迈阿密大学毕业证文凭证书实拍图原版一模一样
 
一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理
一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理
一比一原版(uc毕业证书)加拿大卡尔加里大学毕业证如何办理
 
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
快速办理(新加坡SMU毕业证书)新加坡管理大学毕业证文凭证书一模一样
 
cyber crime.pptx..........................
cyber crime.pptx..........................cyber crime.pptx..........................
cyber crime.pptx..........................
 
Bengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal BrandingBengaluru Dreamin' 24 - Personal Branding
Bengaluru Dreamin' 24 - Personal Branding
 

Reactive java script mit rxjs basta! 2016