Scripting Gems 7 Von Marcel Schotten Kurs: Softwaretechnologie II SS2013 Dozent: Prof. Dr. Thaller.

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

der Universität Oldenburg
Netzwerke in der Informationstechnik
Vorlesung Programmieren II
Konzepte objektorientierter Systeme
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Ausnahmen HS Merseburg (FH) WS 06/07.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
1 Linux Paging, Caching und Swapping. 1 Vortragsstruktur Paging – Das Virtuelle Speichermodell –Die Page Table im Detail –Page Allocation und Page Deallocation.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Abstrakter Datentyp in C++ I - Klasse -
A. Zündorf, SE Group Reverse Engineering K2 1 Ziele Heute Compilerbau Nachlese Ausnutzung von Laufzeittypinformation.
A. Zündorf, SE Group Reverse Engineering K2 1 Ziele Heute Compilerbau Nachlese Ausnutzung von Laufzeittypinformation.
Einführung in Visual C++
14StrukturKlasse1 Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann
Abstrakte Klassen DVG
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
Zurück zur ersten Seite SEP Entwurf und Implementierung einer effizienten Rechenstruktur zur Baumdarstellung mittels Java-Texteditoren Betreuer : Matthias.
Xindice Datenbanken vs. Markup Prof Dr. Manfred Thaller WS 2009 / 2010 Referent: Seyda Kurt.
UML Begleitdokumentation des Projekts
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Erstellen eines Zufallsgenerators
Kapitel 1 – Erste Schritte
Gegenstand EDV Thema: Informative Webseiten
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
Game Development mit LUA Integration und Kommunikation von LUA mit C++ Referat von Paul van Hemmen Seminar: Reusable Content in 3D und Simulationssystemen.
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Datenbanken Datenstrukturen.
Präsentation von Lukas Sulzer
Programmierung 1. Einführung Seite 1
Unterprogramme in JAVA
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
Objektorientierung.
se_2_hooks.ppt1 Softwareengineering Einfache Hooks und Abstrakte Methoden (Klassen) Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and.
Hilfe Registrieren und Anmelden. Registrieren  Um auf der DGZfP-Webseite ein Benutzerkonto anzulegen, klicken Sie im oberen Bereich der Seite auf „Registrieren“
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
Historisch-Kulturwissenschaftliche Informationsverarbeitung Übung: Softwaretechnologie II / Visuelle Programmierung Dozent: Prof. Dr. Manfred Thaller WS.
PhysX auf der GPU in Batman: Arkham Asylum & bei Fluid Simulations Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Softwaretechnologie.
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Distributed Database Systems Parallele Datenbanksysteme von Stefan Schneider.
GAME PROGRAMMING PATTERNS – FLYWEIGHT & OBSERVER Robert Nystrom Softwaretechnologie II Teil 2 Anike Schulz.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Tutorium Software-Engineering SS14 Florian Manghofer.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
1. Betreuer: Prof. Dr. Jörg Striegnitz 2. Betreuer: Dr. Martin Schindler Kontextsensitive Autocompletion für Klassendiagramme in der UML/P Florian Leppers.
Tutorium Software-Engineering SS14 Florian Manghofer.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Einführung in AspectJ ● Inhalt: 1)Überblick 2)Elemente des crosscuttings in AspectJ 3)„Hello World“ in AspectJ 4)Wie Aspekte in Java verwoben werden 5)Join.
 Präsentation transkript:

Scripting Gems 7 Von Marcel Schotten Kurs: Softwaretechnologie II SS2013 Dozent: Prof. Dr. Thaller

Dataports!

- die steigende Komplexität in Computerspielen und deren Entwicklung, sorgt dafür das der Entwickler zwei Möglichkeiten hat, diese zu bewältigen: 1. Er investiert mehr Zeit und Arbeit 2. Er entwickelt ein besseres System um damit umzugehen. - wenn wir uns nun für zweiteres Entscheiden müssen wir wissen, das Code Module mit einander kommunizieren, in dem sie Daten zwischen ihnen versenden. - diese Datei muss jetzt in ein Format umgewandelt werde, welches jedes Modul versteht und was zeitgleich, speicherschonend und ressourcen-freundlich ist.

Dataports ist ein Weg zum verwalten von Komplexität, durch eine Reduzierung der Compiler-Zeit Abhängigkeit und macht das Laufzeitverhalten flexibler.

Konzept: - Dataports sind relativ einfach - es ist ein Teil der Datei, die eine globale ID beherrbergt. - Diese Datei kann eine Struktur, eine Classe oder einfach ein C++-Datentyp sein. - Bei der Erstellung registrieren die Dataports ihre ID mit einer Verwaltungsklasse.

1. Dataport: Void Register( std:: string ID ); Void deRegister( void ); 2. Dataport Pointer: -traditioneller Pointer, unterschieden zwischen einem Dataport Manager und der statischen Definition im Code. 2 Methoden: Dataport * Attach( std::string ); // fragt nach dem angeforderten Dataport Pdataport = pDataportMgr->Attach( "Dataport ID" ) Detach(); // Hebt die Verbindung zwischen Pointer und Dataport auf. 3. Dataport Manager: - versteckt im Hintergrund des Dataport-Systems. - es ist ein Storage- and retrieval system der alle registrierten Dataports beinhaltet.

Type Safety&Reference Counting: - Type Safety: über eine Template Funktion (GetID ) bekommen wir eine 32-Bit nummer zurück, die unsere Klasse identifiziert, so ist gewährleistet, das Pointer und Dataport nicht unterschiedlicher Typen angehören. -Reference Counting: um das Problem von invaliden Pointern vorzubeugen, benutzen Dataports eine Art Zählsystem. Über das Template m_refCount. -> Wenn ein Dataport registriert ist, wird der Zähler auf 0 gesetzt. ->Wenn der Dataport Pointer an einen Dataport gekoppelt wird, dann wird der Zähler um eins inkrementiert. ->Wenn ein Pointer, von einem Dataport entkoppelt wird, wird der Zähler ums eins demekrementiert. -> Wenn ein Dataport wieder deregistriert wird, wird der Reference Count gecheckt. Wenn er nicht Null beträgt, wird ein Fehler ausgeworfen.

Probleme: - zuviele Hashes führen zu einer unweigerlichen Kollision mit einander. - sie sind härter zu debuggen. - eine hohe Nutzung der Dataports führt zu einer erhöhten Performanz.

Dance with Python's AST

In jedem MMORPG sind eine Vielzahl von Konversationen zwischen NPC und Spielern. Diese benötigen Prozessorzeit zum entschlüsseln und eine hohe Bandweite um sie zu transferieren. Phyton ist eine dynamische objekt-orientierte Programmier- Sprache, die weit verbreitet ist, in der MMORPG Entwicklung. Mit dem Compiler kann man den Abstract Syntax Tree (AST) manipulieren und in Echtzeit den generierten Bytecode überprüfen. Diese Methode beschreibt, wie man Strings mit Nummern austauscht, indem man den AST manipuliert. => Bandweite und Prozessorzeit können eingespart werden.

Der Begriff Abstrakter Syntaxbaum bzw. Abstract Syntax Tree (AST) bezeichnet eine logische Baumstruktur, welche die inhaltlichen Zusammenhänge eines Dokumentes im Sinne eines Syntaxbaumes wiedergibt.

Background: - normale Behandlung von Text in Spielen ist über einen Translation Table. - Jeder String im Spiel ist an eine ID geknüpft und die ID schaut jedes mal in diesen Table, wenn er aufgerufen wird. - Vorteil von ID's liegt an der Bandweite und am Speicher, zudem können sie auf Audio Ausgaben deuten und dazu noch in jede andere Sprache übersetzt werden. - Alle ID's zu tracken, benötigt viel Zeit und Verwaltung während der Entwicklungszeit. - Nutzvoller wäre ein Weg den existierenden Code zu examinieren, um dann alle Strings zu finden, sie in eine Datenbank zu speichern und dort zu tracken.

Lösungsansatz: -Python Strings entweder in Single Quotes ' ' oder in double " " CompanyName = 'NetEase.Co' ProjectName = "Tang Dynasty" Adress = " " " GuangZhou, China " " " -Da es jetzt nicht so leicht ist, diese Strings zu extrahieren, bietet Python einen Mechanismus um diesen Job zu vereinfachen: Compile( source, filename, mode, flags=None, dont_inherit=None ) CompileFile( source ) Parse( buf ) ParseFile( path ) Walk( ast, visitor[, verbose] ) Compile/Compilefile: kompilieren den Source Code Parse/ParseFile: geben einen AST für den Python Code aus, der im Buffer liegt. Walk: geht über den AST und gibt eine Methode für den Besucher für jeden Knoten der begegnet wurde, an.

Vielen Dank für eure Aufmerksamkeit :)!!!