Bildschirmfoto 2012-02-19 um 19.04.39

Ich habe mir eben mal das WordPress Plugin Onswipe angeschaut. Damit ist es möglich, ein WordPress Blog auf dem iPad fast wie eine native App zu bedienen. Man navigiert per Wisch-Geste von einem Artikel zum nächsten. Das sieht alles erstmal recht hübsch aus.

Allerdings stieß ich auf etwas seltsames: Blättert man von Artikel zu Artikel, wird vom Webserver bis auf die Grafiken, die in den Artikeln eingebettet sein können, nichts mehr abgerufen. Ich war nämlich auf der Suche nach einer passenden Stelle, an der ich meinen Piwik-Code einbetten kann. Da ich ad hoc nicht fündig wurde, schaute ich mir mal an, was da so am Webserver ankommt und was vom iPad abgerufen wird. Letzteres machte ich unter Verwendung des mitmproxy.

Statt auf dem Webserver wurde ich dann im mitmproxy-Protokoll fündig: Da tauchten plötzlich Abrufe bei Google-Analytics auf. Diese hatte ich aber auf meiner Seite schon vor einiger Zeit deaktiviert. In der Konfigurations-Seite des onswipe-plugins hatte ich auch keine UA-id von Google-Analytics hinterlegt.

Also woher kommt diese Anfrage?

Zu Beginn eines Requests lädt der Browser die folgende Javascript Bibliothek:

http://cdn.onswipe.com/reader/reader-1.1.0.min.js

Sucht man darin nach dem Google-Analytics Account UA-24076211-1, den man vorher gefunden hat, so wird man fündig.

a.prototype.initAnalytics = function () {
            console.log("init GA"), $("head").append("\t\t\t<script type=\"text/javascript\">\t\t\t  var _gaq = _gaq || [];\t\t\t  _gaq.push(['_setAccount', 'UA-24076211-1']);\t\t\t  _gaq.push(['_setDomainName', '" + window.location.hostname + "']);\t\t\t  _gaq.push(['_setAllowLinker', true]);\t\t\t\t\t\t  " + (this.state.analytics.googleAnalyticsID ? "\t\t\t  _gaq.push(['b._setAccount', '" + this.state.analytics.googleAnalyticsID + "']);\t\t\t  _gaq.push(['b._setDomainName', '" + window.location.hostname + "']);\t\t\t  _gaq.push(['b._setAllowLinker', true]);\t\t\t  " : "") + "\t\t\t  " + (this.state.analytics.googleAnalyticsInternalID ? "\t\t\t  _gaq.push(['c._setAccount', '" + this.state.analytics.googleAnalyticsInternalID + "']);\t\t\t  _gaq.push(['c._setDomainName', '" + window.location.hostname + "']);\t\t\t  _gaq.push(['c._setAllowLinker', true]);\t\t\t  " : "") + "\t\t\t  (function() {\t\t\t    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\t\t\t    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\t\t\t    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\t\t\t  })();\t\t\t</script>\t\t\t");
            if (this.state.analytics.omnitureAnalyticsJS) return console.log("init Omniture " + this.state.publisher.publisher_username), $("body").append(this.state.analytics.omnitureAnalyticsJS)
        }

Wie man sieht, trackt Onswipe.com via Google-Analytics jedes Blog mit, das dieses Plugin einsetzt. Ich habe auf der Homepage des Plugins keinerlei Hinweise dazu gefunden.

twitter

Seit einigen Tagen überschlagen sich die Ereignisse rund um das Klauen der Adressbuchdaten diverser Apps auf dem iPhone und dem iPad. War es anfangs die App von Path, so folgten schnell die Apps von Twitter, Foursquare und Angry Birds.

Bei Twitter lassen sich angeblich die Adressbuchdaten wieder löschen, indem man auf diese Seite bei Twitter geht. Dies geht interessanterweise nicht mit dem Mobil-Gerät. Sitzt man dann endlich an einem passenden Endgerät, gibt’s dort leider nur eine Fehlermeldung.

Fehlermeldung beim Löschen der geklauten Adressbuch-Daten

 

 

 

Woran liegt’s? Müssen die Daten erst bei der NSA abgeholt werden? Oder war’s das Department for Homeland Security? Oder sind’s die Chinesen?

Naja, zu erwarten war das ganze ja schon. Das ist auch kein neues Problem. Wer weiß, was alles irgendwelche Freeware auf dem PC gemacht hat….

Folgendes Problem: eine externe Agentur entwickelt im Auftrag eine iOS-App, um darüber via API auf die eigene Website zuzugreifen. (Der Klassiker — der 250. RSS Reader, aber immer wieder gern genommen.)

Es kommt, wie es kommen muss: Irgendetwas funktioniert nicht, wie man sich das gedacht hat. Die Agentur sagt, der Webserver liefert das Falsche, der Webmaster schaut ins Logfile und sagt, da kommt erst gar nicht der richtige Request an. Was tun?

Erster Schritt: ein Hub und Wireshark

Bis vor kurzem habe ich dann immer zu einem betagten Hub gegriffen, diesen zwischen WLAN-Router und Internet-Gateway gestellt. An diesen habe ich dann an einen weiteren Port einen “echten” Rechner angeschlossen und via Wireshark den Netzwerkverkehr mitgeschnitten und analysiert.

Dabei entstehen ein paar Probleme:

  1. Wer hat immer einen Hub griffbereit? Solche prähistorischen Geräte hüte ich zwar wie meinen Augapfel (man weiß nie, wann man sie mal wieder gebrauchen kann), aber in der Regel hat man doch keines zur Hand.
  2. Die nächste Stufe wäre dann ein managebarer Switch, dem man einen Monitoring Port konfigurieren kann.
  3. Es ist nicht jedermanns Sache, den Netzwerkverkehr auf Höhe der Grasnarbe zu analysieren.

mitmproxy

Solange es sich um http/https Verkehr handelt, kann man einen anderen Weg beschreiten. Man lässt einen Proxy-Server laufen, der die Netzwerkdaten ausgibt.

Ein solcher Proxy ist zum Beispiel mitmproxy. mitm steht hierbei für man in the middle.

Die Installation unter Mac OS X 10.6 läuft recht einfach ab:

git clone git://github.com/cortesi/mitmproxy.git

In das nun entstandene Verzeichnis kopiert man nun noch von http://excess.org/urwid/ das innere urwid Verzeichnis, sodass das Verzeichnis wie folgt aussieht:

Nun kann man bereits den Proxy starten:

./mitmproxy -p 8080

Auf dem iOS Gerät selbst stellt man nun den Rechner als Proxy ein. Wichtig ist dabei, dass das iOS Gerät den Rechner “sehen” kann, sie also zum Beispiel im selben WLAN sind.

Via

ifconfig

kann man auf dem Rechner die eigene IP-Adresse ermitteln.

Unter Einstellungen-> WLAN -> eigene SSID lässt sich unten der HTTP-Proxy einstellen. Hier trägt man nun die IP-Adresse des Rechners unter Server ein und 8080 den Port.

Der Aufruf von Google sieht dann beispielsweise so aus:

Über die Return-Taste lassen sich nun Requests genauer anschauen:

 

 

 

 

 

(Mit der q-Taste kommt man wieder zurück. Mit der tab-Taste kann man sich den Response-Body genau ansehen.)

SSL-Verschlüsselung

Soweit so gut. Doch was macht man, wenn die App via SSL/https mit dem Webserver spricht? Kein Problem:

Der mitmproxy erzeugt beim ersten Starten unter ~/.mitmproxy ein SSL-Zertifikat, das man nun dem iOS Gerät als vertrauenswürdig geben muss.

Das macht man so: Man schickt sich die Datei mitmproxy-ca-cert.pem. Diese öffnet man dann auf dem iOS Gerät und bestätigt, dass man diesem Zertifikat trauen will.

Schon kann man sämtlichen https-Verkehr einsehen.

Dies funktioniert natürlich nur soweit, wie die App auf die globalen http-Einstellungen für Proxies zurückgreift und nicht selbständig Zertifikate überprüft. Da man als Entwickler aber am liebsten auf bereits gelöste Probleme zurückgreift, dürften die meisten iOS-Apps den internen Safari für http(s)-Anfragen nutzen.

Kindle

Wie bereits angekündigt möchte ich kurz über meine Erfahrungen mit der Kindle-App von Amazon auf dem iPhone und dem iPad berichten.

Zunächst zum Kauf eines Buches

Da Apple es untersagt, Bücher oder ähnliches in Apps zu verkaufen, wenn diese nicht auch im App-Store angeboten werden, kann man in der Kindle-App selbst keine Bücher kaufen. Man kann dies aber vom iOS Gerät selbst erledigen. Man geht dazu mit dem Browser auf die Seite von Amazon und kauft dort die Kindle-Version eines Buches. Man registriert sein Gerät ebenfalls bei Amazon, so dass nach dem Kauf eines Buches dieses direkt in der App geöffnet werden kann.

Das Lesen

Ich habe bisher nur ein Buch in der Kindle-App gelesen. Dies ist aber in meinen Augen mit einigen setzerischen Fehlern versehen. So werden immer mal wieder Worte durch Leerzeichen auseinandergerissen. Diese Fehler scheinen nicht beim Umbruch auf dem Gerät selbst zu entstehen, da sie nämlich sowohl auf dem iPad wie auch auf dem iPhone in identischer Weise auftreten. Die Häufigkeit, in der diese Fehler auftreten, ist für meinen Geschmack zu hoch.

Der Umbruch selbst ist sehr rudimentär. So wird das Buch im Flattersatz dargestellt. Ebenso sind Schusterjungen und Hurenkinder an der Tagesordung. Vergleicht man dies mit iBooks, so wird dort der Text wenigstens im Blocksatz dargestellt.

In iBooks erhählt man neben der Angabe der aktuellen Seite zusätzlich noch die Info, wieviele Seiten noch im aktuellen Kapitel verbleiben. Dies fand ich sehr nützlich und habe es bei der Kindle-App vermisst.

Die Synchronisation funktioniert automatisch zwischen den einzelnen Geräten, solange sie online sind. Beim Öffnen des Buches auf einem anderen Gerät, wird man gefragt, ob man zu der zuletzt auf Gerät xy gelesenen Seite springen möchte. Bei iBooks habe ich dies immer durch ein manuell gesetztes Lesezeichen gelöst.

Die Lesbarkeit der Schrift ist auf dem iPad okay, auf dem iPhone 4S sehr gut. Da darf man sich wirklich auf das Retina-Display auf dem iPad freuen.

Fazit

iBooks und Kindle geben sich in meinen Augen nicht viel. Mit dem Kindle dürfte man flexibler sein, da es iBooks eben nur in der Apple-Welt gibt.

Leider musste ich schon mehrfach die Erfahrung machen, dass plötzlich die Video App auf dem iPad direkt nach dem Starten nur noch einen schwarzen Bildschirm präsentiert. Es half weder, die App zu beenden noch das gesamte iPad durchzustarten. Auch beim Durchstarten war es egal, ob ich das Gerät normal ausschaltete oder aber die beiden Buttons so lang hielt, bis das Gerät automatisch neu startete.

Die einzige Variante, die bei mir dann Erfolg brachte, war das Löschen sämtlicher Videos und Screenscast via iTunes.

Mit diesem Problem stehe ich aber nicht alleine da. Einer schnellen Google-Recherche zufolge tritt das Problem immer wieder auf. Teilweise wurde das iPad dann sogar komplett von iTunes aus wiederhergestellt.

OneNote

Microsoft hat nun sein Notizen-Programm OneNote für das iPad zur Verfügung gestellt. OneNote steht damit in direkter Konkurrenz zu zum Beispiel Evernote. Für beide Programme gibt es ebenso ein Desktop Programm, mit dem die Notizen auf dem PC gepflegt werden können. Allerdings ist die Evernote-Version kostenlos. Für die OneNote-Version benötigt man die Office-Version 2010 (die Home-Edition reicht).

Die Daten werden auch in der Cloud gespeichert. Allerdings geschieht dies natürlich in der Microsoft Welt. Dafür benötigt man zwingend eine Live Id.

Für Nutzer, die bereits OneNote auf dem PC im Einsatz haben, wird die iPad Version sicherlich eine hilfreiche Unterstützung sein. Für alle anderen wird OneNote sicherlich keine Alternative zu Evernote sein, da man sehr auf die Microsoft Welt beschränkt ist. Es wird sich zeigen, wieviele andere Programme, die bereits heute die Funktion “Weiterleiten an Evernote” anbieten, dies auch für OneNote tun werden. Ich bin skeptisch.

Apple und die Umlaute, damit kann man stundenlang, wenn nicht gar tagelang kämpfen. Einige Probleme kann man in den Griff kriegen, wenn man Mails (zum Beispiel als Newsletter) von einem eigenen Server verschickt.

Ein anderes Problem stellen Umlaute in Namen dar, die Bestandteil einer E-Mail Adresse sind. Hier werden die Umlaute dann so zerschossen dargestellt, dass man nicht mehr ohne weiteres auf solche Mails antworten kann. Für dieses Problem kann ich leider (noch) keine Lösung präsentieren.

Doch nun zu dem, was ich gelöst habe: Es soll von einem Linux-Server eine E-Mail verschickt werden, die sowohl im Betreff wie auch im Mail-Body Umlaute enthält. Empfangen werden soll diese Mail von einem Microsoft Exchange Server 2003, von dem ein iOS Gerät wie das iPhone oder das iPad Mails liest.

Hier kommt es darauf an, dass die Umlaute richtig kodiert werden. Richtig ist hier in dem Sinne zu verstehen, dass man das Verfahren benutzt, das auch von Apple richtig unterstützt wird.

Wie sich herausgestellt hat ist dies quoted-printable. Für das Betreff der Mail muss der Text seinerseits noch kodiert werden. Im folgenden stelle ich ein Perl-Programm vor, das die beiden Perl-Module MIME::Words und MIME::Lite nutzt, um die Inhalte entsprechend zu kodieren:

#!/usr/bin/perl
use MIME::Lite;
use MIME::Words qw(:all);

$subject = "Testmail äöüÄÖÜß";
$usermail = " äöüÄÖÜß";

$msg = MIME::Lite->new
(
 From = 'from@sender.domain',
 To = 'to@empfaenger.domain',
 Encoding = 'quoted-printable',
 Subject = encode_mimewords($subject),
 Type = 'text/plain; charset=latin1',
 Data = "$usermail",
);

$msg->send();

 

SPY mouse

Die Zeit der freien Spiele für das iPhone geht weiter. Zur Zeit ist SPY mouse von den Machern von u.a. Flight Control (das zur Zeit ebenfalls kostenlos erhältlich ist) kostenlos erhältlich.

Bei SPY mouse handelt es sich grob gesagt um eine Mischung  aus Flight Control und Splinter Cell: Man muss der Maus einen Weg zum Aufsammeln der Käsestückchen aufzeigen, indem man ihn mit dem Finger auf das Display malt (wie eben bei Flight Control), sollte sich dabei aber nicht von den Streife gehenden Katzen erwischen lassen und wählt daher einen Weg im Verborgenem (wie eben bei Splinter Cell).

Leider steht zur Zeit nur die iPhone Version kostenlos zur Verfügung. Die HD Version ist für 2,39 € erhältlich.

Also frohes Käse-Sammeln!

TV Spielfilm

In letzter Zeit beobachte ich auch bei iPad-Apps einen Slashdot-Effekt. Das hängt zum Teil damit zusammen, dass die jeweile App gerade gepusht wird (wie zum Beispiel bei Flight Control) oder aber, dass die jeweile App mit neuen Features oder für neue Geräte eingestellt wurde (wie bei Flipboard oder zite).

Teilweise hängt es aber auch an der Tageszeit: So ist die App von TV Spielfilm in der Regel abends gegen 20:00 Uhr nicht zu benutzen. Sie kann sich einfach keine aktuellen Daten holen. Mit der Printausgabe wäre das nicht passiert ;-)

12 Geschenke

Wie auch im vergangenen Jahr stellt Apple auch dieses Jahr wieder vom 26.Dezember bis zum 6.Januar jeden Tag einen kostenlosen Download als Geschenk zur Verfügung. Damit keinen dieser Downloads verpasst, gibt es die passende App dazu.

Erlaubt man dieser App, push-Nachrichten zu empfangen, erhält man an jedem Tag eine Erinnerung und Infos zum jeweils aktuellen Geschenk.

Allerdings macht Apple sich nicht nur Freunde mit dieser App. Apple setzt iOS 4.3 voraus, was die Benutzung von iPhone 3G- und älteren iPod touch-Geräten verhindert.  Sicherlich nutzt diese App keine Features von iOS, die erst mit iOS 4.3 Einzug erhalten haben. Apple will vielmehr die Nutzer dazu bringen, neue Geräte zu kaufen. Ob das wirklich aufgehen wird, bleibt abzuwarten. Wie schreibt ein Rezeszent so schön? “Hochmut kommt vor dem Fall”. Auf der anderen Seite sieht dies bei Android auch nicht anders aus. Bis die Gerätehersteller eine Aktualisierung bereitstellen — sofern sie es denn überhaupt tun — vergeht einiges an Zeit. Aber das ist eine andere Geschichte. Vielleicht schreibe ich dazu ein andermal etwas darüber.

© 2012 JerryWho Suffusion theme by Sayontan Sinha