Prepper Inventory Tagebuch eines Entwicklers Teil 1

Das Tagebuch eines Entwicklers startet, wie angekündigt, mit Prepper Inventory, in seine erste Runde. In diesem Artikel werde ich die allgemeinen Grundvoraussetzungen, sowie den sehr groben Funktionsumfang des Programms definieren und meine Art und Weise beschreiben wie ich zu den Schlüssen komme die ich ziehe.

Worum geht es?

Bevor wir, in diesem Fall, auch nur die erste Zeile Code schreiben, benötigen wir einen ungefähren Plan von dem was wir eigentlich schreiben wollen. Bei mir ist es so, dass ein solcher Plan meistens Sonntags Abends geformt wird, wenn ich am Morgen mal wieder zu lange geschlafen hatte und Abends einfach keine Ruhe finde. Wenn die Gedanken so vor sich hin wandern, kommen einem die besten Ideen. Natürlich. Wo auch sonst. Der Ort der einem sonst die besten Ideen vermittelte, die Toilette nämlich, wird heutzutage von Smartphones dominiert. Wie soll der Geist auf Abwege gehen wenn man Candy Crush zocken kann statt die Inhaltsstoffe und Anwendungsinformationen von Balea Creme und Haarspray zu lesen?

Prepper Inventory ist nun gedanklich bereits an einem Punkt angelangt, an dem ich theoretisch los programmieren könnte. Theoretisch. Praktisch fehlen einige Vorbereitungen. Dazu jedoch später mehr.

 

Was ist Prepper Inventory?

Im Endeffekt handelt es sich bei Prepper Inventory um ein Verwaltungs- und Organisationsprogramm für Prepper (Ach wirklich…) und Outdoorinteressierte. Der Grundgedanke war die Organisation und Inventarisierung meiner aktuellen Ausrüstung. Prepper Inventory hätte man so wie es aktuell geplant ist einfach in eine Access Datenbank  oder Excel packen können. Da ich aber noch einige Zusatzoptionen wünsche, wird dieses Programm eine enormen Aufwand mit sich bringen, welchen ich alleine in meiner Freizeit zu bewältigen Gedenke. Ich habe bereits nach einigen Prepper-Tools oder Inventarisierungslösungen geforscht und sah auch, dass es einige engagierte Projekte gab. Diese wurden aber nie zu Ende gebracht. Es kann durchaus sein, dass auch Prepper Inventory dieses Problem haben könnte. Daher veröffentliche ich regelmäßig den Sourcecode, sodass sich Interessierte selber ein Prepper Inventory fertig stellen, oder aber die Idee mit aufnehmen können. Vergesst bitte nur nicht mich zu erwähnen Zwinkerndes Smiley

Fakt ist, dass ich den ganzen Aufwand nicht umsonst betreiben möchte und euch daran teilhaben lassen möchte. Wenn ihr das Tool dann nutzen könnt, oder ihr aus dem Tagebuch eines Entwicklers – Prepper Inventory etwas mitnehmen könnt, dann ist mein Ziel bereits erreicht.

 

Wie sehen die Voraussetzungen aus?

Dabei meine ich hauptsächlich die Zielgruppe.

Der normale Bushcrafter und oder Prepper wird wenig Erfahrung mit dem Programmieren haben. Er wird in einem Alter wischen 25 und 65+ sein und das Betriebssystem Windows verwenden. Sollte er Linux verwenden, so sollte er in der Lage sein eine .net Emulation wie W.I.N.E zu installieren und zu verwenden. MAC User erwarte ich weniger. Barrierefreiheit durch die Verwendung des Browsers ist aufgrund der Sicherheitsbestimmungen keine Alternative. Im Allgemeinen gehe ich davon aus, dass die Sicherheit und Anonymität der Prepper eine große Rolle spielen wird, wodurch ich auch auf einen Auto-Updater verzichten werde. Es soll keine Netzwerkverbindung erforderlich sein. Unglücklicherweise schränkt dies auch massiv meine Speichermöglichkeiten ein.

Es gibt immer Ausnahmen, aber auf den Großteil der Prepper wird dies sicherlich zutreffen.

Prepper Inventory (Ich muss mir noch einen ordentlichen Namen ausdenken) – Was soll es können?

Wie bereits erwähnt, hätte man das ganze sicher und einfach in eine Access Datenbank schreiben können. Schnell kam jedoch meine Anforderung dazu, Ablaufdaten der eingelagerten Lebensmittel mit aufzuschreiben. Kurz darauf dachte ich mir, dass es doch nett wäre, wenn eine Erinnerung am Rechner aufklappen würde, wenn sich das Verbrauchs- oder Verfallsdatum einer Lebensmittelkonserve nähert. Diese Zeitspanne sollte natürlich individuell bearbeitbar sein, jedoch auch einen allgemeinen Zeitpunkt haben.

Prepper Inventory – Erinnerungsfunktion

Die Erinnerungsfunktion sollte so aufgebaut sein, dass ich einen allgemeinen Erinnerungszeitraum für Lebensmittel einstellen kann. Als Beispiel nehmen wir mal 14 Tage. Wenn ich nun aber in einem Schwung mehrere Kisten Ravioli gekauft habe, ist die Chance hoch, dass diese das selbe Ablaufdatum haben. Nun möchte ich aber nicht 14 Tage Ravioli essen nur um diese nicht ablaufen zu lassen. Deshalb gebe ich für diese Lebensmittel einen Erinnerungszeitraum von 28 Tagen an.

Name Ravioli
Anzahl 12
Kategorie Lebensmittel
Art Konserve
Ablaufdatum 31.02.2016
Erinnerungszeitraum 28 Tage

 

Natürlich könnte man hier noch einen Automatismus einbauen wie “Tage = Anzahl*2” oder so etwas, aber das macht spätestens bei größeren Stückzahlen keinen Sinn mehr. Das Ablaufdatum von Kartoffeln möchte ich so nicht berechnen müssen. Weitere denkbare Optionen wären: Wann habe ich das letzte mal mein Kohlenstoffmesser gereinigt? Wie viel Brennstoff habe ich noch in Haus? Welche Nährwerte habe ich in meinem Notvorrat? Wie lange hält meine Familie mit diesem Vorrat durch? Habe ich alles was das BBK vorschlägt? Wie viel Geld habe ich im letzten Monat investiert?

Prepper Inventory – Kategorien

Die Kategorien machen mir die meisten Sorgen. Der Endanwender soll in der Lage sein sich selbstständig Kategorien mit eigenen Feldern aufbauen zu können.

Der Anwender soll selbstständig eine Kategorie anlegen können. Anschließend hat er eine Auswahl an s.g. Controlls, welche er zur Ansicht und Bearbeitung hinzufügen kann. Dabei sollen folgende Optionen möglich sein:

Name Datentyp
Textbox Text
Textfeld Text
Nummernfeld mit Pfeilen Dezimal
Datumsfeld mit Kalender Datetime
Checkbox bool
Bild Text – Dateipfad

 

An dieser Stelle werden einige Probleme auftreten, welche mich zu meinem nächsten Punkt führen.

Prepper Inventory – Speicherung

Die Speicherung der Werte ist eine knifflige Sache. Dazu müssen wir uns erst einmal Gedanken machen welche Optionen wir überhaupt zur Wahl haben.

Da es sich bei Prepper Inventory um ein Datenbankprogramm handeln wird, ist es sinnvoll dazu auch eine zu verwenden. Wie bereits erwähnt, können wir aber nicht einfach einen Datenbankserver aufsetzen und fertig. Also muss eine lokale Lösung her.

Dabei bieten sich folgende Möglichkeiten der Speicherung an:

  1. Eine Lokale Datenbank (Access, SQLITE, Oracle)
  2. Eine lokale Datenbankinstallation
  3. XML
  4. JSON
  5. CSV

Nun haben wir ein enormes Problem. Wir benötigen eine Struktur, welche sich sehr einfach erweitern und anpassen lässt, gleichzeitig aber auch Abfragen schnell durchführen kann und ggf. die ein oder andere Operation selbstständig durchführen kann. Außerdem muss es Flexibel auf Änderungen reagieren können.

Schmeißen wir also erst einmal das Unnötige raus.

  • CSV – ist eine sehr simple Tabellenstruktur in Textformat. Für unsere Zwecke vollkommen ungeeignet, da die Fehleranfälligkeit bei Suchen einfach nur Mist ist. Wenn ich beispielsweise nach “Zange” suche, erwarte ich, dass alle Werkzeuge die Zange heißen angezeigt werden, nicht jedoch die Feuerzangenbowle, die ich seit letzten Halloween in der Küche stehen habe.´
  • JSON – eine etwas erweiterte .ini Datei. An und für sich mit XML zu vergleichen, hat jedoch nicht die stabilste Struktur. Parser haben es immer etwas schwierig mit JSON. Die Datenkraken unserer Regierung haben eine modifizierte Version von JSON im Einsatz, jedoch fehlt mir dazu die Vorgehensweise. Des Weiteren müsste die gesamte Abfragearchitektur fest in den Code des Programms eingefügt werden, was die spätere Anpassbarkeit enorm beeinträchtigt.
  • Eine lokale Datenbankinstallation – Wie bereits erwähnt soll keine Verbindung nach außen vorgenommen werden. Das bedeutet, dass ich die Installationsdatei des Datenbankservers mit in den Download packen muss. Ein Programm, welches vom Sourcecode wenige Megabyte groß ist, soll also mit einer mehreren Gigabyte großen Installation einer Datenbank belastet werden? Was ist mit den Ports? Außerdem wird die Windows Firewall, sowie jegliches Virenschutzprogramm, welches mehr als 2 Pfennig wert ist, sofort rummeckern. Zusätzlich würden wir mit einer lokalen Installation einige Türen für “Cracker” geöffnet.

Somit bleiben nur noch XML und SQLITE (Oder ähnliche). SQLITE ist ein “Quasi SQL”, welches durch eine eigene .exe Datei Operationen simultan ausführen kann. XML bietet den Vorteil, dass es sehr einfach anpassbar ist und auch mit unterschiedlichen Datentypen zurecht kommt. Das Problem bei SQLITE ist jedoch, dass es bei größeren Datenmengen durchaus zu Verzögerungen kommen kann. Gerade bei ausgelasteten oder etwas schwachbrüstigen Systemen. Wichtig ist auch, dass das Speichersystem eine Mehrfachverknüpfung zulässt. So kann beispielsweise ein Messer sowohl ein Werkzeug und eine Nahkampfwaffe sein.

Das Layout

Natürlich kann man am Anfang noch nicht genau sagen, wie genau das Layout später aussehen soll. Dazu müsste man zunächst den vollen Funktionsumfang kennen. Da sich dies meist aber im Laufe der Entwicklung herausstellt und häufig noch weitere Anforderungen des “Kunden” (in dem Fall die Community und ich selbst) mit einbringen und man aufgrund bereits geschriebener Methoden häufig eine Wiederverwendbarkeit entdeckt, kommen immer wieder neue Steuerelemente und Forms hinzu. Mein geplantes Layout hat jetzt auf der linken Seite ein Treeview, ähnlich wie beim Windows Explorer. Mittig ist ein DataGridView zum Anzeigen der Tabellen geplant. Im oberen Rand wird eine Such- und Filterfunktion eingefügt.

Verhalten

Beim Start von Prepper Inventory soll eine Übersicht der Kategorien angezeigt werden. Klickt man auf eine von diesen, so erscheint im DataGridView, also der Haupttabelle, eine Auflistung der darin enthaltenden Gegenstände. Wählt man eines von diesen aus, oder verwendet die Suchfunktion und wählt dann einen dieser Gegenstände aus, so öffnet sich ein neues Fenster in dem die Informationen inklusive Bild (Sofern eingetragen) für diesen Gegenstand hinterlegt sind. Dies könnte man durch eine rechts angebrachte Seitenleiste ebenfalls realisieren. Die Bearbeitung und Erstellung der Kategorien soll in einem separatem Fenster erfolgen, welche über die Menüleiste auf der Oberseite des Programms geöffnet wird.

 

Im nächsten Teil

Im nächsten Teil gehen wir ein wenig intensiver auf die Problematik der Speicherung der Dateien ein. Wieso gibt es Probleme mit den Controls und wie genau soll die Speicherung der Daten aussehen. Wie sollen sie ausgelesen werden?

Wenn jemand eine bessere Idee für einen Namen hat als “Prepper Inventory”, so möge er ihn mir bitte mitteilen wp-monalisa icon Prepper Inventory


-- Download Prepper Inventory Tagebuch eines Entwicklers Teil 1 als PDF --


2 comments for “Prepper Inventory Tagebuch eines Entwicklers Teil 1

  1. 2016, Januar 15. at 10:56

    Guten Morgen,
    ein spannendes Thema mit dem ich mich bisher noch nicht wirklich auseinandergesetzt habe. Mein Prepper Inventory ist -mehr oder weniger- in meinem Kopf, und da ist es manchmal ziemlich voll drin. Von daher finde ich das eine tolle Idee!
    Vor allem die Vorratskisten in meinem Keller sind immer aus den Augen und damit aus meinem Sinn. Die müsste ich wirklich mal mit Haltbarkeitsdatum erfassen.
    Das Programm könnte man noch beliebig erweitern (Achtung Laien-Brainstorming): Eine passende App, mit Barcode-Scanfunktion, automatisierten Einkaufserinnerungen wenn du den Supermarkt betrittst, passwortgesicherte Bereiche welche die geheimen GPS-Koordinaten deiner Notrationen im Wald anzeigen…

    Also wenns mal einen Prototyp gibt, ich bin dein Beta-Tester :-)

    • 2016, Januar 15. at 13:56

      Hallo Aaron, danke für dein Angebot. Ich lasse es dich wissen, sobald ich etwas brauchbares gebastelt habe. Sollte dann aber auch hier stehen :)
      Die Idee mit dem barcode hatte ich selbst auch schon. Allerdings sollte meiner noch ein wenig weiter gehen und auch die Inhaltsstoffe auslesen, damit ich automatisch berechnen kann ob die Energiemenge der Vorräte für 14 Tage und der angegebenen Personenmenge den Vorschlägen des BBK entsprechen. Das ist allerdings noch sehr weit entfernte Zukunftsmusik.
      Die Einkaufserinnerung und die GPS Koordinaten könnte man kombinieren. Sobald du in einem als „Supermarkt“ definierten Bereich bist, könnte es die Datenbank fragen ob du noch etwas brauchst. Da habe ich so noch nicht dran gedacht. Mal schauen ob ich da was kostenloses für finde. :)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.