SlideShare a Scribd company logo
1 of 87
Download to read offline
Threading Made Easy!
A Busy Developer’s Guide to Kotlin Coroutines & Flows
Lauren Yew
July 23rd, 2021
The New York Times
Let’s start
with a caveat
Topics
1. What are Coroutines and how do they function
2. Coroutines & Flows in the Real World
3. Pitfalls & Troubleshooting
4. Migrating from RxJava to Coroutines
?
Topics
1. What are Coroutines and how do they function
2. Coroutines & Flows in the Real World
3. Pitfalls & Troubleshooting
4. Migrating from RxJava to Coroutines
?
How Coroutines Work
• Light weight functions that can run on a pool of threads
• Cheap to create (great parallel performance) and cancellable
• Suspend will yield the thread and can start on same / another thread
How Coroutines Work
Poll
Thread 1
How Coroutines Work
zzz
yield
Thread 1
How Coroutines Work
zzz
yield
…. Thread 1
How Coroutines Work
….
Poll
Thread 1
Thread 2
• Can switch Dispatchers to change thread pools
How Coroutines Work
Main Thread
Dispatchers.IO
• Can switch Dispatchers to change thread pools
How Coroutines Work
Main Thread
Dispatchers.IO
….
launch(Dispatcher.IO)
• Can switch Dispatchers to change thread pools
How Coroutines Work
Main Thread
Dispatchers.IO
!
• Can switch Dispatchers to change thread pools
How Coroutines Work
Main Thread
Dispatchers.IO
!
withContext(Dispatcher.Main)
• Can switch Dispatchers to change thread pools
How Coroutines Work
Main
Thread
Dispatchers.IO
Coroutine Basics – How does it work?
Why does the coroutine code look synchronous?
• All code within a suspend function or a CoroutineScope is synchronous
• Asynchronous threading when you launch a new coroutine
Coroutine Basics – How does it work?
Why does the coroutine code look synchronous?
• All code within a suspend function or a CoroutineScope is synchronous
• Asynchronous threading when you launch a new coroutine
Coroutine Basics – Rule #1
All suspend functions MUST be called from another suspend function or a
CoroutineScope launch / async or runBlocking.
Why?
Why do I need CoroutineScope?
CoroutineScope
• Wrapper around CoroutineContext(s) for parent / child coroutines
CoroutineContext
• Helps determine what Dispatcher you’re running on
• Contains the Job of your coroutines
• Handles Exceptions and Cancellations
Topics
1. What are Coroutines and how do they function
2. Coroutines & Flows in the Real World
3. Pitfalls & Troubleshooting
4. Migrating from RxJava to Coroutines
PetAdopt Sample App
Backend Calls
Load search
results from
backend API
Backend Calls
Backend Calls
Backend Calls
Retrofit API
Room
Favorites Feature
Room
Room
Cancel
Cancel
Unnecessary
Search
12345 78759
Cancelling
Flows in the Real World
Flows w/ View Models
Use StateFlow for UI hooks rather than LiveData
Flows w/ View Models
Use viewModelScope.launch
…
Flows w/ Compose
Change StateFlow to Compose State
Make sure StateFlow is lifecycle aware
Flows w/ Compose + Lifecycle
Flows w/ Views + Lifecycle
…
What Flow type works best?
State Flow
• Best for UI binding (Ex: Result<Loading, Error,
Value>)
• Always needs initial value
• Can create StateFlow from Flow
Shared Flow
• Useful for results emitted from multiple places
• No initial value
• StateFlow is a SharedFlow + initial value
• Can control cache / replay
Shared Flow
Poll
every
hour to
refresh
data
78759
78759
Shared Flow
Shared Flow
Callback Flows & suspendCancellable
• Can emit updates from object callbacks within its scope
• Use callbackFlow when you get more than one update
• Use suspendCancellable for a single update
• Example usage: waiting for location, callbacks from listeners (error /
success) when have to include object listeners and override their
callback methods (ex: Third Party API bridge into coroutines / flows)
SuspendCancellableCoroutine
CallbackFlow
Transforming Flows
Transform / Map / Filter
• Flows have similar transform functions like RxJava
• map, filter, etc.
• onEach
• combine (similar to RxJava merge)
Combine
Filter Favorites
Combine
Combine
Combine
Topics
1. What are Coroutines and how do they
function
2. Coroutines & Flows in the Real World
3. Pitfalls & Troubleshooting
4. Migrating from RxJava to Coroutines
Global Scope
• Use for launching top level coroutines that run for the entire application
lifecycle ONLY
• Up to developer to cancel individual Jobs
• Can cause resource / memory leaks
Working with Lifecycle Scope
• Cancellation of coroutines launched in scope is important
Working with Lifecycle Scope
…
Working with Lifecycle Scope
…
Working with Lifecycle Scope
• ViewModelScope automatically handles cancellation
• UI LifecycleScope is more difficult
Working with Lifecycle Scope
• lifecycleScope.launchWhenStarted, <StateFlow>.collectAsState.
Working with Lifecycle Scope
• lifecycleScope.launchWhenStarted, <StateFlow>.collectAsState
• Instead use: Lifecycle.repeatOnLifecycle / Lifecycle.flowWithLifecycle
Blocking Threads
• RULE: All suspend functions should not block the caller thread
• Anytime you have a blocking function, make sure to wrap it in a non-
blocking suspend function
• Use withContext(Dispatcher.IO)
Unit Testing
• Pass CoroutineDispatcher in constructors
Unit Testing
• Pass CoroutineDispatcher in constructors
• Use TestCoroutineDispatcher
• Use runBlockingTest
• Debugging
Topics
1. What are Coroutines and how do they function
2. Coroutines & Flows in the Real World
3. Pitfalls & Troubleshooting
4. Migrating from RxJava to Coroutines
The New York Times w/ RxJava & Coroutines
NYT Android News App
After 3 months of work,
we migrated our core
feature libraries from
RxJava into Kotlin
Coroutines and integrated
them with our News app.
Our app and libraries are
faster and more reliable
because of it.
Performance Comparisons
An example of results from one of our larger core library migrations
This sample should not be taken as a generalization. Performance gains may vary based
on uses of RxJava vs. Kotlin Coroutines & Flow
Here’s some lessons learned from our
migration.
Single à Suspend
RxJava
Single
Coroutines
Suspend
Basic Observable flow, flowOf
Observable updated from callbacks callbackFlow / suspendCancellable
Observable updated from different locations SharedFlow
Observable updated from different locations that
can have an initial state
StateFlow
Observable à Flow
RxJava
Observable
Coroutines
Flow
Backwards Compatibility Workarounds
• https://github.com/Kotlin/kotlinx.coroutines/tree/master/reactive
• Includes Kotlin extension functions and utilities to convert from RxJava
to Coroutines & back
Handling Large Legacy Projects
Handling Large Legacy Projects
Handling Large Legacy Projects
Handling Large Legacy Projects
Improvements from migrations for our teams
• Sped up feature creation
• Improved app & library performance
• Used Room / Lifecycle w/ Coroutines
• Cleaned up app architecture patterns
• Simplified unit testing
Thank You
@YewLauren
Coroutines
Appendix
The New York Times is Hiring!
NYT Android & iOS Apps (News, Cooking, Games)
Come work with us.
https://www.nytco.com/careers/
Resources
• https://open.nytimes.com/4-steps-to-win-advocates-and-implement-a-technical-change-
b2a9b922559b
• https://open.nytimes.com/threading-at-the-speed-of-light-6ae31257307a
• https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-
23080b1f8bda
• https://elizarov.medium.com/coroutine-context-and-scope-c8b255d59055
• https://medium.com/mobile-app-development-publication/kotlin-coroutine-scope-context-and-job-
made-simple-5adf89fcfe94
• https://developer.android.com/kotlin/flow/stateflow-and-sharedflow#sharedflow
• https://elizarov.medium.com/the-reason-to-avoid-globalscope-835337445abc
• https://medium.com/androiddevelopers/coroutines-patterns-for-work-that-shouldnt-be-cancelled-
e26c40f142ad
• https://elizarov.medium.com/blocking-threads-suspending-coroutines-d33e11bf4761
• PetAdopt Sample App: https://github.com/laurenyew/PetAdoptSampleApp/tree/develop/android
Under the Hood
Coroutines are Kotlin Extension Functions Coroutine
Status
Result
Callbacks
Coroutine
Status
Result
Callbacks
Yield
Resume
Cancel
Under the Hood
Coroutines are Kotlin Extension Functions
• State Machine (Status)
Callbacks
Coroutine
Status
Result
Callbacks
Yield
Resume
Cancel
deferred val
failure (exception)
Under the Hood
Coroutines are Kotlin Extension Functions
• State Machine (Status)
• State Machine (Result)
• Callbacks
SuspendCancellableCoroutine
SuspendCancellableCoroutine
CallbackFlow
CallbackFlow
CallbackFlow
LaunchIn / Collect
• launchIn(scope) cleaner
• Does collect behind the scenes
• Use onEach{…}
Result State w/ Jetpack Compose

More Related Content

What's hot

Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022Simplilearn
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha...Philip Schwarz
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Java11 New Features
Java11 New FeaturesJava11 New Features
Java11 New FeaturesHaim Michael
 
Hibernate presentation
Hibernate presentationHibernate presentation
Hibernate presentationManav Prasad
 
Angular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesAngular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesWebStackAcademy
 
In-Depth Model/View with QML
In-Depth Model/View with QMLIn-Depth Model/View with QML
In-Depth Model/View with QMLICS
 
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google MockICS
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Languageintelliyole
 
Qt test framework
Qt test frameworkQt test framework
Qt test frameworkICS
 
Spring cheat sheet
Spring cheat sheetSpring cheat sheet
Spring cheat sheetMark Papis
 
A quick and fast intro to Kotlin
A quick and fast intro to Kotlin A quick and fast intro to Kotlin
A quick and fast intro to Kotlin XPeppers
 

What's hot (20)

Clean code
Clean codeClean code
Clean code
 
Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha...
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
Java 8 Workshop
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
 
Java11 New Features
Java11 New FeaturesJava11 New Features
Java11 New Features
 
Hibernate presentation
Hibernate presentationHibernate presentation
Hibernate presentation
 
NestJS
NestJSNestJS
NestJS
 
Angular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesAngular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP Services
 
In-Depth Model/View with QML
In-Depth Model/View with QMLIn-Depth Model/View with QML
In-Depth Model/View with QML
 
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
[Webinar] Qt Test-Driven Development Using Google Test and Google Mock
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Language
 
Qt test framework
Qt test frameworkQt test framework
Qt test framework
 
Spring cheat sheet
Spring cheat sheetSpring cheat sheet
Spring cheat sheet
 
Workshop 21: React Router
Workshop 21: React RouterWorkshop 21: React Router
Workshop 21: React Router
 
Angular
AngularAngular
Angular
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
A quick and fast intro to Kotlin
A quick and fast intro to Kotlin A quick and fast intro to Kotlin
A quick and fast intro to Kotlin
 

Similar to Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines

Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8Heartin Jacob
 
Streaming to a New Jakarta EE
Streaming to a New Jakarta EEStreaming to a New Jakarta EE
Streaming to a New Jakarta EEJ On The Beach
 
Streaming to a new Jakarta EE
Streaming to a new Jakarta EEStreaming to a new Jakarta EE
Streaming to a new Jakarta EEMarkus Eisele
 
Reactive programming with rx java
Reactive programming with rx javaReactive programming with rx java
Reactive programming with rx javaCongTrung Vnit
 
The Three Horse Race
The Three Horse RaceThe Three Horse Race
The Three Horse RaceGarth Gilmour
 
Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaKasun Indrasiri
 
2021.laravelconf.tw.slides1
2021.laravelconf.tw.slides12021.laravelconf.tw.slides1
2021.laravelconf.tw.slides1LiviaLiaoFontech
 
Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19Markus Eisele
 
Building a document e-signing workflow with Azure Durable Functions
Building a document e-signing workflow with Azure Durable FunctionsBuilding a document e-signing workflow with Azure Durable Functions
Building a document e-signing workflow with Azure Durable FunctionsJoonas Westlin
 
OpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander Dibbo
OpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander DibboOpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander Dibbo
OpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander DibboOpenNebula Project
 
JAVA 8 Parallel Stream
JAVA 8 Parallel StreamJAVA 8 Parallel Stream
JAVA 8 Parallel StreamTengwen Wang
 
Basics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdfBasics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdfKnoldus Inc.
 
An Introduction to Reactive Application, Reactive Streams, and options for JVM
An Introduction to Reactive Application, Reactive Streams, and options for JVMAn Introduction to Reactive Application, Reactive Streams, and options for JVM
An Introduction to Reactive Application, Reactive Streams, and options for JVMSteve Pember
 
Predictable reactive state management - ngrx
Predictable reactive state management - ngrxPredictable reactive state management - ngrx
Predictable reactive state management - ngrxIlia Idakiev
 
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)Kevin Sutter
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor FrameworkDamien Magoni
 
Streaming Processing with a Distributed Commit Log
Streaming Processing with a Distributed Commit LogStreaming Processing with a Distributed Commit Log
Streaming Processing with a Distributed Commit LogJoe Stein
 
Failover-Apachecon-Asia-2022.pptx
Failover-Apachecon-Asia-2022.pptxFailover-Apachecon-Asia-2022.pptx
Failover-Apachecon-Asia-2022.pptxDavidKjerrumgaard1
 

Similar to Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines (20)

Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8
 
Streaming to a New Jakarta EE
Streaming to a New Jakarta EEStreaming to a New Jakarta EE
Streaming to a New Jakarta EE
 
Streaming to a new Jakarta EE
Streaming to a new Jakarta EEStreaming to a new Jakarta EE
Streaming to a new Jakarta EE
 
Reactive programming with rx java
Reactive programming with rx javaReactive programming with rx java
Reactive programming with rx java
 
The Three Horse Race
The Three Horse RaceThe Three Horse Race
The Three Horse Race
 
Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-Java
 
2021.laravelconf.tw.slides1
2021.laravelconf.tw.slides12021.laravelconf.tw.slides1
2021.laravelconf.tw.slides1
 
Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19Streaming to a new Jakarta EE / JOTB19
Streaming to a new Jakarta EE / JOTB19
 
Building a document e-signing workflow with Azure Durable Functions
Building a document e-signing workflow with Azure Durable FunctionsBuilding a document e-signing workflow with Azure Durable Functions
Building a document e-signing workflow with Azure Durable Functions
 
OpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander Dibbo
OpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander DibboOpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander Dibbo
OpenNebulaConf2015 1.07 Cloud for Scientific Computing @ STFC - Alexander Dibbo
 
JAVA 8 Parallel Stream
JAVA 8 Parallel StreamJAVA 8 Parallel Stream
JAVA 8 Parallel Stream
 
Meteor + React
Meteor + ReactMeteor + React
Meteor + React
 
Basics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdfBasics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdf
 
An Introduction to Reactive Application, Reactive Streams, and options for JVM
An Introduction to Reactive Application, Reactive Streams, and options for JVMAn Introduction to Reactive Application, Reactive Streams, and options for JVM
An Introduction to Reactive Application, Reactive Streams, and options for JVM
 
Task flow
Task flowTask flow
Task flow
 
Predictable reactive state management - ngrx
Predictable reactive state management - ngrxPredictable reactive state management - ngrx
Predictable reactive state management - ngrx
 
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor Framework
 
Streaming Processing with a Distributed Commit Log
Streaming Processing with a Distributed Commit LogStreaming Processing with a Distributed Commit Log
Streaming Processing with a Distributed Commit Log
 
Failover-Apachecon-Asia-2022.pptx
Failover-Apachecon-Asia-2022.pptxFailover-Apachecon-Asia-2022.pptx
Failover-Apachecon-Asia-2022.pptx
 

Recently uploaded

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 

Recently uploaded (20)

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 

Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines