Cleantodo neu programmiert – SQLite Implementation

Um nach langer Abstinenz wieder einmal etwas zu programmieren, habe ich Cleantodo von Grund auf neu geschrieben und zwar mit einem neuen Datenbanksystem SQLite und das Ganze auch noch objektorientiert. Man braucht nur die PHP files auf den Server laden und kann dann auch gleich loslegen. Die Datenbank wird von selbst erstellt. Das ganze ist Multiuser fähig und man kann Tasks löschen und wiederherstellen. Der Quelltext wird opensource released werden und vlt. wird es ein kleines Plugin System geben. Es soll auf jeden Fall so modular wie möglich aufgebaut sein und man soll es vielleicht in Zukunft auf ein komplexes Arbeitsnetzwerk erweitern können.

Man kann mittlerweile auch mit MySQL sowie SQLite arbeiten. Das kann man in der config-Datei einstellen. Zurzeit ist alles mit HTML und PHP programmiert. Möchte das Ganze auf AJAX erweitern aber mit dem Zusatz das auch alles noch ohne JS bzw. AJAX funktioniert, also so eine Art Fallback.

Halte euch diesbezüglich noch auf dem Laufenden!

SOUNDEX Algorithmus

Ich bin vor kurzem während einer MySQL-PHP-Programmier-Session auf den Soundex Algorithmus gestoßen. Dieser beschreibt eine phonetische Kategorisierung mit Hilfe einer Wertung einzelner Buchstaben.

Beispiele:
SELECT SOUNDEX('Hello'); -> 'H400'
SELECT SOUNDEX('Quadratically'); -> 'Q36324'

Das beste ist, das dieser Algorithmus bereits in MySQL implementiert ist und man somit eine umfangreichere Suche als mit der üblichen LIKE Funktion verwenden kann.

Beispiel einer sehr einfachen SOUNDEX-Suche:
SELECT * FROM table WHERE SOUNDEX(Name) LIKE CONCAT('%', SUBSTR(SOUNDEX('suchstring'), 1, 2), '%');

Wir wissen also jetzt schon was die SOUNDEX() Funktion macht. LIKE ist ein Vergleichsoperator, welcher überprüft ob ein String in einem anderen vorkommt.

Zum Beispiel bei einer ganz einfachen Suche:
SELECT * FROM table WHERE Name LIKE '%test%';
Das heißt in der Spalte Name muss das Wort „test“ vorkommen. Groß- und Kleinschreibung sind dabei egal.

CONCAT() fügt einfach mehrere Strings zu einem zusammen.
SELECT CONCAT('%', 'test', '%'); -> '%test%'

Und SUBSTR(string, start, stop) kürzt in unserem Fall einfach Strings.
SELECT SUBSTR('teststring', 1, 2); -> 'te'

Der wesentliche Vorteil aber bei dieser Suche ist, das auch Wörter gefunden werden, die ähnlich klingen. Die Genauigkeit kann mit dem stop-Parameter in der SUBSTR Funktion eingestellt werden.

Neues CleanTodo User Interface

Ich habe das gesamte CleanTodo-UserInterface jetzt nochmal neu mit jQuery anstatt wie vorher mit prototype geschrieben. Ich finde, dass jQuery schneller und einfacher in der Benutzung ist. Außerdem habe ich die Untergruppenfunktion wieder rausgenommen, dafür aber kann man jetzt die einzelnen Tasks per drag and drop sortieren.
Desweiteren gibt es eine QuickSearch-funktion für Tasks, welche von jeder Seite aus zugänglich ist.
Dieses Design ist erst eine Vorschau auf die neue Version, welche ich hoffentlich bald online stellen kann.