Projekt 1: NAO Roboter

Größe: px
Ab Seite anzeigen:

Download "Projekt 1: NAO Roboter"

Transkript

1 HOCHSCHULE BONN-RHEIN-SIEG Projekt 1: NAO Roboter Dokumentation Verfasser: Dennis Kimm Matrikelnummer: Studiengang: Elektrotechnik, B.Eng.

2 Inhaltsverzeichnis Der NAO Roboter der Firma Aldebaran Robotics...2 Einführung...2 Die Software...2 Choregraphe...2 Installation der C++ SDK...4 Windows...4 Erstes Projekt mit der C++ SDK und qibuild...5 Beispiel: helloworld...5 NAOqi Core...6 Core Module...6 NAOqi Audio...7 Audio Module...7 NAOqi Vision...8 Vision Module...8 Erstellen eines neuen Moduls für die NAOqi...8 Beispiel: testmodule...8 Erstellen eines eventbasierten Moduls Allgemeiner Aufbau eines eventbasierten Moduls Ein eigenes eventbasiertes Modul Erkennen eines roten Balls Erstellen eines audioverarbeitenden Moduls Beispiel: soundbasedreaction Wichtige Begriffe/Hilfreiche Tipps/zusätzliche Informationen Versionsverwaltungswerkzeuge Verbindung mit OpenNAO per ssh SOAP Remote Procedure Calls Broker Proxy

3 Der NAO Roboter der Firma Aldebaran Robotics Einführung NAO ist ein programmierbarer, humanoider Roboter der Firma Aldebaran Robotics. Er hat eine Größe von 57cm und verfügt über verschiedenste Funktionen und Anwendungsmöglichkeiten. Sein Körper besitzt 25 verschiedene Freiheitsgrade, welche durch viele Elektromotoren und Aktoren gesteuert werden können. Kernstück ist ein Intel ATOM 1,6 GHz Prozessor, welcher über ein Linux basierendes Betriebssystem und die eigene Hauptsoftware und Programmierschnittstelle NAOqi verfügt. Weiterhin besitzt NAO eine Vielzahl von Sensoren und Kommunikationselementen wie z.b. zwei Kameras, vier Mikrophone, zwei Infrarot Sender und Empfänger, acht Drucksensoren, einer W-LAN Schnittstelle und Bluetooth. Die Software Zur Steuerung, Bedienung und Programmierung des NAO Roboters bietet der Hersteller verschiedene Software an. Die eingebettete Software, bestehend aus dem Betriebssystem OpenNAO und der Middleware NAOqi sorgt für die Steuerung des Roboters. Die Desktop Software wie Choregraphe, NAOSim, Monitor und eine Kopie von NAOqi bieten dem Benutzer Möglichkeiten zur Gestaltung und Entwicklung neuer Funktionen und Verhalten des NAO mit dem eigenen Rechner. Choregraphe Mit Hilfe von Choregraphe lassen sich Animationen und Verhalten (Behaviours) erstellen und simulieren oder auch am echten Roboter testen. Dabei werden die Animationen mit einer graphischen Programmiersprache erstellt, welche auf der Benutzung von speziellen Boxen beruht. Choregraphe besitzt schon von Anfang an eine Vielzahl von vorgefertigten Animationen und Behaviours wie z.b. Gehen, Hinsetzen, Gesichtserkennung, Sprechen und viele andere. In Choregraphe gibt es mehrere Bereiche zur Bedienung und Programmierung. Beim Start des Programms werden drei Hauptfenster dargestellt. Auf der linken Seite ist die Box Bibliothek, in der Mitte ist das Flow Diagram Panel und rechts befindet sich das Robot View Panel. Um ein eigenes Behaviour zu erstellen, kann man verschiedene Boxen aus der Bibliothek auswählen und im Flow Diagram Panel per Drag & Drop platzieren. Ein einfaches Beispiel wäre z.b. Aufstehen und darauffolgend eine Begrüßungsgeste. Dazu platziert man einfach die Boxen Stand Up aus der Motions Bibliothek und Hello aus Motions/Animations. Diese müssen dann noch per Maus verbunden werden. Dazu besitzen die Boxen links und rechts Ein- bzw. Ausgänge. So wird der OnStart Ausgang am linken Rand (1) des Flow Diagram Panels mit dem Onstart Eingang der Stand Up Box (2) verbunden, der OnStopped Ausgang 2

4 dieser Box (3) wird dann mit dem Eingang der Hello Box (4) und der Ausgang dieser (5) mit dem OnStopped Ausgang am rechten Rand des Panels (6) verbunden. Danach kann mit dem Play-Button (7) das Behaviour getestet werden. Wie sich der Roboter verhalten würde, kann man rechts im Robot View beobachten. Zur Erstellung eigener Movements gibt es eine Animation Vorlage aus dem Ordner Templates in der Bibliothek. So lassen sich schon viele verschiedene Ideen realisieren, aber eine effizientere Lösung ist sicher das explizite Programmieren von Modulen und Behaviours mit C++ und Python. Die Software des NAO Roboters Quelle: Aldebaran Software Documentation 3

5 Installation der C++ SDK Windows Zur Programmierung eigener Module werden verschiedene Software-Development-Kits (SDK) mitgeliefert. So gibt es SDKs für Sprachen wie z.b. C++, Java, MatLAB oder Python. Für die Installation der C++ SDK muss folgende Software zusätzlich installiert werden: Visual Studio 2010 (oder 2008) qibuild CMake (oder höher) Python 2.7 CMake ist dafür da makefiles und workspaces zu generieren, welche dazu beitragen, dass das Projekt über verschiedene Betriebssysteme (Windows, Linus, Mac, OpenNAO) kompilierbar wird. Es wird auch als cross-platform build system bezeichnet. qibuild ist ein Werkzeug, welches mit Hilfe von CMake Projekte erstellt, die über verschiedene Betriebssysteme nutzbar sind. Zuallererst muss die IDE installiert werden. Unter Windows wird die Benutzung von Visual Studio empfohlen. Dann kann, wenn nicht schon geschehen, das C++ SDK Archiv von der DVD kopiert oder von der Aldebaran Website heruntergeladen werden und danach in ein gewähltes Verzeichnis entpackt werden. Bevor man nun qibuild installieren kann, müssen CMake und Python installiert werden. Beides kann auf den entsprechenden Internetseiten heruntergeladen werden: Windows x86 MSI Installer (2.7.3) (sig) Windows x86 MSI program database (2.7.3) (sig) Windows (Win32 Installer) cmake win32-x86.exe Windows ZIP cmake win32-x86.zip Nach der Installation muss noch die Umgebungsvariable PATH um die Pfade zu Python und CMake ergänzt werden, wenn dies nicht schon bereits automatisch bei der Installation durchgeführt wurde. Dazu geht man wie folgt vor: Im Startmenu Rechtsklick auf Computer Eigenschaften Erweiterte Systemeinstellungen Erweitert Umgebungsvariablen Systemvariablen: Path Doppelklick An letzter Stelle die beiden Verzeichnisse anfügen. Dabei darauf achten, dass die Pfade mit einem Semikolon getrennt sind. Beispiel: ;C:\Program Files (x86)\cmake 2.8\bin;C:\python;C:\python\Scripts Nun kann man wieder von der DVD oder der Aldebaran Website das qibuild Archiv kopieren bzw. herunterladen. Für die Installation muss nun die Datei install-qibuild.bat ausgeführt werden. Es öffnet sich daraufhin ein Commandfenster mit der Ausgabe, dass drei Skripte in den Unterordner Scripts 4

6 im Python Verzeichnis installiert wurden. Also z.b. nach C:\python\Scripts, wie in der PATH Systemvariable angegeben. Dann muss noch qibuild konfiguriert werden, also festgelegt werden, welchen Makefile Generator und welche IDE verwendet wird. Dazu agiert man am besten über die Windows Konsole: Startleiste Suche cmd. In der qibuild Dokumentation von Aldebaran ist angegeben, den Befehl qibuild config --wizard einzugeben. Dabei ist es wichtig sich im richtigen Verzeichnis zu befinden. Die Konfiguration funktioniert nur in dem Ordner, wo auch die benötigten Dateien installiert wurden. Das heißt konkret das Verzeichnis:...\python\Scripts. Dort ist mit Hilfe des Befehls cd (change directory) im Command Prompt hinzugelangen. Nach der Ausführung von qibuild config --wizard sollte dann eine Abfrage erscheinen, die wie folgt zu beantworten ist: Please choose a generator: (7) Visual Studio 10 Please choose an IDE: (3) Visual Studio Die Konfiguration kann jederzeit wiederholt bzw. verändert werden. Erstes Projekt mit der C++ SDK und qibuild Beispiel: helloworld Begriffsklärungen (siehe Aldebaran qibuild documentation): worktree: Verzeichnis mit Baumstruktur, welches einen.qi Ordner als Wurzel (root) enthält. feed: ein XML (Extensible Markup Language) Datei, welche eine toolchain beschreibt: Ort der toolchain und die enthaltenen packages toolchain: eine Sammlung von packages (Editor, Compiler, Linker, Bibliotheken, Debugger etc.) package: Archiv, welches eine oder mehrere SDKs enthält Nun kann man nach Anleitung in der NAO Software documentation das erste, einfache helloworld Projekt erstellen. Dazu geht man wie folgt vor: Zunächst muss ein neuer worktree erstellt werden. Von diesem Verzeichnis aus wird das Projekt mit Hilfe von qibuild aufgebaut. Zum Anfang wird ein worktree im doc/examples Verzeichnis der C++ SDK angelegt, da es das Kompilieren erleichtern soll. Alle Schritte werden nun wieder im Command Prompt durchgeführt. Auswählen des richtigen Verzeichnisses: z.b.: cd C:\Users\...\naoqi-sdk win32-vs2010\doc\examples Befehl zum erstellen des worktrees: qibuild init interactive Nun muss wieder Makefile Generator und IDE ausgewählt werden Benutzen einer toolchain anfordern z.b.: qitoolchain create mytoolchain C:\Users\...\naoqi-sdk win32-vs2010\toolchain.xml --default Der Name der toolchain ist hier beispielhaft als mytoolchain gewählt worden 5

7 Nun kann im examples Verzeichnis das Projekt erstellt werden mit: qibuild create helloworld, qibuild configure helloworld und qibuild make helloworld Mit qibuild open helloworld öffnet sich das Projekt automatisch in der richtigen IDE Das neu erstellte Modul kann mit Hilfe der Kopie der NAOqi-Software getestet werden. Dazu öffnet man NAOqi, was zuvor von der DVD installiert wurde. Nun muss nur noch die von qibuild erstellte helloworld_d binary ausgeführt werden. Sie befindet sich z.b. in folgendem Verzeichnis: /naoqi-sdk win32-vs2010/doc/examples/core/helloworld/build-mytoolchain/sdk/bin Nach der Ausführung sollte sowohl in der NAOqi- als auch in der Windows-Konsole Hello World! zu lesen sein. NAOqi Core Die mitgelieferten SDKs enthalten schon von Grund auf eine Vielzahl verschiedener Bibliotheken mit unterschiedlichen Modulen und Funktionen. Den Kern bilden einige wichtige Module, auf die man auch bei der Programmierung eigener Module zurückgreifen kann. Core Modules ALBehaviourManager Verwaltet Behaviours: - Lädt, startet, stoppt Behaviours - Fügt default Behaviours dazu oder entfernt sie - Bekommt Informationen über Behaviours Default Behaviours werden automatisch gestartet wenn NAOqi lädt ALBonjour ALMemory Verwaltet und ermöglicht Zugriff auf den Speicher des Roboters ALModule Basis Klasse für Benutzer-Module ALPreferences ALResourceManager Sichere Art Ressourcen zu verwalten. Ressourcen sind z.b.: der exklusive Gebrauch eines Motors, Mikrofone, LEDs, CPU, stiffness parameter, Kamera Einstellungen, etc. 6

8 Die Klasse sorgt dafür, dass: - Ein Behaviour nicht eine Ressource benutzt, die gerade von einem laufenden Behaviour gebraucht wird - Bewegungen, Sounds, LEDs, etc. synchronisiert laufen - Spezielle Aktionen durchgeführt werden, wenn ein anderes Behaviour eine Ressource anfragt AlMotion Zuständig für Bewegungen des Roboters NAOqi besitzt folgende Audio Module: NAOqi Audio Audio modules ALAudioDevice: verwaltet Audio In- und Outputs ALAudioPlayer: ermöglicht abspielen von Audio-Dateien über NAO ALAudioRecorder: ermöglicht aufnehmen von Audio-Dateien über NAO ALTextToSpeech: ermöglicht NAO das Sprechen ALSpeechRecognition: ermöglicht NAO zu verstehen was wir sagen ALSoundDetection: ermöglicht die Erkennung von Sound-Events ALAudioSourceLocalization: ermöglicht die Lokalisierung von Sounds, welche vom ALSoundDetection Modul erkannt wurden Der interne Aufbau sieht wie folgt aus (übernommen aus Aldebaran Dokumentation): 7

9 Naoqi Vision Vision modules NAOqi besitzt folgende Vision Module: ALVideoDevice: verwaltet Video Inputs ALVisionToolbox: stellt Werkzeuge für Aufnahme und Analyse von Bilddaten zur Verfügung ALVisionRecognition: stellt Fähigkeiten zum (Wieder-)Erkennen und Lernen von Visuellen Mustern zur Verfügung ALLandmarkDetection: gibt NAO die Fähigkeit bestimmt visuelle Punkte zu erkennen ALFaceDetection: gibt NAO die Fähigkeit menschliche Gesichter zu erkennen ALRedBallDetection: gibt NAO die Fähigkeit rote und runde Gegenstände zu erkennen Erstellen eines neuen Moduls für die NAOqi unter Windows Beispiel: testmodule (Remote Modul) Für dieses Beispiel-Modul wird ein neuer qi. Worktree erstellt. Dazu geht man wie folgt im Command Prompt (Eingabeaufforderung) vor: Wechseln ins gewünschte Verzeichnis (z.b.): C:\Users\Dennis\Desktop\NAO_Module Ausführen des qi-befehls: qibuild init --interactive Wählen des Makefile Generators und der IDE: Visual Studio 2010 auswählen Es wurde somit der Worktree bzw. der.qi-ordner erstellt. Als nächstes lässt sich mit dem Befehl qibuild create testmodule ein neues Projekt mit dem Namen testmodule anlegen. Neben dem.qi-ordner sollte nun auch ein Ordner testmodule existieren. In diesem Verzeichnis befinden sich dann vier Dateien: CMakeLists.txt main.cpp qiproject.xml test.cpp CMakeLists.txt ist dabei ein Skript für CMake, welches festschreibt, wie das Projekt kompiliert werden soll. 8

10 In der main.cpp Datei wird der Quellcode für das Hauptprogramm geschrieben. Dort muss unter anderem geprüft werden, ob die Eingabe bzw. Startparameter des Programms stimmen. Dabei sollte immer die IP und der Port übergeben werden. Dies geschieht später beim Programmaufruf in der Konsole über: <executable_name> --pip <IP> --pport <PORT>. Wenn man das Modul bzw. das Programm über die NAOqi-Kopie auf dem eigenen Computer testen möchte, muss man als IP und als PORT 9559 übergeben. Weiterhin wird in der main.cpp der benötigte Broker initialisiert und das neue Modul schlussendlich geladen. Für die Erstellung des eigentlichen Moduls müssen eine Header-Datei und Implementierung geschrieben werden. Dabei erbt das neue Modul von der Basisklasse ALModule aus dem Namensraum AL. In der Header-Datei wird die Klasse mit ihren Membern deklariert und in der zugehörigen.cpp Datei definiert. Für das Beispiel-Modul wurde der Code aus NAOqi Dokumentation: Extending NAO API - Creating a new module entnommen. Grundsätzlich lassen sich zwei verschiedene Arten von Modulen schreiben: Lokale und Ferne Module (local and remote). Ferne Module werden als ausführbare Dateien kompiliert, die es ermöglichen den Roboter von einem eigenen Rechner zu steuern. Sie kommunizieren über das Netzwerk und benötigen daher einen Broker, welcher die Kommunikation verwaltet. Lokale Module werden als Bibliothek cross -kompiliert, da sie auf dem Linux-basierten Betriebssystem OpenNAO laufen sollen und auch nur wirklich lokal auf dem Roboter verwendet werden. Dadurch ergibt sich meist eine schnellere Performance als bei fernen Modulen. Bevor man das Projekt kompilieren kann, muss man zuletzt die CMakeLists.txt Datei anpassen. Dabei sollte sie dann so aussehen: cmake_minimum_required(version 2.8) #Gibt dem Projekt seinen Namen project(testmodule) #Diese Anweisung sorgt dafür, dass das qibuild CMake Framework gefunden #wird find_package(qibuild) # Erzeugt eine Liste der benutzten Quelltexte set(_srcs testmodule.cpp testmodule.h main.cpp) # Erzeugt eine ausführbare Datei mit dem Namen testbroker # mit Hilfe der Source Liste qi_create_bin(testbroker $_srcs) # Teilt CMake mit das testbroker auf der Bibliothek ALCOMMON beruht # und stellt alle benötigten Dateien zur Verfügung qi_use_lib(testbroker ALCOMMON) 9

11 Sollte dies nicht reichen um das Projekt erfolgreich zu kompilieren, da z.b. die Headerdatei testmodule.h nicht gefunden werden kann, kann man eine zusätzliche eigene Bibliothek erstellen und einbinden. Dafür fügt man diese Befehle hinter set() ein: include_directories(".") qi_create_lib(testmodule_lib testmodule.h testmodule.cpp) qi_stage_lib(testmodule_lib) Befinden sich die CMakeLists.txt, testmodule.h und testmodule.cpp im gleichen Verzeichnis (C:\Users\Dennis\Desktop\NAO_Module\testmodule) so reicht der Befehl für CMake include_directories(".") aus um die erforderlichen Dateien zu finden. Mit qi_create_lib(<lib_name> <file1> <file2>..etc.) wird die Bibliothek angelegt. Mit qi_stage_lib(<lib_name>) wird die Bibliothek verfügbar gemacht. Als letztes muss nun diese Bibliothek noch zu qi_use_lib hinzugefügt werden. Dann sieht CMakeLists.txt so aus: cmake_minimum_required(version 2.8) project(testmodule) find_package(qibuild) set(_srcs testmodule.cpp testmodule.h main.cpp) include_directories(".") qi_create_lib(testmodule_lib testmodule.h testmodule.cpp) qi_stage_lib(testmodule_lib) qi_create_bin(testbroker $_srcs) qi_use_lib(testbroker ALCOMMON testmodule_lib) Die kommentierten Quelltexte testmodul.h, testmodul.cpp und main.cpp sind auf den nächsten Seiten abgedruckt. 10

12 testmodule.h #ifndef _TESTMODULE_ #define _TESTMODULE_ #include <iostream> #include <alcommon/almodule.h> namespace AL // Deklariert Klasse ALBroker im Namensraum AL um include // von <alcommon/albroker.h> zu sparen class ALBroker; //TestModule erbt von AL::ALModule wie fast alle Module class TestModule : public AL::ALModule public: TestModule(boost::shared_ptr<AL::ALBroker> broker, const std::string &name); virtual ~TestModule(); /** * Überladen von ALModule::init(). * Wird direkt aufgerufen nachdem das Module geladen wird */ virtual void init(); // Funktion gibt "Hello!" auf der Konsole aus void printhello(); // Funktion welche ein gegebenes Wort ausgibt void printword(const std::string &word); // Funktion welche "true" zurückgibt bool returntrue(); ; #endif //_TESTMODULE_ #include "testmodule.h" #include <iostream> #include <alcommon\albroker.h> testmodule.cpp TestModule::TestModule(boost::shared_ptr<AL::ALBroker> broker, const std::string &name) : AL::ALModule(broker, name) // Beschreibung des Moduls, wird auf der Website des Roboters dargestellt setmoduledescription("this is a test module!"); /** * Definieren von aufrufbaren Methoden mit ihren Beschreibungen: * Macht die Methode verfügbar für andere cpp Module und Python Scripts * Der eingegeben Name ist der von außerhalb der Moduls sichtbare. * functionname(<method_name>, <class_name>, <method_description>); * BIND_METHOD(<method_reference>); */ 11

13 functionname("printhello",getname(),"print hello to the world"); BIND_METHOD(TestModule::printHello); /** * addparam(<attribut_name>, <attribut_descrption>); * Ermöglicht Dokumentation der Parameter der Methode * Muss nicht unbedingt eingefügt werden */ functionname("printword",getname(),"print a given word"); addparam("word","the word to be printed"); BIND_METHOD(TestModule::printWord); /** * setreturn(<return_name>, <return_description>); * Ermöglicht Dokumentation der Rückgabeparameter der Methode * Muss nicht unbedingt eingefügt werden */ functionname("returntrue",getname(),"just return True"); setreturn("boolean","return true"); BIND_METHOD(TestModule::returnTrue); // Hier könnte das "binden" von weiteren Methoden erfolgen... /** * Diese Methode können nur konstante Argumente von Basistypen (int,double, etc.) * oder AL::ALValue annehmen und zurückgeben. */ TestModule::~TestModule() void TestModule::init() //Direkt aufgerufen nach Konstruktoraufruf std::cout << returntrue() << std::endl; void TestModule::printHello() std::cout << "Hello!" << std::endl; void TestModule::printWord(const std::string &word) std::cout << word << std::endl; bool TestModule::returnTrue() return true; 12

14 #include <iostream> #include <stdlib.h> #include <qi\os.hpp> main.cpp #include "testmodule.h" #include <alcommon/albroker.h> #include <alcommon/albrokermanager.h> #include <alcommon/almodule.h> int main(int argc, char* argv[]) // Versuch den Broker zu einem laufenden NAOqi zu verbinden int pport = 9559; std::string pip = " "; //command line parse Optionen //überprüfen der Nummer der Argumente if((argc!= 1) && (argc!= 3) && (argc!= 5)) std::cerr << "wrong number of arguments!" << std::endl; std::cerr << "Usage: mymodule [--pip robot_ip] [--pport robot_port]" << std::endl; exit(2); //wenn nur ein Argument gegeben ist sollte es IP oder PORT sein if(argc == 3) if(std::string(argv[1]) == "--pip") pip = argv[2]; else if(std::string(argv[1]) == "--pport") pport = atoi(argv[2]); else std::cerr << "Wrong number of arguments!" << std::endl; std::cerr << "Usage: mymodule [--pip robot_ip] [--pport port]" << std::endl; exit(2); if(argc == 5) if(std::string(argv[1]) == "--pport" && std::string(argv[3]) == "--pip") pport = atoi(argv[2]); pip = argv[4]; else if(std::string(argv[1])=="--pip" && std::string(argv[3])=="--pport") pport = atoi(argv[4]); pip = argv[2]; else std::cerr << "Wrong number of arguments!" << std::endl; std::cerr << "Usage: mymodule [--pip robot_ip] [--pport port]" << std::endl; exit(2); 13

15 // SOAP brauch diese Zeile für die serialisation von Fließkommazahlen (floats) setlocale(lc_numeric,"c"); // Ein broker braucht einen Namen, eine IP und einen port: const std::string brokername = "testbroker"; int brokerport = 54000; const std::string brokerip = " "; // Erstelle eigenen Broker boost::shared_ptr<al::albroker> broker; try broker = AL::ALBroker::createBroker(brokerName,brokerIp,brokerPort,pip,pport,0); catch(...) std::cerr << "Fail to connect broker to:" << pip << ":" << pport << std::endl; Singletons //Entfernen aller aktiven Broker und Neustart des ALBrokerManager AL::ALBrokerManager::getInstance()->killAllBroker(); AL::ALBrokerManager::kill(); return 1; // Hinzufügen des Brokers in NAOqi AL::ALBrokerManager::setInstance(broker->fBrokerManager.lock()); AL::ALBrokerManager::getInstance()->addBroker(broker); // Laden des Modules mit der Methode: // AL::ALModule::createModule<your_module>(<broker_create>, <your_module>); AL::ALModule::createModule<TestModule>(broker,"TestModule"); while(true) qi::os::sleep(1); return 0; 14

16 Erstellen eines eventbasierten bzw. eventverarbeitenden Moduls NAOqi erlaubt eventbasiertes Programmieren. Es ist möglich eine Rückruffunktion zu einem Event zu programmieren. Diese sogenannte Callback-Funktion wird jedes Mal aufgerufen, wenn ein Event eintritt. Ein Event ist z.b. das Drücken eines Bumpers oder das Detektieren eines Gesichts. Prinzip: Um auf ein bestimmtes Event zu reagieren muss man es erst abonnieren (subscribe). Dafür benötigt man prinzipiell folgende Schritte: Erstellen eines Proxy-Objekts zu AL::ALMemory Aufruf der subscribetoevent Methode um das gewünschte Event zu abonnieren Möchte man aufhören, die Rückruffunktion aufzurufen muss man die unsubscribetoevent Methode aufrufen Jedes Event hat einen eigenen Namen AL::ALMemoryProxy memproxy = AL::ALMemoryProxy(getParentBroker()); memproxy.subscribetoevent( eventname, ModuleForCallback, CallbackFunktion ); Dabei funktioniert die getparentbroker() Methode nur innerhalb eines Moduls. Die Callback Funktion: Wenn man ein Event abonniert, spezifiziert man die Callback-Funktion und das Modul aus dem sie kommt. Das bedeutet, die Callback-Funktion muss irgendwo gebunden sein. Man kann nicht irgendein Argument für die Callback-Funktion angeben. Man muss vorsichtig sein, wenn man Callback-Funktionen benutzt. Die Verarbeitungszeit der Funktion könnte größer sein als die Zeit zwischen zwei Event-Auslösern. So könnte es z.b. passieren, dass man versucht in zwei verschiedenen Strängen, zur gleichen Zeit eine Variable zu lesen und zu verändern. Um das zu umgehen muss man sicherstellen, dass die Callback-Funktion thread-safe (Strang-sicher) ist. Dazu kann man z.b. Aldebarans critial section and mutex API benutzen. Die zugehörigen Bibliotheken sind <althread/almutex.h> und <althread/alcriticalsection.h>. Initialisieren des Mutex: AL::ALMutex::createALMutex(); Critical section mit Mutex als Argument: AL::ALCriticalSection section(mutex) Mutex: Wechselseitiger Ausschluss (mutual exclusion) Bezeichnet Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird Mutex-Verfahren: verhindern, dass nebenläufige Prozesse bzw. Threads gleichzeitig oder zeitlich verschränkt gemeinsam genutzte Datentypen unkoordiniert verändern koordinieren den zeitlichen Ablauf nebenläufiger Prozesse/Threads derart, dass andere Prozesse/Threads von der Ausführung kritischer Abschnitte ausgeschlossen sind, wenn sich ein Prozess/Thread im kritischen Abschnitt befindet 15

17 Allgemeiner Aufbau eines eventbasierten Moduls abgeleitet von AL::ALModule Konstruktor: übernimmt Pointer auf einen Broker und einen neuen Namen für das neue Modul Ein ALModule hat einen Namen und ist in einem Broker registriert, so dass seine Methoden von anderen Modulen aufgerufen werden können Initialisiert auch Mutex-Pointer (Private Member des Moduls) Definiert die Funktionsbeschreibung mit setmoduledescription() Bestimmt Funktionsnamen und bindet die Funktion an das Modul: functionname und BIND_METHOD Destruktor: unsubscribes das Event, bestellt es sozusagen ab Überladen der init() Funktion: Proxy zu AL::ALMemory Membervariable für Speicherung der Eventdaten bekommt Wert aus zugehörigem ALMemory Modul MemoryProxy abonniert das Event und legt Callback-Funktion fest Callback Methode: AL::ALCriticalSection section(fcallbackmutex) wird definiert Zugehöriger Wert aus ALMemory wird ausgelesen und ausgewertet Abfrage und eventuelle Aktion Private Member: AL::ALMemoryProxy fmemoryproxy; AL::ALTextToSpeechProxy fttsproxy; (z.b. um etwas zu sagen) Boost::shared_ptr<AL::ALMutex> fcallbackmutex; Pointer vom Typ ALMutex für ALCriticalSection Wird beim Aufruf des Konstruktors explizit initialisiert (Initialisierungsliste) fcallbackmutex(al::almutex::createalmutex()) Typ fstate; (speichert Memory Wert z.b. float aber meist AL::ALValue) 16

18 Ein eigenes eventbasiertes Modul Event: redballdetected Erkennen eines roten Balls In diesem Modul wird das Event(Ereignis) redballdetected abonniert. Das heißt jedes Mal wenn ein roter Ball in das Sichtfeld der oberen Kamera kommt, wird der für das Event reservierte Speicherbereich mit Informationen über den Ball aktualisiert. Das bedeutet, dass man einen Proxy zum Speicher benutzen muss, welcher über die Bibliothek <alcommon/alproxies.h> zur Verfügung gestellt wird. Weiterhin soll das Modul so funktionieren, dass der Roboter seinen Kopf hin und her bewegt, als würde er den Raum nach dem Ball absuchen. Dazu wird ein Proxy zu AL::ALMotion benutzt, welcher die benötigten Methoden zur Bewegung des Kopfes zur Verfügung stellt. In der testevent.h Datei wird das Modul definiert. Es erbt hierbei von AL::ALModule und muss daher die zugehörige init() Funktion neu deklarieren. Das geschieht in der testevent.cpp Datei. Dort werden auch andere Methoden deklariert und das Event schließlich abonniert. In der main.cpp wird dann schließlich ein Broker erzeugt und an die NAOqi gehängt und das Modul wird erzeugt bzw. geladen, so dass es als Remote Module den Roboter steuert. Die zugehörige CMakeLists.txt sieht wie gewohnt so aus: cmake_minimum_required(version 2.8) #Name des Projekts project(testevent) find_package(qibuild) #Source Codes zur Kompilierung set(_srcs main.cpp testevent.h testevent.cpp) #Einfügen einer eigenen Bibliothek wegen Kompilierungsproblemen include_directories(".") qi_create_lib(testevent_lib testevent.h testevent.cpp main.cpp) qi_stage_lib(testevent_lib) #Erstellen der ausführbaren Datei qi_create_bin(testevent $_srcs) #Gibt die zu verwendenden Bibliotheken an qi_use_lib(testevent testevent_lib ALCOMMON) Auf den folgenden Seiten sind testevent.h, testevent.cpp und main.cpp abgedruckt. 17

19 testevent.h #ifndef _TESTEVENT_ #define _TESTEVENT_ #include <alproxies\almemoryproxy.h> #include <alproxies\altexttospeechproxy.h> #include <alproxies\almotionproxy.h> #include <alproxies\alledsproxy.h> #include <alcommon\almodule.h> #include <alcommon\albroker.h> #include <alcommon\alproxy.h> #include <alvalue\alvalue.h> #include <althread\almutex.h> #include <althread\alcriticalsection.h> #include <alerror\alerror.h> #include "alaudio\alsoundextractor.h" #include <boost\shared_ptr.hpp> #include <qi\log.hpp> #include <string> namespace AL class ALBroker; class TestEvent : public AL::ALModule public: TestEvent(boost::shared_ptr<AL::ALBroker> broker, const std::string& name); virtual ~TestEvent(); //Überladen der init() Funktion, welche direkt nach Konstruktor aufegrufen wird virtual void init(); //callback funktion des events void onredballdetected(); private: AL::ALMemoryProxy fmemoryproxy; //Proxy für Speicherzugriff AL::ALTextToSpeechProxy fttsproxy; //Proxy zur Sprachausgabe AL::ALMotionProxy fmotionproxy; //Proxy für Roboterbewegung boost::shared_ptr<al::almutex> fcallbackmutex; //Mutex AL::ALValue RedBall; //Speichert Informationen über den Ball int RedBallCounter; //Zählt wie oft ein Ball erkannt wird/ werden soll bool isdetected; ; #endif 18

20 #include "testevent.h" testevent.cpp TestEvent::TestEvent(boost::shared_ptr<AL::ALBroker> broker, const std::string& name) : AL::ALModule(broker,name), fcallbackmutex(al::almutex::createalmutex()), RedBall(AL::ALValue()), RedBallCounter(3) setmoduledescription("this module is going to start a RedBallDetection while moving NAOs head"); functionname("onredballdetected",getname(),"method called when red ball detected"); BIND_METHOD(TestEvent::onRedBallDetected); TestEvent::~TestEvent() fmemoryproxy.unsubscribetoevent("redballdetected","testevent"); void TestEvent::init() try fmemoryproxy = AL::ALMemoryProxy(getParentBroker()); //abonniere Event ; fmemoryproxy.subscribetoevent("redballdetected","testevent","onredballdetected") catch(const AL::ALError& e) qilogerror("module.example") << e.what() << std::endl; try fmotionproxy = AL::ALMotionProxy(getParentBroker()); AL::ALValue stiffness = 1.0f; AL::ALValue time = 1.0f; fmotionproxy.stiffnessinterpolation("headyaw",stiffness,time); //setze Steifheit für "headyaw" Motor auf 1 //setze Ziel Winkel/rad und Zeiten/sec AL::ALValue targetangles = AL::ALValue::array(-1.5f,1.5f,0.0f); AL::ALValue targettimes = AL::ALValue::array(3.0f,6.0f,9.0f); bool isabsolute = true; isdetected = false; //Bewege so lange den Kopf hin und her bis ein roter Ball erkannt wird -> Suche while(!isdetected) fmotionproxy.angleinterpolation("headyaw",targetangles,targettimes, isabsolute); stiffness = 0.0f; time = 1.0f; fmotionproxy.stiffnessinterpolation("headyaw",stiffness,time); catch(const AL::ALError& er) qilogerror("module.example") << er.what() << std::endl; 19

21 void TestEvent::onRedBallDetected() qiloginfo("module.example") << "Callback method executed!" << std::endl; //mutex damit die Methode thread-safe ist AL::ALCriticalSection section(fcallbackmutex); try RedBall = fmemoryproxy.getdata("redballdetected"); if(redball.getsize() < 2) //enthält 3 Eigenschaften wenn erkannt return; else if(redballcounter > 0) isdetected = true; qiloginfo("module.example") << "Red Ball Detected!" << std::endl; fttsproxy = AL::ALTextToSpeechProxy(getParentBroker()); //"post" des Objekts weil der Kopf immer noch in Bewegung sein könnte fttsproxy.post.say("red ball detected!"); RedBall.clear(); //Setzt den Inhalt zurück RedBallCounter--; catch(const AL::ALError& err) qilogerror("module.example") << err.what() << std::endl; #include <iostream> #include <stdlib.h> #include <qi/os.hpp> #include <alcommon/albrokermanager.h> #include "testevent.h" main.cpp int main(int argc, char* argv[]) int pport = 9559; std::string pip = " "; //checke die anzahl der argumente if(argc!= 1 && argc!= 3 && argc!= 5) std::cerr << "Wrong number of arguments!" << std::endl; std::cerr << "Usage: testevent [--pip ROBOT_IP] [--pport ROBOT_PORT]" <<std::endl; exit(2); 20

22 //nur ein argument: robot_port oder robot_ip if(argc == 3) if(std::string(argv[1]) == "--pip") pip = argv[2]; else if(std::string(argv[1]) == "--pport") pport = atoi(argv[2]); else std::cerr << "Wrong number of arguments!" << std::endl; std::cerr << "Usage: testevent [--pip ROBOT_IP] [--pport ROBOT_PORT]" << std::endl; exit(2); //beide argumente gegeben if(argc == 5) if((std::string(argv[1]) == "--pip")&&(std::string(argv[3])=="--pport")) pip = argv[2]; pport = atoi(argv[4]); else if((std::string(argv[3])=="--pip")&& (std::string(argv[1])=="--pport")) pip = argv[4]; pport = atoi(argv[2]); else std::cerr << "Wrong number of arguments!" << std::endl; std::cerr << "Usage: testevent [--pip ROBOT_IP] [--pport ROBOT_PORT]" << std::endl; exit(2); //SOAP serialisation für floats setlocale(lc_numeric, "C"); //broker name, ip und port deklarieren const std::string brokername = "testeventbroker"; int brokerport = 54000; const std::string brokerip = " "; boost::shared_ptr<al::albroker> broker; try broker = AL::ALBroker::createBroker(brokerName,brokerIP,brokerPort,pip,pport,0); catch(...) std::cerr << "Fail to connect broker to" << pip << ":" << pport << std::endl; AL::ALBrokerManager::getInstance()->killAllBroker(); 21

23 AL::ALBrokerManager::kill(); return 1; //füge broker in NAOqi AL::ALBrokerManager::setInstance(broker->fBrokerManager.lock()); AL::ALBrokerManager::getInstance()->addBroker(broker); //erzeuge und lade Modul AL::ALModule::createModule<TestEvent>(broker, "TestEvent"); while(true) qi::os::sleep(1); return 0; 22

24 Erstellen eines audioverarbeitenden Moduls Beispiel: soundbasedreaction Mit Hilfe des AL::ALSoundExtractor Klasse lässt sich ein Modul schreiben, welches Geräusche in der Umgebung des NAOs verarbeiten kann. Dabei erbt das neue Modul von eben dieser Klasse. Die wichtigsten vererbten Methoden sind dabei: Konstruktor und Destruktor Init Funktion Process Funktion Dabei ist init(), ähnlich wie bei den vorangegangenen Modulen wieder die Initialisierungsfunktion, welche die Einstellungen des Moduls bestimmt und die Detektion eines Geräusches startet. Dafür bedient sich die Funktion des Proxys zu AL::ALAudioDevice, welcher von AL::ALSoundExtractor vererbt wurde. Damit lassen sich dann die gewünschten Präferenzen für die Audioverarbeitung einstellen. Mit der startdetection() Methode, welche ebenfalls von ALSoundExtractor geerbt wird, beginnt die Detektion. Dabei springt das Modul in die process() Funktion. Der Aufruf dieser Methode erfolgt alle 170ms durch das AL::ALAudioDevice Modul und die übergebenen Parameter sind default-werte oder vorher durch setclientpreferences in der init()- Funktion bestimmt worden. Innerhalb der process-methode können dann die erfassten Audiowerte verarbeitet werden. So werden in dem Besipielmodul die buffer-werte (AL_SOUND_FORMAT = int) geprüft. So soll NAO jedesmal Freeze! sagen, wenn die erfassen Daten einen Wert von überschreiten. Dazu benötigt das Modul natürlich einen Proxy zum AL::ALTextToSpeech Modul. Im Destruktor wird dann die Detektion mit stopdetection() gestoppt. Hinweis: Bei der Ausführung des Moduls wird, wenn es von Hand mit Strg+C im CLI beendet wird, der Destruktor nicht aufgerufen. Das heißt, dass auch die stopdetection() Funktion nicht aufgerufen wird. Dadurch entsteht ein Fehler beim erneuten Start des Programms. Zur Behebung muss dann die NAOqi Software auf dem Roboter neugestartet werden. Dies geschieht am besten über eine ssh-verbindung (siehe S.28). Auf den folgenden Seiten sind wieder die Quellcodes soundbasedreaction.h, soundbasedreaction.cpp, main.cpp und CMakeLists.txt abgedruckt. cmake_minimum_required(version 2.8) project(soundbasedreaction) find_package(qibuild) set(_srcs main.cpp soundbasedreaction.h soundbasedreaction.cpp) include_directories(".") qi_create_lib(soundbasedreaction_lib soundbasedreaction.h soundbasedreaction.cpp main.cpp) qi_stage_lib(soundbasedreaction_lib) qi_create_bin(soundbasedreaction $_srcs) qi_use_lib(soundbasedreaction soundbasedreaction_lib ALCOMMON ALAUDIO) 23

25 #ifndef _SOUNDBASED_ #define _SOUNDBASED_ soundbasedreaction.h #include <boost\shared_ptr.hpp> #include <alcommon\almodule.h> #include <alcommon\alproxy.h> #include <alcommon\albroker.h> #include <alcommon\albrokermanager.h> #include <alvalue\alvalue.h> #include <alproxies\altexttospeechproxy.h> #include <string> #include <iostream> #include <fstream> #include "alaudio\alsoundextractor.h" using namespace AL; class SoundBasedReaction : public ALSoundExtractor public: SoundBasedReaction(boost::shared_ptr<ALBroker> broker, const std::string& name); virtual ~SoundBasedReaction(); void init(); void process(const int& nbofchannels, const int& nbrofsamplesbychannel, const AL_SOUND_FORMAT* buffer, const ALValue& timestamp); private: ALTextToSpeechProxy fttsproxy; ; #endif soundbasedreaction.cpp #include "soundbasedreaction.h" SoundBasedReaction::SoundBasedReaction(boost::shared_ptr<ALBroker> broker, const std::string& name) : ALSoundExtractor(broker, name) ///Beschreibung auf der Homepage setmoduledescription("this module launch a texttospeech command when a sudden and significative noise is heard."); void SoundBasedReaction::init() //Sprache der Sprachverarbeitung wählen fttsproxy.setlanguage("english"); //Name des Moduls, 16000Hz, Front Channels, Deinterleaving nicht benötigt audiodevice->callvoid("setclientpreferences", getname(),16000,(int)frontchannel,0 ); 24

26 startdetection(); SoundBasedReaction::~SoundBasedReaction() stopdetection(); //Diese Funktion wird automatisch vom ALAudioDevice Modul aufgerufen und zwar //alle 170ms mit passendem Audio buffer (front channel mit 16000Hz) void SoundBasedReaction::process(const int& nbofchannels, const int& nbrofsamplesbychannel, const AL_SOUND_FORMAT* buffer, const ALValue& timestamp) int maxvaluefront = 0; for(int i = 0; i < nbrofsamplesbychannel; i++) if(buffer[i] > maxvaluefront) maxvaluefront = buffer[i]; //Ausgabe in der Konsole std::cout << "maxvalue: " << maxvaluefront << std::endl; //Wenn Wert überschritten->text To Speech durchführen if(maxvaluefront > 10000) fttsproxy.say("freeze!"); 25

27 main.cpp #include "soundbasedreaction.h" #include <qi\log.hpp> #include <qi\os.hpp> int main(int argc, char* argv[]) int pport = 9559; std::string pip = " "; //check argumente if((argc!= 1) && (argc!= 3) && (argc!= 5)) std::cerr << "Wrong Number of Arguments!" << std::endl; std::cerr << "Usage: --pip ROBOT_IP --pport ROBOT_PORT" << std::endl; exit(2); //PORT bzw IP if(argc == 3) if(std::string(argv[1]) == "--ppip") pip = argv[2]; else if(std::string(argv[1]) == "--pport") pport = atoi(argv[2]); else std::cerr << "Wrong Number of Arguments!" << std::endl; std::cerr << "Usage: --pip ROBOT_IP --pport ROBOT_PORT" << std::endl; exit(2); //PORT und IP if(argc == 5) if((std::string(argv[1]) == "--pip")&&(std::string(argv[3])=="--pport")) pip = argv[2]; pport = atoi(argv[4]); else if((std::string(argv[3]) == "--pip")&& (std::string(argv[1])=="--pport")) pip = argv[4]; pport = atoi(argv[2]); else std::cerr << "Wrong Number of Arguments!" << std::endl; std::cerr << "Usage: --pip ROBOT_IP --pport ROBOT_PORT" << std::endl; exit(2); 26

28 //SOAP Serialisation floats setlocale(lc_numeric,"c"); //definiere broker name,ip und port const std::string brokername = "mybroker"; const std::string brokerip = " "; int brokerport = 54000; //erstelle broker boost::shared_ptr<al::albroker> pbroker; try pbroker = AL::ALBroker::createBroker(brokerName,brokerIP,brokerPort,pip,pport,0); catch(...) std::cerr << "Fail to connect broker to: " << pip << ":" << pport << std::endl; AL::ALBrokerManager::getInstance()->killAllBroker(); //lösche alle broker AL::ALBrokerManager::kill(); //setze brokermanager singleton zurück return 1; //lade broker AL::ALBrokerManager::setInstance(pBroker->fBrokerManager.lock()); AL::ALBrokerManager::getInstance()->addBroker(pBroker); //lade module AL::ALModule::createModule<SoundBasedReaction>(pBroker,"SoundBasedReaction"); while(true) qi::os::sleep(1); return 0; 27

29 Wichtige Begriffe/Hilfreiche Tipps/zusätzliche Informationen Versionsverwaltungswerkzeuge: Allgemein ist es sinnvoll bei der Programmierung von umfangreichen Projekten Versionsverwaltungssoftware zu benutzen, um Änderungen festzuhalten und gegebenenfalls auf ältere Version der jeweiligen Datei zurückgreifen zu können. So kann es auch bei der Programmierung von eigenen Modulen und Behaviours hilfreich sein, sollte man in eine Sackgasse geraten und möchte daher von einem früheren Zeitpunkt aus weiter arbeiten. Verbindung mit OpenNAO per SSH/PuTTY: Die direkte Verbindung zum Betriebssystem OpenNAO des Roboters ist per ssh möglich. Eine ssh (Secure Shell) ist ein Remote-Werkzeug bzw. ein Netzwerkprotokoll mit dem sich verschlüsselte Netzwerkverbindungen herstellen lassen. So kann man auf gesicherte Weise über das Netzwerk auf die Kommandozeilenschnittstelle des Roboters zugreifen. Die Verschlüsselung erfolgt mit Hilfe von RSA. Für Windows gibt es dafür das Programm PuTTY. Der Verbindungsaufbau geschieht dabei wie folgt: Als Hostname wird die IP eingegeben: z.b der Port bleibt auf 22 Als Connection Type wird SSH gewählt Dann sollte sich ein Kommandofenster öffnen, welches Zugriff auf den Roboter ermöglicht. Zuerst muss man sich jedoch einloggen. Als Benutzername wählt man zunächst nao mit dem zugehörigen Passwort nao. Darauf folgend kann man mit Hilfe des Befehls su (super-user) in den Administrator Account root wechseln welcher das Passwort root benötigt. Nun lassen sich verschiedene Aktionen ausführen, wie z.b. das Neustarten von NAOqi. Dazu wird der Befehl: /etc/init.d/naoqi restart verwendet. 28

Nao Dokumentation. Arne Gerhold

Nao Dokumentation. Arne Gerhold Nao Dokumentation Arne Gerhold 25. Februar 2010 Kapitel 1 Erste Schritte 1.1 Softwareinstallation In diesem Abschnitt werden die Programme kurz beschrieben, die für die Erstellung von Steuer-Programmen

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Computergrafik 1 Übung, Wintersemester 2011. Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows 22.10.

Computergrafik 1 Übung, Wintersemester 2011. Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows 22.10. Computergrafik 1 Übung, Wintersemester 2011 Eclipse Hands-On C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows 22.10.12 1 Eclipse - Die IDE 1. Entwicklungsumgebung (IDE) herunterladen / installieren

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Aufgaben: 2 JDK/SDK/JRE und Java Entwicklungswerkzeuge Objektorientierte Programmierung OOP Programmieren mit Java 1. Installation von Java 2. Erstes Java Programm Hello World 3. Dreimal Hallo Olten 2

Mehr

Installation Anleitung für JTheseus und MS SQL Server 2000

Installation Anleitung für JTheseus und MS SQL Server 2000 Installation Anleitung für JTheseus und MS SQL Server 2000 Inhaltsverzeichnis 1 Installation der Datenbank 3 1.1 Erstellen der Datenbank 3 1.2 Tabellen und Minimal Daten einlesen 4 1.3 Benutzer JTheseus

Mehr

LAMP HowTo (Linux Apache MySQL PHP) Zugriff per SSH auf den Server. Servername: gyko.no-ip.info (Lokal: 192.168.2.10)

LAMP HowTo (Linux Apache MySQL PHP) Zugriff per SSH auf den Server. Servername: gyko.no-ip.info (Lokal: 192.168.2.10) LAMP HowTo (Linux Apache MySQL PHP) Zugriff per SSH auf den Server Servername: gyko.no-ip.info (Lokal: 192.168.2.10) Stand: 04-2014 Warum Zugriff auf einen Server per SSH? Zunächst einmal möchte ich, dass

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme Grundkurs C++ Buildsysteme Buildsysteme Beispielhaftes Übersetzungsszenario: Verzeichnis tutorial7/ main.cpp, lcdrange.cpp, lcdrange.h *.cpp Kompilieren *.o *.h Grundkurs C++ 2 Headerdateien //blackbox.h

Mehr

Erste Schritte mit Eclipse

Erste Schritte mit Eclipse Erste Schritte mit Eclipse März 2008, KLK 1) Java Development Kit (JDK) und Eclipse installieren In den PC-Pools der HAW sind der JDK und Eclipse schon installiert und können mit dem Application Launcher

Mehr

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

TCP/IP Programmierung. C# TimeServer Java6 TimeClient TCP/IP Programmierung C# TimeServer Java6 TimeClient Stand 19.10.11 21:24:32 Seite 1 von 16 Inhaltsverzeichnis Erläuterung...3 Software...3 C#TimeServer...4 Klasse ServerThread...6 Starten und Beenden...7

Mehr

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013 TgZero Technik.Blosbasis.net April 1, 2013 1 Inhaltsverzeichnis 1 Makefile 3 1.1 Was sind Makefiles?........................ 3 2 Bakefile 3 3 Aufbau einer Bakefile 4 3.1 Targets...............................

Mehr

Hello World in Java. Der Weg zum ersten Java-Programm

Hello World in Java. Der Weg zum ersten Java-Programm Vorwort Hello World in Java Der Weg zum ersten Java-Programm Diese Anleitung wurde unter Windows XP verfasst. Grundsätzlich sollte sie auch unter späteren Windows Versionen wie Windows Vista oder Windows

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr

Version 0.3. Installation von MinGW und Eclipse CDT

Version 0.3. Installation von MinGW und Eclipse CDT Version 0.3 Installation von MinGW und Eclipse CDT 1. Stellen Sie fest, ob Sie Windows in der 32 Bit Version oder in der 64 Bit Version installiert haben. 2. Prüfen Sie, welche Java Runtime vorhanden ist.

Mehr

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 1. Benötigte Software Zur Erstellung des Installers wird folgende Software benötigt. Es wird sich in dieser Dokumentation

Mehr

Enigma2 Plugin Entwicklung mit Eclipse

Enigma2 Plugin Entwicklung mit Eclipse Enigma2 Plugin Entwicklung mit Eclipse Enigma2 Plugin Entwicklung mit Eclipse 1/15 Inhaltsverzeichnis 1 ÜBER... 3 2 INSTALLATION... 4 2.1 INSTALLATION VON ECLIPSE... 4 2.2 INSTALLATION VON PYDEV... 4 3

Mehr

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10 Übersicht In den ersten Wochen: Einführung in objektorientierte Programmierung mit C++ Anschließend: Einführung in die programmierbare

Mehr

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome (Timo Heinrich, t_hein03@uni-muenster.de) Inhaltsverzeichnis: 0.Einleitung 1.Teil: Helloworldprogramm 1.1 Quellcode: Helloworld.cpp 1.2

Mehr

Qt Programmierung Teil 1 Fenster erstellen by NBBN (http://nbbn.wordpress.com) CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse

Qt Programmierung Teil 1 Fenster erstellen by NBBN (http://nbbn.wordpress.com) CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse Qt Programmierung Teil 1 Fenster erstellen by NBBN (http://nbbn.wordpress.com) CrashKurs-Artig. Was brauche ich? -Einige C++ Kenntnisse Wie man in C++ mit Hilfe von Qt GUI-Anwendungen programmieren kann.

Mehr

Erste Schritte mit HG 2

Erste Schritte mit HG 2 Erste Schritte mit HG 2 Malte Ried FH-Gießen Version: 1.0 21. November 2003 Inhaltsverzeichnis 1 Einführung 2 2 Allgemeines 2 2.1 Koordinaten...................................... 2 2.2 Farben.........................................

Mehr

cs106 Informatiklabor Teil 1: Java-Installation

cs106 Informatiklabor Teil 1: Java-Installation Herbstsemester 2009 cs106 Informatiklabor Teil 1: Java-Installation Florian Zeller Vorgehen und Ziele Wöchentlich eine Übung Unterstützte Bearbeitung während den Übungsstunden Austausch mit älteren Semestern

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Subversion / CMake

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Subversion / CMake Leistungskurs C++ Subversion / CMake Subversion am LDV Repository der Gruppen: https://www2.ldv.ei.tum.de/repos/14cppx Anlegen des Repository: svn checkout https://www2.ldv.ei.tum.de/repos/14cppx cd 14cppX

Mehr

Einführung in die Programmierung mit Qt

Einführung in die Programmierung mit Qt Einführung in die Programmierung mit Qt Dr. Ralf Schüler 5.11.2009 Was ist Qt? sprich: [kju:t] Klassenbibliothek für C++ (ferner Java, Python u.a.) sehr umfangreich: GUI, Stringverarbeitung, reguläre Ausdrücke,

Mehr

AJAX SSL- Wizard Referenz

AJAX SSL- Wizard Referenz AJAX SSL- Wizard Referenz Version 1.0.2+ - 04.04.2011 Präambel Die vorliegende Dokumentation beschreibt den AJAX basierten SSL- Wizard der CertCenter AG. Der SSL- Wizard kann mit wenigen Handgriffen nahtlos

Mehr

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum Starthilfe für C# Inhaltsverzeichnis Allgemeines... 2 Bezugsquellen... 2 SharpDevelop... 2.NET Runtime... 2.NET SDK... 2 Installation... 2 Reihenfolge... 2 Vorschlag für eine Ordnerstruktur... 3 Arbeit

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Das Beispiel orientiert sich am selben Code, der im Teil 1 der Serie verwendet wurde. Text Styles: Shell Prompt mit

Mehr

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans... Erste Schritte Dieser Teil der Veranstaltung gibt einen ersten Eindruck der Programmierung mit C++. Es wird ein erstes Gefühl von Programmiersprachen vermittelt, ohne auf die gezeigten Bestandteile genau

Mehr

Objektorientierung: Klassen und Objekte

Objektorientierung: Klassen und Objekte Objektorientierung: Klassen und Objekte Klasse: Beschreibung für eine Menge von Objekten Schablone, Bauplan abstrakte Form Objekt: Instanz einer Klasse konkreter Inhalt (Werte) Klassen bestehen aus Attributen

Mehr

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek C++ - Funktionen und mehr Kerstin Gößner und Ralf Wondratschek Übersicht Deklaration, Definition und Initialisierung Variablen- und Konstantendeklaration Funktionsaufrufe und rückgabewerte Technische Grundlage

Mehr

In diesem Dokument soll kurz auf die Bedienung von VST3PluginTestHost.exe eingegangen werden.

In diesem Dokument soll kurz auf die Bedienung von VST3PluginTestHost.exe eingegangen werden. Hochschule für Angewandte Wissenschaften Hamburg Hamburg University of Applied Sciences Fakultät Technik und Informatik Department Informations- und Elektrotechnik Projekt E7 im Bachelorstudiengang Informations-

Mehr

Erste Schritte zum lauffähigen Java Programm

Erste Schritte zum lauffähigen Java Programm Erste Schritte zum lauffähigen Java Programm Diese kleine Einführung ist eine Hilfe für Studenten der Vorlesung SWT I zur Meisterung der sich ergebenden Hürden bei der Erstellung eines ersten kleinen Java-Programms.

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

Der C++ Crashkurs v1.0

Der C++ Crashkurs v1.0 Der C++ Crashkurs v1.0 Daniel Stöckel, M. Sc. October 14, 2013 1 Grundlegendes 1.1 Das erste Programm Wir beginnen mit einem einfachen Hello world Programm. Listing 1: hello world.cpp // Einbinden der

Mehr

AVR-Programmierung unter Mac OSX

AVR-Programmierung unter Mac OSX AVR-Programmierung unter Mac OSX im Studiengang BEL3 Lehrveranstaltung Embedded Systems Tutorial ausgeführt von: Jürgen Hausladen A-2460 Bruck/Leitha, Obere Neugasse 6 Wien 01.02.2011 Inhaltsverzeichnis

Mehr

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java Grundlagen von Java Aufgabe 1: Typen und Zuweisungen in Java Welche der folgenden Java-Anweisungen sind fehlerhaft? Handelt es sich um einen Compiler- oder einen Laufzeitfehler? Anmerkung: Folgefehler

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

http://www.cis.upenn.edu/~bcpierce/unison/download/stable/unison- 2.9.1/

http://www.cis.upenn.edu/~bcpierce/unison/download/stable/unison- 2.9.1/ Einführung Was ist Unison? Unison ist ein Dateisynchronisationsprogramm für Windows und Unix. Es teilt sich viele Funktionen mit anderen Programmen, wie z.b. CVS und rsync. Folgend einige Vorteile des

Mehr

HTW-Aalen. OpenVPN - Anleitung. Eine Installations- und Nutzungsanleitung zu OpenVPN

HTW-Aalen. OpenVPN - Anleitung. Eine Installations- und Nutzungsanleitung zu OpenVPN HTW-Aalen OpenVPN - Anleitung Eine Installations- und Nutzungsanleitung zu OpenVPN Sabine Gold Oktober 2013 Inhaltsverzeichnis 1 Download und Installation des OpenVPN-Clients... 2 1.1. Betriebssystem Windows...

Mehr

Kurzanleitung - XVA Provider unter Mac OSX 10

Kurzanleitung - XVA Provider unter Mac OSX 10 Kurzanleitung - XVA Provider unter Mac OSX 10 Installation und Bedienung- Inhalt Allgemeine Hinweise:... 1 Kapitel 1 Installation und Konfiguration... 2 Schritt 1: Java SE Development Kit 6 installieren:...

Mehr

2.4 Das erste C++-Programm *

2.4 Das erste C++-Programm * 2.4 Das erste C++-Programm * 11 2.4 Das erste C++-Programm * Den besten Lernerfolg erzielen Sie, wenn Sie alle Beispiele dieses Buchs selbst nachvollziehen. Sie können hierzu einen Compiler verwenden,

Mehr

Code signing mit startssl

Code signing mit startssl Code signing mit startssl Auf der Suche nach einem Anbieter, bei dem ich ein mit Windows 7 nutzbares und günstiges Zertikat erwerben kann bin ich über StartSSL gestolpert. Dort bekommt man ein class 2

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty

1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty 1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty 2. Buildroot installieren Buildroot (www.buildroot.org)

Mehr

Autor: Uwe Labs Stand: 21.03.2008. 1. WinSecureCopy in der paedml 3.0 Novell...1

Autor: Uwe Labs Stand: 21.03.2008. 1. WinSecureCopy in der paedml 3.0 Novell...1 . WinSecureCopy in der paedml 3.0 Novell Autor: Uwe Labs Stand: 2.03.2008 Inhaltsverzeichnis. WinSecureCopy in der paedml 3.0 Novell..... Übersicht....2. Installation und Start....3. Benutzung von WinSCP...6..

Mehr

Software Engineering II

Software Engineering II Software Engineering II Codegenerierung für den SmartIO Editor mit der Modeling Workflow Engine Wintersemester 10/111 Fachgebiet Software Engineering Albert Zündorf / Wiederholung Bisher im Laufe des Semesters

Mehr

Codingstandard. Softwareentwicklung Praktikum Stand: 27.02.2008

Codingstandard. Softwareentwicklung Praktikum Stand: 27.02.2008 I. Einleitung II. Codingstandard Softwareentwicklung Praktikum Stand: 27.02.2008 Wie in der Vorlesung schon ausgeführt wurde, ist die Lesbarkeit und Wartbarkeit des Sourcecodes ein sehr wichtiges Kriterium

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

Erstellen sicherer ASP.NET- Anwendungen

Erstellen sicherer ASP.NET- Anwendungen Erstellen sicherer ASP.NET- Anwendungen Authentifizierung, Autorisierung und sichere Kommunikation Auf der Orientierungsseite finden Sie einen Ausgangspunkt und eine vollständige Übersicht zum Erstellen

Mehr

GUI Programmierung mit Qt

GUI Programmierung mit Qt GUI Programmierung mit Qt C++ vs. JAVA Norman Wolf 22.04.05 GUI Programmierung mit Qt 1 Einleitung Qt wird von der norwegischen Firma Trolltech entwickelt Es ist kommerzielle Software, die aber von Trolltech

Mehr

Zugriff zum Datenaustausch per scponly

Zugriff zum Datenaustausch per scponly Zugriff zum Datenaustausch per scponly Warum scponly? In der Grundkonfiguration der Musterlösung ist es notwendig, dass ein Benutzer, der die Möglichkeit haben soll von außen Dateien mit dem Server auszutauschen,

Mehr

Theorie und Praxis einer JSON-RPC-basierten Web-API

Theorie und Praxis einer JSON-RPC-basierten Web-API Theorie und Praxis einer JSON-RPC-basierten Web-API Christian Krause Christian.Krause@raritan.com Raritan Deutschland GmbH Chemnitzer LinuxTage 2015 Gliederung 1 2 Remote Procedure Call Interface Definition

Mehr

Pervasive.SQL ODBC Treiber. ab ABACUS 2006.20er-Version Installationsanleitung

Pervasive.SQL ODBC Treiber. ab ABACUS 2006.20er-Version Installationsanleitung Inhaltsverzeichnis Pervasive.SQL ODBC Treiber ab ABACUS 2006.20er-Version Installationsanleitung Mai 2013 / CL 1 Serverinstallation... 1 2 Clientinstallation... 8 WICHTIG Alle untenstehenden Schritte müssen

Mehr

Programmierkurs: Delphi: Einstieg

Programmierkurs: Delphi: Einstieg Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache

Mehr

Grundlagen der Informatik - 6. Praktikum

Grundlagen der Informatik - 6. Praktikum Grundlagen der Informatik - 6. Praktikum In diesem Praktikum soll es neben der Anwendung von Funktionsdefinitionen auch um einfache Prinzipien der verteilten Quelltext-Strukturierung gehen. Diese spielt

Mehr

Installation von Typo3 CMS

Installation von Typo3 CMS Installation von Typo3 CMS TYPO3 Version 6.2.x unter Windows Eigenen lokalen Webserver mit XAMPP installieren Für die Installation von Typo3 wird eine passende Systemumgebung benötig. Diese besteht aus

Mehr

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Autor: Uwe Labs Stand: 21.03.2008. 1.Administrativer Zugriff von außen...1

Autor: Uwe Labs Stand: 21.03.2008. 1.Administrativer Zugriff von außen...1 . Administrativer Zugriff von außen Autor: Uwe Labs Stand: 2.03.2008 Inhaltsverzeichnis.Administrativer Zugriff von außen..... Überblick....2. imanager und RemoteManager....3. SecureCopy (SFTP)...2.4.

Mehr

Installationsanleitung für R

Installationsanleitung für R Installationsanleitung für R R ist eine Programmiersprache und Statistiksoftware zur Analyse von Daten und deren graphischer Darstellung. Um in R zu programmieren, ist zunächst die R- Basissoftware zu

Mehr

Anleitung: DV4Mini auf einem Raspberry Pi

Anleitung: DV4Mini auf einem Raspberry Pi Anleitung: DV4Mini auf einem Raspberry Pi Präambel OE7BSH Diese Anleitung wurde am 8. September 2015 nach aktuellen release Status (DV4Mini 1.4) erstellt. Nachdem der DV4Mini quasi work in progress ist,

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Vernetzung von Linux und Windows

Vernetzung von Linux und Windows Vernetzung von Linux und Windows Rechnern Installation, Konfiguration, Benutzung und Anwendungsbeispiele Referent: Andre Dibowsky andre@dibowsky.net Linux User Group Datteln Vernetzung von Linux und Windows

Mehr

ANT. Kurzvortrag von Manuel Schulze. mschulze@inf.fu-berlin.de

ANT. Kurzvortrag von Manuel Schulze. mschulze@inf.fu-berlin.de ANT Kurzvortrag von Manuel Schulze mschulze@inf.fu-berlin.de ANT Überblick Teilprojekt der Apache Software Foundation [1] ANT ist Opensource Build-Tool ähnlich wie make (?) jedoch voll auf Java zugeschnitten

Mehr

Knottenwäldchen Software

Knottenwäldchen Software Knottenwäldchen Software Installationsanleitung für die netzbasierte Lösung Knottenwäldchen Software März.2011 Knottenwäldchen Software Seite 2 1 Inhalt 1 Inhalt... 2 2 Übersicht... 3 3 Installation...

Mehr

Tensei-Data Demoleitfaden. Jens Grassel, Andre Schütz

Tensei-Data Demoleitfaden. Jens Grassel, Andre Schütz Tensei-Data Demoleitfaden Jens Grassel, Andre Schütz Inhaltsverzeichnis 1. Installation der Demoversion............................................................... 1 1.1. Windows.............................................................................

Mehr

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de

Das Build Tool Ant. Sebastian Mancke, mancke@mancke-software.de Das Build Tool Ant Sebastian Mancke, mancke@mancke-software.de Grundlagen Motivation Bei der Übersetzung und Pflege von Software treten viele, gleich bleibende Arbeitsschritte auf. Übersetzen des Codes

Mehr

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse 1. Einführung 1.1 Eclipse Die Eclipse ist eine kostenlose integrierte Entwicklungsumgebung oder auch IDE genannt, (Abkürzung IDE, engl. Integrated development enviroment). Sie ist eine grafische Benutzeroberfläche

Mehr

SchlieSSen Sie Ihren Lemur an

SchlieSSen Sie Ihren Lemur an 1 SchlieSSen Sie Ihren Lemur an Der Lemur ist nicht irgendein durchschnittlicher MIDI-Controller. Er spricht 1000 Mal schneller und mit der 4-fachen Auflösung. Also finden Sie auf der Rückseite auch nicht

Mehr

JOB SCHEDULER. Managed User Jobs. Dokumentation Juli 2005. MySQL-Job-Automation

JOB SCHEDULER. Managed User Jobs. Dokumentation Juli 2005. MySQL-Job-Automation MySQL-Job-Automation Managed User Jobs JOB SCHEDULER Dokumentation Juli 2005 Software- und Organisations-Service GmbH Giesebrechtstr. 15 D-10629 Berlin Telefon (030) 86 47 90-0 Telefax (030) 861 33 35

Mehr

Installationsanleitung Netzwerklizenzen Vectorworks 2014

Installationsanleitung Netzwerklizenzen Vectorworks 2014 Installationsanleitung Netzwerklizenzen Vectorworks 2014 Beginnt Ihre Seriennummer mit einem G, lesen Sie hier weiter. Beginnt Ihre Seriennummer mit einem C, lesen Sie bitte auf Seite 4 weiter. Installation

Mehr

Grundlagen der Verwendung von make

Grundlagen der Verwendung von make Kurzskript zum Thema: Grundlagen der Verwendung von make Stefan Junghans Gregor Gilka 16. November 2012 1 Einleitung In diesem Teilskript sollen die Grundlagen der Verwendung des Programmes make und der

Mehr

Starten Sie das Shopinstallatonsprogramm und übertragen Sie alle Dateien

Starten Sie das Shopinstallatonsprogramm und übertragen Sie alle Dateien 3. Installation Ihres Shops im Internet / Kurzanleitung Kurzanleitung: Starten Sie das Shopinstallatonsprogramm und übertragen Sie alle Dateien Geben Sie während der Webbasierten Installationsroutine alle

Mehr

Anleitung Gen2VDR Installationsanleitung für REYCOM. Gen2VDR Installationsanleitung für REYCOM

Anleitung Gen2VDR Installationsanleitung für REYCOM. Gen2VDR Installationsanleitung für REYCOM 1 Gen2VDR Installationsanleitung für REYCOM 2 Anleitung Gen2VDR Installationsanleitung für REYCOM Inhaltsverzeichnis 1 Allgemein... 3 1.1 Systemvoraussetzungen... 3 2 Installation... 4 2.1 Download der

Mehr

Programmentwicklung ohne BlueJ

Programmentwicklung ohne BlueJ Objektorientierte Programmierung in - Eine praxisnahe Einführung mit Bluej Programmentwicklung BlueJ 1.0 Ein BlueJ-Projekt Ein BlueJ-Projekt ist der Inhalt eines Verzeichnisses. das Projektname heißt wie

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere

Mehr

Connecting Android. Externe Hardware mit dem grünen Roboter verbinden. Alexander Dahmen Dominik Helleberg

Connecting Android. Externe Hardware mit dem grünen Roboter verbinden. Alexander Dahmen Dominik Helleberg Connecting Android Externe Hardware mit dem grünen Roboter verbinden Alexander Dahmen Dominik Helleberg Speaker Dominik Helleberg Mobile Development Android / Embedded Tools http://dominik-helleberg.de/+

Mehr

Wie erstelle ich Backups meiner TYPO3 Präsentation?

Wie erstelle ich Backups meiner TYPO3 Präsentation? » Diese FAQ als PDF downloaden Wie erstelle ich Backups meiner TYPO3 Präsentation? Aufgrund einer Sicherheitslücke in der Backupfunktion des Confixx Professional, wurde diese vor einiger Zeit für sämtliche

Mehr

Von der UML nach C++

Von der UML nach C++ 22 Von der UML nach C++ Dieses Kapitel behandelt die folgenden Themen: Vererbung Interfaces Assoziationen Multiplizität Aggregation Komposition Die Unified Modeling Language (UML) ist eine weit verbreitete

Mehr

Einführung in COM. 04.04.2006 Seite 1

Einführung in COM. 04.04.2006 Seite 1 Einführung in COM 04.04.2006 Seite 1 Ziele Sie kennen die Funktion der Registry für COM Sie können die Struktur eines COM-Objekts erklären Sie können erklären, wie ein remote-server gestartet wird 04.04.2006

Mehr

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 VORBEDINGUNGEN Als Vorbedingungen sollte bereits

Mehr

4 Vererbung, Polymorphie

4 Vererbung, Polymorphie 4 Vererbung, Polymorphie Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work

Mehr

Update Messerli MySQL auf Linux

Update Messerli MySQL auf Linux Update Messerli MySQL auf Linux Einleitung Grundsätzlich wird beim Update der Messerli Software auf einem Linux-Server wie folgt vorgegangen: 1. Vorhandener RMI-MySQL Server wird auf Linux aktualisiert

Mehr

Von SystemC zum FPGA in 7 Schritten. Kurzes Tutorial für die Synthese von SystemC Entwürfen auf dem ISMS Server der Hochschule

Von SystemC zum FPGA in 7 Schritten. Kurzes Tutorial für die Synthese von SystemC Entwürfen auf dem ISMS Server der Hochschule Von SystemC zum FPGA in 7 Schritten Kurzes Tutorial für die Synthese von SystemC Entwürfen auf dem ISMS Server der Hochschule Bremen. Mirko Kruse 21. November 2004 Inhalt 1 Einleitung...1 2 Benötigte Software...1

Mehr

Ant in Eclipse Starthilfe

Ant in Eclipse Starthilfe IN DIESER KURSEINHEIT Einleitung o Um was geht's eigentlich? Hello World o Das Ant Skript Mehrere Targets und Properties o Hello World Ausgabe Ant Launch Configurations o Definition o Modifikation o Nutzung

Mehr

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren 1 32- oder 64-bit Windows feststellen In den nachfolgenden Schritten ist es nötig, dass Sie wissen, ob Sie

Mehr

Einführung in die Programmierung mit C++

Einführung in die Programmierung mit C++ 1 Seite 1 Einführung in die Programmierung mit C++ Teil IV - Weiterführende Themen 14. Modularisierung und Automatisierung Was heißt Modularisierung? Seite 2 bisher Programm komplett in einer Datei längere

Mehr

Alltagsnotizen eines Softwareentwicklers

Alltagsnotizen eines Softwareentwicklers Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,

Mehr

Betriebssystem Windows - SSH Secure Shell Client

Betriebssystem Windows - SSH Secure Shell Client Betriebssystem Windows - SSH Secure Shell Client Betriebssystem Windows - SSH Secure Shell Client... 1 Download... 2 Installation... 2 Funktionen... 3 Verbindung aufbauen... 3 Verbindung trennen... 4 Profile...

Mehr

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz Einführung in das Microsoft.NET-Framework Programmiersprache C# MEF Das Managed Extensibility Framework André Kunz 21.09.2010 1 In dieser Einführung bekommen Sie einen kurzen Einstieg in das.net-framework

Mehr

Installation und Benutzung AD.NAV.ZipTools

Installation und Benutzung AD.NAV.ZipTools Installation und Benutzung AD.NAV.ZipTools Version 1.0.0.0 ALTENBRAND Datentechnik GmbH Am Gelicht 5 35279 Neustadt (Hessen) Tel: 06692/202 290 Fax: 06692/204 741 email: support@altenbrand.de Die Komponente

Mehr

Das Handbuch zu Blogilo. Mehrdad Momeny Übersetzung: Burkhard Lück

Das Handbuch zu Blogilo. Mehrdad Momeny Übersetzung: Burkhard Lück Mehrdad Momeny Übersetzung: Burkhard Lück 2 Inhaltsverzeichnis 1 Einführung 5 2 Blogilo benutzen 6 2.1 Erste Schritte......................................... 6 2.2 Einen Blog einrichten....................................

Mehr

OpenSSH installieren (Windows) Was ist OpenSSH?

OpenSSH installieren (Windows) Was ist OpenSSH? OpenSSH installieren (Windows) Was ist OpenSSH? OpenSSH (Open Secure Shell) ist eine freie SSH/SecSH-Protokollsuite, die Verschlüsselung für Netzwerkdienste bereitstellt, wie etwa Remotelogins, also Einloggen

Mehr

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ Arbeiten mit BlueJ Compilieren, Editieren, Objekte erzeugen, Methoden aufrufen, Objekte inspizieren, vorhandene Klassen benutzen, eigene Klassen und Methoden erstellen In BlueJ geht es einfach BlueJ durch

Mehr

boost::asio-bibliothek 238

boost::asio-bibliothek 238 boost::asio-bibliothek 238 Die von Christopher M. Kohlhoff seit 2003 entwickelte Bibliothek bietet eine für C++ geeignete Schnittstelle auf Basis der BSD-Sockets. Das bedeutet, dass prinzipiell auch alle

Mehr

Installationsanleitung für Haufe Advolux Kanzleisoftware ab Version 2.5 (Linux)

Installationsanleitung für Haufe Advolux Kanzleisoftware ab Version 2.5 (Linux) Installationsanleitung für Haufe Advolux Kanzleisoftware ab Version 2.5 (Linux) Verfasser : Advolux GmbH, AÖ Letze Änderung : 20.04.2012 Version : v2 1 Inhaltsverzeichnis 1. Hardware-Voraussetzungen...

Mehr

Byte-Taxi. Bedienungsanleitung. Seite 1 von 8

Byte-Taxi. Bedienungsanleitung. Seite 1 von 8 Byte-Taxi Bedienungsanleitung Seite 1 von 8 Inhaltsverzeichnis 1. Beschreibung 3 2. Systemvoraussetzungen 4 3. Installationsanleitung 5 4. Bedienung 6 5. Infos & Kontakt 8 Seite 2 von 8 1. Beschreibung

Mehr