MySQL – Sebastians Blog https://sgaul.de Neues aus den Softwareminen Thu, 13 Mar 2014 20:34:54 +0000 de-DE hourly 1 https://wordpress.org/?v=6.1.1 https://sgaul.de/wp-content/uploads/2019/02/cropped-sgaul-2-1-32x32.jpg MySQL – Sebastians Blog https://sgaul.de 32 32 SQL-Datenbankänderungen testen https://sgaul.de/2013/04/14/sql-datenbankanderungen-testen/ Sun, 14 Apr 2013 16:53:11 +0000 https://sgaul.de/?p=2128 SQL-Datenbankänderungen testen weiterlesen]]> Manchmal dauert es ein wenig, bis man auf das Offensichtliche kommt. Ich habe hin und her überlegt, wie ich ein Update und Alter Table testen kann, ohne die Daten zu gefährden. Die Lösung ist elementarer Bestandteil einer jeden SQL-Datenbank: Eine Transaktion.

Transaktionen in PostgreSQL

begin;
alter table mytable rename column id to name;
\d mytable

         Table "public.mytable"
   Column   |   Type     |   Modifiers   
------------+------------+--------------
 name       | bigint     | not null
rollback;
\d
         Table "public.mytable"
   Column   |   Type     |   Modifiers   
------------+------------+--------------
 id         | bigint     | not null

Sind die vorgenommenen Änderungen korrekt, können sie mit commit; übernommen werden. Der offizielle SQL-Befehl zum Starten einer Transaktion ist start transaction;. Allerdings unterstützen alle mir bekannten Datenbanken die etwas handlichere Form begin;.

Verschachtelte Transaktionen: Savepoints

Ist der Test komplexer, so dass man Transaktionen schachteln möchte, kann man sogenannte Savepoints verwenden.

begin;
-- Änderung 1
savepoint sp1;
-- Änderung 2a
rollback to savepoint sp1; -- 2a zurücknehmen
-- Änderung 2b
rollback; -- 2b und 1 zurücknehmen

Transaktionen in MySQL

Die PostgreSQL-Beispiele werden auch von MySQL unterstützt.

]]>
Feedback-System Tweedback für Präsentationen https://sgaul.de/2011/11/05/feedback-system-tweedback/ https://sgaul.de/2011/11/05/feedback-system-tweedback/#comments Sat, 05 Nov 2011 13:54:57 +0000 https://sgaul.de/?p=678 Seit ein paar Tagen haben Georg und ich die Arbeit an unserem Studienprojekt „Tweedback“ abgeschlossen. Ziel war es, eine Anwendung zu schreiben, mit welcher der Zuhörer während einer Vorlesung oder eines Vortrags Rückmeldungen an den Dozenten schicken kann. Dies sollte plattformunabhängig, ohne größere Ablenkung für den Vortragenden und in Echtzeit umgesetzt werden. Die nun abgeschlossene Umsetzung, deren Name eine Mischung aus to tweet (zwitschern) und Feedback ist, setzt diese Anforderungen um und konzentriert sich vor allem auf eine intuitive graphische Oberfläche, die im Browser läuft.

Server: PHP und MySQL

Die Serverseite, welche Tweedback mit Ajaxdaten versorgt, wurde recht geradlinig und ohne Framework umgesetzt. Sie besticht vor allem durch ihre effiziente Nutzung der Datenbankperformance. Viele, teils recht komplexe Anfragen, wurden fast ausschließlich in einzelne Querys verpackt.

Hierbei hat sich aber vor allem ein Problem in den Vordergrund gestellt: Querys, die statt auf feste Tabellen wieder nur auf wiederum verschachtelte Subquerys zugreifen, sind schwer zu entwerfen und noch schwerer zu warten. Ein Quereinsteiger, der sich mit dem Code beschäftigen will, hat es hier sehr schwer. Hinzu kommt, dass ein Query meist als einzelne, abgeschlossene Aktion angesehen wird und daher im inneren schlecht oder gar nicht dokumentiert ist.

Hier sollten wir künftig mehr auf die Werkzeuge der Datenbanken eingehen und z.B. verschiedene Views und UDFs (User Defined Functions) nutzen.

GUI: J-Query Mobile

Die graphische Oberfläche läuft im Browser und basiert auf der dritten Beta von J-Query Mobile. Dieses befindet sich, wie der Name vermuten lässt, selbst noch in Entwicklung. Ärger gab es bei der Entwicklung dennoch nicht, JQM hat sich als zuverlässiges und intuitives Framework bewiesen.

Grundsätzlich ist eine J-Query-Mobile-Rohling auf Kleinstgeräte ausgerichtet. Um auch größere Displays angemessen bedienen zu können, wurde mit Hilfe von Media-Querys des CSS-3-„Standards“ ein sich selbst anpassendes Layout („Responsive Webdesign“) gewählt.

Alles andere folgt streng den Empfehlungen und Vorgaben des Frameworks.

Funktionsweise von Tweedback

Der Dozent

Der Dozent muss vor seinem Vortrag ein Veranstaltung anlegen, in welcher das Feedback gesammelt wird. Wichtig ist hier vor allem der Eventcode, welcher den Zuhörern mitgeteilt wird um am Event teilzunehmen und Rückmeldungen zu geben.

Anschließend befindet sich der Dozent in der Dozentenansicht der Veranstaltung, in welcher aufgekommene Fragen und Warnungen wie „zu schnell“ oder „unklar“ angezeigt werden. Diese Ansicht ähnelt sehr der normalen Veranstaltungsansicht eines Zuhörers, welche gleich noch gezeigt wird.

Nach einer gewissen Zeit werden Events geschlossen und der Dozent erhält einen Abschlussbericht, in welcher die gestellten Fragen aufgelistet und das Nutzerempfinden bezüglich Vortragsgeschwindigkeit und Verständlichkeit in Graphen dargestellt wird.

Der Zuhörer

Der Zuhörer wird nach dem Aufruf von Tweedback folgendermaßen begrüßt:

Wie bereits erwähnt wurde, muss hier der Eventcode eingetragen werden, der vom Dozenten festgelegt wurde. Zusätzlich hat der Zuhörer die Möglichkeit, seinen Namen oder ein Pseudonym einzugeben. Diese Möglichkeit findet sich im persönlichen Einstellungsmenü, welches über die Schaltfläche oben rechts erreichbar ist.

Die Tweedback-Teilnahme ist vollkommen anonym möglich. Ein wesentliches Ziel war ein Webdienst, der den Nutzer zu keiner Anmeldung oder ähnlichen persönlichen Angaben zwingt.

Nach der Eingabe des Eventcodes befindet sich der Zuhörer in der Veranstaltungsansicht. Hier kann dieser bestehende Fragen sehen und diese durch einen Klick auf den orangefarbenen Bereich unterstützen. So werden wirklich wichtige Fragen immer größer dargestellt.

Um die Fragen möglichst knapp zu halten, kann der Nutzer diese einer Kategorie wie Beispiel oder Erklärung zuordnen, um sich bei der eigentlichen Frage auf das zugehörige Stichwort beschränken zu können. Dies ist auf dem obigen Screenshot rechts unten erkennbar, wo neue Fragen erstellt werden können.

Ein weiteres Konzept sind die Schaltflächen Verständnis und Vortragsgeschwindigkeit: Hier kann der Nutzer sein derzeitiges Empfinden durch einen einfachen Buttondruck ausdrücken. Der Dozent erhält die Zusammenfassung dieser Angaben dann als Information (oder ab einer gewissen Stufe als Warnung).

Weitere Entwicklung

Derzeit ist von unserer Seite keine Weiterentwicklung von Tweedback geplant. Da wir mit dem Erreichten jedoch sehr zufrieden sind, bleibt die Hoffnung, dass das System zumindest genutzt oder im Zuge anderen Studienarbeiten erweitert wird.

Der Code ist einfach und verständlich, zudem gibt es eine ausführliche Entwicklerdokumentation. Somit ist auch eine Veröffentlichung des Codes etwa unter der GPL denkbar und von den Entwicklern generell auch vorgesehen. Da auch der betreuende Lehrstuhl über das weitere Vorgehen nachdenkt, wollen wir diese Entscheidung nicht voreilig im Alleingang treffen. Ein Termin für eine mögliche Veröffentlichung ist daher noch nicht abzusehen.

]]>
https://sgaul.de/2011/11/05/feedback-system-tweedback/feed/ 6
MVC-Anwendungen mit Flow 3 und ein Ausblick auf das nächste Typo 3 https://sgaul.de/2011/10/09/mvc-anwendungen-mit-flow-3-und-ein-ausblick-auf-das-nachste-typo-3/ Sun, 09 Oct 2011 17:31:15 +0000 https://sgaul.de/?p=567 Auf der gerade tagenden „T3CON11“ kommen die Typo-3-Entwickler zusammen und beraten über die Zukunft. Nebenbei zeigen Sie aber auch, was sie schon haben. Nachdem ich in den letzten Monaten doch eher negative Eindrücke von Typo 3 sammeln musste, machen das grundlegende Framework Flow 3 und die ersten Bilder von Typo 3 5 einen sehr guten Eindruck.

Model, View und Controller mit Flow 3

Das MVC-Framework Flow 3 soll noch im Oktober diesen Jahres erscheinen. Ich habe daher mal einen kurzen Blick darauf geworfen und bin über einige tolle Sachen gestolpert, die ich sehr überzeugend finde.

Kommandozeile

In Flow 3 erzeugt man Webapplikationen weitgehend über die Kommandozeile. Die nötigen Dateistrukturen und wesentliche Inhalte von Controllern, Models, Repositorys und Templates werden bereits erzeugt und müssen lediglich angepasst werden. So erzeugt man für einen Blogpost beispielsweise ein recht einfaches Grundgerüst, indem man

./flow3 kickstart:actioncontroller
  --generate-actions
  --generate-related
  TYPO3.Blog Post

im Projektverzeichnis ausführt. Dies erzeugt einen neuen Controller „PostController“ (ein Actioncontroller ist den Zugriff durch den Browser; man kann auch Commandcontoller für die Kommandozeile erstellen). Hierbei werden gleich wesentliche Aktionen wie Hinzufügen und ändern erzeugt (–generate-actions). Die Option –generate-related erzeugt automatisch alles, was noch fehlt: Dies ist hier ggf. das Paket TYPO3.Blog (vorletzter Paramter) und das Model Post, welches passend zum Controller existieren muss. Der letzte Parameter benennt den Controller (ohne das Suffix Controller) und impliziert eine Verbindung zu einem entsprechenden Model.

All das nimmt einem sehr viel Dateiverwaltung und Code-Erzeugung ab. Einen weiteren schönen Einblick in die Kommandozeilenfähigkeiten bekommt man durch das folgende Video:

[vimeo clip_id=“28987131″]

Persistenz an Bord

Eine weitere schöne Sache ist die Verwendung von Doctrine 2: Statt sich hier etwas neues zu überlegen, setzt man auf diese bewährte Lösung, um Objekte ohne viel Aufwand auf Datenbanken zu mappen. Hierfür ist etwas mehr Aufwand im Model nötig. Alle Attribute müssen mittels PHP-Doc typisiert werden:

/**
 * The name
 * @var string
 */
protected $name;

Anschließend kann man diese Models aber mittels eines einfachen Kommandozeilenaufrufs in der Datenbank erzeugen

./flow3 doctrine:migrate

oder später nach Änderungen aktualisieren:

./flow3 doctrine:update

Doctrine ist mittlerweile sehr gut erprobt und bietet unzählige Möglichkeiten.

Wirkt überzeugend – aber was ist mit der Performance?

Was ich bisher gesehen habe, finde ich absolut intuitiv und auch einfacher, als ich es von anderen Frameworks kenne.

Das einzige, wovor ich auf lange Sicht doch ein wenig Angst habe, ist, dass die Entwickler die Performance ähnlich wie bei bisherigen Typo-3-Entwicklungen zu weit hinten anstellen. Schon hier auf dem eigenen Rechner dauerte es manchmal doch erschreckend lange, bis eine Seite vollständig erzeugt wurde. Allerdings war dies meist nur beim ersten Aufruf zu beobachten. Ich denke daher, dass Caching hier über die Geschwindigkeitsprobleme hinweg helfen soll.

Wer selber sehen möchte, was Flow 3 kann, dem sei das Quick-Start-Tutorial ans Herz gelegt.

Typo 3 5

Das neue Typo 3 wird wohl erst Ende nächsten Jahres erscheinen, dennoch zeigte T3N.de in einem Artikel mit Video ein paar schöne erste Eindrücke (das Interview davor ist… merkwürdig, aber wenigstens kurz):

[youtube clip_id=“ihOVcmo6OOI“]

Das Flow-3-Logo stammt von http://flow3.typo3.org/ und ist Eigentum der Typo-3-Association.
5Y593YT8QPDQ
]]>