SlideShare a Scribd company logo
1 of 100
Download to read offline
Performance Matters
+Ran Nachmany
@shed2k
Battery Performance
Hey, do you have a power outlet I can use?
I’m doing
stuff!
LOL!
NOPE.
What’s eating your mobile battery?
goo.gl/nMkSE
25-30%Actual work.
70%Analytics
GPS
Ads
QUIT BEING STUPID.
Better Battery Golden Rule
DEFER WORK UNTIL
THE BEST TIME
FOR BATTERY
Better Battery Golden Rule
Battery Problem:
WakeLocks
Active Screen Off
Z
Z
Z
Asleep
Keeping the device awake
goo.gl/uEfy56
Z
Z
Z
Wakelock
Wakelock.aquire(..)
goo.gl/ZNCx6n
AlarmManager.setInexact*(..)
goo.gl/l7m7fb20 minutes
15 minutes
Release Wakelocks.
Batch Wakeups.
#PERFMATTERS TIP
Battery Problem:
Location
EXPENSIVE
GPS Provider Cell Network Provider
More Accurate
More Power
Less Accurate
Less Power
Better Accuracy Better Battery
PRIORITY_HIGH_ACCURACY
PRIORITY_BALANCED_POWER_ACCURACY PRIORITY_LOW_POWER
PRIORITY_NO_POWER
What’s the best State for
right now?
Z
Z
Z
PRIORITY_HIGH_ACCURACY
PRIORITY_BALANCED_POWER_ACC
URACY
PRIORITY_LOW_POWER
PRIORITY_NO_POWER
GPS
Fetch Totally
steal
Passive Provider
Only use the resolution
you need.
#PERFMATTERS TIP #43
Networking
Battery Drain
Bandwidth
Power
Idle
DCH
FACH
Bandwidth
Power
Idle
DCH
FACH
Tail Time
~10 sec
Tail Time
~60 sec
Wake Up Time
~2 Sec
$$$$$$$$$
User Pays for your requests
LESS RADIO TIME
LESS DATA
NETWORKING Golden Rule
Network Technique:
Batching
XHR
wait
XHR
wait
XHR
wait
XHR
wait
XHR
wait
XHR
wait
XHR
XHR
XHR
XHR
XHR
XHR
wait
BATCHING!
Do Now Server Response Data Push
Types of networking requests
CAN OPTIMIZE
requests
pending queue
Length == 10
pending queue
requests
Get Notified
Get Notified
JobInfo uploadJob =
new JobInfo.Buildr(mSomeInt, mServiceComponent)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.setOverrideDeadline(DateUtils.HOUR_IN_MILLIS)
.setRequiresCharging(true)
.build();
JobScheduler API
JobInfo uploadJob =
new JobInfo.Buildr(mSomeInt, mServiceComponent)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.setOverrideDeadline(DateUtils.HOUR_IN_MILLIS)
.setRequiresCharging(true)
.build();
JobScheduler API
JobId
JobInfo uploadJob =
new JobInfo.Buildr(mSomeInt, mServiceComponent)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.setOverrideDeadline(DateUtils.HOUR_IN_MILLIS)
.setRequiresCharging(true)
.build();
JobScheduler API
Job Endpoint
JobInfo uploadJob =
new JobInfo.Buildr(mSomeInt, mServiceComponent)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.setOverrideDeadline(DateUtils.HOUR_IN_MILLIS)
.setRequiresCharging(true)
.build();
JobScheduler API
Network Type
JobInfo uploadJob =
new JobInfo.Buildr(mSomeInt, mServiceComponent)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.setOverrideDeadline(DateUtils.HOUR_IN_MILLIS)
.setRequiresCharging(true)
.build();
JobScheduler API
Timing Constraint
JobInfo uploadJob =
new JobInfo.Buildr(mSomeInt, mServiceComponent)
.setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
.setOverrideDeadline(DateUtils.HOUR_IN_MILLIS)
.setRequiresCharging(true)
.build();
JobScheduler API
Extra Constraint
SyncAdapters
Pre L Batching
SyncAdapters
Pre L Batching
GcmNetworkManager
// Schedule a task to occur between five and fifteen minutes from now:
OneoffTask myTask = new OneoffTask.Builder()
.setService(MyGcmTaskService.class)
.setExecutionWindow(
5 * DateUtil.MINUTE_IN_SECONDS, 15 * DateUtil.MINUTE_IN_SECONDS)
.setTag("test-upload")
.build();
GcmNetworkManager.get(this).schedule(myTask);
GcmNetworkManager
GcmNetworkManager
https://goo.gl/hTwIEt
// Implement service logic to be notified when the task elapses:
MyUploadService extends GcmTaskService {
@Override
public int onRunTask(TaskParams params) {
// Do some upload work.
return GcmNetworkManager.RESULT_SUCCESS;
}
}
GcmNetworkManager
GcmNetworkManager
https://goo.gl/hTwIEt
// Implement service logic to be notified when the task elapses:
MyUploadService extends GcmTaskService {
@Override
public int onRunTask(TaskParams params) {
// Do some upload work.
return GcmNetworkManager.RESULT_SUCCESS;
}
}
GcmNetworkManager
adb shell am broadcast -a "com.google.android.gms.gcm.ACTION_TRIGGER_TASK" 
-e component -e tag
GcmNetworkManager
https://goo.gl/hTwIEt
Network Technique:
Prefetching
10 seconds
6 seconds
Fetch1MB
Fetch1MB
Fetch1MB
Fetch1MB
Fetch4MB
PRE FETCHING!
wait
wait
wait
wait
wait
@ Startup
How much do we prefetch?
Quality pre-fetch is :
about 1-5mb of data.
about 1-2 minutes of data need
2G = fetch 3 new photos
4G = fetch 12 new photos
Network Problem:
Payload Size
45k
quality : 70
164k
quality : 100
Site JPG Quality
Google Images Thumbnails 74-76
Facebook full-size images 85
Yahoo frontpage JPEGs 69-91
Youtube frontpage JPEGs 70-82
Wikipedia images 80
Windows live background 82
Twitter user JPEG images 30-100
READ
goo.gl/skf1gp
JSON
IS
HORRIBLE
{
"id": 1,
"jsonrpc": "2.0",
"total": 1,
"max_id":276372795494133760,
"result": [
{
"id": 0,
"guid": "2084d344-81fe-4714-9e2a-42c83b46083b",
"isActive": true,
"balance": "$1,507.00",
"picture": "http://placehold.it/32x32",
"age": 24,
"latitude": -85.791587,
"longitude": -64.615557,
"tags": [
"quis",
"est",
"ea",
"velit",
"exercitation",
"quis",
"veniam"
],
"friends": [
{
"id": 0,
"name": "Sanford Patton"
},
Spaces, quotes,
returns, names, are all
verbose data.
{
"id": 1,
"jsonrpc": "2.0",
"total": 1,
"max_id":276372795494133760,
"result": [
{
"id": 0,
"guid": "2084d344-81fe-4714-9e2a-42c83b46083b",
"isActive": true,
"balance": "$1,507.00",
"picture": "http://placehold.it/32x32",
"age": 24,
"latitude": -85.791587,
"longitude": -64.615557,
"tags": [
"quis",
"est",
"ea",
"velit",
"exercitation",
"quis",
"veniam"
],
"friends": [
{
"id": 0,
"name": "Sanford Patton"
},
Copied into memory,
must determine if
string, int, date, etc.
FlatBuffers
FlatBuffers
Scheme Compiler
.java
.cpp
.go
FlatBuffers
http://goo.gl/r9xTXK
Smaller data
wins the Internet.
#PERFMATTERS TIP #9
Memory Performance
WHY IS EVERYTHING SLOW????? I FORGET……...
GC Event!
Allocatedmemory
Memory Threshold
Fib3(..) GC Fib3(..)Main
function
FIB3 fcn haulted
FIB3 fcn Resume
16ms
DRAW!DRAW! DRAW!
16ms 16ms
UPDATE GC
GC events eat
kittens
framerate
MEMORY Golden Rule
Memory Problem:
Bitmaps
HEAP
IMGIMG
GC
IMGIMG
HEAP
Smaller Pixel
Formats
Down-Scale
ImagesBitmap Re-use
Glide
goo.gl/flNbyf
Picasso
goo.gl/tpTc1
Bitmaps are big
Make them smaller
#PERFMATTERS TIP #44
Memory Problem:
HashMap
KEY
Hash-to-index
Allocated, but unused
Allocated, but unused
Stored Value
ArrayMap.java
goo.gl/SCeQEL
ArrayMap
HASH #1
HASH #2
HASH #3
Hashes of keys
sorted
VALUE 2
KEY 3
VALUE 3
KEY 1
VALUE 1
KEY 2
Interwoven
key / value
ArrayMap.java
goo.gl/SCeQEL
HASH #8
HASH #9
HASH #10
KEY HASH #5
HASH #6
HASH #7
HASH #1
VALUE 7
KEY 8
VALUE 8
KEY 1
VALUE 1
KEY 7
Key Index
= (hashIndex *2) + 1
binary search
HASH #7
collision
search
VALUE 7
KEY 8
VALUE 8
KEY 1
VALUE 1
KEY 7
Key Index
= (hashIndex *2) + 1
HASH #8
HASH #9
HASH #10
KEY HASH #5
HASH #6
HASH #7
HASH #1
binary search
Empty
But array still allocated
Empty
nothing allocated
HashMap ArrayMap
<1000
objects
Maps
containing maps
Use ArrayMap
in the right places.
#PERFMATTERS TIP #76
Memory Problem:
Auto Boxing
Primitive sizes
boolean 8 bits
int
float 32 bits
32 bits
boolean java.lang.Boolean
int
float java.lang.Float
java.lang.Integer
Integer value = 0
Primitive int
Integer Object
Autoboxing
// Primitive version
int total = 0;
for (int i = 0; i < 100; i++)
total += i;
// Generic version
Integer total = 0;
for (int i = 0; i < 100; i++)
total += i;
// Primitive version
int total = 0;
for (int i = 0; i < 100; i++)
total += i;
// Generic version
Integer total = 0;
for (int i = 0; i < 100; i++)
//total += i;
Allocates 83 new objects!
(yea, i know, it’s confusing..)
Allocates 0 new objects!
// create new Integer(),
// push in new value
// add to total
HashMap <Primitive,Object>
put update get
autoboxing autoboxing
autoboxing
HashMap <obj, obj>
SparseBoolMap <bool,obj>
SparseIntMap <int,obj>
SparseLongMap <long,obj>
LongSparseMap <long,obj>
NoAutoboxing
LotsofGenerics
Single Call Site
AllocationTracker
Memory Profiling 101
goo.gl/h1Cl9k
TraceView
Avoid Autoboxing
#PERFMATTERS TIP #21
Memory Problem:
ENUMs
2556
Bytes
public static final int VALUE1 = 1;
public static final int VALUE2 = 2;
public static final int VALUE3 = 3;
int func(int value) {
switch (value) {
case VALUE1:
return -1;
case VALUE2:
return -2;
case VALUE3:
return -3;
}
return 0;
}
Bytes
2680
+124 bytes
public static enum Value {
VALUE1,
VALUE2,
VALUE3
}
int func(Value value) {
switch (value) {
case VALUE1:
return -1;
case VALUE2:
return -2;
case VALUE3:
return -3;
}
return 0;
} Bytes
4188
13x more
than int version
public static enum Value {
VALUE1,
VALUE2,
VALUE3
}
12-16 bytes
for the array
20+ bytes (each)
If you’re using ENUMS
STOP.
#PERFMATTERS TIP #73
QUIT BEING STUPID.
#PerfMatters Golden Rule

More Related Content

More from DroidConTLV

No more video loss - Alex Rivkin, Motorola Solutions
No more video loss - Alex Rivkin, Motorola SolutionsNo more video loss - Alex Rivkin, Motorola Solutions
No more video loss - Alex Rivkin, Motorola SolutionsDroidConTLV
 
Mobile at Scale: from startup to a big company - Dor Samet, Booking.com
Mobile at Scale: from startup to a big company - Dor Samet, Booking.comMobile at Scale: from startup to a big company - Dor Samet, Booking.com
Mobile at Scale: from startup to a big company - Dor Samet, Booking.comDroidConTLV
 
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, Climacell
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, ClimacellLiveData on Steroids - Giora Shevach + Shahar Ben Moshe, Climacell
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, ClimacellDroidConTLV
 
MVVM In real life - Lea Cohen Tannoudji, Lightricks
MVVM In real life - Lea Cohen Tannoudji, LightricksMVVM In real life - Lea Cohen Tannoudji, Lightricks
MVVM In real life - Lea Cohen Tannoudji, LightricksDroidConTLV
 
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)DroidConTLV
 
Building Apps with Flutter - Hillel Coren, Invoice Ninja
Building Apps with Flutter - Hillel Coren, Invoice NinjaBuilding Apps with Flutter - Hillel Coren, Invoice Ninja
Building Apps with Flutter - Hillel Coren, Invoice NinjaDroidConTLV
 
New Android Project: The Most Important Decisions - Vasiliy Zukanov
New Android Project: The Most Important Decisions - Vasiliy ZukanovNew Android Project: The Most Important Decisions - Vasiliy Zukanov
New Android Project: The Most Important Decisions - Vasiliy ZukanovDroidConTLV
 
Designing a Design System - Shai Mishali, Gett
Designing a Design System - Shai Mishali, GettDesigning a Design System - Shai Mishali, Gett
Designing a Design System - Shai Mishali, GettDroidConTLV
 
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, PepperThe Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, PepperDroidConTLV
 
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDev
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDevKotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDev
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDevDroidConTLV
 
Flutter State Management - Moti Bartov, Tikal
Flutter State Management - Moti Bartov, TikalFlutter State Management - Moti Bartov, Tikal
Flutter State Management - Moti Bartov, TikalDroidConTLV
 
Reactive UI in android - Gil Goldzweig Goldbaum, 10bis
Reactive UI in android - Gil Goldzweig Goldbaum, 10bisReactive UI in android - Gil Goldzweig Goldbaum, 10bis
Reactive UI in android - Gil Goldzweig Goldbaum, 10bisDroidConTLV
 
Fun with flutter animations - Divyanshu Bhargava, GoHighLevel
Fun with flutter animations - Divyanshu Bhargava, GoHighLevelFun with flutter animations - Divyanshu Bhargava, GoHighLevel
Fun with flutter animations - Divyanshu Bhargava, GoHighLevelDroidConTLV
 
DroidconTLV 2019
DroidconTLV 2019DroidconTLV 2019
DroidconTLV 2019DroidConTLV
 
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, Monday
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, MondayOk google, it's time to bot! - Hadar Franco, Albert + Stav Levi, Monday
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, MondayDroidConTLV
 
Introduction to React Native - Lev Vidrak, Wix
Introduction to React Native - Lev Vidrak, WixIntroduction to React Native - Lev Vidrak, Wix
Introduction to React Native - Lev Vidrak, WixDroidConTLV
 
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneBang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneDroidConTLV
 
Educating your app – adding ML edge to your apps - Maoz Tamir
Educating your app – adding ML edge to your apps - Maoz TamirEducating your app – adding ML edge to your apps - Maoz Tamir
Educating your app – adding ML edge to your apps - Maoz TamirDroidConTLV
 
Constraint-ly motion - making your app dance - John Hoford, Google
Constraint-ly motion - making your app dance - John Hoford, GoogleConstraint-ly motion - making your app dance - John Hoford, Google
Constraint-ly motion - making your app dance - John Hoford, GoogleDroidConTLV
 
Who needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, ColuWho needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, ColuDroidConTLV
 

More from DroidConTLV (20)

No more video loss - Alex Rivkin, Motorola Solutions
No more video loss - Alex Rivkin, Motorola SolutionsNo more video loss - Alex Rivkin, Motorola Solutions
No more video loss - Alex Rivkin, Motorola Solutions
 
Mobile at Scale: from startup to a big company - Dor Samet, Booking.com
Mobile at Scale: from startup to a big company - Dor Samet, Booking.comMobile at Scale: from startup to a big company - Dor Samet, Booking.com
Mobile at Scale: from startup to a big company - Dor Samet, Booking.com
 
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, Climacell
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, ClimacellLiveData on Steroids - Giora Shevach + Shahar Ben Moshe, Climacell
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, Climacell
 
MVVM In real life - Lea Cohen Tannoudji, Lightricks
MVVM In real life - Lea Cohen Tannoudji, LightricksMVVM In real life - Lea Cohen Tannoudji, Lightricks
MVVM In real life - Lea Cohen Tannoudji, Lightricks
 
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)
 
Building Apps with Flutter - Hillel Coren, Invoice Ninja
Building Apps with Flutter - Hillel Coren, Invoice NinjaBuilding Apps with Flutter - Hillel Coren, Invoice Ninja
Building Apps with Flutter - Hillel Coren, Invoice Ninja
 
New Android Project: The Most Important Decisions - Vasiliy Zukanov
New Android Project: The Most Important Decisions - Vasiliy ZukanovNew Android Project: The Most Important Decisions - Vasiliy Zukanov
New Android Project: The Most Important Decisions - Vasiliy Zukanov
 
Designing a Design System - Shai Mishali, Gett
Designing a Design System - Shai Mishali, GettDesigning a Design System - Shai Mishali, Gett
Designing a Design System - Shai Mishali, Gett
 
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, PepperThe Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
 
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDev
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDevKotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDev
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDev
 
Flutter State Management - Moti Bartov, Tikal
Flutter State Management - Moti Bartov, TikalFlutter State Management - Moti Bartov, Tikal
Flutter State Management - Moti Bartov, Tikal
 
Reactive UI in android - Gil Goldzweig Goldbaum, 10bis
Reactive UI in android - Gil Goldzweig Goldbaum, 10bisReactive UI in android - Gil Goldzweig Goldbaum, 10bis
Reactive UI in android - Gil Goldzweig Goldbaum, 10bis
 
Fun with flutter animations - Divyanshu Bhargava, GoHighLevel
Fun with flutter animations - Divyanshu Bhargava, GoHighLevelFun with flutter animations - Divyanshu Bhargava, GoHighLevel
Fun with flutter animations - Divyanshu Bhargava, GoHighLevel
 
DroidconTLV 2019
DroidconTLV 2019DroidconTLV 2019
DroidconTLV 2019
 
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, Monday
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, MondayOk google, it's time to bot! - Hadar Franco, Albert + Stav Levi, Monday
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, Monday
 
Introduction to React Native - Lev Vidrak, Wix
Introduction to React Native - Lev Vidrak, WixIntroduction to React Native - Lev Vidrak, Wix
Introduction to React Native - Lev Vidrak, Wix
 
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGeneBang-Bang, you have been hacked - Yonatan Levin, KolGene
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
 
Educating your app – adding ML edge to your apps - Maoz Tamir
Educating your app – adding ML edge to your apps - Maoz TamirEducating your app – adding ML edge to your apps - Maoz Tamir
Educating your app – adding ML edge to your apps - Maoz Tamir
 
Constraint-ly motion - making your app dance - John Hoford, Google
Constraint-ly motion - making your app dance - John Hoford, GoogleConstraint-ly motion - making your app dance - John Hoford, Google
Constraint-ly motion - making your app dance - John Hoford, Google
 
Who needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, ColuWho needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, Colu
 

Recently uploaded

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
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
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
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
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
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
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
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"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
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 

Recently uploaded (20)

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
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
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
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
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
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
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
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"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
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 

Android Performance Matters - Ran Nachmany, Google