SlideShare a Scribd company logo
SERVERLESS SWIFT WITH OPENWHISK
JAMES THOMAS, IBM @THOMASJ
SERVERS KILL
YOUR PRODUCTIVITY
WASN’T THE CLOUD
SUPPOSED TO FIX THIS?
“COMPUTING AS A UTILITY”
Source: https://flic.kr/p/5aHJFh
DOES UTILITY PROVIDER ASK…
MAINTAIN POWER STATION?
DOES UTILITY PROVIDER ASK…
MAINTAIN POWER STATION?
DO CAPACITY PLANNING?
DOES UTILITY PROVIDER ASK…
MAINTAIN POWER STATION?
DO CAPACITY PLANNING?
CHARGE FOR UNUSED CAPACITY?
WHAT CAN WE DO?
Introducing…
SERVERLESS PLATFORMS
“RUNS CODE IN RESPONSE TO
EVENTS, MANAGES COMPUTE
RESOURCES”
…WHY IS THIS DIFFERENT?
FUNCTIONS-AS-A-SERVICE
SCALING: 0 to N
PAY-AS-YOU-GO
flickr photo by a loves dc https://flickr.com/photos/alovesdc/3466740007 CC (BY) license
ENOUGH TALKING…

SHOW ME THE CODE.
PROVIDERS
OPEN SOURCE
RUNTIMES
}
guard let amount = args["amount"] as? Int else {
return [ "error": "Missing mandatory argument: amount" ]
}
guard let prices = currentBitcoinPricesJson() else {
return [ "error": "Unable to retrieve Bitcoin prices" ]
}
guard let rate = prices["bpi"][currency]["rate_float"].double else {
return [ "error": "Currency not listed in Bitcoin prices" ]
}
let converted = Double(amount) / rate
let bitcoins = converted.truncate(places: 6)
return ["amount": bitcoins, "label": "(amount) (currency) is worth 
(bitcoins) bitcoins."]
}
my_code.swift
func main(args: [String:Any]) -> [String:Any] {
// put your code here! 

// …

return [ “result” : “value” ]
}
Entry Point Event Parameters
Service Result
my_code.swift
ACTIONS
Platform API
HTTP Request
Microservice
$ wsk action create —help
create a new action
Usage:
wsk action create ACTION_NAME ACTION [flags]
Flags:
--web string treat ACTION as a web action

Platform API
HTTP Request
Microservice
Hello
WHAT ABOUT…
🤔
💭
API ROUTING?


RATE LIMITING?
AUTHENTICATION?
DEPLOYMENTS?
Platform API
API Gateway Microservice
TRIGGERS
External Events
Trigger
$ wsk trigger create —help
create a new trigger
Usage:
wsk trigger create TRIGGER_NAME [flags]
Flags:
-f, --feed ACTION_NAME trigger feed name

EVENT SOURCES
Rules
Rules
$ wsk rule create —help
create a new rule
Usage:
wsk rule create RULE TRIGGER ACTION [flags]
CHALLENGES
“WARM” vs “COLD”
🔥 ⛄
$ time wsk action invoke bitcoin -p amount 1000 -p currency USD -r
{
"amount": 0.246287,
"label": "1000.0 USD is worth 0.246287 bitcoins."
}
real 0m4.638s
user 0m0.095s
sys 0m0.054s

$ time wsk action invoke bitcoin -p amount 1000 -p currency USD -r
{
"amount": 0.246287,
"label": "1000.0 USD is worth 0.246287 bitcoins."
}
real 0m1.003s
user 0m0.093s
sys 0m0.045s
$ time wsk action invoke …
{
"amount": 0.246287,
"label": “...”
}
real 0m4.638s
user 0m0.095s
sys 0m0.054s
——> start container
——> inject code
——> swift build
——> call main()
——> pause container
$ time wsk action invoke …
{
"amount": 0.246287,
"label": “...”
}
real 0m1.003s
user 0m0.093s
sys 0m0.045s
——> resume container
——> inject code
——> swift build
——> call main()
——> pause container
$ time wsk action invoke …
{
"amount": 0.246287,
"label": “...”
}
real 0m1.438s
user 0m0.095s
sys 0m0.054s
——> start container
——> inject code
——> swift build
——> call main()
——> pause container
$ time wsk action invoke …
{
"amount": 0.246287,
"label": “...”
}
real 0m1.003s
user 0m0.093s
sys 0m0.045s
——> resume container
——> inject code
——> swift build
——> call main()
——> pause container
COMPUTE LIMITS
flickr photo by zund https://flickr.com/photos/zund/12202485675 CC (BY-NC-ND) license
SERVERS KILL
YOUR PRODUCTIVITY
FIRE YOUR SERVERS
🔥 🖥+ 💪=
UPGRADE PRODUCTIVITY
http://bit.ly/burn_your_servers
slack.openwhisk.org
#openwhisk
@thomasj or @openwhisk
QUESTIONS?

More Related Content

Similar to Serverless Swift with Apache OpenWhisk. UA Mobile 2017.

TIAD 2016 : Building a Serverless Pipeline
TIAD 2016 : Building a Serverless PipelineTIAD 2016 : Building a Serverless Pipeline
TIAD 2016 : Building a Serverless Pipeline
The Incredible Automation Day
 
Best Practices of IoT in the Cloud
Best Practices of IoT in the CloudBest Practices of IoT in the Cloud
Best Practices of IoT in the Cloud
Amazon Web Services
 
Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...
Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...
Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...
confluent
 
(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...
(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...
(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...
Amazon Web Services
 
A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...
A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...
A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...
Amazon Web Services
 
Amazon Web Services Security
Amazon Web Services SecurityAmazon Web Services Security
Amazon Web Services Security
Jason Chan
 
Serverless architecture with AWS Lambda (June 2016)
Serverless architecture with AWS Lambda (June 2016)Serverless architecture with AWS Lambda (June 2016)
Serverless architecture with AWS Lambda (June 2016)
Julien SIMON
 
The fundamentals of AWS Cloud Security 🛠⛅️🚀
The fundamentals of AWS Cloud Security 🛠⛅️🚀The fundamentals of AWS Cloud Security 🛠⛅️🚀
The fundamentals of AWS Cloud Security 🛠⛅️🚀
Thanh Nguyen
 
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy NguyenGrokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Huy Nguyen
 
Payments On Rails
Payments On RailsPayments On Rails
Payments On Rails
E-xact Transactions
 
Best Practices for IoT Security in the Cloud
Best Practices for IoT Security in the CloudBest Practices for IoT Security in the Cloud
Best Practices for IoT Security in the Cloud
Amazon Web Services
 
Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017
Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017
Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017
Codemotion
 
CQRS and Event Sourcing: A DevOps perspective
CQRS and Event Sourcing: A DevOps perspectiveCQRS and Event Sourcing: A DevOps perspective
CQRS and Event Sourcing: A DevOps perspective
Maria Gomez
 
Do more with less code in serverless
Do more with less code in serverlessDo more with less code in serverless
Do more with less code in serverless
jeromevdl
 
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web ServicesXXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
Abraham Aranguren
 
Introduction to Marionette Collective
Introduction to Marionette CollectiveIntroduction to Marionette Collective
Introduction to Marionette Collective
Puppet
 
ececloud Architecture for GWU's ECE 289 Class
ececloud Architecture for GWU's ECE 289 Classececloud Architecture for GWU's ECE 289 Class
ececloud Architecture for GWU's ECE 289 Class
Robert Daniel
 
ececloud Architecture for GWU\'s ECE 289 Class
ececloud Architecture for GWU\'s ECE 289 Classececloud Architecture for GWU\'s ECE 289 Class
ececloud Architecture for GWU\'s ECE 289 Class
Robert Daniel
 
SDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - JapanSDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - Japan
tristansokol
 

Similar to Serverless Swift with Apache OpenWhisk. UA Mobile 2017. (20)

TIAD 2016 : Building a Serverless Pipeline
TIAD 2016 : Building a Serverless PipelineTIAD 2016 : Building a Serverless Pipeline
TIAD 2016 : Building a Serverless Pipeline
 
Best Practices of IoT in the Cloud
Best Practices of IoT in the CloudBest Practices of IoT in the Cloud
Best Practices of IoT in the Cloud
 
Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...
Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...
Apache Kafka and ksqlDB in Action: Let's Build a Streaming Data Pipeline! (Ro...
 
(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...
(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...
(SEC309) Amazon VPC Configuration: When Least Privilege Meets the Penetration...
 
A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...
A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...
A Self-Defending Border: Protect Your Web-Facing Workloads with AWS Security ...
 
Amazon Web Services Security
Amazon Web Services SecurityAmazon Web Services Security
Amazon Web Services Security
 
Serverless architecture with AWS Lambda (June 2016)
Serverless architecture with AWS Lambda (June 2016)Serverless architecture with AWS Lambda (June 2016)
Serverless architecture with AWS Lambda (June 2016)
 
The fundamentals of AWS Cloud Security 🛠⛅️🚀
The fundamentals of AWS Cloud Security 🛠⛅️🚀The fundamentals of AWS Cloud Security 🛠⛅️🚀
The fundamentals of AWS Cloud Security 🛠⛅️🚀
 
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy NguyenGrokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
 
Payments On Rails
Payments On RailsPayments On Rails
Payments On Rails
 
Best Practices for IoT Security in the Cloud
Best Practices for IoT Security in the CloudBest Practices for IoT Security in the Cloud
Best Practices for IoT Security in the Cloud
 
Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017
Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017
Microservices Without Servers - James Thomas - Codemotion Amsterdam 2017
 
CQRS and Event Sourcing: A DevOps perspective
CQRS and Event Sourcing: A DevOps perspectiveCQRS and Event Sourcing: A DevOps perspective
CQRS and Event Sourcing: A DevOps perspective
 
Do more with less code in serverless
Do more with less code in serverlessDo more with less code in serverless
Do more with less code in serverless
 
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web ServicesXXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
 
Ws rest
Ws restWs rest
Ws rest
 
Introduction to Marionette Collective
Introduction to Marionette CollectiveIntroduction to Marionette Collective
Introduction to Marionette Collective
 
ececloud Architecture for GWU's ECE 289 Class
ececloud Architecture for GWU's ECE 289 Classececloud Architecture for GWU's ECE 289 Class
ececloud Architecture for GWU's ECE 289 Class
 
ececloud Architecture for GWU\'s ECE 289 Class
ececloud Architecture for GWU\'s ECE 289 Classececloud Architecture for GWU\'s ECE 289 Class
ececloud Architecture for GWU\'s ECE 289 Class
 
SDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - JapanSDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - Japan
 

More from UA Mobile

Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
UA Mobile
 
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
UA Mobile
 
Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019
UA Mobile
 
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
UA Mobile
 
Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019
UA Mobile
 
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
UA Mobile
 
Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019
UA Mobile
 
Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019
UA Mobile
 
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
UA Mobile
 
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
UA Mobile
 
До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019
UA Mobile
 
Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019
UA Mobile
 
Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019
UA Mobile
 
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
UA Mobile
 
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
UA Mobile
 
Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019
UA Mobile
 
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
UA Mobile
 
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
UA Mobile
 
Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019
UA Mobile
 
Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.
UA Mobile
 

More from UA Mobile (20)

Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
 
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
 
Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019
 
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
 
Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019
 
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
 
Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019
 
Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019
 
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
 
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
 
До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019
 
Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019
 
Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019
 
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
 
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
 
Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019
 
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
 
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
 
Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019
 
Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.
 

Serverless Swift with Apache OpenWhisk. UA Mobile 2017.