Anregung für kleines Projekt Filmsammlung

Mahlzeit …

Gestern Abend kam in einer geselligen Runde von zwei Bekannten die Idee : “Kannst uns nich ma so n kleines Programm für unsere Filmsammlung basteln ?”
“Klar, kein Thema. Ist schnell gemacht.” kam von mir.

Wenn man so das Netz durchstöbert findet man auch recht viel dazu da es gerne als Tutorial oder Übung genutzt wird. Auch denke ich doch das ich so viel Erfahrung habe sowas mit einer simplen GUI auf die Reihe zu bekommen.
Aber dennoch gibt es so ein paar Dinge wo ich gerne mal eure Meinung hören würde.

  1. Metadaten
    Die Jungs sind zwar fit in Dingen wie unterschiedliche Video-/Audio-Codecs, Formate und so was. Und ich bin sicher dass es für sowas auch entsprechende Libs mit Java-Bindings geben dürfte um aus den Files solche Daten zu lesen. Zusätzlich hatte ich mir gedacht bei einem neuen Eintrag fehlende Infos einfach über einen InputDialog abzufragen. Aber das wars dann auch schon mit Wissen. Ich möchte halt möglichst viele Infos bereits aus den Files lesen können ohne das viel zusätzliches gemacht werden muss. Kennt da jemand zufällig so spontan eine gute Lib ?

  2. es soll dauerhaft im Hintergrund laufen
    Auch kam die Frage ob es denn möglich wäre eine Art automatische Erkennung einzubauen wenn man neue Files in ein bestimmtes Verzeichnis kopiert. Klar, dafür gibts FileWatcher (oder so ähnlich) aus dem NIO-Package. Aber es kam die Frage nach dem “Autostart” auf. Als Mögliche Idee hatte ich Jar2Exe in der Version 1.8 in Betracht gezogen. Damit ist es möglich JAR-Files als einen Windows Service zu wrapen. Auch das “installieren” ist recht einfach : mit Launch4J kann man mit entsprechendem Manifest UAC triggern und sich so nötige Rechte zum installieren eines Service holen. Leider gibt es bei Jar2Exe kleinere Probleme eine externe JRE anzugeben. Auch erstmal nicht weiter tragisch. Da ich aber leider nicht vorraussetzen kann das eine lauffähige und aktuelle JRE installiert ist würde ich schon gerne selbst eine mitliefern.
    Mir ist zwar der Artikel “5 Möglichkeiten eine Java-App zu starten” bekannt, aber wie siehts mit Autostart aus ?

  3. es soll auf jedem System laufen
    Zwar so ein bisschen von Punkt 2, aber ich kann halt leider keine “Systemvorraussetzungen” geben da es den beiden etwas schwierig wäre diese ohne meine Hilfe erfüllen zu können.
    Ich hatte daher sogar daran gedacht es irgendwie in DotNET oder gar C umzusetzen, da ich aber beide Sprachen nicht “spreche” bräuchte ich einen guten Code-Generator oder jemand der mir in Punkt unter die Arme greifen kann. Wie würdet ihr hier vorgehen ? Erstmal auf gut Glück was basteln und wenns nich auf anhieb läuft ans Zielsystem anpassen ? Oder doch lieber gleich dafür sorgen das es auf möglichst vielen System läuft ? Ziel-Platform ist zum Glück nur Windows, aber von XP über Vista bis 8.x ist leider alles dabei. Klar, auch wenn ich schon eine 8er JRE auf nem XP ans laufen bekommen habe schränkt es mich doch in der Wahl ein was ich, wenn überhaupt, als JRE mitliefer. Eine 32-Bit VM läuft überall, und so viel RAM werd ich durch cleveres Datenmanagement nicht brauchen (werde nur das im RAM halten was auch gerade gebraucht wird, rest liegt auf der Platte).

  4. Export
    Von einem von beiden kam noch der Wunsch auf es in einem Format zu speichern was man auch ohne weiteres mit Windows Boardmitteln öffnen kann. Mir würde da erstmal nur C/T-SV einfallen, noch irgendwas anderes an Libs mit ins Boot holen nur um z.B. ein Excel-File zu erzeugen, nee, da hab ich keine Lust drauf. So n C/T-SV hat halt schon den Vorteil das man es einfach mit jedem beliebigen Texteditor öffenen kann, aber irgendwie wäre mir sowas in richtung SQLite schon lieber. Vor allem was das “nur das laden was man braucht” angeht. Bei einem C/T-SV wäre ich ja gezwungen es doch immer wieder einzulesen. Gleiches gilt für XML, was zwar auch noch eine Menschen-lesbare Form hat, aber dann doch nicht so das geeignete Format ist.
    Auch muss ich für sorgen das eventuelle Dateischäden durch unsachgemäßes Edit nicht zum Datenverlust führen. Eine zusätzliche Export-Funktion wäre schon angebracht. Vielleicht auch direkt automatisch als Deamon-Thread.
    Was wird hier so in der Praxis genutzt ?

Ihr seht schon : eigentlich klare Vorstellungen mit ein paar Hürden wo ich mir doch nicht ganz so sicher bin. Für Tipps und Anregungen bin ich gerne offen.

Ich bin selbst seit einigen Monaten dabei eine Art Filmverwaltungs-App für Android zu machen. Zu 1: Falls es um detailliertere Informationen wie Genres, Schauspieler oder eine kurze Beschreibung geht, kann ich The Movie Database (TMDb) als Quelle empfehlen.
Zu 4: JSON wäre vielleicht noch eine Möglichkeit. Ansonsten kannst du ja SQLite benutzen, und es dann beim exportieren in das entsprechende Format umwandeln.

Also es ist schon spät. Ich schaffe gar nicht, alles zu lesen.

  1. Sie sollen zB Java 7 installieren. (jrm, jvm)

  2. Umgebungsvariable.

  3. .bat-Datei mit java -jar … in den Autostart-Ordner.

  4. Benötigte Libs, die nicht aus tausenden Klassen, docs und scrs bestehen, packst du mit ins JAR.

  5. zB gson bietet sich an, für alles, was mit dem schlanken json zu tun hat. (Erstellt dir gleich die gewünschte Klassen-Objekt-Struktur)

  6. gui-Eingabe-Maske mit LMs und mit vorher eingefügten Werten, die whrs. im „File-Container“ bereits sind.

  7. Zusätzliche Werte musste du dir aus den Netz holen, das ist aber nicht so einfach, genau ein passender Film vorhanden?, zusätzliche Werte vorhanden?, zu viele Werte vorhanden?

Ich hab in den letzten paar Tagen angefangen, eine Datenbank zu verwenden lokal, 50-70 Zeilen brauchen 500mb Arbeitsspeicher, das ist doch viel zu viel „Overhead“ für mein kleines Proj.

Mit Serialisierung passieren aber unvorhersehbare Dinge, deshalb ist das nicht zu empfehlen. Klar, ich hab eine LinkedList<LinkedList> lis und schreibe die mal schnell direkt in eine Datei.

Der User kann diese nicht verändern - ändert sich die Java-Version, so funkt auf einmal gar nix mehr, die Daten sind so gut wie futsch.

Ich hoffe, (viele) Anregungen geliefert zu habn. Noch eine gute Nacht. Cyborg :slight_smile:

Edit: Bei konkreten Fragen fragen …

Ad 2) Du kannst im Autostart einfach eine Bat datei legen die dir das Programm startet. Dann bist du komplett unabhängig wie du dein Programm auslieferst. Da kannst du auch einfach eine java -jar aufruf machen

Ad 3) ein 32 Bit java sollte reichen. Da es nur um die Verwaltung geht und nicht um die Filme selbst.

Ich hatte meine Filmsammlung mal als WebApp gebastelt. Irgendwann bin ich aber auf trakt.tv gestoßen, und nun nutze ich ausschließlich das. Dort habe ich meine Sammlung, meine Bewertungen, meine Watchlist. Deine Punkte wären bis auf 2. damit automatisch erfüllt, und das kostenlos.

Solltest du doch dein eigenes Programm basteln, kann ich dir für 1. meinen IMDB-Parser (Java) geben. Der holt für mich alle wichtigen Film-Infos. Der Nachteil ist wie immer, dass du diesen aktuell halten musst, da er sonst bei Layout-Änderungen kaputt gehen kann. Eine offizielle API bietet IMDB nicht.

Danke erstmal für die vielen Vorschläge.

Ein Onlineparser scheidet leider aus da beide keinen dauerhaften Zugang haben. Ist aber auch weiter wild. Beide führen entsprechende Booklets die jetzt halt lediglich digitalisiert werden sollen.
Es geht hauptsächlich um das auslesen von Metadaten aus den Files wie Auflösung, Länge und so weiter.

Zum Thema Autorun : ich hab ne schlanke Lib die mir zuverlässig den Autorun-Ordner liefert. Sollte also kein Thema sein da was rein zu schreiben.

[QUOTE=CyborgBeta]
…Ich hab in den letzten paar Tagen angefangen, eine Datenbank zu verwenden lokal, 50-70 Zeilen brauchen 500mb Arbeitsspeicher, das ist doch viel zu viel “Overhead” für mein kleines Proj.
…[/QUOTE]
Ich weiß zwar nicht welche DB du verwendest, wenn du schicke schlichte Datenbanken verwendest brauchen die bei weitem nicht so viel (z.b. DerbyDB)

@TO
zum Thema überall laufen, genau dafür eignet sich ja Java, im Gegensatz zu C, .Net,…
zum Thema Autostart, wurde ja schon nützliches wie Bat genannt (würde wunderbar klappen)
zum Thema permanent laufen, das sollte auch nicht das Problem sein (im Notfall quasi eine endlosschleife aber dabei ein sleep verwenden, ansonsten hast du CPU last von 100% auf einem Kern)
ich würde einfach einen Export Button anbieten und dann die Daten in ein CSV File exportieren, sollte ja nicht das Ding sein, einmal die Daten zu exportieren. Die generelle Datenhaltung kann man natürlich auch in einer CSV Datei machen oder in einer Datenbank,… da ist man flexibel [und am ende wird es immer irgendwie von der Platte eingelesen, egal welches Prinzip man verwendet, ansonsten ist es nach einem Neustart nicht mehr vorhanden]

Also ich Lüge doch nicht. Siehe hier:

Es besteht gerade keinerlei Verbindung. Apache for Friends.

gson ist schnell, schlank, beste Lib für json Meiner Meinung nach, kann ich nur empfehlen, wenn mit json gearbeitet werden soll. Noch nen schönen Abend.

[QUOTE=CyborgBeta]Also ich Lüge doch nicht. Siehe hier:

Es besteht gerade keinerlei Verbindung. Apache for Friends.

…[/QUOTE]

Ich sagte nicht das DU lügst, ich sagte nur, das es ordentliche schlanke schicke DBs wie DerbyDB oder auch H2 gibt, die um Welten weniger Arbeitsspeicher benötigen (Faktor 10)

Gut, ihr dürft dabei auch nicht vergessen das MySQL mit entsprechende Einstellungen auch für große heavy-load-System gebaut ist und für ein kleines Projekt wie hier angesprochen kompletter overkill ist. Kommt halt immer drauf an was man halt machen will.