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

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Recently uploaded (20)

AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
WSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - Kanchana
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
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
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%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
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
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...
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 

Kotlin: Let's Make Android Great Again