100% Bio Software

22 01 2009

Mozilla bezeichnet seine Software als 100% Bio Software. Der Vergleich ist mir auch schon öfter gekommen, ab sofort werde ich ihn auch nutzen, um unbedarften Menschen das Prinzip von Open-Source klarer zu machen. Wer im Bio-Supermarkt kauft, denkt meist gesellschaftlich verantwortungsvoll – oder wie auch immer ich das nennen soll – und das passt prima auch zur Nutzung von Open-Source Software.


XDA-Projekt: Instant Messaging

25 07 2008

Es gibt einen Punkt, den ich bisher nicht mit meinem XDA nicht befriedigend lösen konnte: Instant Messaging auf dem XDA. Ich habe bisher keinen brauchbaren Jabber-Client für Windows Mobile gefunden, der nicht an einen speziellen Dienst gebunden wäre und kostenlos. Der Agile Messenger kostet satte 45$, reichlich teuer. Skype ist sehr gut in das System integriert, aber Skype ist Skype und nur Skype. Ich brauche aber einen Messenger, der nicht ausschließlich ein proprietäres und fragwürdiges Protokoll einsetzt. Ebenfalls brauche ich keinen IM-Client, der alle Verbindungen von einem zentralen Server aus aufbaut und die Verbindung vom Handy dorthin über ein fragwürdiges und proprietäres Protokoll abwickelt und dem ich dazu alle meine Zugangsdaten zu den benutzten Diensten geben muss, wie das bei Fring offenbar der Fall ist.

Wo bleibt der Open-Source-IM-Client für Windows Mobile? Wo bleibt Pidgin Mobile oder etwas ähnliches? Obwohl, eigentlich ist das völlig überflüssig. Windows Mobile ist ja sowieso todgeweiht und mein Lieblingsjoker Android hat eine weitgehende XMPP-Integration, wie man hört. Wozu also noch Mühe in einen guten Open-Source-IM-Client für Windows Mobile stecken?

Und das iPhone? Keine Ahnung, ob es Jabber-Clients im AppStore gibt. Aber selbst wenn, verbietet T-Mobile ja die IM-Nutzung in den Vertragsbedingungen. Oder ist IM-Traffic nur nicht im Inklusiv-Datenvolumen enthalten? Egal, ein Unding ist es so oder so.


array_merge_recursive_overwrite()

19 06 2008

Update 30.70.2009: Seit PHP 5.3.0 gibt es endlich die Funktion array_replace_recursive(), die genau das kann, was meine array_merge_recursive_overwrite() macht. Ich habe meine Funktion erweitert, so dass sie lediglich array_replace_recursive() aufruft, wenn diese verfügbar ist. Dies dient nur der Abwärtskompatibilität in bestehenden Projekten und macht keinen Sinn, wenn man neu anfängt. Für einen solchen Fall (hoffentlich der Normalfall) habe ich unter obigem Link einen fertigen Code als Kommentar hinterlassen.

Gestern musste ich mit PHP zwei verschachtelte assoziative Arrays zusammenführen, wobei allerdings bestehende Werte im einen Array durch Werte des anderen überschrieben werden sollten. Leider kommt die PHP-Funktion array_merge_recursive() dafür nicht in Frage, weil sie im Konfliktfall die Werte nicht überschreibt, sondern ein Unterarray baut, in dem beide Werte enthalten sind. Einen Schalter zum Überschreiben gibt es nicht, also musste ich eine eigene Funktion für diesen Zweck bauen. Et voilà, hier ist sie:

/**
 * merges two arrays recursively, overwrite existing values in $base with values from $merge
 * array_merge_recursive does not overwrite values, it creates a new sub array with both values in it, so we need this function
 * since PHP 5.3.0 the built in array_replace_recursive() does the same, so it will be called, if available
 * 
 * @author     Gregor Nathanael Meyer <Gregor at der-meyer.de>
 * @param      array $base base array
 * @param      array $merge array to be merged into base array
 * @param      array $merge,... more merge arrays
 * @return     array merged inputs
 */
function array_merge_recursive_overwrite($base, $merge)
{
  // as of PHP 5.3.0 array_replace_recursive() does the work for us
  if (function_exists('array_replace_recursive'))
  {
    return call_user_func_array('array_replace_recursive', func_get_args());
  }
  
  function recurse($base, $merge)
  {
    foreach ($merge as $key => $value)
    {
      // create new key in $base, if it is empty or not an array
      if (!isset($base[$key]) || (isset($base[$key]) && !is_array($base[$key])))
      {
        $base[$key] = array();
      }
      
      // overwrite the value in the base array
      if (is_array($value))
      {
        $value = recurse($base[$key], $value);
      }
      $base[$key] = $value;
    }
    return $base;
  }
  
  // handle the arguments, merge one by one
  $args = func_get_args();
  $base = $args[0];
  if (!is_array($base))
  {
    return $base;
  }
  for ($i = 1; $i < count($args); $i++)
  {
    if (is_array($args[$i]))
    {
      $base = recurse($base, $args[$i]);
    }
  }
  return $base;
}

Genau wie ihre Schwester array_merge_recursive() nimmt sie zwei oder mehr Arrays entgegen und gibt diese verbunden zurück. Viel Spaß damit, falls es wer gebrauchen kann.

Nachtrag: Ich hätte auch einfach mal bei Google suchen können, so ziemlich die gleiche Funktion gibt es auch im Horde Framework, allerdings nur für zwei Arrays (also so wie meine innere Funktion). Mist, da hätte ich mir die verhasste Rekursion gar nicht selber ausdenken müssen.

Nachtrag: Die Kommentare in der PHP-Doku bringen auch etliche Varianten dieses Themas. Man sollte sich von unleserlicher Schreibweise nicht abschrecken lassen, auch wenn man schon müde ist. Naja, wenigstens ist meine Lösung nicht total doof.


Der Firefox 3 ist revolutionär

11 06 2008

In absehbarer Zeit kommt die finale Version des Firefox 3 raus, die wirklich revolutionär unterwegs ist. Warum?

In erster Linie bringt sie Firefox zurück auf die Fast-Lane. Das Ding ist gefühlt wieder genau so schnell wie Safari und Opera. Das ist gut, sehr gut sogar. Firefox war in der Zwischenzeit ein geradezu behäbiger Browser geworden und genau dieses Problem adressiert die neue Version. Fein. Wenn man nicht gerade Opera oder Safari benutzt hat, hätte man schon wieder vergessen können, dass Websurfen flüssig und schnell gehen kann. Willkommen zurück in der Spitzengruppe der Browser.

Aber auch die neuen Features sind revolutionär für die Usability. Die zusammengelegte Bookmark- und History-Verwaltung arbeitet so wie sie soll. Ich frage mich, warum erst nach 15 Jahren jemand auf die Idee gekommen ist, das in der Art zu gestalten. Ich habe keine Lust, das wortreich zu beschreiben, man schaue sich einfach mal diesen Screencast zu den Neuerungen im Firefox 3 an oder probiere es selbst aus. Alleine die Tags für Bookmarks, die Schnell-Favoriten-Funktion, die schnelle Suche in History und Bookmarks über die jetzt zentrale Adressleiste und die mögliche Synchronisation der Bookmarks und Einstellungen über Weave sind schon toll. Vor allem letzteres ist ein wichtiger Punkt, den auch Opera (in 9.5) anfasst, allerdings mit einer geschlossenen Lösung: die Bookmarks und Einstellungen liegen also auf Servern von Opera und nicht auf beliebigen. Schauen wir mal, was Mister Wong und Konsorten daraus machen, denn die Funktionalität ähnelt sich doch signifikant, sogar die Icons für (Top-)Favoriten sehen sich zu verwechseln ähnlich.

Also wenn der Firefox 3 da ist, macht schnellstmöglich ein Update. Ich warte in der Zwischenzeit weiter auf Opera 9.5 und vor allem Opera Mobile 9.5, denn als Hauptbrowser ist mein Opera seit Version 3 unersätzlich für mich.


Das Serendipity Buch

05 06 2008

Der sympathische und stets hilfreich zur Seite stehende Hauptentwickler meiner Blogsoftware Serendipity (S9Y), Garvin Hicking, hat kürzlich ein feines Buch zu dieser Software veröffentlicht. Das Ding hängt schon eine Weile (vorbestellbar) in meiner Amazon-Wunschliste, aber die 40€ waren mir bislang zu teuer. Ich hätte auch weder Zeit noch Anlass, mich vertiefend dieser Software zu widmen, auch wenn ich mehrere PlugIns angefangen habe und aus Zeitmangel bisher nicht vollendet habe.

Aus Anlass der Erscheinung des Werkes im Buchhandel verlost er jetzt fünf Ausgaben des druckfrischen Serendipity-Handbuchs unter Leuten, die über das Buch schreiben. Folgende Fragen sind zu beantworten:

Aus welchem Grund sollte man sich das Buch eigentlich kaufen, wenn man es nicht gerade gewinnt?

Ich selber merke, dass ein gedrucktes Buch zur Vertiefung und zum Nachschlagen von komplexen Inhalten wie Programmierung ungemein praktisch ist, auch und gerade aus Bildungsbürger-Sicht. Wer also Weitergehendes mit S9Y vor hat, sollte sich das Buch griffbereit in den Schrank stellen. Wordpress ist ja nicht die einzige erweiterbare Blog-Plattform.

Was gefällt euch am besten an Serendipity?

An S9Y mag ich, dass alles einfach funktioniert. Auch die PlugIn Schnittstelle ist recht fortgeschritten, was sicher auch mit dem im Vergleich etwa zu Wordpress angenehmem Code zusammenhängt. Das Wordpress Motto lautet ja Code is art und Kunst ist bekanntlich Geschmachssache. Mein Geschmack ist der Wordpress Code jedenfalls nicht. Aber auch wer schon mal ein Template für Textpattern "installiert" hat, wird sich über das tolle Smarty-basierte 1-Klick-installiert-Theme-System von S9Y sehr freuen können.


Auch ne interessante Software-Lizenz

30 04 2008

Gerade stolpere ich über eine interessante Software-Lizenz der Software GlovePIE:

NOTE! You may not use this software on military bases, or for military purposes, or in Israel (until they end the occupation of Palestine). Violation of the license agreement will be prosecuted. See the readme for the license agreement.

So kann man politische Statements auch verbreiten. Ich glaube, ich mach sowas auch. Also jetzt nicht mit der Israel-Bedingung, aber mir fällt sicher was spannendes ein. Mal schauen. Ob sowas in Deutschland wohl rechtlich Bestand hat? Warum eigentlich nicht?


Traumwelt

04 04 2008

In einem rein internen Forum mit etwa 20 Nutzern ergibt sich folgende Browserverteilung (bezogen auf die unique visits). Bei solch traumhaften Verhältnissen geht einem doch das Herz auf:

So müssen Browserstatistiken aussehen

Die Grafik stammt übrigens vom vielversprechenden Open-Source Statistiktool Piwik, das ich seit einiger Zeit testweise neben Slimstat im Einsatz habe. Die aktuelle Beta-Version ist allerdings für größere Seiten momentan völlig ungeeignet: Ruft man das Ding für die Fachbereichs-Website (meine ehemalige Wirkunsstätte) mit 700.000 PIs im März, also ca 23.000 PIs pro Tag auf, passiert etwa 20 Minuten nichts und in der Zeit ist der Server so ausgelastet, dass das TYPO3 mit einer Datenbank-Fehlermeldung abbricht (trotz eines memory_limit von 192MB für PHP). Unschön. Sowieso ist bei Piwik noch viel Raum für Verbesserungen. Trotzdem ein sehr vielversprechendes Tool und vielleicht irgendwann eine echte Alternative zu Google-Analytics.

Die Statistik dieses Blogs sieht übrigens aktuell so aus, auch nicht schlecht:

Auch nicht schlecht

Die lästige PDA-Kaufentscheidung

22 03 2008

Vor ein paar Tagen hatte ich ja meine PDA geschrottet und mich ach Alternativen umgesehen. Dabei hätte ich beinahe einen iPod touch gekauft, hab das dann aber auch einem wirklich bescheuerten Grunde nicht getan: Bei schutzgeld.de ist gerade iPod Woche und ich dachte, dass da vielleicht ein billiger touch an den Start kommt. Also brach ich die Bestellung bei myby.de ab und wartete ab. Gestern kam auch prompt einer rein für 35€ weniger als bei myby.de. War aber schon um 00:52 Uhr ausverkauft. Blöd. Stattdessen hatte ich aber schon mal vorab einen TomTom GO 720T bestellt, denn ein gutes Navi mit FM-Transmitter, Bluetooth-Freispreche und MP3-Player schwebt mir schon lange vor. 309€ kostet mich der Spaß, da bin ich echt mal gespannt. Ich werde berichten.

Bleibt aber die Selbstorganisation, sprich Termine, Kontakte, Aufgabenliste und Notizen. Am liebsten würde ich das über Thunderbird/Lightning machen, aber die Synchronisation ist da (noch?) etwas schwierig. Der iPod touch ist inzwischen aus dem Rennen, weil mir klar geworden ist, dass das Ding nur ne halbe Lösung wäre und ich ein Gerät haben möchte wie das iPhone mit den Funktionen, die ich schon im letzten Beitrag formuliert habe. Wenn das dann nicht von der Sekte Apple kommt, umso besser. Meine Hoffnung ruht auf Android oder einem der anderen Linux/Open-Source-Mobil-Systeme.

Was aber in der Zwischenzeit? Momentan biete ich bei eBay auf einen Loox N560, also das Topmodell der Serie, aus dem mein alter PDA stammt. Unterschiede: Bildschirm mit 640x480 Punkten statt 320x240, WLAN, Bluetooth, schnellerer Prozessor, mehr Speicher. Also packt das Ding fast alle Kritikpunkte an meinem alten PDA an, außer dass ich Windows Mobile noch immer scheiße finde und ich auch beim N560 das gleiche willkürliche Ein- und Ausschalten erwarte. Einige Leute behaupten, dass das am Akku liegt, ich glaube das ist ein Windows-Mobile Problem. Wenn ich das Ding für 170€ bekäme, wäre ich durchaus zufrieden mit der Gesamtsituation. Den TomTom bräuchte ich dann eigentlich doch nicht. Gut, dass die bei hoh.de den noch nicht los geschickt haben. Ich habe also das Wochenende Zeit, auf verschiedene N560er zu bieten. Es lebe das Sammelgebot. Mal schauen.


Apple Software Update drängt einem Software auf

22 03 2008

Für meine Arbeit muss ich Safari auf meinem Windows-Rechner installieren. Grundsätzlich mag ich Webkit ja, aber Safari ist unter Windows, genau wie iTunes und Quicktime, ein Fremdkörper, der sich weder an Konventionen zur Fenstergestaltung hält, noch an übliche Menüaufteilungen unter Windows. Wirklich unschön. Was mich aber zur Weißglut treibt ist das Apple Software Update, das Apple-Software auf dem neuesten Stand halten soll. Grundsätzlich halte ich das für absolut wichtig, aber nicht in der Form, wie Apple das macht: Man bekommt nämlich nicht nur Updates für die installierte Software vorgeschlagen, sondern auf wirklich aufdringliche Weise auch iTunes und Quicktime, die ich beide nicht haben will. Beide sind aber standardmäßig zur Installation ausgewählt und wenn man sie abwählt, erscheinen sie nach dem Safari-Update direkt wieder ausgewählt als noch ausstehende Updates. Eine absolute Unverschämtheit!

Das ganze funktioniert auch andersherum, wie man sich bei computerbase.de heute beschwert. Was soll das? Dieser Missbrauch der eigentlich wichtigen Update-Funktion bringt diese nur unnötig in Verruf, nicht nur die von Apple, sondern von jeder Software. Ich kenne genug Leute, die aus irgendeiner Paranoia oder aus Genervtheit heraus Updatefunktionen abschalten oder ignorieren. Ist ja auch sooooo lästig, seinem Firefox alle paar Wochen ein Update abzunicken und ihn dann irgendwann mal neu zu starten. Honks.

Andere Update-Funktionen sind nicht so klug wie die von Mozilla. Bei Skype zum Beispiel muss man immer das komplette (über 20MB große) Installationspaket saugen und installieren, ebenso bei Opera und vielen anderen Programmen. Unschön, aber in dem Fall nicht völlig unkomfortabel. Den Vogel schießt aber OpenOffice.org ab, das einen auf die ganz normale Download-Seite verweist, das über 70MB große Paket laden und komplett neu installieren lässt; inkl. Lizenzvertrag abnicken und neuem Programmordner bei Versionssprüngen. Das ist wirklich die denkbar unkomfortabelste Update-Funktion überhaupt.


Virtueller lokaler Entwicklungsserver

03 03 2008

Für die Entwicklung von Webkram habe ich einen lokalen Ubuntu-Server in einer virtuellen Maschine installiert. Dort läuft auch ein Samba-Server, über den ich auf meine Dateien zugreife. Sehr praktisch das ganze. Mache ich das Ding aus, stört mich nichts, mache ich es an, habe ich eine komplette und realistische Entwicklungs-Umgebung. Soweit nichts besonderes, aber ich wollte auf die Schnelle ein paar kleine Tipps dazu loswerden.

Für den Start der Virtuellen Maschine und die Einbindung der Netzlaufwerke benutze ich eine simple Batch-Datei:

"PFAD\ZU\VBoxManage.exe" startvm "NAMEDERVIRTUELLENMASCHINE"
pause
net use LAUFWERKSBUCHSTABE: \\SERVERNAME\FREIGABE PASSWORT /user:USERNAME /persistent:no
Die Pause ist notwendig, damit das Verbinden zu den Freigaben nicht fehlschlägt, während der Server noch startet. Folgender Code beendet die Verbindungen und hält den Server an:
net use /DELETE LAUFWERKSBUCHSTABE:
"PFAD\ZU\VBoxManage.exe" controlvm "NAMEDERVIRTUELLENMASCHINE" savestate

Durch das Einfrieren gibt es leider ein lästiges Problem: Die Uhr des Servers wird mit eingefroren, so dass nach jedem aufwachen ein sudo ntpdate ntp1.ptb.de nötig ist, um die Uhr neu zu stellen. Ansonsten ist diese Lösung wirklich gut und VirtualBox eine brauchbare und kostenlose Software. Diese Anleitung hat mir beim Einrichten des Ubuntu-Servers übrigens gute Dienste geleistet. Ach ja: Als ich das seinerzeit eingerichtet habe, musste man noch den Server-Kernel via Aptitude von einer Rettungs-CD gegen einen Standardkernel austauschen, weil der Server-Kernel von Ubuntu 7.04 in VirtualBox nicht startet. Vielleicht ist das aber auch inzwischen behoben.

Noch ein weiterer kleiner Trick zur Arbeitserleichterung ist eine Verknüpfung zum Editor der Wahl mit der Hosts-Datei, die man ab und an bearbeiten muss. In Windows ist diese Datei so dämlich tief versteckt, dass sich das schnell lohnt.