WWW

PHP string contains und startsWith

Wer von anderen Programmiersprachen evtl. gewohnt ist, einen String nach einem Zeichen bzw. Teilstring zu durchsuchen, wird in PHP etwas verwundert sein. Eine entsprechende Funktion wie, strcontains (um der Namensgebung in PHP zu folgen) gibt es nicht.
Natürlich wird man sehr schnell fündig werden und auf strpos stoßen, was eben die in der Überschrift genannten Funktionen vereint.

Hintergrund

Folgender Ausdruck liefert den Integer Wert 5 zurück, da ‘der’ im Text an fünfter Stelle (beginnend mit 0) vor kommt.
strpos('Text der was enthält','der')

Suchte man nach ‘Text’ würde man 0 als Ergebnis erhalten.
Ein nicht vorkommendes Zeichen bzw. Textstück wird mit einem ‘false’ quittiert.

Hier zeigt sich dann aber auch ein kleines Problem: PHP behandelt standardmäßig den booleschen Wert ‘false’ wie ’0′.
Ein einfacher Vergleich der Form
if (strpos($haystack,$needle)==0)
könnte dann ein unerwünschtes Ergebnis liefern, wenn man auf die Position 0 prüfen möchte. Wenn der Text $haystack nicht $needle enthält würde ein false zurück geliefert, was bei einem einfachen Vergleich wie 0 behandelt wird, somit die Bedingung erfüllt!
Würde man erwarten, dass das 0 als false interpretiert wird, würde ein $needle, das genau am Beginn von $haystack steht auch für ein falsche Ergebnis sorgen.
In jedem Fall ist es Wichtig zu Wissen, dass PHP für diesen Fall den “===” Vergleichs-Operator ‘Identisch’ kennt. Wird zwar deutlich in der Dokumentation zu strpos beim Rückgabewert darauf hingewiesen, aber evtl. für manchen erst mal verwirrend. Dieser Operator vergleicht auch den Typen, sodass das boolesche false NICHT dasselbe ist, wie der Integer 0.

Umsetzung

Mit diesem Wissen kann man strpos für die ursprünglich gewünschten Funktionen einsetzen:
startsWith entspricht folgendem Vergleich:
if (strpos($heystack,$needle)===0)

contains entspricht folgenem Vergleich:
if (strpos($haystack,$needle)!==false)

Da ich nach etwas PHP-Abstinenz immer wieder etwas brauche, um genau diesen Sachverhalt zu verstehen, habe ich diese Vergleiche in Funktionen ausgelagert, die einen sinnvollen Namen haben.

strcontains($haystack,$needle) {
  if  (strpos($haystack,$needle)!==false)
    return true;
  else
    return false;
}
strstartswith($haystack,$needle) {
  if  (strpos($haystack,$needle)===0)
    return true;
  else
    return false;
}

Natürlich könnte man diese Zeilen noch etwas komprimierter schreiben, aber so lässt sich das ganze auch später (oder von Anderen) gut lesen und nachvollziehen.

providertable

Kosten: Vergleich der unterstützten Provider + Ausblick

Unter kosten/kosten-provider/ möchte ich gerne alle unterstützten Provider, deren Vorzüge und Nachteile zum Vergleichen auflisten. Dabei habe ich die für mich interessantesten Kriterien gewählt. Die Tabelle kann aber gerne erweitert werden, Vorschläge und Anregungen sind erwünscht.

meebo-push

Meebo – der ultimative Multi-Messenger

Wer kennt das nicht: ICQ, Jabber und MSN Account, seit einiger Zeit noch Facebook evtl. Google Talk; und überall muss man entweder eine eigene Applikation dafür starten oder eine Web-Seite offen halten. Gut, die Findigen werden unter Windows Pidgin, Miranda oder Trillian einsetzen um die zig Accounts in einer einzigen Applikation zu bannen. Mac User das bewährte Adium und KDE bzw. Gnome-User kennen da auch ihre ganz persönlichen Tools.

Web

Kann man evtl. keine App installieren, so ist man wieder auf die einzelnen Dienste bzw. deren Web-Clients angewiesen… oder man nutzt den genialen Dienst meebo. Meebo kann neben den bekannten Diensten zig unbekanntere Chatprotokolle und fasst so beliebig viele verschiedene Accounts in eine Web-Oberflache zusammen. Die Bedienung ist dank AJAX nahezu Desktop-Like. Die Verbindung erfolgt wahlweise über https geschützt. Die Instant Messenger Verläufe werden in einer Historie mitgeschrieben, sodass man gegenüber einem Desktop Multi-Messenger keine Nachteile in Kauf nehmen muss.

Im Gegenteil, die Web-basierte Lösung bietet einige Vorteile gegenüber der Desktop-Lösung:

  1. Keine Installation nötig.
  2. Zugriff auf Historie auch von unterschiedlichen Rechnern immer möglich. Wenn man also unterwegs mal an einem Fremdrechner saß und meebo nutzte, kann man zuhause den Verlauf nach vergessenen Linkemfpehlungen etc. durchsuchen.
  3. Zentrale Haltung der Accounts erfordert nicht auf zig potentiellen Rechnern das Konfigurieren der Accounts
  4. Das genialste finde ich aber, dass man auf mehreren Rechnern gleichzeitig angemeldet sein kann – das geht mit ICQ z.B. definitiv nicht.

Der Letzte Punkt zeigt sich auch bei der Nutzung der (tata) iPhone-App als überaus nützlich.

iPhone

Seit heute gibt es auch eine kostenlose iPhone App. Die Meebo-Macher haben auch hier sehr gute Arbeit geleistet. Sie startet gegenüber vergleichbaren Konkurenz-Apps deutlich schneller, was ich bei der Nutzungweise von iPhone-Apps, und besonder Messenger-Apps, als sehr essentiell empfinde. Push-Notification wird unterstützt, sodass man auch bei nicht geöffneter App über eingehende Nachrichten informiert wird.
Die Konfiguration ist denkbar einfach: den Accountnamen + Passwort, von der Web-Applikation her schon bekannt, eingeben und fertig.
Die Bedienung ist absolut intuitiv: Buddy Liste wird angezeigt. Drückt man auf einen Buddy, kann man mit ihm chatten. Zwischen mehreren gleichzeitigen Chat-Fenstern kann man durch die bekannte Wisch-Geste link/rechts wechseln.

Hat man die Web-App neben der iPhone-App mit gleichem Account geöffnet, so werden die Eingaben direkt auf die jeweilige andere Plattform übermittelt, sobald man diese absendet. Gibt man also auf dem iPhone Text ein und sendet ihn an den Empfänger, so zeigt die Web-App unmittelbar diesen gesendeten Text auch entsprechend an und umgekehrt.
Darüberhinaus, und da ist die Liebe zum Detail, die ich so mag, zeigt die Web-App an, dass bei laufender Web-App, die Push-Nachrichten natürlich nicht gesendet werden. D.h. sobald man neben dem iPhone noch die Web-App nutzt, wird man nicht per Push-Benachrichtigung belästigt benachrichtigt. Meldet man sich aus der Web-App ab, so trudeln auch wieder die Push-Benachrichtigungen ein.

Desktop

so und hier ist man als Mac/Linux User derzeit noch etwas angeschmiert. Für Windows gibt es einen so genannten Notifier. Dieses kleine Programm nistet sich in der System-Tray ein und zeigt Sprechblasen – ähnlich Growl – mit den Nachrichtentexten an.
Meebo stellt zwar über das Jabber-Protokoll Zugriff auf ihren Dienst bereit, sodass man mit jedem Jabber-fähigen Messenger darauf zugreifen könnte.
Allerdings wird Transports nicht unterstützt, sodass die Buddy-Liste der nicht-Meebo-Dienste – also das was eigentlich interessant wäre – nicht übertragen wird. Hier fände ich es toll, wenn das noch vom Meebo Team umgesetzt würde, dann wäre das ganze eine absolut runde Sache.

Wer trotzdem sein Messenger konfigurieren möchte, hier die Einstellungen:
Benutzername: username@meebo.org
@meebo.org ist zwingend notwendig!
Passwort ist natürlich wieder dasselbe.

In den Servereinstellungen müssen folgende Einstellungen vorgenommen werden: