SlideShare a Scribd company logo
Protocol-Oriented
Programming in Swift
Oleksandr Stepanov
Oleksandr Stepanov
iOS developer @ AKQA Inc.
We are hiring!
Agenda
Agenda
• Protocols in Swift vs Objective-C
Agenda
• Protocols in Swift vs Objective-C
• Protocol-oriented programming
‣ What is that?
‣ Why to use it?
‣ How to use it?
Agenda
• Protocols in Swift vs Objective-C
• Protocol-oriented programming
‣ What is that?
‣ Why to use it?
‣ How to use it?
• Examples
Protocols
protocol someProtocol {
}
protocol someProtocol {
var someInt: Int { get }
var someString: String? { get set }
}
protocol someProtocol {
var someInt: Int { get }
var someString: String? { get set }
func doSomething(inputA: Int) -> String?
}
protocol someProtocol {
associatedtype TypeA;
var someInt: Int { get }
var someString: String? { get set }
func doSomething(inputA: Int) -> String?
func doSomethingWithTypeA(typeA: TypeA)
}
protocol someProtocol {
associatedtype TypeA;
var someInt: Int { get }
var someString: String? { get set }
func doSomething(inputA: Int) -> String?
func doSomethingWithTypeA(typeA: TypeA)
}
protocol successorProtocol: someProtocol {
}
…
extension somethingProtocol {
func doSomethingDifferent() {
print("Oh man, that is different")
}
func doSomethingWithTypeA(typeA: TypeA) {
print("typeA: (typeA)")
}
}
Protocols
Swift Objective-C
Protocol Inheritance ✅ ❌
Protocol extensions ✅ ❌
Default implementation ✅ ❌
Associated Types (aka Generics) ✅ ❌
Available in structures and
enums as well ✅ ❌
Swift Objective-C
Protocol Inheritance ✅ ❌
Protocol extensions ✅ ❌
Default implementation ✅ ❌
Associated Types (aka Generics) ✅ ❌
Available in structures and
enums as well ✅ ❌
Optional methods ❌ ✅
Protocols
import Foundation
@objc protocol optionalProtocol {
@objc optional func someOptionalMethod()
@objc optional var someOptionalInt: Int { get
set }
}
Swift Objective-C
Protocol Inheritance ✅ ❌
Protocol extensions ✅ ❌
Default implementation ✅ ❌
Associated Types (aka Generics) ✅ ❌
Available in structures and
enums as well ✅ ❌
Optional methods ✅
(@objc)
✅
Protocols
Protocol-oriented
programming
🤔
Protocol-oriented
programming
What is this?
🤔
WWDC 2015 - Session 408
Protocol-Oriented Programming in Swift
“Swift is a protocol-oriented programming language.”
Dave Abrahams
WWDC 2015 - Session 408
Protocol-Oriented Programming in Swift
“Swift is a protocol-oriented programming language.”
Dave Abrahams
https://developer.apple.com/videos/play/wwdc2015/408/
https://developer.apple.com/videos/play/wwdc2016/419/
Cars project 🚗
Implementation
Inheritance approach
class Car {
let wheels = 4
func make() {
print("🚗 is built")
}
}
class Car {
let wheels = 4
func make() {
print("🚗 is built")
}
}
class CarFactory {
var model: Car?
func makeACar() {
model?.make()
}
}
…
class Sedan: Car {}
let sedan = Sedan()
let carFactory = CarFactory()
carFactory.model = sedan
carFactory.makeACar() // prints “🚗 is built”
Let’s make 🏎
…
class Bolide: Car {
override func make() {
print("🏎 is built")
}
}
let bolide = Bolide()
let bolideFactory = CarFactory()
bolideFactory.model = bolide
bolideFactory.makeACar() // prints "🏎 is built"
Page 1 of 1
Let’s make 🏍
Implementation
Inheritance problems
class CarFactory {
var model: Car?
func makeACar() {
model?.make()
}
}
Tight coupling
Hard to maintain
Inheritance hierarchies
Hard to extend
class Car {
let wheels = 4
func make() {
print("🚗 is built")
}
}
class Sedan: Car {}
Implementation is a
white-box
… even using proper encapsulation
class Car {
let wheels = 4
func make() {
print("🚗 is built")
}
}
class Sedan: Car {}
Protocol-oriented
programming approach
Protocol-Oriented Programming in Swift
✦ Separation of public interface
from the implementation
✦ Separation of public interface
from the implementation
✦ Software defined in components
that talk to each other using
interfaces
✦ Separation of public interface
from the implementation
✦ Software defined in components
that talk to each other using
interfaces
✦ May be used in conjunction with
classes, structs and enums.
protocol Vehicle {
func make()
}
protocol WheelsVehicle {
var wheels: Int { get }
}
…
protocol FourWheelsVehicle: WheelsVehicle {}
extension FourWheelsVehicle {
var wheels: Int {
get {
return 4
}
}
}
…
struct Car: Vehicle, FourWheelsVehicle {
func make() {
print("🚗 is built") }
}
}
struct Bolide: Vehicle, FourWheelsVehicle {
func make() {
print("🏎 is built")
}
}
…
struct Car: Vehicle, FourWheelsVehicle {
func make() {
print("🚗 is built") }
}
}
struct Bolide: Vehicle, FourWheelsVehicle {
func make() {
print("🏎 is built")
}
}
…
struct Car: Vehicle, FourWheelsVehicle {
func make() {
print("🚗 is built") }
}
}
struct Bolide: Vehicle, FourWheelsVehicle {
func make() {
print("🏎 is built")
}
}
…
protocol TwoWheelsVehicle: WheelsVehicle {}
extension TwoWheelsVehicle {
var wheels: Int { get { return 2 } }
}
struct MotorBike: Vehicle, TwoWheelsVehicle {
func make() {
print("🏍 is built") }
}
}
…
protocol VehicleFactory {
var model: Vehicle? { get set }
func makeACar()
}
extension VehicleFactory {
func makeACar() {
model?.make()
}
}
…
extension VehicleFactory {
func repairACar() {
// ...
}
}
…
class CarFactory: VehicleFactory {
var model: Vehicle?
}
let bolide = Bolide()
let carFactory = CarFactory()
carFactory.model = bolide
carFactory.makeACar() // prints "🏎 is built"
Protocol-Oriented Programming in Swift
✦ Reusability
✦ Reusability
✦ Extensibility
✦ Reusability
✦ Extensibility
✦ Black-boxed
✦ Reusability
✦ Extensibility
✦ Black-boxed
MORE MAINTAINABLE
Patterns
where it can be useful
Protocol-Oriented Programming in Swift
✦ Data types
• Abstraction
• Mock objects for test
✦ Data types
• Abstraction
• Mock objects for test
✦ Dependency injection
✦ Data types
• Abstraction
• Mock objects for test
✦ Dependency injection
✦ Detached architecture
• MVVM
✦ Data types
• Abstraction
• Mock objects for test
✦ Dependency injection
✦ Detached architecture
• MVVM
✦ Testing
• Unit
• A/B testing interfaces
Real life example
Real life example
UIKit
Table view cell
import UIKit
struct Event {
}
class EventTableViewCell: UITableViewCell {
}
import UIKit
struct Event {
let icon: UIImage?
let title: String
let date: Date
}
class EventTableViewCell: UITableViewCell {
@IBOutlet var iconView: UIImageView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var dateLabel: UILabel!
}
import UIKit
struct Event {
let icon: UIImage?
let title: String
let date: Date
}
class EventTableViewCell: UITableViewCell {
@IBOutlet var iconView: UIImageView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var dateLabel: UILabel!
func set(event: Event) {
iconView.image = event.icon
titleLabel.text = event.title
dateLabel.text = event.date.description
}
}
Collection view cell
…
class EventTableViewCell: UITableViewCell {
…
func set(event: Event) {
iconView.image = event.icon
titleLabel.text = event.title
dateLabel.text = event.date.description
}
}
class EventCollectionViewCell: UICollectionViewCell {
…
func set(event: Event) {
iconView.image = event.icon
titleLabel.text = event.title
dateLabel.text = event.date.description
}
}
Header view
…
class EventTableViewCell: UITableViewCell {
…
func set(event: Event) {
iconView.image = event.icon
titleLabel.text = event.title
dateLabel.text = event.date.description
}
}
class EventCollectionViewCell: UICollectionViewCell {
…
func set(event: Event) {
iconView.image = event.icon
titleLabel.text = event.title
dateLabel.text = event.date.description
}
}
class EventHeaderView: UIView {
…
func set(event: Event) {
iconView.image = event.icon
titleLabel.text = event.title
dateLabel.text = event.date.description
} }
Maintenance
Maintenance
😢
Protocol-Oriented Programming in Swift
POP approach
protocol EventViewProtocol {
var iconView: UIImageView! { get set }
var titleLabel: UILabel! { get set }
var dateLabel: UILabel! { get set }
func set(event: Event)
}
protocol EventViewProtocol {
var iconView: UIImageView! { get set }
var titleLabel: UILabel! { get set }
var dateLabel: UILabel! { get set }
func set(event: Event)
}
extension EventViewProtocol {
func set(event: Event) {
iconView.image = event.icon
titleLabel.text = event.title
dateLabel.text = event.date.description
}
}
…
class EventTableViewCell: UITableViewCell {
@IBOutlet var iconView: UIImageView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var dateLabel: UILabel!
}
extension EventTableViewCell: EventViewProtocol
{}
Test it!
🔨
…
import XCTest
class TestView {
var iconView: UIImageView! = UIImageView()
var titleLabel: UILabel! = UILabel()
var dateLabel: UILabel! = UILabel()
}
extension TestView: EventViewProtocol {}
…
let eventDate = Date.init()
let event = Event.init(icon: UIImage.init(named: “testEventIcon”)
title: "event title",
date: eventDate)
let testView = TestView()
testView.set(event: event)
…
let eventDate = Date.init()
let event = Event.init(icon: UIImage.init(named: “testEventIcon”)
title: "event title",
date: eventDate)
let testView = TestView()
testView.set(event: event)
XCTAssertEqual ( testView.iconView.image,
UIImage.init(named:”testEventIcon”) )
XCTAssertEqual ( testView.titleLabel.text,
"event title” )
XCTAssertEqual ( testView.dateLabel.text,
eventDate.description )
Protocol-Oriented Programming in Swift
✦ No code duplication -> better
maintainable
✦ No code duplication -> better
maintainable
✦ Better testable
✦ No code duplication -> better
maintainable
✦ Better testable
PROFIT!
One more sample
POP + Enums
One more sample
POP + Enums
NSNotification
Protocol-Oriented Programming in Swift
-Literal string names
-Literal string names
-Potential for mismatched strings
-Literal string names
-Potential for mismatched strings
-There must be a better approach
Protocol-Oriented Programming in Swift
-Slightly better …
-Slightly better …
-… but can we do even better?
}
}
}
How to enhance it with POP ?
}
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
❌
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
✦ No mismatched strings
✦ No mismatched strings
✦Simpler to read and maintain
✦ No mismatched strings
✦Simpler to read and maintain
✦ Notification handlers may be
classes, structs and enums
✦ No mismatched strings
✦Simpler to read and maintain
✦ Notification handlers may be
classes, structs and enums
✦ … the same for notification type
Protocol-Oriented Programming in Swift
reusability
reusability
extensibility
understandability
reusability
extensibility
maintainability
understandability
reusability
extensibility
maintainability
understandability
testability
reusability
extensibility
POP
maintainability
understandability
testability
reusability
extensibility
Protocol-Oriented Programming in Swift
it’s not a
it’s not a
treat it carefully
Thank you!
Q&A

More Related Content

What's hot (20)

Operator overloading
Operator overloadingOperator overloading
Operator overloading
ramya marichamy
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
CocoaHeads France
 
Lec 26.27-operator overloading
Lec 26.27-operator overloadingLec 26.27-operator overloading
Lec 26.27-operator overloading
Princess Sam
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
abhay singh
 
Operator overloading and type conversions
Operator overloading and type conversionsOperator overloading and type conversions
Operator overloading and type conversions
Amogh Kalyanshetti
 
Operator overloading and type conversion in cpp
Operator overloading and type conversion in cppOperator overloading and type conversion in cpp
Operator overloading and type conversion in cpp
rajshreemuthiah
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
Ramish Suleman
 
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
Hadziq Fabroyir
 
Bca 2nd sem u-4 operator overloading
Bca 2nd sem u-4 operator overloadingBca 2nd sem u-4 operator overloading
Bca 2nd sem u-4 operator overloading
Rai University
 
operator overloading
operator overloadingoperator overloading
operator overloading
Sorath Peetamber
 
Intro to Javascript
Intro to JavascriptIntro to Javascript
Intro to Javascript
Anjan Banda
 
C++ Functions
C++ FunctionsC++ Functions
C++ Functions
Jari Abbas
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
Kumar
 
operator overloading & type conversion in cpp over view || c++
operator overloading & type conversion in cpp over view || c++operator overloading & type conversion in cpp over view || c++
operator overloading & type conversion in cpp over view || c++
gourav kottawar
 
OPERATOR OVERLOADING IN C++
OPERATOR OVERLOADING IN C++OPERATOR OVERLOADING IN C++
OPERATOR OVERLOADING IN C++
Aabha Tiwari
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
Garima Singh Makhija
 
Unary operator overloading
Unary operator overloadingUnary operator overloading
Unary operator overloading
Md. Ashraful Islam
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
Mats Bryntse
 
Function overloading and overriding
Function overloading and overridingFunction overloading and overriding
Function overloading and overriding
Rajab Ali
 
C++ overloading
C++ overloadingC++ overloading
C++ overloading
sanya6900
 
Lec 26.27-operator overloading
Lec 26.27-operator overloadingLec 26.27-operator overloading
Lec 26.27-operator overloading
Princess Sam
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
abhay singh
 
Operator overloading and type conversions
Operator overloading and type conversionsOperator overloading and type conversions
Operator overloading and type conversions
Amogh Kalyanshetti
 
Operator overloading and type conversion in cpp
Operator overloading and type conversion in cppOperator overloading and type conversion in cpp
Operator overloading and type conversion in cpp
rajshreemuthiah
 
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading#OOP_D_ITS - 5th - C++ Oop Operator Overloading
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
Hadziq Fabroyir
 
Bca 2nd sem u-4 operator overloading
Bca 2nd sem u-4 operator overloadingBca 2nd sem u-4 operator overloading
Bca 2nd sem u-4 operator overloading
Rai University
 
Intro to Javascript
Intro to JavascriptIntro to Javascript
Intro to Javascript
Anjan Banda
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
Kumar
 
operator overloading & type conversion in cpp over view || c++
operator overloading & type conversion in cpp over view || c++operator overloading & type conversion in cpp over view || c++
operator overloading & type conversion in cpp over view || c++
gourav kottawar
 
OPERATOR OVERLOADING IN C++
OPERATOR OVERLOADING IN C++OPERATOR OVERLOADING IN C++
OPERATOR OVERLOADING IN C++
Aabha Tiwari
 
Function overloading and overriding
Function overloading and overridingFunction overloading and overriding
Function overloading and overriding
Rajab Ali
 
C++ overloading
C++ overloadingC++ overloading
C++ overloading
sanya6900
 

Similar to Protocol-Oriented Programming in Swift (20)

A First Date With Scala
A First Date With ScalaA First Date With Scala
A First Date With Scala
Franco Lombardo
 
Anti Object-Oriented Design Patterns
Anti Object-Oriented Design PatternsAnti Object-Oriented Design Patterns
Anti Object-Oriented Design Patterns
Alvaro Polo Valdenebro
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
Gil Fink
 
Diseño y Desarrollo de APIs
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIs
Raúl Neis
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
Anton Novikau
 
Minimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team ProductivityMinimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team Productivity
Derek Lee
 
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
Wim Selles
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
Ignacio Martín
 
Scala Future & Promises
Scala Future & PromisesScala Future & Promises
Scala Future & Promises
Knoldus Inc.
 
Maintaining a dependency graph with weaver
Maintaining a dependency graph with weaverMaintaining a dependency graph with weaver
Maintaining a dependency graph with weaver
Scribd
 
ParisJS #10 : RequireJS
ParisJS #10 : RequireJSParisJS #10 : RequireJS
ParisJS #10 : RequireJS
Julien Cabanès
 
Python, WebRTC and You (v2)
Python, WebRTC and You (v2)Python, WebRTC and You (v2)
Python, WebRTC and You (v2)
Saúl Ibarra Corretgé
 
Taking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the ExtremeTaking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the Extreme
yinonavraham
 
JavaScript Core
JavaScript CoreJavaScript Core
JavaScript Core
François Sarradin
 
Jan 2017 - a web of applications (angular 2)
Jan 2017 - a web of applications (angular 2)Jan 2017 - a web of applications (angular 2)
Jan 2017 - a web of applications (angular 2)
Kasper Reijnders
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
Loiane Groner
 
Nativescript angular
Nativescript angularNativescript angular
Nativescript angular
Christoffer Noring
 
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
How Bitbucket Pipelines Loads Connect UI Assets Super-fastHow Bitbucket Pipelines Loads Connect UI Assets Super-fast
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
Atlassian
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
Gil Fink
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
Gil Fink
 
Diseño y Desarrollo de APIs
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIs
Raúl Neis
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
Anton Novikau
 
Minimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team ProductivityMinimizing Decision Fatigue to Improve Team Productivity
Minimizing Decision Fatigue to Improve Team Productivity
Derek Lee
 
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018How React Native, Appium and me made each other shine @Frontmania 16-11-2018
How React Native, Appium and me made each other shine @Frontmania 16-11-2018
Wim Selles
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
Ignacio Martín
 
Scala Future & Promises
Scala Future & PromisesScala Future & Promises
Scala Future & Promises
Knoldus Inc.
 
Maintaining a dependency graph with weaver
Maintaining a dependency graph with weaverMaintaining a dependency graph with weaver
Maintaining a dependency graph with weaver
Scribd
 
Taking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the ExtremeTaking Jenkins Pipeline to the Extreme
Taking Jenkins Pipeline to the Extreme
yinonavraham
 
Jan 2017 - a web of applications (angular 2)
Jan 2017 - a web of applications (angular 2)Jan 2017 - a web of applications (angular 2)
Jan 2017 - a web of applications (angular 2)
Kasper Reijnders
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
Loiane Groner
 
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
How Bitbucket Pipelines Loads Connect UI Assets Super-fastHow Bitbucket Pipelines Loads Connect UI Assets Super-fast
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
Atlassian
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
Gil Fink
 
Ad

Recently uploaded (20)

Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage OverlookCode and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
IMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptx
IMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptxIMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptx
IMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptx
usmanch7829
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FMEIntegrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlowDevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
Aarno Aukia
 
Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3
Gaurav Sharma
 
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptxMicrosoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
soulamaabdoulaye128
 
What is data visualization and how data visualization tool can help.pdf
What is data visualization and how data visualization tool can help.pdfWhat is data visualization and how data visualization tool can help.pdf
What is data visualization and how data visualization tool can help.pdf
Varsha Nayak
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
Generative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its ApplicationsGenerative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its Applications
SandeepKS52
 
Transmission Media. (Computer Networks)
Transmission Media.  (Computer Networks)Transmission Media.  (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Plooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your wayPlooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your way
Plooma
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration KeySmadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutionsZoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptxwAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Making significant Software Architecture decisions
Making significant Software Architecture decisionsMaking significant Software Architecture decisions
Making significant Software Architecture decisions
Bert Jan Schrijver
 
SAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.pptSAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.ppt
MuhammadShaheryar36
 
Software Testing & it’s types (DevOps)
Software  Testing & it’s  types (DevOps)Software  Testing & it’s  types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Artificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across IndustriesArtificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across Industries
SandeepKS52
 
Reimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AIReimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AI
Maxim Salnikov
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdfdp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage OverlookCode and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
IMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptx
IMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptxIMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptx
IMAGE CLASSIFICATION USING CONVOLUTIONAL NEURAL NETWORK.P.pptx
usmanch7829
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FMEIntegrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlowDevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
Aarno Aukia
 
Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3
Gaurav Sharma
 
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptxMicrosoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
soulamaabdoulaye128
 
What is data visualization and how data visualization tool can help.pdf
What is data visualization and how data visualization tool can help.pdfWhat is data visualization and how data visualization tool can help.pdf
What is data visualization and how data visualization tool can help.pdf
Varsha Nayak
 
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Smart Financial Solutions: Money Lender Software, Daily Pigmy & Personal Loan...
Intelli grow
 
Generative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its ApplicationsGenerative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its Applications
SandeepKS52
 
Transmission Media. (Computer Networks)
Transmission Media.  (Computer Networks)Transmission Media.  (Computer Networks)
Transmission Media. (Computer Networks)
S Pranav (Deepu)
 
Plooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your wayPlooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your way
Plooma
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration KeySmadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Zoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutionsZoneranker’s Digital marketing solutions
Zoneranker’s Digital marketing solutions
reenashriee
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptxwAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Making significant Software Architecture decisions
Making significant Software Architecture decisionsMaking significant Software Architecture decisions
Making significant Software Architecture decisions
Bert Jan Schrijver
 
SAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.pptSAP PM Module Level-IV Training Complete.ppt
SAP PM Module Level-IV Training Complete.ppt
MuhammadShaheryar36
 
Software Testing & it’s types (DevOps)
Software  Testing & it’s  types (DevOps)Software  Testing & it’s  types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Artificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across IndustriesArtificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across Industries
SandeepKS52
 
Reimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AIReimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AI
Maxim Salnikov
 
dp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdfdp-700 exam questions sample docume .pdf
dp-700 exam questions sample docume .pdf
pravkumarbiz
 
Ad

Protocol-Oriented Programming in Swift