PNGs und JPGs sind zwei beliebte Bildformate im Internet - das eine kann Transparenz, das andere komprimiert Bilder gut. Das Problem ist, man kann es nicht kombinieren.

So die Theorie, und eigentlich stimmt es auch. Aber was macht man, wenn man wie im ECCO-Projekt schöne große freigestellte Zoom-Bilder auf elegante Bühnen stellen will? 4MB oder gar 12MB dem Nutzer zumuten? Wohl kaum.

Eine Lösung musste her, der Screen sah einfach zu gut aus, als dass er an der Technik scheitern durfte. Und wir fanden eine Lösung: Wir schnitten den inneren Teil aus jedem Schuh und zerteilten ihn in Rechtecke, die komplett opaque waren und sich damit als JPG gut komprimieren ließen. Der Rest, die halbtransparente Hülle, blieb in einem PNG, das nun nicht mehr viel Bildmaterial enthält und dadurch ebenfalls klein ist.

Das klingt total wild, reduziert aber den Platzbedarf tatsächlich um mehr als zwei Drittel, z.B. von 970KB auf 250KB. Bei größeren Bildern sogar im Verhältnis noch besser. Es lohnt sich.

Und so läuft das Verfahren im Detail, und zwar komplett automatisiert:

Zuerst wird das Ausgangsbild auf die vorgegebenen Minimal- und Maximalgröße für Zooms heruntergerechnet. Dies geschieht mithilfe der Thumbnail-Factory des Commerce-Frameworks, die mit nur wenigen Zeilen Code komprimieren, herunterskalieren, croppen, auf Hintergründe stellen und das Format wechseln kann.

Nun wird das Zoombild in Kacheln zerteilt und auf Transparenz untersucht. Kacheln, die ausschließlich aus vollständig opaquen Pixeln bestehen, können in das JPG verschoben werden. Damit die Anzahl der späteren Requests reduziert wird, werden dabei nicht mehrere JPGs erzeugt, sondern nur eins mit denselben Maßen wie das Zoom-PNG.

Hier das Ergebnis nach dem Kacheln und Verschieben:

png-only.png

jpg-only.png

Als weiterer Analyseschritt werden zusammenhängende Kacheln gesucht und Rechtecke gebildet. Für jedes dieser Rechtecke wird ein absolut positioniertes DIV mit dem JPG im Hintergrund erzeugt. Das JPG stellt dabei ein Sprite dar, jedes DIV zeigt einen Ausschnitt. Ach ja, und das PNG natürlich noch dazu, und schon wird ein Schuh draus.

merged.png

Die Lösung existiert als wiederverwendbarer Java-Code unter Verwendung von JAI, das Verfahren ist aber technologieunabhängig, es gibt also keine Ausreden mehr für große, transparente Bilder.

Nachdem die erste Meet Magento im Februar 2009 in Leipzig schon ein großer Erfolg war, traf sich die deutsche Community rund um das Open Source E-Commerce System Magento ein weiteres Mal an diesem Montag in Frankfurt - und wir waren unter den rund 400 Teilnehmern mit dabei.

Wieder einmal muss dem Veranstaltungsteam rund um Thomas Fleck (netresearch) und Rico Neitzel ein riesiges Lob ausgesprochen werden: Die Orga war durchweg gelungen, die Vorträge sogar noch besser als beim letzten Mal und das Essen war lecker ;-)

Meine persönlichen Highlights:
Unter den zahlreichen Referenten war zum zweiten Mal Vinai Kopp vertreten - von einigen liebevoll "Extension-Papst" genannt ;)
Er schaffte es einmal mehr mit seinen Vorträgen, die komplexen Strukturen von Magento nachvollziehbar aufzubereiten und mit so viel Charme und Mitgefühl für die eingeschüchterten Entwickler vorzutragen, dass einem schnell die Scheu vor der Extension-Entwicklung für Magento genommen wurde.
Vinais Präsentationen sind inzwischen auch online verfügbar:

Ein weiteres Highlight war für mich die Vorstellung des ersten deutschen Magento Handbuchs für Entwickler, an welchem die Internetagentur für Magento E-Commerce visions momentan mit Hochdruck schreibt. Laut Verlag und Agentur soll das Buch bereits im Januar auf den Markt kommen - wir warten gespannt!

meet_magento_frankfurt.jpg
Dimitri Gatowskis unkonventionelle Präsentation (komplett mit Magento erstellt) zum Thema "Diagnose am laufenden System - Session-basiertes Debugging auf Produktionssystemen ohne Störung des regulären Betriebs" (aus dem Handbuch für Entwickler)

Eine Neuerung hatte die Meet Magento 2.09 auch noch zu bieten:
Zum ersten Mal wurden "Word Cafés" angeboten - ein workshopähnliches Format, bei dem die Teilnehmer miteinander diverse Themen begleitet von einem Moderator diskutieren konnten. Auch, wenn ich die Idee der Cafés sehr spannend fand, so konnte sie leider der Location und dem Ansturm der Teilnehmer nicht standhalten. Wenn man hier nicht direkt in der ersten Reihe stand, hatte man leider wenig Chancen viel von den Diskussionen oder gezeigten Präsentationen mitzubekommen. Außerdem liefen bis zu 6 Themen gleichzeitig, so dass man leider sehr viel interessantes verpasste.

meet_magento_wordcafes.jpg
Mittendrin statt nur dabei: die Word Cafés

Viele weitere Vorträge wären eine Erwähnung wert, aber wer mehr Details möchte, sollte am besten beim nächsten Mal persönlich zur Meet Magento kommen. Wir freuen uns auf jeden Fall bereits jetzt schon auf ein Wiedersehen mit der deutschen Community!

Weitere Infos:


Der deutsche Magento-Podcast von Rico Neitzel und Roman Zenner wird in der nächsten Ausgabe hoffentlich auch noch über die #mm09 berichten: www.magento-podcast.de - für Magento-Interessierte eine absolute Hörempfehlung!

Addons zum Debugging mit Firebug

| | Kommentare (0) | TrackBacks (0)

Der Funktionsumfang von Firebug ist schon beachtlich, umso erstaunlicher und erfreulicher ist die Tatsache, dass der Funktionsumfang von Firebug noch durch verschiedene Add Ons und/oder kleinerer Tricks erweitert werden kann.

Solch eine nützliche Erweiterung ist beispielsweise FirePHP - mit deren Hilfe man PHP debuggen kann. Ein weiteres AddOn genannt YSlow ist ein Firebug AddOn aus dem Hause Yahoo. Kurz zusammengefasst geht es hierbei, wie es der Name (gesprochen wie: Why Slow?) schon sagt, der Frage "Warum eine Seite so langsam ist" nach. Neben Zeitangaben zum Seitenaufbau, erhält der Entwickler detaillierte Angaben wie sich diese Zeit zusammensetzt und an welcher Stelle etwas ggf. verbessert werden kann.

Der nachfolgende Screencast als Ergebnis eines weiteren SinnerSchrader Technik Tracks beschreibt verschiedene Debugging AddOns zu Firebug.



Addons zum Debugging mit Firebug
from vimeorookie on Vimeo.

Javascript Debugging mit Firebug

| | Kommentare (1) | TrackBacks (0)

Während die Entwicklung von Javascript relativ einfach und umkompliziert
vonstattengeht, gestaltet sich das Debugging durch die limitierten
Debugging Funktionen umso schwieriger. So gab es bis vor kurzem keinen
effektiven Weg, um Debugging Nachrichten anzuzeigen bzw. auszugeben. Wenn überhaupt, dann nur in Form einer Sammlung verschiedenster Alert Fenster oder zigfacher Document.write() Befehle.

Die Lösung des Problems besteht im Einsatz eines Debuggers in Form eines Firefox Plugins, wodurch der Entwickler einen im Web Browser integrierten Debugger erhält.

Es wird also nur der Firefox Browser sowie das Firebug Plugin benötigt.

Firebug bietet eine ganze Menge an spannenden Funktionen wie z.B.
Seitenauskuft über HTML- und DOM-Elemente, das Ändern von CSS oder HTML Elementen on the 'fly', eine Konsole mit Kommandozeile und noch viele weitere Funktionen sowie eine Firefox Unabhängige Lite Version, die
auf der offiziellen Webseite näher beschrieben werden.

Der nachfolgende Screencast als Ergebnis eines SinnerSchrader Technik
Tracks beschreibt das Debugging von JavaScript mit Hilfe von Firebug.



Javascript Debugging mit Firebug from vimeorookie on Vimeo.

Ich persönlich finde Opera den besten Browser, insbesondere seinen Chrome, da er von Haus aus schon mit genau der richtigen Menge Funktionen vorkommt, und das miteinander gut integriert. Dadurch alles hat, was man braucht, ohne zu dick zu sein.

Und man hat über vieles bereits die Kontrolle, wie z.B., dass man bei Popup wieder die Addresszeile reaktivieren kann etc. Eins jedoch hat mich lange gestört: Das man nicht verhindern kann, wenn ein Link in einem neuen Tab aufgehen möchte.

Ich surfe so, dass ich typischerweise im selben Tab bleiben will, ein paar Sekunden mich aufhalte, und dann mit der Back-Maus-Geste wieder zurückgeh. Link, Back, anderer Link, Back. Das geht meist, aber genau dann eben nicht, wenn der Link einen neuen Tab aufgemacht hat.

Nun habe ich gerade entdeckt, dass auch Opera Greasemonkey-Skripte unterstüzt, sowie ein JavaScript-opera-Objekt, mit dem man alles Mögliche tunen, sowie defekte Skripte oder Seiten reparieren kann. Das hab ich freudig gleich mal ausprobiert, und es klappt vorzüglich.

Wenn auch ihr wieder mit Klick, Shift-Klick und Strg-Shift-Klick kontrollieren wollt, ob der Klick im selben Tab, einem neuen Tab oder einem neuen Hintergrund-Tab aufgeht, müsst ihr unter den JavaScript-Optionen nur einen Ordner einstellen, in dem ein Skript liegt, dass mit .user.js endet und folgenden Inhalt hat:

(
   function()
   {
      for (var i=0; document.links[i]; i++)
         if (document.links[i].target == '_blank')
      document.links[i].target = '_self';
   }
)();

Und schwupps, alles wieder unter Kontrolle. :-)

Mehr dazu findet ihr hier: http://www.opera.com/browser/tutorials/userjs/examples/