git – Übersicht über den Stand von Branches

Da ich es auch immer wieder vergesse, schreibe ich es mir hier auf…

git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'

Damit zeigt git alle bekannten Branches an, mit dem letzten Kommentar, sowie, wann der erfolgt ist. Das ist gerade dann nützlich, wenn man eine Übersicht über den Stand braucht, in dem man nicht regelmäßig arbeitet.

Die Originalbeschreibung gibt es bei Stackoverflow: How can I get a list of git branches, ordered by most recent commit?

Raspberry Pi und die Mirrors

Ich habe meine Resourcen für Raspberry Pi zur Verfügung gestellt, auch hier ist ein Mirror der Files verfügbar. Eigentlich sogar 2, ein weiterer liegt noch auf meiner JiffyBox. Jetzt am Donnerstag sollen ja die Tests der ersten Charge über die Bühne sein.

Leider steht vor dem Erfolg der Schweiß, oder so ähnlich. Aus diesem Grund konnte das mit dem Mirror auch nicht ‚einfach so‘ klappen. Zum einen wollte ich auf meinem virtuellen Server keinen FTP-Zugang einrichten und zum andern lässt der Tarif, den ich hier für meine Webseiten gebucht habe, Directory listing nicht zu. Ich wollte auch nicht unnötig viel Arbeit für die R-Pi-Leute machen, also musste mal eben eine eigene Lösung her. Bestimmt gibt’s dafür eine Lösung auch fertig irgendwo her, aber wo ist dann der Spaß?

Also die Aufgabenstellung: synchronisiere 2 Server mit einem 3. Server und erzeuge ein Directory Listing ohne das Apache-Modul. Meine Lösung sieht vor:

  1. rsync vom raspberry-pi Server auf meinen virtuellen Server
  2. index.html erstellen für jedes Verzeichnis, mit Auflistung aller Unterverzeichnisse und Dateien
  3. Alle Dateien (inklusive der erstellten index.html) vom virtuellen Server auf den Webhosting-Server synchronisieren.

Ist alles ja gar nicht so schwer. Zu 1. wird auf dem virtuellen Server rsync ausgeführt:

rsync -azPv rsync://rsync-source/ /var/www/mirror/

Ich weiß jetzt nicht so wirklich, ob die Leute von Raspberry Pi es so gut fänden, wenn ich die Serveradresse verrate, deshalb lasse ich die hier mal weg.

Zu 2. habe ich dann ein PHP-Skript geschrieben, dass rekursiv durch die Verzeichnisse geht und entsprechende Dateien schreibt. Ja, es ist Quick & Dirty…:

<?php
function createIndex($folderName,$displayRoot) {
    $output = "<html><head><title>$folderName</title></head><body><h1>Index of $displayRoot</h1><table>";
    $i=0;
    $allEntries = null;
    $currHandle = opendir($folderName);
    if ($currHandle !== FALSE) {
        $currEntry = readdir($currHandle);
        while ($currEntry !== FALSE) {
            $allEntries[$i++] = $currEntry;
            $currEntry = readdir($currHandle);
        }
        sort($allEntries);
        foreach ($allEntries as $currEntry) {
            $procThis = $folderName . '/' . $currEntry;
            if (is_dir($procThis)) {
                if ($currEntry != '.' && $currEntry != '..') {
                    createIndex($procThis, $displayRoot . '/' . $currEntry);
                }
                $fsize = 0;
            }
            else {
                $fsize = filesize ($procThis);
            }
            if ($currEntry != '.' && $currEntry != 'index.html') {
                $output .= "\n<tr><td><a href=\"$currEntry\">$currEntry</a></td>";
                if ($fsize > 0) {
                    $output .= '<td>' . $fsize . ' bytes</td><td>' . date ("Y-m-d H:i:s.", filemtime($procThis)) . '</td>';
                }
                else {
                    $output .= '<td></td><td></td>';
                }
            }
            $output .= '</tr>';
        }
    }
    $output .="</table></body></html>";
    $handle = fopen($folderName . '/index.html','w');
    fwrite($handle,$output);
    fflush($handle);
    fclose($handle);
}
createIndex("/var/www/mirror", "/mirror");
?>

Das ganze Verzeichnis wird dann zu 3. per lftp mit dem Webhosting-Server synchronisiert:

open ftp://user:password@ftp.loco-toys.de
mirror -R -v --only-newer /var/www/mirror/ /

Diese 2 Zeilen in eine Datei geschrieben (z.B. synch.lftp) und der Aufruf erfolgt dann mit

lftp -f synch.lftp

Diese 3 Schritte werden dann noch sinnvoll in der crontab eingetragen, und schon haben wir 2 weitere Mirrors für Raspberry Pi.

Bleibt nur noch zu hoffen, dass ich überhaupt einen der Dinger aus der ersten Charge bekomme, und dass meine Mirrors nicht so beliebt sind, dass mir die Domains geperrt werden.

Java mp3info Bibliothek zu vergeben

Ich habe vor längerer Zeit die Java-Bibliothek mp3info geschrieben. Damit ist es möglich, in weiten Teilen ID3v2-Tags zu lesen, manipulieren und schreiben. Ich komme leider einfach nicht mehr dazu, mich um diesen Code zu kümmern. Wenn jemand Interesse daran hat, dieses Projekt zu übernehmen und es wieder auferstehen zu lassen, würde ich mich sehr freuen.

Die Implementierung ist zugegebenermaßen nicht das beste Beispiel für Javacode, ist aber recht fortgeschritten. Alle Funktionen zum Lesen und Schreiben der Tags funktionieren stabil, eine weitreichende Unterstützung von ID3-Frames ist eingebaut, eine Möglichkeit zum Erweitern außerhalb des Codes ist auch vorhanden. Die Library wurde in einigen Projekten genutzt und ist auch einigermaßen dokumentiert. Damals zumindest war es die vollständigste Implementierung des Standards, die in Java existierte.

Die Lizenz ist LGPL und wenn jemand ernstes Interesse an der Weiterentwicklung des Projekts hat, würde ich mich freuen, die Kontrolle abzugeben.

Der derzeitige Zustand kann auf SourceForge begutachtet werden.

FrOSCon 2011 Tag 2

Wie ich es mir schon dachte, 10:00h ist nicht die Zeit für mich, um an einem Sonntag sowas wie Arbeit zu machen. Dank des Streamings konnte ich mir beim Kaffee Kristian Köhntopps Eight rollouts a day keeping downtime away (Hier die Folien) ansehen. Sehr interessant, genauso wie auch Redaktionelle Hochlast -Webseiten am Beispiel von Stern.de.

Frau Andresen muss ich besonders danken für Das perfekte Team – bestehend aus lauter klugen Köpfen, hat sie mir doch damit sehr genau vor Augen geführt, was eigentlich das Problem in meinem jetzigen Job ist. Weitere aufschlussreiche Präsentationen von ihr sind bei Slideshare zu finden.

Dann ging es weiter mit PHPopstars, ein sehr unterhaltsam gemachter Vortrag zum Thema Vorträge. Dank Kristian wissen wir jetzt endlich, warum Elefanten keine guten Haustiere sind, und Tobias hat mich auf Zeta Components aufmerksam gemacht. Während die Aufräumarbeiten bereits begannen folgte dann noch Drupal – breaching our way in. Vielen Dank auch dafür, wie allerdings bemerkt wurde, war der Rahmen eines Vortrags für das Thema etwas knapp. Aber eine schöne Einführung in Drupal, nächstes Mal wird das eher ein Workshop… oder ein 2 Stundenvortrag.

FrOSCon 2011

Ich bin gerade von der FrOSCon wieder nach hause gekommen. Wie immer war es sehr informativ. Ich danke den Veranstaltern und Vorträgern für ein gelungenes Programm. Sehr schade ist nur, dass vieles, was mich interessiert, parallel läuft. Wenn es nach meinen Interessen ginge, würde die Veranstaltung aber ewig dauern.

Recht interessant am Rande fand ich freedroidz, spielerisch programmieren lernen.

Morgen geht’s weiter, jeder Vortrag wieder eine Entscheidung zwischen 2 oder 3 Themen, die mich interessieren. Am schlimmsten ist fast schon, dass um 10:00h direkt 4 Sachen sind, die ich gerne besuchen würde, aber ehrlich gesagt, es ist Sonntag… um die Zeit trinke ich gerade meinen ersten Kaffee.