iPhone: Rufumleitung einstellen und andere nützliche Tipps

Das iPhone von T-Mobile schaltet standardmäßig recht schnell (ich meine 15 sek.) zur Mailbox um, sodass man kaum eine Chance hat, rechtzeitig den Anruf anzunehmen. Ein Menü zum Ändern dieser Einstellung gibt es erstaunlicherweise beim iPhone nicht, sodass man sich schnell in die Anfänge des Mobilfunks zurück versetzt fühlt: Es gilt, je Einstellung einen Code einzugeben (!).

Hierfür gibt es hinreichend Anleitungen (z.B. bei Apfeltalk.de, wo viele weitere Funktionen erläutert sind), Tutorials, Blogeinträge (z.B. hier, hier und hier) etc. und nicht zuletzt ein übersichtliches PDF von T-Mobile, aus dem alle Codes hervorgehen.

Trotz exakter Befolgung der Anleitung bzw. exakten Eintippen der Codes wollte T-Mobile meine Änderungen aber nicht entgegen nehmen: Ich erhielt stets die Meldungen „Fehler beim Ausführen der Anforderung Kein Netzwerkdienst“, „Einstellung Registrierung fehlgeschlagen Sprache Rufweiterleitung wenn nicht erreichbar“ (und sinngemäß entsprechend für die SMS- und Datendienste ..).

Ein Anruf bei der Hotline unter 2828 brachte dann die Aufklärung: Meine Rufnummer war initial eine D2-Nummer, entstammt also dem Nummernblock von Vodafone. Mit einer solchen portierten Nummer müssen die Codes wie folgt leicht angepasst werden.

Das in den Codes zur Aktivierung oder Anpassung der Umleitungen enthaltene „3311“ als Platzhalter für „eigene Mailbox“ ist durch die eigene Nummer mit dem Code für die Mailbox zu ersetzen. Dabei ist zwischen die Vorwahl und die Rufnummer die „55“ für die Visual Voicebox zu setzen! Ein Beispiel:

**62*3311# (Umleitung bei ausgeschaltetem Telefon aktivieren) wird zu **62*+4917255XXXXX#

Wichtig: der nette Herr bei T-Mobile sagte, dass die Landesvorwahl mal klappen würde und mal nicht – also ggf. mal ohne Ländercode probieren, das wäre dann so: **62*0172XXXXX#

Beschreibung Zahlencode mit T-Mobile Rufnummer Zahlencode mit Rufnummer aus anderem Netz (z.B. von Vodafone mitgenommene Nummer)
Samplerate des Telefons verbessern (iPhone nutzt standardmäßig nicht die volle Samplerate für die Sprachübertragung, sondern läuft im Modus „half quality“. Dies ist aber umschaltbar in den Modus „EFR“ / „enhanced full rate“. Achtung – der Stromverbrauch steigt hierdurch an. *3370# *3370#
Wieder zum Default-Wert für die Samplerate zurückschalten: #3370# #3370#
Alle Rufumleitungen entfernen ##002# ##002#
Bei „besetzt“ Anrufe zur Visual-Voicemail-Box umleiten **67*3311# **67*+4917255XXXXX#
Rufumleitung bei ausgeschaltetem Handy (bzw. „nicht erreichbar“) **62*3311# **62*+4917255XXXXX#
Rufumleitung erst nach 30 sek. (die letzten Ziffern übergeben die gewünsche Zeitspanne): **61*3311*11*30# **61*+4917255XXXXX*11*30#
Alle Anrufe umleiten: **21*3311# **21*+4917255XXXXX#

Deployment mit Capistrano

Alexander machte mich auf ein recht spannendes Tool aufmerksam: Capistrano. Das ist, ganz kurz zusammengefasst, eine RubyOnRails Anwendung zur Ausführung von Tasks auf einem entfernten Server und könnte ein paar selbstgebaute Shellscripts entweder ergänzen oder ersetzen. Hier mal die Eingangsbeschreibung von deren Website: Great for automating tasks via SSH on remote servers, like software installation, application deployment, configuration management, ad hoc server monitoring, and more.”

Der Tipp von Alexander zielte vor allem auf das Deployment ab (”Dort gibt es eine Software namens Capistrano http://www.capify.org/, welche es erlaubt per Ruby aus dem SVN Projekte auf mehrere Server zu verteilen und notfalls auch ein Rollback basierend auf verschiedenen Versionsnummer zu machen.“). Und das könnte in der Tat sehr interessant sein, schaue ich mir nochmal genauer an und berichte dann.

papaya Entwicklung: XSL Templates für Content Module

In einigen Fällen stellt sich dem Template-Programmierer die Frage, wie die Inhalte unter /page/content/topic ausgegeben werden sollen. Grundsätzlich stehen drei verschiedene Wege zur Verfügung:

  • <xsl:apply-templates> oder <xsl:call-template>
  • <xsl:value-of>
  • <xsl:copy-of>

Die erste Variante führt weitere Templates auf, die den Teilbaum in /page/content/topic weiterverarbeiten, wobei man mit call-template direkt ein bestimmtes Template aufrufen kann. Mit value-of gibt man lediglich alle Textknoten in die Ausgabe aus, die im referenzierten Teilbaum enthalten sind, während copy-of den gesamten Teilbaum in die Ausgabe kopiert.

Wann nimmt man was?

Welche Variante sollte man denn nun benutzen? Alle Methoden haben ihre Vor- und Nachteile.

1. value-of

Mit value-of erzeugt man sichere Ausgaben, da alle Formatierungen aus Texteingabefeldern entfernt werden. Besonders bei user-generiertem Content ist dies eine sehr einfache Methode, um Manipulationen zu verhindern. Auch Inhalte, die im Backend eingegeben werden, können auf diese Weise sauber gehalten werden.

Der Nachteil dieser Methode ist jedoch, dass man sie nicht überall einsetzen kann, wo man Formatierungen wie <h2>, <em>, <strong> usw. einsetzen will. Auch Hyperlinks gehen natürlich verloren. Für umfangreiche strukturierte Inhalte sollte man also diesen Weg nicht gehen.

2. copy-of

copy-of hat den Vorteil, dass alle Formatierungen und inhaltlichen Strukturierungen (<h1-6>) mit in die Ausgabe übernommen werden, genauso wie Hyperlinks, was durchaus erwünscht sein kann. Schließlich möchte man als Redakteur Artikel schreiben, die in Absätzen strukturiert sind, Zwischenüberschriften oder Links zu anderen Ressourcen enthalten.

Der Nachteil dieser Methode ist, dass man die Kontrolle über den Teilbaum aus den Händen gibt. Er wird ja einfach in die Ausgabe kopiert. Daher sollte man diese Anweisung auch nicht für user-generierten Content benutzen, der bösen Code enthalten könnte.

“Böser Code” kann zum Teil auch durch Sonderzeichenmaskierung (=Escaping) in der Methode getParsedData() in der Content-Modul-Klasse entschärft werden, indem man bspw. papaya_strings::escapeHTMLChars($myStringVar) benutzt (siehe auch $this->getXHTMLString()).

3. apply-templates oder call-template

Mit apply-templates kann man komplexe Strukturen innerhalb von /page/content/topic an zusätzliche XSLT-Templates zur Verarbeitung weiterdelegieren. Die Anweisung sucht dabei ein Template, dessen match-Muster am besten zum jeweiligen Element in der Knotenmenge des Kontextknotens passt. Für jeden Knoten im Kontextknoten wird also ein Template anzuwenden versucht. Falls es kein passendes Template gibt, wird einfach der entsprechende Textknoten ausgegeben. Wenn das select-Attribut benutzt wird, versucht XSLT, ein Template für jeden in select definierten Knotenmengenausdruck anzuwenden.

Diese Anweisung hat den Nachteil, dass sie nicht besonders performant ist, da der gesamte Teilbaum durchsucht wird. XSLT versucht dabei, für jeden Knoten das richtige Tempate zu finden.

Nach Möglichkeit sollte man also Templates direkt auswählen, indem man call-template benutzt und den gewünschten Teilbaum des Kontextknotens als Parameter übergibt. Auf diese Weise hat man auch die volle Kontrolle darüber, welches Template benutzt wird und welche Transformation angewendet werden soll.

Bei den aufzurufenden Templates steht man natürlich wieder vor der Wahl, ob man jetzt value-of oder copy-of benutzen soll. Wenn es sich um Inhalte handelt, die man im Backend in einzeilige Textfelder eingibt, wird man mit Sicherheit value-of benutzen, bei mehrzeiligen Textfeldern, die auch HTML-Eingabe erlauben, muss man auch copy-of benutzen, damit der HTML-Code auch in der Ausgabe landet. Um die Eingabe von HTML-Code oder sonstiges zu verhindern, sollte man die Content-Module so schreiben, dass entsprechende Validitätschecks bereits während der Eingabe im Backend den Inhalt überprüfen. Validitätschecks sollten also nicht die Aufgabe des Template-Programmierers sein.

(Credits: Text entstammt dem internen papaya-Blog und wurde von Max verfasst.)

Elender Computer

Jedes Mal, wenn ich in Ungarn auf dem Weg zum Einkaufen an diesem Computerladen vorbeikomme, freue ich mich wie ein kleines Kind über die sehr passende Namenswahl 🙂

Video “Seattle Conference on Scalability: YouTube Scalability”

Es gibt einen sehr interessanten Blogeintrag, der auf ein Videovortrag verweist, das einer der Youtube Entwickler/Techniker gehalten hat. Es geht um Skalierbarkeit, speziell um Thumbnails, Datenbanken, etc..

Abstract von der video.google.com Webseite:

“This talk will discuss some of the scalability challenges that have arisen during … Alle » YouTube’s short but extraordinary history. YouTube has grown incredibly rapidly despite having had only a handful of people responsible for scaling the site. Topics of discussion will include hardware scalability, software scalability, and database scalability.

Speaker: Cuong Do Cuong is currently an engineering manager at YouTube/Google. He was part of the engineering team that scaled the YouTube software and hardware infrastructure from its infancy to its current scale. Prior to YouTube/Google, he held various software development and management positions at PayPal and Inktomi.”

Best practises to speed up your website (Yahoo’s Tipps zur Optimierung)

Die “Best Practices for Speeding Up Your Web Site” (slides) von yahoo sind dem einen oder anderen sicherlich bekannt – falls nicht: lesen lohnt sich definitiv.

Wir würden keine Websites für Nazis machen. NIE.

Schön, dass andere auch so drauf sind:

DRESDEN taz Das Dresdener Hotel “Holiday Inn” wirft zwei NPD-Abgeordnete hinaus. Das Hotel ließ die Zimmerbuchung von Sachsens NPD-Fraktionschef Holger Apfel und dessen Stellvertreter Alexander Delle stornieren.

Mehr hier.

Und hier das Schreiben.

emacs…und andere Editoren

Die meisten Entwickler haben sicher mal mit einem emacs-Jünger gesprochen – das könnte ungefähr so verlaufen sein: