Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine

Jens Klein
Jens KleinSoftware Developer and self employed consultant at BlueDynamics Alliance
3. Deutsche
Python-Konferenz
Köln 2013

Schlangenhochzeit
in der Wolke
Python / Pyramid
auf Googles Appengine

Jens W. Klein
jk@kleinundpartner.at
http://kleinundpartner.at
16.10.2013
1 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Quelle: Internet
http://www.focus.de/fotos/bei-einer-symbolischen-schlangenhochzeit-hoffen-bewohner-eines_mid_809519.html

2 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
3 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
4 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
5 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
6 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
●

Startup Unternehmen mit Sitz in Innsbruck

●

Location based Games

●

gefördert durch die FFG (Östereichische
Forschungs-Förderungs-Gesellschaft) von
1/2012 bis 6/2013

●

4 Gesellschafter

●

KUP: Gesellschafter seit 11/2012

●

KUP-Aufgaben: Projektmanagement,
Development Support, Portalumsetzung
7 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
8 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Anforderungen
1
●

●

Entwicklung eines Mixed Reality Media Formats
für Location based Games.
Entwicklung eines MRM-Players für
Smartphones
–
–

HTML5/Javascript basiert

–

●

100% Offline-fähig
Native App stellt nur Laufzeitumgebung zur
Verfügung

Entwicklung eines Editors für das MRM-Format

9 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Anforderungen
2
●

Entwicklung eines Portals für eine wachsende
Locandy-Community für
–
–

●

Spieler und Autoren,
kommerzielle Kunden und Werbetreibende.

das Portal soll
–

skalierbar sein,

–

verfügbar sein und

–

kaum Personalaufwand für Hosting verursachen.

10 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Anatomie
Suche

Appengine
Google Cloud

Android/ iOS (native)

Download
PORTAL

APP
Spielergebnis

Browser
HTML5
Javascript

Apache Cordova Webview
+ Plugins

Editor

Player
Spiel

Player
Vorschau

11 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
12 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Google Appengine
1: Google sagt
●

●

●

wird bei größter Belastung und hohen
Datenmengen zuverlässig ausgeführt wird.
Automatische Skalierung und Lastenausgleich
Eine lokale Entwicklungsumgebung mit allen
Funktionen, die Google App Engine auf Ihrem
Computer simuliert

●

Aufgaben-Queue außerhalb einer Webanfrage

●

Cron-Job-ähnliche Zeit/ Intervall Aufgaben

●

https://developers.google.com/appengine/docs/
whatisgoogleappengine?hl=de
13 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Google Appengine
2
●

Cloud Plattform von Google seit 2008

●

Applikationen laufen in einer Sandkiste

●

Programmiersprachen:
–

Python - erste unterstützte Sprache

–

Java - häufigst genutzte Sprache

–

Go - Google Eigenentwicklung, Nische

–

PHP - erst seit wenigen Monaten

14 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Google Appengine
3
●

eingeschränkter Funktionsumfang der Sprache
–

–

Laden von externen URLs über eigene API/Dienst

–

●

Mail muss über eigene API/Dienst verschickt
werden

–

●

keine Egg-Unterstützung, Sockets, Tempfiles,
Dateisystem nur RO

keine Python C-Erweiterungen möglich

Blobstorage/ Google Cloudstorage erfordert
spezielle Handhabung von Binärdaten
eigene Objekt-Datenbank
15 von 36

...uvm.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
16 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid
1
●

FOSS Python Webframework

●

Ausgewähltes Bestes aus der Welt von
–
–

Django,

–

●

Zope,

–

●

Pylons,

und einigen anderen Inspirationen.

Der Kern ist Minimal, nur wenige Vorgaben,
dafür viele Add-Ons um verschiedene Ziele zu
erreichen.
17 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid
2
●

Die Qual der Wahl
–

Urlmatch oder Traversal? Oder beides?

–

Datenbank relational oder objektorientiert?

–

Mako, Chameleon-ZPT, Jinja oder was als
Template-Sprache?

–

Welche Art von Authentifizierung und
Authorisierung?

–

Strukturierung des Projektes nach Layern, nach
Fachklassen oder wie sonst?

–

...?
18 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid
3
●

●

●

●

●

Pyramid ist komplett Komponenten basiert,
verwendet Zope Kompenenten Archiktektur,
aber versteckt sie für den Otto-NormalProgrammmierer.
Es gibt viele fertige Komponenten, die einem
das Leben leicht machen,
und es werden ständig mehr!
Hinter Pyramid steht eine noch kleine aber sehr
lebendige Community.
19 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
20 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Hochzeit
Pyramid mit Appengine
●

Pfarrer ist zc.buildout

●

collective.recipe.appengine spielt die Musik
–

noch unreleased, code auf github

–

Fork von eingeschlafenem Projekt
appfy.recipe.appengine

–

wir lieben Pull-Requests!

–

automatische Installion von Appengine SDK, Tools
und Development Server,

–

mixt aus Eggs eine Baumstruktur.

21 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
├──
│  
│  
│  
│  
│  
│  
│  
├──
├──
├──
├──
└──
  
  
  
  
  
  
  

app
├──
├──
├──
├──
├──
└──

Pyramid mit
zc.buildout auf appengine
app.yaml
1: Struktur vor buildout
gaefixes.py

main.py
pkg_resources.py
Python Wurzel
settings.yaml
aus Sicht der Appengine
static
├── [... css, png, jpg, ...]
bootstrap.py
buildout.cfg
versions.cfg
ab hier Egg-Struktur
gaetools.cfg
source
└── example_app
├── setup.cfg
ab hier example_app,
├── setup.py
Wurzel aus Sicht
└── src
von Python
└── example_app
├── __init__.py
├── [...] 22 von 36
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
2: Beispiel Code

Aller Code und Buildout lauffähig auf
http://github.com/jensens/pyramid-gae-tutorial

23 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
3: buildout laufen lassen
●

Python 2.7

●

Virtual-Env größer Version 1.9

$ cd path/to/buildout
$ virtualenv --no-site-packages 
--no-setuptools --clear .
$ ./bin/python2.7 bootstrap.py
$ ./bin/buildout

24 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
4: nach dem Lauf
●

●

●

●

●

./bin enthält dev_appserver und viele andere
tools, jedoch nicht alle benötigt in der
Appengine,
./app/distlib enthält Eggs in Baum aufgelöst
./app/example_app ist symbolischer Link auf
die Python Wurzel der Beispiel App,
./parts/appengine_sdk enthält das offizielle
Google Appengine SDK,
./var ist angelegt, dort wird die Datenbank der
Entwicklungsumgebung abgelegt.
25 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
5: dev_appserver starten
●

●

●

●

./bin/dev_appserver startet den
Entwicklungsserver
die App läuft per default auf
http://localhost:8080
die Admin-Benutzeroberfläche läuft auf
http://localhost:9000
die Einstellungen für den dev_appserver werden
aus der Datei ./gaetools.cfg eingelesen.

26 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
27 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Kommunikation in der Ehe
GAEFixes
●

Fixes/ Monkeypatches sind leider tw. notwendig

●

müssen als erstes im main.py geladen werden

●

sys.path anpassen

●

●

●

pkg_resources im Entwicklermodus: Appengine
import_hook registrieren
chameleon zpt im Entwicklermodus: Patchen
des Debug Lade-Modus, da keine Tempfiles
erlaubt sind.
zudem evtl. Library spezifische Hacks.
28 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Initialisierung der
Pyramid App
●

●

●

●

●

settings.yaml enthält Pyramid- und AppEinstellungen Google-mäßig als YAML
(normalerweise in Pyramid im INI-Format),
main.py wie für normale WSGI-Anwendungen
und stellt hier Pyramid application Objekt zur
Verfügung,
main.application ist in appengine config file
app.yaml für alle Anfragen registriert,
statische Ressourcen können direkt via
Appengine Routing ausgeliefert werden.
29 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
30 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Debugging Probleme und
der Wert des Testens
●

pdb funktioniert im dev_appserver nicht!

●

print funktioniert nicht (aber logging geht),

●

●

●

scheinbar gibt es Remote-Debugging hooks
-> noch nicht ausprobiert,
-> kompliziert einzurichten,
-> nur für Eclipse, evtl. andere IDEs möglich;
pdb in Tests funktioniert, ipdb (ipython)
funktionert in Tests.
interlude interaktive Konsole für Doctests
funktioniert (inkl. ipython).
31 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Test getriebene
Entwicklung
●

Appengine bietet Funktionen um verschiedene
Teile der Laufzeitumgebung zu starten und
stoppen (Datastore, Blobstore, Memcache usw.),

●

Test/Testumgebung muss diese verwenden,

●

Nose-Tests: nosegae ! -> nicht lauffähig

●

eigenen Testrunner geschrieben, zu unflexibel

●

●

schließlich zope.testrunner mit Appengine
verheiratet
dann plone.testing Test-Layers integriert
32 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Tests in Schichten
plone.testing + zope.testrunner
●

●

●

●

●

Layers werden für Test Fixtures (Test
Ausstattungen) genutzt, die von mehreren TestFällen gemeinsam genutzt werden,
vereinfacht/ vereinheitlicht Setup/ Teardown
Aufteilung z.B. pure Python Tests, Tests mit
Datenbank, Tests gegen Webserver, ...,
bzw.: Unit-Test, Functional-Tests und IntegrationTests,
bei sehr vielen Tests schnellere Ausführung.
33 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Test-Beispiel
1: mit Datenbank, ohne Webtest
creating a first node::
>>> from example_app import models
>>> node = models.create_node('test1',
...
'Test One', 'This is a first test.')
>>> node
TreeModel(key=Key('TreeModel', 'test1'),
body=u'This is a first test.', title=u'Test One')

trying to create a node that already exists raises ValueError::
>>> node = models.create_node('test1', 'X', 'X')
Traceback (most recent call last):
...
ValueError: node with name test1 already exists

34 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Test-Beispiel
2: mit Datenbank und Webtest
>>> node = models.create_node('test1', 'Test One',
...
'This is a first test.')
>>> node
TreeModel(key=Key('TreeModel', 'test1'),
body=u'This is a first test.', title=u'Test One')

>>> response = layer.webtest.get('/test1')
>>> 'Test One' in response
True
>>> 'This is a first test.' in response
True

>>> response = layer.webtest.get('/nonexistent',
...
status='404', expect_errors=True)
>>> response.status
'404 Not Found'
35 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
36 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
1 of 36

Recommended

Ausfallsichere Kultur mit Plone by
Ausfallsichere Kultur mit PloneAusfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneJens Klein
1.3K views33 slides
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth by
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang BarthNETWAYS
52 views30 slides
TYPO3 Dokumentation mit ReStructuredText by
TYPO3 Dokumentation mit ReStructuredTextTYPO3 Dokumentation mit ReStructuredText
TYPO3 Dokumentation mit ReStructuredTextPeter Linzenkirchner
2.6K views24 slides
Openshift by
OpenshiftOpenshift
Openshiftstorminator
494 views4 slides
HTML5 und CSS3 - was jetzt schon möglich ist by
HTML5 und CSS3 - was jetzt schon möglich istHTML5 und CSS3 - was jetzt schon möglich ist
HTML5 und CSS3 - was jetzt schon möglich istRenate Hermanns
3.4K views41 slides
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core by
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
212 views194 slides

More Related Content

Viewers also liked

Retículas para pantalla by
Retículas para pantallaRetículas para pantalla
Retículas para pantallacamilolinares23
574 views14 slides
Smile graphies by
Smile graphiesSmile graphies
Smile graphiesguillelmanso
236 views7 slides
Share point server 2007 by
Share point server 2007Share point server 2007
Share point server 2007Cindy Jimenez
352 views9 slides
pourquoi-programme-formation-tourisme-limousin-20130404 by
pourquoi-programme-formation-tourisme-limousin-20130404pourquoi-programme-formation-tourisme-limousin-20130404
pourquoi-programme-formation-tourisme-limousin-20130404Florent Guitard
878 views32 slides
e-business by
e-businesse-business
e-businesslilianchis
670 views39 slides

Viewers also liked(20)

pourquoi-programme-formation-tourisme-limousin-20130404 by Florent Guitard
pourquoi-programme-formation-tourisme-limousin-20130404pourquoi-programme-formation-tourisme-limousin-20130404
pourquoi-programme-formation-tourisme-limousin-20130404
Florent Guitard878 views
Die 5 Ebenen Barriererfreier Web Entwicklung by Dirk Ginader
Die 5 Ebenen Barriererfreier Web EntwicklungDie 5 Ebenen Barriererfreier Web Entwicklung
Die 5 Ebenen Barriererfreier Web Entwicklung
Dirk Ginader1.3K views
Wer ist ein Heiliger? by SSRF Inc.
Wer ist ein Heiliger?Wer ist ein Heiliger?
Wer ist ein Heiliger?
SSRF Inc.2.1K views
Mes vacances à bahamas! by akkornack
Mes vacances à bahamas!Mes vacances à bahamas!
Mes vacances à bahamas!
akkornack1.3K views
Contrato Ilegal Portovelo Prov del Oro por Municipio by marcosgabo
Contrato Ilegal Portovelo Prov del Oro por MunicipioContrato Ilegal Portovelo Prov del Oro por Municipio
Contrato Ilegal Portovelo Prov del Oro por Municipio
marcosgabo522 views
Presentation1 by giratina12
Presentation1Presentation1
Presentation1
giratina12240 views
Haute couture by M-droid
Haute coutureHaute couture
Haute couture
M-droid299 views
Association Sorbonne Innovation & Technologie by Sorbonne Imt
Association Sorbonne Innovation & TechnologieAssociation Sorbonne Innovation & Technologie
Association Sorbonne Innovation & Technologie
Sorbonne Imt2.4K views

Similar to Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine

WhereGroup Firmenprofil by
WhereGroup FirmenprofilWhereGroup Firmenprofil
WhereGroup FirmenprofilArnulf Christl
485 views23 slides
Einstieg in Xamarin und Xamarin.Forms, DDC 2018 by
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018André Krämer
232 views85 slides
Software-Entwicklung, Entwicklung von Handy-Apps, Technologietrends by
Software-Entwicklung, Entwicklung von Handy-Apps, TechnologietrendsSoftware-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
Software-Entwicklung, Entwicklung von Handy-Apps, TechnologietrendsAndreas Bruns
3.5K views16 slides
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft... by
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...NETWAYS
52 views30 slides
Das ist Open Source by
Das ist Open SourceDas ist Open Source
Das ist Open SourceAlexander Schmidt
732 views61 slides
Die wichtigsten Technologien für die Entwicklung von Webanwendungen by
Die wichtigsten Technologien für die Entwicklung von WebanwendungenDie wichtigsten Technologien für die Entwicklung von Webanwendungen
Die wichtigsten Technologien für die Entwicklung von WebanwendungenYUHIRO
179 views12 slides

Similar to Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine(20)

Einstieg in Xamarin und Xamarin.Forms, DDC 2018 by André Krämer
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
André Krämer232 views
Software-Entwicklung, Entwicklung von Handy-Apps, Technologietrends by Andreas Bruns
Software-Entwicklung, Entwicklung von Handy-Apps, TechnologietrendsSoftware-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
Software-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
Andreas Bruns3.5K views
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft... by NETWAYS
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
NETWAYS52 views
Die wichtigsten Technologien für die Entwicklung von Webanwendungen by YUHIRO
Die wichtigsten Technologien für die Entwicklung von WebanwendungenDie wichtigsten Technologien für die Entwicklung von Webanwendungen
Die wichtigsten Technologien für die Entwicklung von Webanwendungen
YUHIRO179 views
Django nutshell overview by schacki
Django nutshell overviewDjango nutshell overview
Django nutshell overview
schacki1.2K views
Ueberlegungen Projektmanagement Web Applications by Günther Haslbeck
Ueberlegungen Projektmanagement Web ApplicationsUeberlegungen Projektmanagement Web Applications
Ueberlegungen Projektmanagement Web Applications
Günther Haslbeck1.7K views
Django trifft Flutter by roskakori
Django trifft FlutterDjango trifft Flutter
Django trifft Flutter
roskakori48 views
GitLab als alternative Entwicklungsplattform zu Github.com by B1 Systems GmbH
GitLab als alternative Entwicklungsplattform zu Github.comGitLab als alternative Entwicklungsplattform zu Github.com
GitLab als alternative Entwicklungsplattform zu Github.com
B1 Systems GmbH1K views
Ionic 2 - Hybridapps auf Steroiden by Hendrik Lösch
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
Hendrik Lösch506 views
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr by Gunther Pippèrr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Gunther Pippèrr1.2K views
TYPO3 Usergroup Dresden - TYPO3 & Composer by Axel Böswetter
TYPO3 Usergroup Dresden - TYPO3 & ComposerTYPO3 Usergroup Dresden - TYPO3 & Composer
TYPO3 Usergroup Dresden - TYPO3 & Composer
Axel Böswetter534 views
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren by team-WIBU
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzierenPlattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
team-WIBU298 views
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen by Bjoern Reinhold
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Bjoern Reinhold418 views
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-... by Gordon Breuer
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...
Gordon Breuer741 views
Neues aus der TYPO3 Welt 10/2018 by Kai Unterberg
Neues aus der TYPO3 Welt 10/2018Neues aus der TYPO3 Welt 10/2018
Neues aus der TYPO3 Welt 10/2018
Kai Unterberg52 views
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen by Bjoern Reinhold
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Bjoern Reinhold550 views

More from Jens Klein

RelStorage Plone Zope RDB Storage Backend by
RelStorage Plone Zope RDB Storage BackendRelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage BackendJens Klein
135 views10 slides
Plone Performance, Profiling, Power-Consumption by
Plone Performance, Profiling, Power-ConsumptionPlone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-ConsumptionJens Klein
210 views16 slides
RelStorage - an alternative ZODB Backend by
RelStorage - an alternative ZODB BackendRelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB BackendJens Klein
670 views14 slides
Big Fat FastPlone - Scale up, speed up by
Big Fat FastPlone - Scale up, speed upBig Fat FastPlone - Scale up, speed up
Big Fat FastPlone - Scale up, speed upJens Klein
815 views40 slides
YAFOWIL - Webformulare in Python ohne Kopfschmerzen by
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenJens Klein
1.8K views11 slides
FISE Integration with Python and Plone by
FISE Integration with Python and PloneFISE Integration with Python and Plone
FISE Integration with Python and PloneJens Klein
683 views14 slides

More from Jens Klein(13)

RelStorage Plone Zope RDB Storage Backend by Jens Klein
RelStorage Plone Zope RDB Storage BackendRelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage Backend
Jens Klein135 views
Plone Performance, Profiling, Power-Consumption by Jens Klein
Plone Performance, Profiling, Power-ConsumptionPlone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-Consumption
Jens Klein210 views
RelStorage - an alternative ZODB Backend by Jens Klein
RelStorage - an alternative ZODB BackendRelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB Backend
Jens Klein670 views
Big Fat FastPlone - Scale up, speed up by Jens Klein
Big Fat FastPlone - Scale up, speed upBig Fat FastPlone - Scale up, speed up
Big Fat FastPlone - Scale up, speed up
Jens Klein815 views
YAFOWIL - Webformulare in Python ohne Kopfschmerzen by Jens Klein
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
Jens Klein1.8K views
FISE Integration with Python and Plone by Jens Klein
FISE Integration with Python and PloneFISE Integration with Python and Plone
FISE Integration with Python and Plone
Jens Klein683 views
Plone is so semantic, isn't it? by Jens Klein
Plone is so semantic,  isn't it?Plone is so semantic,  isn't it?
Plone is so semantic, isn't it?
Jens Klein2.1K views
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009 by Jens Klein
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
Jens Klein587 views
cornerstone.soup Lighning Talk on Plone Conference 2009 by Jens Klein
cornerstone.soup Lighning Talk on Plone Conference 2009cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009
Jens Klein596 views
Was ist Plone? by Jens Klein
Was ist Plone?Was ist Plone?
Was ist Plone?
Jens Klein563 views
Projekte mit Plone by Jens Klein
Projekte mit PloneProjekte mit Plone
Projekte mit Plone
Jens Klein739 views
Plone - Community, Entwicklung, Support by Jens Klein
Plone - Community, Entwicklung, SupportPlone - Community, Entwicklung, Support
Plone - Community, Entwicklung, Support
Jens Klein739 views
Plone Conference 2007 Naples: Lightning Talk Daidalos by Jens Klein
Plone Conference 2007 Naples: Lightning Talk DaidalosPlone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk Daidalos
Jens Klein551 views

Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine

  • 1. 3. Deutsche Python-Konferenz Köln 2013 Schlangenhochzeit in der Wolke Python / Pyramid auf Googles Appengine Jens W. Klein jk@kleinundpartner.at http://kleinundpartner.at 16.10.2013 1 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 2. Quelle: Internet http://www.focus.de/fotos/bei-einer-symbolischen-schlangenhochzeit-hoffen-bewohner-eines_mid_809519.html 2 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 3. 3 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 4. 4 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 5. 5 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 6. 6 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 7. ● Startup Unternehmen mit Sitz in Innsbruck ● Location based Games ● gefördert durch die FFG (Östereichische Forschungs-Förderungs-Gesellschaft) von 1/2012 bis 6/2013 ● 4 Gesellschafter ● KUP: Gesellschafter seit 11/2012 ● KUP-Aufgaben: Projektmanagement, Development Support, Portalumsetzung 7 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 8. 8 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 9. Anforderungen 1 ● ● Entwicklung eines Mixed Reality Media Formats für Location based Games. Entwicklung eines MRM-Players für Smartphones – – HTML5/Javascript basiert – ● 100% Offline-fähig Native App stellt nur Laufzeitumgebung zur Verfügung Entwicklung eines Editors für das MRM-Format 9 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 10. Anforderungen 2 ● Entwicklung eines Portals für eine wachsende Locandy-Community für – – ● Spieler und Autoren, kommerzielle Kunden und Werbetreibende. das Portal soll – skalierbar sein, – verfügbar sein und – kaum Personalaufwand für Hosting verursachen. 10 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 11. Anatomie Suche Appengine Google Cloud Android/ iOS (native) Download PORTAL APP Spielergebnis Browser HTML5 Javascript Apache Cordova Webview + Plugins Editor Player Spiel Player Vorschau 11 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 12. 12 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 13. Google Appengine 1: Google sagt ● ● ● wird bei größter Belastung und hohen Datenmengen zuverlässig ausgeführt wird. Automatische Skalierung und Lastenausgleich Eine lokale Entwicklungsumgebung mit allen Funktionen, die Google App Engine auf Ihrem Computer simuliert ● Aufgaben-Queue außerhalb einer Webanfrage ● Cron-Job-ähnliche Zeit/ Intervall Aufgaben ● https://developers.google.com/appengine/docs/ whatisgoogleappengine?hl=de 13 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 14. Google Appengine 2 ● Cloud Plattform von Google seit 2008 ● Applikationen laufen in einer Sandkiste ● Programmiersprachen: – Python - erste unterstützte Sprache – Java - häufigst genutzte Sprache – Go - Google Eigenentwicklung, Nische – PHP - erst seit wenigen Monaten 14 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 15. Google Appengine 3 ● eingeschränkter Funktionsumfang der Sprache – – Laden von externen URLs über eigene API/Dienst – ● Mail muss über eigene API/Dienst verschickt werden – ● keine Egg-Unterstützung, Sockets, Tempfiles, Dateisystem nur RO keine Python C-Erweiterungen möglich Blobstorage/ Google Cloudstorage erfordert spezielle Handhabung von Binärdaten eigene Objekt-Datenbank 15 von 36 ...uvm. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 16. 16 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 17. Pyramid 1 ● FOSS Python Webframework ● Ausgewähltes Bestes aus der Welt von – – Django, – ● Zope, – ● Pylons, und einigen anderen Inspirationen. Der Kern ist Minimal, nur wenige Vorgaben, dafür viele Add-Ons um verschiedene Ziele zu erreichen. 17 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 18. Pyramid 2 ● Die Qual der Wahl – Urlmatch oder Traversal? Oder beides? – Datenbank relational oder objektorientiert? – Mako, Chameleon-ZPT, Jinja oder was als Template-Sprache? – Welche Art von Authentifizierung und Authorisierung? – Strukturierung des Projektes nach Layern, nach Fachklassen oder wie sonst? – ...? 18 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 19. Pyramid 3 ● ● ● ● ● Pyramid ist komplett Komponenten basiert, verwendet Zope Kompenenten Archiktektur, aber versteckt sie für den Otto-NormalProgrammmierer. Es gibt viele fertige Komponenten, die einem das Leben leicht machen, und es werden ständig mehr! Hinter Pyramid steht eine noch kleine aber sehr lebendige Community. 19 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 20. 20 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 21. Hochzeit Pyramid mit Appengine ● Pfarrer ist zc.buildout ● collective.recipe.appengine spielt die Musik – noch unreleased, code auf github – Fork von eingeschlafenem Projekt appfy.recipe.appengine – wir lieben Pull-Requests! – automatische Installion von Appengine SDK, Tools und Development Server, – mixt aus Eggs eine Baumstruktur. 21 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 22. ├── │   │   │   │   │   │   │   ├── ├── ├── ├── └──                      app ├── ├── ├── ├── ├── └── Pyramid mit zc.buildout auf appengine app.yaml 1: Struktur vor buildout gaefixes.py main.py pkg_resources.py Python Wurzel settings.yaml aus Sicht der Appengine static ├── [... css, png, jpg, ...] bootstrap.py buildout.cfg versions.cfg ab hier Egg-Struktur gaetools.cfg source └── example_app ├── setup.cfg ab hier example_app, ├── setup.py Wurzel aus Sicht └── src von Python └── example_app ├── __init__.py ├── [...] 22 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 23. Pyramid mit zc.buildout auf appengine 2: Beispiel Code Aller Code und Buildout lauffähig auf http://github.com/jensens/pyramid-gae-tutorial 23 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 24. Pyramid mit zc.buildout auf appengine 3: buildout laufen lassen ● Python 2.7 ● Virtual-Env größer Version 1.9 $ cd path/to/buildout $ virtualenv --no-site-packages --no-setuptools --clear . $ ./bin/python2.7 bootstrap.py $ ./bin/buildout 24 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 25. Pyramid mit zc.buildout auf appengine 4: nach dem Lauf ● ● ● ● ● ./bin enthält dev_appserver und viele andere tools, jedoch nicht alle benötigt in der Appengine, ./app/distlib enthält Eggs in Baum aufgelöst ./app/example_app ist symbolischer Link auf die Python Wurzel der Beispiel App, ./parts/appengine_sdk enthält das offizielle Google Appengine SDK, ./var ist angelegt, dort wird die Datenbank der Entwicklungsumgebung abgelegt. 25 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 26. Pyramid mit zc.buildout auf appengine 5: dev_appserver starten ● ● ● ● ./bin/dev_appserver startet den Entwicklungsserver die App läuft per default auf http://localhost:8080 die Admin-Benutzeroberfläche läuft auf http://localhost:9000 die Einstellungen für den dev_appserver werden aus der Datei ./gaetools.cfg eingelesen. 26 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 27. 27 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 28. Kommunikation in der Ehe GAEFixes ● Fixes/ Monkeypatches sind leider tw. notwendig ● müssen als erstes im main.py geladen werden ● sys.path anpassen ● ● ● pkg_resources im Entwicklermodus: Appengine import_hook registrieren chameleon zpt im Entwicklermodus: Patchen des Debug Lade-Modus, da keine Tempfiles erlaubt sind. zudem evtl. Library spezifische Hacks. 28 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 29. Initialisierung der Pyramid App ● ● ● ● ● settings.yaml enthält Pyramid- und AppEinstellungen Google-mäßig als YAML (normalerweise in Pyramid im INI-Format), main.py wie für normale WSGI-Anwendungen und stellt hier Pyramid application Objekt zur Verfügung, main.application ist in appengine config file app.yaml für alle Anfragen registriert, statische Ressourcen können direkt via Appengine Routing ausgeliefert werden. 29 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 30. 30 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 31. Debugging Probleme und der Wert des Testens ● pdb funktioniert im dev_appserver nicht! ● print funktioniert nicht (aber logging geht), ● ● ● scheinbar gibt es Remote-Debugging hooks -> noch nicht ausprobiert, -> kompliziert einzurichten, -> nur für Eclipse, evtl. andere IDEs möglich; pdb in Tests funktioniert, ipdb (ipython) funktionert in Tests. interlude interaktive Konsole für Doctests funktioniert (inkl. ipython). 31 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 32. Test getriebene Entwicklung ● Appengine bietet Funktionen um verschiedene Teile der Laufzeitumgebung zu starten und stoppen (Datastore, Blobstore, Memcache usw.), ● Test/Testumgebung muss diese verwenden, ● Nose-Tests: nosegae ! -> nicht lauffähig ● eigenen Testrunner geschrieben, zu unflexibel ● ● schließlich zope.testrunner mit Appengine verheiratet dann plone.testing Test-Layers integriert 32 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 33. Tests in Schichten plone.testing + zope.testrunner ● ● ● ● ● Layers werden für Test Fixtures (Test Ausstattungen) genutzt, die von mehreren TestFällen gemeinsam genutzt werden, vereinfacht/ vereinheitlicht Setup/ Teardown Aufteilung z.B. pure Python Tests, Tests mit Datenbank, Tests gegen Webserver, ..., bzw.: Unit-Test, Functional-Tests und IntegrationTests, bei sehr vielen Tests schnellere Ausführung. 33 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 34. Test-Beispiel 1: mit Datenbank, ohne Webtest creating a first node:: >>> from example_app import models >>> node = models.create_node('test1', ... 'Test One', 'This is a first test.') >>> node TreeModel(key=Key('TreeModel', 'test1'), body=u'This is a first test.', title=u'Test One') trying to create a node that already exists raises ValueError:: >>> node = models.create_node('test1', 'X', 'X') Traceback (most recent call last): ... ValueError: node with name test1 already exists 34 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 35. Test-Beispiel 2: mit Datenbank und Webtest >>> node = models.create_node('test1', 'Test One', ... 'This is a first test.') >>> node TreeModel(key=Key('TreeModel', 'test1'), body=u'This is a first test.', title=u'Test One') >>> response = layer.webtest.get('/test1') >>> 'Test One' in response True >>> 'This is a first test.' in response True >>> response = layer.webtest.get('/nonexistent', ... status='404', expect_errors=True) >>> response.status '404 Not Found' 35 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 36. 36 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.

Editor's Notes

  1. Dank Roland, ich möchte jetzt ein wenig in die Welt der Virtualisierung, der Redundanz und des technischen Webpublishings mit Plone eintauchen. Wenn dies für Sie noch Fremdwörter sind bleiben Sie trotzdem sitzen. Ich versuche behutsam die Begriffe zu erklären.