Nuxt ====== Einleitung ---------- **Was ist Nuxt?** Nuxt [NuxtDokumentation_] ist ein leistungsstarkes Web-Framework, das auf Vue.js basiert und es Entwicklerinnen und Entwicklern ermöglicht, einfach und schnell ansprechende Single-Page-Applikationen zu erstellen. Im Vergleich zu anderen Frameworks wie Angular oder React zeichnet sich Nuxt durch seine einfache Handhabung und die hohe Flexibilität aus. Eine der Stärken von Nuxt liegt in seinem routing system, das automatisch generiert wird und eine SEO-freundliche URL-Struktur bietet. Darüber hinaus bietet Nuxt zahlreiche Erweiterungen und Plugins, die die Entwicklung von Webanwendungen noch weiter vereinfachen. Nuxt eignet sich besonders gut für kleinere bis mittlere Webprojekte, bei denen es darum geht, schnell eine benutzerfreundliche und performante Website zu erstellen. Auch für Entwickler, die bereits mit Vue.js vertraut sind, bietet sich Nuxt als Framework an, da es die Entwicklung von Webanwendungen deutlich beschleunigt und Code-Wiederholungen minimiert. In dieser Dokumentation werden wir einen Einblick in die Entwicklung eines Software-Projekts geben, das mit Hilfe von Nuxt umgesetzt wurde. Wir werden auf die Vor- und Nachteile von Nuxt im Vergleich zu anderen Sprachen eingehen und aufzeigen, für welche Art von Projekten Nuxt besonders gut geeignet ist. **Unser Projekt:** Ziel unseres Projektes war die Erstellung einer kleinen Applikation, mithilfe derer eine Fahrradtour geplant werden kann. Dabei sollten NutzerInnen eine Liste an Städten angeben können, die sie im Laufe der Tour besuchen möchten. Die App berechnet ihnen dann, in welcher Reihenfolge diese Städte abgefahren werden können, sodass optimale Wetterverhältnisse in der jeweiligen Stadt am Tag des Besuchs herrschen. Dabei stellte es sich als eine Herausforderung dar, diese Anforderung zu operationalisieren. Zunächst wurde die Möglichkeit untersucht, das Problem im Sinne eines Travelling Salesman Problems (TSP) abzubilden, d.h. die optimale Rundreise zwischen den Städte-Knoten zu planen. Theoretisch wäre es möglich, die Kantengewichte mit Distanzen zwischen Städten und einem "Gut-Wetter-Faktor" zu berechnen, jedoch wurde schnell klar, dass die zusätzliche zeitliche Komponente hier problematisch sein würde. Der TSP Graph würde sich ständig verändern, da es tägliche Wetterveränderungen geben wird. Daher haben wir uns für dafür entschieden, das Problem mit einem selbst entwickelten "greedy" Algorithmus zu lösen. Dieser läuft nach zwei einfachen Schritten ab: 1. Ausgehend von der Start-Stadt bzw. der aktuellen Stadt wird ermittelt, welche Städte in einer Tagesetappe erreichbar sind. 2. Unter den erreichbaren Städten wird nach festgelegten Bedingungen ermittelt, wo am nächsten Tag das beste Wetter sein wird. Die resultierende Stadt wird als nächstes angefahren und dient dann wieder als Startpunkt für die nächste Berechnung. Im Folgenden soll beschrieben werden, wie die Anwendung genau umgesetzt wurde. APIs ------ Um zu bestimmen, ob eine Stadt in einer Tagesetappe erreichbar ist, muss eine Route berechnet werden. Hierfür benötigt man eine API, die in der Lage ist, Routen für Fahrräder zu liefern. Dabei haben wir uns nach etwas Recherche für die API von OpenRouteService [OPENROUTESERVICE_API_] entschieden. Zudem brauchten wir eine API, die (kostenlos) mindestens für ein paar Tage Wettervorhersagen liefern kann. Unsere Recherche führte uns hier zur Weatherbit API [WEATHERBIT_API_]. Da beide APIs gut dokumentiert sind, konnten die gewünschten Daten relativ einfach abgefragt werden. Frontend -------- In der Softwareentwicklung wird häufig zwischen Frontend und Backend unterschieden, um die unterschiedlichen Funktionalitäten und Aufgaben klar zu trennen. Während das Backend die serverseitige Logik und Datenverarbeitung übernimmt, ist das Frontend für die Darstellung und Interaktion mit dem Benutzer verantwortlich. Die Verwendung eines Frontends bietet eine Vielzahl von Vorteilen gegenüber einer reinen Kommandozeile. Durch die visuelle Benutzeroberfläche können Benutzer intuitiver und effizienter mit der Software interagieren. Dies ermöglicht eine benutzerfreundlichere Erfahrung und erhöht die Usability der Anwendung erheblich. Benutzer können mit Frontends auf verschiedene Arten interagieren, darunter Mausklicks, Tastatureingaben, Drag-and-Drop-Operationen und Touchgesten. Diese vielfältigen Interaktionsmöglichkeiten erleichtern es Benutzern, schnell und einfach mit der Software zu arbeiten und komplexe Aufgaben auszuführen. **Im folgenden gehen wir weiter darauf ein, wie das Frontend in diesem Projekt im Detail umgesetzt wurde:** Die Datei "Background.vue" definiert eine Vue.js-Komponente, die einen Container mit einer bestimmten Stilierung erstellt. Der Container hat eine Breite von 85%, einen blauen Hintergrund mit einer Transparenz von 0,94 und einen Innenabstand von 40px. Außerdem ist der Container abgerundet mit einem Radius von 3px. In dem Container wird der Slot platziert, sodass der Inhalt, der innerhalb dieses Containers eingefügt wird, angezeigt wird. Durch die Verwendung des Slots kann der Inhalt dynamisch eingesetzt werden, wenn die Komponente verwendet wird. Die Datei "City.vue" stellt eine Wetterkachel auf der Seite dar. Die Komponente hat drei Props: *city* (Stadtname als String), *temp* (Temperatur als Zahl) und *icon* (Icon als String). Im Template wird ein Container mit einem Bild (Icon), dem Stadtnamen und der Temperatur erstellt. Das Bild wird dynamisch mit dem Icon-URL von Weatherbit.io basierend auf dem Wert von *icon* geladen. Der Container und die darin enthaltenen Elemente werden mit CSS gestylt. Der Container ist ein flexibles Element mit vertikaler Ausrichtung in der Mitte. Das Bild hat eine festgelegte Höhe und Breite und die Absatzelemente haben keinen oberen oder unteren Abstand. Der JS *