• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Java und Python - Das Beste aus beiden Welten nutzen
 

Java und Python - Das Beste aus beiden Welten nutzen

on

  • 10,184 views

Vortrag auf der Python Users Group Köln (05.10.2009)

Vortrag auf der Python Users Group Köln (05.10.2009)

Statistics

Views

Total Views
10,184
Views on SlideShare
10,086
Embed Views
98

Actions

Likes
2
Downloads
38
Comments
0

4 Embeds 98

http://www.andreas-schreiber.net 75
http://www.slideshare.net 18
http://www.twylah.com 4
http://wiki.python.de 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Java und Python - Das Beste aus beiden Welten nutzen Java und Python - Das Beste aus beiden Welten nutzen Presentation Transcript

    • Java und Python Das Beste aus beiden Welten nutzen Java Users Group Köln (05.10.2009, Köln) Andreas Schreiber <Andreas.Schreiber@dlr.de> Deutsches Zentrum für Luft- und Raumfahrt e.V. http://www.dlr.de/sc
    • Das DLR
      • Das DLR
      • Deutsches Zentrum für Luft- und Raumfahrt
      • Forschungseinrichtung
      • Raumfahrt-Agentur
      • Projektträger
    • Standorte und Personal
      • 6.200 Mitarbeiterinnen und Mitarbeiter arbeiten in 29 Forschungsinstituten und Einrichtungen in
        • 13 Standorten.
      • Büros in Brüssel, Paris und Washington.
       Köln  Lampoldshausen  Stuttgart  Oberpfaffenhofen Braunschweig   Göttingen Berlin -   Bonn Trauen   Hamburg  Neustrelitz Weilheim  Bremen - 
    • Leitbild - Mission
      • Erforschung der Erde und des Sonnensystems, Forschung zum Erhalt der Umwelt, zur Mobilität, zur Gewährleistung der Sicherheit und zur Bearbeitung gesellschaftlicher Fragen im öffentlichen Auftrag
      • Brückenfunktion von Grundlagenforschung und innovativen Anwendungen sowie Transfer von Wissen und Forschungsergebnissen zu Industrie und Politik durch Vermittlung, Beratung sowie Dienstleistungen
      • Gestaltung des deutschen Raumfahrtengagements und internationale Interessenvertretung als hoheitliche Aufgabe
      • Leistung eines signifikanten Beitrags zum Wissenschafts- und Wirtschaftsstandort Deutschland und zum europäischen Wachstumsraum
      • Ausbildung des wissenschaftlichen Nachwuchses zur Steigerung der Innovationsfähigkeit Deutschlands
    • Einrichtung Simulations- und Softwaretechnik
      • Mission:
      • Erarbeitung neuer Software-Technologien und Untersuchung der Relevanz für das DLR
      • Einführung neuer Software-Technologien in DLR-Instituten
      • Entwicklung eigener und Support externer Software-Produkte
      • Forschungsgebiete:
      • Software Engineering, Verteiltes Rechnen, Integration, Daten- und Wissensmanagement, High-Performance Computing, Concurrent Engineering, VR
      • Mitarbeiter: ca. 30
    • Software-Entwicklung im DLR
    • Software-Entwicklung im DLR Größenordnung Über 1000 Mitarbeiter des DLR entwickeln Software DLR ist eines der größten Software-Häuser Deutschlands Das sind >100 Millionen EUR Personalkosten pro Jahr
    • Software-Entwicklungen in Luft- und Raumfahrt Klassifizierung
      • Software für missionskritische Systeme
      • Embedded Software und Real-Time-Software in Flugzeugen, Satelliten, Raumfahrzeugen, …
      • Software mit großen Userzahlen
      • Internet/Intranet/Email, Webshop für Satellitendaten
      • Software zur Unterstützung
      • Prozessunterstützung, Datenmanagement, Modellierungs- und Simulationsumgebungen, …
      • Software deren Effizienz wichtig ist
      • Numerische Simulationscodes
    •  
    • The Right Tool for the Job
    • Java Warum wird Java verwendet?
      • Weite Verbreitung in vielen Anwendungsgebieten
      • Industrie, Forschung, Universitäten
      • Verfügbar auf vielen Plattformen
      • Gute Performance
      • Guter Garbage Collector (kein GIL)
      • Viele viele Bibliotheken
      • z.B. für Datenbankzugriff, XML-Verarbeitung, Report/PDF-Generierung, Security, Benutzeroberflächen
      • Verfügbarkeit guter und umfangreicher Dokumentation für alle Aspekte der Java-Programmierung
      • Sehr gute Entwicklungswerkzeuge
      • Eclipse, NetBeans, IntelliJ IDEA, …
    • Python Warum wird Python verwendet?
      • Sehr leicht zu erlernen und einfach zu benutzen ( = steile Lernkurve )
      • Rapid Application Development ( = kurze Entwicklungszeit )
      • „ Inherent great maintainability“
      def fakultaet(x): if x > 1 : return x * fakultaet(x - 1 ) else: return 1
    • Python in Forschung und Wissenschaft
      • Python ist verbreitet in Forschung und Entwicklung
      • Wissenschaftler und Ingenieure wollen eigentlich keine Software entwickeln sondern ihre Probleme lösen
      • Möglichst schnelles Umsetzen ihrer Ideen in laufenden Code
      • Wenn sie Code schreiben, sollte es so einfach wie möglich sein
      “ I want to design planes, not software!”
    • “ Python has the cleanest, most-scientist- or engineer friendly syntax and semantics. -Paul F. Dubois Paul F. Dubois. Ten good practices in scientific programming. Comp. In Sci. Eng., Jan/Feb 1999, pp.7-11
    • Das Beste aus beiden Welten nutzen Großartige Libraries und Tool- Unterstützung Unschlagbar leicht zu erlernende Sprach-Syntax
    • Das Beste aus beiden Welten nutzen Embedded Scripting…
      • Es gibt viel ausgereifte Java-Software
      • Applikationen, Frameworks, Bibliotheken
      • Kommerzielle Software und Open Source Software
      • z.B. Das Eclipse Universum, Apache-Software, Portal-Frameworks, Workflow-Systeme, …
      • Häufig auftretende Use Cases
      • Integration von eingebetteten Skript-Interpretern in Java-Anwendungen
      • Benutzung von Java-Bibliotheken aus Python-Code
    • Das Beste aus beiden Welten nutzen Integration von Python-Code in Java-Anwendungen…
      • Bestimmter Code existiert nur entweder für Java oder Python
      • Aufwand zur Neu-Implementierung kann sehr hoch sein
      • Für bereits sehr gut getestete Bibliotheken ist der Aufwand beträchtlich, ein vergleichbares Qualitätsniveau zu erreichen
      • Häufig auftretende Use Cases
      • Einfach ein Bibliothek in der jeweils „anderen“ Sprache nutzen
      • Spezielle die Nutzung von Python-Code aus Java-Anwendungen
        • Oder C/Fortran/WASAUCHIMMER-Code mit Python-Wrapper
        • Es ist schwieriger, C-Code für Java zu wrappen als für Python
    • Tools zur Python-Java-Integration
    • Tools zur Python-Java-Integration Übersicht
      • Python von Java aus benutzen
      • Jython
      • JEPP
      • Java von Python aus benutzen
      • JPype
      • JCC
      • Interprozess-Kommunikation
      • CORBA
      • SOAP
      • Andere Remote Object Libraries
      Python Interpreter Python Interpreter Java Virtual Machine (JVM) Java Code (Anwendung) JEPP JNI Python Code JPype Jython Python Code Interface/Protokoll Python Code Python Code
    • Nutzung von Python aus Java-Anwendungen
      • Use Cases
      • Die Anwendung soll eingebettete Skripting-Funktionalität haben
      • Die Anwendung soll einen externen Python-Code nutzen
      • Die Applikation soll einen externen Code mit Python-Schnittstelle nutzen
        • C, C++, Fortran, …
      • Tools
      • Jython
      • JEPP
    • Jython
      • Vollständige Neu-Implementierung des Python-Interpreters in 100% Java
      • Python-Code wird in der Java VM ausgeführt
      • Website: http://www.jython.org
      • Letzte Version: Jython 2.5.1 (26.09.2009)
      Java Virtual Machine Jython Python Code Java Application Code
    • Jython Code-Beispiel 1: Java Code
      • Ausführen von Python-Code
      import org.python.util.PythonInterpreter ; import org.python.core.*; class TestClass { public static void main(String[] args) { try { org.python.util.PythonInterpreter python = new org.python.util.PythonInterpreter (); python.execfile( &quot;python_script.py&quot; ); } catch (Exception e) { System.out.println( “Some error!&quot; ); } }
    • Jython Code-Beispiel 2: Python Code
      • Swing
      from javax.swing import * frame = JFrame( &quot;Hello Jython&quot; ) label = JLabel( &quot;Hello Jython!&quot; , JLabel.CENTER) frame.add(label) frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE) frame.setSize( 200 , 100 ) frame.show()
    • JEPP Java Embedded Python
      • Einbettung des CPython-Interpreters über das Java Native Interface (JNI) in Java
      • Python-Code wird im CPython-Interpreter ausgeführt
      • Website: http://jepp.sourceforge.net/
      Python Interpreter Java Virtual Machine Java Application Code Python Code JNI JEPP
    • JEPP Code-Beispiel
      • Ausführen (“evaluate”) von Python-Befehlen
      • Ausführen eines Python-SSkripts
      Jep jep = new Jep(false, SCRIPT_PATH, cl); jep.eval( &quot;print 'hello'&quot; ); jep.close(); Jep jep = new Jep(false, SCRIPT_PATH, cl); jep.runScript(SCRIPT_PATH + file); jep.close();
    • Nutzung von Java aus Python-Anwendungen
      • Use Cases
      • Die Anwendung soll eine externe Java-Applikation nutzen
      • Die Anwendung soll eine Java-Bibliothek nutzen
      • Tools
      • JPype
      • JCC
    • JPype Java to Python Integration
      • Verbindung über die Native Interfaces der Java VM und des Python-Interpreters
      • Startet eine Java Virtual Machine
      • Website: http://jpype.sourceforge.net
      Python Interpreter JNI JPype Python Application Code Java Virtual Machine Java Application Code
    • JPype Code-Beispiel (1)
      • „Hello World“
      from jpype import * # Start JVM startJVM ( path to jvm.dll , &quot;-ea&quot; ) # Print &quot;Hello World&quot; java.lang.System.out.println( &quot;Hello World&quot; ) # Shutdown JVM shutdownJVM()
    • JPype Code-Beispiel (2)
      • Aufruf einer Java-Methode aus Python
      import jpype # Start JVM jpype.startJVM( path to jvm.dll , &quot;-ea&quot; ) # Create reference to java package javaPackage = jpype.JPackage( &quot;JavaPackageName&quot; ) # Create reference to java class javaClass = javaPackage.JavaClassName # Create instance of java class javaObject = javaClass() # Call java methods javaObject.JavaMethodName() # Shutdown JVM jpype.shutdownJVM()
    • JCC PyLucene's Code Generator
      • C++ Code-Generator zum Aufruf von Java aus C++/Python
      • C++ Objekte zum Wrappen von Java-Bibliotheken über JNI
        • Generiert komplette CPython-Extensions
      • Unterstützt werden Mac OS X, Linux, Solaris and Windows
      • C++-Compiler ist notwendig
      • Website: http://lucene.apache.org/pylucene/jcc
        • Teil von PyLucene
      Python Interpreter JNI Python Code Java Virtual Machine Java Application Code pythonExtension() Generated C++ Wrapper Code JCC Code Generator
    • JCC Code-Beispiel
      • Notwendig: Initialisierung einer VM
      import jcc # Start JVM jcc.initVM(maxheap= ‘2000m’ , …)
    • JCC Code-Beispiel Nutzung von PyLucene: Durchsuchen des Lucene Index
      • Suche nach „Query“ in Verzeichnis „index“
      from lucene import QueryParser, IndexSearcher, StandardAnalyzer, FSDirectory, Hit, VERSION, initVM, CLASSPATH initVM(CLASSPATH) directory = FSDirectory.getDirectory( “index” , False) searcher = IndexSearcher(directory) analyzer = StandardAnalyzer() command = raw_input( &quot;Query:&quot; ) query = QueryParser( &quot;contents&quot; , analyzer).parse(command) hits = searcher.search(query) for hit in hits: doc = Hit.cast_(hit).getDocument() print 'path:' , doc.get( &quot;path&quot; ), 'name:', doc.get( &quot;name&quot; ) searcher.close()
    • Interprozess-Kommunikation
      • Interprozess-Kommunikation (IPC)
      • Datenaustausch zwischen unterschiedlichen Prozessen auf einem oder mehreren, über Netzwerk verbundenen, Computerns
      • Typische IPC-Techniken
      • Remote Procedure Calls (RPC)
      • Message Passing
      • Die meist verwendeten APIs
      • Object Request Broker (ORB)
      • Web-Services-Protokolle basierend auf XML
      • Nachteil: Zusätzliche Services sind notwendig
      • z.B. ein Directory Service zur Registrierung und Lokation von entfernten Objekten
        • Naming Service für CORBA
        • Universal Description, Discovery and Integration (UDDI) für Web Services
    • Object Request Broker (ORBs) CORBA Java Virtual Machine Generated Java Code (Stub) Python Interpreter ORB Python Application Code (Server) Generated Python Code (Skeleton) Java Application Code (Client) IDL Compiler IDL
    • CORBA-Implementierungen für Python
      • Fnorb
      • Reine Python-Implementierung, funktioniert mit CPython und Jython
      • Leichtgewichtige CORBA-Implementierung
      • Interoperabel mit dem Standard-ORB von Java
      • Die Entwicklung von Fnorb wurde eingestellt
      • omniORB
      • ORB-Implementierung für C++ und Python, kann von CPython benutzt werden
      • Der Python ORB (omniORBpy) benutzt die C++-Implementierung von omniORB.
      • omniORB wird aktiv weiterentwickelt mit regelmäßigen Releases
      • Website: http://omniorb.sourceforge.net
    • CORBA-Beispiel Interface
      • Hello World Interface in Interface Definition Language (IDL)
      module HelloWorld { const string Message = &quot;Hello CORBA World!&quot; ; interface Hello { string hello_world(); }; };
    • CORBA-Beispiel Python Server (Fnorb): Implementierung des Interfaces # Standard/built-in modules. import sys # Fnorb modules. from Fnorb.orb import BOA, CORBA # Stubs and skeletons generated by 'fnidl'. import HelloWorld, HelloWorld_skel class HelloWorldServer(HelloWorld_skel.Hello_skel): &quot;&quot;&quot; Implementation of the 'Hello' interface. &quot;&quot;&quot; def hello_world(self): print HelloWorld.Message return HelloWorld.Message
    • CORBA-Beispiel Python Server (Fnorb): Main Function def main(argv): # Initialise ORB and BOA orb = CORBA.ORB_init(argv, CORBA.ORB_ID) boa = BOA.BOA_init(argv, BOA.BOA_ID) # Create object reference obj = boa.create( 'fred' , HelloWorldServer._FNORB_ID) # Create an instance of the implementation class. impl = HelloWorldServer() # Activate the implementation boa.obj_is_ready(obj, impl) # Write the stringified object reference to a file open( 'Server.ref' , 'w' ).write(orb.object_to_string(obj)) boa._fnorb_mainloop() # Start the event loop return 0
    • CORBA-Beispiel Java Client public class Client { public static void main ( String args[] ) { java.util.Properties props = System.getProperties(); try { org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,props); org.omg.CORBA.Object obj = null; java.io.BufferedReader in = new java.io.BufferedReader( new java.io.FileReader( “Server.ref&quot; )); String ref = in.readLine(); obj = orb.string_to_object(ref); Hello hello = HelloHelper.narrow(obj); hello.hello_world(); orb.destroy(); } catch (Exception e) { e.printStackTrace(); } }
    • Web Services SOAP Java Virtual Machine Servlet Container Java Application Code (Server) Python Interpreter Generated Python Code (Stub) Python Application Code (Client) Generated Java Code (Skeleton) WSDL Compiler WSDL
    • Web Services SOAP
      • Java
      • Gute Unterstützung
      • Java API for XML-Based Web Services (JAX-WS)
        • Gute Referenz-Implementierung
      • Python
      • Mittelmäßige bis schlechte Unterstützung
      • Zolera SOAP Infrastructure (ZSI)
        • Einzige SOAP Bibliothek für Python, die halbwegs nutzbar ist
    • Weitere Remote Object Libraries
      • Python Remote Objects (Pyro)
      • Pyro ist ähnlich zu Java's Remote Method Invocation (RMI)
      • Sehr einfach und portabel, funktioniert mit Jython
      • Hat einen eigenen Naming Service
      • omniORB wird aktiv weiterentwickelt mit regelmäßigen Releases
      • Simple Python Interface to Remote Objects (SPIRO)
      • SPIRO implementiert einen ORB uns dient zur Kommunikation zweischen CPython und Jython
      • Die Entwicklung von SPIRO wurde eingestellt
    • Beispiele
    • Beispiel QF-Test – Automatisiertes Test von GUIs
    • Beispiel TENT – Software Integration and Workflow Management
    • Use Cases für Python-Scripting (1)
      • Steuern und kontrollieren des Programms durch Benutzerskripte
      • Beispielsweise für komplexe Parametervariationen oder die Steuerung multidisziplinärer gekoppelter Simulationen
      • Automatisierung sich wiederholender Aufgaben
      • Meistens wird das „Makro“-Aufzeichnung und –Abspielung genannt
      • Erweiterung der Benutzeroberfläche
      • Beispielsweise durch zusätzliche problemangepasste Dialoge oder sonstige Erweiterungen
      • Für Java muss die Skriptsprache die GUI-Bibliotheken nutzen können (AWT, Swing, SWT)
      • Integration zusätzlicher Legacy-Applikationen
      • Wichtig und verbreitet bei Integrations- und Workflow-Systemen
      • End-Anwender können externe Codes ohne Änderung des Java-Programme selber integrieren
    • Use Cases für Python-Scripting (2)
      • Interaktives Experimentieren und Debuggen des Java-Programms
      • Leicht machbar mit einem eingebettete interaktiven Interpreter
      • Erlaubt Endanwendern und Entwickler das Debuggen und Analysieren des Java-Programms zu Laufzeit
      • Erzeugen automatischer Tests zur Qualitätssicherung
      • Aufzeichnen der Benutzeraktionen zur Laufzeit in Form eines Python-Skripts („Journaling“)
      • Editieren und Verallgemeinern des aufgezeichneten Skripts
      • Wieder-Abspielen des Skript entweder manuelle oder automatisch
    • Beispiel: Codes mit Python-Schnittstellen Numerische Simulations-Software in C++ bzw. Fortran
      • Beispiele für hochauflösende CFD-Löser mit Python-Schnittstellen
        • DLR TAU-Code ( http://www.dlr.de/as )
        • ONERA elsA-Code ( http://elsa.onera.fr )
      • Integration in Java-Workflow-Systeme über die vorgestellten Techniken
      Eurofighter X-31
    • DataFinder
      • Datenmanagement-System
      • Für Daten aus
        • Simulationen
        • Experimenten
        • Erdbeobachtung
      • Programmiersprache
      • Python
      • GUI-Toolkit Qt
    • DataFinder-Erweiterung mit Java-Bibliotheken (1) Grid Application Toolkit (GAT)
      • Nutzung von Grid-Ressourcen
      • Entwickelt durch Albert-Einstein Institut (MPI für Gravitationsphysik) und Vrije Universiteit Amsterdam
      • Implementiert in Java ( JavaGAT )
      • Anbindung an DataFinder über JPype
    • DataFinder-Erweiterung mit Java-Bibliotheken (1) Provenance-Aufzeichnung
      • Aufzeichnung von Provenance-Daten
      • Aufzeichnung von Prozessinformationen zur Laufzeit des Prozesses
      • Zur Ermittlung von
        • Ursprung der Daten
        • Konformität des (Daten-) erzeugenden Prozesses
      • Provenance-Software implementiert in Java
        • Server
        • Client-Bibliothek
        • Anbindung über JPype
    • Beispiel Provenance-Informationen in Simulations-Workflows Interaktionen: Konfiguration Prozessablauf Monitoring Datentransfer Relationen: - r0: i0 causes i1 - r1: i1 causes i2 - r2: i2 causes i3 - r3: i2 causes i4 - r4: i3 causes i2 - r5: i2 causes m1 - r6: i2 causes d1 - r7: i0 causes d2 Status Akteur Process control File-Server Pre- Processing Parameter variation Simulation Visualization i0 i1 i2 i3 i4 m1 d1 d2 c1 c-1 c2 c-2 c3 c-3 c4 c-4
    • Hinweise
    • pyCologne Die Python User Group Köln
      • Monatliche Treffen von Python-Interessierten aus dem Großraum Köln
      • Treffen an jedem 2. Mittwoch im Monat
      • Beginn: 18:30 Uhr
      • Ort: Benutzerrechenzentrum der Universität zu Köln
      • (Berrenrather Strasse 136, Köln)
      • Informationen über pyCologne
      • Internet: http:// www.pycologne.de
      • Twitter: http://twitter.com/ pycologne
      • Mailingliste: https://lists.uni-koeln.de/mailman/listinfo/python-users
    • Fragen? Kontakt www.andreas-schreiber.net twitter.com/onyame [email_address]