All posts by Timo Hetzel

Das ist Ihre Karte?! Kontaktlos in Deutschland bezahlen.

Apple Pay läuft in den USA wohl recht erfolgreich an, NFC wird wohl auch in Deutschland nach und nach in die neuen POS-Terminals eingebaut, die Banken geben auch hierzulande mitunter schon neue Karten mit integrierten NFC-Chips aus. So recht habe ich ja bisher nicht dran geglaubt, aber vielleicht passiert hierzulande doch noch etwas.

Ich habe diese Woche einen Testlauf mit Vodafone Smartpass gewagt. Vodafone vergibt seit etwa einem Jahr an Kunden eine Prepaid-Visa (1. Jahr gratis, ab 2. Jahr 10 Euro Jahresgebühr bei Umsatz unter 600 Euro). Die Anmeldung wird über die Android- oder iOS-App gestartet. Ist das Android-Telefon NFC-fähig (und NFC ist aktiviert), wird vermutlich ein etwas anderer Bestellprozess gestartet. Nach ein paar Tagen kommt ein Brief mit den Karten.

04_NFC-StickerFür inkompatible Android-Geräte, oder solche ganz ohne NFC, oder für iOS wird ein Doppelpack bestellt: Ein “Sticker” für die Rückseite des Telefons, und als Fallback eine klassische Visa mit Magstripe und Chip. Der Sticker wird wie eine SIM-Karte aus einer scheckkartengroßen Plastikkarte herausgebrochen und hat auf der Rückseite ein relativ wenig klebrige Klebefläche. Große Freude bereitet er auf der Rückseite meines iPhones nicht, ich bleibe an der Hosentasche damit hängen, unter einer Hülle ließe er sich wohl halbwegs unauffällig verstecken, falls etwas Luft ist. Um das Jahreslimit über 2500 Euro anzuheben, muss eine Farbkopie (!) oder ein Foto von zwei persönlichen Dokumenten per Email eingeschickt werden.

Für eine Handvoll Android-Geräte (hauptsächlich mit Vodafone-Branding) wird eine “NFC-SIM” vergeben, wohl von G+D, was etwas irreführend ist. Die SIM hat mit dem Funk wenig zu tun, enthält aber neben der Mobilfunk-Auth auch ein Secure Element, so wie es Apple jetzt in die 2014er-Geräte gleich mit einbaut. Das wäre also auch eine Alternative für iOS gewesen, damit hätte Apple allerdings das mobile Payment komplett aus der eigenen Hand an die Mobilfunkanbieter gegeben. Bei diesen Android-Geräten entfällt also der Sticker, das Gerät spricht direkt mit dem Terminal, so wie beim iPhone 6. Die Krypto dafür liegt in dem Secure Element in der SIM-Karte, der Modus dafür nennt sich HCE, Host Card Emulation. Dieses Blog hat einige schöne Artikel dazu.

screen568x568In der App müssen die beiden Karten durch Eingabe ihrer vierstelligen (End)ziffern aktiviert werden. Außerdem vergibt man eine PIN für Zahlungen über 25 Euro und eine PIN für die App selbst.

Guthaben kann über eine andere Kreditkarte (1% Gebühr) oder kostenfrei per Überweisung und Sofortüberweisung aufgeladen werden. Verifiziert man ein Bankkonto, kann man jeweils per Lastschrift bezahlen. Laut App existieren in Vodafone-Shops auch Aufladegutscheine, die man dann in der App eintragen kann, aber auf Nachfrage wollte mir heute der Mitarbeiter im Shop zuerst CallYa-Prepaidguthaben verkaufen, und seine Kollegin meinte zu Smartpass nur: “Gibt’s hier nicht”.

Zwei Zahlungsversuche habe ich heute gewagt: Bei H&M ist ein großes NFC-Logo auf der Seite des Terminals aufgedruckt. Der Kassierer fragt: “Das ist Ihre Karte?!”, aktivert trotzdem das Terminal, das aber nur eine Animation mit Magnetstreifen zeigt und den Sticker nicht erkennen mag.

Im Supermarkt (Hit-Gruppe) hängt ein Aufkleber mit den Zahlungslogos an der Kasse und der schöne Zusatz “Wir akzeptieren auch kontaktlos”. Das Terminal hat keine erkennbare Stelle zum Auflegen des Stickers, fordert aber im Display auf: “Karte einführen oder auflegen”, ignoriert den Sticker aber ebenso. Die Kassiererin meint: “Die alten Terminals hatten das an der Seite, aber die sind neu”.

Laut Vodafone ist Hit einer der Startpartner seit Ende 2013, neben Kaufhof, Karstadt, Douglas, Aral, star/Orlen, Kamps und Relay. Funktioniert hat das heute erstmal nicht.

Ich dachte erst, dass vielleicht mein Sticker defekt sein könnte, aber er meldet sich bei meinem Lesegerät brav als “Visa Prepaid” auf seinem NFC-Interface und stellt die Visa-Anwendung bereit.

Interessant wäre es, ob die Mobilfunkanbieter nächstes Jahr in Deutschland auch mit diesen Kreditkartenprodukten bei Apple Pay mitspielen. Wenn sie sich ein wenig clever anstellen, könnten sie so den vermutlich eher schläfrigen deutschen Banken hier erstmals nennenswert Kundschaft abnehmen. Im Ausland, berichten mir Hörer auf Twitter, ist das schon flächendeckend angekommen und eher die Ausnahme, dass es nicht klappt oder angeboten wird.

Die Telekom nennt ein ähnliches Produkt (mit besonders* geschmackvollem Sticker) MyWallet, bei Vodafone ist es also Smartpass und O2 spielt mit den beiden anderen bei mpass mit.

Ich sage bescheid, sobald ich damit auch tatsächlich etwas bezahlen konnte.

* mywalletcard_sticker_big_sonderedition_x

Transforming Media

transformingmedia

Ich stelle heute auf der Transforming Media-Konferenz in Nürnberg das Geschäftsmodell von Bits und so vor. Plus macht glücklich und all das. Ich verzichte auf Keynote und setze voll auf Yosemite-Features für den Vortrag. Was soll schon schiefgehen?

Die übrigen Programmpunkte drehen sich auch um digitale Geschäftsmodelle, App Economy, Bezahlschranken, Crowdfunding und ähnliche Hipster-Themen.

Wer das live und in Farbe sehen möchte, kann sich ein kostenloses Ticket rauslassen und in Nürnberg vorbeischauen.

Update nach der Veranstaltung: Eine Aufzeichnung gibt es nicht, aber eine schöne Zusammenfassung hier bei Lousy Pennies. Die meisten Punkte aus meinem Vortrag habe ich hier schon einmal Dirk von Gehlen erzählt.

HTTP Live Streaming with Knive, Docker, and DigitalOcean

We’re using a custom version of the Knive Streaming Server (“It cuts, live”) to stream video off a Blackmagic ATEM TV Studio video switcher (using atemclient) to iOS and Mac clients with HTTP Live Streaming. Other clients might work as well, but support varies by version and generally is a major pain.

In the past, we ran the Knive and its ffmpeg processes in virtual machines together with the web server and components of the CDN on one or two physical machines. That proved to be somewhat unpredictable and unreliable when the live audience at the venue triggered a DDOS on that machine.

Portability of the streaming server was problematic in the past as well, as it requires installing a bunch of obscure python libraries and hand-tuning an ffmpeg build from source. Authentication to the stream and serving the m3u8 playlists runs on nodejs, and the media segments are served via Apache to the CDN. In front of these web services lives an instance of varnish to handle everything on port 80 and cache certain parts.

So, Docker comes to the rescue:

On our regular server, these four applications now already run dockerized. The streaming server lives in a hand-tuned image that cannot be built by a Dockerfile just yet. But it can be easily ‘docker save’d out to an archive and ‘docker load’ed on the new machine. It’s pretty large (2-3GB), but includes a lot of temporary cruft that could be removed. The standard packages for varnish, apache and nodejs build nicely with Dockerfiles.

Most of the configuration files for these images live in a git repository that can be cloned to the new machine. Its subdirectories can be mounted as docker volumes, e.g. /etc/apache2/ inside the container comes from the corresponding folder in the config repository: ~/docker/apache2/etc/apache2

The new machine: I chose DigitalOcean to host the stream, and it performed beautifully. Setting up the system only requires creating a new droplet (aka VM) from DO’s Docker on Ubuntu image. All the setup can be done on the smallest instance type ($5/month), and scaled up later for the event only.

Scaling droplets up and down at DigitalOcean comes with a couple of caveats. There are two ways of scaling up: Fast resize and migrate resize. To do a fast resize, halt the system and choose a new size from the web interface. If the machine that hosts your droplet has free capacity, you’ll get a fast resize that will increase CPU and RAM available to the droplet, but disk space will stay at the smaller initial level.

To migrate resize, you also halt the system first, then snapshot it in the web interface, then destroy the droplet and create a new one from the same snapshot. This will increase CPU, RAM and disk space. This will also make it impossible to later scale the droplet back down later, as DigitalOcean requires the disk space to match or to be smaller.

To scale down, you again halt the droplet, snapshot and destroy it and restore the image to a new droplet. If the disk size in the image is too large for the new droplet because of an earlier migrate resize, it won’t work, even if the image didn’t ever use the additional capacity.

Here’s the graph from DigitalOcean, on the 8-CPU box, encoding 4 quality-levels (720p, 360p, 2xx and audio-only) in real-time. First CPU peak is a test run, second bigger peak is the actual show with a little more incoming bandwidth and actual users on the stream.

digitalocean-disk-cpu

As I did the migrate-resize before, I had to move the docker images once more to a smaller droplet after the live event to downsize, but this also worked beautifully.

If you want to play with DigitalOcean, use this link to sign up and receive $10 free credit, enough to run the smallest instance for two months.

Heute 18 Uhr: Bits und so #400 Live in München

#bus300: Bahn-Streik
#bus350: Stammstrecke gesperrt
#bus400: Bahn-Streik

Wer es wegen der Bahn oder aus anderen Gründen nicht nach München schafft, kann mit dem Online-Ticket alle Videos von der Veranstaltung sehen. Wir versuchen, einen Stream aus dem Saal bereitzustellen, aber ob das klappt, können wir nicht garantieren. Die Aufzeichnung gibt es auf jeden Fall im Anschluss.

Wer ohnehin in München ist, kann auch noch spontan vorbeikommen, es gibt noch Tickets an der Abendkasse im Foyer des Gasteigs. Mehr Infos und die #bus400 Nerdar-App auf bitsundso.de/400.

Ich freue mich sehr, euch alle zu sehen!

App Store App Previews

appstore-with-preview

App Previews aka “PurpleVideo” aka App Trailers finally arrived on the iOS 8 App Store. While Google Play simply leverages YouTube’s infrastructure for uploading and delivering video, Apple uses their own HTTP Live architecture.

Screen Shot 2014-09-19 at 00.59.16You upload video files according to spec to iTunes Connect. Uploads were quite erratic in the first few days, and the error message simply said “error”, but some digging through the requests revealed the verbose error message, which was complaining about the incorrect frame rate. QuickTime will capture at 60fps from a connected iOS device under Yosemite, but you’ll have to deliver a 30fps movie to the App Store. iTunes Connect accepts ProRes and H264 files, and uses an unknown encoder to transcode the files. The mp4 files self-identify as “Core Media Video”, so a farm of Mac minis could be behind all this.

After app review and another couple of hours of caching weirdness, the video will appear on the store.

The following are the numbers for a 4″ video at 640x1136px:

Your video will be split up into 2 audio-only versions (64 and 128kbit, both stereo), 6 iframe-only “trick play” videos for faster scrubbing and 7 full video versions (306×542-hi, 306×542-med, 306×542-lo, 360×638, 414×734, 486×862, 640×1136).

The mp4 media files are not split up into chunks, but the m3u8 playlists contain the byte offsets into the mp4 files, so splitting can be achieved by the client requesting the appropriate byte range for a chunk and the CDN serving that chunk.

The playlist entries are all labeled with “en”, which is incorrect for my app, as its default language is German, but may hint at the future possibility of localising App Previews just like screenshots. Also, splitting out audio-only localisations is possible with this setup by simply exchanging the audio track.

The ordering of the video versions (small to large) ensures a quick start time until the first frame is displayed, but also means that a lot of app previews will start off quite blurry at 306×542 and only later increase resolution.

The lower res audio comes bundled with the lower size videos, so there might be an audible difference in audio quality during playback. In past iOS versions there were issues with audio sync when switching audio qualities, I don’t know if these have been resolved in the last couple of versions.

For a 30 second preview, file sizes range from 244kB to 500kB for the audio and 1,2MB to 8MB for the video. Actual bandwidth consumed while watching these may vary widely because the playback framework will probe several versions while trying to figure out which one to play. Media is hosted on apptrailers.itunes.apple.com, which resolves to *.footprint.net, which has pointers to Level 3 or possibly Apple’s own new CDN?

I don’t know if the iTunes version for Windows also contains support for HTTP Live playback (maybe for iTunes Festival etc.?), otherwise they could fall back to just getting one static mp4 file for iTunes on Windows. But so far, I haven’t seen any App Previews on iTunes or the iTunes Preview on the web at all.

If you’re on iOS 8, you can see the preview for “Bits und so” here.

Bits und so #400 Live in München: Ticket-Vorverkauf

Am 18. Oktober machen wir wieder eine Live-Show im Gasteig in München!

Die Tickets sind seit dem Wochenende im Vorverkauf bei München Ticket, und ich würde mich sehr freuen, euch alle einmal persönlich zu sehen!

Alle aktuellen Infos und Links gibt es auf bitsundso.de/400.

Neuer Podcast: Die Sprechkabine

Der Arbeitstitel war “und.so”. Angekündigt habe ich die Sendung schon vor zwei Jahren bei der #bus300. Die ersten Pilotfolgen hatten wir schon 2011 aufgenommen. Das Icon ist jetzt noch mehr Retro als damals.

Und jetzt ist es soweit: die erste Staffel kann beginnen, mit einem neuen Namen:

Die Sprechkabine
Alles, was Sie schon immer über *Thema hier einfügen* wissen wollten.

Phillip Seidel, bekannt aus Funk und Fernsehen, und ich sprechen über Dinge.

Abo in iTunes und mehr Infos auf sprechkabine.de

Telekom: “Niemand wird gewechselt”

Vor etwas über einem Jahr hat die Telekom ihr Drosselexperiment im Festnetz gestartet, das ja im Mobilfunk schon so wunderbar funktioniert. Damals war ich bei DRadio Wissen in einem Gespräch mit Philipp Blank, Sprecher der Telekom zu Gast.

Ab Minute 7:

Timo Hetzel: Wie ist das denn mit der Umstellung auf die neuen sogenannten All-IP Anschlüsse? Wenn ich jetzt meinen alten ISDN- oder meinen alten Analog-Anschluss mit alter AGB habe und bis, sagen wir 2018, wird das ganze Netz, die ganze Vermittlungstechnik auf die neue Technologie umgestellt, dann wird doch da auch die neue AGB angewendet, ist das nicht auch so?

Philipp Blank: Also es ist richtig, dass wir bis 2018 auf IP umstellen wollen, weil IP deutliche Vorteile hat gegenüber der alten Technik. Ich kann jetzt aber noch nicht sagen, wie 2018 die AGB aussehen. Aber es stimmt natürlich: Wenn ein Kunde auf einen IP-Anschluss wechselt, ist das ein neuer Vertrag, ja.

Timo Hetzel: Wenn er gewechselt wird, das ist der Punkt. Er hat ja keine Wahl.

Philipp Blank: Niemand wird gewechselt, niemand wird gewechselt. Ein Kunde entscheidet sich selbst, ob er seinen Vertrag wechselt oder eben nicht.

Heute meldet die Verbraucherzentrale Sachsen:

Kunden, die einen Festnetzanschluss bei der Telekom haben, könnten in diesen Tagen von einem Schreiben des Bonner Telekommunikationsunternehmens überrascht werden. Die Angeschriebenen werden gebeten, sich für einen der neuen Tarife zu entscheiden. Andernfalls müsse die Telekom in absehbarer Zeit den Anschluss kündigen.

iOS Backups & Device Migration

Or: I got a new iPhone. Where are my passwords?

tl;dr: When moving to a new device, use an encrypted iTunes backup to transfer as much of your keychain as possible to the new device. Some third party apps may exclude their keychain items from backups all together, so don’t wipe the old device until you’re sure you have a way of exporting important keys or re-authenticating your new device.

This doesn’t cover the “iCloud Keychain” service for Safari passwords, but the keychain within iCloud and iTunes backups, which is a separate storage for secure items.

The iOS Security Guide explains:

[The] Backup keybag is created when an encrypted backup is made by iTunes and stored on the computer to which the device is backed up… Non-migratory keychain items remain wrapped with the UID-derived key, allowing them to be restored to the device they were originally backed up from, but rendering them inaccessible on a different device.

The UID is a unique secret burned into each single CPU, unknown to Apple or their suppliers.

If a user chooses not to encrypt an iTunes backup, the backup files are not encrypted regardless of their Data Protection class, but the keychain remains protected with a UID-derived key. This is why keychain items migrate to a new device only if a backup password is set.

So, to summarise for iTunes backups:

  • Non-migratory items never migrate to new devices (duh.)
  • Other keychain items only migrate to new devices when an iTunes backup password is set

For iCloud backups, there currently is no way for the user to set any additional encryption key or password. The keychain class keys sent to iCloud are “wrapped with a UID-derived key in the same way as an unencrypted iTunes backup”, providing a kind of hardware-dependent password.

What items are non-migratory, you ask? Apple publishes this list: iTunes backup, VPN certificates, Bluetooth keys, Apple Push Notification service token, iCloud certificates and private key, iMessage keys, Certificates and private keys installed by Configuration Profile, SIM PIN.

For third party apps, the third party developer decides by choosing one of the Keychain Item Accessibility Constants, they exist in two versions: The default is “for any device”, and can be set to “for this device only”.

The documentation states that “any device” items will only migrate for encrypted backups. This means that for iTunes backups, the user has to set a password, and for iCloud that they will only transfer to the very same device because of the UID-derived key.

iTunes iCloud
unencrypted encrypted n/a
same device all all all
new device none only non-migratory items none

This also means that the explanation, that “this will also back up account passwords” within iTunes is a little imprecise.

itunes-backup

iOS 8 Folder Structure

The iOS 8 Release Notes state

The file system layout of app containers has changed on disk. Rather than relying on hard-coded directory structure, use the NSSearchPathForDirectoriesInDomains function or the URLForDirectory:inDomain:appropriateForURL:create:error: method of the NSFileManager class. See Accessing Files and Directories in File System Programming Guide.

This includes the path for [NSBundle mainBundle], which now looks something like

/private/var/mobile/Containers/Bundle/Application/4CACB504-652B-44AF-8DBE-7AD40578507E/example.app/

In addition, that UUID part of the path will change when updating the app or installing new builds during development. This means that relying on hard-coded directory structures from legacy code will break not only once, but twice and hard.

For accessing bundled resources from a web view, I think this means that you have to through loading data with – loadData:MIMEType:textEncodingName:baseURL: and supply the mainBundle as the baseURL, instead of just using a request object with the document URL on disk.