Slide 1

Slide 1 text

Kivy Kivy: Versatile framework for mobile and desktop Mathieu Virbel Melting Rocks

Slide 2

Slide 2 text

Mathieu Virbel #kivy 2/56

Slide 3

Slide 3 text

Show & Tell #kivy 3/56

Slide 4

Slide 4 text

Audience Museum: Project Nantes 1900 ➔ Ubuntu / Kivy / Panda 3D by Devocite - http://devocite.com/ #kivy 4/56

Slide 5

Slide 5 text

Audience Education: Logotouch ➔ Android and iOS Kivy / Redis / Pika (RabbitMQ) by Erasme - http://erasme.org/ #kivy 5/56

Slide 6

Slide 6 text

Audience Gaming: Flat Jewels ➔ Android (iOS later) Kivy Already on the Play Store by Melting Rocks - http://meltingrocks.com/ #kivy 6/56

Slide 7

Slide 7 text

Audience Business: ProcessCraft / BPMN 2.0 ➔ Android / iOS / Desktops + Kivy by Showgen Ltd - http://showgen.com/ #kivy 7/56

Slide 8

Slide 8 text

Organization All the projects are available at github.com/kivy #kivy 7 core developers 18 public projects 2 mailing lists (kivy-users, kivy-dev) > 1000 users IRC channel #kivy · · · · 8/56

Slide 9

Slide 9 text

Kivy - OpenGL ES UI Toolkit Projects Toolchains Packaging Bridges #kivy Android: python-for-android iOS: kivy-ios · · Buildozer Cloud builder · · Pyjnius: Python - Java Pyobjus: Python - Objective-C · · 9/56

Slide 10

Slide 10 text

Kivy - Widgets Extensive Widget collection Goal: simple and easy-to-assemble widgets #kivy Label, Button, CheckBox, Image, Slider, ProgressBar, Switch TextInput with multiple lines, password, hint-text, CodeInput 5 Layouts: Grid, Box, Anchor, Float, Stack Complex widgets: Bubble, Dropdown list, Filechooser, Popup, Spinner, ListView, TabbedPanel, ... Screen manager and custom screen transition (designed during Europython 2012 sprints) Interactions like scatter, zoom, pan, rotate · · · · · · ➔ 10/56

Slide 11

Slide 11 text

Kivy - Widgets #kivy f r o m k i v y . a p p i m p o r t A p p f r o m k i v y . u i x . b u t t o n i m p o r t B u t t o n c l a s s H e l l o K i v y ( A p p ) : d e f b u i l d ( s e l f ) : r e t u r n B u t t o n ( t e x t = ' H e l l o ' , f o n t _ s i z e = ' 2 0 d p ' ) H e l l o K i v y ( ) . r u n ( ) ➔ P Y T H O N 11/56

Slide 12

Slide 12 text

Kivy - Widgets #kivy f r o m k i v y . a p p i m p o r t A p p f r o m k i v y . u i x . b u t t o n i m p o r t B u t t o n c l a s s H e l l o K i v y ( A p p ) : d e f b u i l d ( s e l f ) : s e l f . c o u n t = 0 b t n = B u t t o n ( t e x t = ' H e l l o ' , f o n t _ s i z e = ' 2 0 d p ' ) b t n . b i n d ( o n _ p r e s s = s e l f . i n c r e m e n t ) r e t u r n b t n d e f i n c r e m e n t ( s e l f , b u t t o n ) : s e l f . c o u n t + = 1 b t n . t e x t = ' H e l l o { } ' . f o r m a t ( s e l f . c o u n t ) H e l l o K i v y ( ) . r u n ( ) ➔ P Y T H O N 12/56

Slide 13

Slide 13 text

Kivy - Widgets #kivy f r o m k i v y . a p p i m p o r t A p p f r o m k i v y . u i x . b u t t o n i m p o r t B u t t o n f r o m k i v y . u i x . s w i t c h i m p o r t S w i t c h f r o m k i v y . u i x . b o x l a y o u t i m p o r t B o x L a y o u t c l a s s H e l l o K i v y ( A p p ) : d e f b u i l d ( s e l f ) : r o o t = B o x L a y o u t ( ) r o o t . a d d _ w i d g e t ( B u t t o n ( t e x t = ' H e l l o ' ) ) r o o t . a d d _ w i d g e t ( S w i t c h ( ) ) r o o t . a d d _ w i d g e t ( B u t t o n ( t e x t = ' W o r l d ' ) ) r e t u r n r o o t H e l l o K i v y ( ) . r u n ( ) ➔ P Y T H O N 13/56

Slide 14

Slide 14 text

Kivy - Widgets #kivy f r o m k i v y . a p p i m p o r t A p p f r o m k i v y . u i x . b u t t o n i m p o r t B u t t o n f r o m k i v y . u i x . s w i t c h i m p o r t S w i t c h f r o m k i v y . u i x . b o x l a y o u t i m p o r t B o x L a y o u t c l a s s H e l l o K i v y ( A p p ) : d e f b u i l d ( s e l f ) : r o o t = B o x L a y o u t ( p a d d i n g = ' 2 0 d p ' , s p a c i n g = ' 2 0 d p ' ) r o o t . a d d _ w i d g e t ( B u t t o n ( t e x t = ' H e l l o ' ) ) r o o t . a d d _ w i d g e t ( S w i t c h ( ) ) r o o t . a d d _ w i d g e t ( B u t t o n ( t e x t = ' W o r l d ' ) ) r e t u r n r o o t H e l l o K i v y ( ) . r u n ( ) ➔ P Y T H O N 14/56

Slide 15

Slide 15 text

Kivy - Widgets #kivy f r o m g l o b i m p o r t g l o b f r o m k i v y . a p p i m p o r t A p p f r o m k i v y . u i x . c a r o u s e l i m p o r t C a r o u s e l f r o m k i v y . u i x . i m a g e i m p o r t I m a g e c l a s s H e l l o K i v y ( A p p ) : d e f b u i l d ( s e l f ) : r o o t = C a r o u s e l ( d i r e c t i o n = ' r i g h t ' , l o o p = T r u e ) f o r f n i n g l o b ( ' i m a g e s / * . j p g ' ) : r o o t . a d d _ w i d g e t ( I m a g e ( s o u r c e = f n ) ) r e t u r n r o o t H e l l o K i v y ( ) . r u n ( ) ➔ P Y T H O N 15/56

Slide 16

Slide 16 text

Kivy - Properties #kivy Observer pattern: Value checking: Error handlers: · EventDispatcher or Widget classes d i s p a t c h e r . b i n d ( p r o p e r t y = c a l l b a c k ) d i s p a t c h e r . u n b i n d ( p r o p e r t y = c a l l b a c k ) - - - · b n p = B o u n d e d N u m e r i c P r o p e r t y ( 0 , m i n = - 5 0 0 , m a x = 5 0 0 ) Will raise a Exception if the value if out of the bounds - - · b n p = B o u n d e d N u m e r i c P r o p e r t y ( 0 , m i n = - 5 0 0 , m a x = 5 0 0 , e r r o r v a l u e = 0 ) b n p = B o u n d e d N u m e r i c P r o p e r t y ( 0 , m i n = - 5 0 0 , m a x = 5 0 0 , e r r o r h a n d l e r = l a m b d a x : 5 0 0 i f x > 5 0 0 e l s e - 5 0 0 ) - - 16/56

Slide 17

Slide 17 text

Kivy - Properties #kivy f r o m k i v y . a p p i m p o r t A p p f r o m k i v y . u i x . b u t t o n i m p o r t B u t t o n f r o m k i v y . p r o p e r t i e s i m p o r t N u m e r i c P r o p e r t y c l a s s H e l l o K i v y ( A p p ) : c o u n t = N u m e r i c P r o p e r t y ( 0 ) d e f b u i l d ( s e l f ) : s e l f . c o u n t = 0 b t n = B u t t o n ( t e x t = ' H e l l o ' , f o n t _ s i z e = ' 2 0 d p ' ) b t n . b i n d ( o n _ p r e s s = s e l f . i n c r e m e n t ) r e t u r n b t n d e f i n c r e m e n t ( s e l f , b u t t o n ) : s e l f . c o u n t + = 1 H e l l o K i v y ( ) . r u n ( ) ➔ P Y T H O N 17/56

Slide 18

Slide 18 text

Kivy - Properties #kivy c l a s s H e l l o K i v y ( A p p ) : c o u n t = N u m e r i c P r o p e r t y ( 0 ) d e f b u i l d ( s e l f ) : s e l f . b i n d ( c o u n t = s e l f . u p d a t e _ w i d g e t s ) s e l f . b t n = B u t t o n ( t e x t = ' H e l l o ' , f o n t _ s i z e = ' 2 0 d p ' ) s e l f . b t n . b i n d ( o n _ p r e s s = s e l f . i n c r e m e n t ) r e t u r n s e l f . b t n d e f i n c r e m e n t ( s e l f , b u t t o n ) : s e l f . c o u n t + = 1 d e f u p d a t e _ w i d g e t s ( s e l f , a p p , v a l u e ) : s e l f . b t n . t e x t = ' H e l l o { } ' . f o r m a t ( s e l f . c o u n t ) ➔ P Y T H O N 18/56

Slide 19

Slide 19 text

Kivy - Language Motivation Easier UI composition, styling, and connecting components 3 types of constructions #kivy Kv rule: "style" that apply to a widget class Root widget: instanciate a widget for you Dynamic classes: create widget class on-the-fly · · · 19/56

Slide 20

Slide 20 text

Kivy - Language #kivy f r o m k i v y . a p p i m p o r t A p p f r o m k i v y . u i x . b o x l a y o u t i m p o r t B o x L a y o u t f r o m k i v y . p r o p e r t i e s i m p o r t N u m e r i c P r o p e r t y c l a s s M a i n U I ( B o x L a y o u t ) : p a s s c l a s s D e m o K v ( A p p ) : c o u n t = N u m e r i c P r o p e r t y ( 0 ) d e f b u i l d ( s e l f ) : r e t u r n M a i n U I ( ) D e m o K v ( ) . r u n ( ) ➔ P Y T H O N 20/56

Slide 21

Slide 21 text

Kivy - Language #kivy # : k i v y 1 . 7 . 1 < M a i n U I > : o r i e n t a t i o n : ' h o r i z o n t a l ' L a b e l : t e x t : ' C o u n t : { } ' . f o r m a t ( a p p . c o u n t ) B u t t o n : t e x t : ' P r e s s m e ' o n _ p r e s s : a p p . c o u n t + = 1 ➔ K V 21/56

Slide 22

Slide 22 text

Kivy - Language Reserved keywords Dynamic inspection and bindings #kivy self: represent the current widget in the tree root: represent the top widget in the kv rule app: instance of the current running application · · · < M a i n U I > : L a b e l : x : r o o t . x + r o o t . w i d t h / 2 . y : r o o t . c e n t e r _ y P Y T H O N 22/56

Slide 23

Slide 23 text

Kivy - Language #kivy # : k i v y 1 . 7 . 1 < M a i n U I > : o r i e n t a t i o n : ' h o r i z o n t a l ' i f s e l f . w i d t h > s e l f . h e i g h t e l s e ' v e r t i c a l ' L a b e l : t e x t : ' V a l u e : { : 2 f } ' . f o r m a t ( s l i d e r . v a l u e ) f o n t _ s i z e : ' 2 0 d p ' S l i d e r : i d : s l i d e r ➔ K V 23/56

Slide 24

Slide 24 text

Kivy - Language #kivy # : k i v y 1 . 7 . 1 < N u m b e r e d S l i d e r @ S l i d e r > : L a b e l : t e x t : s t r ( i n t ( r o o t . v a l u e ) ) f o n t _ s i z e : ' 2 0 d p ' w i d t h : s e l f . t e x t u r e _ s i z e [ 0 ] x : r o o t . v a l u e _ p o s [ 0 ] - s e l f . w i d t h / 2 . c e n t e r _ y : r o o t . c e n t e r _ y + d p ( 3 0 ) < M a i n U I > : N u m b e r e d S l i d e r : v a l u e : 5 0 m i n : 1 0 m a x : 9 0 ➔ K V 24/56

Slide 25

Slide 25 text

Kivy - Graphics #kivy Everything is GPU accelerated (GLES) 3D and Shaders (if you know what you're doing... power!) Optimized rendering using Cython/C Graphics Instructions for sequential programming & "JIT graphics compiler" Also eases porting, if there is a GPU, GLES isn't far away... · · · · · 25/56

Slide 26

Slide 26 text

Kivy - Graphics #kivy # : k i v y 1 . 7 . 1 < - N u m b e r e d S l i d e r @ S l i d e r > : c a n v a s : C o l o r : r g b : 1 , 0 , 0 R e c t a n g l e : p o s : s e l f . p o s s i z e : s e l f . w i d t h * s e l f . v a l u e _ n o r m a l i z e d , s e l f . h e i g h t ➔ K V 26/56

Slide 27

Slide 27 text

Kivy - Graphics #kivy # : k i v y 1 . 7 . 1 < - N u m b e r e d S l i d e r @ S l i d e r > : s i z e _ h i n t _ y : N o n e h e i g h t : ' 4 8 d p ' c a n v a s : C o l o r : r g b : . 2 , . 2 , . 2 R e c t a n g l e : p o s : s e l f . p o s s i z e : s e l f . s i z e C o l o r : r g b : s e l f . v a l u e _ n o r m a l i z e d , 1 - s e l f . v a l u e _ n o r m a l i z e d , 0 R e c t a n g l e : p o s : s e l f . p o s s i z e : s e l f . w i d t h * s e l f . v a l u e _ n o r m a l i z e d , s e l f . h e i g h t ➔ K V 27/56

Slide 28

Slide 28 text

Kivy - Graphics #kivy # : k i v y 1 . 7 . 1 < - N u m b e r e d S l i d e r @ S l i d e r > : s i z e _ h i n t _ y : N o n e h e i g h t : ' 4 8 d p ' c a n v a s : C o l o r : r g b : 1 - s e l f . v a l u e _ n o r m a l i z e d , 1 - s e l f . v a l u e _ n o r m a l i z e d , 0 R e c t a n g l e : p o s : s e l f . p o s s i z e : s e l f . w i d t h * s e l f . v a l u e _ n o r m a l i z e d , s e l f . h e i g h t s o u r c e : ' a t l a s : / / d a t a / i m a g e s / d e f a u l t t h e m e / s l i d e r _ c u r s o r ' ➔ K V 28/56

Slide 29

Slide 29 text

Kivy - Graphics #kivy # : k i v y 1 . 7 . 1 < - N u m b e r e d S l i d e r @ S l i d e r > : s i z e _ h i n t _ y : N o n e h e i g h t : ' 4 8 d p ' c a n v a s : C o l o r : r g b : 1 - s e l f . v a l u e _ n o r m a l i z e d , 1 - s e l f . v a l u e _ n o r m a l i z e d , 0 B o r d e r I m a g e : b o r d e r : 2 4 , 2 4 , 2 4 , 2 4 p o s : s e l f . p o s s i z e : s e l f . w i d t h * s e l f . v a l u e _ n o r m a l i z e d , s e l f . h e i g h t s o u r c e : ' a t l a s : / / d a t a / i m a g e s / d e f a u l t t h e m e / s l i d e r _ c u r s o r ' ➔ K V 29/56

Slide 30

Slide 30 text

Kivy - Input #kivy Fundamentally based on concept of multi-input Conceptual tools / approaches to event handling / interpretation Provider based library design / architechture · · · 30/56

Slide 31

Slide 31 text

Kivy - Core Providers Providers / Interfaces for: #kivy Image, Font Rendering, Window, Video, Audio, Camera, Clipboard, Spelling, etc. Load/process/store/render accessible to Python and/or GL Allows swapping out Dependencies Makes porting / supporting new platforms easier · · · · 31/56

Slide 32

Slide 32 text

Kivy - Develop once... Develop & test on workstation, deploy to mobile...(not emulated) #kivy Linux, OSX, Windows Android, iOS Raspberry Pi · · · 32/56

Slide 33

Slide 33 text

Kivy - And a _lot_ more #kivy Metrics (px, pt, mm, cm, sp, dp) Modules: screen, inspector, ... Garden: user widget library · · · 33/56

Slide 34

Slide 34 text

Android - Python-for-android Goals: make compilation for Android easier. #kivy Compile Python and others modules to ARM Provide a build.py script to assemble your Application into an APK · · 34/56

Slide 35

Slide 35 text

Android - Python-for-android Install the prerequisites Setup the environment #kivy Android SDK Android NDK · · s u d o a p t - g e t i n s t a l l b u i l d - e s s e n t i a l g i t - c o r e c c a c h e a n t p y t h o n - p i p p y t h o n - d e v p i p i n s t a l l - - u p g r a d e c y t h o n e x p o r t A N D R O I D S D K = " / h o m e / t i t o / c o d e / a n d r o i d / a n d r o i d - s d k - l i n u x " e x p o r t A N D R O I D N D K = " / h o m e / t i t o / c o d e / a n d r o i d / a n d r o i d - n d k - r 8 e " e x p o r t A N D R O I D N D K V E R = r 8 e e x p o r t A N D R O I D A P I = 2 1 e x p o r t P A T H = $ A N D R O I D N D K : $ A N D R O I D S D K / t o o l s : $ A N D R O I D S D K / p l a t f o r m - t o o l s / : $ P A T H B A S H 35/56

Slide 36

Slide 36 text

Android - Python-for-android Compile the toolchain #kivy $ g i t c l o n e g i t : / / g i t h u b . c o m / k i v y / p y t h o n - f o r - a n d r o i d $ c d p y t h o n - f o r - a n d r o i d $ . / d i s t r i b u t e . s h - m ' k i v y ' . . . l o t o f s t u f f h a p p e n . . . m a y b e a n e r r o r b e c a u s e y o u m i s s e d s o m e p r e r e q u i s i t e s A l l d o n e ! B A S H 36/56

Slide 37

Slide 37 text

Android - Python-for-android Package your application #kivy $ c d d i s t / d e f a u l t $ . / b u i l d . p y - - n a m e ' T o u c h t r a c e r ' - - p a c k a g e o r g . t e s t . t o u c h t r a c e r \ - - v e r s i o n 1 . 0 - - p r i v a t e ~ / c o d e / k i v y / e x a m p l e s / d e m o / t o u c h t r a c e r / \ d e b u g $ a d b i n s t a l l - r b i n / T o u c h t r a c e r - 1 . 0 - d e b u g . a p k $ a d b l o g c a t . . . d e m o t i m e . B A S H 37/56

Slide 38

Slide 38 text

Android - Python-for-android Limitations Available recipes: android audiostream cymunk docutils ffmpeg hostpython jpeg kivy libxml2 libxslt lxml mysql_connector numpy openssl paramiko pil png pyasn1 pycrypto pygame pyjnius pylibpd pyopenssl pyqrcode python sdl setuptools sqlite3 twisted txws wokkel zope #kivy Pure python module need to be copied into the application Python extensions require a recipes.. and sometimes patches. · · 38/56

Slide 39

Slide 39 text

iOS - Kivy-iOS Different organization than python-for-android But that's the same steps: #kivy Compile the toolchain Create a Xcode project for your application · · 39/56

Slide 40

Slide 40 text

iOS - Kivy-iOS Compile the toolchain #kivy $ g i t c l o n e g i t : / / g i t h u b . c o m / k i v y / k i v y - i o s $ c d k i v y - i o s $ t o o l s / b u i l d - a l l . s h B A S H 40/56

Slide 41

Slide 41 text

iOS - Kivy-iOS Create the XCode project #kivy $ t o o l s / c r e a t e - x c o d e - p r o j e c t . s h t o u c h t r a c e r \ ~ / c o d e / k i v y / e x a m p l e s / d e m o / t o u c h t r a c e r $ o p e n a p p - t o u c h t r a c e r / t o u c h t r a c e r . x c o d e p r o j B A S H 41/56

Slide 42

Slide 42 text

Android / iOS toolchain I don't like them It can be better It can be smarter #kivy 42/56

Slide 43

Slide 43 text

Buildozer #kivy 43/56

Slide 44

Slide 44 text

Buildozer #kivy Unified specification file named buildozer.spec Install all the prerequisites (Android NDK, SDK, Cython...) Compile the toolchain Install the pure-python module in a virtualenv Copy the virtualenv into your application Patch your main.py to include the virtualenv Create the package (APK, IPA...) Deploy on 1 or multiple devices Run the application on the device Tail the logs from the device to your console · · · · · · · · · · 44/56

Slide 45

Slide 45 text

Buildozer #kivy $ b u i l d o z e r i n i t $ b u i l d o z e r a n d r o i d d e b u g d e p l o y r u n l o g c a t # o r s e t a d e f a u l t $ b u i l d o z e r s e t d e f a u l t a n d r o i d d e b u g d e p l o y r u n l o g c a t $ b u i l d o z e r # o r e x e c u t e i n a r e m o t e s s h d e v i c e $ b u i l d o z e r - r e m o t e 1 9 2 . 1 6 8 . x . x i o s d e b u g d e p l o y r u n B A S H 45/56

Slide 46

Slide 46 text

Buildozer #kivy 46/56

Slide 47

Slide 47 text

Accessing mobile API PyJNIus - Access Java classes from Python PyOBJus - Access Objective-C from Python #kivy Works on Desktop and Android It uses JNI / Java reflection · · It uses Objective C reflection (Still in progress, doesn't work) · · 47/56

Slide 48

Slide 48 text

Accessing mobile API: PyJNIus Using Text-To-Speech: Make your phone say "Hello World" #kivy f r o m j n i u s i m p o r t a u t o c l a s s L o c a l e = a u t o c l a s s ( ' j a v a . u t i l . L o c a l e ' ) P y t h o n A c t i v i t y = a u t o c l a s s ( ' o r g . r e n p y . a n d r o i d . P y t h o n A c t i v i t y ' ) T e x t T o S p e e c h = a u t o c l a s s ( ' a n d r o i d . s p e e c h . t t s . T e x t T o S p e e c h ' ) t t s = T e x t T o S p e e c h ( P y t h o n A c t i v i t y . m A c t i v i t y , N o n e ) t t s . s e t L a n g u a g e ( L o c a l e . U S ) t t s . s p e a k ( ' H e l l o W o r l d . ' , T e x t T o S p e e c h . Q U E U E _ F L U S H , N o n e ) t t s . s e t L a n g u a g e ( L o c a l e . I T A L Y ) t t s . s p e a k ( ' B u o n g i o r n o s i g n o r e ' , T e x t T o S p e e c h . Q U E U E _ F L U S H , N o n e ) P Y T H O N 48/56

Slide 49

Slide 49 text

Accessing mobile API: PyJNIus One step further: implement Java class in Python! (wip). #kivy c l a s s G p s L i s t e n e r ( P y t h o n J a v a C l a s s ) : _ _ j a v a i n t e r f a c e s _ _ = [ ' a n d r o i d / l o c a t i o n / L o c a t i o n L i s t e n e r ' ] @ j a v a _ m e t h o d ( ' ( L a n d r o i d / l o c a t i o n / L o c a t i o n ; ) ' ) d e f o n L o c a t i o n C h a n g e d ( s e l f , l o c a t i o n ) : p r i n t ' l a t ' , l o c a t i o n . g e t L a t i t u d e ( ) p r i n t ' l o n ' , l o c a t i o n . g e t L o n g i t u d e ( ) L o c a t i o n M a n a g e r = a u t o c l a s s ( ' a n d r o i d . l o c a t i o n . L o c a t i o n M a n a g e r ' ) P y t h o n A c t i v i t y = a u t o c l a s s ( ' o r g . r e n p y . a n d r o i d . P y t h o n A c t i v i t y ' ) C o n t e x t = a u t o c l a s s ( ' a n d r o i d . c o n t e n t . C o n t e x t ' ) l o c a t i o n M a n a g e r = P y t h o n A c t i v i t y . m A c t i v i t y . g e t S y s t e m S e r v i c e ( C o n t e x t . L O C A T I O N _ S E R V I C E ) l o c a t i o n M a n a g e r . r e q u e s t L o c a t i o n U p d a t e s ( L o c a t i o n M a n a g e r . G P S _ P R O V I D E R , 1 0 0 0 0 , 1 0 , G p s L i s t e n e r ( ) ) P Y T H O N 49/56

Slide 50

Slide 50 text

Accessing mobile API: Plyer Goal: Platform-independant wrapper for python, for platform-dependant apis Accessing easily to accelerometer, gps, camera, etc. Started this week! #kivy f r o m p l y e r i m p o r t n o t i f i c a t i o n n o t i f i c a t i o n . n o t i f y ( t i t l e = ' H e l l o ' , m e s s a g e = ' W o r l d ' ) P Y T H O N 50/56

Slide 51

Slide 51 text

Google Summer of Code This year, we are under the Umbrella of PSF. 2 students are working on Kivy: #kivy Abhinav: Working on Kivy Designer Ivan Pusic: Making PyOBJus a reality · · 51/56

Slide 52

Slide 52 text

Funding PSF granted $5,000 USD to Kivy project for porting Kivy and all the subprojects to Python 3.3 ➔ Done in master, same basecode for 2.7 and 3.3 ➔ Next version will be Python 3.3 ready :) Thank you PSF! #kivy 52/56

Slide 53

Slide 53 text

Funding We asked $600 USD to run Kivy on Raspberry Pi from Bounty Source We got funded in 5 days ! ➔ POC done and released in 1.7.0 The next step was $1,000 USD for doing a POC with ANGLE on Windows. It's still under progress. Thank you backers! #kivy 53/56

Slide 54

Slide 54 text

Specials thanks Akshay Aurora & Gabriel Pettier #kivy 54/56

Slide 55

Slide 55 text

Sprint Saturday and Sunday! Come and hack on #kivy. #kivy 55/56

Slide 56

Slide 56 text

Thank you @mathieuvirbel Like it? Tweet it with #kivy Tip me: gittip.com/tito #kivy 56/56