\makeglossaries \newglossaryentry{spa} { name=Single-Page-Application, description={ ist ein Webseiten-Modell, bei welchem dem Nutzer nur ein Webdokument bereitgestellt wird. Mit einem Skript wird der Inhalt der Seite dynamisch mit Daten einer API befüllt. Außerdem verwaltet die Seite (nicht der Server), welcher Inhalt bei welchem Pfad angezeigt wird. Dies erzeugt geringere Serverlast und eine bessere Nutzererfahrung, da die Seitenstruktur beim Laden von neuen Inhalten erhalten bleibt} } \newglossaryentry{packagemanager} { name=Paketmanager, description={ ist ein Programm, welches Pakete und dessen Abhängigkeiten verwaltet, installiert, entfernt und aktualisiert. Pakete können andere Programme, Plugins oder Software-Bibliotheken sein} } \newglossaryentry{bundler} { name=Bundler, description={ ist ein Programm, welches genutzte Teile von Abhängigkeiten eines Software-Projekts in passender Reihenfolge zusammensucht und daraus Dateien erstellt, die für den Nutzer bereitgestellt werden können. Dabei kann der Bundler mit zusätzlichen Modulen Dateien erzeugen, die rückwärtskompatibel oder für den Nutzer schwerer einsehbar sind} } \newglossaryentry{java} { name=Java, description={ ist eine objekt-orientierte interpretierte kompilierte Programmiersprache, welche plattformunabhängig auf einer virtuellen Maschine ausgeführt wird} } \newglossaryentry{db} { name=Datenbank, plural=Datenbanken, description={ ist ein System um Daten persistent zu speichern und effizient zu verwalten. Am meisten verbreitet sind relationale Datenbanken, welche Daten in Tabellen mit Referenzen zu Einträgen anderer Tabellen speichern. Programme können dann über eine Anfragesprache (Structured Query Language - \Gls{SQL}) komplexe Operationen auf den Daten ausführen} } \newglossaryentry{docker} { name=Docker, description={ ist ein Programm, das virtualisierte Container ausführt. Ein Programm in so einem Container läuft in seiner eigenen virtuellen Umgebung, wodurch das Host-System sicher bleibt. Zudem lassen sich die Container leicht auf andere Systeme verteilen} } % RESTfull-API, JSON, RSS-Feed, Salting and Hasing, OAuth, Cookie, Garbage % Collection, DSGVO, Podcast, Podcatcher, Episode, Gpodder, \newglossaryentry{podcatcher} { name=Podcatcher, plural=Podcatchern, description={ ist ein Programm, über welches man Podcasts entdecken, abonnieren und Episoden von Podcasts hören kann. Mit einem Account auf einer Plattform, welche eine Gpodder-API zur Verfügung stellt, können Ereignisse, die von einem Nutzer ausgehen, auf anderen Podcatchern des Nutzers synchronisiert werden} } \newglossaryentry{podcast} { name=Podcast, description={ ist ein RSS-Feed, dessen Einträge die Episoden darstellen} } \newglossaryentry{episode} { name=Episode, plural=Episoden, description={ ist ein Eintrag in einem Podcast. Eine URL in dem Eintrag zeigt auf eine Medien-Datei, welche vom Podcatcher abgespielt werden kann} } \newglossaryentry{rest-api} { name=RESTful-API, description={ ist ein Schnittstellenentwurf über das Hypertext Transfer Protocol (HTTP), bei dem die Schnittstellen strukturiert als Pfad an einem Endpunkt erreichbar sind. Mittels verschiedener HTTP-Methoden können an der Schnittstelle Daten abgefragt (GET), gesendet (PUT), gelöscht (DELETE) oder geändert (POST) werden. Die Daten, die über die Schnittstelle gesendet werden liegen meist im JSON-Format vor} } \newglossaryentry{gpodder} { name=Gpodder-API, description={ wird von gpodder.net benutzt und entwickelt. Die API wird als Schnittstelle zwischen Podcatchern und Podcast Synchronisationsservern verwendet. Weitere Details sind unter "https://gpoddernet.readthedocs.io/en/latest/api/" zu finden} } \newglossaryentry{json} { name=JSON, description={ (JavaScript Object Notation) ist ein Datenformat und wird zur Übertragung von Strukturen und Daten eingesetzt. JSON besteht dabei aus grundlegenden Datentypen sowie Objekten mit Schlüssel-Wert Paaren und Listen} } \newglossaryentry{oauth} { name=OAuth, description={ (Open Authorization) ist ein offenes Protokoll, welches es Nutzern ermöglicht, sich mit bereits bestehenden Accounts bei anderen Diensten zu registrieren. Dabei werden benötigte Daten für die Registrierung über die bereitgestellte Schnittstelle zur Verfügung gestellt} } \newglossaryentry{garbage-collection} { name=Garbage Collection, description={ ist eine automatische Speicherbereinigung, welche nicht mehr benötigten Speicherplatz wieder freigibt. Die Bereinigung kann dabei in determinierten Zeitintervallen erfolgen oder durch bestimmte Ereignisse ausgelöst werden} } \newglossaryentry{salt-hash} { name=Salting und Hashing, description={ ist eine Methode um Passwörter so zu kodieren, dass sie nicht als Klartext gespeichert werden und auch sicher vor Hash-Wörterbüchern sind. Dafür wird dem Passwort ein bekanntes Wort, der Salt, angefügt, bevor aus dem kompletten Wort eine Prüfsumme, ein Hash, generiert wird. Beim Anmelden wird die Prüfsumme der Anmeldung mit der bekannten Prüfsumme des Passworts verglichen} } \newglossaryentry{rss} { name=RSS, description={ (Really Simple Syndication) zeigt strukturiert Listen von Nachrichten an. Die Änderungen werden im XML-Format in sogenannte RSS-Dateien geschrieben, welche über einen Link abgerufen werden können} } \newglossaryentry{dsgvo} { name=Datenschutz-Grundverordnung, description={ (DSGVO) ist eine im europäischen Wirtschaftsraum geltende Verordnung. Sie sorgt für eine Reglementierung bei der Verarbeitung personenbezogener Daten. Unter anderem muss einsehbar sein, welche Daten von Nutzern erhoben werden. Außerdem muss für einen Nutzer die Möglichkeit bestehen, seine erhobenen Daten abrufen zu können} } \newglossaryentry{push-pull} { name=Push und Pull, description={ sind Methoden, um Daten auszutauschen. Bei der Pull-Methode stellt Akteur A einem Akteur B eine Anfrage auf Daten und erhält diese als Antwort. Damit Akteur A und B immer auf dem selben Stand sind, muss Akteur A chronisch Anfragen an Akteur B stellen. Im Gegensatz dazu steht die Push-Methode, bei der Akteur B den Akteuren mitteilt, dass er neue Änderungen hat. Dafür muss Akteur B allerdings wissen mit welchen anderen Akteuren er in Verbindung steht und diese Verbindung aufrecht erhalten} } \newglossaryentry{ui-lib} { name=UI-Bibliothek, plural=UI-Bibliotheken, description={ kümmert sich um das Layout einer Webseite. Dabei unterscheidet man zwischen Design-Bibliotheken (wie Bootstrap), welche fertige UI-Komponenten bereitstellen, und Layout-Bibliotheken (wie Vue oder React.js), welche die Komponenten basierend auf Daten dynamisch anzeigen} } \newglossaryentry{responsive} { name=Responsive, description={ Design ist ein Design-Prinzip für Webseiten, bei dem die selbe Webseite ihre Komponenten dynamisch der Bildschirmbreite anpasst} } \newglossaryentry{pseudoprotocol} { name=Pseudoprotokoll, description={ ist ein URL-Schema, auf das Webseiten hören können, wenn sie sich das URL-Schema im Browser anmelden. Bekannt Pseudoprotokolle sind: ,,mailto:'', ,,tel:'' oder ,,irc:''} } \newglossaryentry{dashboard} { name=Dashboard, description={ ist die erste Seite auf der man landet, wenn man angemeldet ist} } \newglossaryentry{abo} { name=Abonnement, description={ ist ein abonnierter Podcast} } \newglossaryentry{discovery} { name=Discovery, description={ ist ein Feature der Gpodder-API, welches dem Nutzer eine Reihe von Podcasts zum abonnieren anbietet} } \newglossaryentry{session-token} { name=Session-Token, description={ ist ein Wort, dass vom Client gespeichert wird solange der Nutzer eingeloggt ist und bei jeder Anfrage an den Server mitgeschickt wird. Der Server kann den Session-Token einem Nutzer zuordnen und so mit nutzerspezifischen Daten antworten} } \newglossaryentry{cookie} { name=Cookie, description={ ist ein kleiner webseitenspezifischer Speicher im Browser, welcher vom Server und von der Webseite gesetzt werden kann und bei jeder weiteren Anfrage an den Server mitgesendet wird. Cookies bleiben entweder temporär im Browserspeicher, bis der Browser geschlossen wird oder permanent, bis ein optionales Verfallsdatum erreicht ist} } \newglossaryentry{uiComponent} { name=UI-Komponente, plural=UI-Komponenten, description={ In Vue.js werden die grafischen Elemente einer Webseite in einzelne Komponenten zerteilt. Diese reagieren automatisch auf Änderungen und können ohne Neuladen der Seite ihr Aussehen verändern und somit Änderungen direkt anzeigen} } \newglossaryentry{spring} { name=Spring, description={ Ein Java-Framework, welches die Entwicklung von Web-Applikationen erleichtert. Dazu wird eine Reihe von Werkzeugsets zur Verfügung gestellt. Unter anderem sind das Spring Web für das Erstellen von Webanwendungen, Spring Security für die Verwaltung von Benutzerauthentifizierungen und Spring Data JPA für die Arbeit mit relationalen Datenbanken } } \newglossaryentry{api} { name=API, plural=APIs, description={ Eine Schnittstelle, welche es ermöglicht auf Funktionalitäten einer Anwendung zuzugreifen. APIs für Webanwendungen heißen WebAPIs. Ein Beispiel für eine WebAPI ist die REST-API } } \newglossaryentry{business} { name=Geschäftslogik, description={ Eine Schicht in der Anwendungsentwicklung, in der die Art und Weise, wie das Programm auf Eingaben reagiert, wie Daten verarbeitet und wie sie gespeichert werden sollen, festgelegt ist } } \newglossaryentry{solid} { name=SOLID, description={ Eine Sammlung an Prinzipien, welche zu gutem objektorientierten Design führen soll. Jedes Prinzip steht für einen Buchstaben in SOLID: \textbf{S}ingle-Responsibility Prinzip, \textbf{O}pen-Closed Prinzip, \textbf{L}iskovsches Substitutionsprinzip, \textbf{I}nterface Segregation Prinzip und \textbf{D}ependency Inversion Prinzip } } \newglossaryentry{crud} { name=CRUD, description={ CRUD steht für \textbf{C}reate, \textbf{R}ead, \textbf{U}pdate und \textbf{D}elete. Hierbei handelt es sich um die grundlegenden Funktionen einer Anwendung, die mit einer Datenbank arbeitet. Hierbei können Daten angelegt, abgerufen, aktualisiert und gelöscht werden. Auch in Web-Applikationen ist CRUD mit HTTP über die Anfragen POST, GET, PUT und DELETE vertreten } } \newglossaryentry{SQL} { name=SQL, description={ SQL (Structured Query Language) ist eine Sprache, die einen strukturierten Zugriff auf Datenbanken ermöglicht. Daten können hierbei hinzugefügt, abgefragt, geändert und gelöscht werden. Das besondere hierbei ist der strukturierte Zugriff auf Daten, indem explizit Daten mit bestimmten Kriterien und Relationen ausgewählt und bearbeitet werden können. SQL wird fast von allen verbreiteten Datenbanksystemen unterstützt } } \newglossaryentry{Base64} { name=Base64, description={ Mithilfe von Base64 können 8-Bit-Binärdaten in eine ASCII-Zeichenkette kodiert werden. So werden zum Beispiel E-Mail-Anhänge versendet } } \newglossaryentry{JSONP} { name=JSONP, description={ JSONP ermöglicht die Übertragung von JSON-Daten zwischen verschiedenen Domains. Dies wäre durch die Same-Origin-Policy nicht möglich. JSONP nutzt allerdings die Tatsache aus, dass sich Skripte domainübergreifend übertragen lassen. Dazu werden die JSON-Daten als Argument einer übergebenen Funktion über ein Skript-Element eingebunden } }