SlideShare a Scribd company logo
1 of 72
Download to read offline
ㅍ
Extended
Seoul
Extended
Seoul
Statically typed programming language
for the JVM, Android and the browser
100% interoperable with Java™
ㅍ
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
Extended
Seoul
ㅍ
Extended
Seoul
MyActivity.java
btnDoIt = (Button) findViewById(R.id.btn_do_it);
MyActivity.java
btnDoIt = (Button) findViewById(R.id.btn_do_it);
btnDoIt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO
}
});
MyActivity.java
btnDoIt = (Button) findViewById(R.id.btn_do_it);
btnDoIt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO
}
});
WithRxJava.java
Observable.fromArray(1, 2, 3, 4, 5)
.map(new Function<Integer, String>() {
@Override
public String apply(Integer param) {
return "A" + param;
}
});
WithRxJava.java
Observable.fromArray(1, 2, 3, 4, 5)
.map(new Function<Integer, String>() {
@Override
public String apply(Integer param) {
return "A" + param;
}
});
WithRxJava.java
Observable.fromArray("1", "2", "3", "4", "5")
.map(new Function<Integer, String>() {
@Override
public String apply(Integer param) {
return "A" + param;
}
});
WithRxJava.java
Observable.fromArray("1", "2", "3", "4", "5")
.map(new Function<Integer, String>() {
@Override
public String apply(Integer param) {
return "A" + param;
}
});
WithRxJava.java
Observable.fromArray("1", "2", "3", "4", "5")
.map(new Function<String, String>() {
@Override
public String apply(String param) {
return "A" + param;
}
});
User.java
String getAddress() {
...
}
User user = getCurrentUser();
user.getAddress().toUpperCase();
Extended
Seoul
I call it my billion-dollar mistake. This has
led to innumerable errors … probably
caused a billion dollars of pain and damage
in the last forty years.
Extended
Seoul
- Tony Hoare
User.java
String getAddress() {
return this.address;
}
User user = getCurrentUser();
user.getAddress().toUpperCase();
User.java
String getAddress() {
return null == this.address ? "" : this.address;
}
User user = getCurrentUser();
user.getAddress().toUpperCase();
User.java
@Nullable
String getAddress() {
return this.address;
}
User user = getCurrentUser();
user.getAddress().toUpperCase();
User.java
@NonNull
String getAddress() {
return null == this.address ? "" : this.address;
}
User user = getCurrentUser();
user.getAddress().toUpperCase();
ㅍ
Extended
Seoul
MyActivity.java
Button btnFoo;
TextView tvBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnFoo = (Button) findViewById(R.id.btn_foo);
tvBar = (TextView) findViewById(R.id.tv_bar);
...
}
MyActivity.java
Button btnFoo;
TextView tvBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnFoo = (Button) findViewById(R.id.btn_foo);
tvBar = (TextView) findViewById(R.id.tv_bar);
...
}
Intents.java
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("id", 10L);
intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
Extended
Seoul
Extended
Seoul
MyActivity.java
btnDoIt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO
}
});
MyActivity.kt
btnDoIt.setOnClickListener(object : View.OnClickListener() {
override fun onClick(v: View) {
// TODO
}
})
MyActivity.kt
btnDoIt.setOnClickListener({ v: View ->
// TODO
})
MyActivity.kt
btnDoIt.setOnClickListener({ v ->
// TODO
})
MyActivity.kt
btnDoIt.setOnClickListener({
it.context // View.context
})
MyActivity.kt
btnDoIt.setOnClickListener {
it.context // View.context
}
StandardLibrary.kt
val people : List<String> = ..
people.filter { it.startsWith('S') }
.filter { it.length < 10 }
.onEach { it.toUpperCase() }
.forEach { println(it) }
StandardLibrary.kt
val people : List<String> = ..
people.filter { it.startsWith('S') }
.filter { it.length < 10 }
.onEach { String::toUpperCase() }
.forEach { ::println }
StandardLibrary.kt
val people : List<String> = ..


people.stream()
.filter { it.startsWith('S') }
.filter { it.length < 10 }
.map(String::toUpperCase)
.forEach(::println)
User.java
@Nullable
String getAddress() {
return this.address;
}
User user = getCurrentUser();
user.getAddress().toUpperCase();
User.java
// class User
var address: String? = null
////
val user : User = getCurrentUser()
user.address?.toUpperCase()
User.java
// class User
var address: String? = null
////
val user : User = getCurrentUser()
user.address?.toUpperCase()
User.java
// class User
var address: String? = null
////
val user : User = getCurrentUser()
user.address?.toUpperCase()
User.java
// class User
var address: String? = null
////
val user = getCurrentUser()
user.address?.toUpperCase()
User.java
@NonNull
String getAddress() {
return null == this.address ? "" : this.address;
}
User user = getCurrentUser();
user.getAddress().toUpperCase();
User.java
// class User
var address: String? = null
get() = field ?: ""
////
val user = getCurrentUser()
user.address.toUpperCase()
User.java
// class User
var address: String? = null
get() = field ?: ""
////
val user = getCurrentUser()
user.address.toUpperCase()
User.java
// class User
var address: String? = null
get() = field ?: ""
////
val user = getCurrentUser()
user.address.toUpperCase()
MyActivity.java
Button btnFoo;
TextView tvBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnFoo = (Button) findViewById(R.id.btn_foo);
tvBar = (TextView) findViewById(R.id.tv_bar);
...
}
MyActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_foo // (Button) findViewById(R.id.btn_foo)
tv_bar // (TextView) findViewById(R.id.tv_bar)
...
}
Intents.java
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("id", 10L);
intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
Intents.kt
val intent = Intent(this, OtherActivity::class.java)
intent.putExtra("id", 10L)
intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)
Intents.kt
startActivity(
intentFor<SomeOtherActivity>("id" to 10L).singleTop())
Collections.kt
val mutableList : MutableList<String>
= mutableListOf(“foo", "bar", "baz")
mutableList.add("fizz")
val immutableList : List<String>
= listOf("foo", "bar", "baz")
immutableList.add("fizz")
Collections.kt
val mutableList : MutableList<String>
= mutableListOf(“foo", "bar", "baz")
mutableList.add("fizz")
val immutableList : List<String>
= listOf("foo", "bar", "baz")
immutableList.add("fizz")
Collections.kt
val emptyStringList = listOf<String>()
val cities = listOf("Seoul", "Busan")
val mutableCities = mutableListOf("Seoul, Busan")
val emptyStringSet = setOf<String>()
val cities = setOf("Seoul", "Busan")
val mutableCities = mutableSetOf("Seoul, Busan")
Collections.kt
val pair : Pair<String, String> = Pair("Seoul", "SEO")
Collections.kt
val pair : Pair<String, String> = Pair("Seoul", "SEO")
// with stdlib
val pair : Pair<String, String> = "Seoul" to "SEO"
Person.java
public class Person {
String name;
String address;
Person(String name, String address) {
this.name = name;
this.address = address;
}
public String getAddress() {
return address;
}
..
}
Person.java
public class Person {
String name;
String address;
Person(String name, String address) {
this.name = name;
this.address = address;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (name != null ? !name.equals(person.name) : person.name != null) return false;
return address != null ? address.equals(person.address) : person.address == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (address != null ? address.hashCode() : 0);
return result;
}
}
Person.kt
data class Person(val name: String, val address: String)
MyToast.kt
Toast.makeText(applicationContext,
"Hello, Kotlin!", Toast.LENGTH_SHORT).show()
MyToast.kt
// Define an extension function on Context
fun Context.toast(message: String) {
Toast.makeText(this.applicationContext,
message, Toast.LENGTH_SHORT).show()
}
// available in class Context and its descendants
toast("Hello, Kotlin!")
ㅍ
Extended
Seoul
ㅍ
Extended
Seoul
ㅍ
Extended
Seoul
Extended
Seoul
ㅍ
Extended
Seoul

More Related Content

What's hot

What's hot (20)

여자개발자모임터 6주년 개발 세미나 - Scala Language
여자개발자모임터 6주년 개발 세미나 - Scala Language여자개발자모임터 6주년 개발 세미나 - Scala Language
여자개발자모임터 6주년 개발 세미나 - Scala Language
 
The Ring programming language version 1.5.3 book - Part 42 of 184
The Ring programming language version 1.5.3 book - Part 42 of 184The Ring programming language version 1.5.3 book - Part 42 of 184
The Ring programming language version 1.5.3 book - Part 42 of 184
 
Invertible-syntax 入門
Invertible-syntax 入門Invertible-syntax 入門
Invertible-syntax 入門
 
Swift에서 꼬리재귀 사용기 (Tail Recursion)
Swift에서 꼬리재귀 사용기 (Tail Recursion)Swift에서 꼬리재귀 사용기 (Tail Recursion)
Swift에서 꼬리재귀 사용기 (Tail Recursion)
 
The Ring programming language version 1.10 book - Part 52 of 212
The Ring programming language version 1.10 book - Part 52 of 212The Ring programming language version 1.10 book - Part 52 of 212
The Ring programming language version 1.10 book - Part 52 of 212
 
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italyFrom java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
 
はじめてのGroovy
はじめてのGroovyはじめてのGroovy
はじめてのGroovy
 
ES6, WTF?
ES6, WTF?ES6, WTF?
ES6, WTF?
 
Intro to F#
Intro to F#Intro to F#
Intro to F#
 
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトークGroovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトーク
 
An Elephant of a Different Colour: Hack
An Elephant of a Different Colour: HackAn Elephant of a Different Colour: Hack
An Elephant of a Different Colour: Hack
 
TDC2016SP - Código funcional em Java: superando o hype
TDC2016SP - Código funcional em Java: superando o hypeTDC2016SP - Código funcional em Java: superando o hype
TDC2016SP - Código funcional em Java: superando o hype
 
Python Ireland Nov 2010 Talk: Unit Testing
Python Ireland Nov 2010 Talk: Unit TestingPython Ireland Nov 2010 Talk: Unit Testing
Python Ireland Nov 2010 Talk: Unit Testing
 
The Ring programming language version 1.3 book - Part 14 of 88
The Ring programming language version 1.3 book - Part 14 of 88The Ring programming language version 1.3 book - Part 14 of 88
The Ring programming language version 1.3 book - Part 14 of 88
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
 
Effector: we need to go deeper
Effector: we need to go deeperEffector: we need to go deeper
Effector: we need to go deeper
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
 
PureScript & Pux
PureScript & PuxPureScript & Pux
PureScript & Pux
 
Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8
 
JavaScript Code Formatting With Prettier by Christopher Chedeau
JavaScript Code Formatting With Prettier by Christopher ChedeauJavaScript Code Formatting With Prettier by Christopher Chedeau
JavaScript Code Formatting With Prettier by Christopher Chedeau
 

Similar to Kotlin: Let's Make Android Great Again

mobl presentation @ IHomer
mobl presentation @ IHomermobl presentation @ IHomer
mobl presentation @ IHomer
zefhemel
 
mobl - model-driven engineering lecture
mobl - model-driven engineering lecturemobl - model-driven engineering lecture
mobl - model-driven engineering lecture
zefhemel
 
Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012
Anton Arhipov
 
Android tutorials8 todo_list
Android tutorials8 todo_listAndroid tutorials8 todo_list
Android tutorials8 todo_list
Vlad Kolesnyk
 
Android tutorials8 todo_list
Android tutorials8 todo_listAndroid tutorials8 todo_list
Android tutorials8 todo_list
Vlad Kolesnyk
 
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
EclipseCon2011 Cross-Platform Mobile Development with EclipseEclipseCon2011 Cross-Platform Mobile Development with Eclipse
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
Heiko Behrens
 
JQuery do dia-a-dia Gustavo Dutra
JQuery do dia-a-dia Gustavo DutraJQuery do dia-a-dia Gustavo Dutra
JQuery do dia-a-dia Gustavo Dutra
Tchelinux
 

Similar to Kotlin: Let's Make Android Great Again (20)

Scala on Your Phone
Scala on Your PhoneScala on Your Phone
Scala on Your Phone
 
Miracle of std lib
Miracle of std libMiracle of std lib
Miracle of std lib
 
Kotlin, why?
Kotlin, why?Kotlin, why?
Kotlin, why?
 
Android crashcourse
Android crashcourseAndroid crashcourse
Android crashcourse
 
JDD 2016 - Pawel Byszewski - Kotlin, why?
JDD 2016 - Pawel Byszewski - Kotlin, why?JDD 2016 - Pawel Byszewski - Kotlin, why?
JDD 2016 - Pawel Byszewski - Kotlin, why?
 
mobl presentation @ IHomer
mobl presentation @ IHomermobl presentation @ IHomer
mobl presentation @ IHomer
 
mobl - model-driven engineering lecture
mobl - model-driven engineering lecturemobl - model-driven engineering lecture
mobl - model-driven engineering lecture
 
Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012
 
Android tutorials8 todo_list
Android tutorials8 todo_listAndroid tutorials8 todo_list
Android tutorials8 todo_list
 
Android tutorials8 todo_list
Android tutorials8 todo_listAndroid tutorials8 todo_list
Android tutorials8 todo_list
 
Kotlin Generation
Kotlin GenerationKotlin Generation
Kotlin Generation
 
Roman iovlev. Test UI with JDI - Selenium camp
Roman iovlev. Test UI with JDI - Selenium campRoman iovlev. Test UI with JDI - Selenium camp
Roman iovlev. Test UI with JDI - Selenium camp
 
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
EclipseCon2011 Cross-Platform Mobile Development with EclipseEclipseCon2011 Cross-Platform Mobile Development with Eclipse
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
 
Less ismorewithcoffeescript webdirectionsfeb2012
Less ismorewithcoffeescript webdirectionsfeb2012Less ismorewithcoffeescript webdirectionsfeb2012
Less ismorewithcoffeescript webdirectionsfeb2012
 
jQuery - Introdução
jQuery - IntroduçãojQuery - Introdução
jQuery - Introdução
 
JQuery do dia-a-dia Gustavo Dutra
JQuery do dia-a-dia Gustavo DutraJQuery do dia-a-dia Gustavo Dutra
JQuery do dia-a-dia Gustavo Dutra
 
jQuery Essentials
jQuery EssentialsjQuery Essentials
jQuery Essentials
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
Future of UI Automation testing and JDI
Future of UI Automation testing and JDIFuture of UI Automation testing and JDI
Future of UI Automation testing and JDI
 
Generics and Inference
Generics and InferenceGenerics and Inference
Generics and Inference
 

More from Taeho Kim (8)

RxJava in Action
RxJava in ActionRxJava in Action
RxJava in Action
 
Android Studio 2.2 - What's new in Android development tools
Android Studio 2.2 - What's new in Android development toolsAndroid Studio 2.2 - What's new in Android development tools
Android Studio 2.2 - What's new in Android development tools
 
Multi Window in Android N
Multi Window in Android NMulti Window in Android N
Multi Window in Android N
 
Material Design with Support Design Library
Material Design with Support Design LibraryMaterial Design with Support Design Library
Material Design with Support Design Library
 
Support Design Library
Support Design LibrarySupport Design Library
Support Design Library
 
Material design for everyone
Material design for everyoneMaterial design for everyone
Material design for everyone
 
Notifications for Android L & wear
Notifications for Android L & wearNotifications for Android L & wear
Notifications for Android L & wear
 
[Hello World 천안아산] 안드로이드 입문
[Hello World 천안아산] 안드로이드 입문[Hello World 천안아산] 안드로이드 입문
[Hello World 천안아산] 안드로이드 입문
 

Recently uploaded

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 

Recently uploaded (20)

Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
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
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
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
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
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 🔝✔️✔️
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 

Kotlin: Let's Make Android Great Again