AntMe, Spass mit programmierbaren Ameisen

AntMe!Nachdem ich die Ameisen in meiner Wohnung mit ganz perfidem tragts-es-zu-euch-nach-Hause-und-vergiftet-eure-Nachkommen-Gift losgeworden bin, habe ich sehr viel sympathischere Zeitgenossen dieser Spezies getroffen: AntMe ist ein Programmierspiel, dass aus Microsofts Coding4Fun Initiative (nicht zu verwechseln mit dem Galileo Coding for Fun Buch. Das ist auch spassig, behandelt auch AntMe, aber zusätzlich noch viele Andere Dinge) hervorgegangen ist. Es hat einen eigenen Wikipedia Artikel und vorallem eine geniale Homepage.

Grundsätzlich geht es darum Ameisen zu implementieren die überleben, Äpfel und Zucker sammeln und unter Umständen auf Käfer und fremde Ameisen losgehen. Ein Markierungsmechanismus sorgt dafür, dass die Ameisen untereinander kommunizieren können. Fortgeschrittene Ameisenpapis und -mamis können spezialisierte Ameisen erstellen und RPG mässig Eigenschaften verbessern, wenn sie dafür andere verschlechtern.

Die Ameisen in Aktion

Die Ameisen können in C# oder in Visual Basic .net mit der notwendigen Intelligenz versehen werden. Bestimmte Methoden werden zu bestimmten Ereignissen aufgerufen; beispielsweise WirdMüde() (ja, mit „ü“ und deutsch) oder SiehtFeind(ByVal käfer As Käfer). Zur Steuerung steht fast der ganze .net Sprachumfang zur Verfügung, sowie Ameisenspezifische Hilfsmethoden wie etwa GeheZuBau() oder GreifeAn(käfer).

Quickstart

Auf der AntMe Homepage findet man verschiedene Versionen. Wir spielen hier mit der 1.5 Beta 2 (VB.net oder C#, je nach Gusto). Die Profiversion beinhaltet den gesamten Quellcode der Spielengine (!). Das ist so genial, dass es nochmals erwähnt werden darf: Die Profiversion beinhaltet den gesamten Quellcode der Spielengine. Will man sich nur mit den Ameisen beschäftigen, reicht die Einsteigerversion. Im Download enthalten ist ein gut dokumentiertes Ameisenskelett, bei dem sofort losgottgespielt werden kann.
Eine gute Doku über die Klassen und deren Methoden sowie ein Tutorial wird mitgeliefert. Zum Teil beziehen sich die Unterlagen noch auf Version 1.1, aber der Transfer zu 1.5 ist eigentlich kein Problem. Für Leute, die lieber kuckn statt lesen, gibt es gut gemachte Screencasts, die ebenfalls in die Thematik einführen.

Für eher haptisch veranlagte Menschen gibt es auch ein Buch: AntMe! – Programmieren und Spielen mit den Ameisen und Visual C#. Das kenne und besitze ich allerdings (noch) nicht.

Verfügt man noch über keine Programmierumgebung, so könn bei Microsoft gratis die Express Versionen verschiedener Sprachen downgeloaded werden. Für die 3D Visualisierung braucht man
noch DirectX. Mit der neusten Version (nicht mit der im Forum angegebenen) hat es wunderbar gefunzt.

Turniere

Ein Bisschen lebt das Ganze auch vom kompetitiven Element (um ehrlich zu sein, vielleicht ist ein Bisschen etwas untertrieben: ICH FRESS EUCH ALLE AUF!). In der Version 1.5 funktioniert das Importieren von anderen Ameisen leider nicht und es wird eine unbehandelte Ausnahme ausgespuckt:
Der Typ für Member AntMe.SpielKonfiguration.AntMe.Simulation, Version=1.5.0.0, Culture=neutral, PublicKeyToken=37d8e32ef3294969 wurde nicht aufgelöst.

Workaround für die VB-Version (C# ungetestet):
Weiterlesen

15 Sekunden Ruhm; Moodle, e-Learning und die Berufsfachschule BBB im Fernsehen

TrophiesDie Berufsfachschule BBB ist wirklich ziemlich an vorderster Front was die Umsetzung von e-Learning im Präsenzunterricht angeht. Zum Einen wurde sie von IBM zur besten e-Schule in der Sekundarstufe II ausgezeichnet, zum Andern hat das Magazin Einstein des Schweizer Fernsehens einen kleinen, aber feinen Bericht darüber gedreht, der (oder direkt bei SF DRS) angesehen werden kann

Wer in den verschiedenen Beiträgen meine Fresse erkennt, kriegt drei Vaterunser und Eiswürfel, um sie auf die Augen zu legen 😀 .

Aja, den Juniorwebaward 2008 haben wir in unserer Altersklasse auch noch gewonnen…

Und es geht doch! GTCO Schoolboard unter Linux

Das Schoolboard

BlackboardBei uns sind diese relativ coolen Dinger, genannt „elektronische Wandtafel“ fest eingerichtet: Der Beamer projeziert die Laptopausgabe auf eine aktive, weisse Fläche. Diese Fläche kann die Bewegungen und klicks eines speziellen Stiftes tracken und über USB an den Laptop senden. Dabei können Mausbewegungen simuliert oder mit speziellen Tools Stifte und Marker nachgeahmt werden. Das Unterrichten gelingt so normalerweise flüssiger, wel nicht mehr zwischen Laptopschirm und Präsentationsfläche hin- und hergewechselt werden muss.

schoolboard principle

Lange Zeit gab es diese Software nur für Windows. Mittlerweile ist sie für Linux schon benutzbar, wenn sie auch noch ein paar Kinderkrankheiten hat.

Installation

Hardware

Die Ausgabe des Kommandos uname -a zeigt die Kernelversion. Bei mir hats mit 2.6.22 relativ gut funktioniert. Erst um 21, 22 herum ist der gtco Treiber beim Kernel dabei. Ob dieser Treiber lokal vorhanden ist sieht man mittels modprobe -v gtco. Wenn nicht reklamiert wird, dann ist er geladen und alles ist ok.
Sollte das gtco Modul allerdings nicht vorganden sein, so wird man es von der GTCO Website downloaden und selbst kompilieren müssen.

Um zu sehen ob das Schoolboard (USB Version) erkannt wurde, kommt lsusb zur Anwendung:

Bus 004 Device 004: ID 078c:0401 GTCO/CalComp

Software

Die neuste Interwrite Software ist ein Riesenteil. Für Linux gibt es sie zum freien Download. Vorsicht: die Software ändert die xorg.conf, darum ist der spezielle Hinweis dass ein Restarts (des X-Servers) vonnöten sei durchaus ernst zu nehmen. Irgendwie wird danach ein unheimlich ressourcenhungriger Prozess mit Namen IWDM gestartet.

Das Kalibrieren und ein erster Check des Boards geht mit Launch_Device_Manager. Die Werkzeugleiste kann mi Launch_InterWrite gestartet werden.

Probs und Anwendung

Leider funktioniert bei mir das onscreen Keyboard nicht. Hat das jemand zum Laufen gekriegt?

Unser Board hat eine Auflösung von 1024×768 Bildpunkten. Es gibt unter Anderen diese zwei Möglichkeiten, im Laufenden Betrieb umzuschalten:

  • Das KDE Kontrollzentrum (kcontrol) Angeschlossene Geräte → Anzeige.
  • Auf der Kommandozeile : xrandr -s 1024x768.

eLearning etwas anders…

Unter Elearning wird oftmals noch das dröge Lernen von verbugten, sturen CD’s seiner selbst willen verstanden. Einen Schritt weiter geht das Blended Learning und die Learning Management Systems (lms) wie zum Beispiel Moodle.

Es geht aber auch ganz einfach und ganz spassig: AK Kappenberg hat mit WinChemie eine Programmsammlung mit einigen Perlen gratis zum Download ins Web gestellt, und das nicht nur für Chemie!

Der grosse Preis

Bei Der grosse Preis wird die Klasse in mehrere Gruppen eingeteilt, die live und abwechslungsweise gegeneinander Fragen beantworten, die mit dem Beamer projiziert werden. Dabei können die Gruppen Punkte einsetzen, sich beraten, ärgern oder freuen. Der Lerneffekt ist riesig, weil es einfach Spass macht. Die Fragen können mit einem Editor geändert und für jedes Fachgebiet angepasst werden.

Achtung: Damit das Teil läuft müssen die EconNSoft Core Components von AK Kappenberg vorgängig installiert werden, ansonsten gibt es eine nichtssagende Fehlermeldung!

Als nächstes werde ich AK Riddle austesten. Das scheint über das Netzwerk zu funktionieren. Ein Erfahrungsbericht dürfte folgen…

SVN und Moodleintegration: Einen Schritt weiter

In einem älteren Posting habe ich schon beschrieben, dass wir das LMS Moodle mit SVN integrieren. Um die Integration voranzutreiben habe ich einen Block gecoded, von welchem aus man direkt die Dateien aktualisieren kann:

Moodle SVN Block

Den Code zu posten macht nicht viel Sinn, da es sehr installationsabhängig ist. Auf Anfrage hin rücke ich aber gerne was raus 🙂 ….

SVN mit Moodle integrieren

Moodle eignet sich sehr gut um Dokumente für Lernende bereitzuhalten und zu publizieren. SVN eignet sich, um Dokumente abzulegen wenn mehrere Leute zusammenarbeiten. Was liegt also näher als die beiden Dinge zu kombinieren?

Vorteile:

  • Es sind immer aktuelle Dokumente auf dem Moodle
  • Das lästige Hochladen entfällt
  • Es ist mächtig 1337!

Soweit die Theorie, doch wie läuft das in der Praxis?

Grundsätzlich werden auf dem Moodleserver die SVN-Verzeichnisse ausgecheckt. Jede Nacht läuft ein Cronjob, der diese Arbeitsverzeichnisse aktualisiert und noch nicht vorhandene an diesen Ort auscheckt. Im Moodle „data“ Verzeichnis werden in den Kursen symbolische Links auf diese Arbeitsverzeichnisse gesetzt, die dann in Moodle selber wie normale Verzeichnisse behandelt werden können.

Um diese Arbeitsverzeichnisse auszuchecken habe ich ein Bash-Script geschrieben, für das Setzen der Links gibt es ein ganz hässliches Webinterface. Beide Quellcodes stelle ich gerne zur Verfügung, hierhin passense nicht….

Probleme:

  • Die Berechtigungen der Arbeitsverzeichnisse müssen so gesetzt werden, dass normale Benutzer über Moodle keine Dateien verändern oder löschen können.
  • Da es ein Link ist und kein echtes Verzeichnis, lässt Moodle keine „Verzeichnis Ressourcentypen“ zu. Korrigiert werden kann dies in lib/moodlelib.php, Funktion get_directory_list:
    if (!is_dir($rootdir)  && !is_link($rootdir)) {          // Must be a directory

    und:

    if (filetype($fullfile) == 'dir'  || filetype($fullfile) == "link") {
  • Die SVN-Arbeitsverzeichnisse sollen ja nicht migebackupt werden, da man gescheiter die Repositories sichert. Darum in backup/backuplib.php, Funktion backup_copy_course_files anpassen:
    if ($dir !== $name_moddata and $dir !== $name_backupdata and !is_link($rootdir."/".$dir)) {

Croquet: Die Zukunft des eLearning

Virtuelle Welten haben mich schon immer fasziniert. Wieso sollen wir uns mit den Limiten dieses reellen Dreckschollens begnügen auf dem wir hingeboren wurden? Etwas sehr schönes ist Croquet. Geschrieben in Smalltalk, eine lustige Sprache, die aber weh tut beim Programmieren. Da ist alles ein Bisschen anders…

CroquetNundenn, ich wollte einen Server ohne grafische Oberfläche, auf einem festen Port und dann loslegen. Es gibt viele Beispiele auf dem Web, aber entweder sind die für alte Versionen oder mein nichtvorhandenes Wissen über Smalltalk hat den Erfolg verhindert. Nach knapp 12 Stunden habe ich dann einiges herausgefunden… Das Teil stürt oft ab und hat immer mein Linux mitgerissen… In einer VM läuft es sauber, aber langsam wie ein Keks.
Nicht gemeistert habe ich einen äusserst blöden Fehler: In einer Funktion wollte Croquet einem nicht vorhandenen Objekt namens connection die Nachricht recvCypher nicht verstehen… Wie auch, war es doch klein und Null. Hab aber nicht aufgegeben und folgendes herausgefunden:

SimpleDemo (Master) ist fürs WAN vorbereitet. Der Port versteckt sich in Croquet-Harness -> CroquetHarness -> initialize -> CreateIsland ! Wenn man ihn dort setzt, dann hört der Router ganz friedlich und beständig da… Ebenfalls da sollte man die ID setzen:

id := TObjectID readHexFrom: 'ee3320a5924eaf79b1336d2151b80717'.

Nungut, wie startet man das Ganze nun kopflos? (Ohne grafische Anzeige) ?

Man macht ein kleines Script bbb-master.st:

bbbworld := SimpleDemoMaster new.
bbbworld setup.

Und startet es folgendermassen:

 /pfad/to/Croquet/bin/i686-pc-linux-gnu/squeak -plugins /pfad/to/Croquet/bin/i686-pc-linux-gnu  \
     -vm-display-X11 -swapbtn -headless /pfad/to/Croquet/Croquet1.0.10.image \
     /pfad/to/Croquet-Scripts/bbb-master.st

Was man auch automatisieren kann (/etc/init.d/bbb-master poste ich gerne auf Wunsch).

Zum Verbinden braucht es die IP und nicht den Namen!

Etwas das ich noch nicht herausgefunden habe wie man bei diesen Welten mit Menü ein 2D-Projekt als Portal übernimmt. Vielleicht sollte man eine andere Welt als Server wählen…? Ebenfalls schlecht ist die Uptime von 5 Minuten bei 4 aktiven Clients 🙁 … Aber es wird ja noch dran gearbeitet 🙂 ….

LAMS und Moodle, schön wärs gewesen…

Tja, wer kommt nicht ins Träumen beim Gedanken einer engen Integration von LAMS in Moodle? Und wie wenn es die Götter der LMS (Learning Management Systeme) gehört hätten, wurde auch daran gearbeitet. Von der schönen Oberfläche geblendet habe ich kurzerhand alle meine Abneigungen über Bord geworfen und mich daran gemacht, es zu installieren, wohlbewusst dass es eine Wanderung durch das Tal der Tränen sein wird, wie immer wenn mein alter Kollege Tomcat mitreist.

Das wichtigste zu Beginn: Es war ernüchternd. Die Integration ist noch nirgends. Das kann ich so selbstbewusst sagen, weil es tatsächlich noch HTML-Syntaxfehler drin hatte, die korrigiert werden mussten um den Firefox zu einer Mitarbeit zu überreden.

Es soll sich aber jeder selbst ein Urteil bilden. Hier eine Kurzanleitung, wies unter Linux gelaufen ist.

Zuerst die Doku:

Wir betreiben Moodle mit https (Secure HTTP) um ein Absniffen der Passworte durch die Lernenden zu verhindern. LAMS kann damit nicht umgehen. Man muss also einen HTTPS-HTTP Gateway dazeischenschalten. Dafür habe ich einen eigene Site in Apache konfiguriert, welche mittels url-rewriting transparent die https seiten für den localhost als http serviert:

<virtualhost *:3333>
  ServerName moodle.yourhost.ch
  ServerAdmin admin@server.ch
  DocumentRoot /data/www/httpsgateway/htdocs
  ErrorLog /data/www/httpsgateway/logs/error.log
 
  LogLevel debug
  CustomLog /data/www/httpsgateway/logs/access.log combined

  <location>
                Order deny,allow
                Deny from all
                Allow from 127.0.0.1
  </location>

  RewriteEngine On
  RewriteCond %{REQUEST_URI} !^/index.php(.*)$
  RewriteRule ^/(.*) http://moodle.yourhost.ch:3333/index.php?url=%{REQUEST_URI}&amp;%{QUERY_STRING} [R]
</virtualhost>

Und die index.php im Webroot:

< ?
$params=$_REQUEST;
unset($params["url"]);
$paramsstr="";

foreach($params as $key=>$val) {
        $paramsstr.="&".$key."=".urlencode($val);
}

$url="https://moodle.yourhost.ch".$_REQUEST["url"]."?".$paramsstr;

$sessions = curl_init();
curl_setopt($sessions, CURLOPT_URL,$url);
curl_setopt($sessions, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($sessions, CURLOPT_SSL_VERIFYPEER, 0);

#print "[$url]";die();

$my_load_page = curl_exec($sessions);

if (curl_errno($sessions)) {
        print curl_error($sessions);
        print "URL:".$url."
n"
;
} else {
        curl_close($sessions);
        echo $my_load_page;
}
?>

mod_jk

Damit Tomcat über Apache angesteuert werden kann braucht es mod_jk und die Datei /etc/libapache2-mod-jk/workers.properties sollte folgendermassen aussehen:

# workers.properties -
#
# This file is a simplified version of the workers.properties supplied
# with the upstream sources. The jni inprocess worker (not build in the
# debian package) section and the ajp12 (deprecated) section are removed.
#
# As a general note, the characters $( and ) are used internally to define
# macros. Do not use them in your own configuration!!!
#
# Whenever you see a set of lines such as:
# x=value
# y=$(x)something
#
# the final value for y will be valuesomething
#
# Normaly all you will need to do is un-comment and modify the first three
# properties, i.e. workers.tomcat_home, workers.java_home and ps.
# Most of the configuration is derived from these.
#
# When you are done updating workers.tomcat_home, workers.java_home and ps
# you should have 3 workers configured:
#
# - An ajp13 worker that connects to localhost:8009
# - A load balancer worker
#
#

# OPTIONS ( very important for jni mode )

#
# workers.tomcat_home should point to the location where you
# installed tomcat. This is where you have your conf, webapps and lib
# directories.
#
workers.tomcat_home=/opt/lams/jboss/tomcat-4.1.x

#
# workers.java_home should point to your Java installation. Normally
# you should have a bin and lib directories beneath it.
#
workers.java_home=/opt/java

#
# You should configure your environment slash... ps= on NT and / on UNIX
# and maybe something different elsewhere.
#
ps=/

#
#------ ADVANCED MODE ------------------------------------------------
#---------------------------------------------------------------------
#
#

#
#------ worker list ------------------------------------------
#---------------------------------------------------------------------
#
#
# The workers that your plugins should create and work with
#
worker.list=ajp13_worker

#
#------ ajp13_worker WORKER DEFINITION ------------------------------
#---------------------------------------------------------------------
#

#
# Defining a worker named ajp13_worker and of type ajp13
# Note that the name and the type do not have to match.
#
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
#
# Specifies the load balance factor when used with
# a load balancing worker.
# Note:
#  ----&gt; lbfactor must be &gt; 0
#  ----&gt; Low lbfactor means less work done by the worker.
worker.ajp13_worker.lbfactor=1

#
# Specify the size of the open connection cache.
#worker.ajp13_worker.cachesize

#
#------ DEFAULT LOAD BALANCER WORKER DEFINITION ----------------------
#---------------------------------------------------------------------
#

#
# The loadbalancer (type lb) workers perform wighted round-robin
# load balancing with sticky sessions.
# Note:
#  ----&gt; If a worker dies, the load balancer will check its state
#        once in a while. Until then all work is redirected to peer
#        workers.
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp13_worker

In der site-conf für Apache2: /etc/apache2/sites-available/moodle.yourhost.ch

# LAMS
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkWorkersFile   /etc/libapache2-mod-jk/workers.properties
JkLogLevel debug
JkLogFile  /data/www/moodle.yourhost.ch/logs/mod_jk.log
JkMount /lams/* ajp13
JkMount /lams   ajp13
JkMount /lams/images/* ajp13
JkMount /lams/images   ajp13

Zum Schluss muss nur noch Moodle konfiguriert werden:

Administration, Module, LAMS, EInstellungen:

server_url: https://moodle.yourhost.ch/lams
server_id:  lamsserver01
server_key: sErVeRKeY

Dann aufrufen und Accounts nach Anleitung erstellen: https://moodle.yourhost.ch/lams/login.jsp.

Brauchbar ist es noch nicht :(…. Die Integration vergisst beim Bearbeiten die Namen des LAMS-Kurses etc… Vielleicht in ein paar Monaten…