SlideShare una empresa de Scribd logo
1 de 124
Descargar para leer sin conexión
ME AND MY IMPORTERS
DONNY WALS
EXPLORING THE FIELD
PROLOGUE:
LET’S SYNC ALL DATA FROM THE BACK-
END INSTEAD OF REQUESTING TINY BITS.
IT WILL BE GREAT!
Back-end development
ME AND MY IMPORTERS
PROBLEM 1,
API DEPENDENCIES
App Settings Remote app config
Events
Information about all the
visible events in the app
App Settings Remote app config
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
App Settings Remote app config
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
Userdata
Information for the currently
logged in user
App Settings Remote app config
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
Userdata
Information for the currently
logged in user
Prizes Favorites Profile
App Settings Remote app config
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
Userdata
Information for the currently
logged in user
Prizes Favorites Profile
Homepage
Which data to display on the
homepage
App Settings Remote app config
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
Userdata
Information for the currently
logged in user
Prizes Favorites Profile
Homepage
Which data to display on the
homepage
App Settings Remote app config 1
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
Userdata
Information for the currently
logged in user
Prizes Favorites Profile
Homepage
Which data to display on the
homepage
App Settings Remote app config 1
2
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
Userdata
Information for the currently
logged in user
Prizes Favorites Profile
Homepage
Which data to display on the
homepage
App Settings Remote app config 1
3
2
Events
Information about all the
visible events in the app
Genres
All the possible genres that
are assigned to events
Userdata
Information for the currently
logged in user
Prizes Favorites Profile
Homepage
Which data to display on the
homepage
App Settings Remote app config 1
3
2
4
4
PROBLEM 2,
DUPLICATION
EVENT
Location
Categories
Artists
Gallery
Sponsor
Country
Texts
EVENT
Location
Categories
Artists
Gallery
Sponsor
Country
Texts
A LOT OF DATA IS DUPLICATED
😭
PROBLEM 3,
STORAGE
THE USER SHOULD ALWAYS BE ABLE TO
USE THE UI, EVEN WHEN A SYNC IS
TAKING PLACE IN THE BACKGROUND.
Me
ME AND MY IMPORTERS
ME AND MY IMPORTERS
AGENDA
ME AND MY IMPORTERS
AGENDA
▸ Chapter 1: Chaining operations
ME AND MY IMPORTERS
AGENDA
▸ Chapter 1: Chaining operations
▸ Chapter 2: Optimizing the data
ME AND MY IMPORTERS
AGENDA
▸ Chapter 1: Chaining operations
▸ Chapter 2: Optimizing the data
▸ Chapter 3: Storing in CoreData
CHAINING
OPERATIONS
CHAPTER 1:
ADVANCED NSOPERATIONS
WWDC 2015
Events
Userdata
Homepage
Genres
Information about all the
visible events in the app
All the possible genres that
are assigned to events
Information for the currently
logged in user
Prizes Favorites Profile
Which data to display on the
homepage
App Settings Remote app config 1
3
2
4
4
Sync operation
App Settings
Sync operation
App Settings
Genres
Sync operation
App Settings
Genres
Sync operation
App Settings
Events
Genres
Sync operation
App Settings
Events
Genres
Sync operation
App Settings
Events
Genres
Homepage
Sync operation
App Settings
Events
Genres
Homepage
Sync operation
App Settings
Events
Genres Userdata
Homepage
Sync operation
App Settings
Events
Genres
Prizes Favorites Profile
Userdata
Homepage
Sync operation
App Settings
Events
Genres
Prizes Favorites Profile
Userdata
Homepage
Sync operation
App Settings
Events
Genres
Prizes Favorites Profile
Userdata
Homepage
Completion
Sync operation
App Settings
Events
Genres
Prizes Favorites Profile
Userdata
Homepage
Completion
Sync operation
App Settings EventsGenres
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
App Settings EventsGenres
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
EventsGenres
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
EventsGenres
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
Events
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
Events
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
Prizes Favorites Profile
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
Prizes Favorites
Userdata
HomepageCompletion
SYNC OPERATION QUEUE
USERDATA QUEUE
Prizes Favorites
Userdata
Completion
SYNC OPERATION QUEUE
USERDATA QUEUE
Prizes
Userdata
Completion
SYNC OPERATION QUEUE
USERDATA QUEUE
Completion
SYNC OPERATION QUEUE
USERDATA QUEUE
Completion
SYNC OPERATION QUEUE
USERDATA QUEUE
SYNC OPERATION QUEUE
USERDATA QUEUE
EVENT FETCH OPERATION
GENRE FETCH OPERATION
EVENT FETCH OPERATION
override func generateDependencies() -> [DWOperation] {
return [GenreFetchOperation()]
}
GENRE FETCH OPERATION
EVENT FETCH OPERATION
override func generateDependencies() -> [DWOperation] {
return [GenreFetchOperation()]
}
GENRE FETCH OPERATION
override func generateDependencies() -> [DWOperation] {
return [SyncAppSettingsOperation()]
}
DWOPERATION QUEUE
DWOPERATION QUEUE
override func addOperation(_ op: Operation) {
// details, details
for dependency in operation.generateDependencies() {
operation.addDependency(dependency)
addOperation(dependency)
}
operation.willEnqueue()
}
FETCH USER DATA OPERATION
FETCH USER DATA OPERATION
init(operations: [Operation]) {
super.init()
internalQueue.isSuspended = true
internalQueue.delegate = self
internalQueue.addOperation(startingOperation)
for operation in operations {
internalQueue.addOperation(operation)
}
}
FETCH USER DATA OPERATION
FETCH USER DATA OPERATION
final func operationQueue(_ operationQueue: MyOperationQueue, operationDidFinish operation: Operation, withErro
errors: [Error]) {
aggregatedErrors.append(contentsOf: errors)
if operation === finishingOperation {
internalQueue.isSuspended = true
finish(errors: aggregatedErrors)
} else if operation !== startingOperation {
operationDidFinish(operation: operation, withErrors: errors)
}
}
App Settings
Events
Genres Userdata
Prizes Favorites Profile
Homepage
Completion
Sync operation
ME AND MY IMPORTERS
PROBLEM 1 SOLVED
ME AND MY IMPORTERS
PROBLEM 1 SOLVED
▸ Operations simplify dependencies
ME AND MY IMPORTERS
PROBLEM 1 SOLVED
▸ Operations simplify dependencies
▸ Operations can execute in parallel or serially
ME AND MY IMPORTERS
PROBLEM 1 SOLVED
▸ Operations simplify dependencies
▸ Operations can execute in parallel or serially
▸ Operations can contain their own private queues for complex nesting
OPTIMIZING THE DATA
CHAPTER 2:
EVENT
Location
Categories
Artists
Gallery
Sponsor
Country
Texts
A LOT OF DATA IS DUPLICATED
😭
EVENT
Location
Categories
Artists
Gallery
Sponsor
Country
Texts
THE SAME OBJECTS ARE IN THE
JSON MANY, MANY, MANY TIMES
PROCESSING IMPLEMENTATION V1
PROCESSING IMPLEMENTATION V1
Loop over events
in JSON response
PROCESSING IMPLEMENTATION V1
Find event in DB /
Create new event
Loop over events
in JSON response
PROCESSING IMPLEMENTATION V1
Find event in DB /
Create new event
Find location in DB /
Create new location
Loop over events
in JSON response
PROCESSING IMPLEMENTATION V1
Find event in DB /
Create new event
Find location in DB /
Create new location
Loop over events
in JSON response
Find artist in DB /
Create new artist
PROCESSING IMPLEMENTATION V1
Find event in DB /
Create new event
Find location in DB /
Create new location
Loop over events
in JSON response
Find artist in DB /
Create new artist
Find gallery in DB /
Create new gallery
PROCESSING IMPLEMENTATION V1
Find event in DB /
Create new event
Find location in DB /
Create new location
Loop over events
in JSON response
Find artist in DB /
Create new artist
Find text in DB /
Create new text
Find gallery in DB /
Create new gallery
PROCESSING IMPLEMENTATION V1
Find event in DB /
Create new event
Find location in DB /
Create new location
Loop over events
in JSON response
Find artist in DB /
Create new artist
Find sponsor in DB /
Create new sponsor
Find text in DB /
Create new text
Find gallery in DB /
Create new gallery
PROCESSING IMPLEMENTATION V1
Find event in DB /
Create new event
Find location in DB /
Create new location
Loop over events
in JSON response
Find artist in DB /
Create new artist
Find sponsor in DB /
Create new sponsor
Find text in DB /
Create new text
Find gallery in DB /
Create new gallery
Persist DB
BUT WHAT ABOUT THE
DUPLICATED DATA?
THE DEFINITION OF INSANITY IS DOING
THE SAME THING OVER AND OVER AGAIN
AND EXPECTING A DIFFERENT RESULT.
Not Albert Einstein
ME AND MY IMPORTERS
PROCESSING IMPLEMENTATION V2
PROCESSING IMPLEMENTATION V2
Loop over events
in JSON response
PROCESSING IMPLEMENTATION V2
Collect all unique
events & relations
Loop over events
in JSON response
PROCESSING IMPLEMENTATION V2
Collect all unique
events & relations
Fetch / create
objects
Loop over events
in JSON response
PROCESSING IMPLEMENTATION V2
Collect all unique
events & relations
Fetch / create
objects
Loop over events
in JSON response
Loop over event
objects
PROCESSING IMPLEMENTATION V2
Collect all unique
events & relations
Fetch / create
objects
Loop over events
in JSON response
Loop over event
objects
Assign relations
to event object
PROCESSING IMPLEMENTATION V2
Collect all unique
events & relations
Fetch / create
objects
Loop over events
in JSON response
Persist DB
Loop over event
objects
Assign relations
to event object
COLLECT ALL UNIQUE EVENTS AND
RELATIONS?
COLLECT ALL UNIQUE EVENTS AND
RELATIONS?
for event in events {
guard let eventId = event["id"] as? Int
else { continue }
eventIds.append(eventId)
if let location = event["location"] as? DWJSON,
let locationId = location["id"] as? Int {
locationIds.append(locationId)
}
// etc...
}
EACH OBJECT IS FETCHED/
CREATED AND UPDATED ONCE
ME AND MY IMPORTERS
PROBLEM 2 SOLVED
ME AND MY IMPORTERS
PROBLEM 2 SOLVED
▸ Collecting all unique ids for objects
ME AND MY IMPORTERS
PROBLEM 2 SOLVED
▸ Collecting all unique ids for objects
▸ Fetching all objects in one go
ME AND MY IMPORTERS
PROBLEM 2 SOLVED
▸ Collecting all unique ids for objects
▸ Fetching all objects in one go
▸ Each object is only updated once
ME AND MY IMPORTERS
PROBLEM 2 SOLVED
▸ Collecting all unique ids for objects
▸ Fetching all objects in one go
▸ Each object is only updated once
▸ Pulling apart the data before processing it can have great benefits
STORING IN COREDATA
CHAPTER 3:
THE USER SHOULD ALWAYS BE ABLE TO
USE THE UI, EVEN WHEN A SYNC IS
TAKING PLACE IN THE BACKGROUND.
Me
ME AND MY IMPORTERS
EASY, JUST USE MULTIPLE CONTEXTS
You
ME AND MY IMPORTERS
Read context
MAIN QUEUE
Read context
MAIN QUEUE
Import context
PRIVATE QUEUE
THE UI IS FLASHING A LOT WHEN I
LAUNCH THE APP
The almighty userbase
ME AND MY IMPORTERS
UI UPDATING IMPLEMENTATION V1
UI UPDATING IMPLEMENTATION V1
Managed object
context did save
UI UPDATING IMPLEMENTATION V1
Update UI
Managed object
context did save
EACH OPERATION SAVES THE
CONTEXT, RESULTING IN MANY UI
UPDATES
UI UPDATING IMPLEMENTATION V2
UI UPDATING IMPLEMENTATION V2
Sync helper did
start notification
UI UPDATING IMPLEMENTATION V2
Managed object
context did save
Sync helper did
start notification
UI UPDATING IMPLEMENTATION V2
Hold on to
notification
Managed object
context did save
Sync helper did
start notification
UI UPDATING IMPLEMENTATION V2
Hold on to
notification
Managed object
context did save
Sync helper did
start notification
Sync helper did
end notification
UI UPDATING IMPLEMENTATION V2
Hold on to
notification
Managed object
context did save
Sync helper did
start notification
Sync helper did
end notification
Fire one notification
for each entity
ME AND MY IMPORTERS
PROBLEM 3 SOLVED
ME AND MY IMPORTERS
PROBLEM 3 SOLVED
▸ Use multiple contexts for reading and writing
ME AND MY IMPORTERS
PROBLEM 3 SOLVED
▸ Use multiple contexts for reading and writing
▸ Store notifications while you’re importing
ME AND MY IMPORTERS
PROBLEM 3 SOLVED
▸ Use multiple contexts for reading and writing
▸ Store notifications while you’re importing
▸ Filter notifications and fire only the notifications you really need to fire
ME AND MY IMPORTERS
TAKEAWAYS
ME AND MY IMPORTERS
TAKEAWAYS
▸ Operations can make complex processes easier to manage
ME AND MY IMPORTERS
TAKEAWAYS
▸ Operations can make complex processes easier to manage
▸ You might need to pre-process imported data for performance
ME AND MY IMPORTERS
TAKEAWAYS
▸ Operations can make complex processes easier to manage
▸ You might need to pre-process imported data for performance
▸ Inserting a layer between your app and CoreData can help with managing an
import pipeline
🍷

Más contenido relacionado

La actualidad más candente

Getting physical with web bluetooth in the browser hackference
Getting physical with web bluetooth in the browser hackferenceGetting physical with web bluetooth in the browser hackference
Getting physical with web bluetooth in the browser hackferenceDan Jenkins
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4DEVCON
 
Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4DEVCON
 
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)Peter Lehto
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
Introducing Apache Lucene with two demos
Introducing Apache Lucene with two demosIntroducing Apache Lucene with two demos
Introducing Apache Lucene with two demosSangHee Kim
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4DEVCON
 
Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4DEVCON
 
Solving Real World Problems with YUI 3: AutoComplete
Solving Real World Problems with YUI 3: AutoCompleteSolving Real World Problems with YUI 3: AutoComplete
Solving Real World Problems with YUI 3: AutoCompleteIsaacSchlueter
 
Tips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applicationsTips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applicationsTim Cull
 
Programmers, communicate your intentions
Programmers, communicate your intentionsProgrammers, communicate your intentions
Programmers, communicate your intentionsYael Zaritsky Perez
 
Abstracting functionality with centralised content
Abstracting functionality with centralised contentAbstracting functionality with centralised content
Abstracting functionality with centralised contentMichael Peacock
 
Remote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.create
Remote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.createRemote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.create
Remote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.createPeter Lehto
 
Intents broadcastreceivers
Intents broadcastreceiversIntents broadcastreceivers
Intents broadcastreceiversTraining Guide
 
TurboGears2 Pluggable Applications
TurboGears2 Pluggable ApplicationsTurboGears2 Pluggable Applications
TurboGears2 Pluggable ApplicationsAlessandro Molina
 
Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web ModuleMorgan Cheng
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and PythonPiXeL16
 

La actualidad más candente (20)

Getting physical with web bluetooth in the browser hackference
Getting physical with web bluetooth in the browser hackferenceGetting physical with web bluetooth in the browser hackference
Getting physical with web bluetooth in the browser hackference
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4
 
Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4
 
Wave Workshop
Wave WorkshopWave Workshop
Wave Workshop
 
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
Introducing Apache Lucene with two demos
Introducing Apache Lucene with two demosIntroducing Apache Lucene with two demos
Introducing Apache Lucene with two demos
 
Nativescript angular
Nativescript angularNativescript angular
Nativescript angular
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4
 
Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4
 
Controller specs
Controller specsController specs
Controller specs
 
Solving Real World Problems with YUI 3: AutoComplete
Solving Real World Problems with YUI 3: AutoCompleteSolving Real World Problems with YUI 3: AutoComplete
Solving Real World Problems with YUI 3: AutoComplete
 
Tips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applicationsTips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applications
 
Programmers, communicate your intentions
Programmers, communicate your intentionsProgrammers, communicate your intentions
Programmers, communicate your intentions
 
Abstracting functionality with centralised content
Abstracting functionality with centralised contentAbstracting functionality with centralised content
Abstracting functionality with centralised content
 
Remote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.create
Remote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.createRemote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.create
Remote controlling Parrot AR drone with Vaadin & Spring Boot @ GWT.create
 
Intents broadcastreceivers
Intents broadcastreceiversIntents broadcastreceivers
Intents broadcastreceivers
 
TurboGears2 Pluggable Applications
TurboGears2 Pluggable ApplicationsTurboGears2 Pluggable Applications
TurboGears2 Pluggable Applications
 
Build Lightweight Web Module
Build Lightweight Web ModuleBuild Lightweight Web Module
Build Lightweight Web Module
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and Python
 

Similar a Me and my importers

Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...Krist Wongsuphasawat
 
Testing business-logic-in-dsls
Testing business-logic-in-dslsTesting business-logic-in-dsls
Testing business-logic-in-dslsMayank Jain
 
Firebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopFirebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopPeter Friese
 
REST more with json-api and fractal
REST more with json-api and fractalREST more with json-api and fractal
REST more with json-api and fractalBoyan Yordanov
 
Saindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender androidSaindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender androidDaniel Baccin
 
Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.UA Mobile
 
Hosting Your Own OTA Update Service
Hosting Your Own OTA Update ServiceHosting Your Own OTA Update Service
Hosting Your Own OTA Update ServiceQuinlan Jung
 
Android 103 - Firebase and Architecture Components
Android 103 - Firebase and Architecture ComponentsAndroid 103 - Firebase and Architecture Components
Android 103 - Firebase and Architecture ComponentsKai Koenig
 
Cesar Valiente "Unidirectional architecture on Android with Kotlin"
Cesar Valiente "Unidirectional architecture on Android with Kotlin"Cesar Valiente "Unidirectional architecture on Android with Kotlin"
Cesar Valiente "Unidirectional architecture on Android with Kotlin"IT Event
 
Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017Jens Ravens
 
Consumer Driven Contracts - A Deep Dive
Consumer Driven Contracts - A Deep DiveConsumer Driven Contracts - A Deep Dive
Consumer Driven Contracts - A Deep DiveRamya Authappan
 
Developer friendly open data
Developer friendly open dataDeveloper friendly open data
Developer friendly open dataAlbert O'Connor
 
Creating 'Vuetiful' Data-Driven User Interfaces
Creating 'Vuetiful' Data-Driven User InterfacesCreating 'Vuetiful' Data-Driven User Interfaces
Creating 'Vuetiful' Data-Driven User InterfacesEvan Schultz
 
Building Awesome APIs in Grails
Building Awesome APIs in GrailsBuilding Awesome APIs in Grails
Building Awesome APIs in Grailsclatimer
 
How to fix a bug in production - Rollout.io
How to fix a bug in production - Rollout.ioHow to fix a bug in production - Rollout.io
How to fix a bug in production - Rollout.ioRollout.io
 
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac..."Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...Fwdays
 
Jaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social WebJaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social WebPatrick Chanezon
 

Similar a Me and my importers (20)

Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
 
Testing business-logic-in-dsls
Testing business-logic-in-dslsTesting business-logic-in-dsls
Testing business-logic-in-dsls
 
Logs & Visualizations at Twitter
Logs & Visualizations at TwitterLogs & Visualizations at Twitter
Logs & Visualizations at Twitter
 
Firebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopFirebase & SwiftUI Workshop
Firebase & SwiftUI Workshop
 
REST more with json-api and fractal
REST more with json-api and fractalREST more with json-api and fractal
REST more with json-api and fractal
 
Saindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender androidSaindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender android
 
Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.
 
Hosting Your Own OTA Update Service
Hosting Your Own OTA Update ServiceHosting Your Own OTA Update Service
Hosting Your Own OTA Update Service
 
Android 103 - Firebase and Architecture Components
Android 103 - Firebase and Architecture ComponentsAndroid 103 - Firebase and Architecture Components
Android 103 - Firebase and Architecture Components
 
Cesar Valiente "Unidirectional architecture on Android with Kotlin"
Cesar Valiente "Unidirectional architecture on Android with Kotlin"Cesar Valiente "Unidirectional architecture on Android with Kotlin"
Cesar Valiente "Unidirectional architecture on Android with Kotlin"
 
Event Sourcing with php
Event Sourcing with phpEvent Sourcing with php
Event Sourcing with php
 
Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017
 
Consumer Driven Contracts - A Deep Dive
Consumer Driven Contracts - A Deep DiveConsumer Driven Contracts - A Deep Dive
Consumer Driven Contracts - A Deep Dive
 
Developer friendly open data
Developer friendly open dataDeveloper friendly open data
Developer friendly open data
 
Creating 'Vuetiful' Data-Driven User Interfaces
Creating 'Vuetiful' Data-Driven User InterfacesCreating 'Vuetiful' Data-Driven User Interfaces
Creating 'Vuetiful' Data-Driven User Interfaces
 
Building Awesome APIs in Grails
Building Awesome APIs in GrailsBuilding Awesome APIs in Grails
Building Awesome APIs in Grails
 
ALL NEW OOP 2014
ALL NEW OOP 2014ALL NEW OOP 2014
ALL NEW OOP 2014
 
How to fix a bug in production - Rollout.io
How to fix a bug in production - Rollout.ioHow to fix a bug in production - Rollout.io
How to fix a bug in production - Rollout.io
 
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac..."Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
 
Jaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social WebJaoo - Open Social A Standard For The Social Web
Jaoo - Open Social A Standard For The Social Web
 

Más de Donny Wals

Your 🧠 on Swift Concurrency
Your 🧠 on Swift ConcurrencyYour 🧠 on Swift Concurrency
Your 🧠 on Swift ConcurrencyDonny Wals
 
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...Donny Wals
 
The combine triad
The combine triadThe combine triad
The combine triadDonny Wals
 
Building reusable components with generics and protocols
Building reusable components with generics and protocolsBuilding reusable components with generics and protocols
Building reusable components with generics and protocolsDonny Wals
 
Adopting tdd in the workplace
Adopting tdd in the workplaceAdopting tdd in the workplace
Adopting tdd in the workplaceDonny Wals
 
The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!Donny Wals
 
JSON and Swift, Still A Better Love Story Than Twilight
JSON and Swift, Still A Better Love Story Than TwilightJSON and Swift, Still A Better Love Story Than Twilight
JSON and Swift, Still A Better Love Story Than TwilightDonny Wals
 
Adopting tdd in the workplace
Adopting tdd in the workplaceAdopting tdd in the workplace
Adopting tdd in the workplaceDonny Wals
 
In Defense Of Core Data
In Defense Of Core DataIn Defense Of Core Data
In Defense Of Core DataDonny Wals
 
Talk - git task managers and ci
Talk - git task managers and ciTalk - git task managers and ci
Talk - git task managers and ciDonny Wals
 
Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...
Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...
Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...Donny Wals
 
Marketing strategie Arto
Marketing strategie ArtoMarketing strategie Arto
Marketing strategie ArtoDonny Wals
 
Hoorcollege Flash 9-2-2012
Hoorcollege Flash 9-2-2012Hoorcollege Flash 9-2-2012
Hoorcollege Flash 9-2-2012Donny Wals
 

Más de Donny Wals (13)

Your 🧠 on Swift Concurrency
Your 🧠 on Swift ConcurrencyYour 🧠 on Swift Concurrency
Your 🧠 on Swift Concurrency
 
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
 
The combine triad
The combine triadThe combine triad
The combine triad
 
Building reusable components with generics and protocols
Building reusable components with generics and protocolsBuilding reusable components with generics and protocols
Building reusable components with generics and protocols
 
Adopting tdd in the workplace
Adopting tdd in the workplaceAdopting tdd in the workplace
Adopting tdd in the workplace
 
The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!
 
JSON and Swift, Still A Better Love Story Than Twilight
JSON and Swift, Still A Better Love Story Than TwilightJSON and Swift, Still A Better Love Story Than Twilight
JSON and Swift, Still A Better Love Story Than Twilight
 
Adopting tdd in the workplace
Adopting tdd in the workplaceAdopting tdd in the workplace
Adopting tdd in the workplace
 
In Defense Of Core Data
In Defense Of Core DataIn Defense Of Core Data
In Defense Of Core Data
 
Talk - git task managers and ci
Talk - git task managers and ciTalk - git task managers and ci
Talk - git task managers and ci
 
Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...
Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...
Developing in the Fastlane -> How LookLive uses Fastlane to automate and spee...
 
Marketing strategie Arto
Marketing strategie ArtoMarketing strategie Arto
Marketing strategie Arto
 
Hoorcollege Flash 9-2-2012
Hoorcollege Flash 9-2-2012Hoorcollege Flash 9-2-2012
Hoorcollege Flash 9-2-2012
 

Último

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...software pro Development
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 

Último (20)

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

Me and my importers