Mittlerweile wurden weitere Features implementiert und der grundlegende Funktionsumfang ist gegeben.
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.
![](https://cod3cruncher.de/wp-content/uploads/2020/03/bk_manager_customer.png)
Kunden können bereits angelegt, bearbeitet oder gelöscht werden.
![](https://cod3cruncher.de/wp-content/uploads/2020/03/Screenshot-2020-03-05-at-19.36.07-1-1024x768.png)
Analog verhält es sich mit den Produkten
![](https://cod3cruncher.de/wp-content/uploads/2020/03/bk_manager_products-1024x571.png)
und natürlich auch mit den zugehörigen Kategorien
![](https://cod3cruncher.de/wp-content/uploads/2020/03/bk_manager_categories-1024x648.png)
Auch das Hinzufügen von Zutaten und das Erstellen von neuen Teigen samt der Rezeptur ist bereits implementiert
![](https://cod3cruncher.de/wp-content/uploads/2020/03/bk_manager_dough-1024x553.png)
![](https://cod3cruncher.de/wp-content/uploads/2020/03/bk_manager_ingredients-1024x702.png)
Auch können bereits Bestellungen für einen bestimmten Produktionstag angelegt werden
![](https://cod3cruncher.de/wp-content/uploads/2020/03/bk_manager_order-1024x591.png)
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
![](https://cod3cruncher.de/wp-content/uploads/2020/03/bk_manager_database-1024x666.png)
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:
![](https://cod3cruncher.de/wp-content/uploads/2020/03/P1010325-scaled.jpg)
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?
- Ein paar Holzplatten für das Gehäuse (oder alternativ dicker Karton o.ä)
- Ein Microservo https://amzn.to/2ImWWuu
- Eine Lochrasterplatine https://amzn.to/3axB23w
- Ein Kippschalter https://amzn.to/3as05VV
- Ein Push-Button https://amzn.to/2TEiJDg
- Ein Arduino Nano (Klon) https://amzn.to/3ayH5Fl
- Ein Mini MP3 Player Modul samt SD Karte https://amzn.to/2ImXC30
- Ein 3 Watt Lautsprecher https://amzn.to/2wwaHo5
- Eine Lautsprecherabdeckung https://amzn.to/38p2tv5
- Ein Batteriehalter https://amzn.to/39mqJ2h
- Widerstände https://amzn.to/38qKzYI
- Eine Mr. Bean Figur https://amzn.to/38s9Ulk
- Lötkolben, Lötzinn, Werkzeug, etc.
Die Verdrahtung
Das ganze wird folgendermaßen zusammengelötet.
![](https://cod3cruncher.de/wp-content/uploads/2020/03/magic_bean_wir-1024x759.png)
Fertig zusammengebaut
Fertig zusammengebaut sieht das ganze dann so aus.
![](https://cod3cruncher.de/wp-content/uploads/2020/03/20191211_160031-743x1024.jpg)
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
- 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.
- Die Buttons werden auf zwei reduziert: Einen für Start/Stop und einen für das Options Menü
- Auch die Verkabelung erfolgt jetzt über eine selbstgelötete Platine auf einer Rasterlochplatine.
- 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:
- einen Piezo-Buzzer https://amzn.to/2xeQweH
- Lochrasterplatine https://amzn.to/2VYmczp
Verdrahtung der Komponenten
Die Komponenten werden wie folgt skizziert miteinander verbunden.
![](https://cod3cruncher.de/wp-content/uploads/2020/03/tea_maker_nano_wire.png)
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: