Azubis erzählen: Juli 2015 Jean

This entry is part 8 of 12 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.

Jean Flach
Jean Flach
Developer

Geboren und aufgewachsen in Bamberg, kam Jean (das "-Marcel" ist still) nach einem Ausflug an die Uni, als Azubi zu NETWAYS. Dort sitzt er seit 2014 im Icinga 2 Core Entwicklungsteam.

Google-Analytics in Prestashop richtig verwenden

Seit nun fast 4 Monaten betreiben wir unseren Online-Shop nicht mehr mit Magento, sondern mit PrestaShop. Dies bringt bereits ein Google-Analytics Plugin mit. Man gibt nur die Web-Property-ID ein und los geht’s.
Nachdem wir die Daten nun auswerten wollten, sind uns zwar die Nutzerzahlen zu den Vormonaten plausibel erschienen, jedoch waren alle Aufrufe in die Systemeigenen URLs gepackt.
So waren alle Produktaufrufe in /product und alle Kategorieklicks in /category gebündelt eingeordnet. Dies nützt ein natürlich wenig, wenn man genau sehen will, welches Produkt sich gut verkauft und welches nicht.
before
Mit wenigen Änderungen am Sourcecode des Google-Analytics Moduls behebt man jedoch diesen “Fehler”:

  • auf den Shopserver verbinden
  • in das Verzeichnis von PrestaShop wechseln
  • in das Verzeichnis modules/ganalytics/ wechseln
  • die Datei ganalytics.php vorher sichern
  • ganalytics.php mit einem Editor der Wahl öffnen
  • folgenden Abschnitt suchen
$file = str_replace(array('.php', '-'), '', basename($_SERVER['SCRIPT_NAME']));
  • um folgenden Code ergänzen
if($file == "category" ||
$file == "product" ||
$file == "search" ||
$file == "cms" ||
$file == "index") {
$file = $_SERVER["REQUEST_URI"];
}
  • noch einmal kontrollieren
$file = str_replace(array('.php', '-'), '', basename($_SERVER['SCRIPT_NAME'])); 
if($file == "category" ||
$file == "product" ||
$file == "search" ||
$file == "cms" ||
$file == "index") {
$file = $_SERVER["REQUEST_URI"];
}
  • speichern
  • fertig

after
Schon am nächsten Tag sammelt Google-Analytics die richtigen URLs ein.

Georg Mimietz
Georg Mimietz
Lead Senior Systems Engineer

Georg kam im April 2009 zu NETWAYS, um seine Ausbildung als Fachinformatiker für Systemintegration zu machen. Nach einigen Jahren im Bereich Managed Services ist er in den Vertrieb gewechselt und kümmerte sich dort überwiegend um die Bereiche Shop und Managed Services. Seit 2015 ist er als Teamlead für den Support verantwortlich und kümmert sich um Kundenanfragen und die Ressourcenplanung. Darüber hinaus erledigt er in Nacht-und-Nebel-Aktionen Dinge, für die andere zwei Wochen brauchen.

NETWAYS Online Store – mit PrestaShop

Einige werden sich bereits gefragt haben, welche Shop-Software wir in unserem neuen Store eigentlich verwenden. Die Antwort ist PrestaShop, eine elegante Open-Source Lösung aus einer französischen Softwareschmiede, welche  inzwischen schon über 115.000 aktive Shop-Systeme zählt. Nun haben wir sie auch und sind wirklich positiv überrascht. PrestaShop ist natürlich kostenlos und bringt viele wirklich tolle Features mit sich. Was noch nicht vorhanden ist kann relativ einfach mit (meistens) kostenfreien Plugins nachgerüstet werden. Der alte NETWAYS-Online-Store lief übrigens mit der weitaus bekannteren Software Magento.
Warum hat NETWAYS plötzlich PrestaShop im Einsatz?
Unser alter Shop hatte wirklich ein Redesign nötig, lange haben wir überlegt, das bestehende System nochmal komplett aufzuarbeiten, haben uns letztendlich dagegen entschieden. Aktuell kursiert das Gerücht, die Magento Community Edition wird nicht mehr weiter entwickelt, doch gerade bei einem Online-Shop mit sensiblen Kundendaten ist ein stets aktuelles und sicheres System sehr wichtig. Deshalb fiel die Entscheidung auf eine Migration auf ein neues System. Nach ein paar Vergleichen, mit spezieller Gewichtung auf grafische Anpassbarkeit, B2B-Shop Funktionalität und natürlich Open-Source ist die Wahl dann auf Presta gefallen.
War der Umzug kompliziert?
Wir haben uns außerdem dazu entschieden, die komplette Produktpalette anstatt sie einfach nur zu importieren, neu anzulegen, so wird eine gewisse Aktualität der Produkte sichergestellt. Außerdem wurden die Kundendaten aus unserem alten System exportiert und in das neue System importiert, dabei haben wir jedem Kunden ein eigenes, nahezu unknackbares Kennwort mit 32 Zeichen hinterlegt. Die Kunden wurden per Mail aufgefordert, ein neues Passwort anzufordern und dieses dann zu ändern. In Summe war die Migration der Daten zwar von der Menge her viel, jedoch war der Aufwand mit der richtigen “Taktik” überschaubar.
Wieso stimmen die Links mit dem alten Shop überein?
PrestaShop ist von Haus aus, was die Links angeht relativ einfach gestrickt und kann einen Artikel-Link im Normalfall nur so darstellen: http://shop.netways.de/28-produkt.html. Was natürlich problematisch ist, da wir unsere Links mit allen Unterkategorien darstellen möchten z.B. so: http://shop.netways.de/alarmierung/gsm-modem-ethernet/multi-tech-smsfinder.html. “alarmierung” ist die erste Unterkategorie und “gsm-modem-ethernet” die Unterkategorie von Alarmierung, dies ermöglicht unseren Kunden stets einen guten Überblick, in welcher Kategorie sie sich gerade befinden. Realisiert haben wir diese Link-Erzeugung mit dem AddOn URL Rewriting +.
Was ist so besonders an PrestaShop?
PrestaShop fand ich von Anfang an sehr interessant, z.B. die Möglichkeit von einem Produkt mehrere Varianten anzulegen, dadurch wirkt der Shop sehr aufgeräumt und erleichtert dem Kunden die Auswahl der richtigen Lösung. Anhand des Beispiels unserer SecurityProbe sieht man sehr deutlich das Feature der Variantenauswahl. So kann der Kunde auswählen, ob das Produkt eine SMS-Alarmierung mitbringen soll und ob und in welcher Anzahl Anschlussmöglichkeiten für potentialfreie Kontakte vorhanden sein sollen. Der Preis sowie die Artikelnummer werden automatisch angepasst. Magento sollte dieses Feature zwar auch mitbringen, jedoch funktionierte das nicht wirklich.
Außerdem besticht PrestaShop durch viele tolle Designs (welche zum Teil auch wieder Geld kosten) und tollen Effekten z.B. dem Ajax-basierten Warenkorb. Demnächst wird Version 5 von Presta angeboten, dieses besticht dann mit einer vollständigen B2B-Integration, sowie einem überarbeitetem Backend und reichlich neuen Features.
Welche Plugins sind verfügbar?
Eigentlich gibt es für alle denkbaren Anforderungen Add-Ons, sei es nur das PayPal Zahlungsmodul, über die Möglichkeit den Smarty-Cache zu leeren, URL-Rewrites, Slideshows usw. ..
Ist der neue Shop schon online?
Ja, der neue Shop ist seit Anfang August online und muss seither dem Ansturm unserer Kunden standhalten. Bisher können wir von keinen Ausfällen oder Schwächen berichten. Zu sehen ist unserer Shop rund um die Uhr unter http://shop.netways.de

Georg Mimietz
Georg Mimietz
Lead Senior Systems Engineer

Georg kam im April 2009 zu NETWAYS, um seine Ausbildung als Fachinformatiker für Systemintegration zu machen. Nach einigen Jahren im Bereich Managed Services ist er in den Vertrieb gewechselt und kümmerte sich dort überwiegend um die Bereiche Shop und Managed Services. Seit 2015 ist er als Teamlead für den Support verantwortlich und kümmert sich um Kundenanfragen und die Ressourcenplanung. Darüber hinaus erledigt er in Nacht-und-Nebel-Aktionen Dinge, für die andere zwei Wochen brauchen.

Jasper Reporting – Inhalte verlinken

Jasper-ReportingVor einigen Tagen hatten wir schon das Thema Diagrammintegration angesprochen. Auf Basis dieses Beispiels beschreiben wir in diesem Post die Integration von Links in das Diagramm. Die Integration von URLs macht immer dann Sinn, wenn entweder eine aufrufbare Applikation die Basis der Reportingdaten erweitern kann oder wie im Beispiel von Nagios der Einstieg für die detaillierte Betrachtung durch den Report gesteuert wird.
post10_screen1Die Einstellung der Basis-URL erfolgt im Kontextmenü des Diagramms im Bereich “Section Hyperlink”. Hyperlink target bezeichnet das entsprechende Zielfenster des Links und Hyperlink type ergiebt sich aus der Auswahl der Parameterbefüllung.
Wie in iReport üblich erfolgt die Parametrisierung mittels Expression, welche in unserem Beispiel wie folgt lautet:

&http://guest:guest@nagios.demo.netways.de/nagios/cgi-bin/status.cgi?style=detail&hostgroup=" + $F{alias}

Die Übermittlung von Username und Passwort in einem Produktivsystem ist mit Sicherheit problematisch, vereinfacht jedoch den Aufruf des Nagios-Demosystems erheblich.
Als Tooltip kann ebenfalls eine Expression anlegen, welche die Ausgabe verschönert:

&Go to hostgroup in Nagios: & + $F{alias}

post10_screen2Auf die verschiedenen Textelemente des Reports, wie z.B. den Hostnamen sind Hyperlink auf die gleiche Art und Weise via Kontextmenü hinzufügbar. Auch die Verknüpfung mit anderen Reports ist möglich und Jasper kann so diverse Berichte miteinander verschachteln. Das Ergebnis kann sich auf jeden Fall sehen lassen.
Den entsprechenden Report findet ihr natürlich auf netways.org und unserem Demo-System.
Der nächste Post gibt eine Einführung in die Erstellung dynamischer Parameter.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.

Jasper Reporting – Upload des Reports

Jasper-ReportingUm den im letzten Post erstellten Bericht auch anderen Anwendern zur Verfügung zu stellen, muss dieser auf den Server geladen werden. Der Upload kann entweder über das Webinterface oder was aus meiner Sicht komfortabler ist, über iReport erfolgen. Der Upload erfolgt via HTTP und ist somit auch gut über Firewallgrenzen hinweg durchführbar.
Wir starten mit der Anlage einer neuen Serververbindungpost4_screen1. Hierfür wird lediglich die URL des Servers sowie Username und Passwort des berechtigten Benutzers benötigt. Default-User des JasperServers ist jasperadmin mit gleichlautendem Passwort.
Nach Speicherung kann sofort auf die Ordner des Servers zugegriffen und entsprechende Aktionen via Kontextmenü ausgeführt werden.
post4_screen2
So erfolgt dann auch gleich die Anlage der neuen Report-Unit, was den logischen Container des Reports mit Bildern, Datenbankverbindung und möglichen Parametern beschreibt.
Zur Angabe des Report Namens und einer möglichen Beschreibung muss noch die entsprechende Datenbankverbindung konfiguriert werden. Hier besteht die Möglichkeit eine bereits im Repository definierte Verbindung auszuwählen oder entsprechend anzulegen. Für den Test empfiehlt sich die Anlage einer eigenen Verbindung durch Kopie der lokalen Einstellungen.
post4_screen3
Nach Speicherung des Reports ist dieser sofort im Webinterface sichtbar und kann dort via Klick gestartet werden. Hier kann das Ergebnis als PDF heruntergeladen werden.
Der nächste Post widmet sich der optischen Verschönerung des Reports um ihn auch für die Weitergabe an Dritte fit zu machen.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.