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

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

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

Anleitung zur Einrichtung von OpenCV

Anleitung zur Einrichtung von OpenCV Anleitung zur Einrichtung von Dieses Dokument beschreibt die Einrichtung und Funktionsüberprüfung von im Kontext der Lehrveranstaltung. Einrichtung Dieser Abschnitt beschreibt die Einrichtung von unter

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

Python Installation. 1 Vorbereitung. 1.1 Download. Diese Anleitung ist für Windows ausgelegt.

Python Installation. 1 Vorbereitung. 1.1 Download. Diese Anleitung ist für Windows ausgelegt. Python Installation 1 Vorbereitung Diese Anleitung ist für Windows ausgelegt. 1.1 Download Python kann online unter https://www.python.org/downloads/ heruntergeladen werden. Hinweis: Im CoderDojo verwenden

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

Drupal 8 manuell installieren

Drupal 8 manuell installieren Drupal 8 manuell installieren Version 1.0 Drupal 8 manuell installieren Um die aktuellste Version zu nutzen, muss Drupal manuell installiert werden. Dazu benötigst Du Zugriff auf Dein STRATO Hosting-Paket,

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

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

Java Wireless Toolkit (JWT) Bei der Programmierung von Anwendungsprogrammen für mobile Endgeräte eignet sich die Verwendung des Java Wireless Toolkit.

Java Wireless Toolkit (JWT) Bei der Programmierung von Anwendungsprogrammen für mobile Endgeräte eignet sich die Verwendung des Java Wireless Toolkit. 1 Seminar zum Programmierprojekt Arbeitsbereich Technische Informatik Ausgabe: 30. April 2008 Anleitung B3 Einführung in die Entwicklungsumgebungen Allgemeines In dieser Aufgabe lernen wir die Entwicklungsumgebungen

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

Informationen zur Verwendung von Visual Studio und cmake

Informationen zur Verwendung von Visual Studio und cmake Inhaltsverzeichnis Informationen zur Verwendung von Visual Studio und cmake... 2 Erste Schritte mit Visual Studio... 2 Einstellungen für Visual Studio 2013... 2 Nutzung von cmake... 6 Installation von

Mehr

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Kurs Teil 1 "hello world" Vergleich von C++ und Java Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Spezialitäten Schlüsselwort 'const', Copy Constructor,

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

Anleitung zur Einrichtung von OpenCV

Anleitung zur Einrichtung von OpenCV Anleitung zur Einrichtung von Dieses Dokument beschreibt die Einrichtung und Funktionsüberprüfung von im Kontext der Lehrveranstaltung. Einrichtung Dieser Abschnitt beschreibt die Einrichtung von unter

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

Angewandte Kryptografie Praktikum 0

Angewandte Kryptografie Praktikum 0 Angewandte Kryptografie Praktikum 0 Thema: C++ Programmierung mit Eclipse Sommersemester 2015 Prof. Dr. Christoph Karg Hochschule Aalen Im Rahmen dieses Praktikums wird erläutert, wie man mit den GNU Entwicklungswerkzeugen,

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

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

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

Python SVN-Revision 12

Python SVN-Revision 12 Python SVN-Revision 12 Uwe Ziegenhagen 7. Januar 2012 Vorwort Dieses Skript erhebt keinen Anspruch auf Vollständigkeit oder Richtigkeit. Es wird geschrieben, um mir als Gedächtnisstütze für den Umgang

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

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

MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven

MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven MPI-Programmierung unter Windows mit MPIH2 Installieren von MPIH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen hristian Terboven Rechen- und Kommunikationszentrum RWTH Aachen 1 02/2007 luster-installationsworkshop

Mehr

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Teil 1: Wiederholung C Heutige Agenda Nutzereingaben verarbeiten Teil 2: Grundlagen in C++ Erstes

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

Ogre Einführung Teil 1

Ogre Einführung Teil 1 Inhalt -Einleitung -Installieren und Einrichten von Ogre -Die erste Anwendung Ogre Einführung Teil 1 Einleitung Eine 3D Engine ist eine sehr komplexe Software und besteht aus mehreren tausend Zeilen Programmcode.

Mehr

Wie man eigene Programme erstellt

Wie man eigene Programme erstellt Kapitel 3 Wie man eigene Programme erstellt In diesem Kapitel geht es darum, sich mit einem Compiler vertraut zu machen. Dabei erfahren Sie, wie Sie eigene Programme auf den Systemen Windows und Linux

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

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

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

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

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

LaFonera Erweiterung - Erstinstallation -

LaFonera Erweiterung - Erstinstallation - LaFonera Erweiterung - Erstinstallation - Inhaltsverzeichnis Benötigte Software SSH-Client z.b. Putty SFTP-Client z.b. WinSCP Vorraussetzungen Firmwareversion SSH Zugriff WinSCP3 Zugriff Installation der

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

Tutorial: Eigene Module und Extensions entwickeln. version: 0.1 Author: Anja Beuth

Tutorial: Eigene Module und Extensions entwickeln. version: 0.1 Author: Anja Beuth Tutorial: Eigene Module und Extensions entwickeln version: 0.1 Author: Anja Beuth Table of contents 1 2 2.1 2.2 2.3 2.4 3 4 4.1 4.2 4.3 5 5.1 6 6.1 6.2 Notwendigkeit prüfen... Ein Projekt in Visual Studio

Mehr

Installationsanleitung für die netzbasierte Variante Bis Version 3.5. KnoWau, Allgemeine Bedienhinweise Seite 1

Installationsanleitung für die netzbasierte Variante Bis Version 3.5. KnoWau, Allgemeine Bedienhinweise Seite 1 1 Installationsanleitung für die netzbasierte Variante Bis Version 3.5 Copyright KnoWau Software 2013 KnoWau, Allgemeine Bedienhinweise Seite 1 2 Seite absichtlich leer KnoWau, Allgemeine Bedienhinweise

Mehr

VMscope GmbH. Plugins entwickeln für den VM Slide Explorer 2010. Daniel Heim, 17.08.2011 Seite 1/15

VMscope GmbH. Plugins entwickeln für den VM Slide Explorer 2010. Daniel Heim, 17.08.2011 Seite 1/15 Plugins entwickeln für den VM Slide Explorer 2010 Daniel Heim, 17.08.2011 Seite 1/15 Inhaltsverzeichnis 1 Allgemeines... 3 2 Ein Plugin schreiben... 4 3 Ein Plugin registrieren... 11 4 Aktivieren von Plugins...

Mehr

Software-Update zum Buch 3D-Spieleprogrammierung mit DirectX 9 und C++

Software-Update zum Buch 3D-Spieleprogrammierung mit DirectX 9 und C++ Software-Update zum Buch 3D-Spieleprogrammierung mit DirectX 9 und C++ von David Scherfgen Stand: 05.07.2011 / Version 2 Inhalt Wozu, warum, was ist das?... 1 Welche Software brauche ich?... 2 Wie kompiliere

Mehr

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT Architektur Übersicht (allgemeine) OOP in C++ Polymorphie Virtuelle Funktionen Kompilieren Linken dynamische/statische Bibliotheken Tutorial: vs2008+ogre+(campus modell) Architektur (allgemeine) OOP in

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

Rangee Firmware Update. Inhaltsverzeichnis

Rangee Firmware Update. Inhaltsverzeichnis Rangee Firmware Update Inhaltsverzeichnis 1 Allgemein...2 2 FTP Server Adresse...2 3 Wie sieht ein Update aus...3 4 Updates im LAN verteilen per FTP am Beispiel Filezilla...4 5 Update per lokal angeschlossenem

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

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

Installation von CVS mit sicherer Datenübertragung nach dem SSH-Protokoll unter Windows (Version 2.0)

Installation von CVS mit sicherer Datenübertragung nach dem SSH-Protokoll unter Windows (Version 2.0) Kurzanleitung: Installation von CVS mit sicherer Datenübertragung nach dem SSH-Protokoll unter Windows (Version 2.0) Zusammenfassung Diese Anleitung zeigt, wie WinCVS so installiert und eingerichtet wird,

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

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

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

Praktikum Betriebssysteme 1. Aufgabe (1)

Praktikum Betriebssysteme 1. Aufgabe (1) FG TECHNISCHE INFORMATIK U BS 041 01 TH 09 Praktikum Betriebssysteme 1. Aufgabe (1) Es wird ein unter LINUX lauffähiges C++-Programm ptab, mit dem Informationen über die Partitionierung von Festplatten

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

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

Was ist QT? Beispiele: KDE Google Earth Mathematika

Was ist QT? Beispiele: KDE Google Earth Mathematika Einführung in QT Was ist QT? QT ist eine Klassenbibliothek für plattformübergreifende Programmierung graphischer Benutzeroberflächen QT ist für verschiedene Graphikplattformen wie X11 (Unix), Windows,

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

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

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

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0 Anleitung zur Installation und Verwendung von eclipseuml 2.1.0 In dieser Anleitung wird die Installation und Verwendung von Omodo eclipseuml 2.1.0 beschrieben. eclipseuml ist eine Zusatzsoftware für Eclipse,

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

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

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

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Howto Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Peter Bitterlich Markus Langer 12. Oktober 2012 Zusammenfassung Dieses Dokument erklärt Schritt für Schritt die Installation

Mehr

IBM SPSS Data Access Pack Installationsanweisung für Windows

IBM SPSS Data Access Pack Installationsanweisung für Windows IBM SPSS Data Access Pack Installationsanweisung für Windows Inhaltsverzeichnis Kapitel 1. Übersicht.......... 1 Einführung............... 1 Bereitstellen einer Datenzugriffstechnologie.... 1 ODBC-Datenquellen...........

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

Installation von AmigaOS 3.9 unter WinUAE

Installation von AmigaOS 3.9 unter WinUAE Seite 1 von 22 Installation von AmigaOS 3.9 unter WinUAE Inhalt Einleitung Vorbereitung Konfiguration Installation Installation der BoingBags Installation von Picasso96 Installation von AHI Einleitung

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

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

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

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

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

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

Lenze OPC UA Kommunikation V1.0

Lenze OPC UA Kommunikation V1.0 Verwendete Komponenten: Lenze: 94xx: Highline FW 12 Easy Starter: 1.6 OPC UA Client: Softing OPC UA Client V1.2 Unified Automation UAexpert V1.2.2 175 Der Easy Starter verfügt ab der Version 1.6 über eine

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

Fernwartung des Schulservers übers Internet Anleitung ssh - putty winscp - für Arktur v.3.5.2 bzw. v.3.5.6 -

Fernwartung des Schulservers übers Internet Anleitung ssh - putty winscp - für Arktur v.3.5.2 bzw. v.3.5.6 - Fernwartung des Schulservers übers Internet Anleitung ssh - putty winscp - für Arktur v.3.5.2 bzw. v.3.5.6 - Die folgende Anleitung beschreibt die Fernwartung des Schulservers z.b. von zu Hause über das

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

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

09.10.2015. 02.10.2015 + 07.10.2015 Seite 1. 02.10.2015 + 07.10.2015 Seite 2

09.10.2015. 02.10.2015 + 07.10.2015 Seite 1. 02.10.2015 + 07.10.2015 Seite 2 02.10.2015 + 07.10.2015 Seite 1 02.10.2015 + 07.10.2015 Seite 2 1 Anzahl der Klassenarbeiten: Mindestens zwei Klassenarbeiten pro Halbjahr (= 4 KA pro Jahr) Im ersten Ausbildungsjahr gibt es jedoch kein

Mehr

8a. Exkurs.NET. 8a.1.NET Architektur

8a. Exkurs.NET. 8a.1.NET Architektur 8a. Exkurs.NET Inhalt: 8a.1.NET Architektur 8a.2 Kooperation von Anwendungen über ADO -.NET 8a.3 Unterschiede gegenüber gewöhnlicher WIN32- Programmierung 1 8a.1.NET Architektur Bislang wurden die C/C++

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

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

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Installationsanleitungen

Installationsanleitungen Installationsanleitungen INPA SGBD-Entwicklungsumgebung (EDIABAS) INPA für Entwickler Bevor Sie EDIABAS / INPA installieren können, müssen Sie sich für den Ordner sgref auf smuc0900 freischalten lassen.

Mehr

MetaQuotes Empfehlungen zum Gebrauch von

MetaQuotes Empfehlungen zum Gebrauch von MetaQuotes Empfehlungen zum Gebrauch von MetaTrader 4 auf Mac OS Auch wenn viele kommerzielle Angebote im Internet existieren, so hat sich MetaQuotes, der Entwickler von MetaTrader 4, dazu entschieden

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

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

Nutzung der VDI Umgebung

Nutzung der VDI Umgebung Nutzung der VDI Umgebung Inhalt 1 Inhalt des Dokuments... 2 2 Verbinden mit der VDI Umgebung... 2 3 Windows 7... 2 3.1 Info für erfahrene Benutzer... 2 3.2 Erklärungen... 2 3.2.1 Browser... 2 3.2.2 Vertrauenswürdige

Mehr

Hochschule Aalen. OpenVPN. Anleitung zur Installation

Hochschule Aalen. OpenVPN. Anleitung zur Installation Hochschule Aalen OpenVPN Anleitung zur Installation Gold, Sabine / Holst, Matthias Januar 2016 Vorwort Bestimmte Dienste der Hochschule sind nicht über das Internet erreichbar, sondern können nur hausintern

Mehr

Workflow+ Installation und Konfiguration

Workflow+ Installation und Konfiguration Workflow+ Installation und Konfiguration Systemübersicht Workflow+ Designer Mit dem Workflow+ Designer werden Workflows und Eingabemasken erstellt. Mit der integrierten Test- und Debugging Funktion können

Mehr

Informatik I. Informatik I. 6.1 Programme. 6.2 Programme schreiben. 6.3 Programme starten. 6.4 Programme entwickeln. 6.1 Programme.

Informatik I. Informatik I. 6.1 Programme. 6.2 Programme schreiben. 6.3 Programme starten. 6.4 Programme entwickeln. 6.1 Programme. Informatik I 05. November 2013 6. Python-, kommentieren, starten und entwickeln Informatik I 6. Python-, kommentieren, starten und entwickeln Bernhard Nebel Albert-Ludwigs-Universität Freiburg 05. November

Mehr

Praktikum Ingenieurinformatik. Termin 2. Mein erstes C-Programm

Praktikum Ingenieurinformatik. Termin 2. Mein erstes C-Programm Praktikum Ingenieurinformatik Termin 2 Mein erstes C-Programm 1 1. Einleitung 2. Erstes C-Programm 3. Fehler ins Programm einbauen 4. Zweites und drittes C-Programm 5. Installation der Visual C++ 2010

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm

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

Eclipse 3.0 (Windows)

Eclipse 3.0 (Windows) Eclipse Seite 1 Eclipse 3.0 (Windows) 1. Eclipse installieren Eclipse kann man von der Webseite http://www.eclipse.org/downloads/index.php herunterladen. Eclipse ist für Windows, Mac und Linux erhältlich.

Mehr

Automatisierte Erstellung von Software-Builds und -dokumentationen. Teil 1

Automatisierte Erstellung von Software-Builds und -dokumentationen. Teil 1 Automatisierte Erstellung von Software-Builds und -dokumentationen Teil 1 Autoren: Hagedorn, Robert; Denninger, Oliver Kontakt: {hagedorn denninger}@fzi.de Web: http://zfs.fzi.de Ort, Datum: Karlsruhe,

Mehr

Dokumentation. juris Autologon-Tool. Version 3.1

Dokumentation. juris Autologon-Tool. Version 3.1 Dokumentation juris Autologon-Tool Version 3.1 Inhaltsverzeichnis: 1. Allgemeines... 3 2. Installation Einzelplatz... 3 3. Installation Netzwerk... 3 4. Konfiguration Netzwerk... 3 4.1 Die Autologon.ini...

Mehr

Programmierung eines NewsTickers in Java

Programmierung eines NewsTickers in Java Programmierung eines NewsTickers in Java ( & ) Projektarbeit Programmiertechnik:Java NTA FH Isny 12. Info David Mayr / Andreas Krug Seite 1 von 7 ::: David Mayr / Andreas Krug [ 12. Info NTA FH Isny ]

Mehr

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE Version 1.12 01.07.2014 SEITE _ 2 INHALTSVERZEICHNIS 1. Einleitung...Seite 03 2. Zugriff auf Cloud Object Storage mit Cyberduck...Seite 04 3. Neuen Container

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

SharePoint Schnittstelle für Microsoft Dynamics CRM 2011

SharePoint Schnittstelle für Microsoft Dynamics CRM 2011 SharePoint Schnittstelle für Microsoft Dynamics CRM 2011 Benutzerhandbuch zur SharePoint Schnittstelle für MS CRM 2011 Schnittstellenversion: 5.2.2 Dokumentenversion: 3.1 Inhalt 1. Vorwort... 4 2. Funktionsbeschreibung...

Mehr

Installation Messerli MySQL auf MAC OS X

Installation Messerli MySQL auf MAC OS X Installation Messerli MySQL auf MAC OS X Einleitung Grundsätzlich wird bei der Installation der Messerli Software auf einem Mac-Server wie folgt vorgegangen: 1. Angepasster RMI-MySQL Server wird auf Mac

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