Seite wählen

NETWAYS Blog

Azubis erzählen: Mai 2017 Gabriel

This entry is part 6 of 17 in the series Azubis erzählen

Hallo zusammen,
um diese Blogserie „Azubis erzählen“ mal wieder aufzufrischen, werde ich hier ein wenig über meine bisherigen Aufgaben erzählen.
Zu mir: mein Name ist Gabriel Hartmann, ich bin 28 Jahre alt und seit September 2016 als Azubi (Junior Systems Engineer) bei NETWAYS. Bevor ich bei NETWAYS als Azubi anfing, habe ich an der FAU Erlangen ein paar Semester Informatik studiert. Nur mit großer Mühe hangelte ich mich von Semester zu Semester durch die Klausuren. Letztendlich konnte ich das Studium nicht abschließen und entschied mich daraufhin für eine Ausbildung. Mit dem Vorwissen aus dem Studium konnte ich alledings durchaus was anfangen. Sebastian – mein Ausbilder – entschied, dass ich die ersten Monate im Architecture Team verbringen würde. Während dieser Zeit lernte ich sehr viel, vorallem über das Thema Docker Container.
Architecture Team
Die ersten Wochen beschäftigte ich mich damit, die Programmiersprache Ruby zu lernen und machte mich mit den Ruby-Frameworks Rails und Sinatra vertraut. Danach arbeitete ich dann an dem NWS SaaS (Software as a Service) Projekt mit. Dabei lernte ich nach und nach, was es mit Microservices und Docker Containern auf sich hat, wie man damit interagiert und wie man eigene Docker Images erstellt und deren Setup automatisert. Im Prinzip ist die Technologie dahinter ähnlich zu der von Virtuellen Maschinen. Kurz gesagt, bieten Container eine einfache Möglichkeit Prozesse oder Programme abgeschottet vom Betriebssystem des Rechners, resourceschonend und plattformunabhängig zu betreiben. Viele Softwareunternehmen verwenden Container um bei der Entwicklung ihrer Softwareprodukte diese mit verschiedenen Konfigurationen und Betriebssystemen automatisiert zu testen. Aber auch in Produktion werden Container oft betrieben.
Bei NWS laufen die Apps jeweils in einem eigenen Container. Um zu gewährleisten, dass die Apps auch dauerhaft laufen und online erreichbar sind, benötigt man eine Orchestrierungsumgebung für die Container, die sich darum kümmert, dass die Container automatisch neugestartet werden wenn sie ausfallen. Wenn das ganze noch hoch verfügbar in einem Rechenzentrum über mehrere Server verteilt laufen soll, dann benötigt man eine Art Kernel für Computer Cluster wie z.B. Mesos. Kurz gesagt kümmert sich Mesos darum, die Ressourcen (CPU, Arbeitsspeicher etc.) der zum Cluster gehörigen Server zu managen und an Frameworks anzubieten, damit diese ihre Tasks darauf laufen lassen können. Marathon ist ein Framework für Mesos, das dazu verwendet werden kann, um Docker Container dauerhaft aktiv zu halten. Wie das genau geht und welche Features Marathon bietet, darauf werde ich hier nicht weiter eingehen. Ich habe das alles auch erst nach ein paar Monaten im Detail kennen gelernt. Meine Aufgabe im Architecture war vorerst, neue Produkte wie z.B. Rocket.Chat und Nextcloud als vorkonfigurierte Apps mit in die NWS Platform aufzunehmen. Die Prozedur dafür sah folgendermaßen aus: man schreibt ein Dockerfile, aus dem dann ein Image gebaut werden kann. Dieses benötigt ein Setupskript, das beim Start des Containers ausgeführt wird und den Container dahingehend vorbereitet, dass der Kunde sich nicht selbst um die Konfiguration kümmern muss. Außerdem wird darin definiert, welche Schritte bei der Aktualisierung auf eine neue Version der App ausgeführt werden sollen. Wenn das dann (endlich) funktioniert, wird die NWS Webseite angepasst, damit das Produkt von dort aus gestartet und mit Kundenspezifischen Daten konfiguriert werden kann. Verschiedene Microservices der SaaS Plattform müssen ebenfalls angepasst werden. Außerdem überlegt man sich Texte, die das Produkt beschreiben, bewerben und häufig aufkommende Fragen von Kunden beantworten. Danach schreibt man Tests, beseitigt Bugs und optimiert. Wenn dann die Produktpläne festehen und alles funktioniert, kann die App als Produkt angeboten werden. Das alles hat mir ziemlich viel Spaß gemacht. Mit der Zeit wird man auch schneller, wenn man mit der Prozedur und der Umgebung vertraut ist.
Nach ca. 7 Monaten stellte ich mich dann einer neuen Herausforderung. Sebastian fragte mich, ob ich einen Workshop über das Thema „Docker Container Orchestration“ anhand von Mesos Marathon halten möchte. Vermutlich etwas übereilt willigte ich ein. Als der Termin dann näher rückte, die Aufregung langsam stieg und ich mit der Ausarbeitung des Workshops beschäftigt war, wurde mir erst klar auf was ich mich da eingelassen hatte. Da es aber keinen Weg mehr zurück gab, hieß es Zähne zusammenbeissen und durch. Sebastian und meine Kollegen Achim und Tim unterstützten mich jedoch gut dabei und nachdem dann die Slides und die Handouts fertig waren hielt ich den Workshop auf der OSDC 2017 in Berlin. Auch wenn nicht alles komplett reibungslos ablief hoffe ich, dass die Teilnehmer doch das ein oder andere dabei gelernt haben. Damit endete dann meine Zeit im Architecture Team und ich wechselte in die Hosting Support Abteilung.
Hosting Support Team
Seit nicht ganz zwei Wochen bin ich nun im Hosting Support. Hier geht es hauptsächlich darum sich um Kundenanfragen bzw. Tickets zu kümmern. Da ich im Bereich Hosting bisher wenig Erfahrung habe, mache ich mich nach und nach mit den Tools und den Arbeitsabläufen vertraut. Das ein oder andere Ticket konnte ich jedoch schon bearbeiten. Vorallem Kundenanfragen zum Thema NWS fallen in meinen Aufgabenbereich, da ich mich hier bereits ganz gut auskenne. So bin ich auch im NWS Livechat als Ansprechpartner vertreten, das ist eine Art Helpdesk Chat auf der NWS Webseite der auf unserer NWS App Rocket.Chat basiert. Mit der wöchentlichen Serverwartung wurde ich auch schon vertraut gemacht. Dabei durchsucht man die Logs sämtlicher Kundenserver nach Fehlermeldungen und entscheidet ob für die jeweilig gefundenen Fehler Handlungsbedarf besteht oder nicht. Falls ja, eröffnet man Tickets und benachrichtigt gegebenefalls den Kunden darüber.
Berufsschule
Als Azubi besucht man bei NETWAYS natürlich auch die Berufsschule. Als Auszubildender Fachinformatiker für Systemintegration findet diese blockweise statt, was meiner Meinung nach auch Sinn macht, da man nicht täglich zwischen Schule und Betrieb wechseln muss. Nicole, die ebenfalls im September als Auszubildende Fachinformatikerin für Systemintegration bei NETWAYS angefangen hat, ist in der gleichen Klasse wie ich. Vom Studium ist mir einiges was an Stoff in der Berufsschule behandelt wird bereits bekannt und somit kam ich bisher ganz gut klar.
NETWAYS
Was mir hier besonders gut gefällt, ist das gute Arbeitsklima und dass man während der Arbeit stets nette und gutgelaunte Kollegen um sich hat. Getränke wie Kaffee, Säfte und Eistee sind kostenlos für alle verfügbar. Die Mitarbeiter organisieren untereinander LAN-Partys, die ab und an abends im Büro stattfinden. Außerdem finden jährlich Team Events der einzelnen Abteilungen und verschiedene Seminar-Wochenenden statt, bei denen der Spaß nicht zu kurz kommt und man die Möglichkeit hat, die anderen Kollegen besser kennenzulernen. Das Events Team von NETWAYS organisiert regelmäßig Konferenzen, wie z.B. die bereits erwähnte OSDC. Eine weitere Konferenz, an der ich letzten Jahr teilnehmen durfte, war die OSMC 2016 in Nürnberg, die sich mit dem Hauptgebiet von NETWAYS, dem Monitoring, beschäftigt. In den Talks der verschiedenen Konferenzen erfährt man viel über Open Source Themen und kann sich anschließend mit anderen Teilnehmern aus der ganzen Welt darüber austauschen.
Alles in Allem bin ich sehr happy bei NETWAYS zu sein und bin gespannt was mich künftig noch so erwartet. Ich hoffe ich konnte euch einen kleinen Einblick in meine Tätigkeiten als Azubi geben.

Gabriel Hartmann
Gabriel Hartmann
Senior Systems Engineer

Gabriel hat 2016 als Auszubildender Fachinformatiker für Systemintegrator bei NETWAYS angefangen und 2019 die Ausbildung abgeschlossen. Als Mitglied des Web Services Teams kümmert er sich seither um viele technische Themen, die mit den NETWAYS Web Services und der Weiterentwicklung der Plattform zu tun haben. Aber auch im Support engagiert er sich, um den Kunden von NWS bei Fragen und Problemen zur Seite zu stehen.

Azubis erzählen: Oktober 2016 Feu

This entry is part 14 of 17 in the series Azubis erzählen

mw-jmourek

Zuerst möchte ich kurz etwas zu meiner Person erzählen:

Mein Name ist Feu Mourek, ich bin 19 Jahre alt und verstärke die Development-Abteilung als Junior Developer.
Meine Freizeit verbringe ich zumeist damit mit meinen online Freunden Dota 2 zu zocken, mit meinen „Reallife“ Freunden durch die Käffer (Substantiv, pl: Dörfer) zu ziehen oder mich um mein Pferdchen zu kümmern.

Ich habe vor einem Jahr mein Abitur erlangt und habe danach Deutschland mit fliegenden Fahnen hinter mir gelassen, mit dem Ziel Europa zu erkunden…
Letztendlich habe ich dann ein halbes Jahr bei meinem Freund in Holland gewohnt, wo ich die Restzeit bis zur Ausbildung verbracht habe; mit kurzen Unterbrechungen wie um zum Bewerbungsgespräch nach Nürnberg tuckern.
Dort habe ich zu meiner großen Freude eine Stelle bei Netways bekommen und bin wieder permanent nach Deutschland gekommen und zu meinen Eltern zurück in die Bude gezogen (6 Stunden pendeln ist dann doch etwas viel, dann gehen die anderthalb Stunden von Scheinfeld aus schon eher)…

Im Zug treffe ich immer mal wieder auf alte Bekannte die sich auch in einer Ausbildung befinden und -wie man es so macht- haben wir unsere Betriebe verglichen und da ist mir erst so richtig aufgefallen wie gut ich es in der Netways-Family eigentlich habe!

Dort wurde ich direkt herzlichst Empfangen und durfte mit meinem Mitazubi Noah und den „alten Hasen“ aus dem Development Team mit auf das Dev-Retreat. Das coolste Wochenende seit langem!
Die Atmosphäre ist super gut, und es wird immer auf ein gutes Arbeitsklima und auf eine freundschaftlich-produktive Atmosphäre geachtet.
Angefangen mit einem Feierabends-Umtrunk am Freitag, LAN-Parties, gemeinsamen Team-Building Wochenenden mit Paintball (!) bis zu dem Dauerbuffet – Kaffeemaschine.

Nach der zweiwöchigen Einarbeitung in Linux/Unix, den Softwaretools, den von uns angebotenen Softwarelösungen und PHP bin ich jetzt sogar in der Lage kleinere Bugs in IcingaWeb2 zu fixen und mich nützlich zu machen 🙂
Es gibt viel zu lernen, aber es tut gut ständig gefordert zu werden und über sich hinauszuwachsen!

Jetzt aber zurück zur Arbeit –
Feu out!

Feu Mourek
Feu Mourek
Developer Advocate

Feu verbrachte seine Kindheit im schönen Steigerwald, bevor es sich aufmachte die Welt zu Erkunden. Seit September 2016 unterstützt es Icinga zunächst als Developer und seit 2020 als Developer Advocate, und NETWAYS als Git und GitLab Trainer. Seine Freizeit verbringt es hauptsächlich damit Video-, und Pen and Paper Rollenspiele zu spielen, sich Häuser zu designen (die es sich nie leisten können wird) oder ganz lässig mit seinem Cabrio durch die Gegend zu düsen.

Azubis erzählen: November 2015 Nadja

This entry is part 13 of 17 in the series Azubis erzählen

Name: Nadja Hein
Ausbildungsberuf: Kauffrau für Bürokommunikation
Abteilung: aktuell Finance und Administration
Lehrjahr: 3

Wahrscheinlich wird dies mein letzter Beitrag in dieser Serie sein, denn letzte Woche stand endlich meine Abschlussprüfung vor der Tür. Natürlich habe ich noch kein Prüfungsergebnis, aber ich gehe einfach mal davon aus, dass alles gut verlaufen ist. Jetzt möchte ich euch noch einen kleinen Rückblick über meine Ausbildung geben.
Bereits in meinem ersten Blogpost habe ich erzählt, dass ich nicht nur in einer Abteilung bei NETWAYS ausgebildet werde. Alles fing damals bei Finance und Administration an, wo meine Aufgaben unter anderem aus folgenden Tätigkeiten bestanden:
•    Die Reiseplanung für die Mitarbeiter
•    Der Kundenempfang bei NETWAYS – am Telefon oder direkt bei uns im Haus
•    Administration – Auftragsbestätigungen erstellen, Rechnungen fakturieren
•    Postein- und Postausgang
•    Materialbeschaffung
Ich durfte aber auch Vanessa in der Buchhaltung unterstützen und Ein- und Ausgangsrechnungen vorkontieren und verbuchen. Diese wurden später dann mit dem Gegenbuchen der Bank ausgeglichen. Wenn Rechnungen dann noch immer offen waren, mussten diese mit der Offenen-Posten-Liste abgeglichen und ausgeglichen werden. In diesem Jahr durfte ich sogar bei der Vorbereitung für den Jahresabschluss mitarbeiten. Hier habe ich  gemeinsam mit Vanessa alle notwendigen Unterlagen vorbereitet und konnte so einen noch tieferen Einblick in das Zahlenwerk und unsere Buchhaltung erlangen.
Danach ging es für mich zu Events & Training, wo ich mich in ein völlig anderes Fachgebiet einarbeiten durfte und bei der Vorbereitung unserer Schulungen und Konferenzen mitarbeiten konnte. Als ich das erste Mal bei Events & Training war, wurde ich gleich mit einer der wichtigsten internen Aufgaben betreut; die Planung der Weihnachtsfeier. Die Erwartungen sind hier sehr hoch, aber da rückblickend alle ganz viel Spaß hatten, war das Projekt wohl ein sehr guter Erfolg.
In den letzten zwei Monaten war ich ein zweites Mal bei Events & Training und da ging es dann um unser Konferenzflaggschiff, denn die 10. OSMC stand an. Zum einen konnte ich bei der Vorbereitung für unsere Abendveranstaltung helfen, war aber auch als Mitarbeiterin mit vor Ort und durfte die Teilnehmer herzlich willkommen heißen. Es ist wirklich unglaublich spannend zuzusehen wie über viele Monate alles im Detail geplant und vorbereitet wird.  Wenn man dann auf der Konferenz noch ein Lob der Teilnehmer bekommt, weiß man, dass sich die viele Mühe gelohnt hat.
Die dritte Abteilung in der ich einige Monate mitarbeiten durfte war der Vertrieb. Dort wurde ich so ziemlich mit allen Aufgaben vertraut gemacht, die für unseren vertrieblichen Prozess von Bedeutung sind. Von A wie Angebot bis V wie Versand war wirklich alles dabei. Egal ob die Beratung unserer Kunden vor Ort oder die Aufgabe unsere Hardware über den Online-Shop an den Mann oder natürlich die Frau zu bringen.
Nun sind die 2,5 Jahre fast vorbei und ich muss sagen die Zeit ist super schnell vergangen. Jetzt bin ich sehr gespannt was die Zukunft bringt, aber eines steht schon mal fest, sie liegt bei NETWAYS.
Ich weiß auch schon wo und zwar genau dort wo alles angefangen hat. Direkt nach der mündlichen Prüfung werde ich die Abteilung Finance & Administration wieder tatkräftig unterstützen.

Nadja Myers
Nadja Myers
Manager Finance & Administration

Nadja hat bei NETWAYS eine Ausbildung zur Kauffrau für Bürokommunikation absolviert. Als Manager Finance & Administration sorgt sie jetzt gemeinsam mit ihrem Team für die Gewährleistung des internationalen Buchhaltungsmottos "Keine Buchung ohne Beleg". In ihrer Freizeit genießt sie die Zeit mit ihrem verschmusten Kater Watson (benannt nach Sherlock Holmes' Partner Dr. Watson). Außerdem reist Nadja sehr gerne mit ihrem Mann nach Italien um dort die schöne Landschaft und die kulinarischen Köstlichkeiten zu genießen.

Azubis erzählen: September 2015 Alexander

This entry is part 12 of 17 in the series Azubis erzählen

Name: Alexander Klimov
Ausbildungsberuf: Fachinformatiker für Anwendungsentwicklung
Abteilung: Development
Lehrjahr: 2

C hat keine DLLs, sondern nur Headers“, sagte einst einer meiner ehemaligen Berufsschulklassenkollegen.
Solch grob fahrlässige fachbezogene Aussagen gebe ich nicht von mir – zumindest seit ich bei NETWAYS ausgebildet werde. Das Gegenteil des obigen Zitats habe ich hier nicht gelernt, dafür aber einige andere sehr interessante Sachen, die ich diesmal vorstellen will.

Git

Wer von den Fachinformatiker-Auszubildenden kennt das nicht: In der Berufsschule wird im Fach Anwendungsentwicklung und Programmierung ein Programm schrittweise weiterentwickelt und es wird einem nahe gelegt, vor jeder größeren Erweiterung des Programms den Quellcode zu sichern, um ggf. auf einen älteren Stand zugreifen zu können. Für diesen Zweck ist die Versionskontrolle Git viel besser geeignet – nicht zuletzt auch weil das Pflegen von vielen Versionen viel „attraktiver“ ist. Ich hatte zu meinem Glück immer meinen Laptop dabei und kaum ein Programm, dessen Entwicklung nicht auf eine Schulstunde beschränkt war, ohne Git entwickelt.

$ mkdir AWP/Parkautomat && cd $_
$ git init
$ editor parkautomat.cpp && git add $_
$ git commit -m "Implementiere einen übertrieben übertriebenen Parkautomaten"
$ editor parkautomat.cpp && git add $_
$ git commit -m "Statte den Parkautomaten mit Funktionalität, die kein Mensch braucht, aus"

Zuletzt hat mich ein Kollege das Bisect-Kommando gelehrt. Dieses Wissen habe ich natürlich guten Willens bei nächstbester Gelegenheit weitergegeben.

Vim

Als ich bei NETWAYS angefangen habe, habe ich ernsthaft noch den Texteditor Nano verwendet – mit Ausreden wie „er genügt meinen Ansprüchen“. Aber kaum dass mir ein schönes neues Werkzeug in die Hände fällt, lasse ich den alten, primitiven Kram hinter mir. Auch in der Berufsschule hat der Editor gute Dienste geleistet. Es fiel mir viel leichter, damit zu arbeiten, als mit dem an der Schule propagierten Visual Studio. (Da liest mein Banknachbar in der 1. AWP-Stunde die 5-10-seitige bilderreiche Einführung in das letztgenannte Programm, während ich das zu schreibende Hallo-Welt-Programm schon längst mit Vim abgetippt und mit GCC kompiliert habe. Und – wer hätte das gedacht 😉 – es funktionierte!) Auch ich gehöre mittlerweile zu den Programmierern, die an ihrer .vimrc hängen.

$ cat ~/.vimrc
set bg=dark nu mouse=a ai et sts=4
sy on
nmap <F4> :qa<CR>
language de_DE.utf8
highlight Normal guibg=Black guifg=White

Puppet

… ist aus einer komplexen und automatisierten IT-Welt wie unserer nicht wegzudenken. Ob viele gleichartige Systeme aufwandarm aufgesetzt werden müssen oder die Entwicklungsumgebungs-VM eines Projektes mit einer Komanndozeile einsatzbereit sein muss – Puppet ist des Systemadministrators Freund und Helfer. Alleine die verglichen mit der konventionellen Bash verkürzte, intuitive und anti-redundante schreibweise für häufig verwendete Komponenten machen die Sprache attraktiv. Die Möglichkeit, Abhängigkeiten der Komponenten untereinander explizit zu definieren, nötigt bei komplexeren Beschaffungen der Systeme regelrecht zur Nutzung von Puppet. Im Rahmen eines Umbaus von Icinga Web 2 habe ich den Aufbau und die Funktionsweise von Puppet kennen gelernt. Mit Hilfe dieses Wissens habe ich für das jüngste von mir betreute Projekt von Grund auf Puppet-Manifeste geschrieben, um mir und anderen die Entwicklung zu erleichtern. Folgendes Beispiel installiert den Apache-Webserver auf Debian/Ubuntu, Fedora/RHEL, openSUSE/SLES und darauf basierenden Systemen:

$apache = $osfamily ? {
  'Debian' => 'apache2',
  'Suse'   => 'apache2',
  'RedHat' => 'httpd',
}
package { $apache:
  ensure => latest,
}
-> service { $apache:
  ensure => running,
  enable => true,
}

SQL

Angesichts des hohen Datenaufkommens, das Anwendungen heutzutage zu bewältigen haben, sind relationale Datenbanken unverzichtbar. Die Vielzahl unterschiedlicher Datenbankmanagementsysteme fordert einen möglichst großen gemeinsamen Nenner der Abfragesprachen. Dieser wurde mit SQL 1986 geschaffen und ist – nicht nur meiner Meinung nach – absolute Pflichtlektüre eines jeden werdenden Fachinformatikers. Im Rahmen der Entwicklung einer Stammdatenverwaltungssoftware bin ich dieser interessanten Thematik gelehrt worden – und auch in der Berufsschule soll das noch auf mich zukommen. Einer der größten Nutzen relationaler Datenbanken ist die Möglichkeit, Datensätze nur ein mal speichern zu müssen und mehrfach darauf verweisen zu können. Folgendes Beispiel ist eine Abfrage der Klassen und -leitungen von Schülern:

SELECT sn.name, k.name, ln.name
FROM schueler AS s
INNER JOIN klasse AS k ON k.id=s.klasse_id
INNER JOIN lehrer AS l ON l.id=k.lehrer_id
INNER JOIN natuerliche_person AS sn ON sn.id=s.natuerliche_person_id
INNER JOIN natuerliche_person AS ln ON ln.id=l.natuerliche_person_id;

Die Personalien von Schülern und Lehrern und evtl. anderen natürlichen Personen werden hierbei – da gleichartige Datensätze – in einer Tabelle gespeichert. Da bspw. ein Lehrer mehrere Klassenleitungen haben kann, wird er nur ein mal gespeichert und über lehrer.id referenziert, um Redundanz zu vermeiden.

Fazit

Lehrjahre sind zwar keine Herrenjahre, können aber eine große Bereicherung sein – vor allem für die kommenden Herrenjahre. Und mein vergangenes Lehrjahr hat gezeigt: Sich reinzuhängen lohnt sich – auch bei den unbeliebten Berufsschulfächern.

Alexander Klimov
Alexander Klimov
Senior Developer

Alexander hat 2017 seine Ausbildung zum Developer bei NETWAYS erfolgreich abgeschlossen. Als leidenschaftlicher Programmierer und begeisterter Anhänger der Idee freier Software, hat er sich dabei innerhalb kürzester Zeit in die Herzen seiner Kollegen im Development geschlichen. Wäre nicht ausgerechnet Gandhi sein Vorbild, würde er von dort aus daran arbeiten, seinen geheimen Plan, erst die Abteilung und dann die Weltherrschaft an sich zu reißen, zu realisieren - tut er aber nicht. Stattdessen beschreitet er mit der Arbeit an Icinga Web 2 bei uns friedliche Wege.

Azubis erzählen: Juli 2015 Jean

This entry is part 11 of 17 in the series Azubis erzählen

Name: Jean-Marcel Fach
Ausbildungsberuf: Fachinformatiker für Anwendungsentwicklung
Abteilung: Icinga2 core development
Lehrjahr: 1

Nach einer längeren Berufsschul- und Urlaubsphase kam ich wieder in Firma, dort liefen schon die Vorbereitungen für Icinga 2.4. Nach einem ein-wöchigem Workshop war grob umrissen wie der Arbeitsplan für die nächsten paar Monate aussieht. Als erster Meilenstein gilt der HTTP Server, welcher Anfragen dieses Schemas entgegennimmt und antwortet. Einen Teil der Information machen die URLs auf die der Server angesprochen wird aus, für diese einen Parser zu schreiben wurde meine Aufgabe.
Nun sind *normale* URLs wie „https://www.netways.de/“ allen bekannt und jedem der mal genauer hin geschaut hat wird aufgefallen sein, dass sich bei allen Seiten im Internet ein Muster erkennen lässt. Dieses URL-Muster wurde zuerst im RFC 1738 und später im RFC 3986 genauer beschrieben, diese 60 Seiten Dokument lassen sich grob so zusammenfassen: Das Muster einer URL ist immer `Schema:Autorität/Pfad?Anfrage#Fragment`. Nun haben die einzelnen URL-Teile wieder eigene Regeln. Etwa bedeutet ein ‚//‘ in der Autorität, dass ein Hostname zu erwarten ist. Oder ein ‚gopher‘ als Schema ändert nochmal mehr. Es ergeben sich so eine Reihe von URLs die gültig aussehen, es aber nicht sind und anders herum, aber dazu später mehr.
Im Bezug auf die Implementation, dachte ich zuerst an eine Zustandsmaschine: aus dem vorherigen Zeichen ergibt sich, wie das nächste zu verstehen ist. Leider konnte ich mich mit keiner Implementation in c++ so richtig anfreunden. Ein riesiges switch-case Konstrukt fällt aus da es eben riesig und daher unübersichtlich und hässlich würde. Und die Alternative mit Objekten schien zu dieser Zeit den Rahmen zu sprengen, würde mir aber dieselbe Aufgabe noch einmal gestellt werden, würde ich aber diesen Weg wählen. So fiel die Wahl am Ende, nach all dem Rumprobieren, doch auf eine sequentielle Abarbeitung der fünf Teile. Da die URLs nur http oder https sein werden, konnten viele Probleme umgangen werden.
URL tests
Die tatsächliche Implementation war dann relativ einfach, doch dann kamen die Randfälle. „/“ ist gültig und „/??[]=?#?=@“ auch, wenn sie auch unsinnig sind. Daher mussten Tests geschrieben werden. Und dann wurde so lange geschraubt, bis alle Tests erfolgreich durchgeführt wurden.
Der Code findet sich wie immer im Icinga 2 git.