Exceptions?

Wenn in einem Programm ein Fehler auftritt, so wirft man in der Regel eine Exception (im Deutschen Ausnahme genannt). Damit kann der Programmierer den Fehler bearbeiten bzw. entsprechend auf ihn reagieren. Früher als es noch keine Exceptions gab, behielf man sich mit Rückgabecodes. Da gab es halt eine -1 wenn der Dateizugriff nicht funktioniert oder eine -2 wenn die Authentifikation fehlschlug.

tweetinvi.codeplex.com/documentation

tweetinvi.codeplex.com/documentation

Diese Rückgabecodes haben aber mehrere Nachteile. So muss der Programmierer den Code immer abfragen, vergisst er dies wird in der Verarbeitung einfach weiter verfahren – mit den entsprechenden Konsequenzen. Manchmal gibt es aber Programmierer, die Nutzen eine Sprache welche Exceptions unterstützt, nur um sie dann in ihrer Bibliothek in Statuscodes umzuwandeln. Die Twitterbibliothek Tweetinvi für C# macht genau dies. Anstatt für ein Problem eine Ausnahme auszulösen, wird das Problem versteckt. Und dann schreiben Sie in der Dokumentation auch noch, das Sie das nur getan haben um die Entwicklung zu erleichtern. Das ist wieder mal ein typischer Fall von „Bauschutt während der Entwicklung geraucht“.

Dieser Tweet ist in dieser Woche nicht verfügbar

Ich hatte vor einiger Zeit einen Status-Bot für Twitter geschrieben. Dieser Bot schaut ob eine Bedingung erfüllt ist und twittern dann einen Satz wie:

Die Tür ist offen.

Wenn die Bedingung sich wieder ändert, könnte der Bot:

Die Tür ist zu.

twittern. Allerdings gibt es da ein Problem. Twitter lässt doppelte Tweets innerhalb einer bestimmten Zeitspanne (Gerüchten zu folge – eine Woche) nicht zu. Damit muss sich der Status-Bot etwas ausdenken wenn er die gleiche Nachricht öfters verschicken möchte. Wenn man dieses Verhalten von Twitter nicht kennt, wundert sich warum der Tweet nicht abgeschickt werden kann. Die einfachste Möglichkeit ist es hier einfach einen Zähler in den Tweet einzubauen. Alternativ kann man die gleiche Nachricht natürlich in unterschiedliche sprachliche Konstrukte packen.

PHP Coding Standards Fixer

Wenn man ab und an PHP nutzt, wird man sicherlich auch schonmal etwas von PSR-1 und PSR-2 gehört haben. PSR steht dabei für PHP Specification Request. PSR-1 und PSR-2 sind dabei der Basis Coding Standard und der Coding Style Guide.

cs.sensiolabs.org

cs.sensiolabs.org

Möchte man seinen Quelltext an diese Standards anpassen, so kann man dies natürlich ohne Probleme per Hand erledigen. Allerdings ist dies je nach Menge des Quelltextes doch recht umständlich. Mit Hilfe des PHP Coding Standards Fixer kann man diese Arbeit automatisieren. Genutzt wird die Software auf der Konsole:

php php-cs-fixer.phar fix /path/to/dir

Nach dem Durchlauf wurde der Quellcode an die Gegebenheiten des Standards angepasst. Bezogen werden kann der PHP Coding Standards Fixer auf der offizielle Seite. Die Anwendung ist dabei unter der MIT-Lizenz lizenziert und damit freie Software.

MySQL Improved Extension

Wenn man früher unter PHP eine MySQL-Datenbank ansprechen wollte, so bediente man sich der Befehle mysql_connect, mysql_select_db, mysql_query und Co. Das Problem an dieser API ist, das sie deprecated also veraltet ist und damit nicht mehr genutzt werden sollte:

$db = mysql_connect ($host, $user, $password) or die ("Es konnte keine Verbindung zum Datenbankserver hergestellt werden");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db ($name, $db) or die("Die Datenbank \"$name\" konnte nicht ausgewählt werden");

Stattdessen soll man die MySQL Improved Extension kurz Mysqli nutzen. Dabei handelt es sich um eine moderne objektorientierte API für den Zugriff auf MySQL in PHP. Eine einfache Abfrage mittels Mysqli sieht dabei wie folgt aus:

$mysqli = new mysqli($databaseHost, $databaseUsername, $databasePassword, $databaseName);
$sql = "SELECT * FROM token";
$result = $mysqli->query($sql);

for ($row_no=$result->num_rows-1; $row_no>=0; $row_no--) 
{
    $result->data_seek($row_no);
    $row=$result->fetch_assoc();
    echo " id = " . $row['id'] . "\n";
}

Die API unterscheidet sich dabei nicht groß von der alten API, so das Umstieg hier relativ einfach fallen sollte. Auf der entsprechenden Dokumentationsseite auf php.net finden sich noch viele weitere Beispiele.

Flight – Microframework für PHP

Auf der Suche nach einer Möglichkeit eine REST-Api auf die Beine zu stellen, hatte ich mich mit einigen PHP-Microframeworks wie Slim oder Fat-Free beschäftigt. Hängen geblieben bin ich Schlussendlich bei Flight. Eine minimale REST-Api sieht dabei so aus:

require 'flight/Flight.php';

Flight::route('GET /', function(){
    echo 'hello world!';
});

Flight::start();

Flight besticht dabei durch seinen Umfang und die einfache Nutzbarkeit. Die Dokumentation ist schnell gelesen und so kann schon nach wenigen Minuten produktiv entwickelt werden. Flight ist unter der MIT-Lizenz lizenziert und damit freie Sofware. Der Quelltext ist auf GitHub, die offizielle Webseite unter flightphp.com zu finden.