Sortierung | BVA-System

Posts Tagged ‘Sortierung’

Jahresfazit 2014

Mittwoch, Dezember 31st, 2014

Auch dieses Jahr möchte ich hier wieder mit einem Jahresfazit abschließen. Im Gegensatz zum letzten Jahr dachte ich bis eben, das dieses Fazit etwas durchwachsener ausfallen würde, da ich gerade die letzten Monate doch etwas durchhing. Allerdings ist mir eben bewusst geworden, das in den vergangenen 12 Monaten doch recht viel passiert ist.

Neue Schlagwortfunktionen

Die bestehenden Schlagwortfunktionen wurden in diesem Jahr komplettiert. Es ist nun möglich, mehrere Schlagworte zusammenzuführen, Schlagworte umzubenennen und natürlich auch zu löschen. Alle Funktionen sind in einem Popup-Dialog untergebracht, der sich mit der rechten Maustaste über dem Schlagwort öffnen lässt. Außerdem entstand ein Schlagwortkonfigurationsdialog mit dem die Schlagworte bequem zu Schlagwortkategorien zugeordnet werden können.

Ansichtseinschränkung

Völlig neu hinzugekommen ist die Funktion zur Einschränkung der in den Bildlisten angezeigten Fotos. Es stehen mittlerweile einige Kriterien zur Verfügung, mit denen die Ansicht eingeschränkt werden kann. Fotos die den ausgewählten Kriterien nicht entsprechen, werden nun gar nicht mehr angezeigt. Allerdings ist die Ansichtseinschränkung bisher nur für die Datenbankansicht möglich, da sie auf modifizierten SQL-Befehlen basiert.

BVASystem zum Jahresabschluss 2014

BVASystem zum Jahresabschluss 2014

Bildfilterung

Wie angekündigt, wurde die Bildfilterung im vergangenen Jahr ausgebaut. Es sind eine Menge Kriterien dazugekommen, die zur Filterung genutzt werden können. Herausfordernd hierbei war für mich, das fast alle Kriterien eine selbst geschriebene Komponente zur Festlegung benötigten. Dadurch ist aber eine Oberfläche entstanden, mit der ohne viel Text möglichst flexible Filter eingestellt werden können. Neu ist ebenfalls, das eine aktive Bildfilterung durch ein Symbol in der Hauptstatusleiste angezeigt wird.

Sortierung

Die Sortierung der Bildlisten wurde komplett überarbeitet, da sie  bisher leider nicht richtig funktionierte. Nun können alle Listen nach Bildtitel, Aufnahmedatum und nach der Bildfilterung sortiert werden. Gerade letzteres ist sinnvoll, wenn man die zur Filterung passenden Fotos zusammen sehen möchte.

Export

Zu guter letzt ist noch der Bildexport erwähnenswert. Es ist seit diesem Jahr möglich, Fotos die einmal den Weg in die Datenbank gefunden haben, wieder zu exportieren. Dabei stehen verschiedene Modi zur Auswahl, so das Bilder zum Beispiel auch gleich in reduzierter Bildgröße exportiert werden. Dies habe ich benötigt, da ich in meinem Foto-Blog die Bilder nicht in voller Auflösung veröffentliche.

Ausblick

Der Ausblick aufs nächste Jahr fällt mir ehrlich gesagt schwer. Zum einen stehen noch jede Menge interne Änderungen an, die kaum sichtbare Veränderungen bringen und zum zweiten habe ich mittlerweile ein ganzes Buch voller guter Ideen und Wünsche zusammengetragen. Fakt ist, das ich auf jeden Fall erst einmal die angefangenen Änderungen zu Ende bringe. Damit steht fest, das es bald eine Demo-Datenbank geben wird und das früher oder später auch eine lokale SQLite Variante genutzt werden kann. Außerdem habe ich mir gerade vor Weihnachten eine NAS-Festplatte gekauft, auf der ein MySQL-Server läuft. In den nächsten Wochen werde ich ausprobieren, ob der Server für das BVASystem ausreicht. Zu guter letzt habe ich mir vorgenommen, im nächsten Jahr wieder mehr zu bloggen. Dieses Jahr gab es gerade zum ende hin, leider viel zu wenig Artikel.

BVASystem Version 2.2.0

Dienstag, März 11th, 2014

Da nun bereits wieder der Frühling vor der Tür steht, ist es wieder an der Zeit, eine stabile Version des BVASystems zu veröffentlichen. Wenn ich ehrlich bin, ist in den letzten Monaten dieses mal nicht eine einzige Funktion entstanden, die ich als das Non-Plus-Ultra bezeichnen würde. Vielmehr habe ich dieses mal eine Reihe von kleineren Verbesserungen vorgenommen, die sich beim täglichen Umgang mit dem Programm definitiv bemerkbar machen.

Am wichtigsten, gerade in Hinblick auf die Bildfilterung, war mir dabei die Neugestaltung der Sortierung. Die Ergebnisse der Bildfilterung können nun, auch schon bereits während die Filterung berechnet wird, nach Filterungsübereinstimmung sortiert werden. Damit erscheinen die Fotos, die man sicherlich sehen möchte am Anfang der Bildliste. Als weitere Veränderung an der Bildfilterung fällt sicherlich auf, das man nun einzelne Filter auch wieder löschen kann. Für bequeme Anwender besteht ebenfalls die Möglichkeit, alle Filter auf einmal zu löschen bzw. alle Filter zu deaktivieren. Als neues Filterkriterium können nun die zu den Fotos zugeordneten Schlagworte genutzt werden.

BVASystem 2.2.0 - Miniaturbilder mit aktivierter Bildfilterung

BVASystem 2.2.0 – Miniaturbilder mit aktivierter Bildfilterung

Ganz neu ist der Dialog, der zur Konfiguration der Schlagworte dienen soll. Mit diesem können bequem Schlagworte zu den einzelnen Schlagwortkategorien zugeordnet werden. Neu ist ebenfalls die Möglichkeit, Fotos aus der Datenbank zu exportieren. In der letzten Woche habe ich noch eine Funktion umgesetzt, die bereits seit rund 1300 Tagen auf meiner Todo-Liste stand. Es können nun mehrere Fotos auf einmal selektiert werden, wenn man beim Selektieren die Shift-Taste gedrückt hält.

Ausblick

Für die nächste Zeit habe ich mir wieder größere Änderungen vorgenommen. Die größte ist dabei sicherlich, das ich das System um eine lokale Datenbank erweitern möchte. Ich bin eigentlich total glücklich darüber, wie ich meine eigenen Fotos mit dem BVASystem verwalten kann. Allerdings stört mich, das immer mehr Funktionen ausschließlich datenbankseitig verfügbar sind. Daher habe ich mir überlegt, eine lokale Datenbankdatei zu nutzen, um nach und nach die angesprochenen Funktionen auch lokal nutzbar zu machen. Dabei sollen keine Bilder in der Datenbankdatei abgelegt werden. Die lokale Datenbank soll ausschließlich dazu dienen, die Textdaten der Fotos schnell auffindbar zu speichern.

Damit es auch wieder sichtbare Änderungen gibt, habe ich mir vorgenommen, die Filterung um weitere Kriterien zu erweitern. Gerade jetzt, wo die Sortierung der Filterungsergebnisse möglich ist, nutze ich die Funktion recht häufig. Allerdings fehlt mir definitiv noch das eine oder andere Kriterium, damit ich dort wunschlos glücklich werde. Fast noch wichtiger ist es, bei den Schlagworten noch einige Funktionen nachzureichen. Es ist zum Beispiel aktuell nicht möglich, ein Schlagwort komplett zu löschen. Auch die Umbenennung eines Schlagwortes ist aktuell noch nicht möglich. Außerdem habe ich mir vorgenommen, in den Miniaturbildkomponenten eine Markierung zu schaffen, die das Auffinden des aktiven Elementes vereinfachen soll. Gerade bei größeren Bildlisten kann man doch recht schnell den Überblick verlieren.

Sortierung der Bildlisten

Montag, März 3rd, 2014

Für die Sortierung von Bildlisten nach der Übereinstimmung der ausgewählten Filterkriterien musste ich den bisherigen Ablauf des Sortiervorgangs komplett verwerfen und neu implementieren. Die bisher eingesetzte einfache Lösung musste durch eine viel kompliziertere ersetzt werden. Diese hat nun allerdings einige Vorteile, die ich nicht mehr missen möchte.

Der größte Vorteil dabei ist, das die Sortierung robust gegenüber Änderungen ist. Wird zum Beispiel der Bildtitel verändert, so verändert sich automatisch die Position des Bildes in der Bildliste. Gerade für die Filterkriterien-Übereinstimmung ist dies total praktisch, da sich die Übereinstimmungen wahrscheinlich mit jeder Änderung an den Filterkriterien ändern werden. Ein weiterer Vorteil der neuen Sortierung ist, das der Zugriff auf die einzelnen Elemente beschleunigt werden konnte. Bisher musste nach der Ausführung einer Worker-Aufgabe die komplette Bildliste durchlaufen werden, um das entsprechende Foto wiederzufinden. Die Position des Bildes in der Bildliste lies sich leider nicht nutzen, da sich diese während der Ausführung der Aufgabe hätte ändern können. Da die interne Sortierung der Bildliste nun fest ist, kann jetzt durch eine binäre Suche jedes beliebige Element der Liste schnell gefunden werden.

Sortierte gefilterte Bildliste

Sortierte gefilterte Bildliste

Dadurch, das die Bildliste eines der zentralen Elemente des BVASystems ist, musste ich in den letzten beiden Wochen so ziemlich jede Funktion des Programmes verändern. Zuerst hoffte ich, das ich diese Änderungen nach und nach durchführen  könnte. Dies stellte sich allerdings als nicht praktikabel heraus. Es musste also alles auf einmal sein. Vor 2 Wochen sah das Programm daher total erbärmlich aus. Überall Zugriffsverletzungen, Fehler und sonstige komische Verhaltensweisen. Daher bin ich nun um so glücklicher, das die neue Sortierung einsatzbereit ist und das Programm wieder so funktioniert, wie es funktionieren soll.

Ausblick

Trotzdem habe ich mir für die nächsten 2 Wochen vorgenommen, nochmals alles gut zu testen und auftretende Fehler zu korrigieren. Außerdem werde ich ein weiteres ewiges offenes Problem, die Auswahl mehrerer Bilder, lösen. Ähnlich wie im Windows Explorer möchte ich,  wenn bei der Auswahl die Shift-Taste gedrückt wird, das alle Bilder, die sich zwischen den beiden angeklickten Fotos befinden, markiert werden.

Export von Fotos

Samstag, Februar 15th, 2014

Lange überfällig war beim BVASystem eine Funktion, mit der Bilder aus der Datenbank wieder auf Festplatte geschrieben werden können. Da ich die Funktion nun bereits relativ häufig vermisste, habe ich sie nun endlich umgesetzt. In der Version 2.1.6.78-dev, die ab jetzt hier heruntergeladen werden kann, ist die Export-Funktion enthalten. Die Bildfilterung wurde um 2 zentrale Funktionen erweitert, mit denen alle aktiven Filter deaktiviert bzw. gelöscht werden können. Eine weitere auffällige Änderung ist es, das die Sortierung der Bildliste nun über die Hauptmenüleiste festgelegt werden kann. Zu guter letzt habe ich wieder an der Testanwendung gearbeitet, so das ich nun in der Lage bin, das Löschen eines Bildes aus der Datenbank automatisiert zu testen.

Der Bildexport

Die Export-Funktion wurde in die Popupmenüs integriert, die über den Bildern oder Miniaturbildern geöffnet werden können. Genauso wie beim Bildimport, ist der Export für einzelne Bilder oder eine Bildauswahl möglich. Die für den Export notwendigen Parameter können in einem Dialog eingestellt werden. Der eigentliche Export wird natürlich über den Worker ausgeführt, damit die Anwendung weiterhin bedienbar bleibt.

Einstellungsdialog zum Bildexport

Einstellungsdialog zum Bildexport

Da meine Mutter häufig Probleme hat, ihre Fotos in der richtigen Größe per E-Mail zu versenden, habe ich mir überlegt, das in der Export-Funktion gleich eine Skalierung mit integriert sein könnte. Auch für mich ist diese Funktion nützlich, da ich meine Fotos auf 1500 Pixel Breite skaliere, bevor ich sie auf meiner Foto-Homepage verwende. Um möglichst viele Anwendungsfälle zu erfüllen, gibt es im BVASystem nun 4 Möglichkeiten, wie Fotos exportiert werden können. Natürlich kann das Foto wieder so exportiert werden, wie es in der Datenbank eingestellt wurde. Außerdem stehen 3 verschiedene Exportvarianten mit Skalierung der Bilder bereit. Es kann die Länge der langen Bildseite oder die Länge der kurzen Bildseite festgelegt werden.  Als drittes können die Fotos mit einem festen Skalierungsfaktor vergrößert bzw. verkleinert werden. Bei allen Skalierungsvarianten bleibt das ursprüngliche Seitenverhältnis des Bildes erhalten.

Ausblick

Als kleinen Ausblick habe ich bereits damit begonnen, die Sortierungsfunktionen des Programmes zu verändern. Im vorigen Blog schrieb ich bereits in was für einem Dilemma ich dort stecke. Da ich die Sortierung, gerade für die Bildfilterung, unabdingbar halte, werde ich mich in den nächsten Wochen damit auseinander setzen. Ich hoffe, das ich die großen Änderungen möglichst schnell umsetzen kann, damit ich mich hier bald mit einer neuen Version melden kann. 

Das Dilemma mit der Sortierung

Dienstag, Februar 11th, 2014

Ich habe mit fast jedem Blogeintrag hier eine neue Version vom BVASystem veröffentlicht. Heute möchte ich den Blog allerdings nutzen, um aufzuzeigen was für ein immenser Aufwand an einer Kleinigkeit hängen kann. Diese Kleinigkeit ist die Sortierung der Bildliste.

Ist-Zustand

Aktuell können 4 unterschiedliche Sortierungsreihenfolgen ausgewählt werden: Bildtitel aufsteigend und absteigend und Aufnahmedatum aufsteigend und absteigend. Bei Bildlisten aus der Datenbank funktionieren diese auch so wie gewünscht. Wird dagegen die Bildliste durch die Auswahl eines Verzeichnisses erstellt, so funktioniert die Sortierung nach dem Aufnahmedatum nicht. Der Grund dafür liegt in den nebenläufigen Prozessen des BVASystems.

Die Bildlisten werden generell losgelöst von der Programmoberfläche eingelesen, damit die Oberfläche  während des Einlesevorgangs weiterhin bedienbar bleibt. Bei der Auswahl eines Verzeichnisses dauert dieser Einlesevorgang recht lange, da jedes Bild geöffnet werden muss, um das Thumbnail und die Metadaten auszulesen. Daher habe ich den Einleseprozess in mehrere Stufen geteilt. Im ersten Schritt wird nur bestimmt, welche Dateien sich im gewählten Verzeichnis befinden. Im zweiten Schritt werden die Metainformationen ausgelesen und im dritten Schritt wird das notwendige Thumbnail erstellt. Nun ist es so, das die Sortierung bereits nach dem ersten Schritt durchgeführt wird, da die Bildliste nach diesem Schritt bereits in der Oberfläche angezeigt wird. Allerdings ist hier das Aufnahmedatum der Fotos noch nicht bekannt. Diese wird erst zusammen mit den Metadaten im zweiten Schritt ausgelesen.

Ausweg

Prinzipiell bieten sich 2 Lösungswege an. Der einfachere Weg ist es sicher, die Bildliste erst anzuzeigen nachdem die Metadaten aller Fotos ausgelesen wurden. Dies würde allerdings dazu führen, das das Programm deutlich langsamer wird. Also werde ich den komplizierteren Weg wählen müssen und einen Mechanismus schaffen, der die Sortierung sofort aktualisiert, sofern sich ein Aufnahmedatum geändert hat.

Was muss dafür alles angepasst werden?

Der wichtigste Punkt ist sicherlich, das die Bildliste nun unabhängig von der gewählten Sortierung gespeichert wird. Zusätzlich muss eine Indexliste erstellen werden, die die gewählte Sortierung repräsentiert. Alle Funktionen, über die Zugriff auf ein Listenelement erfolgt, müssen folglich angepasst werden. Wenn beispielsweise das dritte Element der Liste benötigt wird, muss in der Indexliste nachgeschaut werden, an welcher Position in der unsortierten Bildliste sich die gewünschten Daten befinden.

Damit die Indexliste bei einer Änderung des Aufnahmedatums oder Bildtitels angepasst werden kann, muss das Listenelement die Bildliste über Änderungen informieren. Sofern sich dadurch Positionen innerhalb der Bildliste verschieben, muss diese wiederum die Komponenten zur Anzeige informieren. Diese müssen nämlich ebenfalls aktualisiert werden. Zu guter letzt muss ebenfalls der Cache angepasst werden, der die Thumbnails verwaltet.

Insgesamt müssen für die geänderte Sortierung fast alle Kern-Komponenten des BVASystems modifiziert werden. Das folgende Bild soll die Zusammenhänge verdeutlichen.

Schaubild zur Listensortierung

Schaubild zur Listensortierung

Ausblick

Ich habe für die Änderungen die jetzt bevorstehen, keine weiteren Zwischenversionen der Bildverwaltung geplant. Eine halbfertige Umsetzung, wo Teile der Bildlistenanzeige nicht funktionieren, würde euch nichts bringen. Aktuell bin ich gerade dabei, die Lösung des Sortierungsdilemmas vorzubereiten. Wenn diese Vorbereitung abgeschlossen ist, werde ich nochmals eine  Programmversion veröffentlichen. Anschließend werde ich einige Zeit brauchen um alle Änderungen umzusetzen. Damit die ganze Frickelei nicht ohne neue Funktion bleibt, werde ich im Zuge dessen als drittes Sortierungskriterium die Filterungsübereinstimmung einführen. Dazu später allerdings mehr …