SlideShare a Scribd company logo
1 of 54
Download to read offline
超級直覺的日期
API-JSR310
彥彬
Colorgy
Outline
1. 入坑
2. 入門
3. 應用
入坑
Begin of this Month?
private Date beginOfThisMonth(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
Other Date use cases
Boolean isSameday(Date date1, Date date2)
Date firstDayOfWeek()
Date getBeginOfDay(int year, int month, int day)
int dayDiff(Date date1, Date date2)
Other Date use cases
Boolean isSameday(Date date1, Date date2)
Date firstDayOfWeek()
Date getBeginOfDay(int year, int month, int day)
int dayDiff(Date date1, Date date2)
int dayDiff(Calendar date1, Calendar date2) ?????
囉唆!難用!
JSR310
● A Date and Time api in Java8
● 由JodaTime 作者協助設計
But…..
替代品 - ThreeTen
● JSR310 based library on OpenJDK
● 支援到 Java6
● No dependencies!!
Gradle 3.0 setting
dependencies {
implementation "com.jakewharton.threetenabp:threetenabp:1.0.5"
testImplementation "org.threeten:threetenbp:1.3.3"
}
android.unitTestVariants.all { variant ->
variant.getCompileConfiguration().exclude group:
'com.jakewharton.threetenabp', module: 'threetenabp'
variant.getRuntimeConfiguration().exclude group:
'com.jakewharton.threetenabp', module: 'threetenabp'
}
入門
只要跟你平常講話一樣就好了
只要跟你平常講話一樣就好了
今天是你生日嗎?
幾點下班?
再給我兩分鐘
你是不是又遲到了?
ThreeTen 特性
1. Immutable
2. Avoid null
3. Easy to use, easy to test
今天是你生日嗎?
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDate myBirthDay = LocalDate.of(1988, 4, 23);
boolean todayIsMyBirthday = today.equals(myBirthDay);
今天是你生日嗎?
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDate myBirthDay = LocalDate.of(1988, 4, 23);
boolean todayIsMyBirthday = today.equals(myBirthDay);
Immutable
幾點下班?
LocalTime offWork = LocalTime.of(18 , 30);
LocalTime goToWork = LocalTime.of(9, 0);
LocalTime lunchTime = LocalTime.of(12, 10, 30);
再給我兩分鐘
Duration jayChouTime = Duration.minutes(2);
Period sprints = Period.ofWeeks(2);
LocalDate retireDay = LocalDate.of(2018, 6, 6);
Period logoutArmy = Period.between(LocalDate.now(), retireDay);
你是不是又遲到了?
LocalTime now = LocalTime.now()
LocalTime meeting = LocalTime.of(12, 0)
boolean isLate = now.compareTo(meeting) < 0
連續上12天班
Period workDay = Period.ofDays(6)
Period holiday = Period.ofDays(1)
Period firstWeek = holiday.plus(workDay)
Period secondWeek = workDay.plus(holiday)
Period continuesWorkDay = workDay.plus(workDay)
格式轉換 - DateTimeFormatter
LocalDate today = LocalDate.now();
String format = today.format(DateTimeFormatter.ISO_OFFSET_DATE);
LocalDate christmas = LocalDate.parse("2017-12-25");
LocalDate christmas2 = LocalDate.parse("2017-12-25",
DateTimeFormatter.ISO_DATE);
格式轉換 - DateTimeFormatter
LocalDate today = LocalDate.now();
String format = today.format(DateTimeFormatter.ISO_OFFSET_DATE);
LocalDate christmas = LocalDate.parse("2017-12-25");
LocalDate christmas2 = LocalDate.parse("2017-12-25",
DateTimeFormatter.ISO_DATE);
No more “yyyyMMdd - hh:mm”
And Others...
● LocalDateTime
● Instant
● TemporalAdjuster
● Month
● DayOfWeek
應用
Convert Between ThreeTen and Date
https://gist.github.com/hungyanbin/5b9fdfd
c62b1c7f1b8f4bfcd7958b69f
Unit test
Test with date-related code
//should climb mountain at Wednesday
boolean shouldClimbMountain()
Test with date-related code
//** this test only passed at Wednesday
void testShouldClimbMountain(){
...
}
Test with date-related code
//** this test only passed at Wednesday
@Ignore
void testShouldClimbMountain(){
...
}
Test with date-related code
//** this test only passed at Wednesday
/*Unit test sucks
void testShouldClimbMountain(){
...
}*/
Solution: Set System Time
private var clock = Clock.systemDefaultZone()
@VisibleForTesting
@JvmStatic
fun setSystemClock(clock: Clock){
this.clock = clock
}
@JvmStatic
fun getNow(): LocalDateTime = LocalDateTime.now(clock)
Integrate with kotlin
ThreeTen Api conventions
1. Plus
2. Minus
3. Range
4. compareTo
5. contains
Plus, Minus
public final class LocalDate extends ChronoLocalDate implements Temporal{
...
Public LocalDate plus(TemporalAmount var1);
Public LocalDate minus(TemporalAmount var1);
...
}
Plus(+), Minus(-)
val today = LocalDate.now()
val tomorrow = today + Period.ofDays(1)
val lastWeek = today - Period.ofWeeks(1)
Kotlin Method Extensions
fun Int.Days(): Period = Period.ofDays(this)
fun Int.Weeks(): Period = Period.ofWeeks(this)
Method Extensions
fun Int.Days(): Period = Period.ofDays(this)
fun Int.Weeks(): Period = Period.ofWeeks(this)
val now = LocalDateTime.now()
val tomorrow = now + 1.Days()
val lastWeek = now - 1.Weeks()
CompareTo (<, >, =, >=, <=)
fun isFutureTime(dateTime: LocalDateTime): Boolean {
val now = LocalDateTime.now()
return dateTime > now
}
CompareTo (<, >, =, >=, <=)
fun isFutureTime(dateTime: LocalDateTime): Boolean {
val now = LocalDateTime.now()
return dateTime > now
}
range(...), contains(in)
fun isInThirtyDays(localDate: LocalDate): Boolean{
val now = LocalDate.now()
val nextThirtyDay = now + 30.Days()
val range = now..nextThirtyDay
return localDate in range
}
range(...), contains(in)
fun isInThirtyDays(localDate: LocalDate): Boolean{
val now = LocalDate.now()
val nextThirtyDay = now + 30.Days()
val range = now..nextThirtyDay
return localDate in range
}
range(...), contains(in)
fun isInThirtyDays(localDate: LocalDate): Boolean{
val now = LocalDate.now()
val nextThirtyDay = now + 30.Days()
val range = now..nextThirtyDay
return localDate in range
}
After this talk...
1. 怎麼設計一個好用的 Api ?
2. Date 跟 Calendar 有著什麼樣的職責 ? 他們的命名跟職責符合
嗎?
3. 想一想你寫的專案裡有沒有類似的情形
Related work
JodaTime has design flaw :
http://www.infoq.com/cn/news/2010/05/jsr-310
Date 跟 Calendar 怎麼了?(CodeData)
http://www.codedata.com.tw/java/jodatime-jsr310-1-date-calendar/
Q & A
Operator overloading and Conventions
class Point(val x: Int, val y: Int){
}
Operator overloading and Conventions
class Point(val x: Int, val y: Int){
}
fun AddPoints(){
val p1 = Point(10, 15)
val p2 = Point(5, -5)
val p3 = p1 + p2
print(p3)
//Point(5, 10)
}
Operator overloading and Conventions
class Point(val x: Int, val y: Int){
operator fun plus(other: Point): Point{
return Point(x + other.x, y + other.y)
}
}
fun AddPoints(){
val p1 = Point(10, 15)
val p2 = Point(5, -5)
val p3 = p1 + p2
print(p3)
//Point(5, 10)
}
Operator overloading and Conventions
class Point(val x: Int, val y: Int){
operator fun plus(other: Point): Point{
return Point(x + other.x, y + other.y)
}
}
fun AddPoints(){
val p1 = Point(10, 15)
val p2 = Point(5, -5)
val p3 = p1 + p2
print(p3)
//Point(5, 10)
}
Operator overloading and Conventions(java)
public class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point plus(Point other){
return new Point(x + other.x, y + other.y);
}
}
Operator overloading and Conventions(java)
public class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point plus(Point other){
return new Point(x + other.x, y + other.y);
}
}

More Related Content

What's hot

Ogdc 2013 lets remake the wheel
Ogdc 2013 lets remake the wheelOgdc 2013 lets remake the wheel
Ogdc 2013 lets remake the wheel
Son Aris
 

What's hot (12)

"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
 
NLP on a Billion Documents: Scalable Machine Learning with Apache Spark
NLP on a Billion Documents: Scalable Machine Learning with Apache SparkNLP on a Billion Documents: Scalable Machine Learning with Apache Spark
NLP on a Billion Documents: Scalable Machine Learning with Apache Spark
 
PA1_template
PA1_templatePA1_template
PA1_template
 
Etalis presentation padl2011
Etalis presentation padl2011Etalis presentation padl2011
Etalis presentation padl2011
 
Ogdc 2013 lets remake the wheel
Ogdc 2013 lets remake the wheelOgdc 2013 lets remake the wheel
Ogdc 2013 lets remake the wheel
 
OGDC2013_Lets remake the wheel_ Mr Nguyen Trung Hung
OGDC2013_Lets remake the wheel_ Mr Nguyen Trung HungOGDC2013_Lets remake the wheel_ Mr Nguyen Trung Hung
OGDC2013_Lets remake the wheel_ Mr Nguyen Trung Hung
 
Gems of GameplayKit. UA Mobile 2017.
Gems of GameplayKit. UA Mobile 2017.Gems of GameplayKit. UA Mobile 2017.
Gems of GameplayKit. UA Mobile 2017.
 
Nicety of java 8 multithreading for advanced, Max Voronoy
Nicety of java 8 multithreading for advanced, Max VoronoyNicety of java 8 multithreading for advanced, Max Voronoy
Nicety of java 8 multithreading for advanced, Max Voronoy
 
Toy Model Overview
Toy Model OverviewToy Model Overview
Toy Model Overview
 
Aaex3 group2
Aaex3 group2Aaex3 group2
Aaex3 group2
 
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
딥러닝 중급 - AlexNet과 VggNet (Basic of DCNN : AlexNet and VggNet)
 
Algorithm analysis basics - Seven Functions/Big-Oh/Omega/Theta
Algorithm analysis basics - Seven Functions/Big-Oh/Omega/ThetaAlgorithm analysis basics - Seven Functions/Big-Oh/Omega/Theta
Algorithm analysis basics - Seven Functions/Big-Oh/Omega/Theta
 

Similar to Jsr310

WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...
WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...
WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...
MaruMengesha
 
Short history of time - Confitura 2013
Short history of time - Confitura 2013Short history of time - Confitura 2013
Short history of time - Confitura 2013
nurkiewicz
 
C++ Please I am posting the fifth time and hoping to get th.pdf
C++ Please I am posting the fifth time and hoping to get th.pdfC++ Please I am posting the fifth time and hoping to get th.pdf
C++ Please I am posting the fifth time and hoping to get th.pdf
jaipur2
 
Modify the Date class that was covered in the lecture which overload.pdf
Modify the Date class that was covered in the lecture which overload.pdfModify the Date class that was covered in the lecture which overload.pdf
Modify the Date class that was covered in the lecture which overload.pdf
saxenaavnish1
 
Please I am posting the fifth time and hoping to get this r.pdf
Please I am posting the fifth time and hoping to get this r.pdfPlease I am posting the fifth time and hoping to get this r.pdf
Please I am posting the fifth time and hoping to get this r.pdf
ankit11134
 
Date.h#ifndef DateFormat#define DateFormat#includetime.h.pdf
Date.h#ifndef DateFormat#define DateFormat#includetime.h.pdfDate.h#ifndef DateFormat#define DateFormat#includetime.h.pdf
Date.h#ifndef DateFormat#define DateFormat#includetime.h.pdf
angelfragranc
 

Similar to Jsr310 (20)

WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...
WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...
WINSEM2020-21_STS3105_SS_VL2020210500169_Reference_Material_I_10-Feb-2021_L4_...
 
JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 
15. DateTime API.ppt
15. DateTime API.ppt15. DateTime API.ppt
15. DateTime API.ppt
 
Dates and Times in Java 7 and Java 8
Dates and Times in Java 7 and Java 8Dates and Times in Java 7 and Java 8
Dates and Times in Java 7 and Java 8
 
Synapse india dotnet development overloading operater part 4
Synapse india dotnet development overloading operater part 4Synapse india dotnet development overloading operater part 4
Synapse india dotnet development overloading operater part 4
 
Test Time Bombs
Test Time BombsTest Time Bombs
Test Time Bombs
 
Java22_1670144363.pptx
Java22_1670144363.pptxJava22_1670144363.pptx
Java22_1670144363.pptx
 
New Java Date/Time API
New Java Date/Time APINew Java Date/Time API
New Java Date/Time API
 
4Developers 2018: Beyond c++17 (Mateusz Pusz)
4Developers 2018: Beyond c++17 (Mateusz Pusz)4Developers 2018: Beyond c++17 (Mateusz Pusz)
4Developers 2018: Beyond c++17 (Mateusz Pusz)
 
Short history of time - Confitura 2013
Short history of time - Confitura 2013Short history of time - Confitura 2013
Short history of time - Confitura 2013
 
C++ Please I am posting the fifth time and hoping to get th.pdf
C++ Please I am posting the fifth time and hoping to get th.pdfC++ Please I am posting the fifth time and hoping to get th.pdf
C++ Please I am posting the fifth time and hoping to get th.pdf
 
From the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by StepFrom the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by Step
 
Modify the Date class that was covered in the lecture which overload.pdf
Modify the Date class that was covered in the lecture which overload.pdfModify the Date class that was covered in the lecture which overload.pdf
Modify the Date class that was covered in the lecture which overload.pdf
 
Please I am posting the fifth time and hoping to get this r.pdf
Please I am posting the fifth time and hoping to get this r.pdfPlease I am posting the fifth time and hoping to get this r.pdf
Please I am posting the fifth time and hoping to get this r.pdf
 
Date.h#ifndef DateFormat#define DateFormat#includetime.h.pdf
Date.h#ifndef DateFormat#define DateFormat#includetime.h.pdfDate.h#ifndef DateFormat#define DateFormat#includetime.h.pdf
Date.h#ifndef DateFormat#define DateFormat#includetime.h.pdf
 
Android dev toolbox
Android dev toolboxAndroid dev toolbox
Android dev toolbox
 
201801 CSE240 Lecture 15
201801 CSE240 Lecture 15201801 CSE240 Lecture 15
201801 CSE240 Lecture 15
 
Functional C++
Functional C++Functional C++
Functional C++
 
Introduction to Date and Time API 4
Introduction to Date and Time API 4Introduction to Date and Time API 4
Introduction to Date and Time API 4
 

More from 彥彬 洪 (12)

Rx java testing patterns
Rx java testing patternsRx java testing patterns
Rx java testing patterns
 
Rxjava2 custom operator
Rxjava2 custom operatorRxjava2 custom operator
Rxjava2 custom operator
 
Koin
KoinKoin
Koin
 
Android material theming
Android material themingAndroid material theming
Android material theming
 
Kotlin in practice
Kotlin in practiceKotlin in practice
Kotlin in practice
 
Why use dependency injection
Why use dependency injectionWhy use dependency injection
Why use dependency injection
 
科特林λ學
科特林λ學科特林λ學
科特林λ學
 
Mvp in practice
Mvp in practiceMvp in practice
Mvp in practice
 
Green dao 3.0
Green dao 3.0Green dao 3.0
Green dao 3.0
 
Android 6.0 permission change
Android 6.0 permission changeAndroid 6.0 permission change
Android 6.0 permission change
 
設定android 測試環境
設定android 測試環境設定android 測試環境
設定android 測試環境
 
Green dao
Green daoGreen dao
Green dao
 

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)

WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
 
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
 
WSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million PeopleWSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million People
 
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of TransformationWSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
 
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...
 
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
 
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - Kanchana
 
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
 
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
 
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
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
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...
 
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
 
WSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AI
 
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
 

Jsr310