Der erste Prototyp

Nach gut zwei Wochen ist der erste Prototyp mit der grundlegenden Funktionalität fertig programmiert und wird mittlerweile in der Bäckerei getestet.

Aufbau

Die einzelnen Menüs sind über Tabs gelöst. Nach dem Start der Applikation öffnet sich die Hauptseite und die Kundenverwaltung ist standardmäßig aktiv.

Kunden können bereits angelegt, bearbeitet oder gelöscht werden.

Analog verhält es sich mit den Produkten

und natürlich auch mit den zugehörigen Kategorien

Auch das Hinzufügen von Zutaten und das Erstellen von neuen Teigen samt der Rezeptur ist bereits implementiert

Auch können bereits Bestellungen für einen bestimmten Produktionstag angelegt werden

Im nächsten Schritt folgt die Implementierung des Produktion-Moduls.

JavaFX

Für die Erstellung der GUI wird das JavaFX Framework verwendet. Bei JavaFX handelt es sich um ein modernes GUI Framework, welches auch die Möglichkeit bietet GUIs durch eine deklarative Beschreibung in FXML (XML ähnlich) zu erstellen. Auch existiert mit dem Scene Builder (https://gluonhq.com/products/scene-builder/) ein nützlicher WYSIWYG Editor zur Erstellung.

Durch die Verwendung des MVC Patterns wird eine höhere Kohäsion und eine lose Kopplung der Komponenten erreicht. So kann die GUI Form unabhängig vom auszuführenden Code entwickelt werden. Auch eine spätere Anpassung oder ein Austausch der GUI ist so sehr einfach möglich, ohne dass vorhandener Code stark angepasst werden muss (Open-Closed Prinzip).

Zusätzliche Infos zu JavaFX und MVC: http://blog.axxg.de/model-view-controller-mit-javafx/

Einbindung von JavaFX in ein Gradle Projekt

Zur Einbindung von JavaFX in das bestehende Gradle Projekt wird die build.gradle entsprechend angepasst.

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

sowie

javafx {
    modules = [ 'javafx.controls', 'javafx.graphics', 'javafx.fxml']
    version = '13'
}

und als Dependency

dependencies {   
    ... 
    compile group: 'org.controlsfx', name: 'controlsfx', version: '11.0.1'
}

Damit ein erstelltes FatJar später auf allen drei Plattformen (Windows, Mac, Linux) verwendet werden kann muss noch folgendes hinzugefügt werden:

Bei den dependencies:

dependencies {
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:win"
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:linux"
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:mac"
}

sowie

jar {
    manifest {
        attributes 'Main-Class': 'de.cod3cruncher.Launcher'
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

Verwendete Technologien

Für die Umsetzung der Software werden folgende Technologien verwendet

Programmiersprache

Die Programmierung erfolgt in Java (OpenJDK Corretto-11.06 LTS) und für die GUI kommt JavaFX in der Version 13 zum Einsatz.

IDE

Als Entwicklungsumgebung kommt IntelliJ in der Ultimate Edition zum Einsatz.

Versionsverwaltung

Die Versionsverwaltung erfolgt mittels Git (gehostet auf Github). Als Desktop Client wird GitKraken eingesetzt

Build-Tool

Es handelt sich um ein Gradle Projekt.

Datenbank

Als Datenbank wird eine SQLite3 Datenbank verwendet, welche mittels sqlite-jdbc v 3..30.1 angebunden wird.

Zusätzlich

  • TestDrivenDevelopment mittels JUnit in der Version 4.12
  • Google guava in der Version 28.2
  • PDF Generierung mittels itexpdf
  • apache.commons

Datenhaltung: Wie sollen die Daten gespeichert werden?

Zuerst soll die Entscheidung bezüglich der verwendeten Datenbanktechnologie getroffen werden.

Für die Wahl wurden nur relationale Datenbanksysteme in Betracht gezogen. Da die Anwendung lediglich von einem einzelnen Benutzer lokal verwendet wird, erfolgt die Datenhaltung durch eine SQLite 3 Datenbank.

Durch die Verwendung von SQLite wird kein Server benötigt.

Die Datenbankstruktur

Folgende Tabellen werden aktuell verwendet:

  • address: Repräsentiert die Adresse eines Kunden
  • customer: Kundendaten, jeder Kunde besitzt eine eindeutige ID (PK)
  • categories: Speicherung der Kategorien, besteht lediglich aus einem (unique) Namen und einer ID.
  • products: Darstellung der Produkte
  • product_categories: Zuordnung der Produkte und Kategorien
  • ingredients: Enthält die Zutaten
  • dough: repräsentiert die Teige mittels einer eindeutigen ID und einem Namen
  • dough_ingredients: Für jede Zutat eines Teiges wird hier ein Eintrag vorgenommen
  • orders: enthält alle Bestellungen
  • order_item: enthält für jede Bestellung die einzelnen Posten

Der Bäckerei-Manager: Die Idee

Für eine kleine Bäckerei soll eine Verwaltungssoftware auf Basis von Java programmiert werden.

Die Funktionalität

Mit Hilfe der Software soll die Produktion einer kleinen Bäckerei verwaltet werden.

Funktionen:

  • Verwaltung eines Kundenstamms: Anlegen, Bearbeiten, Löschen
  • Verwaltung von Produkten
  • Erstellung eines Kategoriesystems für die Produkte
  • Erfassen der verschiedenen Teigen samt ihrer Rezepte
  • Erfassen von Bestellungen der Kunden
  • Berechnung der benötigten Teigmenge für einen Produktionstag
  • Berechnung der Zutatenmenge für die benötigte Teigmenge
  • Statistiken: Meistverkaufte Produkte, ….

Kunden

Die Software verwaltet einen Kundenstamm. Entsprechend können Kunden samt ihrer Daten (Name, Adresse, ….) angelegt, bearbeitet und auch wieder gelöscht werden. Auch müssen Kunden anhand bestimmter Suchkriterien, wie zum Beispiel ihrem Namen oder Wohnort, gefiltert werden können.

Produkte und Kategorien

Die verfügbare Produktpalette der Bäckerei muss verwaltet werden. Dazu können neue Produkte angelegt und bestehende Produkte bearbeitet (inklusive Löschen) werden.

Ein Produkt muss dabei mindestens einer Kategorie zugeordnet werden.

Auch besteht jedes Produkt aus einem Teig und weist ein gewisses Teiggewicht auf, wodurch später eine Produktionsmenge bestimmt werden kann.

Teig

Die verschiedenen Teige werden samt ihrer Rezepte abgebildet. Dadurch kann für bestellte Produkte die benötigte Teigmenge genau und automatisiert berechnet werden.

Bestellung und Produktion

Für einen Produktionstag können Bestellungen der Kunden angelegt werden. Basierend auf den Bestellungen wird eine Produktionsliste für den jeweiligen Produktionstag berechnet. Für jeden Teig werden widerum die entsprechenden Zutatenverhältnisse bestimmt. Diese Produktionsliste muss als PDF erstellt werden.

Statistik

Die Software soll ebenfalls eine Statistik-Komponente enthalten. Damit lassen sich später über einen gewissen Zeitraum bestimmte Größen abfragen: Welche Produkte verkaufen sich am Besten? etc.

The Magic Bean

Oder wie du nie mehr Entscheidungsprobleme hast…

Wer kennt sie nicht, die Probleme beim Treffen von wichtigen Entscheidungen. Es wird alles gründlich abgewogen, fünfmal überdacht und am Ende ist man sich immer noch unsicher. Dies gehört nun der Vergangenheit an, denn ab jetzt kann man auf die absoluten Weisheiten von Mr. Bean vertrauen!

Egal um welches Thema es sich handelt, Mr. Bean hat trifft garantiert die richtige Entscheidung für dich – und ganz ehrlich, wer würde nicht Mr. Bean blind vertrauen?

Fertig sieht das ganze dann so aus:

Die Idee:

Inspiriert durch Dough Heffernan´s Mentalo-Man kam ich auf die Idee einen Magic-Bean zu konstruieren. Das Prinzip dahinter ist ganz einfach: Man stellt Mr. Bean eine Ja/Nein Frage und dieser trifft anschließend eine zufallsbasierte (ähhh natürlich wohl überlegte *G*) Entscheidung. Das Ergebnis wird durch den Zeiger vorne optisch signalisiert, sowie durch eine entsprechende Sound-Ausgabe unterstützt.

Was wird benötigt?

Die Verdrahtung

Das ganze wird folgendermaßen zusammengelötet.

Fertig zusammengebaut

Fertig zusammengebaut sieht das ganze dann so aus.

Die Programmierung

Den Code gibt es wieder unter: https://github.com/cod3cruncher/magic_bean

Für das MP3 Modul wird die DFRobotDFPlayerMini Library verwendet (https://github.com/DFRobot/DFRobotDFPlayerMini)

Da es durch die Verwendung von Software Serial einen Konflikt zwischen der Standard Servo Library und dem MP3 Modul gibt, wird eine eigene Implementierung zur Steuerung des Servos verwendet:

void servoPosition(int pulsemicros) {
	for (int i = 0; i < VALUE_FOR_180_DEGREE_SERVO; i++) {
		digitalWrite(SERVO_PIN, HIGH);
		delayMicroseconds(pulsemicros);
		digitalWrite(SERVO_PIN, LOW);
		delay(25);
	}
}

Das ganze Projekt

Hello world!

Willkommen auf meiner Seite.
Diese Seite soll vor allem für mich als Art Notizblock dienen.
Daher findet man hier kleine How-tos und vor allem Programmierprojekte (gerne auch mit etwas Bastelei in Kombination mit Mikrocontrollern wie zum Beispiel dem Arduino).

Memo an mich selbst: Jetzt nur noch dran bleiben! 😉

Tea-Maker: IV IDLE Sounds

Die ersten Tea-Maker wurden an Weihnachten verschenkt und von den Beschenkten ausgiebig auf Herz und Nieren geprüft. Natürlich dauerte es nicht sehr lange und es wurde um weitere Features gebeten.

Die aktuelle Version signalisiert das Ende der Brühzeit akkustisch durch einen Summer. Dieser Ton erklingt jedoch nur ein einziges mal, wenn der Teebeutel aus der Tasse gezogen wird. In der aktuellen Version ertönt das akkustische Signal alle x Sekunden, wobei dieses Intervall über ein Optionsmenü eingestellt werden kann.

Auch lassen sich über dieses Menü die Töne allgemein abstellen.

Tea-Maker: III Smaller, Smarter, Better

Der erste Prototyp erfüllte zwar seinen Zweck, wies jedoch im tatsächlichen Einsatz zu viele Schwächen auf. Vor allem die recht großen Gehäuseabmessungen erschwerten die Suche nach einem geeigneten Aufstellort erheblich. Und auch die Bedienung selbst war nicht gerade benutzerfreundlich: zu viele Knöpfe, zu viele Einstellräder.

Der Tea-Maker muss daher geschrumpft und auf das Nötigste reduziert werden.

Die Optimierungen

  1. Statt einem relativ großen Arduino wird nun ein Arduino Nano verwendet. Aus Preisgründen kommt jedoch statt eines Originals ein China Klon zum Einsatz.
  2. Die Buttons werden auf zwei reduziert: Einen für Start/Stop und einen für das Options Menü
  3. Auch die Verkabelung erfolgt jetzt über eine selbstgelötete Platine auf einer Rasterlochplatine.
  4. Ein einfacher Piezo-Buzzer zeigt nun auch akkustisch das Ende des Brühvorgangs an

Die Einkaufsliste

Neben den bereits beschriebenen Komponenten der ersten Version (siehehttps://cod3cruncher.de/?p=19) benötigen wir noch:

Verdrahtung der Komponenten

Die Komponenten werden wie folgt skizziert miteinander verbunden.

Das neue Gehäuse

Der Code

Wie zuvor beschrieben wird mittlerweile als IDE die Kombination aus Visual Studio Code und PlatformIO verwendet.

Da der Code mittlerweile doch ganz schön angewachsen ist, wurde ein umfangreiches Refactoring durchgeführt und der Code aufgeteilt (statt zuvor lediglich eine einzige .ino Datei).

Das zugehörige Repo für die neue Version gibts hier: https://github.com/cod3cruncher/tea_maker_nano

Und so sieht das ganze dann in Action aus: