Archiv der Kategorie Technologie/IT

MacOS X Security

Boah, was für ein Artikel. Geht zusammengefasst um das Sicherheitskonzept von MacOS X, teilweise im direkten Vergleich zu Windows. Unter anderem auch mit der These: Der geringe Marktanteil von Mac OS X ist nicht Schuld an kaum Malware.

Nicht überaus technisch überladen, also sehr verständlich (auf deutsch) erklärt.

Es sind zu viele Informationen auf einmal gewesen, aber beim ersten Durchlesen sind mir keine Fehler aufgefallen. Einzig allein den Passus, dass “Mac OS X” in großen Teilen offen läge, finde ich unglücklich formuliert. Der Autor meinte sicher, dass viele Komponenten (wie das in dem Kontext genannte Samba) offen sind und von Apple dort auch genutzt werden.

Der Nutzen des HTML5-Hypes

Ich erwähnte bereits gestern, dass der aktuelle HTML5-Hype kaum zu bremsen ist. Man begegnet ihm in Form von Video, aber auch in “HTML5-Tutorials” oder CSS3-Survival-Kits. Okay, gerade letztes habe ich ja indirekt auch angesprochen. Womit wir wieder am Anfang dieses Absatzes wäre (Achtung: Rekursionswitz).

Oft wird in Diskussionen oder Artikel über den Themenpool “Apple, Adobe, Flash, HTML5, Video” gesagt, dass HTML5 das Adobe Flash Format oder den Player abschafft. Dann sagen Kritiker wieder: Nein, Flash ist viel besser. Einfacher. Performanter. Verbreiteter. Bekannter. Leistungsfähiger.

In meinen Augen wird sich die Entwicklung ähnlich wie bereits in der Vergangenheit fortführen: das sukzessive Replacement von alten in neue, bewährte Techniken.

Wenn nicht jetzt…

Früher gab es eine Zeit, in der konnte man Rolloverbuttons entweder gar nicht oder nur über Umwege in allen Browsern lösen — die Techniken waren damals Javascript. Heute in der Regel ausschließlich CSS (seitdem der IE das auch kann). Daher lösten einige gewitzte Designer das Problem mit Mini-Flashbuttons. Heute jedoch sind solche Buttons sowie komplette Navigationsmenüs technisch gesehen “out”; und wer so etwas immer noch abliefert, muss sich die Frage gefallen lassen: “Warum…?”.

Auch dynamische Aktivitäten ließen sich eine Zeit lang einfacher in Flash lösen (gepaart mit entsprechenden Effekten) — bis ein paar Menschen herausfanden, dass man nur ein Modewort braucht, um alternative Techniken sich zu nutze machen zu können. Heute gibt es kaum eine Seite, die kein Ajax in irgendeiner Form braucht.

Kennt noch jemand die “coolen” Flash-Chat-Apps? Sie waren damals schon ein Graus und stammten aus einer Zeit, als Ajax bei Google nur Suchergebnisse für einen Fußballverein oder einen Haushaltsreiniger ergaben. Heute wird sowas in Ajax (und offenen Verbindungen serverseitig) gelöst. Man stelle sich das mal vor: Goggle Mail oder Facebook mit einem Flash, welches sich jedes mal neu lädt. (Okay, schlimmer wäre nur noch eine komplette Fullpage-Anwendung.)

Ebenfalls nahezu erfolgreich wurden die Fotoalben verdrängt, die lange Zeit auf Flash basierten. Während Flickr hierbei ein schlechtes Beispiel wäre, zeigen etwa Googles Picasa Webalben schon seit Jahren, was möglich ist. Oder Apples .mac, jetzt MobileMe. Und auch jeder zweite Internetseite nutzt irgendeine Form von Javascript-Plugin, welche eine Art “Lightbox” (manchmal mit automatischer Skalierung, FadeIn, FadeOut) zaubert.

Es gab schon immer die Early Adopters — und eben diejenigen, die entweder auf Nummer sicher gehen wollen. Naja, oder die einfach zu faul umstellen sind. Letzteres ist bei HTML5 o.ä. weniger der Fall, da es tatsächlich noch kein (bindender) Standard ist. Es schadet jedoch nicht, die bereits vorhandenen Möglichkeiten anzuschauen und ggf. zu nutzen.

Seitdem Webseitenbetreiber gemerkt haben, dass man auch mittels Ajax auch Werbung in eine Klickserie einbinden kann — *seufz* — wird es meiner Meinung auch verstärkt genutzt. Irgendwo muss ja auch der bekannte Wermutstropfen bei der Sache bleiben.

…wann dann?

In den letzten Wochen, und sicherlich auch noch in den nächsten Monaten, erleben wir das gleiche eben mit neuen technischen Komponenten von Webseiten. Wichtig für eine Akzeptanz ist, dass es während der Umstellung nicht zu inversiv ist. Gleichzeitig kann die Umstellung aber nur richtig funktionieren, wenn alle an einem Strang ziehen. Ein bisschen wie das Henne-Ei-Problem, jedoch machen derzeit ohne Ausnahme alle Browserengine-Hersteller gute Fortschritte.

Folgende Komponenten haben gute Chancen, in den nächsten Monaten und Jahren für moderne Browser von der Bildfläche zu verschwinden.

  • Musikplayer sind bisher als Flash gelöst, weil nicht jeder Browser einen MP3-Link im Browser abspielt — viele bieten dann einen Download an. Beides ist jedoch nicht “embeddable”.. Sicherlich, wir werden bei dem Audio-Tag mit einer HTML5-OGG/MP3/Flash-Weichenkonstellation ein paar Jahre leben müssen. But who cares?
  • Videoplayer sind ebenfalls als Flash gelöst; aus den gleichen Gründen wie Musik. Der Flashcontainer wurde aus der Not gewählt, mangels Alternative. Tatsächlich sind aber Werbeeinblendungen und Editorfunktionalitäten noch in keinem HTML5-Player implementiert (wenn doch, bitte ich um eine Anmerkung). Aber für die einfachen “only play a video”-Fälle reicht das Videotag aus. Genau wie bei Audio wird es auch hier auf eine Weiche hinauslaufen. But who cares? Flash wird auch stets auf zwei Arten eingebunden, dafür gibt es Frameworks.
  • Schriften sind eins der Themen, wieso man bisher immer Grafiken oder sogar Flashs verwendet hat. Grafiken sind statisch und müssen beim Design angelegt werden, Flash ist dynamisch (etwa wichtig für die I18n). Es lassen sich mit CSS3 gute Fallbacks mit Text+Hintergrundgrafik erzeugen. Im Endeffekt haben schriftlastige Seiten und alte Clients dann mehr Traffic als neuere Clients, aber das macht die Natur der Technik ja auch so gut.

Weniger schnell werden sich jedoch andere gute HTML5-Features verbreiten:

  • Offline-Features für Offline-Sitzungen (inkl. einer Datenbank) sind bisher eine technische Barriere gewesen, weshalb man ein Internetbrowserplugin brauchte. Allerdings kann man hier nicht mit Weichen arbeiten sondern muss tatsächlich zwei parallele Versionen (HTML5, Flash) anbieten. Auch wenn dies “nur” Aufwand für die GUI ist, so ist das Mehraufwand, der abschrecken kann. Da ist es egal, wenn HTML5 auch simple Datenbankstrukturen aufweisen kann — man muss ja eine Alternativlösung für ältere Browser haben.
  • Animationen und Transformationen stecken auch im Moment noch in der Entwicklung — tatsächlich kann man sie auch hauptsächlich im WebKit und in Apples MobileSafari (nicht 100% synchron mit WebKit oder gar Safari4) erleben. Hier ist eine Fallbacklösung ebenfalls schwierig und bedarf tiefer Einschnitte ins HTML-Markup als das sich da jemand darauf — vorerst — einlassen wird. Zu mindestens für einfache Dinge wie “sliden” kann man jedoch eine JS-Api nutzen, und damit quasi von hinten herum das Feld der unsupported Browser aufräumen. Das wird sich aber zeigen.

Interessant wird es beim Thema Werbung. Prinzipiell scheint mir die Branche aufgeschlossen zu sein, auch neue Techniken (Stichwort: Damals & das “DHTML”) zu nutzen. Ich würde sogar soweit gehen, dass sie es besser steuern könnten, in dem der Adserver einfach nach dem Useragent das passende Codefragment ausgibt. Zur Zeit könnte etwa die etwas ungelöste Frage, wie man HTML5-Werbung vernünftig blockt, für die Branche interessant sein. Vielleicht analysieren die Adblocker von Morgen die Koordinaten und Größenangaben von HTML-Elementen, um Blöcke von Standard-Werbeformaten zu erkennen?

CSS3 erleben – als Entwickler

HTML5 entpuppt sich langsam als ein würdiger Nachfolger des Ajax-Hypes. Das mag zwar von Produkten wie dem iPhone und iPad beeinflusst worden sein, hauptsächlich aber natürlich die fortschreitende Entwicklungen der Browserengines Gecko und WebKit. In gewisser Weise natürlich auch Opera, und — das wird die Zukunft zeigen — wohl auch Trident von Microsoft.

Obwohl CSS technisch gesehen nichts mit HTML zu tun hat, erfahren die CSS3-Features derzeit in der HTML5-Welle eine außergewöhnliche Bedeutung.

Da CSS3 noch nicht endgültig verabschiedet wurde (wenngleich es da auch wahrscheinlich keine größeren Überraschungen geben wird), gibt es leider nicht für alle CSS3-Eigenschaften eine breite Basis — sprich: Gleichheit. So konnte man lange Zeit in Mozilla Browsern nur mit der Eigenschaft -moz-opacity: 0.9 einen Alphawert von 90 für ein Element definieren. Und WebKit hatte natürlich -webkit-opacity: 0.9. Und Opera mit -o-opacity: 0.9. Mittlerweile ist das glücklicherweise einfacher: Die CSS2-Eigenschaft opacity: 0.9 wird von beiden unterstützt, wie auch allen anderen Browsern mit CSS2-Unterstützung.

siehe http://girliemac.com/blog/2009/04/30/css3-gradients-no-image-aqua-button/

Das gleiche Spielchen können wir jetzt auch beobachten, allerdings mit Eigenschaften, welche um einiges komplexer und umfangreicher als die Alphawert-Steuerung sind.

Auf CSS3 Please! kann man beispielsweise auf einem Blick ein paar ausgewählte CSS3-Eigenschaften in Action sehen — inkl. deren vorläufigen Browserengine-Implementierungen. Dabei sind die Auswahlen nicht zufällig (und deshalb auch dieser Artikel). Sie sind allesamt sehr nützlich für Webdesigner, weil sie bisher notwendige Grafikbearbeitungen unnötig machen:

  • Farbverläufe
  • runde Ecken (sic!)
  • Rotationen
  • Schatten

Der Teufel steck im Detail, denn es sind einige Dinge zu beachten, um bereits jetzt Photoshop in die Tonne zu hauen.

Unterschiedliche Namen der vorläufigen Eigenschaften…

Wie bereits erwähnt war das Spiel bei opacity relativ einfach: jeweils den Prefix des Supports (moz, o, webkit) anfügen und gut war.

.alpha { /* Regel mit Unterstützung für Browser ohne endgültigen/vollständigen CSS2-Support */
-moz-opacity: 0.9;
-o-opacity: 0.9;
-webkit-opacity: 0.9;
opacity: 0.9;
}

Man könnte also denken, das die Umstellungen relativ einfach sind — und daher schnell den Rückschluss ziehen, dass der Hersteller doch direkt “opacity” hätte nehmen können. Klar, heute sind wir schlauer.

Sehen wir uns mal an, wie die Namen der Regeln für border-radius aussehen; diese Eigenschaft steuert den Radius der Ecken (“runde Ecken”).

.roundedBox {
-moz-border-radius: 10px; /* jeder Firefox */
-webkit-border-radius: 10px; /* alle aktuelle WebKit basierte Browser */
border-radius 10px; /* CSS3 */
}

Sauber. Allerdings gibt es neben der CSS3-Eigenschaft border-radius auch die detaillierten Eigenschaften border-top-left-radius, border-top-right-radius, border-bottom-left-radius und border-bottom-right-radius. Während WebKit das gleiche Namensschema hat (immer mit dem Präfix -webkit), hat Mozilla ein eigenes: -moz-border-radius-topright, -moz-border-radius-topleft u.ä. Umpf.

Anmerkung: Die Spezifikation der Regel als solches sagt nichts darüber hinaus, wie sie auch in der Browserengine implementiert wurde. Da gibt es einen lesenswerten Beitrag über border-radius vom IE9-Team (!!).

… unterschiedliche Konfigurationsmöglichkeiten…

Anderes Beispiel, gleiche Problematik: Gradienten oder Farbverläufe. Während Mozilla dies über die CSS-Background-Eigenschaft -moz-linear-gradient ab Geck 1.9.2 (=Firefox 3.6) vorläufig implementiert hat, heißt es bei WebKit/Safari -webkit-gradient.

Übrigens: Es ist auch nicht verwunderlich, dass hier Apple genannt wird. Einige Module der CSS3-Spezifikation (etwa Animationen und Transformationen!) werden von Apple-Entwicklern beim W3C angeführt — und werden bereits erfolgreich in den bereits genannten Produkten produktiv genutzt.

So sind folgende zwei Zeilen an für sich im jeweiligen Browser gleich bedeutend:

background-image: -moz-linear-gradient(top, #444444, #999999); /* FF3.6 */
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #444444),color-stop(1, #999999)); /* Saf4+, Chrome */

oder, alternatives Konfigurationsmuster:

background: -moz-linear-gradient(0 0, #000, #fff);
background: -webkit-gradient(linear, 0 0, 0 100%, from(#000), to(#fff));

Hinweis: Während Mozilla eine zweite Eigenschaft -moz-radial-gradient für radiale Gradienten — Kreise ;) — eingeführt hat, wird dies bei WebKit über den ersten Parameter gesteuert.

Hat noch jemand Einwände, dass die Browserengines vorläufige Implementierungen auch als solche explizit einführen? Nicht wirklich, oder?

… und der Internet Explorer?

Traditionell braucht der Internet Explorer natürlich eine Extrawurst. Das wiegt jedoch nur unschwer als die Lösungen der anderen. Naja, fast. Alle Lösungen sind aus technischer Sicht des CSS-Standards auch nur proprietäre Lösungen.

Microsoft hat seit Jahren ihre eigenen Lösungen unter dem Sammelcontainer filter abgelegt. So heißt das Pendant zu dem oberen Verlauf:

filter:  progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#999999');

Nun ja, dies galt zu mindestens für Internet Explorer 6 und 7. Bei 8 hat sich Microsoft dem Schema der anderen Entwickler genähert, und die proprietäre Eigenschaft filter als solche gekennzeichnet: -ms-filter und Eigenschaften in Anführungszeichen. Ignoriert man bei einer Überprüfung der CSS-Eigenschaften die proprietären Eigenschaften (die mit einem Strich beginnend), so kann man jetzt in der Theorie ein valides CSS erhalten. So weit in der Theorie.

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#999999')";

Leider hat Microsoft zeitgleich für manche Eigenschaften die Variante über filter deaktiviert. Daher gilt: Ab sofort muss man beide Anweisungen im Doppelpack mitangeben um IE6, 7 und 8 ansprechen zu können. Oder wahlweise die Anweisungen in die entsprechenden Conditional Comments packen. Ich wünsche viel Spass beim Chaos.

Schatten

Die Anwendung der Schatten ist ähnlich einfach wie bei den Gradienten, abgesehen von folgenden Problematiken im Internet Explorer:

  • Die Konfiguration eines Schattens kann zu einer wahren Try-and-Error-Orgie führen, weil man selten die Box mit allen 8 Richtungen im Kopf hat (bzw. daran denkt).
  • Der Internet Explorer hat das typische hasLayout-Problem (Lösung: zoom: 1).
  • Sobald ein Element nicht static ist (etwa relative) wird der Schatten unbrauchbar.

Beispiel für umfangreiche vollständigen Schatten in allen Browsern.

Werkzeuge

Als “Nachschlage-Werk” kann man sicherlich die simple Seite CSS3 Please! nutzen. Ein spezieller CSS Gradient-Generator ist vorhanden, aber ohne IE-Support.

Prinzipiell unschlagbar ist das Script ie-css3.htc — es liest die CSS3-Eigenschaften border-radius, box-shadow und text-shadow und erstellt dynamisch die proprietären Microsoft-filter-Eigenschaften. Die HTML Components sind im Grunde kleine Javascripts zur Erweiterung des Internet Explorers.

Eine Erweiterung für Gradienten wäre wünschenswert, falls jemand sich spontan dazu veranlasst sieht.. bitte :) Der Autor hat sich leider bisher auf meine Mail nicht gemeldet.

Ein kleiner Schönheitsfehler, der scheinbar mit HTCs selber zu tun hat: Die Angabe im CSS muss mit absoluten Pfad gesehen. Das ist unschön und für Webanwendungen mit dynamischen Kontexten schlicht unbrauchbar.

Die Vergessenen

Bei aller Liebe zu den technischen Neuerungen, man sollte nur eines nicht vergessen: Viele Nutzer haben aus verschiedenen Gründen noch einen Firefox 3.5 oder gar 3.0 am Laufen. Und auch Opera-Nutzer sind erst in den neueren Versionen in den Genuß von einigen, aber nicht allen, Eigenschaften gekommen. Bei den WebKit-Benutzern hat wohl die Mehrzahl eine aktuelle Version, sei es durch den automatischen Google-Chrome-Updater oder die starke Verbreitung der 4er-Version von Safari. (Notorische Update-Verweigerer sind selbst für ihr Dilemma verantwortlich.)

  • Gradient: Eine Fallback-Lösung kann man unter Umständen über die Eigenschaft background-image erstellen.
  • Border-Radius: Nicht ohne HTML-Markup-Änderungen.
  • Shadow: Schwer bis unmöglich.

Mit anderen Worten heißt das: Sofern border-radius und box-shadow nur nice-to-have Features sind oder es vernachlässig ist, wenn ältere Browser die Seite unvollständig anzeigen, stehen dem Einsatz keine Grenzen mehr!

Nützliches

Shortcut of the week

Das ursprüngliche Problem: Ich habe eine URL zu einem MP4-Video, welches der Safari sofort abspielen will. Allerdings will ich das Video erst später gucken, also speichern. Hm, dumme Sache. Dem Link folgen von der ursprünglichen Seite ging aus bestimmten technischen Gründen nicht — und ein Dokument/Seiten speichern scheint zu mindestens nicht zu funktionieren, so lange das Video noch lädt.

Überraschenderweise ist es einfacher, als man denkt: Das Safari-Downloads-Fenster nimmt die Tastenkombination +V für Einfügen an — dementsprechend auch jegliche Drag ‘n’ Drop Aktionen, welche eine URL als Objekt haben.

Kurzer Gegenscheck: Nope, Firefox kann das nicht. ;)

Adobe vs. Apple

Es gibt derzeit eigentlich hauptsächlich zwei gute Artikel, wenn man sich mit etwas Hintergrundinformationen über diesen angeblichen “Krieg” (laut Presse…) bereichern will.

Zum einen hat John Gruber bereits vor einigen Tagen hübsch zusammengefasst, was es sich mit dem Multitasking und der Section 3.3.1 (das ist der Abschnitt, der Adobe zur Zeit die Galle hoch kommen lässt). Der Grundtenor: Es geht nur um die Kontrolle der Plattform (siehe unten). Außerdem können die fremden, 3rd-Party-Tools nicht alle Features wie Multitasking automatisch. Apple ist also darauf angewiesen, dass der Dritte dies mit einbaut. Der Anwender bekommt sonst ein inkonsistentes Produkt, und das will Apple nicht. Das ist eine Strategie, die sich bei der iPhoneOS-Produktpalette nachweislich bezahlt hat.

Desweiteren hat ein Entwickler auf seinem Blog /dev/why!?! sehr schön aufgezeigt, wer hier eigentlich wen angegriffen hat. Dem kann ich nur beipflichten, ich zitier die interessantestem Stellen, der Titel lautet: It’s all about the framework.

Imagine if 10% of the apps on iPhone came from Flash. If that was the case, then ensuring Flash didn’t break release to release would be a big deal, much bigger than any other compatibility issues.

[…]

Shipping a release where they break a large percentage of apps is not generally an option. Letting any of these secondary runtimes develop a significant base of applications in the store risks putting Apple in a position where the company that controls that runtime can cause delays in Apple’s release schedule, or worse, demand specific engineering decisions from Apple, under the threat of withholding the information necessary to keep their runtime working.

[...]

So ultimately, preventing Flash on the platform is about control, but is not control over the user experience of the Flash applications, or even the languages used. It is about the runtimes they bring on to the system, and Apple’s control over future releases of iPhone OS.

Diese Problematik ist den meisten Trollen unserer hiesigen IT-Welt natürlich völlig fremd *g* Man muss sich das auf der Zunge zergehen lassen: Als Unternehmen einen potenziell nicht kleinen Teil der Anwendungen aus der Hand zu geben, mit allen Konsequenzen. Und das Haupteinfallstor Nummer 1 auf PCs (und auch Macs) ist… jawohl, Flash. Die Betriebssysteme (auch Windows) sind heutzutage meist sehr gut abgeriegelt, aber Flashlücken tauchen dauernd auf. Microsoft ist machtlos, Apple ist machtlos. Und den Pinguinen ist das total latte.. :)

There is no doubt in my mind that if they asked Apple to bless this they were rebuffed, and if they didn’t ask the only reason they didn’t was because they knew Apple would say no. In either event, they announced the product to their customers and sold them on an idea they were not in a position to deliver, hoping Apple would be unwilling to piss off developers by not fulfilling Adobe’s promises. They tried to force Apple’s hand by putting Apple in a position where in order stop the Flash they would have to do it publicly in front of Adobe’s users. That was a bad call on Adobe’s part.

Das ist eine völlig neue Perspektive: Das Ganze wäre nur ein taktisches Spielchen seitens Adobe, in welchem es nur zwei Auswege gab. Spiel ohne Trumpf, und mit hohem Einsatz. Und ganz wertfrei betrachtet: Es ist gut, wenn man nicht sofort vor anderen großen Firmen kuscht.

They can get an awesome, high performance, Flash environment working on Android, and get a bunch of great Flash apps running on Android phones. As much as Apple wants to control iPhone, I am willing to bet they want to beat Android more.

Tja, und da haben wir das Problem: Ich glaube nicht, dass Adobe das in der nächsten Zukunft machen werden. Die hatten genug Power und Geld, das in den letzten 3 Jahren zu machen; da bestand aber wohl keine (wirtschaftliche) Interesse. Warum sollten sie also jetzt damit anfangen?

Every day Adobe does not have a widely deployed mobile Flash, is a day they are not having Flash based mobile apps developed, and is a day the odds of mobile Flash being successful goes down a little bit.

[…]

That’s right, Adobe has been making the case for Flash on iPhone for 3 years, but still hasn’t deployed a non-lite version of Flash on any phones, even when Apple is not obstructing them.

Zusammengefasst lässt sich sagen: Für den Anwender kann das ganze nur positiv ausgehen — und deswegen ist es auch gut so:

  • Adobe schafft es tatsächlich und bringt mobil-optimierte Versionen der Flashruntime heraus, die zudem auch mit speziellen Geräteeigenschaften ausgestattet sind. Sie müssen zeigen, dass sie auch Neuerungen zeitnah (oder gleichzeitig) herausbringen. Stellt sich hingegen heraus, dass ein Flashplayer auf Android auch erst Monate später die neuen Features unterstützt, dann…
  • Adobe bringt wirklich mal einen optimierten Flashplayer für Mac OS X heraus (derzeit gibt es wohl eine WebKit nightly + 10.1-Beta, die ja scheinbar wirklich Welten besser ist).. wäre ja nach jahrelanger Stromverschwendung der CPU auch mal Zeit, oder?
  • Adobe schafft es nicht, und die Anwender können sich nicht über unzureichende Akkulaufzeiten oder Userinterfaces bei der Plattform “iPhone OS” beschweren. Denn was ein Entwickler zu unterscheiden weiß, das kann der Anwender nicht (“Ist das ein Flashspiel?”).

Das iPad.

Herrlich, das ist mal wieder ein Bausatz für eine lustige Gute-Nacht-Geschichte. Fassen wir mal die Kritikpunkte zusammen:

  • Es fehlt ein, ach Quatsch nein besser zwei oder gleich drei USB-Ports — schließlich ist das ja eigentlich ein Netbook, also praktisch ein Notebook, also praktisch ein vollwertiger Computer. Und dort kann man auch andere Geräte wie Kameras o.ä. anschließen.
  • Das Display ist zwar okay, aber der Spiegel geht mal gar nicht. Sprich: Eine andere kratzfeste Oberfläche als Glas muss her. – Vorschlag: Plastik nehmen, dann aber jeden Monat wechseln.
  • Das Display ist zu schwach (in der Sonne), also muss es noch heller (wärmer, …) sein. — Leider nicht kompatibel zu Akku, Gewicht, Wärme (s.u.)
  • Es ist keine Tastatur drin/dran. Wie soll man da sonst tippen? (Interessant, das noch keiner nach einer zusätzlichen Maus/Trackball gefragt hat.) – Touchpad ftw?
  • Die technischen Specs für CPU, Speicher oder Flash sind zu gewöhnlich. Da sollte mehr rein. — Gut, man kann nie genug haben. Aber nicht kompatibel zu Akku, Gewicht, Wärme.
  • Das Gewicht ist zu viel, das ist zu schwer zum Halten. – Esst mehr Fleisch und Gemüse. Also echtes, nicht von MacDonalds. (s.o.)
  • Der Ladevorgang dauert zu lange (wenn das iPad während dessen genutzt wird).
  • Der Lagevorgang dauert zu lange (wenn der Akku er an einem nicht ausreichend mit Leistung stehenden USB-Port hängt). – Beschwert euch beim Mainboardhersteller, oder eigentlich selber schuld: gute Boards haben das Problem im Regelfall nicht.
  • and, last but not least: Das Gerät aus Metall/Alu (dunkel) heizt sich zu schnell auf – u.a. durch Sonnenstrahlen. — Unverschämt.

Kaum noch relevant ist der Punkt “Akkulaufzeit”: Irgendwie haben die – natürlich unter sparsame Dauernutzung – Laufzeiten von teilweise sogar über 12 Stunden auch die Letzten davon überzeugt, dass der Akku doch nicht so schlecht sein kann.

Ist der Beruf des Ingenieurs oder Konstrukteurs eigentlich mittlerweile so weltfremd geworden, dass die Leute nicht einmal nachdenken, was sie eigentlich verlangen?

Gut, man kann sich Produkte natürlich auch zurecht reden. Ein Punto ist auch ein Porsche, irgendwie so. Neben der nicht übersehbaren Gemeinsamkeit von ganzen zwei Buchstaben kann man schließlich mit beiden Auto fahren. Links, rechts, gerade aus. Ist allerdings eine Frechheit, dass der Punto bei großen Strecken auf der Autobahn dauernd die Puste ausgeht..

Apple, Flash – ich bin nicht alleine

Auch andere haben sich mit diesem Thema in den letzten Tagen befasst.

Zum einen gibt es einen Artikel auf TUAW, zum anderen auch einen umfangreichen Blogbeitrag. Gerade letzterer verfolgt ähnlich meinem Beitrag nicht nur die iPad/Flash-Thematik, sondern auch die allgemeine Performance in iPhoneOS als auch Mac OS X. Die herausragendsten Passagen sind sicherlich folgende.

Serlet didn’t name any specific guilty plugins. Just “plugins”. But during the week at WWDC, I confirmed with several sources at Apple who are familiar with the aggregate Crash Reporter data, and they confirmed that “plugins” was a euphemism for “Flash”.

In other words, in Apple’s giant pile of aggregate crash reports — from all app crashes on all Macs from all users who click the button to send these reports to Apple — Flash accounts for more of them than anything else.

Jo. Warum kommt das jetzt jedem so bekannt vor.. :( Ein weiterer Grund: Apple musste auf Adobe warten, bis die sich endlich mal dazu bequemen, eine 64-Bit-Version herauszubringen. Da das ja bekanntlich nicht der Fall ist, Mac OS X aber 64-Bit laufen soll.. musste eine entsprechende Abstraktionsschicht für Browserplugins (also ein eigener Flashprozess..) her. Die Alternativen wären gewesen: Kein 64-Bit-Safari oder gar kein Flash.

It’s a chicken-and-egg problem. Publishers use Flash for web video because Flash is installed on such a high percentage of clients; clients support Flash because so many publishers use Flash for web video. Apple, with the iPhone, is solving the chicken and egg problem. For the first time ever, there is a large and growing audience of demographically desirable users who don’t have Flash installed. If you want to show video to iPhone users, you need to use H.264.

Machtpositionen sind manchmal zu was nützlich.

Und zuletzt spricht er über die Performanceproblematik von Flash/Mac OS X*. Ingesamt doch ein bisschen interessant zu lesen.

* Da geht es um die Sache mit der fehlenden H.264-Unterstützung in Form einer Public API, Flash auf die Mac Hardware zugreifen kann. Während das natürlich unschön ist, erklärt das aber immer noch nicht die beschissenen Laufzeitverhalten. Wenn eine Flash-Anwendung keine (H.264)-Videos und hochauflösenden Bilder hat, warum sind die Performancestats so beschissen?

Apple und die Sache mit Flash [Update]

Nun wissen wir endlich alle, wie der neuste Wurf von Apple heißt: nicht iTablet, kein iSlate sondern iPad. Okay, eigentlich hätte man auch iPod Touch Pro nennen können, den mehr ist es – erstmal – auch nicht. Klar, ein größeres Display und die daraus resultierenden weiteren Möglichkeiten, die die Apps/UI damit bieten, sind es dann schon.

Weiterhin scheint sich Apple aber zu sträuben endlich auch Flash auf ihre mobile devices zu bringen. Während es bei der iPod Touch/iPhone-Palette durchaus verständliche Gründe aus Sicht der Performance und auch der Usability gibt, werden diese Gründe bei iPad natürlich geringer. Warum also sonst?

Performance

Leider haben Flashobjekte immer wieder die Angewohnheit, sowohl CPU- als auch RAM-lastig zu sein. Ob das nun ein Problem vom Flashplugin oder vom zuständigen Entwickler ist, das kann man so natürlich nicht sagen. Dazu kommt, dass Adobe sich nicht imstande sieht, für Nicht-Windows-Systeme eine ordentliche Version es Flashplayers herauszubringen.

Oder um es mal am Beispiel zu nehmen: Es ist definitiv nicht normal, dass ein Flashspiel wie Farmville auf einem iMac Core 2 Duo mit knapp 3Ghz und 4 GB Ram gerne mal 50-150% CPU und das Flash-Plugin alleine (also ohne Browser) über 200 MB beansprucht. Und zwar im “ohne Details”-Modus. Youtube-Videos sind da mit 40% und nicht nennenswertem RAM-Verbrauch gelinde gesagt überschaubar.

Diese Probleme könnten auch auf dem iPad oder iPhone auftreten, ein Umstand, den Apple definitiv vermeiden will. Performance-Killer sind nicht erwünscht (irgendwie auch verständlich).

User Interface (UI)

Flashanwendungen sind immer für eine Interaktion mit einer Maus konzipiert. Wie sollen die mit einem Touchpad harmonisieren? De facto bedeutet das, das eine Reihe von Flashanwendungen nicht “funktionieren”, weil das Plugin keinen richtigen Unterschied zwischen Bewegen und Klicken oder Rechtsklick vermitteln kann bzw. das “Mauszeigerziehen” überhaupt nicht in der Form vorhanden ist. Und iPhone/iPad spezielle Gesten sind komplett unbekannt. Eine große Inkonsistenz – und von Adobe habe ich in der Richtung noch nichts gehört. Das ist auch nicht im Sinne von Apple, die ein konsistentes System anbieten wollen.

Stichwort Konsistenz: Selbst die einzelnen Flashplayer haben alle eine eigene UI und Benutzerführungslogik: Zusammenfassend kann man wohl sagen, dass der Play-Button meistens links ist. Mal darf man zoomen, mal gibt es Vollbild, mal darf man spulen. Manchmal ist der Button rund, mal ist er eckig. Das passt ebenfalls nicht in die konsistente und einfache Welt des iPhones – und iPads.

Nicht zu vergessen sind natürlich noch diese “Hammer-Player-mit-jedem-Schnickschnack-der-möglich-ist”-Flashanwendungen, bei denen definitiv ein Koller vorprogrammiert ist.

Die Alternative, einfach die Funktionen zu reduzieren, ist natürlich eine Sache von Adobe und vom dem Entwickler. Und, nein, nicht wirklich eine Option (die genutzt würde).

Festzuhalten ist also: native App > Web App > Flash App

Flash für alles und nichts

Flash ist eins der meist verbreitesten Internetplugins, und tatsächlich haben viele Seiten ein Flash “versteckt”.

  • Werbung (und danach kräht außer der Werbebranche nun wirklich keiner nach);
  • komplexe Anwendungen (wie etwa auch o.g. Farmville), die wohl als native bzw. Device-optimierte App wesentlich besser geeignet wären;
  • Flashvideoplayer;
  • “Ich-wusste-es-nicht-besser”-Statements.

Letzteres sind Dinge wie Navigationsmenüs oder “Webseitenlogos” in Flash, die in der Regel ein gutes Statement zur Inkompetenz aufweisen. Der Großteil ließe sich mit HTML/CSS/Javascript auch lösen (und ja, das Web bietet auch kostenlose(!) Frameworks für Animationen) – und das zu einem Bruchteil der benutzten Browserperformance. Aber Unkenntnis und das Flash-Buzzword bieten halt leider viel Potenzial für solche Lösungen. Nur einige hoch angesetzten (oder utopisch?) Anforderungen müssten wirklich Flash nutzen; und natürlich nur aus Flash bestehende Anwendungen. Diese Webseitenbetreiber wissen aber auch, dass sie damit eine Reihe von Leuten ausschließen (und sei es nur mangels großem Display). Kann sich jemand wirklich und ernsthaft die ZDF-Mediathek als Flashanwendung vorstellen? Auf dem iPhone? Auf dem iPad? Letzteres vielleicht, aber auch nur wenn die Auflösung mitspielt, denn Flash hat stets eine fixe Größe. Eine native App würde wohl jeder vorziehen, wohl auch zu Recht..

Am Beispiel: Die gesamte Produktpalette von Google wäre sicherlich nicht so erfolgreich, wenn sie Lösungen aus Flash nutzen würde. Man stelle sich das vor, Google Mail oder auch Microsofts Outlook Web als eine große Flashanwendung. Unfassbar, jeder würde den Kopf schütteln.

Als Fazit: Alternativen – und was wohl dahintersteckt

Als eine die Alternative für Flash ist HTML5/CSS3 anzusehen, welches u.a. eine starke Unterstützung für “Anwendungen” im klassischen Sinne anbietet.; beispielsweise Datenbank-API, File-API und natürlich das Video-Tag. Apple ist auf den Zug aufgesprungen, als sie das iPhone (in der ersten Version, wohlgemerkt!) mit dem hauseigenen Browser WebKit ausstatteten. Unterstützt mit der Tatsache, dass sie ein paar Ergänzungen in ihrer MobileSafari im Vergleich zum normalen WebKit machen, besitzen iPod/iPhone/iPad damit einen leistungsstarken Browser. Nicht ohne Grund setzt auch Google in Adroid auf diese Browserengine, wenngleich mit anderer Javascriptengine.

Der Browser selber hat im Gegensatz zu Flashplugins (die quasi ja nur eine Schnittstelle zu einer anderen Anwendung herstellen) den großen Vorteil, dass sein UI durch das Betriebssystem gesteuert wird. Im Gegensatz zum Flash, wo dies jeder Entwickler selber macht.

Flashvideo? Brauchen wir nicht, der HTML5-Videotag macht’s möglich. UI-Effekte wie Transformationen (größer, kleiner, verschieben, Farbwechsel) mit Javascript oder sogar Flash? Brauchen wir nicht, geht mit CSS3. Eine Flashapp zum Speichern von Daten (serverseitig)? Braucht man nicht, geht auch mit HTML5/Javascript. Außerdem gibt es integrierte Offline/Online-Sync-Möglichkeiten.

Für mich sind mögliche Offline-Webanwendungen ein Killerfeature für mobile devices, denn warum soll “Netz nicht verfügbar” immer bedeuten, das ich jetzt machtlos bin?

Um wieder zum Anfang anzuknopfen: Man hatte natürlich gehofft, das Apple ein Flashplugin für das iPad anbietet bzw. es unterstützt. So wie es im Moment aber aussieht, ziehen sie – mehr oder weniger direkt – gegen Adobe in den Krieg und setzen dabei weiterhin komplett auf HTML5 bzw. auf native Apps. Da die Geräte – glücklicherweise – eine gewisse Machtposition im Sektor der online mobile devices besitzen, sind die Anbieter von Diensten auf Alternativlösungen angewiesen, falls sie die doch große (und vor allem: sehr wichtige) Zielgruppe nicht ausgrenzen wollen. Davon können im Ende alle profitieren, wenn die *** proprietäre Flashgeschichte schwindet und stattdessen kleine, Client-performante und offenere Lösungen entstehen.

Übrigens: Auch Google setzt bekanntlich auf HTML5. Nicht nur Google Gears wurde entwicklungsplanmäßig in die Tonne gehauen, sondern auch Neuentwicklungen entstehen alle im Fokus der HTML(5)-Features. Das neue Google Voice (leider ein unschöner US-only-Kandidat) bietet VoIP. Kein Flash, pures HTML/CSS/Javascript.

Und mal ehrlich: Vermisst jemand wirklich das Flashplugin auf dem iPhone? Oder: Nutzt jemand wirklich Flash auf einem anderen Smartphone so intensiv, das es notwendig ist? Wenn ja, für was?

Update, 29. Januar 2010

Tatsächlich gibt es Ansätze, wie man Multitouch und Gesten in Flash umsetzen kann. Denn eine Maus und einen Mauszeiger findet man auf Multitouchgeräten nicht – um Gegenteil: man hat mehrere Pointer. Das bedeutet aber nicht, das vorhandene Flashanwendungen das alle nutzen würde, haha. Zu früh gefreut.

Featurities meets Fallstrick: Die Spring Security 3.0 Konfigurationsodyssey

Mit dem Majorrelease 3.0 wurde dem Modul Spring Security eine Menge von neuen Features angeignet. Spring Security ist die Modulkomposition, welches für das Java Framework Spring quasi die gesamte Authentifizierung, Autorisierung, Legitimierung jedwegiger Art ermöglicht.

Leider wurden mit dem Release 2.x auf 3.0 eine Reihe von API-Changes vollzogen. Zugegeben, die waren auch sicher alle sinnvoll, weil Komponenten wie die Authentifizierung weiter geteilt wurden und man somit wesentlich flexibler ist, neue Anforderungen zu ermöglichen (Baukastenprinzip). Aber die Dokumentation ist – gesamtheitlich betrachtet – irgendwie immer noch mies und oft nicht aktualisiert. Oder man findet im Internet einfach nur (alte) Beispiele.

Die http-Direktive

Im Namespace von Spring Security existiert das Tagelement http, mit welchem man kurze, knappe und verständliche Konfigurationen anlegen kann. Der Vorteil liegt klar auf der Hand: Man muss nicht alle Beans, Listener und Provider anlegen, denn das geschieht automatisch. Tja, wären da nicht ein paar Einschränkungen in der Funktionsvielfalt.

Konkretes Beispiel: Remember Me

Just wurde das Minor-Release 3.0.1 veröffentlicht, und nur wenige Tage später zu erfahren, dass Remember Me kaputt sei. Egal, fahren wir erstmal weiter mit 3.0.0.

Laut Dokumentation ist es am einfachsten, wenn man die Direktive remember-me (Security Namespace) innerhalb der http-Direktive (Security Namespace) verwendet. Ohne irgendeine Angabe wird ein stinknormales, Cookie basiertes Tokenverfahren ohne (echten) privaten Schlüssel verwendet. Reicht für den ersten Einsatz erstmal auf, soll ja erstmal funktionieren.

Fehlermöglichkeit 1a: Man loggt sich ein, und es passiert nichts (kein “RememberMe”-Cookie).
Lösung: Wenn man einen eigenen Auth-Filter einsetzt, muss man diesem auch den RememberMe-Service “setten”. Außerdem muss der SecurityChainFilter (web.xml!) auch auf die login-Seite verweisen. Es dürfen auch keine Filter bei der Konfigurierung von intercepted Urls (speziell hier: login, logout) gemacht werden.

Fehlermöglichkeit 1b: Es passiert noch immer nichts?
Lösung: Vielleicht wurde vergessen, einen Parameternamen für den Request zu setzen. Der Standardname ist ein typischer Springname, der natürlich unschön ist. Und den kann man nicht über die RememberMe-Direktive setzen, also muss man eh einen eigenen Service definieren. Bäm. Referenzierung geht dann zwar noch, aber für mehr ist die RememberMe-Direktive dann nicht mehr zu gebrauchen.

Fehlermöglichkeit 2a: Man besucht die Seite ohne Login, aber mit Cookie – und die Loginseite kommt (Log sagt kein gültiger Auth).
Lösung: Man kann der Log trauen, wenn sie zwar beim Einloggen nun einen Token ablegt (kann man zum Beispiel sehr einfach mit diesem Firefox-Addon inkl. Editor(!) verifizieren), dieses aber beim erneuten Besuchen der Seite (bzw. ohne JSPSESSION-Cookie) nicht verwendet bzw. wird nicht erkannt. Schlussendlich half u.a. das Umbenennen der Userservices-Bean in “userService”. Außerdem sollte die Loginseite keinen Filter/Access haben (s.o.) Lieber 2x prüfen!

Fehlermöglichkeit 2b: Es erscheint eine Ausnahme, dass der Key falsch sei.
Lösung: Dazu muss man wissen: Sobald man eine individualisierte RememberMe-Konfiguration nutzt, wird auch der Key nicht mehr vernünftig auf alle Komponenten (Provider, Filter, Manager) gesetzt. Beim Anlegen wird also der eigene Key verwendet, beim Auslesen der Standardkey. Yes! (s.o.)

Fehlermöglichkeit 3: Man besucht die Seite ohne Login, aber mit Cookie – aber wie in 2 nur die Loginseite.
Lösung: Im Logger/Debugger kann man nun feststellen, dass zwar das Cookie gefunden wurde, das Token gefunden und validiert wurde aber dann keine Rechte existieren – aha? Wahrscheinlich fehlt im Provider noch ein zusätzliches Setting der Komponenten. Am besten von RememberMe Service/Filter/Provider jeweils alle möglichen Properties durchgehen. Jaja, wie gesagt.. ;)

Fehlermöglichkeit 4: Das Ausloggen (beispielsweise logout.html) hat nach Aktivierung von Rememberme plötzlich keine Auswirkungen mehr.
Lösung: Zwar wird die Seite gefunden, aber es wird kein “Logout” gemacht. Auch hier sollte man prüfen, ob ein SecurityChainFilter (web.xml) auch für die logout-Seite greift.

Fehlermöglichkeit 5: Das Besuchen der Seite wirft einen Fehler (ggf. “mit weißer Seite”), dass keine neue Session erstellt werden kann.
Lösung: Richtig, nach einem Request ist ja dann auch zu spät. Das Attribut create-session in der Direktive http sollte daher auf “ifRequeried” gestellt sein.

Fazit:

  • SecurityChainFilter immer prüfen
  • Intercepted Urls prüfen
  • RememberMe-Direktive innerhalb der http-Direktive ist quasi abgesehen von der services-ref unbrauchbar.

Anmerkung:

Natürlich kann man sich das Problem mit den SecurityChains vom Hals schaffen, indem man stupide ein /* filtert. Das hat jedoch zur Auswirkung, das Spring Security auch jeden verdammten Request anguckt; bei zusätzlichen (statischen) Inhalten wie Javascript, Stylesheets, Bildern, Flash u.ä. ist das ein Overhead, der unnötig ist.

Tags: , , ,

Die Diplomarbeit als Video

Geht nicht? Doch! Mit Hilfe des Visualisierungstool Gource (Open Source) lassen sich von SCMs wie Git oder Subversion sehr ansprechende Visualisierungen erzeugen. Es gibt auch einen netten Link, wie man das unter Mac OSX ans Laufen bekommt (man braucht dafür MacPorts).