Frisch zur CeBIT: Vorschau auf Icinga Web 2

Bald ist es soweit und Icinga kann sein brandneues Webinterface veröffentlichen. Zur CeBIT wurden hier viel Blut, Schweiß und Tränen hinterlassen um einen gewaltigen Schritt nach vorne zu unternehmen. Eine Demo kann man sich bei uns am Stand ansehen. Allerdings möchte ich euch ein Bilder dennoch nicht vorenthalten:

Um selbst in den Genuss zu kommen benötigt man lediglich Git und Vagrant und kann sich seine eigenen virtuelle Demo Maschine selbst bereitstellen:

$ git clone git://git.icinga.org/icingaweb2.git
$ cd icingaweb2/
mhein@ws-mhein02~/Temp/icingaweb2 [git:master]
$ vagrant up

Die Maschine installiert sich selbst weshalb man ein wenig Zeit mitbringen sollte. Danach ist das Webinterface unter folgender URL erreichbar: http://localhost:8080/icingaweb (Login: jdoe/password)
Natürlich zeigen wir das euch gerne auf unserem NETWAYS Stand (Halle 6 Stand E16 (319)).

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Brainstorming, aber bitte alleine!

Alex Osborn, ein Werbefachmann aus den USA veröffentlichte in den 50er Jahren folgende Idee: Brainstorming in der Gruppe führt zu geistigen Höchstleistungen. Osborn nahm an, dass Menschen in einer Gruppe mehr, und vor allem bessere Ideen hervorbringen. Dafür legte er bestimmte Regeln fest. Eine davon: Übe keine Kritik [1].
Diese Praktik der Ideenfindung wurde mittlerweile in einigen Studien überprüft, mit einem Interessanten Ergebnis: Keine der Studien konnte einen positiven Beleg dafür erbringen. Eher das Gegenteil war der Fall. In einer Gruppe von 2 Personen herrscht ungefähr Gleichstand zwischen Einzel- und Gruppenarbeit. Je größer die Gruppe ausfällt, umso verheerender fällt der Unterschied aus. Osborn ging damals von einer idealen Gruppengröße von 12 Personen aus. Das Ergebnis für ein Brainstorming dürfte katastrophal ausfallen.
Das eigentliche Problem: Die Gruppenmitglieder stehen sich selbst im Weg. Ideen entwickeln und gleichzeitig Zuhören ist eine Doppelaufgabe, die das Gehirn schwer bewerkstelligen kann. Dies konnte mit verschiedenen Experimenten nachgewiesen werden [2].
In einem Experiment wurden die Teilnehmer zur Ideenfindung aufgerufen:

  • Teil 1: Jeder durfte nur sprechen, wenn kein anderer sprach
  • Teil 2: Jeder durfte einfach drauf lossprechen

Die Gespräche wurden durch ein Mikrophon aufgezeichnet. Das Ergebnis: Im zweiten Teil war die Produktivität genau so hoch wie bei der Einzelarbeit, während der 1. Teil in der Produktivität deutlich schlechter abschnitt.
Im Alltag und in der Wirtschaft hält sich allerdings hartnäckig die Illusion, dass klassisches Brainstorming die beste Methode sei, um Ideen zu entwickeln. Schuld daran ist vermutlich der individuelle Vergleich: Natürlich produziert eine Gruppe mit 5 Teilnehmern mehr als ein einzelnes Individuum (subjektiv gesehen). Aber: Produziert eine Gruppe mit 5 Personen wirklich mehr Ideen als 5 Individuen in Einzelarbeit?
Abhilfe schaft hier z.B. die verstaubte Metaplan-Methode [3]. Jeder Teilnehmer schreibt seine Ideen auf eine Karte und hängt diese an die Wand. So findet ohne Blockade eine gegenseitige Befruchtung statt. Anschließend können die Ideen gemeinsam besprochen und geordnet werden.

[1] http://de.wikipedia.org/wiki/Brainstorming
[2] Prof. Dr. Michael Diehl, Universität Mannheim
[3] http://de.wikipedia.org/wiki/Pinwandmoderation

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Security Token für Jedermann: Der YubiKey

black_singleWie schützt man seine Daten am besten? Mit starken Passwörtern und genügend Entropie!
http://xkcd.com/936/
Besseren Schutz bieten zusätzliche Sicherheitsmerkmale wie 2-Faktor-Authentifizierung. Immer mehr Dienste bieten die Möglichkeit, sich mit einem zusätzlichen Einmalpasswort anzumelden. Dieses wird entweder auf einem anderen Medium dem Benutzer zugänglich gemacht (SMS, Abruf) oder wird von einem Token generiert. Tokens sind besonders spannend, da man jederzeit die Kontrolle darüber besitzt und unabhängig von Übertragungsproblemen ist (z.B. wenn man sich im Ausland aufhält). Nachteil: Teuer (z.B. SecurID) oder für Privatanwender zu aufwendig.
Mittlerweile bietet die Firma Yubico einen Token für $25 an. Günstig und viel Ausstattung. Die kleine Kunststoffplatte mit USB Kontakten ist wasserdicht und relativ unverwüstlich. Das Gerät wird vom System als Tastatur wahrgenommen und verschickt auf Knopfdruck verschiedene Strings, die zur Authentifizierung herangezogen werden können.
Der YubiKey kann selbst programmiert werden und unterstützt folgende Modi:

  • OTP (OTP YubiCloud oder OATH-HOTP)
  • Statisches Passwort mit 32 Zeichen
  • Challenge-Response

Diese Modi können in zwei Slots auf den Token programmiert werden. Die Slots werden durch den Druckknopf angesprochen: Weniger als 1,5 Sekunden für Slot eins und ungefähr 3 Sekunden für den zweiten.
Tools zum programmieren des Tokens gibt es für alle Systeme, jeweils in GUI oder CLI. Die GUI Version bietet praktischerweise auch den Upload des eigenen Keys in die YubiCloud an, was die Einrichtung deutlich vereinfacht.
Das OTP Modul für die YubiCloud erwartet auf der Gegenseite einen AES Key, welcher das eigentliche OTP Passwort entschlüsselt und dann auch validiert. Die ersten 6 Bytes des gesendeten Strings sind dabei der Public Identifier des Tokens. Anhand diesen Keys, kann der Schlüssel auf der Gegenseite identifiziert werden, um das eigentliche OTP zu entschlüsseln.
Alles weitere befindet sich in der ausführlichen Dokumentation von Yubico. Hier ist auch der Background und die Funktionsweise der Validierung und Provisioning von YubiKeys beschrieben.
Schön ist zu erwähnen, dass die Unterstützung des YubiKey stetig steigt: LastPass, Google, PAM, Radius, Windows Login, PayPal, KeePass et cetera.
Bleibt zu hoffen, dass es noch dauert bis jemand die erste Sicherheitslücke findet 😉

Bild Rechte v.l.n.r: CC-BY Marius Hein, (c) 2013 Yubico

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Aus 4 mach 2 – Spaces

Heute schließe ich mich meinem Kollegen Eric Lippmann mit seinen Sed Tricks an. Heute heißt es: “Aus 4 mach 2”. Der Wechsel von Spaces in Einrückungen funktioniert nicht überall reibungslos. Entweder ist die Änderung mit Codestyle verbunden (tools) oder ich brauche spezielle, oberflächen-behaftete Software (vi o.ä.).
Mit Sed ist dies mit einem Einzeiler möglich – Und damit integrierbar in alle meine find und git hacks ;-):

sed -i .BAK 'h;s/[^ ].*//;s/    /  /g;G;s/\n *//' /path/to/file

Mit der Operation -i wird die Datei gleich geändert und das Original also file.BAK abgespeichert.
 

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

GIT – aus eins mach viele

Software Projekte starten meist mit einem SCM Repository. Nach einem gewissen historisch bedingten Wachstum hat man dann auf einmal eine Sammlung unabhängiger Komponenten. Diese gehören aber in eigene Repositories. Gerade wenn unterschiedliche Versionen in der Produktion zum Einsatz kommen sollte man tunlichst darauf achten. Sonst wird es schwer unabhängig voneinander zu entwickeln ohne Kompatibilität zu brechen.
Leider hat man es zu spät gemerkt. Was tun um die Historie nicht zu verlieren? In den dunklen Ecken von GIT findet sich git-filter-branch. Ein mächtiges Tool wenn es darum geht am kompletten Baum etwas zu verändern. Aber beginnen wir von vorne:
1. Repository auschecken:

$ git checkout git@git.foo.bar:repository.git && cd repository

2. Entfernen aller anderen Verzeichnisse bis auf das gewollte

$ git filter-branch --prune-empty --subdirectory-filter path/to/component -- --all

Mit dem obigen befehl wird alles entfernt was nicht im Verzeichnis ‘path/to/component’ vorkommt. Normalerweise werden hierbei leere commits erzeugt welche nichts mit dem Filter zu tun haben. Um dies zu vermeiden gibt es die Option ‘–prune-empty’.
3. Anlegen eines neuen Repositories und setzen eines neuen Ziels

$ git remote add target git@git.foo.bar:component.git

4. Explizites pushen des master branch in das neue Ziel

$ git push target master

Neues Repository wird mit der gefilterten Historie gefüllt. Allerdings ist der alte Code noch im ehemaligen Repository vorhanden
5. Neu auschecken und redundanten Code entfernen
Lokale Kopie von der Platte entfernen (Schritt 1) und mit folgendem GIT Befehl weiterarbeiten

$ git filter-branch --tree-filter ' rm -rf path/to/component' HEAD

6. Repository pushen und aufräumen
Wir haben die Timeline geändert und unsere Änderungen passen sich nicht mehr in die Historie ein:

$ git push -f

Mit der Option -f wird alles Remote überschrieben, egal ob es passt oder nicht. Man tun gut daran kurz inne zu halten und den Branch zu überprüfen.
Danach können wir die alten Reflogs löschen um Speicherplatz frei zu geben:

$ git reflog expire --expire=now --all && git gc --aggressive --prune=now

Pa-Tsching – fertig!
Natürlich ist das nicht die ganze Wahrheit und passt auf einfach Anwendungsfälle. Mit unterschiedlichen Release Tags und verzweigten Branches wird das extrahieren etwas aufwendiger. Allerdings ist dies dann keine Standardfall mehr und genau auf das Projekt zugeschnitten (Namensschemata usw.).
Detail Informationen finden sich auf der Manpage von GIT.

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Aussenseiter Linux

HibiscusLeider ist es immer noch so, dass es bei spezialisierter Software Linux der klare Aussenseiter ist. Viele Lücken gibt es hier bei Business relevanter Software, z.B. Projektplanung, Zeiterfassung oder Musikproduktion. Das heißt jetzt nicht dass es überhaupt gar keine Software gibt. Meistens machen es die Schnittstellenaus, welche die Interoperabilität zwischen den globalisierten Betriebssystem Giganten einschränken oder schier unmöglich machen. Gezwungenermaßen steigt man dann für einen bestimmten Anwendungsfall auf ein anderes Betriebssystem um. Klassische Vertreter dieser Art sind Steuerprogramme oder Banking Software. Wobei durchaus davon auszugehen ist, dass der gemeine Linuxuser hin und wieder seine Steuern zahlt oder eine Überweisung tätigt.
Für eine Überweisung bin ich neulich auf Hibiscus gestoßen – eine ordentliche Banking Software mit HBCI Unterstützung für die üblichen Geschäftsvorfälle. Unterstützung gibt es hier bis HBCI/FinTS Version 3 mit Chipkarte, Schlüsseldiskette und Pin/Tan (optisch und SMS). Das Interface ist aufgeräumt und bietet einiges an Auswertung und Kategorisierung für seine Transaktionen an. So kann man besonders schön am Monatsende sehen wo das Geld eigentlich versiegt und eventuelle Gegenmaßnahmen einleiten.
Kurz und knapp:

  • Java basierend (HBCI4Java basierend)
  • GPLv2
  • Linux, MacOS, Windows
  • Quellcode bei GitHub
  • Bulk Abruf
  • Sammel-Überweisungen / -Lastschriften
  • Export und Import von Daten
  • Reporting
  • Jameica Architektur: Basierend auf Plugins / Headless Betrieb als Server

Die Basisfunktionalitäten kann man natürlich auch im Webinterface der Bank erledigen, wer allerdings die Umsätze über einen längeren Zeitraum aufheben möchte oder eine ordentlich Volltextsuche in Transaktionen/Gegenkonten, kommt um einen ordentlichen Fat Client nicht drum rum.
Ordentliches Teil, übersichtlich und tut genau das, was man braucht. Vielen Dank dafür!

(Bildquelle: http://www.willuhn.de)

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Help wanted!

Du bist Software Entwickler und suchst einen neuen Job? Nun, dann sind wir vielleicht dein neuer Arbeitgeber. 
8675052048_953d96a84f_z
Denn im Moment suchen wir wieder Verstärkung in unserem Team. Als Dienstleister im Monitoring und Systems Management Umfeld unterstützen wir Kunden bei der Einführung von Open Source Lösungen und pflegen natürlich auch unser eigenes Portfolio.
Wenn also Mongo, Mustard, Scrum und Zend keine böhmischen Dörfer für dich sind, dann bewirb dich bei uns. Wir bieten ein freundliches und eigenverantwortliches Arbeitsumfeld unter Linux mit modernen Web- und Datentechnologien.
Ein ausführliches Profil mit allen Anforderungen findest du auf unserer Webseite.

(Bild: http://www.flickr.com/photos/hackny/)

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Klein und gut – Komodo Edit

Ungefähr alle zwei Monate begebe ich mich auf die Suche nach einem neuen Texteditor. Zu schwerfällig sind manche IDEs – starten dauert lange oder man kann einzelne Dateien gar nicht erst editieren wenn man sich nicht in einem Projektkontext befindet. Meistens ist die Suche dann aber schnell beendet. Entweder reicht mir das Featureset nicht aus oder er ist schon wieder mit zu viel Firlefanz überladen. Nicht so mit Komodo Edit, einem freien Editor der Firma ActiveState (Die mit dem Perl unter Windows), welcher frei erhältlich ist.
Komodo Edit ist eine abgespeckte Version der Komodo IDE, beinhaltet aber alles wichtige für den ambitionierten Schreiberling. Ein kleiner Abriss, was mitgefällt:

  • Guter Editor, Syntax Highlighting, Code Folding, Call Tips, Code Completion, Matching Braces
  • Projekt Support – oder eben auch nicht
  • Unterstützt automatisch die wichtigsten Script Sprachen auch ohne Datenerweiterung
  • FastOpen: Öffnen von Dateien anhand von Namensfragmenten
  • Gutes Design und ergonomische Darstellung von Text und Elementen

Das System basiert auf dem von Mozilla entwickelten XML Userinterface (XUL) und startet erträglich schnell. Dank dem mitgelieferten Installer integriert er sich nahtlos in die bekanntesten Linuxdistros und ersetzt für mich die systeminternen Texteditoren, z.B. gedit. Perfekt finde ich ihn für Perl. Die meisten IDEs kommen mit dem Code und der redundanten Schreibweise eh nicht sonderlich gut zurecht. Der kleine Drache ist nicht perfekt, erkennt aber zuverlässig die wichtigsten Dinge um nicht auf Nase zu fallen. Ansonsten funktioniert er auf jeder erdenklichen Plattform von Windows bis Linux und natürlich auch für alle anderen Randgruppen!
Genug der Ode. Mein Fazit: Einfach mal testen!

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

PSR-0,1,2, nichts dabei!

phpMir ist klar dass der Titel dieses Post erstmal Verwirrung stiftet. Denn es hat wieder mit den unmöglichen Tiefen von PHP zu tun, und zwar mit einem Standard. Bis vor einiger Zeit gibt es für PHP aus dem Vendor Team keinen eigenen Standard wie man PHP eigentlich schreibt – also wie man es so schreibt das es lesbar ist und bei jeden gleich aussieht.
Bis zu diesem Zeitpunkt gab es einige Versuche: Zend, Squiz, Pear. Aber das Ergebnis war nie perfekt. Andere Sprachen haben ihren Styleguide bereits dabei, z.B. PEP8 in Python. Auch wurde viel in fremden Welten geklaut, z.B. Code Conventions von Java oder die Entfremdung einiger C Stile brachte so manches Stirnrunzeln vor den Bildschirm. Nun hat die PHP Framework Interop Group mit Ihrem “propose a standards recommendation” einen sehr guten Standard rausgekurbelt der:

  1. Zu PHP passt
  2. Die Aktualität berücksichtigt
  3. Von vielen akzeptiert wird

Die PHP-FIG an sich sich ist eine Gruppe von Personen die versuchen an vielen Ecken und Enden Standards zu schaffen, an die man sich halten kann – aber nicht muss. Herausgekommen ist ein vierteiliges Werk was wiederum auf spezielle Teile von Sprachkonstrukten Einfluss nimmt:

Über PSR-3 lässt sich streiten aber 0-2 sind super umgesetzt  und integriert sich sinnvoll in die Sprache. Nicht zuletzt wird der Standard von vielen Tools bereits unterstützt: PHP CodeSniffer oder PHPStorm, Eclipse. Und viele Projekte sind bereits damit umgesetzt, http://packagist.org feststellen kann.
So schaut es gut aus:

$ phpcs --standard=PSR2 Process.php
Time: 0 seconds, Memory: 6.25Mb
.
 *
 * @author Marius Hein 
 * @copyright 2012-2013 NETWAYS GmbH 
 */
namespace NETWAYS\IO;
/**
 * Specific implementation to FO
 * @package NETWAYS\IO
 * @author Marius Hein 
 */
class FileObject extends \SplFileObject
{
    /**
     * Integrate chmod on that file
     * @param int $mode
     * @return bool
     */
    public function chmod($mode)
    {
        return chmod($this->getRealPath(), $mode);
    }
}
Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Memory footprint von Scripts

Hin und wieder stellt sich die Frage in welcher Sprache man ein Programm eigentlich schreiben sollte. Neben persönliche Vorlieben, Features und Modellen welche die Sprache unterstützen soll, gilt es aber auch ein Auge auf der Performance zu haben.
Bevor es nun ungezähmt aus dem Wald schallert: “Klar, C, schneller geht’s kaum”, wage ich anzumerken dass auch die Performance in der Schreibgeschwindigkeit zählt, oder der Praktikabilität, usw. Allerdings interessiert mich in diesem Artikel mehr der Speicherverbrauch.
Scriptsprachen welche meistens dynamisch typisieren oder eine Mischform aus dynamischer und statischer Typisierung verwenden brauchen oft mehr Speicher als eigentlich nötig. Daraus würde ich gerne einen Vergleich aus den populärsten Sprachen ziehen.
Basis hierfür ist ein 10.9673 MB großer JSON Dump (sagen wir halt 11MB), mit 100000 Objekten innerhalb eines Arrays. Als Implementierung wurde immer die kleinste gewählt, möglichst streams, keine Zwischenspeicher und keine Ausgabe (Ergebnis wurde natürlich vorher geprüft bevor mit der Zeitnahme begonnen wurde.
Die Messung wurde mit Valgrind durchgeführt (mit dem tool massif) und als Vergleichswert der maximale Peak in Mebibyte gemessen.

chart_time2

Nun, verloren hat ganz klar – und auch leider – PHP. Mit fast 240 Mebibyte aufgeblasenen Heap wundert man sich fast schon was eigentlich drin steht – im Speicher. Ganz gut im Mittelfeld platziert sich der Liebling der Administratoren, Perl – Gut schnell und annehmbarer Speicherverbrauch. Node ist zwar schnell aber nicht weit verbreitet weshalb es eher (auch hier ein klares leider) ein klares Schattendasein führt. Zu C++ ist noch zu sagen das hier alles Dynamisch angelegt und ein großes Framework verwendet wurde, weshalb das Ergebnis kaum zu rechnen ist.
Dieser Test ist natürlich auch in keinster Weise repräsentativ. Werden doch Shared Objects in den Speicher geladen und andere Dinge unternommen welche einen objektiven und ausgeglichenen Vergleich kaum zulassen. Aber man kann doch Stärken und Schwächen erkennen, da es sich zumindest bei den Scriptsprachen um Standardinstallationen aus einem Ubuntu (12.04 LTS) System handelt. Ansonsten folgen noch ein paar hübsche Graphen.

 

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.