Seite wählen

NETWAYS Blog

Perl statt PHP und Python

Wir hatten schon das Thema ja mit Python und auch mit PHP, zum Abschluss möchte ich noch die Möglichkeit mit Perl aufzeigen.
Darf ich wieder vorstellen: Mojolicious

A next generation web framework for the Perl programming language.

Die Installation erfolgt ganz einfach:

$ curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org -n Mojolicious

Mit dem Programmcode:

use Mojolicious::Lite;
get '/' => {text => 'Hello, World!'};
app->start;

Die Ausführung erfolgt dann mit:

$ morbo hello.pl

Wie auch bei den anderen Microframeworks, läuft alles recht schnell und einfach von der Hand.
Wer mehr Informationen zu Mojolicious braucht, der wird bei Perl-Magazin fündig 😉
An der Stelle, viel Spaß damit!

PHP statt Python

Vor nicht all zu langer Zeit wurde in dem Blog Post (Python statt PHP) das Python Flask Microframework kurz vorgestellt und um PHP jetzt nicht im Regen stehen zu lassen, habe ich mich kurz schlau gemacht und was vergleichbares fürs PHP gefunden.
Darf ich vorstellen: Slim, das PHP Microframework
Damit lässt sich recht schnell was einfaches bauen und ist auch recht einfach aufgesetzt, aber schaut selbst:
Install & Download

composer require slim/slim

Programmcode

get('/hello/:name', function ($name) {
    echo "Hello, $name";
});
$app->run();

Das wars auch schon und jetzt viel Spaß damit.

Icinga Web 2 – Barrierefreiheit im HTML

Nachdem der Kollege Johannes Meyer letztens über die Barrierefreiheit im Icinga Web 2 (Icinga Web 2 – Das kann Jeder) schon berichtet hat, so würde ich gerne ein paar Beispiele auf der HTML Ebene aufzeigen, was nun barrierefrei ist und was nicht.
Ein klassischer Fall sind die IMG Tags, viele bieten keine Text-Alternativen an, somit ist z.B. jemandem mit einer Sehbehinderung nicht klar, was da auf dem Bild drauf ist oder was es repräsentieren soll.
Falsch: <img src="xyz.jpg" />
Richtig: <img src="xyz.jpg" alt="Icinga Web 2 Logo" />
Perfekt: <img src="icinga_web2_logo.jpg" alt="Icinga Web 2 Logo" />
Und wenn wir auf das Thema Semantik angehen wollen, so ist z.B. allein durch die Schriftgröße nicht sichergestellt ob es sich um eine Überschrift handelt oder nicht.
Falsch: <span style="font-size: 150%;">Überschrift</span>
Richtig: <h1>Überschrift</h1>
Wie gesagt, das sind jetzt nur ein paar Beispiele und es gibt noch viele weitere Sachen wie man etwas macht und nicht macht um die Barrierefreiheit zu verbessern bzw. zu gewährleisten und genau um solche Sachen und viele weitere kümmern wir uns gerade.

Icinga Web 2 – Hello World Modul

Auf der diesjährigen OSMC haben wir es ja alle mitbekommen, dass Icinga Web 2 komplett modular aufgebaut ist, nun würde ich gerne etwas näher darauf eingehen, wie schnell man doch so ein Modul erstellen kann.
Also fangen wir doch mal mit so einem typischen Hello World Modul an, welches die bestehende Navigation erweitert und eine eigene Seite mit Inhalt bereitstellt.
Zunächst erstellen wir einen Ordner und benennen den nach dem Modulnamen:

$ mkdir helloworld

Voilà, schon haben wir unseren ersten genialen Modul erstellt, der zunächst gar nix kann und macht, aber es ist ein Modul. Ihr glaubt es mir nicht? Dann schiebt doch den soeben erstellten Ordner, pardon, ich meine Modul helloworld zu den bereits bestehenden Modulen von Icinga Web 2 und ruft danach die Module Übersicht (System -> Modules) im Web Interface auf!
modules
Tja, ich habs ja gesagt, schnell und einfach 😉
Jetzt wollen wir natürlich unseren Modul etwas näher beschreiben und auch eine Version verpassen, auch das geht ziemlich leicht von der Hand. Dazu erstellen wir in dem Modul Ordner eine module.info Datei und packen folgenden Inhalt rein:

Module: helloworld
Version: 0.0.1
Description: Hello World module
 This is a simple Hello World demo module.

Die Werte sind selbsterklärend, wie man sieht.
module-info
Als nächstes wollen wir dem Modul ein eigenes Navigations-Punkt verpassen, dazu legen wir eine configuration.php Datei an mit dem folgendem Inhalt:

menuSection('Hello World', array(
    'url' => 'helloworld'
));

Wenn wir jetzt den Modul helloworld enablen, erscheint nach einem Reload in der Navigation rechts ein weiteres Punkt „Hello World“.
module-nav
Die Url ./icingaweb/helloworld ist natürlich noch nicht erreichbar, um dies zu ändern müssen wir zunächst einen Controller erstellen der sich dafür verantwortlich fühlt 😉
Bevor wir aber einen Controller erstellen, müssen wir zunächst für die folgende Ordner Struktur sorgen:
module-folder-structure
Dies ist eine einfache Konvention, welcher man befolgen sollte, der Rest ist Magic.
Nun erstellen wir eine IndexController.php Datei unter ./helloworld/application/controllers mit folgendem Inhalt:


Was uns jetzt noch fehlt, ist die View für die indexAction vom IndexController, auch das ist ziemlich einfach, wir legen unter ./helloworld/application/views/scripts einen weiteren Ordner index (Name des Controllers) an und packen da eine index.phtml (Name der Action) rein.
Und damit wir jetzt überhaupt etwas zu sehen bekommen, packen wir den folgenden Inhalt in die index.phtml rein:

Hello World

Fertig! Jetzt noch den Navigations-Punkt "Hello World" im Web Interface ansteuern und sich über sein erstes Modul freuen 😉
module-final
Voilà, war doch ziemlich einfach, oder?
Natrülich war das noch nicht alles, es gibt noch sehr sehr sehr viel mehr zu erzählen über die Module und die netten Features die man so mit Icinga Web 2 bauen kann, aber darüber erzähle ich oder meine Kollegen ein anderes mal 🙂
Außerdem, für die, die es noch nicht kennen, würde ich empfehlen sich die Slides zu Icinga Web 2 kann mehr von dem Kollegen Thomas Gelf anzuschauen!
An der Stelle: Let's build and share modules!

PHP SPL: Queue

Wer mit PHP eine performante Warteschlange realisieren will, dem sei es mit einer SplQueue geholfen, die ebenfalls ab  der PHP Version 5.3.0 vorhanden ist.
Die Funktionsweise an sich ist relativ einfach, die SplQueue arbeitet nach dem FIFO Prinzip und implementiert die SplDoublyLinkedList über die bereits Matthias einen Beitrag verfasst hatte.
Die wichtigsten Methoden sind:

  • enqueue() – Element ans Ende der Warteschlange hinzufügen.
  • dequeue() – Das Erste Element aus der Warteschlange herausnehmen.

Folgendes Beispiel soll die Nutzung verdeutlichen:

enqueue('research');
$queue->enqueue('planning');
$queue->enqueue('development');
$queue->dequeue();
$queue->dequeue();
echo $queue->top() . PHP_EOL; // development

Und da wir bei einer SplQueue über den ArrayAccess-Interface verfügen, können wir die Elemente auch nach dem folgenden Schema hinzufügen.

dequeue();
$queue->dequeue();
echo $queue->top() . PHP_EOL; // development

Ein praktischer Einsatz von SplQueue wäre mit Sicherheit es in PHP Daemons zu verwenden, wo auf Performance und geringen Speicherverbrauch Wert gelegt wird.
Wer mehr Beispiele haben will oder herausfinden will wo die SplQueue alles verwendet wird, kann sich durchs GitHub durchstöbern.