Um Go kennenzulernen war das erste Projekt das Neuschreiben unserer Optimierungsengine von C nach Go. Wir suchten nach einem Weg diese Engine leichter in Softwarelösungen zu integrieren oder als Microservice zur Verfügung zu stellen. Dazu schien Go bestens geeignet zu sein. Da die C-Version optimal schnell läuft, waren wir bereit in Sachen Geschwindigkeit Einbußen zu akzeptieren (ein Geschwindigkeitsverlust von einem Faktor 2 gegenüber der C-Version wäre akzeptabel gewesen). Überraschenderweise läuft die in Go entwickelte Version fast genauso schnell! Mehr über Go? Siehe Blog: Warum Go?
Fiber hat Ähnlichkeiten zu Express.js, ist aber in Go implementiert. Es ist sehr performant, denn es verwendet FastHTTP, eine der schnellsten HTTP Implentierungen in Go. Fiber ist flexibel, schnell und zuverlässig, es bietet einen sehr guten Router, vielseite "Middleware"-Komponenten und ist gut an eigene Wünsche anzupassen. Es ist nicht nur leicht zu erlernen, sondern es erwies sich auch als sehr gut dazu geeignet bestehende Projekte auf Fiber umzurüsten.
Bereits seit den späten 80ern ist PostgreSQL besonders nah an dem Standard für relationale Datenbanken. Besser gesagt definiert PostgreSQL den Standard für relationionale Datenbanksysteme. Vermutlich die beste OpenSource-Datenbank der Welt.
SQLite steckt in praktisch jedem Betriebsystem, Mobiltelefon, Webbrowser ... Es gibt SQLite seit 20 Jahren und fand hier zunächst keine Beachtung: zu klein, nur Spielkram. Schwer getäuscht! SQLite ist super! Nach dem Vortrag von David Crawshaw SQLite and Go fand SQLite unsere Aufmerksamkeit und wird nun bei fast allen Prototypen und gelegentlich sogar in Produktivsystemen verwendet. In den 2 Jahren seitdem wir SQLite einsetzen, gab es nie ein Problem mit SQLite - es wird sogar im Flugkontrollsystem des Airbusses eingesetzt. Der Name "SQLite" suggeriert unserer Meinung nach weniger als vorhanden ist und wird der wirklichen Qualität und Leistungsfähigkeit nicht gerecht.
Und macht genau das. Es bietet eine einheitliche Abstraktionsschicht für diverse Datenbanken, z.B. PostgreSQL, SQLite, MySQL, SQLServer und sogar MongoDB. Dabei ist MongoDB gar keine relationale Datenbank! Mit Upper.io/db kann man auf datenbankspezifischen SQL-Code weitestgehend verzichten, welches den Wechsel der verwendeten Datenbank sehr erleichtert. Es ist leicht zu benutzen und man kämpft nicht gegen das Framework, wie es bei anderen ORMs schon mal passieren kann. Was ist ein ORM? Siehe Blog: ORM. Upper.io/db macht es uns leicht, mit der selben Code-Basis sowohl PostgreSQL und SQLite zu verwenden. Typischerweise SQLite während der Entwicklung und kleinen Projekten und PostgreSQL in der Produktions-Umgebung oder wenn das Projekt über die Möglichkeiten von SQLite hinaus skalieren muss.
Es ist eine Architektur, wie verteilte Anwendungen über HTTP/HTTPS Daten austauschen können. Gut standardisiert, einfach, überall verfügbar. Wenn die Anwendungen im Webbrowser Daten vom Server anfragen, dann geschieht das meistens über die REST-API. Die Daten werden typischerweise im Format JSON ausgeliefert und können dadurch besonders leicht mit Javascript verarbeitet und im Webbrowser dargestellt werden.
Das JSON Web Token ist ein kurzer, teilweise verschlüsselter Text, welcher es ermöglicht schnell zu überprüfen, ob ein Benutzer für einen Zugriff auf eine Funktion berechtigt ist. Sobald ein Benutzer authentifiziert wurde, erhält er für seine Session ein zeitlich begrenzt gültiges Token. Die verschlüsselten Anteile können nur serverseitig ausgelesen werden und dort dann entsprechend der Zugriff freigeschaltet werden.
Bei Vue.js ist es besonders gut gelungen, die Möglichkeiten zu schaffen eigene Komponenten zu entwickeln und sie miteinander oder auch mit Komponenten anderer Anbieter zu kombinieren. Die Entwicklung von Webanwendungen fühlt sich mit Vue.js richtig gut an und man kommt schnell zu guten Ergebnissen. Der Vue-Router ermöglicht die einfache Navigation zwischen den Teilen der Applikation und das interne Zustands- und Datenmanagement übernimmt Vuex, welches sich am Flux-Pattern orientiert.
Bei der Entwicklung von Webanwendungen kommt man an Javascript kaum vorbei. Javascript hat allerdings auch Schwächen, welche besonders bei umfangreichen Projekten sichtbar werden. Da hilft Typescript, mit Typescript wird Javascript um statische Datentypen erweitert und es liefert dabei großartige Werkzeuge mit, die den Umgang mit hunderten von Code-Dateien und tausenden von Code-Zeilen sehr erleichtern. Inzwischen ist Typescript sehr beliebt und wird u.a. seit Angular 2.0 bei Google eingesetzt und auch die neue Version von Vue.js - 3.0 - wird mit Typescript entwickelt.
Eigentlich sollte man durch die Verwendung von Klassen den Html-Code von Style-Elementen weitestgehend befreien. Hinter einer Klasse verbergen sich normalerweise gleichzeitig viele einzelne Stylingmerkmale. Bei Tailwind CSS geht man einen anderen Weg: Viele kleine, sehr gut strukturierte CSS-Klassen lassen sich in HTML-Elementen elegant kombinieren. Übrigens, diese Webseite verwendet Tailwind CSS.
Mit den drei genannten Tabellenkomponenten (Daten, Pivot und Baum) lassen sich bereits wesentliche Aufgaben einer Webapplikation bewältigen. Dazu gibt es über 50 weitere fertige Komponenten für die Gestaltung von Bedienoberflächen und Formularen sowie dutzende dynamische Diagramme und Geschäftsgrafiken.
Gridsome ist ein sogenanntes JAMstack Framework - weitere Beispiele sind Gatsby, Next.js, Nuxt.js und VuePress. Es werden dabei mehrere Webtechnologien kombiniert um besonders performante Webseiten zu erstellen. Im Falle von Gridsome entsteht eine Vue-Applikation, die nach einer besonders kurzen Startzeit z.B. schrittweise im Hintergrund weitere Teile nachlädt und dadurch bei der Navigation zwischen den Seiten kaum auf den Webserver zurückgreifen muss. Eine statische Webseite lässt sich leicht und überall hosten und erfordert z.B. kein Content-Management-System. Übrigens, diese Webseite wurde mit Gridsome erstellt.