Probleme bei der Passworteingabe nach Update von Mac OS X Lion mit aktivierter Festplattenverschlüsselung

Heute hatte ich nach dem Update meines MacBooks auf Mac OS X Lion 10.7.2 eine Schrecksekunde: Mein Passwort funktionierte nicht mehr. Ich konnte mich allerdings daran erinnern, dass ich schon beim Update auf 10.7.1 Mühe damit hatte, weil die Tastatur plötzlich auf US-Amerikanisch eingestellt war.

Soweit ich sehen kann, passiert folgendes: Bei aktivierter Festplattenverschlüsselung (File Vault), kann Mac OS X die korrekte Tastatureinstellung nach einem Update beim ersten Booten nicht wissen (Da diese Information verschlüsselt ist) und stellt einfach auf das US-Amerikanische Layout zurück. Neu bei 10.7.2 wird aber die aktuelle Tastatur oben rechts nicht angezeigt, was zuvor noch der Fall war. Versucht man nun ein Passwort mit Sonderzeichen oder den Buchstaben x und y einzugeben, scheitert die Überprüfung.

Nach dem ersten Booten muss also das Passwort wie auf einer US-Amerikanischen Tastatur eingegeben werden.

.NET-Bibliotheken aus PHP aufrufen

Bei meiner Arbeit standen wir kürzlich vor der Aufgabe, eine Windows-.NET-DLL-Funktion aus PHP anzusprechen. Interessanterweise ist die COM-Unterstützung bei allen geläufigen PHP-Versionen für Windows seit Version 4 bereits eingebaut. Auch eine .NET-Unterstützung ist vorgesehen, jedoch schlecht dokumentiert. Dieser Beitrag soll den aktuellen Stand unserer Bemühungen dokumentieren.

Voraussetzung
Nur der Zend Server Community Edition bringt im Moment ein PHP 5.3.5 mit aktivierter .NET-Unterstüzung mit: Die Extension com_dotnet ist enabled.
Weder XAMPP noch WAMP haben diese von sich aus einkompiliert.

Anforderungen an die DLL
Um eine .NET-DLL mit dieser Extension ansprechen zu können, muss sie folgende Anforderungen erfüllen:

  • Die .NET-Frameworkversion darf maximal 3.5 sein. .NET 4.0 funktioniert aktuell nicht.
  • Die DLL muss streng benannt und signiert sein (strongly named & signed)
  • Die Funktionen der DLL müssen COM accessible sein (Kann in den Assembly informations aktiviert werden.)
  • Die DLL muss sich im Global Assembly Cache/GAC befinden. Mit dem Kommandozeilenbefehl gacutil /i NAME.dll wird sie dort hin befördert.

Der letzte Punkt ist wahrscheinlich auch der Grund, warum PHP keine 4.0-DLLs schluckt: Im Gegensatz zum alten GAC unter c:/Windows/assembly befindet sich der neue GAC unter c:/Windows/Microsoft.NET/assembly. Je nach Frameworkversion landet die DLL automatisch im richtigen GAC, wird aber von PHP nur im ersteren gesucht.

Verwendung
Um eine .NET-Klasse aus einer DLL zu instanzieren, benötigt man den vollen Namen der Assembly und den kompletten Klassennamen. Ein Tool wie ILSpy hilft dabei, diesen herauszufinden und wie folgt zu verwenden:

$obj = new DOTNET('Voller.Assembly.Name, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a8425bc35256e463', 'Voller.Assembly.Name.Klassenname');

echo $obj->MeineMethode();

Da mit dieser Extension immer eine Klasse instanziert wird, sind dementsprechend nur Klassenmethoden aufrufbar. Statische Klassen und Methoden funktionieren nicht und erzeugen nur kryptische Fehlermeldungen.

Ich hoffe, mit diesem Artikel anderen Benutzern dieser exotischen Kombination von Systemen etwas weitergeholfen zu haben. Kommentare und Anmerkungen sind herzlich willkommen.

We made the buttons on the screen look so good you’ll want to lick them.

Steve Jobs (Fortune, 24. Januar 2000)

Eines von vielen Goldstücken aus Job’s Best Quotes (Wallstreet Journal, 24. August 2011.) Ich empfehle deren Lektüre, zusammen mit der Geschichtenseite Folklore.org: Macintosh Stories, anstelle der tausenden identischen Nachrichtenartikel welche heute in der Presse herumgeistern.

Software zum Wochenende: Lion & Biophilia

Schöne Software für ein durchzogenes Wochenende:

  • Mac OS X Lion stellt die Frage: Darf Apple eine 15-jährige Konvention über den Haufen werfen und die Scrollrichtung systemweit ändern? Ich persönlich habe mich nach zwei Tagen Lion bereits daran gewöhnt.
  • Björk experimentiert polytechnisch mit ihrem neuen Album Biophilia und publiziert in dessen Rahmen auch gleich eine App für iPhone & iPad.

Spannende Zeiten.

Xdebug unter OS X Lion installieren

Ich brachte unter dem neuen Mac OS X Lion das Programm phpize nicht zum laufen und konnte deshalb meine Lieblings-PHP-Extension Xdebug nach dem Update auf Lion nicht frisch installieren. Glücklicherweise fand ich im Verzeichnis /usr/lib/php/extensions/no-debug-non-zts-20090626 noch die Datei xdebug.so von Snow Leopard.

Um diese Extension zu aktivieren, erstellt man mit Rootrechten im Verzeichnis /etc eine neue Datei php.ini und schreibt folgendes hinein:


zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
xdebug.remote_enable = On

; Und wenn wir schon mal hier sind...
error_reporting = E_ALL | E_STRICT
date.timezone = Europe/Zurich

Nicht vergessen, den Webserver danach neu zu starten.

Zahlen zur Smartphones in der Schweiz

Interessante Zahlen vom Internet Briefing zum Thema Mobile Commerce bei der SBB via der Anzahl der installierten SBB Fahrplan-Apps.

  • 1.3 Millionen Installation auf iPhones/iOS
  • 130 000 Installationen unter Android
  • 12 000 Installationen unter Windows Phone 7
  • Und 240 000 Installationen als Java-Applikation (Davon schätzungsweise 50% von SBB-Angestellten, da die obengenannten Systeme nicht im internen Warenkorb erhältlich sind.)

Der Siegeszug der Android-Telefone scheint in der Schweiz noch nicht angekommen zu sein.

Erster Eindruck von MongoDB

Im Rahmen eines Hackdays durfte ich vergangene Woche die NoSQL-Datenbank MongoDB ausprobieren.

Der Name ist im deutschen Sprachraum etwas unglücklich. Er würde vom englischen Wort homongous stammen.

Dafür machte das Arbeiten mit dieser Datenbank Spass. Drei Dinge sind mir aufgefallen:

  • Die Out-Of-The-Box-Experience ist super: Keine Installation notwendig, mit einem Klick läuft der Server.
  • Schemaloses Arbeiten ist kreativer.
  • Und ja, Datenbanken können jetzt sogar Spass machen.