Archive for April, 2010

Bildschirmfoto 2010-04-10 um 17.25.41

Surfen mit der FONIC Tagesflat und dem Huawei e160

Vor kurzem habe ich mir den Surfstick K3565-H (Vodafone Prepaid) zugelegt um damit gelegentlich mal online zu gehen. Der Stick von Huawei kann mit einer alternativen Mobile-Partner Einwahl-Software betrieben werden, sodass man neben der Vodafone-SIM-Karte jede beliebige SIM-Karte verwenden kann.

SIM-Karte besorgen

Da ich die FONIC Tagesflat mit 2,50€/Tag sehr attraktiv finde, wollte ich diese gerne einmal ausprobieren.
Leider lässt sich auf den ersten Blick auf der FONIC-Homepage nicht herausfinden, ob und wie man eine Daten-SIM ohne Surfstick (da ja bereits vorhanden) bekommen kann.

Nach etwas Recherche und Hinweis auf MyDealz.de fand ich heraus, dass man sich einfach eine “normale” SIM-Karte bestellt oder bei z.B. Lidl besorgt und diese dann von einem FONIC-Mitarbeiter über die (Spezial-)Hotline (01805880488) von volumenabhängiger Abrechnung auf Tagesflatrate umstellen lässt.

Man kann dann übrigens immer noch “normal” damit telefonieren/smsen, nur Datenverbindungen werden halt pauschal per Tagesflat von 2,50€ ab dem ersten Bit abgerechnet. Also Achtung bei Umstellung und Einsatz in einem Smartphone, wie das iPhone – man würde wohl jeden Tag zur Kasse gebeten.

Dank des 25€-Kostenschutzes wäre das aber auch nicht ganz so tragisch. Das ist nämlich seit dem 25.03.2010 hinzugekommen. Sobald man also mehr als 10 Tage die Tagesflat nutzt, werden trotzdem nur 25€ abgebucht.
Diese Änderung hatte allerdings auch einen kleinen Haken: vorher erfolgte eine Geschindigkeitsdrosselung ab 1GB – nun wurde es auf 500MB reduziert – was ich aber immer noch für vertretbar halte.

Einrichten

Wie bereits erwähnt, kann man den K3565-H Surfstick auch mit einer alternativen Einwahlsoftware nutzen, sodass man dank SIM- und Net-Lockfreiheit auch eine Fonic-Karte nutzen kann.
FONIC bietet einen baugleichen/kompatiblen Surfstick an und auf der Homepage ist eine entsprechende Einwahlsoftware zu finden: http://www.fonic.de/html/formulare.html.

Seit Snow Leopard haben wohl alle einem Huawei Surfstick beigelegten Einwahl-Softwaren Probleme beim direkten Ausführen. Versucht man nämlich die entpackte “Mobile Partner” Applikation zu starten, so stürzt diese mit folgendem Fehler ab.

Doch auch dafür gibt es eine Lösung. Man öffnet das Kontextmenü (per Rechtsklick) der “Mobile Partner” Applikation. Und lässt sich den “Paketinhalt anzeigen”.

Darin findet man unter Content/Resources den Installer MobilePartner.mpkg, der sich anstandslos installieren lässt.

Starten

Im Programme Ordner findet man nun einen Unterordner “Mobile Partner” und darin die ausführbare Applikation “Mobile Partner”. Diese ist für FONIC schon vorkonfiguriert, sodass man direkt lossurfen kann.

GoogleLabsVerschachtelteLabels

Google Mail beherrscht nun verschachtelte Labels

Ein Feature, das ich mir schon bald nach der Umstellung auf einen Google Mail Account gewünscht habe, ist nun umgesetzt worden. Labels in Labels sind nun verschachtelbar.

Aktivieren

Man muss einfach unter Labs “Verschachtelte Labels” aktivieren.

Anschließend kann man Labels verschachteln.

Namenskonvention

Die Hierarchie ergibt sich aus der Namenskonvention. Das “Eltern”-Label wird im Namen des Unter-Labels durch ein “/” getrennt voranstellt.

Beispiel

Hat man zwei bestehende Labels, z.B. Privat und Notes, so kann man Notes als Unter-Label von Privat anlegen, indem man Notes folgenden neuen Namen gibt:
Privat/Notes

Das Ergebnis sieht dann so aus:

So ist es möglich, bestehende Labels einfach durch umbenennen zu gruppieren.

Auswirkung auf IMAP

Wenn man seine Mails auch noch per IMAP in einem Mail-Client abruft, so wird man erfreut feststellen, dass die Unter-Labels dabei auch in Unter-Ordner abgebildet werden! D.h. es wird bei o.g. Beispiel nicht ein Ordner “Privat/Notes” angelegt, sondern “Notes” als Unter-Ordner von “Privat”. Absolut genial.

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.