seeseekey.net - Invictus Deus Ex Machina

Beginnend mit dem Jahre 2003 wurde an der Universität Lausanne in der Schweiz eine Software für interaktive Whiteboards entwickelt und eingesetzt. Diese Software trug dabei den Namen Uniboard. Auf Betreiben der gemeinnützigen Interessenvereinigung für Digitale Bildung in Afrika wurden alle Rechte dieser Software von der französischen Regierung gekauft.

open-sankore.org

open-sankore.org

Seitdem wird die Software unter dem Namen Open-Sankoré weiterentwickelt. Es handelt sich dabei um die erste freie Software für interaktive Whiteboards. Technisch basiert die Software dabei auf C++, QT und HTML5 und ist unter der GPL in der Version 3 lizenziert. Open-Sankoré ist für Linux, Mac OS X und Windows verfügbar. Bezogen werden kann die Software auf der offiziellen Seite unter open-sankore.org.

Wer auf der Suche nach einem freien GIS-System ist, sollte sich einmal QGIS (früher unter dem Namen Quantum GIS bekannt) anschauen. Technisch basiert QGIS auf dem Qt-Framework. Das GIS-System verfügt unter anderem über Informationen zur Visualisierung, Abfrage und Analyse von Daten.

QGIS mit einem DGM

QGIS mit einem DGM

Lizenziert ist QGIS unter der GPL und damit freie Software. Bezogen werden kann es auf der offiziellen Seite unter qgis.org. Dort stehen im Moment Versionen für Linux, Mac OS X und Windows zur Verfügung. Daneben existiert auch eine Version für Android.

Da auf Android Anwendungen in Java geschrieben werden, ist das kompilieren von Mana Mobile für Android etwas komplizierter. Schließlich handelt es sich um eine in Qt (und C++) geschriebene Anwendung. Diese Anleitung bezieht sich dabei auf einen Kubuntu 10.10 Rechner. Zuerst muss das entsprechende Qt SDK für Android unter http://sourceforge.net/projects/necessitas/files/ heruntergeladen werden.

Nach dem Download muss der Installer mittels:

chmod +x necessitas-0.1.1-Linux-x86-Install

ausführbar gemacht werden. Dann kann der Installer gestartet werden. Installiert werden sollte das ganze in den Ordner /opt/necessitas/ da dieser vom Entwicklerteam von Necessitas intensiv getestet wurde.

Nun müssen noch das Android SDK sowie das Android NDK installiert werden. Das SDK kann dabei unter http://developer.android.com/sdk/index.html bezogen werden. Nach dem Download des selben wird das SDK entpackt und an eine gewünschte Stelle gelegt. Anschließend geht man dort in den Ordner tools und führt im Terminal

./android update sdk

aus. Dadurch wird das SDK geupdatet. Nun muss nur noch das NDK (zu finden unter http://developer.android.com/sdk/ndk/index.html) herunter geladen werden und an gewünschter Stelle entpackt werden. Bei beiden Developer Kits ist dabei zu achten die jeweils richtige Version (in diesem Fall die Linux Version) herunterzuladen.

Nun kann der Qt Creator for Android gestartet werden. Der Installer hat dazu im Desktop Ordner (im Home Verzeichnis) ein Shortcut angelegt. Nach dem Start der IDE öffnet man die Optionen (Tools -> Options) und geht dort auf den Qt4 Tab. Dort wird bei der Android für QT Version der Pfad für qmake eingetragen (/opt/necessitas/Android/“qtversion“/bin/qmake). Dieser QT Version muss dann noch ein Name zugewiesen werden z.B. android-lighthouse-4.8.0.

Als nächstes wechselt man zu dem Android Tab. Dort wird dann der Pfad zum Android SDK (Minimum android-sdk_r09) und zum Android NDK (Minimum android-ndk_r5) gesetzt. Nun muss der korrekte Toolchain gesetzt werden, in diesem Fall arm-linux-androideabi-4.4.3. Als letztes muss der Pfad für ant gesetzt werden welcher meist /usr/bin/ant sein sollte.

Nun geht man nochmal auf den Qt4 Tab und klickt dort auf Build all, damit alle wichtigen Tools gebaut werden. Anschließend kann der Dialog mit einem Klick auf Apply & OK verlassen werden.

Nun kann es an die Einrichtung von Mana Mobile gehen. Im ersten Schritt sollte das Projekt aus den SVN ausgecheckt werden. Dies funktioniert mittels:

svn checkout https://invertika.googlecode.com/svn/trunk/client-mobile/ invertika

In diesem Projekt befindet sich eine .pro Datei welche mit dem Qt Creator geöffnet werden kann. Beim öffnen fragt der Qt Creator welche Buildziele man compieren möchte. Hier wählt man die Androidvarianten mit an und bestätigt das ganze mit dem Finish Button. Dann kann man das ganze testweise mit dem Build All Button kompilieren. Dabei dürfte es an zwei Stellen zu Problemen kommen. Die erste Stelle ist die Funktion setOrientation (in der Datei qmlapplicationviewer.cpp):

    case ScreenOrientationLockPortrait:
        //attribute = Qt::WA_LockPortraitOrientation;
        break;
    case ScreenOrientationLockLandscape:
        //attribute = Qt::WA_LockLandscapeOrientation;
        break;
    default:
    case ScreenOrientationAuto:
        //attribute = Qt::WA_AutoOrientation;
        break;

Dort müssen die Zuweisungen des Attributes auskommentiert werden. Anschließend dürfte ein Fehler in der Bibliothek enet (enet_address_get_host in der Datei unix.c) auftreten:

    #if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
        //gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum);
    #else
        hostEntry = gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & errnum);
    #endif
    #else
        in.s_addr = address -> host;

        hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET);
    #endif

Hier wird dann der Funktionsaufruf gethostbyaddr auskommentiert. Danach sollte das ganz kompilieren. Wenn man dann auf den Run Button drückt liefert ant noch eine Fehlermeldung:

BUILD FAILED
/home//android-sdk-linux_x86/tools/ant/main_rules.xml:306: null returned: 1

Total time: 0 seconds
Packaging Error: Command ‚/usr/bin/ant debug‘ failed.Exit code: 1
Error while building project manamobile (target: Android)
When executing build step ‚Packaging for Android‘

Hier hilft es die minimale SDK Version von android-3 auf android-4 anzuheben. Dazu geht man auf den Tab Projects und dort auf die Run Konfiguration des Androidprojektes. Dort kann man diese Einstellungen dann vornehmen.

Da die OpenGL Bindings für die Android Qt Version noch nicht lauffähig sind muss in der Manamobile.pro die Zeile contains(QT_CONFIG, opengl): QT += opengl auskommentiert werden:

    QT += network
    #contains(QT_CONFIG, opengl): QT += opengl

In der main.cpp müssen folgende Zeilen auskommentiert werden:

    #ifndef QT_NO_OPENGL
    //#include 
    #endif
 
    #ifndef QT_NO_OPENGL
       //viewer.setViewport(new QGLWidget);
    #endif

Außerdem muss noch die Zeile:

    viewer.setMainQmlFile(QLatin1String("qml/main/mobile.qml"));

in

    viewer.setMainQmlFile(QLatin1String("/sdcard/qml/main/mobile.qml"));

abgeändert werden. Der qml Ordner sollte dem entsprechend dann auch auf der SD Karte liegen. Eventuell kann es zu Problemen kommen, wenn bei der Anwendung die falschen bzw. ungenügende Rechte im Manifest gesetzt sind. Normalerweise werden für Mana Mobile folgende Rechte benötigt:

– android.permission.INTERNET
– android.permission.WRITE_EXTERNAL_STORAGE

Ein anderes Problem könnte auftreten wenn nicht alle benötigten Qt Bibliotheken in den Projekteinstellungen aktiviert sind. Dazu geht man in die Projekteigenschaften unter Android -> Run -> Package Configuration -> Libraries und klickt dort auf den Button Read informations from application. Nun muss aus dem Market nur noch Ministro (stellt die OpenGL Bindings unter Android bereit) heruntergeladen werden. Danach sollte Manamobile auf einem Androidgerät laufen. Dabei kommt es im Moment noch zu Einschränkungen, so werden Touchevents noch nicht richtig verarbeitet.

Möchte man den Button für die Kontexthilfe in Qt Fenstern ausblenden so reicht für das entsprechende Fenster im Konstruktor folgendes zu schreiben:

FormProgress::FormProgress(QWidget *parent) : QDialog(parent)
{
  setupUi(this);

  //WindowsFlags
  setWindowFlags(windowFlags() & (~(Qt::WindowContextHelpButtonHint)));
}

Und schon ist der entsprechende Button in der Titelleiste weg 🙂

Wer mit Qt programmieren möchte der braucht natürlich Dokumentation. Dort ist die erste Anlaufstelle die offizielle Dokumentation welche unter http://doc.qt.nokia.com/ zu finden ist. Einen schönen Artikel zu diesem Thema gibt es auch von Pro Linux unter http://www.pro-linux.de/artikel/2/1097/entwicklung-von-applikationen-in-qt-40.html sowie unter http://www.pro-linux.de/artikel/2/1098/entwicklung-von-applikationen-in-qt-40-teil-2.html. Wer das ganze in Buchform haben möchte sollte sich dieses Buch hier anschauen. Es ist zwar schon etwas älter bietet aber eine fundierte Einführung in Qt und ist auch preislich in Ordnung.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Qt

Möchte man im Qt Designer ein QGLWidget für OpenGL in den Dialog einsetzen so wird man feststellen das keines existiert. Darum setzt man zunächst ein Widget in das Formular. Anschließend klickt man mit der rechten Maustaste auf das Formular und wählt dort Promote to… aus. Anschließend öffnet sich folgender Dialog:

Dort gibt man dann bei Promoted class name QGLWidget (das Header File wird automatisch eingetragen) ein und drückt anschließend auf Add und beendet den Dialog mit Promote. Schon hat man das entsprechende Widget im Qt Designer angelegt.

Möchte man das Qt Framework und Visual Studio benutzen so sollte man sich das entsprechende Addin unter http://qt.nokia.com/downloads/visual-studio-add-in anschauen. Neben dem Addin wird dann noch das Framework benötigt welches unter http://qt.nokia.com/downloads/windows-cpp-vs2008 bezogen werden kann. Anschließend findet man im Visual Studio einen neuen Menüpunkt Qt. Das Addin ist damit installiert.

Nun sollte noch die Umgebungsvariable Path um das bin Verzeichnis des Qt Framworks erweitert werden (z.B. C:\Qt\4.6.3\bin) sowie eine neue Umgebungsvariable namens QTDIR angelegt werden in welcher der Pfad des gesamten Framworks steht (z.B. C:\Qt\4.6.3\). Nun kann mit Qt gearbeitet werden.

Weitere Informationen gibt es unter:
http://mm-werkstatt.informatik.uni-augsburg.de/documents/tutorials/qt2005.pdf

SNES Emulatoren unter Linux sind so eine Sache. Wir haben da einmal SNES9x, ZSNES und noch einen Emulator den ich aber erst später nennen möchte 🙂 Unter Windows benutze ich immer SNES9x. Das war dort für mich das Non Plus Ultra. Ein schöne Oberfläche und er machte wofür er gemacht ist: Spiele emulieren. Leider sieht es mit der Oberfläche für SNES 9x nicht ganz so rosig aus. Und Fullscreen wollte er bei mir auch nicht laufen. Von der Controllerunterstützung unter Linux in Verbindung mit SNES9x fange ich jetzt gar nicht erst an. Für Windows ist SNES9x unter http://www.snes9x.com/ zu finden.

Also musste eine Alternative her. Diese Alternative war ZSNES. Beim ersten Mal ist die Oberfläche gewöhnungsbedürftig, aber besser als gar keine Oberfläche 😉 ZSNES ist dabei zu großen Teilen in Assembler geschrieben, was sich spürbar auf die Geschwindigkeit auswirkt. Die Controllerunterstüzung ist auch spitze, es funktioniert einfach. Und für Netbooks ist es dank der geringen Resourcenbelastung ideal. ZSNES ist dabei unter http://www.zsnes.com/ zu finden.

So und nun zum dritten Emulator im Bunde den ich persönlich bevorzuge (wenn ich nicht gerade auf dem Netbook spiele). Dieser Emulator emuliert das SNES dabei so genau wie möglich und verzichtet vollständig auf irgendwelche Hacks. Nachteil an dieser Philosophie ist, das der Emulator einen recht leistungsstarken Rechner benötigt. Der Vorteil ist, das bis auf drei Spiele (deren Spezialchips noch nicht emuliert werden) alle anderen Spiele ohne Probleme laufen. Die Rede ist hierbei von bsnes welcher unter http://byuu.org/bsnes/ zu finden ist. Es gibt ihn dabei für Windows und Linux und er baut auf dem Qt Framework auf. Der Code steht dabei unter GPL.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/SNES
http://de.wikipedia.org/wiki/SNES-Emulator

Ich spiele seit einigen Tagen Nethack. Eines dieses Spiele wo man sich sagt: „Warum habe ich nur damit angefangen?“ 😉 Dabei begibt man sich in Dungeon und sucht nach einem Amulet. Bei diesem Spiel merkt man das es schon etliche Jahre auf dem Buckel hat und das DevTeam hat an wirklich alles gedacht 🙂 Eine kurze Einleitung gibt es unter http://www.plenz.com/nethack_german. Wer das ganze unter Ubuntu ausprobieren möchte kann die Pakete nethack-console bzw. nethack-qt installieren. Es gibt auch eine GTK Version dessen Paketname mir gerade entfallen ist. Und nethack-console sieht aus wie ein wichtiges Systemtool 😉

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/NetHack