Lieber Zuschauer, dieser Untertitel wurde automatisch generiert von Trint und dementsprechend (sehr) fehlerhaft. Wenn du kannst, hilf uns bitte gute Untertitel zu erstellen: https://c3subtitles.de/talk/2174 Danke!
Hallo und herzlich Willkommen zum Talk
Trans TB Umgebung, Besucher
und Domains Language mit
Leyla und Lena.
Ich bin Sylvia und möchte euch vorab ein
paar Hinweise zum Ablauf geben.
Der Talk dauert ca.
20 Minuten.
Für Fragen wechseln wir im Anschluss
in einen Club Datenraum.
Der Link wird am Ende der
des Talks als QR-Code eingeblendet
und lautet https Doppelpunkt
Slash Slash Events
Taxon Punkt Ort Slash Awesome
anderswoher order Punkt html
4 bekommt eine kurze Vorstellung von
trans die bpd.
Ihr bekommt erklärt, wie eine Umgebung
Suche ohne externe API funktioniert
und was du meinst.
IC Languages sind.
Während des Vortrages können die Fragen
auf Twitter oder Mastodon über den
Account Hexenzirkel loswerden
oder im Nachgang im direkten Gespräch
im Blue Button stellen.
Soweit ich wünsche uns allen
einen interessanten Talk.
Guten Tag, wir sind transitive.
Wir sind eine öffentliche Liste
und Suchmaschine mit einer
Umgebung Suche für
Transpersonen, um Anlaufstellen zu
finden.
Ich bin Lena, eine der beiden
Entwicklerin bei Trans DW
und ich bin Leyla, auch einer
der Trans der Welt.
Transpersonen sind alle diejenigen,
die das bei ihrer Geburt zugewiesenen
Geschlecht ablehnen.
Häufig haben diese Menschen den Wunsch,
eine Transition zu machen, also sich
ihrem eigentlichen Geschlecht anzupassen.
Meistens fängt das mit therapeutischer
Unterstützung und Kontakt und
Selbsthilfegruppen an.
Im weiteren Verlauf möchten manche
Transpersonen medizinische Maßnahmen
durchlaufen.
Diese können zum Beispiel
Hormonbehandlung, Stimmen, Training oder
diverse Operationen umfassen.
Viele Transpersonen haben
Schwierigkeiten, Anlaufstellen und
Personen zu finden.
Das liegt einmal daran, dass
Transpersonen eine Randgruppe sind,
für die es recht wenige Anlaufstellen
gibt und dass im medizinischen
Bereich viel zu viel Transphobie
und Diskriminierung gibt.
Deshalb haben wir eine Liste mit
positiven Empfehlungen erstellt.
Unser Konzept ist es, deutschlandweit
möglichst flächendeckende Angebote
bereitzustellen.
Das machen wir, in dem unsere Liste
auf Community enthalten basiert, die von
allen möglichen Transpersonen eingereicht
werden.
Das funktioniert spezifisch, so, dass
Leute auf unserer Website über ein
Formular neue Einträge einreichen können.
Diese Einträge werden dann von unserem
Redaktionsteam überprüft und
freigeschaltet.
Nach der Freischaltung können Nutzer
auf unserer Seite die Einträge suchen
und filtern.
Auf der technischen Seite haben wir das
Ganze auf mit jetzt aufgebaut,
aber sind zurzeit dabei, das Ganze auf
Sattels mit Weltkind zu ändern.
Als Programmiersprache verwenden wir
im neuen Frontend sowie im Backend
Script
unser Backend, das auf Expressions
aufgebaut und mittlerweile sind wir
dabei, das ganze noch mit Overnight
CSS Objektorientierte zu machen.
Als Datenbanksystem haben wir uns für
morgen entschieden, weil sie einfach
flexibel und performant ist.
Zum ersten nutzen wir Dr. Komforts,
weil es das Hosting sehr einfach
und auch sicher macht.
Des Weiteren nutzen wir GitHub, um
unseren Code öffentlich einsehbar
zu machen und GitHub Continuous
Deployment, um unsere Anwendung zu
heilen.
Jetzt erstellen wir noch etwas von der
technischen Seite in Form von zwei Mini
Talks. Zuerst erzählt euch Lena
etwas über unsere Umgebung Sucher,
danach erzählt euch Leila etwas über
specific languages.
Ich erzähle euch jetzt ein bisschen was
über die Umgebung, suche, die wir auf
unserer Website haben, wie wir das
implementiert haben und was wir dabei
alles beachten mussten.
Zuerst einmal Warum brauchen wir
überhaupt eine Umgebung? Sucher.
Das Ganze hat den Vorteil, dass Nutzer
auf unserer Seite mit wenigen
Klicks passende Einträge finden.
Natürlich könnten wir das Ganze auch
nach Bundesland filtern lassen, aber
das ist sehr, sehr ungenau.
Deswegen haben wir uns dazu entschieden,
eine richtige Umgebung Suche einzubauen,
weil das auch einfach die User Experience
insgesamt verbessert.
Schauen wir uns doch erst mal an, wie das
Ganze funktioniert.
Wir haben auf unserer Webseite hier oben
im Banner so einen Button mit
Namenssuche.
Darüber kann der Nutzer seinen Standort
teilen. Und dann sehen
wir schon auf der linken Seite, wo der
Standort erkannt und unter jedem Eintrag
ist, die entsprechende Entfernung.
Wenn ein Nutzer seinen Standort nicht
freigeben möchte, bieten wir natürlich
auch noch die Suche nach einem Ort oder
einer Postleitzahl an.
Das funktioniert im Grunde genauso.
Um so eine Umgebung zu bauen, haben wir
auch gewisse Anforderungen gehabt und
zwar soll das ganze Lokal
und selbst gebaut sein, um
den externen Episteln kostenpflichtig
unterm Rad limits.
Und da wir das ganze
ja als ehrenamtliches Projekt machen,
haben wir nicht die finanziellen Mittel,
dies nämlich zu bezahlen und
wir auch nicht wissen, wie viele Nutzer
am Ende das Ganze nutzen, können
wir auch nicht so wirklich abschätzen.
Ein anderer wichtiger Punkt dabei ist
Datenschutz.
Denn würden wir einen externen Anbieter
nutzen, würden wir die ganze Zeit die
Koordinaten unserer User
zu irgendwelchen Diensten schicken.
Und das ist halt nicht so Datenschutz
freundlich. Deswegen wollen wir das Ganze
lieber bei uns auf unseren Servern
behalten.
Für das Ganze benötigen wir natürlich die
Geodaten für die eigentlich
Umgebung Suche nutzen wir da oben Geo
DB.
Das ist eine offene Datenbank mit
Ortsnamen und Postleitzahlen in
Deutschland und Umgebung, die man
einfach so kostenlos runterladen kann.
Eine externe API ist dann doch noch drin,
und zwar nominell Team von OpenStreetMap.
Das ist allerdings nur dafür da, um
die Adressen von neuen Einträgen in
Koordinaten umzuwandeln.
Schauen wir uns mal an, was Giotto ab
und zu an Daten liefert, dafür hier
so eine schöne Tabelle.
Das ist einfach so eine CSV-Datei,
die sich auf der Website von OpenGL DB
runterladen lässt.
Und da haben wir im Grunde genau die
Informationen drin, die wir brauchen,
nämlich die Koordinaten, Postleitzahl,
Ortsnamen und den ganzen Kram.
Diese Daten haben wir allerdings nicht
eins zu eins in unsere Datenbank
importiert, sondern ein kleines Skript
geschrieben, um das Ganze noch ein
bisschen um zu formatieren, denn manche
Felder davon benötigen wir überhaupt
nicht und somit könnten wir Speicherplatz
sparen. Und die Koordinaten brauchen
wir als Duchess Point, damit
das in unserem DB vernünftig
funktioniert.
Nachdem wir das importiert haben, sieht
das jetzt in unseren Augen so aus, dass
ungefähr 60000 Dokumente
da sind wir dann auch.
Die ganzen Felder, die wir brauchen, sind
nicht mehr so viele, wie es vorhin in der
Tabelle waren, sondern angepasst damit.
Wir müssen Speicherplatz sparen können.
Da ist uns auch dieser Gut Jason Point
dran und Name und Postleitzahl und so.
Jetzt, wo wir die Daten in der DB haben,
können wir einen Index benutzen,
um die Geo Jason Punkte zu indexieren,
denn das bringt uns nachher bei den
Anfragen in großen Performance Vorteil.
Diesen Index legen wir sowohl
in der Collection an, wo die Open Geo TB
Daten liegen, weiter Koordinaten drin
sind als auch bei unseren einschießt,
die ebenfalls Koordinaten für ihren
Standort haben.
Nachdem wir das jetzt implementiert
haben, können wir an unsere API
eine Anfrage schicken, wo wir einen Text
mit einem Ortsnamen und Apostel
hinschicken und rechts in der Response.
Dann kriegen wir die entsprechenden
Ergebnisse zurück.
Wenn wir jetzt Einträge sortieren wollen,
gibt es da zwei verschiedene Fälle, wie
wir die Geodaten verwenden.
Im ersten Fall startet der Nutzer eine
Suche mit den Koordinaten.
Dann nutzen wir dann die Geodaten, um
die Koordinaten aufzulösen und einen
Ortsnamen zu erhalten.
Danach werden die Einträge
nach den Koordinaten sortiert und wir
hängen den Ortsnamen an die Response ran.
Das machen wir damit auf der Website
nachher in der Sidebar.
Der Ortsnamen steht einfach aus
User Experience Gründen.
Im zweiten Fall startete eine Suche
nach einem Ortsnamen.
Da müssen wir den Ortsnamen Narayen
mithilfe unserer Geodaten auflösen und
die Koordinaten dafür zu erhalten.
Mit diesen Koordinaten können wir dann
die Einträge sortieren und den Ortsnamen.
Hängen wir ebenfalls an uns wieder mit
dran.
In der Praxis sieht das jetzt so aus,
dass wir ein Web Request an unsere API
machen, wo wir dann im Quell
String und Long mitgeben
können und rechts in eine responsive,
dann ein Array mit NCIS.
Jede NGO hat ein Distance
Feld, das die Distanz in Kilometern
drin und ganz unten
ist. Ein Location im Feld,
wo der bekannte Ortsname
drin ist.
Natürlich hat das ganze auch
Limitierungen, hauptsächlich von Open
Geo DB, denn das ist so
eine Sache mit der Verfügbarkeit.
Im letzten Jahr war oben Geo DB
nicht immer zu erreichen.
Die Download Seite war teilweise
offline.
Wir haben zum Glück noch einen recht
aktuellen Stand.
Das soll jetzt auch bald wieder online
kommen. Aber das ist halt auch ein Punkt,
der so ein bisschen kritisch ist, was
natürlich dann auch dafür sorgt, dass wir
das nicht immer aktuell halten können.
Eine andere Sache ist die
länderspezifische Verfügbarkeit,
denn Open Kioto bedeckt nicht die ganze
Welt ab. Das könnt ihr auch gar nicht in
unsere Datenbank importieren.
Deswegen ist die Suche aktuell nur in
Deutschland verfügbar.
Ja, so funktioniert unsere Umgebungsluft
bei Trans ich hoffe, ich konnte euch
darüber einen guten Überblick geben.
Sollten noch Fragen aufkommen, könnte die
gerne noch im und einfach herstellen.
Und jetzt erzählt euch leider noch etwas
über domain specific languages.
Guten Tag, ich bin Lila, ich bin einer
der Programmiererin von DP und ich
möchte euch heute ein Feature vorstellen
und ein bisschen darüber reden, wie wir
das gemacht haben.
Das ist ein Feature, das man jetzt im
Frontend als Nutzer nicht die ganze Zeit
sieht. Das es für unser Management-Team
da und zwar ist es eine
Domain specific language, die wir im
Management Backend nutzen.
Da erstmal dazu, warum wir eine Domain
haben. Das Problem ist, wir haben
hunderte von Einträgen in unserer
Datenbank, die unser Management-Team
dauernd durchsuchen muss.
Und da gibt es natürlich verschiedene
Lösungsansätze. Wir könnten irgendwie
eine Datenbank versuchen zu exportieren.
Das ist aber ein bisschen gefährlich.
Der Datenbank ist ja immer ein bisschen
mehr machen können als nur
Daten abrufen und
die auch sehr ineffizient sein können.
Absichtlich ineffizient gemacht werden.
Das allgemeine bisschen Security
Management ist der andere Faktor ist
natürlich, dass Datenbanken sehr komplex
sind und jetzt nichts, was man
zwingend nicht zu technischen Personen
zumuten kann.
Die andere mögliche Lösung für dieses
Problem wären Filter Felder einzubauen.
Nur ist da die Sache.
Das ist halt einschränkend anhand von
welche Filter Felder jetzt implementiert
haben als Developer.
Da kann man jetzt nicht zwingend alles
mit filtern und wenn man mehr gefiltert
werden muss oder neue Felder hinzugefügt
werden, dann müssen die auch immer bei
uns im Frontend erweitert werden und das
macht es halt schwer zu erweitern.
Das haben wir da geguckt, ob es da noch
weitere Lösungen gäbe.
Und eine unserer Inspirationen
war die Filter
Felder von Discord.
Discord hat hier oben rechts an der
Ecke von jedem Chat so ein Filter fällt
das sehr leicht zu nutzen.
Ist das ein schönes Auto?
Was macht mit dem man wirklich
alles filtern kann, unabhängig von
spezifischen Filter Feldern und diese
Sprachen unabhängig?
Also wenn man es jetzt auf Englisch oder
auf Deutsch hat, dann ändert sich hier
auch die Sprache.
Nur gab es nichts, was man jetzt so als
fertiges Paket einbinden könnte.
Und deshalb haben wir unsere eigene
Sprache gemacht.
Sprache bedeutet hier jetzt was ziemlich
Allgemeines. Das ist keine
Programmiersprache, sondern eine Filter
Sprache.
Und diese Filter Sprache ist jetzt eine
ganz spezifisch für einen ganz bestimmten
Zweck, was eigentlich übersetzt
Domain specific heißt.
Da ergibt sich auch der Name besser
Gottscheer.
Ich möchte euch jetzt mal zeigen, wie das
Ganze bei uns aussieht.
Jetzt wechseln das bei uns die Menschen
mit Oberfläche und hier oben ist bei uns
das Filter Feld.
Wie ihr sehen könnt, haben wir jetzt
nicht so ein Riesenhaufen Filter Felder,
sondern nur dieses eine Feld.
Und da kann man jetzt Dinge eingeben wie
freigeschaltet von
lila. Dann sieht man alle Dinge die ich
freigeschaltet habe und ich möchte es
auch noch. Nur Dinge
die Gruppen und
Vereine sind. Und jetzt habe ich nur hier
Gruppen und Vereine, die von uns
freigeschaltet wurden.
Ja, dieser Filter ist halt sehr versiert
hier, sehr
dynamisch, was man da alles eingeben kann
und man kann auch immer mehr dranhängen.
Ja, die Ziele unserer Sprache sind einmal
die Sicherheit durch das, was wir
zulassen, dass wir das sehr stark auf
unseren Zweck anpassen können und dass es
für unser Management Team sehr leicht
nutzbar ist.
Das könnte man jetzt auch allgemein
ausweiten auf warum man unbedingt
eine Domain haben wollte.
Das sind auch allgemeine Gründe für eine
Domain Language, nicht nur unsere
Gründer.
Beispiele für andere Domains So viele
Languages wären zum Beispiel
Excel. Wenn man in Excel einfach ein
Feld, kann man eine Formel eingeben.
Das ist quasi eine eigene Sprache.
Und ein anderes Beispiel wäre im Spiel
Overwatch. Da kann man ja eigene Games
skripten und die haben das in erster
Linie für die Sicherheit gemacht, weil
der Code, den man skripten kann, auf den
Servern läuft. Da wollen die natürlich
nicht alles zu lassen.
Wie man eine eigene DSL angehen kann, ist
jetzt auf drei verschiedene Weisen.
Man kann die entweder interpretiert
machen, wo der Code beim Einlesen
ausgeführt wird, direkt.
Man könnte sie kompilieren, wo der
Code der Sprache zu kommt, verwandelt
wird und später meistens auf einer
virtuellen Maschine ausgeführt wird.
Oder man könnte es schon speichern, wo
man seinen eigenen Syntax zu
einem anderen Sprache übersetzt.
Und da der Hintergrund schon eine
Datenbank haben, die einen Syntax hat,
ist das die Herangehensweise, die wir
gewählt haben.
Wie man jetzt so eine transparente
Sprache aufbaut, die besteht
noch mal aus verschiedenen Segmenten.
Ich halte diese Segmente später noch mal
genau anhand eines Beispiels.
Zuerst hat Alexa, dessen Aufgabe es ist,
Tonks zu erstellen.
Dann haben wir den Parser, dessen Aufgabe
es ist, ein abstraktes Zwischenform zu
erstellen ist. Abstraktes Format könnte
man nutzen, um es zu optimieren.
Wir verlassen uns allerdings größtenteils
auf den Leser der Zielsprache, also
der DB.
Und dann haben wir den Compiler, welcher
dann zu der Zielsprache, also der Mangel
der Pipeline, führt.
Das Ganze packen wir jetzt hier mal in
unsere Maschine, um das mit einem
Beispiel durchzugehen.
Wir haben jetzt hier oben den Input
von ist Logopädin Haddsch Webseite
und packen wir jetzt mal unsere Maschine
rein und gucken dann, wie das aussehen
würde.
Als erstes kommt das Ganze hier im laxer
an und die Aufgabe vom Laxer ist es,
diesen Input Text in einzelne
Tokens zu unterteilen.
Das ist jetzt unser Input Text und ein
Token ist quasi eine Art Word.
Es ist so eine Abtrennung und
die auf verschiedenen Faktoren abgetrennt
werden kann, wie es unterteilt wird.
Das ist der erste Token ist, und wir
suchen uns jetzt nicht nur den Token
raus, sondern der Laxer.
Der packt da auch noch verschiedene
Informationen dran, und zwar hier einmal
den Inhalt. Das ist dann die Position
im Input.
Das ist für zum Beispiel Auto komplett
wichtig und dann noch, ob es
ein Filter sein könnte.
Wir haben jetzt, das ist immer ein
Filter, das ist ein Wert.
Die Sprache muss ja wissen, was ein
Filter und was ein Wert ist.
Dass der Alexa, der rät das nur.
Denn das lässt sich nicht mit kompletter
Sicherheit sagen. Man könnte natürlich
auch nach Werten suchen,
den Doppelpunkt beinhalten und
die wären dann keine Filter, das aber
etwas ist, was die Aufgabe des Partners
ist. Der User unterteilt wirklich nur die
Worte und die die
weiteren Tokens, die der User erstellt
ist dann Logopädin hat und Websites und
die packen wir in eine Array und geben
das weiter an den nächsten Schritt und
zwar den Parser.
Der Parser liest diese Tokens jetzt ein
und der hat dazu den Kontext und
der bekommt auch noch von außen eine
Sprache Definition, die jetzt
bei uns im Frontend liegt, die definiert,
welche Felder es gibt, was ein Feld ist,
was ein Filter ist und nutzt
diesen Kontext und die Reihenfolge,
um die Begriffe zu übersetzen und
ein abstraktes Format, das wir hier unten
sind, zu erstellen.
Auch noch packt der ein Auto
komplett String, weil der weiß ja aus dem
Kontext was möglich ist
und sagt quasi alle Sachen, die
von hier aus an möglich sind.
Gibt er es eine Liste als Autor komplett
zurück nach oben an das Filter Feld?
Das wäre jetzt, dass
der erste Token, der verwandelt werden
würde, in der Definition
steht, dass dieses Feld ein
Feld ist, das ist das Datenbank
Feld Type kompilieren soll und
das ist eine Kultur Komparse machen soll.
Also zum Beispiel Zahlen lassen sich auch
Creator, dann Smolka, dann
kompilieren und es gibt auch noch die
Quittung.
Und das hier ist jetzt der Wert, der
erkannt wurde anhand, dass wir hier einen
validen Filter haben, der reingepackt
wurde und dann erkennt das auch
noch ein Klotz.
Ein Klotz bedeutet einfach Dieses Feld
muss vorhanden sein bei den Sachen, die.
Dort werden und das ist der
Name des Feldes, das vorhanden sein muss.
Das wird auch alles anhand der Sprache
Definition gemacht.
Und noch eine wichtige Sache am Parser
ist, dass der Parser nicht versagt, wenn
der Parser irgendeinen invaliden Input
hat. Wenn zum Beispiel etwas, das
aussieht wie ein Filter, aber
kein valider Filter ist, dann wird das
als einfach Textfeld
Filter frei Text Filter an
die Datenbank weitergegeben.
Das ist dann mit meinem Frontend als
Endnutzer nicht die ganze irgendwelche
Error Messages hat, so etwas möglichst
sinnvolles zurückgibt.
Und man kann ja anhand der Autor sehen,
ob das ein valider Import schon ist, den
man da hat.
Das ganze wird jetzt in ein Objekt
gepackt. Das ist dann unser abstraktes
Format und geht weiter
in den nächsten Schritt und zwar den
Compiler.
Der Compiler hat jetzt die Aufgabe,
dieses abstrakte Format einmal zu
validieren und dann zu
übersetzen.
Und der macht auch noch ein bisschen
optimal. Anhand der Reihenfolge,
also zum Beispiel dieses include Felder
Filter kommen immer zuerst.
Wir sehen können. Das hier ist jetzt eine
Mongo DB Pipeline.
Das in Clouds Feld sagt quasi das Website
Feld darf nicht leer sein.
Das kommt immer zuerst, weil wenn
das Webseite Feld leer ist, dann muss gar
kein Vergleich erst gemacht werden.
Genau und hier ist diese Person,
da sagen wir jetzt das Type Feld braucht
ein Pfarrerssohn Regex.
Und keine Sorge, hier ist keine
Interaktion möglich.
Das Regex wird komplett ausgeflippt
und diese Pipeline, die geht jetzt weiter
an die Datenbank und die Datenbank gibt
uns dann die gefilterten Werte zurück.
Jetzt hat ein Endeffekt nur noch eine
Frage offen Wo senden wir das Ganze?
Vom Frontend zum Backend gibt es drei
Möglichkeiten. Wir könnten es direkt am
Anfang machen.
Also hier, das ist jetzt der Vorteil.
Das ist sehr leicht zu validieren, ist
damit auch sicher. Wir können einfach
gucken ist das Text und das
die Domains für diese Implementation
an einem Ort liegt, die brauchen wir gar
nicht im Frontend.
Der Nachteil ist, dass wir Dateien im
Backend haben. Das wollen wir vermeiden,
da wir alle Dateien schon an einem Ort im
Frontend haben möchten.
Falls Sie die Dateien
am Ende mal irgendwie ändern wollen
und das Auto komplett langsam ist, weil
immer wenn der Parser ein Auto
komplett Liste hat, die erst
ganz nach oben zurück an das Front
entsenden muss. Und das hat natürlich
eine Message.
Delay Das ist ein bisschen unschön zu
nutzen.
Eine nächste Option war vor der
Datenbank. Das ist eine schreckliche
Idee, weil da
die ganzen Sicherheitsaspekte aus
dem Fenster flöten geht.
Da kann man dann direkt eine Pipeline
rein geben.
Der einzige Vorteil hier ist jetzt, dass
es leichter zu nutzen ist.
Aber die Sicherheit ist weg, weil wir
die Validierung sowieso machen müssten.
Aber der Vorteil ist natürlich, dass wir
die Vorstellung an einen Ort im Frontend
haben und die Sprachdatei jetzt auch im
Frontend haben.
Was wir am Ende gemacht haben, ist
zwischen Compiler und Parser, also das
abstrakte Format übersenden.
Das wird ja einmal vom Compiler
validiert, aber das kann auch
so validiert werden von anderer Software.
Das Auto komplett ist trotzdem noch sehr
schnell, weil das allein nicht im
Frontend sitzt.
Und die Sprachdatei sind nur am Frontend,
weil dieses abstrakte Format ja schon die
übersetzten Backend Felder hat und
nicht dieses
hat.
Hier ist Logopädin, das ist ja deutsch.
Das zu nutzen wir das im Backend
nicht, aber das wurde ja hier schon im
Frontend jetzt übersetzt.
Der Nachteil ist, dass wir diese Domain
zu verlängern Shantanu, Front und Backend
brauchen, aber das jetzt als eigenes
Paket haben, ist das jetzt kein so großes
Problem.
Ja, das ist, was im Endeffekt verwendet
haben. Ich bin da jetzt ein bisschen
durchgedreht.
Also falls ihr noch Fragen habt wir haben
jetzt noch einen Kevin a Big
Blue Datenraum und da könnte ich dir
gerne fragen.
Danke fürs Zuhören und noch einen schönen
Tag.
Ja, vielen Dank Lina und Leyla.
Total klasse, wie er das gelöst
hat und obendrein hilft ihr vielen
Transgender Menschen damit enorm weiter.
Jetzt geht es weiter mit den Cuenca.
Wir wechseln dazu in einen Big Blue
Datenraum.
Die Adresse des Raumes ist
eingeblendeten QR-Code hinterlegt
und lautet https
Doppelpunkt Slash Slash
Event Punkt Hexen Typekit
org slash asam
anderswoher order.
Punkt. HTML bis
gleich.