Your SlideShare is downloading. ×
Java und Python - Das Beste aus beiden Welten nutzen
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Java und Python - Das Beste aus beiden Welten nutzen

8,469
views

Published on

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

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

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,469
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
42
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 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
  • 2. Das DLR
  • 3.
    • Das DLR
    • Deutsches Zentrum für Luft- und Raumfahrt
    • Forschungseinrichtung
    • Raumfahrt-Agentur
    • Projektträger
  • 4. 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 - 
  • 5. 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
  • 6. 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
  • 7. Software-Entwicklung im DLR
  • 8. 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
  • 9. 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
  • 10.  
  • 11. The Right Tool for the Job
  • 12. 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, …
  • 13. 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
  • 14. 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!”
  • 15. “ 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
  • 16. Das Beste aus beiden Welten nutzen Großartige Libraries und Tool- Unterstützung Unschlagbar leicht zu erlernende Sprach-Syntax
  • 17. 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
  • 18. 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
  • 19. Tools zur Python-Java-Integration
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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; ); } }
  • 24. 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()
  • 25. 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
  • 26. 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();
  • 27. 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
  • 28. 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
  • 29. 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()
  • 30. 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()
  • 31. 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
  • 32. JCC Code-Beispiel
    • Notwendig: Initialisierung einer VM
    import jcc # Start JVM jcc.initVM(maxheap= ‘2000m’ , …)
  • 33. 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()
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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(); }; };
  • 38. 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
  • 39. 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
  • 40. 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(); } }
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. Beispiele
  • 45. Beispiel QF-Test – Automatisiertes Test von GUIs
  • 46. Beispiel TENT – Software Integration and Workflow Management
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. DataFinder
    • Datenmanagement-System
    • Für Daten aus
      • Simulationen
      • Experimenten
      • Erdbeobachtung
    • Programmiersprache
    • Python
    • GUI-Toolkit Qt
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. Hinweise
  • 55. 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
  • 56. Fragen? Kontakt www.andreas-schreiber.net twitter.com/onyame [email_address]

×