# Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank



## LightDemon (6. August 2017)

*Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*

Hallo Leute...

da es sich bei meinem Vorhaben um ein langfristiges Ziel handelt, suche ich tatsächlich an dieser Stelle "nur" nach der passenden Programmiersprache, in die ich mich dann selbständig einarbeiten kann. Ich möchte dazu kurz vorstellen was ich vorhabe, und hoffe auf Hinweise in welchem Umfeld sich das umsetzen lässt.

Grundlegend geht es um Photos, die archiviert werden sollen, wobei die Alben in denen sie sortiert sind noch mit Attributen versehen werden sollen, welche man dann wiederum mit einer Suchmaske abrufen kann. In meiner Familie  wurde ich wegen verschiedener Dinge gefragt, ob man Bilder derart durchsuchen kann .. konkret soll folgendes sortiert werden:

- Bilder von vielen Urlauben über viele Jahre auf verschiedenen Kontinenten
- 2 ältere Herren möchten ihre Sammlung Modeleisenbahnen zusammenlegen und zusammen eine große Modelplatte für diese Züge errichten
- die Archivierung durch Bilder von Habseligkeiten in vielen nummerierten Kartons vor einer Auswanderung 

Die größte Einschränkung ist: das alles muss OFFLINE laufen. 


Zusammenfassung:

- viele Bilder, geordnet in vielen Unterordnern
- Unterordner sollen noch Attribute bekommen (z.B. "Urlaubsland","Jahreszeit" usw.)
- in einer Suchmaske soll es dann möglich sein, sich nur gewählte Bildersammlungen anzeigen zu lassen, die die gewählten Attribute erfüllen

Es lässt sich wohl am ehesten mit der Artikelsuche auf ebay vergleichen, wenn man zunächst die Attribute auswählt, und ebay dann eine Ergbisslsite ausspuckt, von Artikeln auf die diese Attribute ebend vorher markiert wurden.
In HTML hätte ich eine grobe Vorstellung wo ich hier ansetzen muss, da habe ich zumindest rudimentäre Programmierkenntnisse. Allerdings soll das ganze ja auf jeden Fall offline funktionieren .. naja. Ich hoffe jemand kann mir einen Hinweis geben, in welcher Umgebung man diese Vorhaben umsetzen kann. Wie gesagt, ich suche eher die langfristige Lösung und würde/möchte mich gerne dazu in eine Programmiersprache einarbeiten.


----------



## wuselsurfer (6. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*

Mir fällt da spontan Access ein.


----------



## -RedMoon- (6. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*

HTML ist keine Programmeiersprache, sondern eine Auszeichnungssprache (markup language), habe da schon letztens mit einem "Möchtegernprogrammierer" diskutieren müssen.

Und du willst dein Vorhaben so wirklich programmieren? mit C++, C#, Java, .Net usw?
Wozu? Das gibts doch fertig, auch offline: Acdsee, Lightroom, IrfanView.... Auch, wie schon genannt, Access ist dafür geeignet, aber unnötig.

Auch ein NAS kannst du dafür hernehmen. Die haben fertige Lösungen als App schon drin, Photostation bei Synology z.B.


----------



## fotoman (7. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*

Welche Vorkenntlnisse sind denn vorhanden und, für mich mind. genauso wichtig, auf welchen Geräten soll das ganze laufen?

Eins sollte man bei den Angaben bedenken


LightDemon schrieb:


> - Bilder von vielen Urlauben über viele Jahre auf verschiedenen Kontinenten
> - 2 ältere Herren möchten ihre Sammlung Modeleisenbahnen zusammenlegen  und zusammen eine große Modelplatte für diese Züge errichten
> - die Archivierung durch Bilder von Habseligkeiten in vielen nummerierten Kartons vor einer Auswanderung


Das liest sich für mich nicht danach, als ob das ganze in einem Haushalt und auf einem physikalischen Gerät stattfinden soll.

Damit ist schon beim Design der Datenbank darauf zu achten, dass Daten (im Gegensatz zu Adobes Lightroom) problemlos zu synchronisieren ist. Alle User müssen in der Lage sein, Bilder zu importiere und Schlagworte beliebig anzupassen. Das alles muss sich automatisiert wieder zu einer validen Datenbasis zusammen fassen lassen.



-RedMoon- schrieb:


> Und du willst dein Vorhaben so wirklich programmieren? mit C++, C#, Java, .Net usw?


Denkt man den Schritt von mir nur kurz weiter, scheitern schon fast alle für privat ausgelegten Systeme. Es gibt ein paar wenige, meist aber zu zahlende Systeme, die sowas (nicht Web-basiert) ansatzweise brauchbar können. 
- Irfanview als Verwaltung? Da kann man ja noch nicht einmal vernünftig Schlagworte verteilen.
- LR ist ein  Einzelplatz-System, dem man mit viel Aufwand beibringen kann, seinen Datenbestand zwischen zwei Rechnern zu kopieren. Aber wehe, man bearbeitet dann auf beiden Rechnern gleichzeitig den selben Datenbestand (hier die Eisenbahnsammlung).
- Acdsee ist m.W. nach auch ein System für Privatanwender mit eaxakt einem Gerät für die Datenerfassung.
- Eine Synology/QNap Lösung, die eine sinnvolle Verschlagwortung ermöglicht, habe ich auch noch nicht gesehen. Aber da hat jeder seine eigenen Ansprüche. Mir würde noch nicht einmal eine ellenlange Vorschlagsliste genügen, da wäre schon ein System ähnlich LR nötig. Ich will beim Verschlagworten der Eisenbahnen nur die bereits verwendeten Schlagworte für diese Kategorie angeboten bekommen, nicht aber die Namen aller Familienmitglieder oder der Urlaubsorte.

Außerdem legt man sich mit sowas auf exakt ein Gerät fest. Mit LR oder Imabas und co. hat man zwar eine Installation, kann diese aber problemlos auf ein anderes Gerät (noch nicht einmal des selben OS-Herstellers), umziehen.

Persönlich habe ich vor vielen Jahren sowas mit .NET (bei mir VB.NET) und SqLite realisiert. Wobei man genauso gut eine MySQL oder MSSQL Datenbank nehmen könnte.  Das Problem bei der Wahl der Programmierumgebung ist, dass die damit genutzten Tools fast immer an einer Systemarchitektur gebunden sind (oder man sie zumindest so verwedet). Falls man nicht schon fundierte Kenntnisse in plattformübergreifender Softwareentwicklung hat, wird man sich meist an die Tools einer Plattform halten und sein Programm, ob bewusst oder unbewusst, auf die gerade genutzte Plattform optimieren.

Wie man mit Access eine sinnvolle Anzeige der Bilder zur Verschlagwortung erstellen will, wüsste ich spontan zwar nicht, ohne Zusatzmodule wird das sicher schwierig.

Mittlerweile würde ich selbst als Einzelnutzer ein Webbasiertes System für eine Bilddatenbank verwenden. Das kann ja gerne nur auf dem lokalen NAS oder mit XAMPP auf dem PC laufen. So lange man nicht iOS als einzige Plattform im Auge hat, wäre das sogar im Urlaub auf einem Android- oder Windows-Tablet (ohne Internetanbindung) lauffähig.

 Man hat außerdem den großenn Vorteil, dass man jedes beliebige Endgerät zur Ansicht, Suche oder Verschlagwortung nutzen kann. Egal, ob dies der PC am Arbeitszimmer, das Tablet im Wohnzimmer, der PC der Kinder oder ein Smart-TV ist.

Das gäbe dann, je nach Vorkenntnis und Anforderungen an die Oberfläche, z.B. einen Server mit PHP, eine MySQL Datenbank und eine statische Ausgabe in HTML. Oder ein Server per JavaScript/ASP/Java/... und eine dynamischer Ausgabe in JavaScript/HTML5.

Ach so, wie die Bilder auf der Platte geordnet sind, ist nahezu egal. Die vorhandene Sortierung kann u.U. als eines von vielen Sortierkriterien (in Form von Attributen/Schlagworten) beim Import der Bilder übernommen werden. Die Suche sollte, wenn es performant sein soll,. über eine Datenbank laufen. Genauso würde ich Schlagworte niemals in das Originalbild schreiben sondern nur ein eine durch die Bilddatnbank exportierte Version des Bildes.


----------



## DubZ (7. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*

Kannst du das "es muss offline laufen" etwas genauer definieren? Soll das Programm nur für einen PC ausgelegt sein wo die Daten drauf liegen? Oder möchtest du das Programm u.a. mit Familie und Co teilen? Wie findet der Bilderaustausch dann statt?


----------



## taks (7. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*

- Ich würd dir zu C# und SQLite raten.
- In der Datenbank hast du dann eine Bild Entität. An dieser Entität hängt der Pfad zur Datei und die Schlagworte
- Ordner Struktur würd ich in der Datenbank definieren
- Um das Windows-Dateisystem nicht zu überfordern würde ich maximal ~10 Bilder in einem Windows-Ordner ablegen


----------



## fotoman (7. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*



taks schrieb:


> - Ich würd dir zu C# und SQLite raten.


Persönlich unter Windows würde ich das zwar auch machen, aber bevor die Aufgabe und ihre Zielplattform(en) nicht eimal ansatzweise definiert sind. halte ich die Wahl der Programmiersprache für verfrüht.

U.U. ist Mono mittlerweile so weit, dass es auch unter Linux für solche Aufgaben sinnvoll nutzbar ist. Unter Android mag man Xamarin nutzen, aber warum sollte man auf einem Mac Mono oder unter iOS Xamarin nutzen, wenn man keine plattformübrgreifen Apps schreiben muss.



taks schrieb:


> - Um das Windows-Dateisystem nicht zu überfordern würde ich maximal ~10 Bilder in einem Windows-Ordner ablegen


Fehlen da ein paar Größenordnungen? Ab ca. 10.000 bis 20.000 Dateien in einem Ordner wird NTFS langsam. Oder genauer gesagt der Windows Explorer, mit einem eigenen Programm kommt man an die Daten auch bei 100.000 Dateien in einem Ordner immer noch recht performant heran.

ich habe in der Bilddatenbank oft 2000-5000 Bilder in einem Ordner liegen (bei mir entspricht das einer Veranstaltung an einem Tag), was selbst auf einer langsamen 2,5" HDD kein Problem ist. Aber gut, ich habe jegliche Bildvorschau deaktiviert, für die Anzeige der gesuchten Bilder ist nicht der Dateiexplorer sondern die Bilddatenbank zuständig.

Am Ende dürfte hier jeder wohl das vorschlagen, was er am besten beherrscht oder aus anderen Gründen persönlich bevorzugt. Programmiersprachen sind austauschbar, die zugehörigen Toolkits kann/muss man zusätzlich lernen. Und um einem anderen Thread hier zu folgen, könnte man das ganze natürlich auch in C oder Assembler progrmmieren.

Genauso sollte man sich in Abhängigkeit der Verschlagwortung und der danach angedachten Suchen überlegen, ob eine mobile Datenbank wie SqLite das richtige ist oder ob eine "richtige" DB die bessere Wahl sein könnte. SqLite kann halt (teils per Definition) nicht alles, was bei MySql/MS SQL mittlerweile selbstverständlich ist. Dafür läuft es auf jeder Plattform und das DB-File lässt sich problemlos kopieren.


----------



## taks (7. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*



fotoman schrieb:


> Persönlich unter Windows würde ich das zwar auch machen, aber bevor die Aufgabe und ihre Zielplattform(en) nicht eimal ansatzweise definiert sind. halte ich die Wahl der Programmiersprache für verfrüht.



So wie ich es verstanden habe, soll es nur auf Windows-Desktops laufen. Aber vllt. hab ich da zu viel rein interpretiert ^^



> Fehlen da ein paar Größenordnungen? Ab ca. 10.000 bis 20.000 Dateien in einem Ordner wird NTFS langsam. Oder genauer gesagt der Windows Explorer, mit einem eigenen Programm kommt man an die Daten auch bei 100.000 Dateien in einem Ordner immer noch recht performant heran.



Das hab ich wohl falsch formuliert, aber bin ehrlich gesagt jetzt zu faul um das ausführlich zu erläutern ^^
Meine Aussage bezog sich auf eine spezielle Verzeichnissstruktur und Anzahl Dateien.


----------



## DataDino (8. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*

Ähm ich kann die komplette Anfrage absolut nicht nachvollziehen. Es macht vom Aufwand her keinen Unterschied, die Bilder im Explorer oder in einer Foroverwaltung zu sortieren. Und aktuell scheint es sich nur um das sortieren und finden der Dateien zu handeln. Der Windows-Explorer zusammen mit der Bildvorschau ist dazu mächtig genug. Ansonsten gibt es ja auch in den Live-Essentials noch die Windows Live Fotogallerie: https://support.microsoft.com/de-de/help/954123

Hier mal ein Beispiel für die Ordnerstruktur für Urlaubsbilder:

```
Urlaub
- 2015
-- Afrika
--- Kapstadt
--- Yamoussoukro
-- Australien
--- Sydney
--- Melbourne
- 2016
-- Nord Amerika
--- New York
--- Washington
--- Las Vegas
-- Süd Amerika
--- Rio
- 2017
-- Asien
--- Tokyo
```
Es macht vom Aufwand her keinen Unterschied, ob man die Bilder direkt in diese Ordner sortiert oder in einer Fotoverwaltung mit Tagging arbeitet. Will man aber auch unbedingt auf die Metadaten der Bilder zugreifen (Geo-Daten, Exif Daten etc.) und nach diesen sortieren, dann muss man da auch nichts neues für schreiben:
Xnview * Image viewer, Photo Resizer, Graphic Converter
JPhotoTagger Home Page
digiKam - digiKam
StudioLine - Downloads - Download Photo Basic
https://support.microsoft.com/de-de/help/954123
All diese Tools können Tagging (werden bei dem einen oder anderen Tool auch als Kategorien bezeichnet). Ich bin mir sicher, das egal wie viel Arbeit du in deine eigene Software steckst, du wahrscheinlich keine bessere Verwaltung hinbekommen wirst. Gerade XNView ist sehr mächtig.

Und wer einen Foto-Server für NAS oder Heimserver sucht:
https://www.picapport.de/de/index.php

Wenn du aber unbedigt selber programmieren willst: Entweder C#, VB.NET, Java oder Node.js mit Electron. Theoretisch kannste, wenn du die richtigen Bibliotheken hast, nahezu fast jede Sprache nehmen.


----------



## fotoman (8. August 2017)

*AW: Auf der Suche nach der richtigen Programmiersprache für eine offline Photodatenbank*



DataDino schrieb:


> Es macht vom Aufwand her keinen Unterschied, ob man die Bilder direkt in diese Ordner sortiert oder in einer Fotoverwaltung mit Tagging arbeitet.


Offensichtlich hast Du keine "komplexeren" Anforderungen an Deine Suche. Wie willst Du denn in den Ordnern neben dem Ort auch noch die Verschlagwortung nach abgebildten Personen, Tieren oder Pflanzen hinbekommen. Soll man dafür etwa Dateisystem-Links ziehen, also quasi virtuelle Ordner erstellen, die entweder beliebig komplex werden oder eine Suche nach allen Bildern mit Partnerin und Hund vor 2016 nicht ermöglichen.

Genauso ist es bezogen auf die Modellbahner, wenn dort mehr wie nur die Baureihe als Suchkriterium dienen soll.

Eine rein chronologische Suche hatte ich zu analogen Zeiten als ich noch wissen musste, zu welchen Weihnachtsfeiern ich den Baum oder die Deko fotografeirt hatte, um die Bilder für das kommende Jahr zu finden. Heute kommt einfach das seit Jahren verwendete Tag "Weihnachtsdeko" (und u.U. noch ein paar andere) zum Bild. Dabei habe ich natürlich keine Lust, mir die jährlich genutztenn Schlagwörter jedes Jahr weider heraus zu suchen. Ich selektiere einfach die Schlagwortkategorie Kategorie "Weihnachten", gepaart mit "Familie" und schon stehen für die Weihnachtsbilder nur noch 20 anstatt 2000 Schlagwörter zu Auswahl.



DataDino schrieb:


> Will man aber auch unbedingt auf die Metadaten der Bilder zugreifen (Geo-Daten, Exif Daten etc.) und nach diesen sortieren, dann muss man da auch nichts neues für schreiben:


Unter Windows genügt der Explorer, sowohl zum Setzen wie auch zum Suchen nach EXIF/IPTC Tags. Die Tags muss mann dann halt als Freitext aus Notepad heraus manuell in jedes einzelne Bild kopieren. Und bei jeder Änderung/Erweiterung der Tags darf man die betroffenen Bilder neu archivieren.



DataDino schrieb:


> Ich bin mir sicher, das egal wie viel Arbeit du in deine eigene Software steckst, du wahrscheinlich keine bessere Verwaltung hinbekommen wirst. Gerade XNView ist sehr mächtig.


Da bin ich mir aber sofort und ohne Prüfung aller von Dir genannten  Tools (ein paar davon kenne ich) zu 100% sicher.

 Aber sicher irren zehntausende von Photo Mechanic Usern (die allermeisten im professionellen Bereich). Wenn ich mir ansehe, wie schnell ich mit dem Tagen der Bilder einer Veranstaltung in meiner Verwaltung bin und wie lange jemand benötigt, der vergleichbares mit irgendeiner nicht für diesen Workflow optimierten Bilddatenbank macht (Photo Mechanik ausgenommen), dann weiss ich, warum ich das selber geschrieben habe und auch, warum mein Tablet dafür zu hause bleibt und ich immer noch den Laptop mitnehmen.

StudioLine könnte man sich mal ansehen. Warum ich da in den Features zwar eine Suche, aber keine Verschlagwortung finde, wird sich dann auch klären.
Bei PicApport finde ich auch wieder kein Modul zur Verschlagwortung, das mag es aber als Plugin irgendwo geben.


----------

