Archive for the ‘standards’ Category

Google Wave and IE-Support

Friday, September 25th, 2009

So after all Google has developed its Chrome Frame plugin for Internet Explorer for a good reason: enabling the majority of users – which are unfortunately still using Internet Explorer (6,7 AND 8) to have a better experience with HTML5-based websites.

Lars Rasmussen posted on the Google Wave Developer Blog that Wave will inform Internet Explorer users to install Chrome Frame for a better user experience. Reason being that Internet Explorer is just too slow at interpreting JavaScript and DOM Manipulations – features Wave heavily relies on. IE’s support of modern web standards such as HTML5 is pretty poor, too.

I’ve been experiencing the same issues with IE over and over for myself – yet in a smaller dimension: Every hour (and it have been many hours) a developer spends on the specific quirks on IE (which of course are different per each version) and to fix them for their application is not spent on adding cool new features or bug fixes which affect general issues.

Since this has been a problem for so a long time I hope this finally helps to fix this issue.

Introducing Jacqueline: unused CSS Selectors in Java

Monday, June 15th, 2009

Back in 2008 I wrote some articles about the proposed Selectors API for the DOM. Now, in 2009, it’s still “only” a working draft of the W3C. I’ve been exploring this topic for a long time, now I will finally have time to write about what I’ve been working on for several months.

Jacqueline is a library which will help you to find unused CSS Selectors in multiple HTML documents. This is a very important feature when you want to check a complete website: it will be almost certain that you have some CSS selectors used on page “A” but not on page “B” whereas “B” uses some CSS selectors which “A” doesn’t use.

Jacqueline is completely written in Java – this was necessary because we wanted to run it in our Java based infrastructure. This brings some other problems Jacqueline has to face: the DOM implementation in Java doesn’t feature the Selectors API. So I wrote a CSS-to-XPath engine – inspired by DOMAssistant. What this basically does is: it transforms CSS2.1 selectors into XPath queries which can then be used for node tests (since XPath support is included in the JDK) on the DOM tree of the HTML document.

Because our documents are still using HTML 4.0 (due to several problems when switching to XHTML 1.0) I had to use JTidy for building DOMs.

Jacqueline also uses Apache Batik to retrieve all the CSS rules and CSS selectors from a document – it was the only implementation of the SAC (Simple API for CSS) I got to run – and which had some special features. These include locator information of the found tokens for example.

At the moment Jacqueline only works single-threaded, but because this includes many cpu-intensive operations which could definitely be fastened by using the power of multiple cores I’m also dreaming of a multi-threaded version. Since most operations of Jacqueline could be executed in a parallel fashion this could bring a major speed-up.

The main thing of Jacqueline is that it’s one of the first pieces to the lately mentioned Project Mess Tool. We’ll be using the power of Jacqueline to detect unused CSS selectors in our web projects.

Finally, that stupid name: Jacqueline is named after Jacqueline Bouvier from my favorite TV show the Simpsons. See this poster in our office:

Jacqueline - Poster

Jacqueline - Poster

Pie-Menu mit JavaScript

Tuesday, October 21st, 2008

Nach einer Weile Ruhe kann ich nun mein neuestes “Projekt” vorstellen, das mich hauptsächlich nun während des Studiums nicht mehr loslässt: Es handelt sich dabei um eine Pie-Menu Implementierung in JavaScript und XHTML.

Gefesselt haben mich Pie Menus nun seit Längerem. Denn neben meinen Interessen für die technische Seite der aktuellen Entwicklungen interessieren mich auch neue oder ungewohnte, selten genutzte Benutzerschnittstellen.

Vorteile eines Pie-Menus sind dabei:

  • einfachere Bedienung, da nur grobe Richtungen angegeben werden müssen, anstatt auf kleine Icons etc. zu klicken
  • bessere Raumausnutzung (ringförmig) statt linearer Menüs
  • intuitive Benutzung nach kurzer Gewöhnungsphase

Die Implementierung ist momentan noch ziemlich simpel, aber schon darauf ausgelegt, mehrere solcher Menüs in einer Seite unterbringen zu können.

Die Idee: im Markup werden ul-Elemente mittels der Klasse “jspie” gekennzeichnet, für diese wird je li-Element ein Eintrag im Menü erstellt.

Es lässt sich dabei nicht nur zu URLs navigieren, sondern z.B. auch JavaScript-Code ausführen, sodass den Aktionen alle Möglichkeiten offenbleiben.

Wem “Pie Menus” nichts sagen, dem wird folgende “Illustration” vielleicht weiterhelfen:

Für eine feinere Implementierung als die momentane werde ich wohl noch einige Zeit brauchen, aber der Prototyp dafür steht bereits und kann grob verwendet werden. Eine Demo-Seite werde ich in den nächsten Tagen einrichten. Dort wird dann auch der Quellcode veröffentlicht werden.

Die Darstellung des Menüs wird im Laufe der Zeit natürlich noch optimiert werden.

EDIT:

Wenn man eine Weile in einem Projekt drinsteckt läuft man gerne Gefahr, viele Aktionen die für den Laien schleierhaft erscheinen mögen als völlig klar und “trivial” anzusehen. Um nochmal auf die Funktionsweise eines Pie-Menu zurückzukommen:

  • das Pie Menu wird vom Benutzer aktiviert (hier durch Gedrückthalten der Maus länger als 300ms)
  • innerhalb des nun dargestellen Menüs wird eine Aktion ausgewählt – meist durch Bewegen der Maus in Richtung der Aktion (hier mit gedrückter Maustaste – eine Aktion wird nur gewählt, wenn der Mauszeiger über den Rand des Kreises hinaus bewegt wird)
  • durch Loslassen der Maustaste wird die gewählte Aktion bestätigt und ausgeführt – soll keine Aktion ausgeführt werden lässt man die Maus folglich innerhalb des Kreises los

Nun noch ein (akademisch außerordentlich wertvoller) Link zum Wikipedia-Artikel: Pie Menus in der Wikipedia

Selectors API in Opera Acid3 Build

Thursday, August 14th, 2008

Kurzes Update:

Auch bei Opera bemüht man sich natürlich die neuen Web Standards zu unterstützen und so gibt es seit Ende März ein Build das eine 100/100-Completion im Acid3-Test erfüllen soll (näheres im Entwicklerblog).

In diesem Build ist auch eine native Implementierung des Selectors API eingebaut. Die mit dem von mir aufgebauten Test-Szenario Ergebnisse zwischen 16 und 32ms erzielt.

Diese Werte lassen sich leider nicht 1:1 mit den anderen ermittelten vergleichen, da sie in unterschiedlichen Test-Umgebungen (Core2Duo 1.8 statt Core2Duo 2.6 – Windows XP statt Mac OS X) entstanden sind.

Selectors API in Firefox 3.1

Tuesday, July 29th, 2008

Ich war erfreut zu lesen, dass Firefox 3.1 mit Gecko 1.9.1 nun ebenfalls das Selectors API unterstützen wird.

Gleichzeitig ist mir ein Artikel von John Resig vom 10. Juli aufgefallen, der sich ebenfalls mit einer Test Suite für das Selectors API beschäftigt. Im Gegensatz zu den Performance-Tests werden in dieser Test Suite die einzelnen Implementierungen auf ihre Vollständigkeit der Selektoren hin überprüft. Mir waren bei Webkit/Safari schon Fehler bei etwas “exotischeren” Selektoren aufgefallen, was sich hiermit bestätigt hat. Die Implementierung Firefox 3.1 hingegen deckt laut Artikel schon weite Teile (ca. 70%) der Selektoren ab.

Ich werde mir in den nächsten Tagen eine Alpha-Version von Firefox 3.1 besorgen und hier ebenfalls die Performance testen.