SlideShare a Scribd company logo
1 of 178
It’s the arts!
Playing with the Android canvas
(or Let’s have a pretext to vandalize art)
Today
Introduction to canvas
Composing and transforming
Animations!
Today
Some art vandalization!
But first, setup things:
http://sergiandreplace.com/canvas
Introducing
The Canvas
How we paint things in Android?
Open GL
(too complex)
Renderscript
(using a hammer to crack a nut)
(and not really for drawing)
Canvas
(quick and dirty)
What is exactly a “canvas”?
A Canvas works for you as a pretense, or
interface, to the actual surface upon which your
graphics will be drawn — it holds all of your
"draw" calls
Tl;dr: Canvas is the class that translates
drawing actions into a Bitmap
To draw something you need 4 components
(almost always)
A Bitmap to hold the pixels
a Canvas to host the draw calls
(writing into the bitmap)
a drawing primitive
(e.g. Rect, Path, text, Bitmap)
and a Paint
(to describe the colors and styles for the
drawing)
Tag 1_01_start
Let’s put a smile on
that face
Oh, hello beauty!
Remember
Bitmap + Canvas + Paint +Primitive
=
Drawing
Oh, crap!
Let’s improve that smile
Much better,
but…
a bit too straight
RectF allows to reuse coordinates
Bellisima!
but…
Tag start_1_02
In this case, the Paint is not needed
Why so serious?
Here comes the cape crusader!
Let’s get crazy with the rects!
Let’s talk about Bitmaps
Loading a bitmap
But…
A loaded Bitmap is immutable
We can’t draw in it!
Making it mutable
Making it mutable
What?
Bitmaps must be recycled
Recycle marks it as GCable
Still exists, but we can’t draw
Bitmaps are huge
Stored in memory with no compression
java.lang.OutOfMemoryError
(boo!)
Why to load a huge bitmap
if target draw is small?
Branch 1_03_Bitmaps
Composing
&
Transforming
Painting on the activity is cool, but…
Painting views is cooler
Anatomy of a drawing view
1. Create needed objects
2. Measure
3. Draw accordingly
4. Repeat 2 & 3 when needed
The onDraw method
onDraw is executed everytime the view
needs to be redrawn
(or a part of it)
We can request a onDraw with invalidate()
(or postInvalidate if not in UI thread)
onDraw receives a ready-to-use-canvas
Tag 2_01_start
MyFirstDrawingView extends from ImageView
But it adds no behaviour. To work!
Understand drawing order
1. ImageView add src
1. ImageView add src
2. MyFirstDrawingView adds a Vignette
3. View class draws background
1. ImageView add src
2. MyFirstDrawingView adds a Vignette
3. View class draws background
1. ImageView add src
2. MyFirstDrawingView adds a Vignette
Introducing Shaders
Basically, shaders modify the behaviour
of Paint object
BitmapShader
Allows to tile a Bitmap
LinearGradient
RadialGradient
SweepGradient
Guess what they do…
ComposeShader allows to mix two shaders
with an Xfermode
(a really crazy thing)
Paint.setShader(shader)
Let’s combine this!
We want our view
to vignette the
image set in the
layout
You have to:
Create a RadialGradient
(psst, getMeasuredHeight & getMeasuredWidth)
Assign to the Paint object
Use canvas.drawPaint(Paint) to fill it
Pro:
Avoid instantiate in the onDrawMethod
(onSizeChanged is your friend)
Use the drawable size, not the View size
Check ScaleMode and Padding behaviour
And now PorterDuffXMode
PorterDuffModes define images will blend
Don’t worry, trial and error
We could also save a layer
Saving layers allows us to make
transformations
Example
Save layer
Transform canvas 45º
Draw square
Restore canvas
More on transformations later on
We can setup a Paint on saving
It will be applied on restoring
Branch 2_03_apples_on_apples
Create a new bitmap to hold the image
Create a temporary canvas for it
Draw the imageView image on the canvas
Save the canvas using a paint with the PorterDuff
setup the bounds of the drawable mask
Draw the mask on the temporary canvas
Restore the temporary canvas
Draw the bitmap on the real canvas
Pro:
Optimize it to avoid instatiation in the onDraw
Play around with ratios
Transformations
Mainly matrixes and camera
Stoping too obvious jokes before is too late
Remember matrixes from school?
Haha. Don’t worry
But remember
Operations order is important
Matrixes are used for
Translate
Rotate
Scale
Skew
But
Matrix.setRotate
Matrix.setScale
Only scales
We must use preOperation
and postOperation
to concatenat
So
Matrix.preRotate
Matrix.setScale
Rotates and scales
So
Matrix.setRotate
Matrix.postScale
Rotates and scales
Canvas has unity matrix by default
Be careful!
Translate
+
rotate
Rotate
+
translate
Translate
+
rotate
Rotate
+
translate
Translate
+
rotate
Rotate
+
translate
Translate
+
rotate
Rotate
+
translate
Translate
+
rotate
Rotate
+
translate
We can
Canvas.save()
Canvas.setMatrix(matrix)
Canvas.drawSomething()
Canvas.restore()
Or
DrawBitmap with matrix
Cameras allow us to create 3D matrixes
So 3D transformations
(axes x, y and z + perspective)
We perform transformations on camera
And then, we get the corresponding matrix
Tag 2_03_start
First part objective
Make an image turn
You have to:
Calculate center
Create a matrix
Set the rotation of the matrix
Create a new Bitmap as big as view
Create the canvas of that Bitmap
Draw image on the canvas with the matrix
Draw the resulting bitmap on the main canvas
Pro:
Connect a seekBar with the rotation (wow!)
Do it without and with optimization
(is it noticeable?)
Remember!
All these operations and stuff is cute
Combined are WOW!
Animations
We are not going to talk about
Animation or Animator class
But how to move all the things we learned
Basically, a onPaint calling invalidate()
Things to keep in mind
Speed
We want to achieve as FPS as possible
NO INSTATIATION!!
Flags everywhere!
Animating
Started
Folded
…
Create appropiate flags for the status
(boolean or enum, up to you)
Create controls methods
(start, stop, rewind, whatever)
Time between onDraw calls changes
startTime
deltaTime
duration
System.currentTimeInMillis
deltaTime = System.currentTimeMillis() - startTime;
progress = (float) deltaTime / duration);
Animation pattern
(well, my pattern)
Make the methods setup the states
In the onDraw
If/else treating states
Keep in mind what to draw after
& before the animation
Cache, cache and cache
Include also animating states
Animating states should change flags
and/or call invalidate
Animating states must calculate progress
Interpolators
Used to add realism to the animations
Time
Animation progress
Boooooooooooring
Time
Animation progress
Oooooooh!
Time
Animation progress
OOOOOOOOOOHHH!!!!
Time
Animation progress
So, interopolators are just functions
f(delta time) = interpolated time
deltaTime = System.currentTimeMillis() - startTime;
progress = (float) deltaTime / duration);
deltaTime = System.currentTimeMillis() - startTime;
interpolatedTime = interpolator.getInterpolation
((float) deltaTime / duration);
Tag 3_01_start
Newspaper effect!
Newspaper effect!
Follow the pattern and fill it up comments
Pro:
Make things parametized
Add stop/pause
Make real effect (add scale and alpha)
Did you finish the exercise?
So we are finished
There are many other things in Canvas
Believe me
Just check drawing text stuff
Whoever made the TextView is my hero
Whoever made EditText is my God
Hope you enjoyed
Willing to see the things you make with all this
Share them in the GDG group!
It's the arts! Playing around with the Android canvas

More Related Content

What's hot (11)

Multimedia chapter 5
Multimedia chapter 5Multimedia chapter 5
Multimedia chapter 5
 
Development of a 3d animated short film using 3d animation technique
Development of a 3d animated short film using 3d animation techniqueDevelopment of a 3d animated short film using 3d animation technique
Development of a 3d animated short film using 3d animation technique
 
Types of animation
Types of animationTypes of animation
Types of animation
 
Basic Concepts of Animation
Basic Concepts of AnimationBasic Concepts of Animation
Basic Concepts of Animation
 
Animation
AnimationAnimation
Animation
 
Deepak
DeepakDeepak
Deepak
 
Object Oriented 3D Animation Pipeline
Object Oriented 3D Animation PipelineObject Oriented 3D Animation Pipeline
Object Oriented 3D Animation Pipeline
 
How to make a gif on gimp
How to make a gif on gimpHow to make a gif on gimp
How to make a gif on gimp
 
3D Animation Process and Workflow
3D Animation Process and Workflow3D Animation Process and Workflow
3D Animation Process and Workflow
 
Why you need game engine1.pptx
Why you need game engine1.pptxWhy you need game engine1.pptx
Why you need game engine1.pptx
 
2
22
2
 

Viewers also liked

[Android] 2D Graphics
[Android] 2D Graphics[Android] 2D Graphics
[Android] 2D GraphicsNikmesoft Ltd
 
Introduction to Canvas
Introduction to CanvasIntroduction to Canvas
Introduction to CanvasCodeAndroid
 
Realm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app databaseRealm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app databaseSergi Martínez
 
My way to clean android (EN) - Android day salamanca edition
My way to clean android (EN) - Android day salamanca editionMy way to clean android (EN) - Android day salamanca edition
My way to clean android (EN) - Android day salamanca editionChristian Panadero
 
Introduction to Android Fragments
Introduction to Android FragmentsIntroduction to Android Fragments
Introduction to Android FragmentsSergi Martínez
 

Viewers also liked (9)

[Android] 2D Graphics
[Android] 2D Graphics[Android] 2D Graphics
[Android] 2D Graphics
 
Android data binding
Android data bindingAndroid data binding
Android data binding
 
Introduction to Canvas
Introduction to CanvasIntroduction to Canvas
Introduction to Canvas
 
Admob y yo
Admob y yoAdmob y yo
Admob y yo
 
Realm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app databaseRealm or: How I learned to stop worrying and love my app database
Realm or: How I learned to stop worrying and love my app database
 
Android master class
Android master classAndroid master class
Android master class
 
Introducción a mobclix
Introducción a mobclixIntroducción a mobclix
Introducción a mobclix
 
My way to clean android (EN) - Android day salamanca edition
My way to clean android (EN) - Android day salamanca editionMy way to clean android (EN) - Android day salamanca edition
My way to clean android (EN) - Android day salamanca edition
 
Introduction to Android Fragments
Introduction to Android FragmentsIntroduction to Android Fragments
Introduction to Android Fragments
 

Similar to It's the arts! Playing around with the Android canvas

Seven Peaks Speaks - Android Jetpack Compose Animation
Seven Peaks Speaks - Android Jetpack Compose AnimationSeven Peaks Speaks - Android Jetpack Compose Animation
Seven Peaks Speaks - Android Jetpack Compose AnimationSeven Peaks Speaks
 
Graphics on the Go
Graphics on the GoGraphics on the Go
Graphics on the GoGil Irizarry
 
Advanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics APIAdvanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics APITomi Aarnio
 
controlling_animations
controlling_animationscontrolling_animations
controlling_animationstutorialsruby
 
controlling_animations
controlling_animationscontrolling_animations
controlling_animationstutorialsruby
 
In this exercise, youre going to begin building a countdown timer..docx
In this exercise, youre going to begin building a countdown timer..docxIn this exercise, youre going to begin building a countdown timer..docx
In this exercise, youre going to begin building a countdown timer..docxsleeperharwell
 
A Simple 3D Graphics Engine Written in Python and Allegro
A Simple 3D Graphics Engine Written in Python and AllegroA Simple 3D Graphics Engine Written in Python and Allegro
A Simple 3D Graphics Engine Written in Python and Allegrosnowfarthing
 
Crafting interactions with Core Animations, David Ortinau
Crafting interactions with Core Animations, David OrtinauCrafting interactions with Core Animations, David Ortinau
Crafting interactions with Core Animations, David OrtinauXamarin
 
Advanced animation techniques
Advanced animation techniquesAdvanced animation techniques
Advanced animation techniquesCharles Flynt
 
Fast but not furious: debugging user interaction performance issues
Fast but not furious: debugging user interaction performance issuesFast but not furious: debugging user interaction performance issues
Fast but not furious: debugging user interaction performance issuesAnna Migas
 
Day 1 presentation terminology
Day 1 presentation   terminologyDay 1 presentation   terminology
Day 1 presentation terminologykelv_w
 
Creating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdfCreating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdfShaiAlmog1
 
How to implement react native animations using animated api
How to implement react native animations using animated apiHow to implement react native animations using animated api
How to implement react native animations using animated apiKaty Slemon
 
Intro to Dimension
Intro to DimensionIntro to Dimension
Intro to DimensionAlex Hornak
 

Similar to It's the arts! Playing around with the Android canvas (20)

Seven Peaks Speaks - Android Jetpack Compose Animation
Seven Peaks Speaks - Android Jetpack Compose AnimationSeven Peaks Speaks - Android Jetpack Compose Animation
Seven Peaks Speaks - Android Jetpack Compose Animation
 
Graphics on the Go
Graphics on the GoGraphics on the Go
Graphics on the Go
 
Advanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics APIAdvanced Game Development with the Mobile 3D Graphics API
Advanced Game Development with the Mobile 3D Graphics API
 
Android animation in android-chapter17
Android animation in android-chapter17Android animation in android-chapter17
Android animation in android-chapter17
 
Animation
AnimationAnimation
Animation
 
controlling_animations
controlling_animationscontrolling_animations
controlling_animations
 
controlling_animations
controlling_animationscontrolling_animations
controlling_animations
 
In this exercise, youre going to begin building a countdown timer..docx
In this exercise, youre going to begin building a countdown timer..docxIn this exercise, youre going to begin building a countdown timer..docx
In this exercise, youre going to begin building a countdown timer..docx
 
Animation
AnimationAnimation
Animation
 
Custom View
Custom ViewCustom View
Custom View
 
Animation
AnimationAnimation
Animation
 
A Simple 3D Graphics Engine Written in Python and Allegro
A Simple 3D Graphics Engine Written in Python and AllegroA Simple 3D Graphics Engine Written in Python and Allegro
A Simple 3D Graphics Engine Written in Python and Allegro
 
Crafting interactions with Core Animations, David Ortinau
Crafting interactions with Core Animations, David OrtinauCrafting interactions with Core Animations, David Ortinau
Crafting interactions with Core Animations, David Ortinau
 
Advanced animation techniques
Advanced animation techniquesAdvanced animation techniques
Advanced animation techniques
 
Fast but not furious: debugging user interaction performance issues
Fast but not furious: debugging user interaction performance issuesFast but not furious: debugging user interaction performance issues
Fast but not furious: debugging user interaction performance issues
 
Day 1 presentation terminology
Day 1 presentation   terminologyDay 1 presentation   terminology
Day 1 presentation terminology
 
Ch07
Ch07Ch07
Ch07
 
Creating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdfCreating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdf
 
How to implement react native animations using animated api
How to implement react native animations using animated apiHow to implement react native animations using animated api
How to implement react native animations using animated api
 
Intro to Dimension
Intro to DimensionIntro to Dimension
Intro to Dimension
 

More from Sergi Martínez

Kotlin, a modern language for modern times
Kotlin, a modern language for modern timesKotlin, a modern language for modern times
Kotlin, a modern language for modern timesSergi Martínez
 
What is flutter and why should i care?
What is flutter and why should i care?What is flutter and why should i care?
What is flutter and why should i care?Sergi Martínez
 
What is flutter and why should i care? Lightning talk
What is flutter and why should i care? Lightning talkWhat is flutter and why should i care? Lightning talk
What is flutter and why should i care? Lightning talkSergi Martínez
 
Let’s talk about star wars with Dialog Flow
Let’s talk about star wars with Dialog FlowLet’s talk about star wars with Dialog Flow
Let’s talk about star wars with Dialog FlowSergi Martínez
 
Database handling with room
Database handling with roomDatabase handling with room
Database handling with roomSergi Martínez
 
Creating multillingual apps for android
Creating multillingual apps for androidCreating multillingual apps for android
Creating multillingual apps for androidSergi Martínez
 
Píldoras android i. Intro - 2ª parte
Píldoras android i. Intro - 2ª partePíldoras android i. Intro - 2ª parte
Píldoras android i. Intro - 2ª parteSergi Martínez
 

More from Sergi Martínez (8)

Kotlin, a modern language for modern times
Kotlin, a modern language for modern timesKotlin, a modern language for modern times
Kotlin, a modern language for modern times
 
What is flutter and why should i care?
What is flutter and why should i care?What is flutter and why should i care?
What is flutter and why should i care?
 
What is flutter and why should i care? Lightning talk
What is flutter and why should i care? Lightning talkWhat is flutter and why should i care? Lightning talk
What is flutter and why should i care? Lightning talk
 
Let’s talk about star wars with Dialog Flow
Let’s talk about star wars with Dialog FlowLet’s talk about star wars with Dialog Flow
Let’s talk about star wars with Dialog Flow
 
Database handling with room
Database handling with roomDatabase handling with room
Database handling with room
 
Smartphones
SmartphonesSmartphones
Smartphones
 
Creating multillingual apps for android
Creating multillingual apps for androidCreating multillingual apps for android
Creating multillingual apps for android
 
Píldoras android i. Intro - 2ª parte
Píldoras android i. Intro - 2ª partePíldoras android i. Intro - 2ª parte
Píldoras android i. Intro - 2ª parte
 

Recently uploaded

Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGDSC PJATK
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfFIDO Alliance
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctBrainSell Technologies
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FIDO Alliance
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераMark Opanasiuk
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe中 央社
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...FIDO Alliance
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfSrushith Repakula
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxFIDO Alliance
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessUXDXConf
 
Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Hiroshi SHIBATA
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfFIDO Alliance
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfFIDO Alliance
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfFIDO Alliance
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024Lorenzo Miniero
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch TuesdayIvanti
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?Mark Billinghurst
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceSamy Fodil
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxFIDO Alliance
 

Recently uploaded (20)

Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
Intro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptxIntro to Passkeys and the State of Passwordless.pptx
Intro to Passkeys and the State of Passwordless.pptx
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch Tuesday
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptx
 

It's the arts! Playing around with the Android canvas