seeseekey.net - Invictus Deus Ex Machina

Unit-Test sind in der Softwareentwicklung ein wichtiger Teil der Entwicklung. Problematisch wird es wenn ein solcher Unit-Test fehlschlägt. Dann muss der Grund dafür gesucht und beseitigt werden. Unit-Test werden bei vielen Continuous-Integration-Systemen beim Build-Vorgang automatisch ausgeführt. Der Entwickler wird vom System über entsprechende Fehler bei der Ausführung informiert und kann handeln.

github.com/hmlb/phpunit-vw

github.com/hmlb/phpunit-vw

Wem das zu anstrengend ist, der kann sich mit der Phpunit VW Extension behelfen. Sobald die Unit-Test über ein Continuous-Integration-System ausgeführt werden, werden sie dank der Phpunit VW Extension automatisch durchgewunken. Bei der normalen Entwicklung schlagen die Tests wie gewohnt fehl – ein Prüfstandmodus für Unit-Tests.

Eine meiner MediaWikis welche ich betreibe wurde in den letzten Tagen zugespamt. So wurden mehrere zehntausend Seiten und Nutzer angelegt. Diese von Hand zu entfernen wäre ein sehr zeit- und nervenraubendes Unterfangen. Mit der Erweiterung BlockAndNuke, kann man diesen Vorgang beschleunigen.

BlockAndNuke listet die Spammer auf

BlockAndNuke listet die Spammer auf

Nach der Installation stellt die Erweiterung eine Spezialseite zur Verfügung. Dort sind die Nutzer aufgelistet, welche entfernt werden sollen. Bei der Entfernung werden auch die jeweiligen Beiträge des Nutzers entfernt. Problematisch wird das ganze bei mehreren tausend oder zehntausend Nutzern und Beiträgen. Dafür gibt es im Ordner BlockAndNuke die Kommandozeilenvariante mit dem Namen ban.php. Mittels:

php ban.php --hammer

kann der Vorgang auf der Kommandozeile ausgeführt werden. Dabei wird whitelist.txt Datei berücksichtigt in welcher sich die Nutzer befinden sollten welche nicht zu den Spammern zählen. Je nach Anzahl der löschenden Nutzer und Beiträge kann der Vorgang einige Zeit in Anspruch nehmen.

Wenn man ein Upgrade bei einer ownCloud-Installation durchführt, so wird die entsprechende Installation in den Wartungsmodus versetzt.

ownCloud im Wartungsmodus

ownCloud im Wartungsmodus

Unter Umständen kann es passieren, das der Wartungsmodus nach dem Upgrade nicht mehr deaktiviert wird. In diesem Fall muss der Wartungsmodus manuell deaktiviert werden. Dazu muss die Datei config.php, welche sich im Verzeichnis config befinden geöffnet werden. In dieser Datei findet sich der Eintrag:

'maintenance' => true,

Der Wert von maintenance muss dabei auf false gesetzt werden und die Datei gespeichert werden. Danach ist der Wartungsmodus wieder deaktiviert.

Schachapplikationen gibt es wie Sand am mehr und trotzdem ist von Tim Wölfle entwickelte PlainChess etwas besonderes in dem Berg an Schachapplikationen. Es handelt sich um ein mehrspielerfähige und vollständig in Webstandards wie HTML und JavaScript entwickelte Implementation.

PlainChess im Offline-Modus

PlainChess im Offline-Modus

Dabei beherrscht PlainChess bis auf einige Spezialfälle des Remis, alle Schachregeln. PlainChess ist unter der GPL3 lizenziert und damit freie Software – der Quelltext ist auf GitHub zu finden.

Auf der Suche nach einer auf PHP basierenden Projektmanagementlösung mit Unterstützung für agile Methoden wie z.B. Scrum habe ich OrangeScrum entdeckt. Die Lösung wird dabei als Service und als Community-Edition angeboten, welche auf dem eigenen Server installiert werden kann.

Das OrangeScrum Dashboard

Das OrangeScrum Dashboard

Mit der Software ist die Projekt- und Ressourcenplanungen, sowie die Aufgabenverteilung unter einer Oberfläche vereint. Lizenziert ist OrangeScrum unter der GPL in der Version 3 und damit freie Software. Der Quelltext von OrangeScrum ist auf GitHub zu finden. Ein speparater Installer wird nicht mitgeliefert – stattdessen müssen vor dem Start einige Konfigurationsdateien angepasst und die entsprechende Datenbank angelegt werden – danach läuft OrangeScrum ohne Probleme.

Da läuft der Webserver mit Nginx und PHP (eingebunden über den FastCGI Process Manager) seit vielen Wochen ohne Probleme und plötzlich wird man nur noch mit einem:

502 Bad Gateway

begrüßt. Das ist im ersten Moment verwunderlich, wenn sich nichts an der Konfiguration geändert hat. Dem Nutzer und gestressten Administrator möchte diese Meldung dabei mitteilen, das die Verbindung zum “PHP-Server” nicht funktioniert. Wenn über ein Unixsocket auf das PHP zugegriffen wird, so kann es zur 502er Fehlermeldung kommen, wenn der Datei keine ausreichenden Rechte mehr zugewiesen sind. Mit einem beherzten:

chmod go+rw /var/run/php5-fpm.sock

verfügt das Socket wieder über die korrekten Zugriffsrechte. Unter Umständen muss die PHP-Engine mit:

service php5-fpm restart

neugestartet werden. Verursacht werden kann dieses Problem unter anderem durch automatisch eingespielte Updates, welche die Berechtigung der Socket-Datei verändern.

Issue-Tracking-System oder auch Helpdesk-Systeme gibt es wie Sand am Meer. Allerdings gibt es relativ wenige frei lizenzierte Systeme auf PHP/MySQL Basis. Eines dieser Systeme ist eTicket, welches unter eticketsupport.com zu finden ist. Nachteilig an eTicket ist, das dieses Systemen nicht bzw. nur noch sporadisch weiterentwickelt wird.

osticket.com

osticket.com

Hier punktet osTicket, welches über die offizielle Seite bezogen werden kann. Das System befindet sich in aktiver Entwicklung und wird von Enhancesoft betreut. Enhancesoft bietet dabei auch das Cloudhosting von osTicket an. Der Quelltext des unter der GPL2 lizenzierten Systems ist auf GitHub zu finden.

Viele größere Firmen wie Apple, Google und auch Facebook sind in den letzten Jahren dazu übergegangen, Eigenentwicklungen zu veröffentlichen und unter eine freie Lizenz zu stellen. Eines dieser Projekt aus dem Hause Facebook ist dabei Phabricator. Dabei handelt es sich um ein auf PHP basierendes Werkzeug zur kollaborativen Softwareentwicklung.

Die Projektseite von Phabricator

Die Projektseite von Phabricator

Phabricator stellt dabei unter anderem Werkzeuge wie einen Repository Browser, ein Bug/Issue-Tracker, eine Wiki und Möglichkeiten zum Code Review zur Verfügung. Genutzt wird Phabricator nicht nur von Facebook, sondern auch andere Firmen und Projekte wie Blender, Bloomberg, Dropbox oder MediaWiki nutzen dieses Werkzeug für die Softwareentwicklung. Bezogen werden kann Phabricator über die offizielle Projektseite oder die entsprechende GitHub-Seite. Der Quelltext ist unter der Apache Lizenz lizenziert.

Zwar steht AJAX für Asynchronous JavaScript, aber trotzdem kann man solche Abfragen auch synchron durchführen. Mit jQuery kann man das ganze dabei wie folgt bewerkstelligen:

$.ajax({url: "getName.php", 
	type: "get",
	data:{lang:"american"},
	success: function(result){
		name=result;
}, async: false});

Wichtig ist, das der Schlüssel async auf false gesetzt ist – das Verhalten ist in neueren Versionen von jQuery als veraltet gekennzeichnet, kann aber noch genutzt werden.

In PHP gibt es (nach meinem Wissen) keine einfache Methode um die Dateien eines Ordner rekursiv zu ermitteln. Möchte man die Dateien eines Ordners ohne dessen Unterordner ermitteln, so kann man scandir nutzen. Auf Basis dessen, habe ich eine Funktion geschrieben, welche diesen Operation auf Wunsch auch rekursiv ausführt:

function GetFiles($directory, $recursiv)
{	
	if($directory[strlen($directory)-1]!='/') $directory.="/";
	
	$files = array();
	$subDirectories = array();
	
	$scandirFiles = scandir($directory); //Read files

	foreach ($scandirFiles as $file) 
	{
		if($file=="." || $file=="..") continue;

		if(is_dir($directory.$file))
		{
			array_push($subDirectories, $directory.$file);
		}
		else if(is_file($directory.$file))
		{
			array_push($files, $directory.$file);
		}
	}

	 if($recursiv)
	 {
		 foreach ($subDirectories as $dirs) 
		 {
			 $subDirectoryFiles=GetFiles($dirs, $recursiv);
			 $files = array_merge($files, $subDirectoryFiles);
		 }
	 }
	 
	 return $files;
}

Genutzt wird die Funktion wie folgt:

$files = GetFiles('images/', true);

Der Rückgabewert ist ein Array, in welchem die Dateien mit ihren relativen Pfaden enthalten sind.