1529 Tage zuvor: Bubble-Sort in PHP

Da bin ich die Tage doch glatt dazu gekommen einige (Er-)Kenntnisse meines Algorithmus-Kurses vom letzten Jahr anzuwenden. Grund war die fehlende Funktion zur Sortierung eines Mehrdimensionalen Arrays basierend auf einem Sub-Key. Aber gut, so konnte ich mir wenigstens beweisen das ich das Konzept noch verstanden habe:

// (Bubble)Sort
do{
	$swapped = false;
	for($i=0; $i<(count($calendar)-1); $i++){
		if($calendar[$i]["stamp"] > $calendar[$i+1]["stamp"]){
			$swap = $calendar[$i];
			$calendar[$i] = $calendar[$i+1];
			$calendar[$i+1] = $swap;
			$swapped = true;
		}
	}
}while($swapped != false);

Mal schauen wann mir dann eine Anwendung f├╝r die Algorithmen zu Graphen in den Schoss f├Ąllt.

PS: Wieso gibt es in PHP eigentlich kein array_swap()?

2863 Tage zuvor: Tages-Planung

Vor nicht allzu langer Zeit erw├Ąhnte ich, dass der HP DreamScreen eine tolle Sache sei. Denn er bietet die M├Âglichkeit Bilder (und Musik) ├╝ber die integrierte WiFi-Schnittstelle nachzuladen. Soweit, so gut.

Nachdem ich mir Ende November g├╝nstig einen zugelegt habe, konnte ich die letzten Tage auch endlich ein wenig intensiver Zeit investieren um ihn f├╝r das zu nutzen, f├╝r das er gedacht war. N├Ąmlich morgendlich eine ├ťbersicht ├╝ber all jenes anzuzeigen, was den Tag ├╝ber so los ist. Ist heute etwas geplant? Was macht Mami? Wer kommt zu Besuch? Wie wird das Wetter? Was ist ├╝ber Nacht in der Welt passiert?

Das Programm um ein entsprechendes Bild aus diversen Feeds zu erstellen war auch recht z├╝gig geschrieben. Allerdings sind die Grenzen des DreamScreen ein wenig zu eng gesteckt, um das Ziel zu erreichen. Denn es gibt zwar die M├Âglichkeit Daten drahtlos abzugleichen und Musik direkt aus dem Netzwerk abzuspielen (auch wenn man dazu den Windows Media Player installiert haben muss). Man ist dabei jedoch leider auf Pull-Dienste angewiesen, sprich man muss manuell am DreamScreen die Daten abfragen – eine Push-M├Âglichkeit, bei der ein Programm ein Bild zur Anzeige an den Bilderrahmen schickt, gibt es nicht.

Damit ist das Projekt also fr├╝hzeitig gescheitert. An einer unzureichenden Software-Implementation seitens HP. Auch ein SDK um gegebenenfalls eine eigene L├Âsung daf├╝r zu entwickeln, gibt es nicht. Dabei l├Ąuft der DreamScreen auf einer Embedded Linux Plattform und bietet daher theoretisch alle Funktionalit├Ąten um das gew├╝nschte Verhalten problemlos zu bieten. Zwar offenbarte ein Netzwerk-Sniffer das die Daten mittels SOAP abgeglichen werden, man auf diese Weise vermutlich auch automatisch Bilder hochladen k├Ânnte, allerdings fehlen damit immer noch Steuerungsfunktionen wie zum Beispiel ein bestimmtes Bild anzeigen zu lassen.

Bleibt nur zu hoffen, dass HP seine angeblichen Pl├Ąne umsetzt und in der Tat grosses aus der ansonsten guten Hardware macht – oder zumindest jemand es schafft Zugang zu dem Linux-System zu erhalten.

3041 Tage zuvor: Bake mit Fenstern

Es gibt viele Hinweise darauf, wie man CakePHP unter dem IIS zum laufen bekommen soll. Allerdings haben mir die Weiterleitungsregeln alle nur Ansatzweise geholfen. Dabei hatte ich die Installation extra in ein eigenes Web ausgelagert um die Konfiguration unabh├Ąngig von den normalen Web-Diensten konfigurieren zu k├Ânnen.

Nun, diese Weiterleitungsregeln f├╝r ISAPI-Rewrite3 funktionieren – jedenfalls bei mir:

RewriteEngine on
RewriteRule ^/(css|files|img|js|stats)/(.*)$ /app/webroot/$1/$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA]

4029 Tage zuvor: Lokalisierung: EqDKP-Raid Progression

So ein DKP-System ist schon was feines: Je nachdem an wie vielen Raids man teilgenommen hat, hat man auch bessere/schlechtere Chancen an ein begehrtes Item zu gelangen. Die Implementation beim Kreis der Macht ist, nicht zuletzt durch einen sehr vernarrten Gildenleiter, auch entsprechend aufgebohrt – schlie├člich ist es die Statistik-Seite Nummer Eins der Gilde.

Eine der neuesten Erweiterungen, die eingebunden werden sollte, war das PlugIn Raid Progression zur Verfolgung des Fortschritts in Instanzen. Leider Gottes kam es jedoch nicht mit unserer Art des Eintragens von Raids zurecht. Ein Problem, das scheinbar auch andere Leute haben:

looks nice.
is there a change to modify the plugin, so ite can handel with other Raidnotes like this http://www.seniorenraid.de/set/listraids.php

Nun, die L├Âsung soll niemandem vorbehalten bleiben:

// Extension start

if(empty($row['raid_note']))   continue;

$elements = explode(" ", str_replace(", ", " ", $row['raid_note']));
foreach($elements as $killed_mob)
   foreach($instance as $event => $mobs)
      foreach($mobs as $mob => $count)
         if(@strstr($mob, $killed_mob))
            $instance[$event][$mob] = $row['raid_id'] . ':' . $row['event_id'];

/* Old code
   if ( in_array_multi_key($row['raid_note'], $instance) )
   {

      $instance[$row['raid_name']][$row['raid_note']] = $row['raid_id'] . ':' . $row['event_id'];
   }
*/
// Extension end

Einzubauen ist das ganze in die Datei /dkp/plugins/rp/index.php. Die Stelle sollte sich dem geneigten Leser aus dem auskommentierten Code von selbst erschlie├čen.

4030 Tage zuvor: Serialisierte Instanzen

Abw├Ąrtskompatibilit├Ąt ist eine tolle Sache. Sie verspricht, dass man die Entwicklungen auf der momentanen Version auch in Zukunft noch nutzen kann und dadurch nicht laufend mit der Wartung seiner alten Programme besch├Ąftigt ist.

Was ich jedoch gestern erfahren musste, hat immer noch einen faden Beigeschmack. Es ging darum, dass eine Webseite mit komplexen adhoc-Berechnungen die zugrunde liegenden Instanzen eines Objektes in einer Datenbank-Tabelle zwischenspeichern sollte. Nichts leichter als das:

$so = serialize($o);

Das Zur├╝ckholen in den Applikationskontext zu einem sp├Ąteren Zeitpunkt ging ebenso leicht:

$o = unserialize($so);

In meiner Test-Umgebung (PHP 4.3.3) hat das alles wunderbar funktioniert. Toll, dachte ich, dass das so einfach geht. Doch zu fr├╝h gefreut. In der Produktiv-Umgebung (PHP 4.4.4) fehlten den so wieder ins Leben zur├╝ck gerufenen Instanzen auf einmal die Methoden, was neben unsch├Ânen Fehlermeldungen auch zu einem Ausfall der Anwendung gef├╝hrt hat. Laut PHP-Dokumentation soll man, um genau dies zu vermeiden, eine kleine Korrektur vornehmen:

$so = unserialize(implode("", $so));

Leider f├╝hrte auch das nicht zum gew├╝nschten Ergebnis. Blieb also nur der Biss in den sauren Apfel und ein entsprechend ausschweifender Work-Around (die Daten werden jetzt in einer eigenen Cache-Tabelle zwischengespeichert).