Dienstag, 15. Dezember 2015

HTML5-Player

HTML5-Player!

Endlich ist es soweit: Ein HTML5-basierter Player befindet sich im Beta-Test.
Mit diesem ist es nun auch für Studierende/Lernende mit Tablets oder Smartphones möglich, Fälle zu bearbeiten. Der HTML5-Player verfügt dafür über zwei verschiedene Darstellungen: Tablets und Desktop-Browser erhalten die vom Flash-Player gewohnte horizontale Darstellung, Smartphones eine neue vertikale.


horizontale Darstellung für Tablets und Desktop

vertikale Darstellung für Smartphones


Der HTML5-Player soll mittelfristig den Flash-basierten Player komplett ersetzen.
Sobald der Beta-Test zufriedenstellend beendet ist wird der HTML5-Player den Flash-Player soweit möglich sofort ersetzen. Da der HTML5-Player aber noch nicht die komplette Funktionalität des Flash-Players abdeckt, muss dieser noch in einigen Fällen und Einsatzszenarien verwendet werden und zwar bei
  • Übungen und Prüfungen
  • Fällen mit Graphikfragen, Graphikmarkierungsfragen, UML-Fragen, Datei-Fragen oder Mehrfach multiple choice Fragen
  • Fällen mit anderer Bildschirmaufteilung
  • Fällen mit Videos
  • Fällen der Begabungspsychologischen Beratungsstelle


... stay tuned

Mittwoch, 18. Februar 2015

Replacing a mySQL master with minimal downtime

Due to the transition of the CaseTrain project to the RZ I have to move the servers to a different subnet and because the currently used OS Windows Server 2008 R2 has entered extended support there was and is now some urge to set up completely new servers (with Windows Server 2012 R2).
The first step was to move the database slave to a new server. This was easy as the master db is/was 5.5 which can be easily replicated from a MySQL 5.6 installation, so I just used this guide. The next step was to replace the db master with a new one with minimal downtime. As CaseTrain is under heavy load during the lecture period (especially at the end of it when the tests are done) I waited until after Fasching when user access is traditionally very low. After much googling this is how I did it ...



Replacing a mySQL master with minimal downtime (on Windows)



I have a web server W, a database master M1 and a database slave S (W -- M1 ← S). I want to replace M1 with a new database master M2, so that I have W -- M2 ← S.


This will be performed in three steps:

Step 1: Duplicating replication slave (W -- M1 ← S and M1 ← M2)
Step 2: Daisy chaining (W -- M1 ← M2 ← S)
Step 3: Dropping old master (W -- M2 ← S)

The setup of M1 and S is as follows:

M1/my.ini
log-bin=M1-bin
binlog-do-db=myDB1
binlog-do-db=myDB2
server-id=M1

S/my.ini
datadir=D:/MySQL Datafiles/
# log-bin
report-host=S
relay-log=mysqld-relay-bin
replicate-do-db=myDB1
replicate-do-db=myDB2
server-id=S

For cloning the slave user in step 1 and replicating M1’s users on M2 I recomment HeidiSQL. Also I am aware of the problems of binlog-do-db and replicate-do-db, but as there are separate connection pools for the different databases it should be safe.

Step 1: Duplicate replication slave


This step can be performed with no downtime of M1/W.

1. Install MySQL on M2 (same version as on S) and stop it


M2 my.ini
datadir=D:/MySQL Datafiles/
log-bin = M2-bin
log-slave-updates
report-host=M2
relay-log=mysqld-relay-bin
replicate-do-db=myDB1
replicate-do-db=myDB2
binlog-do-db=myDB1
binlog-do-db=myDB2
server-id=M2

2. Set up replication for M2


Clone the replication user on M1 for S and edit the new user’s IP to the IP of M2 (don’t forget to flush privileges)

3. Prepare S for duplication


On S, do the following

> stop slave;
> flush tables;

and stop the service.

4. Copy S


Copy all contents of D:\MySQL Datafiles from S to M2. Typically there are now two sets of .err and -slow.log files - the ones from S should be deleted. Also delete auto.cnf on M2.

5. Start the service on S and M2 and check success


When issuing

> show slave status;

on M2 and S it should produce the same results and when issuing

> show master status;

on M2, it should show increase the position when called repeatedly.

So the replication on S is (still) working, the replication on M2 is working and M2 is also acting like a master, so S can be set as M2’s slave in the next step.

Step 2: Daisy chaining


Now we have to make sure that both slaves are on the same status, we can only achieve this if they are both synched with the master. The only way to do this is to lock M1 for a short time so no new data enters M1. As this may pause user actions, it may be more user friendly to put a maintenance note on W and briefly stop W now, but as it only takes seconds it could be done without stopping W.

M1 downtime starts here

On M1 issue:

> flush tables with read lock;

and keep this session open (otherwise the lock is released).
You have to wait until both slaves are in synch, so check with

> show slave status;

on S and M2 until both are showing Slave_IO_State = Waiting for master to send event. and the positions are not increasing anymore. Then issue

> stop slave;

on S and M2.
Now call

> show master status;

on M2 which is something like File = M2-bin.000003, Position = 1234567. This is the state on M2 that corresponds to the current state on S. These two dates will be used in a moment (so keep this display open) but now you already may resume M1 in the opened session with

> unlock tables;

so your application can run normally (if you stopped W then start it now).

M1 downtime ends here

The replication on M2 can now be started with

> start slave;

To make S replicating M2 first a slave user for S on M2 must be set up with

> grant replication slave on *.* to '[slave user]'@'[IP of S]' identified by '[slave password]';
> flush privileges;

Now S can be switched from it’s former master M1 to the new master M2:

> change master to master_host='[IP of M2]',master_user='[slave user]', master_password='[slave password]', master_log_file='M2-bin.000003', master_log_pos=1234567;

and the replication can be started

> start slave;

M1’s show master status should now correspond to M2’s show slave status and M2’s show master status with S’s show slave status. Now that S replicates M2 (and M2 still replicates M1) we can move to M2.

Step 3: Dropping old master


First, replicate M1’s users on M2. As there seems to be no easy way to replicate them without damaging the existing users on M2 you have to set them up one by one with all their permissions as they are on M1. Good time to check all those permissions ;-)

To keep the downtime as short as possible you may remove the lines

log-slave-updates
report-host=M2
relay-log=mysqld-relay-bin
replicate-do-db=myDB1
replicate-do-db=myDB2

from M2’s my.ini now without restarting M2.

Also you may prepare all your configuration for W so that all connections are made to M2 instead of M1 without deploying the configuration yet.

Before we switch again the the slave (M2) needs to be in sync with the master (M1).

W downtime starts here

In step 1 the W downtime was optional, typically you have to restart W because of the configuration changes anyway (e.g. to clean any connection pools), so you should stop W now.

On M1 issue:

> flush tables with read lock;

On M2 wait until in synch (with show slave status), then stop M1 (for the last time). On M2 enter

> stop slave;
mySQL < 5.5: > change master to master_host=''; reset slave;
mySQL 5.5+ : > reset slave all;

and restart the service on M2.

Then reconfigure W so that it uses M2 or deploy the prepared configuration and start W.

W downtime ends here

Et voila - M1 may now be deleted.



Next step: Moving the web server from Windows Server 2008 R2, httpd 2.2, Tomcat 7, Java 7 to Windows Server 2012 R2, httpd 2.4, Tomcat 8, Java 8.

Freitag, 23. August 2013

Neue Frage-Typen und -Optionen und mehr ...

Gerade wurden einige Fragetypen oder Frageoptionen fertiggestellt, die schon einige Zeit in der Pipeline waren, bei denen aber die Eingabe in Word noch gefehlt hat, andere Features sind jetzt aber auch ganz neu dazugekommen. Hier also die Neuerungen - wenn sie noch nicht ganz fertig sind, dann ist dies jeweils angegeben:


Graphikeingabefragen

Die einzigen bisher wirklich "offenen" Fragen waren Textfragen, bei denen die Lerner Text schreiben und diesen anschließend mit der Musterlösung vergleichen konnten und sich dann selber bewerten mussten. Manchmal sagt ein Bild aber mehr als 1000 Worte und deshalb gibt es nun auch Fragen vom Typ Graphikeingabe, bei denen der Lerner eine Zeichnung anfertigen muss. Wie bei Textfragen auch kann er diese anschließend mit der Musterlösung vergleichen und muss sich selbst bewerten.
[Doumentation].



Graphikmarkierungsfragen

In der Medizin geht es häufig darum, Bilder auszuwerten (z.B. Röntgenbilder). Dabei müssen relevante Bereiche erkannt und klassifiziert werden. Um diese Fertigkeit zu üben gibt es nun auch Graphikmarkierungsfragen, bei denen auf einem Bild Regionen markiert (und beschriftet) werden müssen. Im Gegensatz zu Graphikeingabefragen können solche Fragen auch automatisch ausgewertet werden - allerdings ist die Erklärung der Bewertung reichlich lang und komplex:


Da aber zur Zeit alle Erklärungen mit dem Ziel der Vereinheitlichung und Vereinfachung überarbeitet werden, ist zu hoffen, dass dies noch verständlicher wird. Andererseits ist das auch einfach ein komplexer Fragetyp ...
[Dokumentation]


Zeitbegrenzung bei Fragen

In realen oder Prüfungssituationen hat man oft nicht unbegrenzt Zeit, sich eine Antwort zu überlegen: In einer mündlichen Prüfung sollte man einen Antwortsatz in wenigen Sekunden zusammenhaben, ein Arzt in der Notfallambulanz muss manchmal praktisch sofort entscheiden, wie er weiter vorzugehen hat. Um diesen Aspekt abbilden zu können, kann nun bei Fragen mitangegeben werden, nach wie viel Sekunden man eine Frage beantwortet haben sollte und ab wieviel Sekunden man darauf keine Punkte mehr bekommt. Dem Lerner wird bei Erreichen der Frage zunächst der Fragetext und die Antworten verborgen und nur mitgeteilt, wieviel Zeit er zur Beantwortung der Frage hat und erst wenn er "Und los!" anklickt, beginnt die Zeit.




Textfragen-Korrektur-Richtlinien

Bisher konnten sich Nutzer bei der Selbstbewertung bei Textfragen nur ein Ergebnis eintragen. Wenn ein Dozent einen Text existiert typischerweise ein Korrekturschema, bei dem Einzelaspekte bewertet werden und daraus dann eine Gesamtbewertung errechnet wird. Um dies nachzubilden können die Autoren solche Korrektur-Richtlinien für Textfragen eingeben.
Diese sollen zukünftig an allen relevanten Stellen zur Korrektur angezeigt werden. Dies ist zwar noch nicht umgesetzt - nichtsdestotrotz macht es jetzt schon Sinn, sich als Autor bei Textfragen entsprechende Richtlinien zu überlegen und diese einzugeben.
[Dokumentation]


Ergebnisabhängige Texte am Fall-Ende

Für manche Einsatzzwecke ist die Ergebniszusammenfassung am Fallende zu harsch - bei einem schlechten Ergebnis erscheint ein dickes 0% vorgetragen mit verschränkten Armen und einem sehr missbilligenden Gesichtsausdruck. Manchmal möchte man als Autor vielleicht stattdessen Motivierendes mitteilen anstatt einen empfindlichen Lerner zu verschrecken. Deshalb gibt es jetzt die Möglichkeit, Ergebnistexte zu definieren, die stattdessen am Ende angezeigt werden.
[Dokumentation, Stichwort "Ergebnistext"]
Dieses Feature befindet sich Player-seitig noch im Betatest, kann aber schon von Autoren getestet werden und wird demnächst freigegeben.


dedizierter Pause-Knopf

Es existieren nicht nur "kurze" CaseTrain-Fälle (innerhalb von 15 Minuten bearbeitbar) sondern auch solche, für deren Verarbeitung auch eine Stunde oder mehr nötig ist. Damit die Lerner ihre Bearbeitung unterbrechen können, existiert schon länger die Möglichkeit den Fall zu pausieren. Der dazu vorgesehene Button wurde aber nicht von allen Lernern gefunden. Deshalb gibt es jetzt einen immer deutlich sichtbaren dedizierten Pause-Button, mit dem jetzt jeder die Bearbeitung unterbrechen kann - sofern dies möglich ist (d.h.es handelt sich nicht um eine anonyme Bearbeitung).


Mehrfach multiple/one choice Fragen

Für Fälle bei denen viele gleichartige Auswahl-Fragen gestellt werden kann es sinnvoll sein, mehrere solche Fragen zusammenzufassen, z.B. wenn mehrere Aussagen als richtig oder falsch oder nicht entscheidbar klassifiziert werden sollen. Dafür gibt es nun Mehrfach-Auswahl-Fragen. Diese werden zwar vom Player noch nicht angezeigt, können aber schon eingegeben werden -  in wenigen Tagen werden sie dann auch in der Betaversion des Players verfügbar sein und in wenigen Wochen im "richtigen" Player.
[Dokumentation]


Bildunterschrift und Copyright

Eine Kleinigkeit noch für alle Autoren, die ihre Bilder mit Copyright und/oder einer Unterschrift versehen wollen: Dafür gibt es nun bei der Eingabe von Bildern extra Eingabemöglichkeiten [Dokumentation]. Die Copyright-Informationen erscheinen dabei als ob sie Teil des Bildes wären, die Unterschrift zentriert mit Abstand unter dem Bild.

Feedback-System für Nutzerkommentare

Lerner können innerhalb der Fallbearbeitung auch Fragen kommentieren - damit können sie z.B. dem Autor melden, wenn eine Frage missversändlich gestellt oder eine Lösung falsch bewertet wurde. Dies ist neben einer Mail an den Dozenten, innerhalb dessen Vorlesung der Fall eingesetzt wird, und dem Fehlerformular für technsche Probleme (was dafür eigentlich gar nicht vorgesehen ist) die einzige Möglichkeit, "direkt" mit den Autoren zu kommunizieren.

Bis zum Beginn des Sommersemesters 2013 war es so, dass diese Kommentare nicht automatisch an die Fallautoren weitergeleitet wurden - stattdessen mussten sich die Fallautoren die Statistiken zu jedem ihrer Fälle anschauen und dort wurden bei den einzelnen Frageauswertungen auch diese Nutzerkommentare angezeigt. Da das alles wirklich ziemlich umständlich war, haben viele Autoren die Nutzerkommentare nur sporadisch ausgewertet (z.B. am Ende jeden Semesters) - teilweise doch überarbeitungsbedürftige Fragen wurden damit nicht zeitnah geändert.

Um da Abhilfe zu schaffen wurde in der Vorlesungsfreien Zeit vor dem Sommersemester ein Feedback-Modul entwickelt, bei dem die Autoren an einer zentralen Stelle alle Kommentare zu all ihren Fällen einsehen können - zusätzlich werden sie per Email über neue Kommentare informiert (bei der sie zwar einstellen können, wie oft und wann sie sie erhalten, sie können sie aber nicht abbestellen). Zusätzlich haben die Autoren bei jedem Kommentar auch gleich Einsicht in die zugehörige (anonymisierte) Bearbeitung, um z.B. feststellen zu können, ob ein Folgefehler vorlag. Autoren können auf Kommentare antworten, diese Antworten werden den Kommentarschreibern per EMail zugeschickt, diese können auch wieder per EMail antworten - und das (für den Autor und den Lerner) völlig anonym. Autoren können Nutzerkommentare kategorisieren/markieren und sich so eine to-do-Liste darüber erstellen, was noch geändert werden muss, worauf noch geantwortet werden muss, usw.

Nach Fertigstellung des Moduls wurden zuerst die bereits existierenden gut 11400 Nutzerkommentare ins Modul eingelesen. Seit Beginn des Sommersemester 2013 sind etwa 2000 hinzugekommen und die Autoren haben bisher 4000 Kommentare als bearbeitet markiert und bei fast 100 Kommentare nochmal nachgefragt bzw. geantwortet. Viele Autoren haben sich begeistert über das neue Modul geäußert, da sie so schneller und effizienter auf Nutzerkommentare reagieren können. Wir hoffen, dass wir dadurch die Qualität der Fälle erheblich steigern können!

Dienstag, 20. November 2012

Neuer Datenbankserver, IP-Umzug und Ausfall :-(

Vor kurzem haben wir vom RZ einen weiteren Server erhalten, der uns als dedizierter Datenbankserver dabei helfen soll, mit den hohen Zugriffszahlen kurz vor den Klausuren am Ende des Semesters zurecht zu kommen. Damit haben wir zwei vom RZ gehostete Server, die aber leider zuerst keine aufeinanderfolgende IP-Adressen hatten. 

Schon das Umbauen der Datenbank von unserem bisherigen Server auf einen anderen Server hat uns letztlich 90 Minuten Ausfallzeit gekostet (solange hat es gedauert, die 20GB MySQL/InnoDB-Daten auf den anderen Server zu kopieren). Dann dauerte es wieder ein paar Stunden, bis auch der MySQL-Slave (von dem wir das Backup machen) wieder auf dem aktuellen Stand war.

Da uns das RZ gebeten hat, aus verwaltungstechnischen Gründen den CaseTrain-Server auf eine IP neben der IP des Datenbankservers zu ziehen, kam gestern bzw. heute dann der IP-Umzug und dabei sind die Probleme aufgetreten, die dazu geführt haben dass vom 19.11.2012 16:27 bis 20.11. 11:52 keine Fallbearbeitungen protokolliert wurden. Und das kam so:

In MySQL kann und sollte man Benutzeraccounts auf IP-Adressen beschränken. Für die verschiedenen Anwendungen gibt es im CaseTrain-System verschiedene Accounts, unter anderem einen für den Zugriff auf die Datenbank, in der die Bearbeitungen gespeichert werden. Vor dem Umzug auf die neue IP wurden alle Accounts kopiert und auf die neue IP geändert, so dass es jeden Account zweimal gab (jeweils für die alte IP und für die neue IP). Dieser eine Account wurde dabei vergessen. Als dann gestern für eine Übergangszeit von einem Tag der Server so umgestellt wurde, dass er unter beiden IP-Adressen erreichbar ist (was notwendig ist, da nicht alle DNS-Server, die die Adresse casetrain.uni-wuerzburg.de zur IP auflösen gleichzeitig und sofort wissen, dass CaseTrain einen neue IP hat und deswegen noch bis zu 24h lang die alte IP liefern), wurde dies so konfiguriert, dass die neue IP die primäre IP ist.

Als CaseTrain dann mit der IP auf die Bearbeitungen-Datenbank zugreifen wollte, ging das nicht und es gab einen Fehler, der auch protokolliert wurde. Davon merkte zunächst niemand etwas - den Fallbearbeitern wird nicht angezeigt, dass die Bearbeitung nicht protokolliert wird und auch sonst ist es keinem aufgefallen. Es kamen abends zwei Tickets an, dass Fallbearbeitungen nicht abgespeichert wurden, aber das war schon außerhalb der Bürozeiten und deswegen wären die Tickets auch heute erst im Laufe des Tages bearbeitet worden.


Heute morgen wurde dann der DNS-Eintrag umgestellt, so dass casetrain.uni-wuerzburg.de nun auf die neue IP verweist und mehr oder weniger sofort ging gar nichts mehr - https://casetrain.uni-wuerzburg.de reagierte nicht http://casetrain.uni-wuerzburg.de/manager (worüber die Fälle gestartet werden) führte zu einem 404-Fehler. Nach einem Neustart des Apache httpd Webserver waren plötzlich die Konfigurations-Dateien leer und nur noch 0 Byte groß? Apache tomcat ließ sich gar nicht mehr neu starten? Was ist da los? Es hat ein bisschen gedauert, bis bemerkt wurde, dass das Fehlerprotokoll, das seit dem 19.11. fleißig die Probleme bei der Datenbankverbindung protokolliert hat, inzwischen den gesamten Plattenplatz für sich beansprucht, so dass kein Byte mehr geschrieben werden konnte - und deswegen konnte der tomcat nicht mehr starten und deswegen hat der httpd beim Starten die Konfigurationsdatei geleert.


Nachdem der fehlende Account eingetragen war und die Dienste alle erfolgreich gestartet werden konnten, funktionierte dann zwar alles wieder - aber leider fehlen uns bzw. den fleißigen Fallbearbeitern VÖLLIG UNNÖTIG über 17h Fallbearbeitungsprotokolle und wir hatten über 2h Ausfallzeit.


Mist.

Donnerstag, 22. Dezember 2011

Laptops!

Ziel des ePrüfung-Angebots ist ja, dass die Studenten außerhalb der CIP-Pools Prüfungen auf ihren eigenen Laptops schreiben können. Damit das alles sicher usw. ist, werden die Studenten von USB-Stick ein Prüfungs-Betriebssystem booten. Was passiert aber mit Studenten, die entweder keinen eigenen Laptop haben oder dieser nicht von USB-Stick gebootet werden kann?

Ganz einfach: Diese Studenten kriegen einen Laptop gestellt. Dafür haben wir Mittel beantragt und auch genügend bewilligt bekommen, um 50 billige Laptops   (inkl. 3 Jahre Garantie für ~300€) kaufen zu können.

Und hier ein paar Impressionen der ganzen Geschichte:

Die Palette mit den Laptops wird angeliefert.
Die Laptops sind schonmal untergebracht - in einem momentan nicht besetzten Büro.
In den hinteren Kartons sind die 5x 10 Taschen, die Kiste am Boden enthält die Mäuse.
Nach dem Auspacken der ersten 30 Laptops und aller Mäuse: Jede Menge Plastikmüll.
Der Plastikmüll der 50 Mäuse ...
... und der Papiermüll ...
 ... und die 50 Silikonsäckchen, die die Taschen trocken gehalten haben.
30 Laptops sind schon fertig.
Und hier beim Testen der letzten 20 (2h Festplattentest).
Noch mehr Plastikmüll...
... und noch mehr Papiermüll.
Geschafft: 50 Laptops sind betriebsbereit. Schöne Arbeit: Online 50x 3-Jahre-Garantie registrieren...
Und in diesen Kartonboxen sind die Plastikboxen zum Lagern
- und ein Rollbrett zum Transportieren der Plastikboxen.
Wieder im Zwischenlager im Büro - in den vorderen Kisten sind die USB-Sticks und 200 Netzwerkkabel.
Natürlich auch hier: Papiermüll ... bei dem sich die Putzfrau jetzt dann doch geweigert hat, den mitzunehmen.
Und da stehen sie nun: In einem der Räume mit der Netzwerktechnik im neuen Hörsaalgebäude.

Donnerstag, 15. Dezember 2011

Sticks! (Update II)

(Update zu Sticks (Update)) 3000 Sticks müssen auch beklebt werden und das ist leichter gesagt als getan ... Bevor wir zu diesem Endergebnis kamen:




mussten wir erst eine Druckerei finden, die uns abriebfeste Aufkleber in der passenden Größe zum Abziehen liefern kann, dann musste ein PDF mit den QRCodes erzeugt werden, dann mussten die gelieferten Aufkleber aufgeklebt werden und dann mussten die ersten 600 Aufkleber nochmal fester mit dem Fingernagel oder über eine Tischkante geklebt werden, damit sie sich auch wirklich nicht ablösen und dann mussten die restlichen 2400 Sticks richtig beklebt werden - was dann eine Hilfskraft in stundenlanger Arbeit erledigt hat.
Und wie man sieht, gehen die Aufkleber an den Seiten immer noch ein bisschen ab :-(


Die Sticks müssen zukünftig nach jeder Prüfung ausgelesen und ggf. neu bespielt werden, aber das geht ja nun auch nicht Stick für Stick für Stick für ...(2996x) ... für Stick. Also haben wir noch ein paar USB-Hubs bestellt:






Und nachdem nochmal Steckdosenleisten gekauft wurden, wurde das ganze zu unserer 126-Port-Super-USB-Station zusammengefrickelt:


ohne Sticks - aber schonmal alle Lichter an

Go go Gadget!


Windows 7 erkennt zwar alle 126 eingesteckten Sticks, kommt aber mit mehr USB-Sticks als Buchstaben nicht so recht zurecht (Haupt-USB-Stecker abgezogen → Explorerabsturz). Ubuntu 11 dagegen - mit dem wir die Sticks bespielen wollen - sieht nur 21 Hubs + USB-Maus + USB-Tastatur + 105 Sticks = 128 USB-Geräte - auch blöd.