An dieser Stelle soll die Entstehungsgeschichte vom OrderSprinter aus technischer Sicht vorgestellt werden. Bisher hatte ich beruflich in Java, C, C++, C# und Perl programmiert, OrderSprinter ist ein Freizeitprojekt und meine erste Erfahrung mit PHP und JavaScript.

Wer sich ebenso an ein ähnliches Projekt wagen möchte, kann hier erfahren, welche Entwicklungsphasen eine solche Software bis zur produktiven Einsatzreife durchlaufen hat, und es dann selbst besser machen... :)

1. Die Anfänge

Die ersten Codezeilen der Software entstanden schon im Dezember 2013. Der Workflow war nicht anpassbar, auch andere Konfigurationsmöglichkeiten gab es nicht. Die gesamte Logik fand auf der Serverseite statt und wurde mit PHP programmiert. Die Daten wurden serverseitig komplett aufbereitet und eine statische Seite für die Auslieferung an den Webbrowser erstellt.

Das hatte den entscheidenden Vorteil, dass langsame Endgerät eingesetzt werden konnten (die fertigen Seiten mussten lediglich gerendert werden) und keine JavaScript-Inkompatibilitäten der Browser auftreten konnten. Jede Aktion des Benutzers wurde an den Server übermittelt, der daraufhin eine neue Seite berechnete und darstellte.

Der heutige Sourcecode enthält vermutlich keine einzige Zeile der Ursprungsversion mehr.

2. Logik auf der Client-Seite

Die Bereitstellung fertiger Seiten durch den Webserver hat auch entscheidende Nachteile. Einerseits ist es ein schlechtes Design, wenn die eigentlich clientseitige Logik auf der Serverseite nachgebildet wird. Andererseits gibt es gerade bei einer Software diesen Typs viele Benutzerinteraktionen, deren Logik performanter auf der Clientseite implementiert werden kann. Mit JavaScript kann man auf der Client-Seite die Daten vom Server anfordern, innerhalb der Webseite darstellen und je nach Interaktion auf der Webseite neu aufbereiten. Zusätzlich hilft die AJAX-Technik, dynamisch nur bestimmte Teile der Webseite mit neuen Inhalten vom Server zu füllen. Das JSON-Datenformat ist wesentlich schlanker als das oft für den Datenaustausch eingesetzte XML und fand daher auch Einzug in den OrderSprinter.

Die Programmierung der Logik auf der Client-Seite erlaubte nun wesentlich dynamischere Arbeitsabläufe und damit die Anpassbarkeit, die OrderSprinter mittlerweile bietet.

3. Mobile Ansicht

Mit zunehmender Komplexität verhielt sich die Software immer unterschiedlicher auf Hardware verschiedener Hersteller. jQuery ist eine hilfreiche Bibliothek, die immer wieder auftretende Aufgaben, die meist in ähnlichen JavaScript-Codeblöcken resultieren, durch eigene Kommandos kapselt und den JavaScript-Programmierer davon erlöst, dass Rad immer wieder neu erfinden zu müssen. Zusätzlich haben sich die Macher der Herausforderung gestellt, ein Kommandoset zu entwickeln, bei dessen Benutzung das Ergebnis auf allen Systemen gleich ist. Die Nutzung von jQuery hat die weitere Entwicklung vom OrderSprinter erheblich beschleunigt.

Bis jetzt war die Software für die Benutzung auf "normalen" Desktop-PCs vorgesehen. In modernen Restaurants nutzen die Kellner jedoch mobile Endgeräte, um die Bestellung und Abrechnung digital unterstützt direkt beim Gast vornehmen zu können. Daher bestand der nächste Schritt darin, die Seiten für die Ansicht auf kleinen Mobildisplays zu optimieren. Auch hierzu gibt es eine tolle Softwarebibliothek: jQueryMobile fand Einzug in den OrderSprinter.

4. Printserver

In jedem Café erwarten die Gäste, auf Wunsch einen Kassenbon zu bekommen. Die bisherigen Versionen sahen vor, dass der Bondrucker am Gerät des Benutzers angeschlossen war und über den Windows-Treiber Html-Inhalte drucken konnte. Mit dem neuen Schwerpunkt der Benutzung auf mobilen Geräte musste ein neues Printkonzept her, da mobile Endgeräte nicht nativ dafür ausgelegt sind, Webinhalte auf lokal angeschlossenen Druckern auszugeben. Zwar gibt es Ansätze mit dem Internet Print Protokoll (IPP) und dem Android-Ansatz, den Druck über einen Google-Cloud-Dienst abzuwickeln. Alle diese Ansätze funktionieren prinzipiell, erfordern aber einen erheblichen Aufwand beim Benutzer und haben einige unschöne Eigenarten - und wurden nach ersten Versuchen wieder ausgebaut. Im Gegensatz zu einer Printimplementierung in einer App ist die Druckunterstützung in einer Webanwendung nicht trivial umsetzbar, zumindest wenn auf Knopfdruck ohne weitere Dialoge einfach nur ein Bondruck passieren soll.

Aus diesem Grund wurde der Printserver entwickelt, der in der ersten Phase noch direkt mit der Datenbank kommunizierte. Schnell stellte sich heraus, dass eine Kommunikation indirekt über den Webserver sinnvoller ist. Die Einrichtung ist einfacher und die sicherheitsrelevanten Zugangsdaten zur Datenbank müssen nur noch auf dem Webserver hinterlegt werden. Die Zugangskontrolle ist auch von in der Regel weniger technikaffinen Restaurantbetreibern durch Setzen des Printcodes im Webfrontend konfigurierbar.

Die Version 1.0 war geboren, die Veröffentlichung war im Oktober 2014.

5. Weitere Entwicklung

Die technische Grundarchitektur war mit der Version 1.0 abgeschlossen. Seit jener ersten veröffentlichten Version 1.0 hat sich OrderSprinter natürlich auch weiterhin technisch verändert und weiter entwickelt. So wurde beispielsweise das Druckprotokoll des Printservers mittlerweile auf das Bondrucker-eigene ESC/POS-Protokoll umgestellt und das Hashing von Umsatzdaten zur Verhinderung von Manipulationen eingeführt. Der Sourcecode wird mit jeder neuen Version refactored, so dass ein Blick in die Quellen erkennen lässt, in welcher Entwicklungsphase die jeweile Datei hauptsächlich geschrieben wurde...

Neben der Kernkomponente sind zwei weitere Komponenten hinzugekommen:

Mit der Gastbestellkomponente können Gäste von ihrem Platz aus mit dem eigenen Smartphone Bestellungen aufgeben.

Die Komponente Spider hilft bei der Betreuung verschiedener Instanzen aus der Ferne.
Stefan Pichel, Januar 2019