<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3"
    xmlns="http://purl.org/atom/ns#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xml:lang="de">

    <title>High Resolution Weblog</title>
    <link rel="alternate" type="text/html" href="http://www.highresolution.info" />
    <tagline>Das Weblog über Digitale Fotografie // Bildbearbeitung // Webdesign von Dirk Jesse</tagline>
    <modified>2012-01-18T22:31:35+00:00</modified>
    <generator url="http://www.pmachine.com/" version="1.6.7">ExpressionEngine</generator>
    <copyright>Copyright (c) 2012, Dirk Jesse</copyright>


    <entry>
      <title type="html">YAML 4 Release &#45; Generationswechsel eingel&#228;utet</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/yaml_4_-_generationswechsel/" /> 
      <id>tag:highresolution.info,2012:weblog/11.1410</id>
      <issued>2012-01-18T11:39:34+00:00</issued>
      <modified>2012-01-18T22:31:35+00:00</modified>
      <summary type="html">Es ist getan. Seit wenigen Minuten steht auf YAML.de nicht nur eine neue Version meines CSS Frameworks zum Download bereit, es gibt auch zahlreiche Ver&#228;nderungen: angefangen bei einem vollst&#228;ndig &#252;berarbeiteten Dokumentationskonzept &#252;ber einen neuen, zeitgem&#228;&#223;en Webauftritt bis zu einem neuen Lizenzmodell. Aber der Reihe nach ...
 

Das neue Dokumentationskonzept
Die Dokumentation von YAML wurde vollst&#228;ndig neu gestaltet. Sowohl 2005 (YAML 1) als auch 2007 (YAML 3) erschien es gerechtfertigt, neben dem &#8220;wie&#8221; der Anwendung auch das &#8220;warum&#8221; der technischen Realisierung) ausf&#252;hrlich zu erl&#228;utern. Es gab in diesen Jahren kaum vollst&#228;ndige Dokumentationen zum Umgang mit Browserbugs und die Grundkonzepte von CSS2 waren f&#252;r viele Entwickler noch vergleichsweise frisch. Diese Zeiten sind vorbei. Grobe CSS&#45;Bugs, die massiv das Rendering einer Webseite beeinflussen, sind in den aktuellen Browsern mehr oder weniger ausgestorben, die Macken der alten Browsergeneration sind in zahlreichen B&#252;chern und online umfassend dokumentiert. Zudem war die YAML&#45;Doku in ihrer PDF&#45;Fassung auf satte 150 Seiten angewachsen, die Pflege und Fortschreibung in zwei Sprachen war nicht mehr zu leisten.

Das neue Dokumentationskonzept behandelt zuk&#252;nftig nur noch die Anwendung der einzelnen Features &amp;ndash; also das &#8220;wie&#8221;. Lohn dieses neuen Konzepts: die Doku liegt nun als offline&#45;taugliche HTML&#45;Datei dem Zip&#45;Paket des Frameworks bei und dient gleichzeitig als Kurzreferenz. Code&#45;Schnipsel k&#246;nnen direkt per copy &amp;amp; paste in das eigenen Projekt &#252;bernommen werden. Daf&#252;r steht die Dokumentation zuk&#252;nftig nur noch in englischer Sprache zur Verf&#252;gung. Mir ist es sehr wichtig, eine m&#246;glichst gut verst&#228;ndliche und vollst&#228;ndige Dokumentation liefern zu k&#246;nnen, weshalb mich in der Vergangenheit immer wieder kleine Unterschiede in den Sprachversionen gest&#246;rt haben. Die CSS Dateien des Frameworks sind hingegen auch weiterhin &#252;berwiegend zweisprachig dokumentiert.



Nun zu den wichtigsten Neuerungen bei YAML selbst. Im M&#228;rz 2011 hatte ich ja bereits &#252;ber einige der geplanten &#196;nderungen bei YAML 4 gesprochen. Wer die Ank&#252;ndigungen verfolgt hat, wird &#252;ber die folgenden Dinge nicht mehr ganz so &#252;berrascht sein.</summary>
      <created>2012-01-18T11:39:34+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>YAML, Webdesign</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Es ist getan. Seit wenigen Minuten steht auf <a href="http://www.yaml.de" title="YAML.de">YAML.de</a> nicht nur eine neue Version meines CSS Frameworks zum Download bereit, es gibt auch zahlreiche Ver&#228;nderungen: angefangen bei einem vollst&#228;ndig &#252;berarbeiteten Dokumentationskonzept &#252;ber einen neuen, zeitgem&#228;&#223;en Webauftritt bis zu einem neuen Lizenzmodell. Aber der Reihe nach ...
</p> <p><img src="http://www.highresolution.info/images/uploads/yaml4-screenshot-homepage.jpg" border="0" alt="" class="center" width="450" height="556" /></p>

<h3>Das neue Dokumentationskonzept</h3><p>
Die Dokumentation von YAML wurde vollst&#228;ndig neu gestaltet. Sowohl 2005 (YAML 1) als auch 2007 (YAML 3) erschien es gerechtfertigt, neben dem &#8220;wie&#8221; der Anwendung auch das &#8220;warum&#8221; der technischen Realisierung) ausf&#252;hrlich zu erl&#228;utern. Es gab in diesen Jahren kaum vollst&#228;ndige Dokumentationen zum Umgang mit Browserbugs und die Grundkonzepte von CSS2 waren f&#252;r viele Entwickler noch vergleichsweise frisch. Diese Zeiten sind vorbei. Grobe CSS-Bugs, die massiv das Rendering einer Webseite beeinflussen, sind in den aktuellen Browsern mehr oder weniger ausgestorben, die Macken der alten Browsergeneration sind in zahlreichen B&#252;chern und online umfassend dokumentiert. Zudem war die YAML-Doku in ihrer PDF-Fassung auf satte 150 Seiten angewachsen, die Pflege und Fortschreibung in zwei Sprachen war nicht mehr zu leisten.</p>

<p>Das neue Dokumentationskonzept behandelt zuk&#252;nftig nur noch die <em>Anwendung</em> der einzelnen Features &ndash; also das &#8220;wie&#8221;. Lohn dieses neuen Konzepts: die Doku liegt nun als offline-taugliche HTML-Datei dem Zip-Paket des Frameworks bei und dient gleichzeitig als Kurzreferenz. Code-Schnipsel k&#246;nnen direkt per <em>copy &amp; paste</em> in das eigenen Projekt &#252;bernommen werden. Daf&#252;r steht die Dokumentation zuk&#252;nftig nur noch in englischer Sprache zur Verf&#252;gung. Mir ist es sehr wichtig, eine m&#246;glichst gut verst&#228;ndliche und vollst&#228;ndige Dokumentation liefern zu k&#246;nnen, weshalb mich in der Vergangenheit immer wieder kleine Unterschiede in den Sprachversionen gest&#246;rt haben. Die CSS Dateien des Frameworks sind hingegen auch weiterhin &#252;berwiegend zweisprachig dokumentiert.</p>

<p><img src="http://www.highresolution.info/images/uploads/yaml4-screenshot-docs.jpg" border="0" alt="" class="center" width="450" height="282" /></p>

<p>Nun zu den wichtigsten Neuerungen bei YAML selbst. Im M&#228;rz 2011 hatte ich ja bereits &#252;ber einige der geplanten <a href="http://www.highresolution.info/weblog/entry/yaml_4_zwischenstand/" title="&#196;nderungen bei YAML 4">&#196;nderungen bei YAML 4</a> gesprochen. Wer die Ank&#252;ndigungen verfolgt hat, wird &#252;ber die folgenden Dinge nicht mehr ganz so &#252;berrascht sein.
</p> <h3>Namespaces</h3><p>
Eine der h&#228;ufigsten Quellen f&#252;r Probleme bei der Frontendentwicklung in Verbindung mit Content Management Systemen, speziell bei gr&#246;&#223;eren oder &#252;ber Jahre gewachsenen Projekten, sind Kollisionen von ID- und Klassennamen der bestehenden Inhalte mit dem neu zu integrierenden CSS Framework. Dies f&#228;ngt bei so beliebten Systemen wie Wordpress an, welches per default (und nicht ganz einfach zu unterbinden) die CSS Klasse <code>.page</code> an das &lt;body&gt;-Element vergibt und damit bereits mit der gleichlautenden Klasse von YAML 3.x kollidiert.</p>

<p>Ein weiteres Problem waren gro&#223;e, gewachsene Webprojekte. CSS-Klassen, wie <code>.wrapper</code> oder <code>.col1</code> sind seit vielen Jahren gebr&#228;uchlich. Hat ein Projekt erst einmal eine gewisse Gr&#246;&#223;e erreicht (ich rede hier von einigen tausend Seiten), ist die Wahrscheinlichkeit sehr gering, dass bei einem Relaunch wirklich alle Inhalte auf den neuesten Stand gebracht werden k&#246;nnen. Im Regelfall wird man es neben einigen frisch aufbereiteten Seiten mit viel Legacy-Code zu tun haben, der unvorhersehbares Konfliktpotential mit sich bringt.</p>

<p>In YAML 4 werden daher die CSS-Klassen (IDs werden durch das Framework nicht mehr definiert) der Kernbestandteile des Frameworks mit dem Pr&#228;fix <code>ym-</code> versehen. Nicht jeder wird sich &#252;ber diese Regelung freuen, denn zumindest ein wenig leidet immer auch die Lesbarkeit der Klassennamen. Entsprechend des Anwenderfeedbacks der letzten Jahre &#252;berwiegt in diesem Fall aber klar der Nutzen.</p>

<h3>HTML5, CSS3 und veraltete Browser</h3><p>
Aus technischer Sicht gibt es im Grunde kaum eine Neuheit, denn YAML unterst&#252;tzt bereits seit Version 3.3 von Hause aus HTML5 und auch f&#252;r den Umgang mit CSS3 waren die 3.x Versionen technisch bereits bestens ger&#252;stet. Dennoch hat sich hier eine Kluft zwischen der Codebasis des Frameworks und dem &#228;u&#223;eren Eindruck des Projektes ergeben, denn die alte YAML-Seite und insbesondere die Layoutbeispiele waren optisch tief und fest im Erstellungsjahr 2007 verankert und wirken seit einiger Zeit angestaubt und altbacken. Und so war es nur logisch, dass YAML nicht nur den CSS-Support f&#252;r die neuen HTML5 Elemente mitbringt, sondern dass die beiliegenden Layoutbeispiele diesen Weg auch aktiv beschreiten.</p>

<p>Der Internet Explorer 6 wird von YAML noch immer unterst&#252;tzt. Hier gibt es keine qualitativen Einschnitte im Kern des CSS Frameworks. Das ist auch nicht notwendig, denn YAML hat die notwendigen Anpassungen f&#252;r den IE6 und 7 schon immer separat (in der Datei <em>iehacks.css</em>) verwaltet. Ge&#228;ndert hat sich jedoch die Verwendung dieser Datei. In YAML 4 gibt es dar&#252;ber hinaus keine gesonderten Patch-Stylesheets f&#252;r den IE mehr, die <em>iehacks.css</em> wird fortan direkt &#252;ber den <em>Conditional Comment</em> eingebunden. Das bedeutet andererseits, dass ich in den Beispiellayouts keine Anstrengungen mehr unternehme, den bei Spaltenlayouts typischen 3-Pixel-Bug manuell zu fixen oder per JS-Expression einen Ersatz f&#252;r den fehlenden Support f&#252;r <code>min-width</code> / <code>max-width</code> mitliefere. F&#252;r letzteres gibt es bei Bedarf effektiven Ersatz in Form von <a href="https://github.com/scottjehl/Respond" title="Respond.js">Respond.js</a>. Wer dar&#252;ber hinausgehend weiterhin auf den Feinschliff f&#252;r den IE6 nicht verzichten will, dem steht der 3.x Versionspfad von YAML, einschlie&#223;lich des YAML Builders auch weiterhin zur Verf&#252;gung. Man kann sich dort auch weiterhin noch an den verwendeten Techniken bedienen.</p>

<p>F&#252;r den HTML5 Support im IE6-8 setze ich auf <a href="http://code.google.com/p/html5shim/" title="html5shim">html5shim</a>. In diesem Projekt gibt es aktuell viel Bewegung, es ist daher jedem, der tiefer in HTML5 einsteigen will empfohlen, sich mit den aktuellen Diskussionen und der Weiterentwicklung des Projekts zu besch&#228;ftigen.</p>

<h3>Flexibilit&#228;t eines CSS Frameworks</h3><p>
YAML wurde in der Vergangenheit als ein System beschrieben, welches ein mehr oder weniger umfangreiches bzw. fertiges Basislayout mitliefert. Aus diesem l&#246;scht der Anwender, was er im jeweiligen Projekt nicht ben&#246;tigt. In Version 1 konnte YAML nicht viel mehr, weshalb dieses Erkl&#228;rmodell in der Anfangszeit durchaus stimmig war. &#220;ber die nachfolgenden 6 Jahre hat sich das Projekt jedoch deutlich weiterentwickelt. Der Framework-Charakter wurde immer st&#228;rker herausgearbeitet und das Projekt durch zahlreiche optionale Bausteine (Grid-Elemente, Formulare, usw.) erg&#228;nzt.</p>

<p>Heute erwarten die Anwender eines CSS Frameworks eine klare Trennung der Framework-Logik vom Screen-Design. Eine Sammlung, aufeinander abgestimmter Bausteine (Layout, Navigation, Typographie, Formulare, Print), um effektiv und schnell Prototypen realisieren zu k&#246;nnen. Flexibilit&#228;t, nicht zwingend im Screen-Design selbst, sondern in Handhabung des Frameworks ist gefragt. Ein Wechsel des Gridrasters von 12 auf 24 Spalten oder der Wechsel von einem fixen Grid auf eine fluides, sollte nicht dazu zwingen, auch das CSS Framework selbst wechseln zu m&#252;ssen. Wer ein Layout wahrhaft <em>responsive</em> gestalten will, braucht kein &#171;Responsive Framework&#187; mit einem willk&#252;rlich vorgegebenen Linarisierungspunkt, welcher sich an der Displayaufl&#246;sung aktueller Smartphones ausrichtet &#8211; diese sind unter Umst&#228;nden in 6 Monaten bereits wieder veraltet. Der Umbruch der einzelnen Layoutvarianten eines adaptiven Layouts sollte individuell f&#252;r jedes Design bestimmt werden. Frontententwickler ben&#246;tigen hierf&#252;r m&#246;glichst praktische und einfach zu handhabende Werkzeuge &#8211; das ist die Aufgabe des CSS Frameworks. Und in diesem Sinne habe ich YAML weiterentwickelt.</p>

<p>YAML 4 bietet deswegen keinen fest vorgegebenen Wert zur vollst&#228;ndigen Linearisierung der Layout-Module. Stattdessen w&#228;hle ich den Weg &#252;ber eine progressive Linearisierung des Layouts in mehreren Stufen. &#220;ber die Anzahl der Stufen und die &#220;bergangspunkte hat der Anwender vollst&#228;ndige Kontrolle und, obwohl das recht komplex klingen mag, die Anwendung ist letztlich sehr einfach und komfortabel. Was YAML nicht mitliefert, sind technische L&#246;sungen f&#252;r die bandbreitenoptimierte serverseitige Auslieferung von Medien (Bildern, Videos). Das ist erstens nicht die Aufgabe eines CSS Frameworks, zweitens gibt es zahlreiche Projekte, auf die im Bedarfsfall zur&#252;ckgegriffen werden kann.</p>

<h3>Die neue Website</h3><p>
<em>&laquo;Eat your own dog foot&raquo;</em> ist nicht nur ein gefl&#252;gelter Satz, es war schon immer Programm in meinen Projekten. Es ist deshalb nur logisch, dass es mit YAML 4 sowohl eine neue Website, als auch neue Layoutbeispiele geben musste, die sich auf dem aktuellen Stand der Technik bewegen, n&#228;mlich HTML5, CSS3 und Responsive Design. Drei Schlagworte, die im letzten Jahr leider z.T. Buzzword-Charakter angenommen haben, wor&#252;ber ich ja auch schon ein paar Worte <a href="http://www.highresolution.info/weblog/entry/hura_ein_css-framework_und_ein_rant/" title="hier im Blog">hier im Blog</a> verloren habe. Unabh&#228;ngig davon finde ich jedoch, dass ein CSS Framework nicht nur versprechen, sondern auch zeigen sollte, was die angebotenen Features zu leisten im Stande sind &#8211; und zwar im Produktivbetrieb und nicht nur in einfachen HTML-Demos.</p>

<h3>Lizenzbedingungen und ein neues Lizenzmodell</h3><p>
Mit dem Release von YAML 4 ver&#246;ffentliche ich auch neue, anwaltlich gepr&#252;fte Lizenztexte f&#252;r die beiden bisherigen kommerziellen Lizenzmodelle von YAML, die Projektlizenz und die Generelle Lizenz. Bei Erstellung der Texte wurde darauf geachtet, dass der Status Quo der Nutzungsrechte erhalten bleibt und sich f&#252;r bestehende Projekte und Lizenznehmer keine &#196;nderungen ergeben. Die Lizenztexte sind auf YAML.de vollst&#228;ndig in englischer Sprache hinterlegt. Neben der englischen Fassung gibt es die Lizenztexte nat&#252;rlich auch in Deutsch - nachzulesen in K&#252;rze (1..2 Tage brauchen wir noch) im YAML-Shop.</p>

<p>Neu hinzugekommen und sicherlich interessant f&#252;r CMS-Projekte, Templateshops oder Theme-Frameworks ist die OEM-Lizenz. &#220;ber dieses neue Lizenzmodell wird es m&#246;glich, YAML fest in andere Projekte zu integrieren und die Nutzungsrechte an Endkunden &#252;bertragbar zu gestalten. Als Beispiel hierf&#252;r sei das Wordpress-Framework <a href="http://de.xtreme-theme.com/xtreme-one/" title="Xtreme One">Xtreme One</a> genannt, welches bereits <a href="http://de.xtreme-theme.com/2011/07/xtreme-one-mit-yaml-oem-lizenz/" title="seit dem Sommer 2011">seit dem Sommer 2011</a> mit einer solchen OEM-Lizenz ausgestattet ist und Endanwendern automatisch die vollen Nutzungsrechte f&#252;r YAML sichert.<strong></p>

<p>Nachtrag:</strong> Die offiziellen (etwas knapper gefassten) englischsprachigen Release Notes gibt es <a href="https://plus.google.com/113701724985470452841/posts/MTP89aEEJoj" title="hier dr&#252;ben">hier dr&#252;ben</a>. Die <a href="https://plus.google.com/u/0/b/113701724985470452841/113701724985470452841/posts" title="YAML Website auf Google+">YAML Website auf Google+</a> wird zuk&#252;nftig auch der von mir favorisierte Nachrichtenkanal sein. Deutschsprachiges und pers&#246;nlich angehauchte Infos gibt&#8217;s nat&#252;rlich weiterhin hier.
</p>]]></content>
    </entry>

    <entry>
      <title type="html">Sublime Text 2 und JSLint</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/sublime_text_2_und_jslint/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1409</id>
      <issued>2011-12-31T18:07:41+00:00</issued>
      <modified>2011-12-31T18:09:42+00:00</modified>
      <summary type="html">Es hat nur wenige Tage gebraucht, um mit Sublime Text 2 warm zu werden. Dieser schlanke, spartanisch aussehende Editor hat es faustdick hinter den Ohren und mich erstaunlich schnell verzaubert. Das sch&#246;nste daran, es gibt ihn sowohl f&#252;r Windows, OSX als auch unter Linux. Es ist also &#252;berhaupt kein Problem, als Entwickler zwischen den einzelnen Welten hin&#45; und herzuspringen, die Entwicklungsumgebung ist immer mit dabei.
 Sublime Text 2 kommt mit einer ganzen Reihe verschiedener Color&#45;Schemes daher. Ich pers&#246;nlich mag dunkle UIs, weil ich oft bis tief in die Nacht programmiere und kann das Monokai&#45;Theme empfehlen (gibt&#8217;s &#252;brigens auch f&#252;r Coda).</summary>
      <created>2011-12-31T18:07:41+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>CSS &amp;amp; XHTML, JavaScript, Software</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Es hat nur wenige Tage gebraucht, um mit Sublime Text 2 warm zu werden. Dieser schlanke, spartanisch aussehende Editor hat es faustdick hinter den Ohren und mich erstaunlich schnell verzaubert. Das sch&#246;nste daran, es gibt ihn sowohl f&#252;r Windows, OSX als auch unter Linux. Es ist also &#252;berhaupt kein Problem, als Entwickler zwischen den einzelnen Welten hin- und herzuspringen, die Entwicklungsumgebung ist immer mit dabei.
</p> <p><a href="http://www.sublimetext.com/2" title="Sublime Text 2">Sublime Text 2</a> kommt mit einer ganzen Reihe verschiedener Color-Schemes daher. Ich pers&#246;nlich mag dunkle UIs, weil ich oft bis tief in die Nacht programmiere und kann das Monokai-Theme empfehlen (<a href="http://justinhileman.info/coda-colors/" title="gibt's &#252;brigens auch f&#252;r Coda">gibt&#8217;s &#252;brigens auch f&#252;r Coda</a>). <br />
 
<img src="http://www.highresolution.info/images/uploads/st2-screenshot.jpg" border="0" alt="" class="center width="450" height="331" /></p>

<p>Eines der Highlights des Editors sind die zahlreichen Plugins. Zun&#228;chst solltet Ihr Euch aber <a href="http://wbond.net/sublime_packages/package_control" title="Package Control">Package Control</a> installieren, einen bequemen Paket-Manager f&#252;r Sublime Text 2. &#220;ber diesen k&#246;nnt Ihr dann bequem aus Liste die zu installierenden Pakete ausw&#228;hlen, die Installation geschieht in der Regel vollautomatisch. Als Empfehlung hier eine kleine Auswahl der bei mir installierten Pakete:</p>

<ul>
<li>Alignment - erleichtert die Ausrichtung des Quelltextes, z.B. vertikale Ausrichtung an Gleichheitszeichen</li>
<li>BracketHighlighter - Hervorhebung zusammengeh&#246;riger Klammern</li>
<li>Sublime JSLint - vollautomatisiertes Linting f&#252;r JavaScript Code aus dem Editor heraus. Bequemer geht es nicht mehr</li>
<li>Tortoise - Speziell f&#252;r Windows User interessant, erweitert es den Editor um Men&#252;eintr&#228;ge und Keyboard-Shortcuts zur Ansteuerung von Tortoise, dem defakto Standard-SVN-Client unter Windows</li>
<li>Zen Coding - komplexes Plugin zur Code-Vervollst&#228;ndigung f&#252;r HTML &amp; CSS</li>
</ul>

<h3>JSLint Konfiguration</h3><p>
Obgleich das JSLint Plugin auf Anbieb funktioniert (um eine Java-Runtime braucht man sich nicht k&#252;mmern, die kommt gleich mit), ist es dennoch sinnvoll, dem Linter ein wenig Wind aus den Segeln zu nehmen, um nicht von tausenden angeblichen Fehlermeldungen zugesch&#252;ttet zu werden. Die Konfiguration erfolgt &#252;ber ein Config-File, welches man im Editor selbst &#252;ber <em>Preferences->Package-Settings->JSLint->Settings-Default</em> erreicht.</p>

<p>Unter &#8220;jslint_options&#8221; kann man hier den Linter entsprechend der eigenen Vorlieben anpassen. Folgende Optionen habe ich gesetzt:</p>

<dl>
<dt>&#8212;predef $,document</dt><dd>Wer wie ich viel mit jQuery arbeitet, wird um die Option predef nicht herumkommen. Sie dient dazu, JSLint &#252;ber globale Variablen zu informieren, auf die der zu pr&#252;fende Code zugreift und deren Benutzung somit nicht als Fehler gewertet wird. F&#252;r jQuery sind das mindestens <code>$</code>, bzw. <code>jQuery</code> und <code>document</code>.</dd>
<dt>&#8212;white</dt><dd>Ist meinem pers&#246;nlichen Coding-Stil geschuldet, dass ich nicht von JSLint &#252;ber die Verwendung von Leerzeichen belehrt werden will.</dd>
<dt>&#8212;browser</dt><dd>Damit werden typische gobale Variablen der Browser verf&#252;gbar, z.B. <code>window</code>.</dd>
<dt>&#8212;sloppy</dt><dd>Sollte immer aktiviert werden, solange man noch nicht mit &#8220;use strict&#8221;; arbeitet.</dd>
</dl>

<p>Das ganze sieht dann fertig so aus:
</p><pre name="code" class="javascript:nocontrols">
// Options pass to jslint.
"jslint_options": "--predef $,document --white --sloppy --browser"
</pre>

<p>Eine vollst&#228;ndige Liste der Optionen gibt es <a href="https://github.com/fbzhong/sublime-jslint/wiki/Available-jslint4java-options" title="hier">hier</a>. Hat man das hinter sich gebracht, kann man den Linter jederzeit mit Crtl+J anschmei&#223;en und sich anschlie&#223;end gem&#252;tlich durch die Fehlerliste navigieren. So bequem hatte ich es bisher in keinem Editor.</p>

<p>&nbsp;</p>

<p>&nbsp;</p> ]]></content>
    </entry>

    <entry>
      <title type="html">Vom Schein und Sein eines Print&#45;Stylesheets</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/vom_schein_und_sein_eines_print_stylesheets/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1408</id>
      <issued>2011-11-16T13:30:56+00:00</issued>
      <modified>2011-11-16T15:19:57+00:00</modified>
      <summary type="html">Der Beitrag &#8220;6 Things I Learned About Print Stylesheets From HTML5 Boilerplate&#8221; hat mich daran erinnert, dass ich schon lange mal ein paar Worte &#252;ber das HTML5 Boilerplate verlieren wollte. Ich halte dieses Projekt abseits des HTML5 Hypes f&#252;r eine geniale Sache, insbesondere wegen seines umfangreichen und ausgekl&#252;gelten Build&#45;Skripts und der mitgelieferten Apache&#45;Konfiguration per .htaccess. Bei den CSS&#45;Definitionen finde ich die Einbindung des Normalize.css Projekts sehr viel sinnvoller (wenn auch recht umfangreich) als die vielseits beliebten Reset&#45;Stylesheets von Eric Meyer oder YUI.
 Die Vorgaben des Print&#45;CSS kann ich allerdings weniger empfehlen (ist aber auch weniger dramatisch). Speziell geht es mir um die &#8220;Print Friendly Links&#8221;, wie es der oben zitierte Beitrag nennt. Hier der betreffende Auszug aus dem HTML5 Boilerplate.

a[href]:after { content: &quot; (&quot; attr(href) &quot;)&quot;; }
abbr[title]:after { content: &quot; (&quot; attr(title) &quot;)&quot;; }
.ir a:after, a[href^=&quot;javascript:&quot;]:after,
a[href^=&quot;#&quot;]:after { content: &quot;&quot;; } /* Don&#39;t show links for images, or javascript/internal links */


Ich habe Vergleichbares (Automatische Auszeichnung von URLs, Akronymen und Abk&#252;rzungen) seit vielen Jahren in den YAML Druckstylesheets integriert, allerdings bin ich recht schnell wieder einen Schritt zur&#252;ck gegangen, indem ich diese Regeln nur noch auskommentiert mitliefere und das aus gutem Grund.

Es ist auf den ersten Blick sicher nachvollziehbar, dass verlinkte URLs beim Druck verloren gehen und man als zuvorkommender Webentwickler diese deshalb hinter dem Linktext mit ausdrucken will, damit f&#252;r den Anwender der Quellenverweis erhalten bleibt. Doch mal ehrlich: Wie oft hat jeder von Euch im letzten Jahr eine auf Papier abgedruckte URL in den Browser eingetippt? Und wie oft war diese dann l&#228;nger als 10 Zeichen? Ist die pauschale Ausgabe von URLs also wirklich sinnvoll?

Aus dem anvisierten Komfort f&#252;r den User wird in der Praxis schnell ein Nerv&#45;Feature &amp;ndash; und meist auch der Regelfall. Im Gegensatz zum Print arbeiten wir im Netz nicht mit Quellenverzeichnissen am Ende des Textes, sondern verlinken Schlagworte oder ganze S&#228;tze direkt und im Idealfall auch recht umfangreich. Allerdings steht im Netz die Querverlinkung dem Lesefluss und &#45;genuss auch nicht im Wege. Ausgedruckt ist ein solches Dokument allerdings nur noch bedingt gut lesbar, wenn der Flie&#223;text regelm&#228;&#223;ig durch lange, kryptische, nicht umbrechbare URLs unterbrochen wird. Ganz zu schweigen davon, dass sich die Mehrzahl der Anwender eben nicht diebisch dar&#252;ber freut, eine neue URL zum Abtippen gefunden zu haben.

Gleiches gilt f&#252;r die Anzeige der title&#45;Attribute von Abk&#252;rzungen. Gute Schreibe gebietet, dass Abk&#252;rzungen bei ihrem ersten Auftauchen im Text eingef&#252;hrt/erl&#228;utert werden. Aber eben nur beim ersten Mal (vielleicht noch beim zweiten, dann ist aber gut). Das Einpflegen von Akronymen und Abk&#252;rzungen erledigt im HTML aber fast niemand von Hand &#45; weil es recht l&#228;stig und umst&#228;ndlich ist. Daf&#252;r gibt es bei vielen Content Management Systeme entsprechende Plugins, die diese Aufgabe automatisch anhand von Wortlisten &#252;bernehmen. Auch daran gibt auf den ersten Blick nichts auszusetzen, denn schlie&#223;lich wird das title&#45;Attribut nur angezeigt, wenn der Anwender das Element mit der Maus ansteuert und dar&#252;ber verweilt. Aber schon Nutzer von Screenreadern d&#252;rften derartige Automatismen st&#246;ren, wenn z.B. in einem Webdesign&#45;Fachtext hinter jedem jedem HTML (Hypertext Markup Language) steht/vorgelesen wird. Und Lesern eines ausgedruckten Dokuments geht es da nicht anders. 

Die sichtbare Auszeichnung von URLs und Abk&#252;rzungen ist per Definition weder unn&#252;tz noch sch&#228;dlich. Allerdings ist sie eben nur dann sinnvoll, wenn die Inhalte entsprechend sorgf&#228;ltig dahingehend aufbereitet sind, in dem beispielsweise nur die URL von besonders gekennzeichneten Links ausgegeben wird. Genauso wie der Ausdruck der title&#45;Attribute von Abk&#252;rzungen nur dann f&#252;r den User sinnvoll ist, wenn die Texte auch entsprechend sorgf&#228;ltig aufbereitet werden. Andernfalls kann beides schnell zum billigen Werbefeature des Entwicklers werden, welches u.U. deutlich an den Interessen des Lesers (Internetausdruckers) vorbei geht. 

Und so versteckt sich auch im HTML5 Boilerplate die eine oder andere Regel, deren Nutzen mehr Schein als Sein ist, wenn man sie gedankenlos &#252;bernimmt.</summary>
      <created>2011-11-16T13:30:56+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>CSS &amp;amp; XHTML, Webdesign, Zug&#228;nglichkeit</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Der Beitrag &#8220;<a href="http://designshack.net/articles/css/6-thinks-i-learned-about-print-stylesheets-from-html5-boilerplate/" title="6 Things I Learned About Print Stylesheets From HTML5 Boilerplate">6 Things I Learned About Print Stylesheets From HTML5 Boilerplate</a>&#8221; hat mich daran erinnert, dass ich schon lange mal ein paar Worte &#252;ber das <a href="http://html5boilerplate.com/" title="HTML5 Boilerplate">HTML5 Boilerplate</a> verlieren wollte. Ich halte dieses Projekt abseits des HTML5 Hypes f&#252;r eine geniale Sache, insbesondere wegen seines umfangreichen und ausgekl&#252;gelten Build-Skripts und der mitgelieferten Apache-Konfiguration per .htaccess. Bei den CSS-Definitionen finde ich die Einbindung des <a href="http://necolas.github.com/normalize.css/" title="Normalize.css">Normalize.css</a> Projekts sehr viel sinnvoller (wenn auch recht umfangreich) als die vielseits beliebten Reset-Stylesheets von Eric Meyer oder YUI.
</p> <p>Die Vorgaben des Print-CSS kann ich allerdings weniger empfehlen (ist aber auch weniger dramatisch). Speziell geht es mir um die &#8220;Print Friendly Links&#8221;, wie es der oben zitierte Beitrag nennt. Hier der betreffende Auszug aus dem HTML5 Boilerplate.</p>

<pre name="code" class="css:nocontrols">a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after,
a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
</pre>

<p>Ich habe Vergleichbares (<a href="http://www.yaml.de/de/dokumentation/css-bausteine/das-drucklayout.html" title="Automatische Auszeichnung von URLs, Akronymen und Abk&#252;rzungen">Automatische Auszeichnung von URLs, Akronymen und Abk&#252;rzungen</a>) seit vielen Jahren in den <a href="http://http://www.yaml.de" title="YAML">YAML</a> Druckstylesheets integriert, allerdings bin ich recht schnell wieder einen Schritt zur&#252;ck gegangen, indem ich diese Regeln nur noch <em>auskommentiert </em>mitliefere und das aus gutem Grund.</p>

<p>Es ist auf den ersten Blick sicher nachvollziehbar, dass verlinkte URLs beim Druck verloren gehen und man als zuvorkommender Webentwickler diese deshalb hinter dem Linktext mit ausdrucken will, <em>damit f&#252;r den Anwender der Quellenverweis erhalten bleibt</em>. Doch mal ehrlich: Wie oft hat jeder von Euch im letzten Jahr eine auf Papier abgedruckte URL in den Browser eingetippt? Und wie oft war diese dann l&#228;nger als 10 Zeichen? Ist die pauschale Ausgabe von URLs also wirklich sinnvoll?</p>

<p>Aus dem anvisierten Komfort f&#252;r den User wird in der Praxis schnell ein Nerv-Feature &ndash; und meist auch der Regelfall. Im Gegensatz zum Print arbeiten wir im Netz nicht mit Quellenverzeichnissen am Ende des Textes, sondern verlinken Schlagworte oder ganze S&#228;tze direkt und im Idealfall auch recht umfangreich. Allerdings steht im Netz die Querverlinkung dem Lesefluss und -genuss auch nicht im Wege. Ausgedruckt ist ein solches Dokument allerdings nur noch bedingt gut lesbar, wenn der Flie&#223;text regelm&#228;&#223;ig durch lange, kryptische, nicht umbrechbare URLs unterbrochen wird. Ganz zu schweigen davon, dass sich die Mehrzahl der Anwender eben nicht diebisch dar&#252;ber freut, eine neue URL zum Abtippen gefunden zu haben.</p>

<p>Gleiches gilt f&#252;r die Anzeige der title-Attribute von Abk&#252;rzungen. Gute Schreibe gebietet, dass Abk&#252;rzungen bei ihrem ersten Auftauchen im Text eingef&#252;hrt/erl&#228;utert werden. Aber eben nur beim ersten Mal (vielleicht noch beim zweiten, dann ist aber gut). Das Einpflegen von Akronymen und Abk&#252;rzungen erledigt im HTML aber fast niemand von Hand - weil es recht l&#228;stig und umst&#228;ndlich ist. Daf&#252;r gibt es bei vielen Content Management Systeme entsprechende Plugins, die diese Aufgabe automatisch anhand von Wortlisten &#252;bernehmen. Auch daran gibt auf den ersten Blick nichts auszusetzen, denn schlie&#223;lich wird das title-Attribut nur angezeigt, wenn der Anwender das Element mit der Maus ansteuert und dar&#252;ber verweilt. Aber schon Nutzer von Screenreadern d&#252;rften derartige Automatismen st&#246;ren, wenn z.B. in einem Webdesign-Fachtext hinter jedem jedem HTML (Hypertext Markup Language) steht/vorgelesen wird. Und Lesern eines ausgedruckten Dokuments geht es da nicht anders. </p>

<p>Die sichtbare Auszeichnung von URLs und Abk&#252;rzungen ist per Definition weder unn&#252;tz noch sch&#228;dlich. Allerdings ist sie eben nur dann sinnvoll, wenn die Inhalte entsprechend sorgf&#228;ltig dahingehend aufbereitet sind, in dem beispielsweise nur die URL von besonders gekennzeichneten Links ausgegeben wird. Genauso wie der Ausdruck der title-Attribute von Abk&#252;rzungen nur dann f&#252;r den User sinnvoll ist, wenn die Texte auch entsprechend sorgf&#228;ltig aufbereitet werden. Andernfalls kann beides schnell zum billigen Werbefeature des Entwicklers werden, welches u.U. deutlich an den Interessen des Lesers (Internetausdruckers) vorbei geht. </p>

<p>Und so versteckt sich auch im HTML5 Boilerplate die eine oder andere Regel, deren Nutzen <q>mehr Schein als Sein</q> ist, wenn man sie gedankenlos &#252;bernimmt. 
</p> ]]></content>
    </entry>

    <entry>
      <title type="html">Kurzreview: jQuery&#45;Workshop bei Undsoversity</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/kurzreview_jquery-workshop_bei_undsoversity/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1407</id>
      <issued>2011-10-21T18:39:29+00:00</issued>
      <modified>2011-10-23T08:10:30+00:00</modified>
      <summary type="html">jQuery hat zweifelsfrei f&#252;r viele Anwender und vor einigen Jahren auch f&#252;r mich den Weg zum Verst&#228;ndnis von DOM Scripting und JavaScript geebnet. Insofern ist es wenig verwunderlich, dass mehr und mehr Lehrmaterial f&#252;r jQuery auf den Markt kommt, welches sich gezielt an Einsteiger richtet und mit schnellen Ergebnissen begeistern will.
 Das neueste Projekt in dieser Hinsicht ist ein sechsst&#252;ndiger jQuery Video&#45;Workshop von Gerrit van Aaken, der seit ein paar Tagen bei Undsoversity zum Kauf bereit steht und sich ausdr&#252;cklich an Einsteiger richtet. Um sich vor dem Kauf einen Eindruck vom Gebotenen verschaffen zu k&#246;nnen, stehen insgesamt drei Kapitel (Events und EventListener, Inline&#45;Bildergalerie und ein interaktiver HTML5&#45;Videoplayer) mit einer Gesamtl&#228;nge von fast 2 Stunden (fast 1/3 der Gesamtl&#228;nge) kostenfrei auf YouTube bereit.

Aufgebaut sind die einzelnen Themenbl&#246;cke als Live&#45;Coding Sessions in denen zu Beginn eine Aufgabe vorgestellt wird, die im Anschluss als &#8220;Blick &#252;ber die Schulter&#8221; des Tutors mit HTML, CSS und eben jQuery (Anm: JavaScript sage ich hier bewusst nicht, denn JavaScript scheint kaum thematisiert zu werden) gel&#246;st werden. Die Art und Weise der Pr&#228;sentation finde ich von Konzept her gelungen und besonders interessant f&#252;r Autodidakten (wie mich), die lieber durch Probieren als durch dumpfes Lesen neue Dinge lernen. Der Zuschauer kann die schrittweise Entwicklung des Programmcodes anhand konkreter Aufgabenstellungen miterleben und so dessen Logik sehr viel einfacher nachvollziehen, als beispielsweise aus einem sp&#228;rlich kommentiertem, 2&#45;seitigen Abdruck eines fertigen Quelltextes in einem Buch.</summary>
      <created>2011-10-21T18:39:29+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>Tutorials, jQuery</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>jQuery hat zweifelsfrei f&#252;r viele Anwender und vor einigen Jahren auch f&#252;r mich den Weg zum Verst&#228;ndnis von DOM Scripting und JavaScript geebnet. Insofern ist es wenig verwunderlich, dass mehr und mehr Lehrmaterial f&#252;r jQuery auf den Markt kommt, welches sich gezielt an Einsteiger richtet und mit schnellen Ergebnissen begeistern will.
</p> <p>Das neueste Projekt in dieser Hinsicht ist ein sechsst&#252;ndiger <a href="http://www.undsoversity.de/detailed.php?id=10" title="jQuery Video-Workshop">jQuery Video-Workshop</a> von <a href="http://praegnanz.de" title="Gerrit van Aaken">Gerrit van Aaken</a>, der seit ein paar Tagen bei <a href="http://www.undsoversity.de" title="Undsoversity">Undsoversity</a> zum Kauf bereit steht und sich ausdr&#252;cklich an Einsteiger richtet. Um sich vor dem Kauf einen Eindruck vom Gebotenen verschaffen zu k&#246;nnen, stehen insgesamt drei Kapitel (<a href="http://www.youtube.com/watch?v=XeV-9-PFS1s" title="Events und EventListener">Events und EventListener</a>, <a href="http://www.youtube.com/watch?v=X3gNErTIXjI" title="Inline-Bildergalerie">Inline-Bildergalerie</a> und ein <a href="http://www.youtube.com/watch?v=R5Q7Ket4T5w" title="interaktiver HTML5-Videoplayer">interaktiver HTML5-Videoplayer</a>) mit einer Gesamtl&#228;nge von fast 2 Stunden (fast 1/3 der Gesamtl&#228;nge) kostenfrei auf YouTube bereit.</p>

<p>Aufgebaut sind die einzelnen Themenbl&#246;cke als Live-Coding Sessions in denen zu Beginn eine Aufgabe vorgestellt wird, die im Anschluss als &#8220;Blick &#252;ber die Schulter&#8221; des Tutors mit HTML, CSS und eben jQuery (Anm: JavaScript sage ich hier bewusst nicht, denn JavaScript scheint kaum thematisiert zu werden) gel&#246;st werden. Die Art und Weise der Pr&#228;sentation finde ich von Konzept her gelungen und besonders interessant f&#252;r Autodidakten (wie mich), die lieber durch Probieren als durch dumpfes Lesen neue Dinge lernen. Der Zuschauer kann die schrittweise Entwicklung des Programmcodes anhand konkreter Aufgabenstellungen miterleben und so dessen Logik sehr viel einfacher nachvollziehen, als beispielsweise aus einem sp&#228;rlich kommentiertem, 2-seitigen Abdruck eines fertigen Quelltextes in einem Buch.
</p> <p>Weniger gut gelungen ist die Umsetzung dieses Konzepts. Das Live-Coding ist eine hohe Kunst und offenbart immer dann seine T&#252;cken, wenn der Tutor nicht auf den Punkt vorbereitet ist. Ein bewusst eingebauter Logikfehler im Code zum Zwecke der Demonstration des Debuggings oder eines wichtigen logischen Schritts, ist sicherlich sinnvoll und l&#228;sst den Workshop authentisch und &#8220;lehrreich&#8221; wirken. Zuviele kleine Korrekturschleifen in zu kurzer Abfolge (speziell im Video-Kapitel) wirken hingegen mit der Zeit eher st&#246;rend. Beim Herauskopieren von Code-Schnipseln aus anderen Webseiten rinnen die Minuten der erkauften Zeit sehr viel schneller als man denkt. In einem kostenlosen Screencast, ist sowas kein Problem. In einem kostenpflichtigen Lernvideo w&#252;nsche man sich dann doch ein etwas zielgerichtetes Arbeiten und Erkl&#228;rungen mit mehr Tiefgang anstatt reinem copy/paste (Stichwort: Mediaelement.js).</p>

<p>Gerrits Workshop richtet sich an Einsteiger ohne JavaScript-Kenntnisse. Der Einstieg erscheint auch butterweich, allerdings h&#228;tte ich mir gew&#252;nscht, dass man &#252;ber 18 Kapitel nicht nur die Komplexit&#228;t der Aufgaben, sondern auch den Anspruch an den Coding-Stil schrittweise steigert. So h&#228;tte man meiner Meinung nach nicht g&#228;nzlich auf das eine oder andere Standard-Pattern f&#252;r eine strukturierte JS-Programmierung verzichten m&#252;ssen. Selektoren, die innerhalb weniger Zeilen 4..5 Mal aufgerufen werden (teilweise auch innerhalb von Schleifen), darf man schonmal cachen. Das mag f&#252;r die konkreten Beispiele nicht lebenswichtig sein, hilft aber auch Einsteigern ein Gef&#252;hl f&#252;r m&#246;gliche Performance-Probleme zu entwickeln f&#252;r den Fall, dass auch mal gr&#246;&#223;ere Mengen an DOM-Manipulationen von N&#246;ten sind. Guten Stil muss man nicht zwingend theoretisch belehrend herunterbeten, gerade Einsteigern kann man ihn leicht vermitteln, indem man ihn einfach vorlebt.</p>

<p>Deutliche Kritik muss man an dem <a href="http://www.youtube.com/watch?v=R5Q7Ket4T5w" title="Kapitel zum interaktiven HTML5-Videoplayer">Kapitel zum interaktiven HTML5-Videoplayer</a> &#252;ben, denn dessen Codequalit&#228;t ist wirklich erschreckend schlecht. In diesem Kapitel sollen Produktinformationen zeitsynchron zu einem Video angezeigt werden. Die daf&#252;r erforderlichen Daten werden per Ajax vom Server dynamisch nachgeladen. Allerdings wird auf das Ergebnis dieses Ajax-Requests zugegriffen, ohne &#252;berhaupt auf dessen Existenz zu pr&#252;fen, bzw. auf seine Verf&#252;gbarkeit zu warten. Eine Callback-Funktion f&#252;r einen Ajax-Error (sowas soll&#8217;s ja auch geben) gibt&#8217;s ebenfalls nicht. Die Daten werden einfach als &#8220;verf&#252;gbar&#8221; erkl&#228;rt. Variablen werden nicht deklariert (sie werden dadurch zwangsweise global), eine Strukturierung des Codes &ndash; auch im Sinne einer einfacheren Wiederverwendung &ndash; findet nicht statt. Die globalen Variablen sind schon deshalb ein Problem, weil bereits bei einem zweiten Video gleicher Art auf der Seite, das Script sich zwangsl&#228;ufig selbst die Werte &#252;berschreibt. Dass dieses Codebeispiel &#252;berhaupt funktioniert, ist mehr als gl&#252;cklich. Denn die Asynchronit&#228;t der success-Callbacks, die sich aus dem Ajax-Request, wie auch aus der Initialisierung des Videoplayers ergeben, wird weder angesprochen, noch im Code ber&#252;cksichtigt und ich bin mir nicht sicher, ob dem Autor das Problem vollst&#228;ndig bewusst ist. Hier hat mindestens die Qualit&#228;tskontrolle versagt, wenn es denn eine gab.</p>

<p>An einer Stelle wird &#8220;<a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/" title="unobtrusive JavaScript">unobtrusive JavaScript</a>&#8221; erw&#228;hnt, kurze Zeit sp&#228;ter jedoch Teile einer Webseite initial per <del>JavaScript</del>, sorry: jQuery, ausgeblendet, die nur bei Interaktion sichtbar werden sollen. Damit wird das Konzept von unobtrusive JavaScript auf den Kopf gestellt, denn das Ausblenden funktioniert ohne JavaScript nunmal nicht, genauso wie das zugeh&#246;rige interaktive Feature. Das ist ein konzeptioneller Fehler, der ebenfalls vermeidbar gewesen w&#228;re. Auf diese Weise summieren sich kleine und gro&#223;e Unsauberkeiten.</p>

<p>Ich arbeite nun schon seit &#252;ber vier Jahren mit jQuery und habe in den Anfangszeiten neben einigen schnellen Erfolgen auch massenweise Fettn&#228;pfe erwischt, in die ich mangels besseren Wissens, schlechter Tutorials und unperformanter Plugins gestolpert bin. Gerade wenn mit dem R&#252;ckenwind der ersten Erfolgen der Mut w&#228;chst, sich an gr&#246;&#223;eren Aufgaben zu versuchen, ist ein sauberer Stil und ein solides Grundwissen nicht zu ersetzen. Deshalb hat mich <a href="http://praegnanz.de/weblog/jquery-workshop#c021811" title="Gerrits etwas schnippische Antwort">Gerrits schnippische Antwort</a> auf einen berechtigten, <a href="http://praegnanz.de/weblog/jquery-workshop#c021810" title="kritischen Kommentar">kritischen Kommentar</a> von Alexander Farkas (welcher auf weitere Probleme aufmerksam macht) aus seinem eigenen Blog sehr gewundert. Zitat:</p>

<blockquote><p>Was ist schon schlechter Programmierstil? Und vor allem: Was ist guter? Dar&#252;ber wirst du viele verschiedene Meinungen finden.&nbsp;   </p>

<p>Richtig ist, dass man vieles aus dem Workshop eleganter und effizienter l&#246;sen kann. Aber es ist ein Einsteiger-Workshop mit einem gewissen Crashkurs-Charakter. Da kann man nicht stundenlang &#252;ber Code-Qualit&#228;t theoretisieren. [...], denn in ein paar Stunden &#187;&#220;ber die Schulter gucken&#171; bringt man den Leuten eben am besten solche Dinge bei, die sie sofort anwenden k&#246;nnen.<br />
[...]<br />
Das Sch&#246;ne an jQuery ist doch gerade, dass damit Einsteiger schnell (<strong>und dreckig</strong>) zu tollen Ergebnissen kommen. [...] <strong>W&#252;rden alle Webdesigner deine Ma&#223;st&#228;be anlegen, gebe es deutlich weniger spannende Anwendungen von jQuery</strong>.</p></blockquote>

<p>Das (und ganz besonders die von mir fett hervorgehobenen Passage) hat mich vom Hocker gehauen. Es ist das eine, was man im Alltag mit jQuery/JavaScript anstellt. Es ist aber etwas anderes, wenn man vorgibt, Einsteigern etwas beizubringen zu wollen und sein Wissen zu Geld machen will. Da f&#252;hrt um Sorgfalt und Qualit&#228;t kein Weg herum. </p>

<p>Egal, wie viel oder wenig Zeit man f&#252;r die Vermittlung von Wissen hat. Man kann einen Einsteiger auf <em>irgendeinen</em> Weg f&#252;hren oder auf den <em>Richtigen</em>. Man wird ihn auf beiden Wegen nur ein paar erste Schritte begleiten k&#246;nnen und man kann ihm auf beiden Wegen schnelle Erfolge pr&#228;sentieren. Der Unterschied besteht in der Zeit danach, wenn die K&#228;ufer eines mit 39,99 EUR (Einstiegspreis: 34,99 EUR) im Vergleich zu den Videotrainings einiger renomierter Verlage nicht unbedingt g&#252;nstigen Video-Workshops, eigenst&#228;ndig weiterlaufen sollen. Jede Handwerker-Lehre beginnt damit, dass die Azubis lernen, dass man sein Werkzeug ordentlich behandelt und den Arbeitsplatz regelm&#228;&#223;ig aufr&#228;umt. Schwer vorstellbar, dass in einem Video-Workshop f&#252;r angehende Webentwickler derartige Werte keinen Platz mehr finden m&#252;ssen. </p>

<p>Gerrit weist in seinem <a href="http://praegnanz.de/weblog/jquery-workshop" title="Blogbeitrag">Blogbeitrag</a> ausdr&#252;cklich auf die angenehmen wirtschaftlichen Rahmenbedingungen bei Undoversity hin:</p>

<blockquote><p>Timo erledigt Produktion, Marketing, Vertrieb, Technik und Controlling in Eigenregie und ist dadurch mehrere Dimensionen effizienter als ein beliebiger Verlag es je sein k&#246;nnte. Und das kommt nat&#252;rlich auch den Tutoren zugute. Dass mein Anteil am Verkauf signifikant h&#246;her ausf&#228;llt als die 3&#8211;5%, die man sonst so bek&#228;me, ist logisch.</p></blockquote>

<p>Dem Lob an die Undsoversity-Macher schlie&#223;e ich mich uneingeschr&#228;nkt an, allerdings mit dem pers&#246;nlichen Nachsatz: Die Verlage, mit denen ich bei bisher als Autor oder Fachgutachter bei verschiedenen Projekten zusammengearbeitet habe, legen gro&#223;en Wert auf die inhaltliche Qualit&#228;t und deren Kontrolle. Es ist sch&#246;n, wenn die gesteigerte Effizienz zu h&#246;heren Einnahmen der Autoren f&#252;hrt &ndash; reich wird mit Fachb&#252;chern oder Videotrainings n&#228;mlich niemand. Aber die Qualit&#228;t der Produkte sollte in keinem Fall leiden, denn im Direktvertrieb ist eben auch direkt und ausschlie&#223;lich die eigene Reputation in Gefahr. Deshalb meine Empfehlung an Gerrit: die Schwachstellen identifizieren und den Workshop &#252;berarbeiten.</p>

<p>Ich weise darauf hin, dass sich meine Meinung ausschlie&#223;lich auf die drei Probekapitel des deutlich umfangreicheren jQuery-Workshops st&#252;tzt und die hier formulierte Kritik auch nur diese drei Kapitel betrifft. Zu den weiteren 15 Kapiteln kann ich nichts sagen, denn gekauft habe ich den Video-Workshop nicht. 
</p>]]></content>
    </entry>

    <entry>
      <title type="html">Hurra, ein CSS&#45;Framework ... und ein Rant</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/hura_ein_css-framework_und_ein_rant/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1405</id>
      <issued>2011-10-05T17:49:47+00:00</issued>
      <modified>2011-10-06T06:29:48+00:00</modified>
      <summary type="html">Man sollte eigentlich meinen, dass man heute mit dem tausendsten Abklatsch des einfachen CSS&#45;Grid Konzepts nicht viel mehr als seine Freunde beeindrucken kann. Zumindest sollte man das vermuten, wenn man, wie bei Toast, auch noch lesen muss: &#8220;... and it also sets some nice default styles for inline elements, such as links, emphasis, strong, small print, marks, abbr, and lists!&#8221; Schon traurig, wenn Derartiges als &#8220;Feature&#8221; herausgestellt und dann auch noch in der Fachpresse beklatscht wird. Selbst zu den Anfangszeiten hatten die meisten Projekte dieser Art h&#246;here Ziele.
 Es ist nicht so, dass es beim Blick auf den Quelltext von Toast nichts zu sagen g&#228;be. Da w&#228;re zum einen, dass Toast eben nicht, wie f&#228;lschlich bei T3N geschrieben, mit einem Standard&#45;Reset daherkommt. Stattdessen setzt man n&#228;mlich, und das ist zumindest lobenswert, auf Normalisierung, statt auf Eric Meyers CSS&#45;Dampfwalze, die oft genug in der Kritik stand.

Ein weiteres erw&#228;hnenswerte Detail ist der Umstand, dass Toast f&#252;r seinen flexiblen Grid&#45;Ansatz mal eben auf eines der mit CSS3 neu eingef&#252;hrten Box&#45;Modelle baut (ohne darauf hinzuweisen, wohlgemerkt). Das macht die Arbeit mit flexiblen Breiten oder unterschiedlichen Einheiten in aktuellen Browsen ausgesprochen angenehm &#45; solange man sich nicht um den Internet Explorer 6 und 7 k&#252;mmern muss. Denn diesen d&#252;rfte das Grid bei Verwendung irgendeines horizontalen Padding oder Border&#45;Eigenschaft um die Ohren fliegen. Das muss man nicht zwingend negativ sehen, erw&#228;hnenswert ist es aber schon (zumal die Codebasis &#252;berschaubar ist). Ich pers&#246;nlich mag da altmodisch denken, aber innerhalb eines Frameworks, halte ich das auch heute mindestens f&#252;r problematisch, denn die Folgen in alten Browsern k&#246;nnen drastisch ausfallen.

Ebenfalls w&#228;re durchaus diskussionsbed&#252;rftig, ob es aus Design&#45;Sicht sinnvoll ist, wenn ein CSS&#45;Framework unter &#8220;responsive&#8221; nichts anderes versteht, als das Grid unterhalb von 775 Pixeln vollst&#228;ndig zu linearisieren (was im &#252;brigen nicht nur Toast, sondern auch andere Projekte betrifft). Aus meiner Sicht stellt sich beispielsweise die Frage, ob ein CSS&#45;Framework f&#252;r flexible Layouts &#252;berhaupt eine solche fixe Grenze vorschreiben sollte? Denn gerade flexible Layouts funktionieren erst richtig gut, wenn man die einzelnen Abstufungen des Layouts individuell auf dessen grafische Elemente abstimmt und sich nicht sklavisch einer fixen Zahl unterwirft, deren Ursprung vor vielen Jahren seine Relevanz verloren hat. 

Alle diese Punkte spricht der Beitrag bei T3N aber leider nicht an. Stattdessen bleibt er oberfl&#228;chlich und nichts&#45;sagend, denn Statements wie &#8220;Toast ist nicht f&#252;r jedes Projekt geeignet. Textlastige Websites k&#246;nnen durch den Einsatz des Frameworks an &#220;bersichtlichkeit und Bedienbarkeit gewinnen.&#8221; ist ohne Begr&#252;ndung nichts wert. Das eine oder andere wenig technische Detail oder gar eine kritische Anmerkung zur x&#45;ten Kopie der Kopie des Grid&#45;Ansatzes sind offensichtlich zuviel verlangt. Stattdessen werden einfach die Infotexte der Toast&#45;Webseite abgetippt, &#252;bersetzt und nicht gerade subtil bebildert &#45; fertig ist der neue Fachbeitrag und genauso schnell sind die Infomeldungen dar&#252;ber bei Twitter, Facebook, Google+ untergebracht. Dieses Schema taugt auch f&#252;r die n&#228;chsten 50 CSS&#45;Frameworks, soviel ist klar.

Nun, wir haben im deutschsprachigen Raum leider nur eine sehr &#252;berschaubare Anzahl von Magazinen, die sich der Frontendentwicklung widmen. Deshalb ich finde es ehrlich gesagt jammerschade, dass die Jungs von T3N sich nicht mehr die Zeit nehmen, den Inhalt der Beitr&#228;ge vor dem Schreiben genauer unter die Lupe zu nehmen. Hauptsache raus, die gierige Meute im Social&#45;Network&#45;Zirkus will bespa&#223;t werden. Sorry T3N, ihr macht Euch uninteressant und entbehrlich.</summary>
      <created>2011-10-05T17:49:47+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>Frameworks</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Man sollte eigentlich meinen, dass man heute mit dem tausendsten Abklatsch des einfachen CSS-Grid Konzepts nicht viel mehr als seine Freunde beeindrucken kann. Zumindest sollte man das vermuten, wenn man, wie bei <a href="http://daneden.me/toast/" title="Toast">Toast</a>, auch noch lesen muss: &#8220;<i>... and it also sets some nice default styles for inline elements, such as links, emphasis, strong, small print, marks, abbr, and lists!</i>&#8221; Schon traurig, wenn Derartiges als &#8220;Feature&#8221; herausgestellt und dann auch noch in der Fachpresse <a href="http://t3n.de/news/toast-neues-css-framework-grid-basis-334883/" title="beklatscht">beklatscht</a> wird. Selbst zu den Anfangszeiten hatten die meisten Projekte dieser Art h&#246;here Ziele.
</p> <p>Es ist nicht so, dass es beim Blick auf den <a href="https://github.com/daneden/Toast-Framework" title="Quelltext von Toast">Quelltext von Toast</a> nichts zu sagen g&#228;be. Da w&#228;re zum einen, dass Toast eben nicht, wie f&#228;lschlich bei T3N geschrieben, mit einem Standard-Reset daherkommt. Stattdessen setzt man n&#228;mlich, und das ist zumindest lobenswert, auf Normalisierung, statt auf Eric Meyers CSS-Dampfwalze, die oft genug in der Kritik stand.</p>

<p>Ein weiteres erw&#228;hnenswerte Detail ist der Umstand, dass Toast f&#252;r seinen flexiblen Grid-Ansatz mal eben auf eines der mit CSS3 neu eingef&#252;hrten Box-Modelle baut (ohne darauf hinzuweisen, wohlgemerkt). Das macht die Arbeit mit flexiblen Breiten oder unterschiedlichen Einheiten in aktuellen Browsen ausgesprochen angenehm - solange man sich nicht um den Internet Explorer 6 und 7 k&#252;mmern muss. Denn diesen d&#252;rfte das Grid bei Verwendung irgendeines horizontalen Padding oder Border-Eigenschaft um die Ohren fliegen. Das muss man nicht zwingend negativ sehen, erw&#228;hnenswert ist es aber schon (zumal die Codebasis &#252;berschaubar ist). Ich pers&#246;nlich mag da altmodisch denken, aber innerhalb eines Frameworks, halte ich das auch heute mindestens f&#252;r <em>problematisch</em>, denn die Folgen in alten Browsern k&#246;nnen drastisch ausfallen.</p>

<p>Ebenfalls w&#228;re durchaus diskussionsbed&#252;rftig, ob es aus Design-Sicht sinnvoll ist, wenn ein CSS-Framework unter &#8220;<q>responsive</q>&#8221; nichts anderes versteht, als das Grid unterhalb von 775 Pixeln vollst&#228;ndig zu linearisieren (was im &#252;brigen nicht nur Toast, sondern auch <a href="http://cssgrid.net/" title="andere Projekte">andere Projekte</a> betrifft). Aus meiner Sicht stellt sich beispielsweise die Frage, ob ein CSS-Framework f&#252;r flexible Layouts &#252;berhaupt eine solche fixe Grenze vorschreiben sollte? Denn gerade flexible Layouts funktionieren erst richtig gut, wenn man die einzelnen Abstufungen des Layouts individuell auf dessen grafische Elemente abstimmt und sich nicht sklavisch einer fixen Zahl unterwirft, deren Ursprung vor vielen Jahren seine Relevanz verloren hat. </p>

<p>Alle diese Punkte spricht der <a href="http://t3n.de/news/toast-neues-css-framework-grid-basis-334883/" title="Beitrag bei T3N">Beitrag bei T3N</a> aber leider nicht an. Stattdessen bleibt er oberfl&#228;chlich und nichts-sagend, denn Statements wie &#8220;<q>Toast ist nicht f&#252;r jedes Projekt geeignet. Textlastige Websites k&#246;nnen durch den Einsatz des Frameworks an &#220;bersichtlichkeit und Bedienbarkeit gewinnen.</q>&#8221; ist ohne Begr&#252;ndung nichts wert. Das eine oder andere wenig technische Detail oder gar eine kritische Anmerkung zur x-ten Kopie der Kopie des Grid-Ansatzes sind offensichtlich zuviel verlangt. Stattdessen werden einfach die Infotexte der Toast-Webseite abgetippt, &#252;bersetzt und nicht gerade subtil bebildert - fertig ist der neue Fachbeitrag und genauso schnell sind die Infomeldungen dar&#252;ber bei Twitter, Facebook, Google+ untergebracht. Dieses Schema taugt auch f&#252;r die n&#228;chsten 50 CSS-Frameworks, soviel ist klar.</p>

<p>Nun, wir haben im deutschsprachigen Raum leider nur eine sehr &#252;berschaubare Anzahl von Magazinen, die sich der Frontendentwicklung widmen. Deshalb ich finde es ehrlich gesagt jammerschade, dass die Jungs von <a href="http://t3n.de/" title="T3N">T3N</a> sich nicht mehr die Zeit nehmen, den Inhalt der Beitr&#228;ge vor dem Schreiben genauer unter die Lupe zu nehmen. Hauptsache raus, die gierige Meute im Social-Network-Zirkus will bespa&#223;t werden. Sorry T3N, ihr macht Euch uninteressant und entbehrlich. 
</p> ]]></content>
    </entry>

    <entry>
      <title type="html">Date.toLocaleString() Bug in Chrome und Safari</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/date.tolocalestring_bug_in_chrome_und_safari/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1404</id>
      <issued>2011-07-18T09:45:32+00:00</issued>
      <modified>2011-07-18T13:18:33+00:00</modified>
      <summary type="html">Datums&#45; und Zeitangaben zu formatieren ist immer wieder eine eher l&#228;stige Angelegenheit im Programmieralltag. Speziell, wenn sp&#228;ter Anwender von verschiedenen Orten dieser Welt darauf zugreifen und damit einfach umgehen sollen. Schon die feinen Unterschiede in der Datumsschreibweise zwischen dem deutsch&#45; und dem englischsprachigen Raum stiften oft genug Verwirrung.
 Ein Beispiel: In allen drei Varianten ist der gleiche Tag gemeint &amp;ndash; ohne die Landeszuordnung dahinter, ist eine eindeutige Zuordnung von Tag und Monat gar nicht so einfach.

6/15/2009 (en&#45;US)15/06/2009 (fr&#45;FR)2009/06/15 (ja&#45;JP)

Um diesem Problem zu begegnen, unterst&#252;tzen alle halbwegs modernen Browser (und damit auch der IE) die Methode Date.toLocaleString(), welche Datum &amp;amp; Zeit anhand der Browsereinstellungen im jeweils landestypischen Format ausgibt. Aus dem eher h&#228;sslichen Standard&#45;GMT&#45;String &#8220;Mon Jul 18 2011 11:56:29 GMT+0200&#8221; wird hierzulande &#8220;Montag, 18. Juli 2011 11:56:29&#8221;.

Weniger sch&#246;n ist, dass im Chromium&#45;Projekt seit langer Zeit ein ungefixter Bug (Issue 29779, eingetragen im Dezember 2009) schlummert, der statt &#8220;Monday, 18 January 2010 4:47:42 PM&#8221; eine solche Ausgabe provoziert &#8220;Mon Jan 18 2010 16:47:42 GMT+1100 (AUS Eastern Daylight Time) &#8220;. Nicht nur, dass keine Umformung in ein lokales Datumsformat stattfindet, durch die zus&#228;tzliche ausformulierte Zeitzonen&#45;Angabe wird der String sogar noch l&#228;nger und damit schwerer zu handhaben. Und da sich sowohl Google Chrome als auch Safari bei diesem Projekt bedienen, erben die beide Browser eben jenese Problem.

Ein Workaround &amp;ndash; der eigentliche Aufh&#228;nger f&#252;r diesen Blogpost &amp;ndash;&amp;nbsp; ist dabei gar nicht schwer. Denn das was Date.toLocaleString() ausgibt, ist lediglich eine Aneinanderreihung von lokalem Datum ( Date.toLocaleDateString() ) und lokalem Zeitformat ( Date.toLocaleTimeString() ) und f&#252;r beides gibt es spezielle &amp;ndash; und vor allem bugfreie &amp;ndash; Methoden. Also einfach die beiden Einzelstrings miteinander verketten und fertig.

var date = new Date();
var localeString = date.toLocaleDateString()+&quot; &quot;+date.toLocaleTimeString();


Ich hoffe, dem einen oder anderen hilft dieser kleine Tipp.

&amp;nbsp;</summary>
      <created>2011-07-18T09:45:32+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>JavaScript</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Datums- und Zeitangaben zu formatieren ist immer wieder eine eher l&#228;stige Angelegenheit im Programmieralltag. Speziell, wenn sp&#228;ter Anwender von verschiedenen Orten dieser Welt darauf zugreifen und damit einfach umgehen sollen. Schon die feinen Unterschiede in der Datumsschreibweise zwischen dem deutsch- und dem englischsprachigen Raum stiften oft genug Verwirrung.
</p> <p>Ein Beispiel: In allen drei Varianten ist der gleiche Tag gemeint &ndash; ohne die Landeszuordnung dahinter, ist eine eindeutige Zuordnung von Tag und Monat gar nicht so einfach.</p>

<ul><li>6/15/2009 (en-US)</li><li>15/06/2009 (fr-FR)</li><li>2009/06/15 (ja-JP)</li></ul>

<p>Um diesem Problem zu begegnen, unterst&#252;tzen alle halbwegs modernen Browser (und damit auch der IE) die Methode <a href="http://www.w3schools.com/jsref/jsref_tolocalestring.asp" title="Date.toLocaleString()"><em>Date</em>.toLocaleString()</a>, welche Datum &amp; Zeit anhand der Browsereinstellungen im jeweils landestypischen Format ausgibt. Aus dem eher h&#228;sslichen Standard-GMT-String <em>&#8220;Mon Jul 18 2011 11:56:29 GMT+0200&#8221;</em> wird hierzulande <em>&#8220;Montag, 18. Juli 2011 11:56:29&#8221;</em>.</p>

<p>Weniger sch&#246;n ist, dass im Chromium-Projekt seit langer Zeit ein ungefixter Bug (<a href="http://code.google.com/p/chromium/issues/detail?id=29779&amp;q=tolocalestring&amp;colspec=ID%20Stars%20Pri%20Area%20Type%20Status%20Summary%20Modified%20Owner%20Mstone%20OS" title="Issue 29779">Issue 29779</a>, eingetragen im Dezember 2009) schlummert, der statt <em>&#8220;Monday, 18 January 2010 4:47:42 PM&#8221;</em> eine solche Ausgabe provoziert <em>&#8220;Mon Jan 18 2010 16:47:42 GMT+1100 (AUS Eastern Daylight Time) &#8220;</em>. Nicht nur, dass keine Umformung in ein lokales Datumsformat stattfindet, durch die zus&#228;tzliche ausformulierte Zeitzonen-Angabe wird der String sogar noch l&#228;nger und damit schwerer zu handhaben. Und da sich sowohl Google Chrome als auch Safari bei diesem Projekt bedienen, erben die beide Browser eben jenese Problem.</p>

<p>Ein Workaround &ndash; der eigentliche Aufh&#228;nger f&#252;r diesen Blogpost &ndash;&nbsp; ist dabei gar nicht schwer. Denn das was <a href="http://www.w3schools.com/jsref/jsref_tolocalestring.asp" title="Date.toLocaleString()"><em>Date</em>.toLocaleString()</a> ausgibt, ist lediglich eine Aneinanderreihung von lokalem Datum ( <a href="http://www.w3schools.com/jsref/jsref_tolocaledatestring.asp" title="Date.toLocaleDateString()"><em>Date</em>.toLocaleDateString()</a> ) und lokalem Zeitformat ( <a href="http://www.w3schools.com/jsref/jsref_tolocaletimestring.asp" title="Date.toLocaleTimeString()"><em>Date</em>.toLocaleTimeString()</a> ) und f&#252;r beides gibt es spezielle &ndash; und vor allem bugfreie &ndash; Methoden. Also einfach die beiden Einzelstrings miteinander verketten und fertig.</p>

<pre name="code" class="javascript:nocontrols">var date = new Date();
var localeString = date.toLocaleDateString()+" "+date.toLocaleTimeString();
</pre>

<p>Ich hoffe, dem einen oder anderen hilft dieser kleine Tipp.</p>

<p>&nbsp;</p> ]]></content>
    </entry>

    <entry>
      <title type="html">Rapid Prototyping live im Browser &#45; Testpiloten gesucht</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/rapid_prototyping_live_im_browser-testpiloten_gesucht/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1401</id>
      <issued>2011-04-26T07:00:39+00:00</issued>
      <modified>2011-04-28T17:47:40+00:00</modified>
      <summary type="html">Ostern ist gerade vorbei, doch ich habe noch eine kleine &#220;berraschung. Seit der Ver&#246;ffentlichung des YAML Builders 1.0 im Februar 2008 war mir klar, dass dies die Richtung ist, in die ich mit meinen zuk&#252;nftigen Projekten verfolgen wollte. Zum einen bin ich selbst ein eher visuell orientierter Mensch, zum anderen wollte ich schon damals nicht akzeptieren, dass die Community zwar t&#228;glich Webapplikationen wie Google Mail &amp;amp; Docs sowie die Vorz&#252;ge von HTML5 hypt, der normale Webentwickler aber seine CSS&#45;Layouts in der Regel auch heute noch im Texteditor schreibt und immer wieder den Browser anklickt, F5 dr&#252;ckt, um sein Getipptes alle paar Minuten auf Fehlerfreiheit zu &#252;berpr&#252;fen. Das kann nicht die Zukunft sein. 

Also habe ich angefangen, dar&#252;ber nachzudenken, wie sich das Konzept hinter dem YAML&#45;Builder sinnvoll aufbohren l&#228;sst. Nach zahlreichen Diskussionen, Tests und JavaScript&#45;Lernerei habe ich angefangen. Dieser Beginn meines neuen Projektes &amp;raquo;Thinkin&#8217; Tags&amp;laquo; liegt nun ca. 2 Jahre zur&#252;ck und es ist Zeit, die ersten Ergebnisse der Programmierarbeit der letzten zwei Jahre vorzustellen.
 Das Projekt  &amp;raquo;Thinkin&#8217; Tags&amp;laquo;

&amp;raquo;Thinkin&#8217; Tags&amp;laquo; ist eine v&#246;llig neuartige, browserbasierte Entwicklungsumgebung f&#252;r das schnelle Erstellen von Layout&#45;/Webseiten&#45;Prototypen mit bisher einzigartigen Features. &amp;raquo;Thinkin&#8217; Tags&amp;laquo; ist als webbasierter Dienst konzipiert, der nach erfolgreicher Betaphase neben einem kostenfreien Zugang auch kostenpflichtige Premiumfeatures anbieten wird (allerdings wird bis dahin noch etwas Zeit vergehen). Die Layout&#45;Prototypen k&#246;nnen entweder von Grund auf mit einfachem HTML &amp;amp; CSS erstellt werden oder optional auf Basis verschiedener CSS&#45;Frameworks. Dabei steht selbstverst&#228;ndlich YAML (aktuell in der Version 4 alpha3) zur Verf&#252;gung aber auch Grid&#45;Frameworks wie Blueprint CSS (bereits experimentell  implementiert) sowie zuk&#252;nftig auch 960.gs sind angedacht.



Der gro&#223;e Vorteil des browserbasierten Prototypings in Verbindung mit einem CSS&#45;Framework ist, dass der auf diese Weise entstehende Code in gro&#223;en Teilen weiter&#45; bzw. wiederverwendbar ist f&#252;r die finale Umsetzung des Layouts f&#252;r den Produktivbetrieb. Einerseits erlaubt der visuelle Ansatz, CSS&#45;Layouts im Browser zu &amp;raquo;entwerfen&amp;laquo;, denn dank der mittlerweile hervorragenden Performance aktueller Browser und den visuellen Gestaltungsm&#246;glichkeiten mit CSS2 und CSS3 ist das Vorzeichnen in Grafikprogrammen wie Photoshop in vielen F&#228;llen unn&#246;tig. Andererseits sichert die professionelle Codebasis und die Ausrichtung von &amp;raquo;Thinkin&#8217; Tags&amp;laquo; als Werkzeug f&#252;r erfahrene Frontendentwickler eine Codequalit&#228;t, die ein eine ann&#228;hernd vollst&#228;ndige &#220;bernahme des Prototypen in die nachfolgenden Enwicklungsschritte erm&#246;glicht. Und auch wenn in der Vergangenheit zahlreiche desktopbasierte WYSIWYG&#45;Editoren (Dreamweaver, GoLive, ExpressionWeb) nicht das erreicht haben, was ihre Werbung verspricht, ist dieser Ansatz innerhalb eines Browsers ausgesprochen reizvoll. 

Das folgende Video basiert auf einem etwas &#228;lteren Entwicklungsstand (Januar 2011), es gibt jedoch einen recht guten &#220;berblick dar&#252;ber, wie die Applikation bedient wird und was in technischer Hinsicht momentan m&#246;glich ist.


Einige Features ...

Vollst&#228;ndig browserbasierte Erstellung von Layout&#45;Prototypen (in Firefox, Chrome, Safari und Opera)
Unterst&#252;tzung f&#252;r CSS&#45;Frameworks YAML und Blueprint CSS (960.gs in Vorbereitung)
Der Anwender hat nahezu vollst&#228;ndige Kontrolle &#252;ber Markup und CSS
CSS&#45;Parser zeigt CSS&#45;Eigenschaften einschlie&#223;lich Vererbung an
Jegliche CSS&#45;&#196;nderungen werden unmittelbar sichtbar
Verschiedene Darstellungsmodi zur Erstellung des Markups, sowie des Screen&#45; und Print&#45;Layouts
Projektexport und Download als ZIP&#45;File


&amp;nbsp;</summary>
      <created>2011-04-26T07:00:39+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>Thinkin&#39; Tags, Software, Webdesign</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Ostern ist gerade vorbei, doch ich habe noch eine kleine &#220;berraschung. Seit der Ver&#246;ffentlichung des <a href="http://www.highresolution.info/weblog/entry/yaml_builder_v10_beta1_geht_online/" title="YAML Builders 1.0">YAML Builders 1.0</a> im Februar 2008 war mir klar, dass dies die Richtung ist, in die ich mit meinen zuk&#252;nftigen Projekten verfolgen wollte. Zum einen bin ich selbst ein eher visuell orientierter Mensch, zum anderen wollte ich schon damals nicht akzeptieren, dass die Community zwar t&#228;glich Webapplikationen wie Google Mail &amp; Docs sowie die Vorz&#252;ge von HTML5 hypt, der normale Webentwickler aber seine CSS-Layouts in der Regel auch heute noch im Texteditor schreibt und immer wieder den Browser anklickt, F5 dr&#252;ckt, um sein Getipptes alle paar Minuten auf Fehlerfreiheit zu &#252;berpr&#252;fen. Das kann nicht die Zukunft sein. </p>

<p>Also habe ich angefangen, dar&#252;ber nachzudenken, wie sich das Konzept hinter dem YAML-Builder sinnvoll aufbohren l&#228;sst. Nach zahlreichen Diskussionen, Tests und JavaScript-Lernerei habe ich angefangen. Dieser Beginn meines neuen Projektes &raquo;Thinkin&#8217; Tags&laquo; liegt nun ca. 2 Jahre zur&#252;ck und es ist Zeit, die ersten Ergebnisse der Programmierarbeit der letzten zwei Jahre vorzustellen.
</p> <h3>Das Projekt  &raquo;Thinkin&#8217; Tags&laquo;</h3>

<p>&raquo;Thinkin&#8217; Tags&laquo; ist eine v&#246;llig neuartige, browserbasierte Entwicklungsumgebung f&#252;r das schnelle Erstellen von Layout-/Webseiten-Prototypen mit bisher einzigartigen Features. &raquo;Thinkin&#8217; Tags&laquo; ist als webbasierter Dienst konzipiert, der nach erfolgreicher Betaphase neben einem kostenfreien Zugang auch kostenpflichtige Premiumfeatures anbieten wird (allerdings wird bis dahin noch etwas Zeit vergehen). Die Layout-Prototypen k&#246;nnen entweder von Grund auf mit einfachem HTML &amp; CSS erstellt werden oder optional auf Basis verschiedener CSS-Frameworks. Dabei steht selbstverst&#228;ndlich <a href="http://www.yaml.de" title="YAML">YAML</a> (aktuell in der Version 4 alpha3) zur Verf&#252;gung aber auch Grid-Frameworks wie <a href="http://www.blueprintcss.org/" title="Blueprint CSS">Blueprint CSS</a> (bereits experimentell  implementiert) sowie zuk&#252;nftig auch <a href="http://960.gs/" title="960.gs">960.gs</a> sind angedacht.</p>

<p><a href="/images/thinkintags/tt-fullscreen.png" rel="tt" title="Thinkin' Tags ist eine Entwicklungsumgebung zur Erstellung von Website-Prototypen direkt im Browser. Es arbeitet sich besonders gut im Fullscreen-Modus des Browsers."><img src="http://www.highresolution.info/images/uploads/tt-fullscreen.png" border="0" alt="" class="float_left" width="450" height="299" /></a></p>

<p>Der gro&#223;e Vorteil des browserbasierten Prototypings in Verbindung mit einem CSS-Framework ist, dass der auf diese Weise entstehende Code in gro&#223;en Teilen weiter- bzw. wiederverwendbar ist f&#252;r die finale Umsetzung des Layouts f&#252;r den Produktivbetrieb. Einerseits erlaubt der visuelle Ansatz, CSS-Layouts im Browser zu &raquo;entwerfen&laquo;, denn dank der mittlerweile hervorragenden Performance aktueller Browser und den visuellen Gestaltungsm&#246;glichkeiten mit CSS2 und CSS3 ist das Vorzeichnen in Grafikprogrammen wie Photoshop in vielen F&#228;llen unn&#246;tig. Andererseits sichert die professionelle Codebasis und die Ausrichtung von &raquo;Thinkin&#8217; Tags&laquo; als Werkzeug f&#252;r erfahrene Frontendentwickler eine Codequalit&#228;t, die ein eine ann&#228;hernd vollst&#228;ndige &#220;bernahme des Prototypen in die nachfolgenden Enwicklungsschritte erm&#246;glicht. Und auch wenn in der Vergangenheit zahlreiche desktopbasierte WYSIWYG-Editoren (Dreamweaver, GoLive, ExpressionWeb) nicht das erreicht haben, was ihre Werbung verspricht, ist dieser Ansatz innerhalb eines Browsers ausgesprochen reizvoll. </p>

<p>Das folgende Video basiert auf einem etwas &#228;lteren Entwicklungsstand (Januar 2011), es gibt jedoch einen recht guten &#220;berblick dar&#252;ber, wie die Applikation bedient wird und was in technischer Hinsicht momentan m&#246;glich ist.
</p><iframe class="center" title="YouTube video player" width="450" height="283" src="http://www.youtube.com/embed/cYGIMaDN1eo?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe>

<h3>Einige Features ...</h3>
<ul>
<li>Vollst&#228;ndig browserbasierte Erstellung von Layout-Prototypen (in Firefox, Chrome, Safari und Opera)</li>
<li>Unterst&#252;tzung f&#252;r CSS-Frameworks YAML und Blueprint CSS (960.gs in Vorbereitung)</li>
<li>Der Anwender hat nahezu vollst&#228;ndige Kontrolle &#252;ber Markup und CSS</li>
<li>CSS-Parser zeigt CSS-Eigenschaften einschlie&#223;lich Vererbung an</li>
<li>Jegliche CSS-&#196;nderungen werden unmittelbar sichtbar</li>
<li>Verschiedene Darstellungsmodi zur Erstellung des Markups, sowie des Screen- und Print-Layouts</li>
<li>Projektexport und Download als ZIP-File</li>
</ul>

<p>&nbsp;</p> <h3>Video &amp; Screenshots</h3><p>
Die nachfolgenden Screenshots aus dem aktuellen Entwicklungsstand des Projekts zeigen zentrale Funktionen der Applikation. Ein Klick auf die Bilder &#246;ffnet die Gro&#223;darstellung.</p>

<p><a href="/images/thinkintags/tt-markup-manipulation.png" rel="tt" title="Die Manipulationsm&#246;glichkeiten sind vielseitig - durch Austauschen der Elementtypen l&#228;sst sich ein HTML5-Dokument visuell sehr komfortabel planen."><img src="http://www.highresolution.info/images/uploads/tt-markup-manipulation.png" border="0" alt="" class="center" width="450" height="306" /></a><br />
<a href="/images/thinkintags/tt-markup-editing.png" rel="tt" title="F&#252;r die Detailarbeit bei der Gestaltung des Markups steht ein integrierter Texteditor zur Verf&#252;gung."><img src="http://www.highresolution.info/images/uploads/tt-markup-editing.png" border="0" alt="" class="center" width="450" height="306" /></a><br />
<a href="/images/thinkintags/tt-enhanced-css-editing.png" rel="tt" title="Der DOM/CSS Inspector arbeitet nach dem Vorbild des Firebug-Addons f&#252;r Firefox. Frondendentwickler werden sich hier sofort zuhause f&#252;hlen."><img src="http://www.highresolution.info/images/uploads/tt-enhanced-css-editing.png" border="0" alt="" class="center" width="450" height="307" /></a><br />
<a href="/images/thinkintags/tt-print-layout-editing.png" rel="tt" title="Bisher gab es kaum ernstzunehmende M&#246;glichkeiten f&#252;r Frontendentwickler, das Drucklayout einer Webseite komfortabel zu gestalten. Mit Thinkin' Tags wird es ein Genuss."><img src="http://www.highresolution.info/images/uploads/tt-print-layout-editing.png" border="0" alt="" class="center" width="450" height="306" /></a></p>

<h3>30 Testpiloten gesucht</h3><p>
Vor dem Start der Betaphase ist es mir wichtig, die bisher implementierte Funktionalit&#228;t ausgiebig zu testen und deren Grenzen auszuloten. Ich suche daher max. 30 Testuser, die in den kommenden Wochen die Applikation ausgiebig testen und dabei Bugtracker, Feature-Wunschliste und das Nutzerforum mit m&#246;glichst ebenso ausf&#252;hrlichem Feedback bef&#252;llen. </p>

<h4>Wer darf mitmachen?</h4><p>
Wer sich also um einen Testaccount bewerben m&#246;chte, sollte folgende Voraussetzungen mitbringen:
</p><ul>
<li>Umfassende Kenntnisse im Umgang mit YAML (Projekterfahrung sollte &#252;ber 2-3 Referenzen nachgewiesen werden)</li>
<li>Gute Kenntnisse im Umgang mit dem aktuellen YAML Builder</li>
<li>Interesse/Begeisterung an visuellen Arbeitsmethoden zur Layouterstellung</li>
<li>Ausdauer und Erkundungswillen eines &#8220;unfertigen Produktes&#8221;, denn eine Dokumentation gibt es nicht - aber vieles zu entdecken</li>
<li>Verl&#228;sslichkeit in Bezug auf ehrliches, ausgiebiges Testen und die Bereitschaft, ebenso ausf&#252;hrlich Feedback &#252;ber Schw&#228;chen und St&#228;rken der Applikation weiterzugeben.</li>
<li>Eure Monitoraufl&#246;sung sollte deutlich oberhalb von 1280 Pixeln Breite liegen</li>
<li>Die englische Sprache sollte f&#252;r Euch kein Hindernis sein</li>
<li>Die Testt&#228;tigkeit an die Akzeptanz einer Vertaulichkeitserkl&#228;rung gebunden</li>
</ul>

<h4>Bewerbung f&#252;r den Testzugang</h4><p>
Bewerbungen sendet Ihr bitte per Email an <a href="mailto:office[at]highresolution.info" title="office[at]highresolution.info">office[at]highresolution.info</a> mit dem Betreff &#8220;TT-Alpha&#8221;.&nbsp; Die Testaccounts werden dann ab n&#228;chster Woche verteilt. </p>

<p>Da vermutlich nicht jeder, der sich auf diesen Aufruf meldet mit einem Testaccount versorgt werden kann: bitte nicht b&#246;se sein. Ihr werdet zu einem etwas sp&#228;teren Zeitpunkt mit einem Beta-Account versorgt werden - versprochen.
</p>]]></content>
    </entry>

    <entry>
      <title type="html">YAML 4.0 &#45; Zwischenstand</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/yaml_4_zwischenstand/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1400</id>
      <issued>2011-03-02T15:00:34+00:00</issued>
      <modified>2011-03-02T16:25:35+00:00</modified>
      <summary type="html">Die ersten Hinweise auf den Entwicklungszweig f&#252;r YAML 4.0 habe ich ja bereits im Oktober letzten Jahres gegeben. In dem damaligen Beitrag habe ich allerdings noch nicht wirklich Informationen zur Version 4 gegeben sondern eher &#252;ber die Dinge berichtet, die aus dem 4.0er Zweig in die Version 3.3 vorgezogen wurden. Heute hingegen werde ich ein bisschen aus dem N&#228;hk&#228;stchen plaudern, wo die Reise bei YAML 4 hingehen wird. Und damit gehts auch gleich los ...
 Namespaces
[Status: 85% fertig] Eines der h&#228;ufigsten Quellen f&#252;r Probleme bei der Frontendentwicklung in Verbindung mit Content Management Systemen, speziell bei gr&#246;&#223;eren oder &#252;ber Jahre gewachsenen Projekten, sind Kollisionen von ID&#45; und Klassennamen. Beileibe nicht jedes CMS gestattet die vollst&#228;ndige Kontrolle &#252;ber das ausgelieferte Markup. Wordpress weist beispielsweise dem &amp;lt;body&amp;gt; Element dynamisch eine Vielzahl von CSS&#45;Klassennamen zu, was sich f&#252;r Normalanwender auch kaum unterdr&#252;cken l&#228;sst. JavaScript Widgets wie Slider, Galerien etc. ben&#246;tigen f&#252;r den Zugriff auf ihr Markup sinnvolle IDs und Klassennamen &amp;ndash; gleiches gilt f&#252;r CSS Frameworks.

F&#252;r den Entwickler ist es gleicherma&#223;en wichtig, m&#246;glichst selbsterkl&#228;rende und konsistente Bezeichnungenzu verwenden, um die langfristige Wartbarkeit des Codes zu sicherzustellen. Eing&#228;nglich klingende, kurze Bezeichnungen wie &#8220;wrapper&#8221;, &#8220;post&#8221;, &#8220;page&#8221; usw. haben daher gro&#223;es Konfliktpotential. Auf YAML bezogen kollidiert beispielsweise die von YAML verwendete CSS&#45;Klasse .page mit der Verwendung, die Wordpress f&#252;r die CSS&#45;Klasse &#8220;page&#8221; vorsieht, die es dem  &amp;lt;body&amp;gt; Element standardm&#228;&#223;ig zuweist. Die L&#246;sung hierf&#252;r heisst: Namespaces. 

In YAML 4 werden daher die CSS&#45;Klassen und IDs der Kernbestandteile des Frameworks mit einem Pr&#228;fix versehen werden. Ein einheitlicher Namespace hat zudem den Vorteil, dass er (wir reden schlie&#223;lich bei HTML/CSS von einfachen ASCII&#45;Dateien) bei Bedarf leicht angepasst werden kann.</summary>
      <created>2011-03-02T15:00:34+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject></dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Die ersten Hinweise auf den Entwicklungszweig f&#252;r YAML 4.0 habe ich ja bereits<a href="http://www.highresolution.info/weblog/entry/yaml_33_boxenstop_zur_version_4/" title=" im Oktober letzten Jahres"> im Oktober letzten Jahres</a> gegeben. In dem damaligen Beitrag habe ich allerdings noch nicht wirklich Informationen zur Version 4 gegeben sondern eher &#252;ber die Dinge berichtet, die aus dem 4.0er Zweig in die Version 3.3 vorgezogen wurden. Heute hingegen werde ich ein bisschen aus dem N&#228;hk&#228;stchen plaudern, wo die Reise bei YAML 4 hingehen wird. Und damit gehts auch gleich los ...
</p> <h3>Namespaces</h3><p>
<strong>[Status: 85% fertig]</strong> Eines der h&#228;ufigsten Quellen f&#252;r Probleme bei der Frontendentwicklung in Verbindung mit Content Management Systemen, speziell bei gr&#246;&#223;eren oder &#252;ber Jahre gewachsenen Projekten, sind Kollisionen von ID- und Klassennamen. Beileibe nicht jedes CMS gestattet die vollst&#228;ndige Kontrolle &#252;ber das ausgelieferte Markup. <a href="http://wordpress.org/" title="Wordpress">Wordpress</a> weist beispielsweise dem &lt;body&gt; Element dynamisch eine Vielzahl von CSS-Klassennamen zu, was sich f&#252;r Normalanwender auch kaum unterdr&#252;cken l&#228;sst. JavaScript Widgets wie Slider, Galerien etc. ben&#246;tigen f&#252;r den Zugriff auf ihr Markup sinnvolle IDs und Klassennamen &ndash; gleiches gilt f&#252;r CSS Frameworks.</p>

<p>F&#252;r den Entwickler ist es gleicherma&#223;en wichtig, m&#246;glichst selbsterkl&#228;rende und konsistente Bezeichnungenzu verwenden, um die langfristige Wartbarkeit des Codes zu sicherzustellen. Eing&#228;nglich klingende, kurze Bezeichnungen wie &#8220;wrapper&#8221;, &#8220;post&#8221;, &#8220;page&#8221; usw. haben daher gro&#223;es Konfliktpotential. Auf YAML bezogen kollidiert beispielsweise die von YAML verwendete CSS-Klasse <code>.page</code> mit der Verwendung, die Wordpress f&#252;r die CSS-Klasse &#8220;page&#8221; vorsieht, die es dem  &lt;body&gt; Element standardm&#228;&#223;ig zuweist. Die L&#246;sung hierf&#252;r heisst: <em><a href="http://de.wikipedia.org/wiki/Namensraum" title="Namespaces">Namespaces</a></em>. </p>

<p>In YAML 4 werden daher die CSS-Klassen und IDs der Kernbestandteile des Frameworks mit einem Pr&#228;fix versehen werden. Ein einheitlicher Namespace hat zudem den Vorteil, dass er (wir reden schlie&#223;lich bei HTML/CSS von einfachen ASCII-Dateien) bei Bedarf leicht angepasst werden kann. 
</p> <h3>Grids sind Grids sind Grids</h3><p>
<strong>[Status: 100% fertig]</strong> Es ist immer eine gute Idee, Dinge bei ihren richtigen Namen zu nennen. Umschreibungen f&#252;hren nur zu Missverst&#228;ndnissen. Nun, vor mehr als 4 Jahren erhielt YAML seine &#8220;<a href="http://www.yaml.de/de/dokumentation/anwendung/subtemplates.html" title="Subtemplates">Subtemplates</a>&#8221;. Damals war YAML nicht viel mehr als eine universelle Vorlage f&#252;r flexible 2- und 3-Spalten-Layouts und die &#8220;Subtemplates&#8221; kamen dem vielfach an mich herangetragenen Wunsch nach, auch innerhalb der Spalten eine einfache M&#246;glichkeit zur horizontalen Gliederung von Inhaltsbl&#246;cken zu haben. </p>

<p>2006 war das Thema <a href="http://www.tripwiremagazine.com/2009/06/45-css-grid-systems-layout-generators-and-tutorials-that-every-designer-should-know.html" title="Grids"><em>Grids</em></a> noch ein volles Jahr von seinem internationalen Hype entfernt und so gab es mit der damals gew&#228;hlten Bezeichnung keine Schwierigkeiten. Doch mit den immer popul&#228;rer werdenen Grid-Layouts wurde auch klar, dass der Name &#8220;Subtemplates&#8221; alles andere als gl&#252;cklich gew&#228;hlt war, denn &ndash; und dass l&#228;sst sich in zahllosen internationalen Blogbeitr&#228;gen nachlesen &ndash; die Grid-Komponente wird nur selten auf den ersten Blick wahrgenommen, obwohl die Subtemplates bis heute eine der robustesten, mir bekannten Implementationen f&#252;r flexible Grids sind. Aus diesem Grund wird es in YAML 4 eine Umbenennung der Klassennamen geben, um zuk&#252;nfig Missverst&#228;ndnisse zu vermeiden: Aus der Bezeichnung &#8220;subtemplates&#8221; wird deshalb &#8220;grids&#8221;. </p>

<p>Auch in technischer Hinsicht wird das Grid-Modul von YAML 4 weiterentwickelt. Zwar war es schon bisher ausgesprochen robust und bot &#252;ber die simple Zusatzklasse <code>.equalize</code> sogar die Erstellung gleichhoher Container auf Basis einer reinen CSS-Implementation an. Doch auf der anderen Seite war die &#196;nderung/Erweiterung der im Framework-Kern mitgelieferten Raumaufteilungen f&#252;r Frameworkanwender nicht gerade eing&#228;ngig und einfach. Mit dem Grid-Modul von YAML 4 wird dieses Problem verschwinden. Indiviudelle Grids k&#246;nnen dann mit einem CSS-Einzeiler erstellt werden, ohne dass die oben beschriebene Funktionalit&#228;t eingeschr&#228;nkt wird. Ein &#8220;Nachbau&#8221; eines pixelgenauen Gridlayouts mit YAML wird dann mit wenigen zus&#228;tzlichen Zeilen CSS zum Kinderspiel. Die aus meiner Sicht seit je her unsinnige Fragmentierung Grid-basierter Frameworkprojekte anhand der Basisbreite des Grids (<a href="http://www.blueprintcss.org/" title="950 Pixel">950 Pixel</a>, <a href="http://960.gs/" title="960 Pixel">960 Pixel</a>,<a href="http://www.webdesignerwall.com/trends/960-grid-system-is-getting-old/" title=" 978 Pixel"> 978 Pixel</a>, <a href="http://cssgrid.net/" title="1140 Pixel">1140 Pixel</a>) ist damit f&#252;r YAML-Anwender endg&#252;ltig vom Tisch. Flexible, wie pixelgenaue Grids jedes beliebigen Rasters lassen sich mit weitgehend identischem Markup sehr einfach umsetzen.</p>

<h3>Formulare, &#252;berall Formulare ...</h3><p>
<strong>[Status: 75% fertig]</strong> Die &#252;berwiegende Mehrzahl von Webseiten w&#252;rde ohne Formulare gar nicht funktionieren. Wer kommt heute noch ohne mindestens ein Such- und Kontaktformular aus? Wenn Formulare aber so essentiell sind, warum sind sie dann noch kein Bestandteil des YAML-Cores? Gute Frage!</p>

<p>In YAML 4 werden die layoutunabh&#228;ngigen Bestandteile des <a href="http://www.yaml.de/de/dokumentation/css-bausteine/formularbaukasten.html" title="Formularbaukastens">Formularbaukastens</a> fest in den YAML-Core integriert. Mit dieser Umstellung geht auch eine leichtere Handhabung dieses Bausteins her, denn die Gestaltung der Formulare ist nun mehr oder weniger ein echtes Theming - die Austauschbarkeit bzw. Wiederverwendbarkeit individuell gestalteter Formulare wird damit deutlich einfacher.</p>

<h3>API-Doku statt Lehrbuch</h3><p>
<strong>[Status: 5% fertig]</strong> Die Dokumentation ist seit vielen Jahren eine meiner gr&#246;&#223;ten Baustellen. Sie ist &#252;ber die Jahre kontinuierlich gewachsen und hat mit > 130 PDF-Seiten eine Gr&#246;&#223;e erreicht, die eher einem stetig aktualisiertem Online-Buch &#228;hnelt als einer Dokumentation des Frameworks. Diese ausf&#252;hrliche Art der Projektbeschreibung ist f&#252;r Neulinge zum einen sehr hilfreich, weil die Funktionsweise der einzelnen Bausteine bis ins Detail beschrieben ist, zu einem Gro&#223;teil auch die Fallstricke der Problembrowser. Zum anderen ist es f&#252;r jeden Neueinsteiger aber auch extrem m&#252;hsam, diese Informationsmengen zu durchforsten, wenn man sich mit dem System vertraut machen will. Zum dritten erzeugt der hohe Detailgrad (man denke auch an die Zweisprachigkeit und die parallele Verf&#252;gbarkeit online und als herunterladbares PDF) einen enormen Pflegeaufwand. Dieser ist mit den letzten Versionen immer mehr auf ein unverh&#228;ltnism&#228;&#223;ig hohes Ma&#223; angestiegen und ich muss hier gegensteuern.</p>

<p>Ich plane daher, die aktuelle Doku abzul&#246;sen durch eine Art Cheatsheet oder eine Kurzdoku, die nurmehr die Eigenschaften und Anwendung der einzelnen Bausteine des Frameworks beschreibt (also eine Art API-Dokumentation), jedoch nicht mehr das <em>warum</em> f&#252;r jede einzelne CSS-Eigenschaft dokumentiert. Die bisherige Dokumentation wird als Entwicklerdokumentation in wahrscheinllich leicht verk&#252;rzter Form erhalten bleiben, jedoch nicht mehr mit jedem Pointrelease aktualisiert werden.</p>

<h3>Projektstruktur</h3><p>
<strong>[Status: 25% fertig]</strong> Eines der gr&#246;&#223;ten H&#252;rden f&#252;r Neueinsteiger war und ist die aktuelle Struktur des YAML-Downloadpakets. An sich ist das keine neue Information, den derartige Diskussionen gab es schon fr&#252;her &ndash; damals mit der Konsequenz, dass ich das &#8220;<em>Simple Project</em>&#8221; eingef&#252;hrt habe, welches auch die Basis f&#252;r die Arbeit mit dem YAML Builder liefert und seither f&#252;r den Einstieg empfehle. Leider hat das bisher nicht so funktioniert wie gedacht. Deshalb wird es auch hier eine Umstellung geben.</p>

<p>Das Downloadpaket wird zuk&#252;nftig mehr oder weniger dem entsprechen, was heute das <em>Simple Project</em> darstellt. Mit diesem Paket kann sofort gearbeitet werden, Pfadanpassungen sind nicht erforderlich. Die zahlreichen Layoutbeispiele sollen zuk&#252;nftig in einem gesonderten Zip-Paket zum Download bereitgestellt werden. Diese Trennung ist schon deshalb sinnvoll, da in der Vergangenheit kleine Fehlerkorrekturen in den Layoutbeispielen ein neues Downloadpaket des Frameworks erzwungen haben. </p>

<p>Die Ordner- und Dateistruktur innerhalb des YAML-Ordners bleiben hingegen unangetastet, denn sie haben sich bew&#228;hrt. </p>

<p>Dar&#252;ber hinaus m&#246;chte ich auch die Beispiele etwas entschlacken. Dabei steht nicht im Vordergrund, zwingend deren Anzahl zu reduzieren aber doch das eine oder ander sinnvoll zusammenzufassen. Daf&#252;r sollen einige neue komplexere Beispiele hinzukommen, die u.a. den Umgang mit Media Queries zur Anpassung an verschiedenste Ausgabemedien zeigen. Auch hier ist YAML mit seinem flexiblen Ansatz extrem wandlungs- und anpssungsf&#228;hig.</p>

<h3>Und wann geht&#8217;s los?</h3><p>
Anhand der Statuswerte l&#228;sst sich ja zum Teil absch&#228;tzen, wie weit die Arbeiten in den einzelnen Bereichen fortgeschritten sind. Was sich indess jetzt schon sagen l&#228;sst ist, dass mir momentan vorschwebt, der Version 4.0 eine &#246;ffentliche Betaphase zu g&#246;nnen und diese ist nicht mehr allzu weit entfernt. </p>

<p>Gute, ausgereifte Frameworks leben von ihren klaren Strukturen. Nur gro&#223;e Versionsspr&#252;nge wie der von v3.x auf v4.0 erlauben es, gr&#246;&#223;ere &#196;nderungen/Weiterentwicklungen in einem solchen Projekt vorzunehmen und aufgrund der wunderbar gro&#223;en Nutzerbasis m&#246;chte ich an dieser Stelle mit einer &#246;ffentlichen Betaphase die T&#252;r ausdr&#252;cklich offen stehen lassen f&#252;r weitere Vorschl&#228;ge aus der Community, die durchaus noch in die Version 4.0 einflie&#223;en k&#246;nnen.</p>

<p>In diesem Sinne, 2011 wird spannend ...
</p>]]></content>
    </entry>

    <entry>
      <title type="html">JavaScript und die Pointer</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/javascript_und_die_pointer/" /> 
      <id>tag:highresolution.info,2011:weblog/11.1399</id>
      <issued>2011-01-28T10:47:25+00:00</issued>
      <modified>2011-01-28T13:33:26+00:00</modified>
      <summary type="html">Ich bin ganz sicher nicht der klassische Programmierertyp und so lerne ich Programmiersprachen &amp;ndash; im konkreten Fall JavaScript &amp;ndash;, in dem ich mich herausfordernden Projekten stelle, um dabei Neues zu lernen. Leider ist dieses &#8220;Neue&#8221; nicht immer ganz logisch und f&#252;hrt schonmal dazu, dass sich Stirn und Tischplatte unaufhaltsam anzuziehen scheinen. So auch das Thema Pointer in JavaScript, welches mir gestern Abend aufgesto&#223;en ist.

 Wenn man ein wenig Erfahrung aus anderen Programmiersprachen wie C mitbringt, dann ist einem der Unterschied zwischen einem Objekt und dem Pointer auf ein Objekt bekannt. Das entscheidende dabei: Bei C kann man sehr einfach festlegen, ob man einer Variable eine Objektkopie zuweist oder nur einen Pointer auf das Originalobjekt erzeugt. Bei JavaScript sieht das etwas anders aus.

Obgleich in JavaScript so ziemlich alles als Objekt betrachtet werden kann, so gibt es doch feine aber entscheidene Unterschiede, wie diese intern behandelt werden. Folgender Code machte mich stutzig:

var layoutCSS = {
    &#39;width&#39;: &#39;auto&#39;,
    &#39;min&#45;width&#39;: &#39;720px&#39;,
    &#39;max&#45;width&#39;: &#39;80em&#39;
};
var minSettings = layoutCSS;
minSettings[&#39;max&#45;width&#39;] = &#39;none&#39;;
console.log(minSettings); //&quot;none&quot;
console.log(layoutCSS); //&quot;none&quot;
 
Wie man sieht, wird in diesem Beispiel nicht etwa eine Kopie des Objekts layoutCSS in minSettings angelegt, sondern lediglich ein Pointer auf das Originalobjekt. In der Konsequenz &#228;ndert sich der Inhalt des OriginalObjekts layoutCSS bei Zuweisungen an minWidth. Gut zu wissen, denn in JavaScript ist dieses Verhalten auf Arrays und Objekte begrenzt. Strings hingegen werden kopiert, obwohl sie intern ebenfalls wie Objekte behandelt werden. Aufkl&#228;rung dar&#252;ber, wie JavaScript mit Pointern umgeht, liefert der Artikel Understanding Pointers in JavaScript.

Soweit so nervig gew&#246;hnungsbed&#252;rftig. Wie aber kommt man jetzt zu seiner Kopie bzw. Clone eines Arrays oder eines Objekts? Leider ist es auch hier so &amp;ndash; &#228;hnlich wie beim Versuch, ein assoziatives Array zu sortieren &amp;ndash; dass JavaScript den Programmierer bei dieser Frage weitgehend im Stich l&#228;st. Handarbeit ist demnach angesagt. Einen ersten L&#246;sungsansatz liefert der Artikel von Brian Huisman &quot;How to copy arrays and objects in Javascript&quot;, der eine .clone() Methode einf&#252;hrt:


Object.prototype.clone = function() {
  var newObj = (this instanceof Array) ? [] : {};
  for (item in this) {
    if (item == &#39;clone&#39;) continue;
    if (this[item] &amp;&amp; typeof this[item] == &quot;object&quot;) {
      newObj[item] = this[item].clone();
    } else newObj[item] = this[item]
  } return newObj;
};

Speziell f&#252;r jQuery&#45;Nutzer gibts von John Resig h&#246;chstpers&#246;nlich noch einen k&#252;rzeren Vorschlag &#252;ber die jQuery.extend():

// Shallow copy
var newObject = jQuery.extend({}, oldObject);

// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);

Zwar finde ich pers&#246;nlich diese Inkonsistenz bei JavaScript etwas nervig, dass man selbst nicht &#252;ber Kopie oder Pointer w&#228;hlen kann, aber was soll&#39;s. Wenigstens gibt es halbwegs einfache L&#246;sungswege aus diesem Dilemma. An dieser Stelle ein ganz dickes Dankesch&#246;n an das kalifornische JavaScript&#45;Lexikon Dirk Ginader, der mir mit diesen Links den Abend gerettet hat.</summary>
      <created>2011-01-28T10:47:25+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>JavaScript</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Ich bin ganz sicher nicht der klassische Programmierertyp und so lerne ich Programmiersprachen &ndash; im konkreten Fall JavaScript &ndash;, in dem ich mich herausfordernden Projekten stelle, um dabei Neues zu lernen. Leider ist dieses &#8220;Neue&#8221; nicht immer ganz logisch und f&#252;hrt schonmal dazu, dass sich Stirn und Tischplatte unaufhaltsam anzuziehen scheinen. So auch das Thema Pointer in JavaScript, welches mir gestern Abend aufgesto&#223;en ist.</p>

 <p>Wenn man ein wenig Erfahrung aus anderen Programmiersprachen wie C mitbringt, dann ist einem der Unterschied zwischen einem Objekt und dem Pointer auf ein Objekt bekannt. Das entscheidende dabei: Bei C kann man sehr einfach festlegen, ob man einer Variable eine Objektkopie zuweist oder nur einen Pointer auf das Originalobjekt erzeugt. Bei JavaScript sieht das etwas anders aus.</p>

<p>Obgleich in JavaScript so ziemlich alles als Objekt betrachtet werden kann, so gibt es doch feine aber entscheidene Unterschiede, wie diese intern behandelt werden. Folgender Code machte mich stutzig:</p>

<pre name="code" class="javascript:nocontrols">var layoutCSS = {
    'width': 'auto',
    'min-width': '720px',
    'max-width': '80em'
};
var minSettings = layoutCSS;
minSettings['max-width'] = 'none';
console.log(minSettings); //"none"
console.log(layoutCSS); //"none"</pre>
 
<p>Wie man sieht, wird in diesem Beispiel nicht etwa eine Kopie des Objekts <code>layoutCSS</code> in <code>minSettings</code> angelegt, sondern lediglich ein Pointer auf das Originalobjekt. In der Konsequenz &#228;ndert sich der Inhalt des OriginalObjekts <code>layoutCSS</code> bei Zuweisungen an <code>minWidth</code>. Gut zu wissen, denn in JavaScript ist dieses Verhalten auf Arrays und Objekte begrenzt. Strings hingegen werden kopiert, obwohl sie intern ebenfalls wie Objekte behandelt werden. Aufkl&#228;rung dar&#252;ber, wie JavaScript mit Pointern umgeht, liefert der Artikel <a href="http://www.thetruetribe.com/2010/01/understanding-pointers-in-javascript/" title="Understanding Pointers in JavaScript">Understanding Pointers in JavaScript</a>.</p>

<p>Soweit so <del>nervig</del> gew&#246;hnungsbed&#252;rftig. Wie aber kommt man jetzt zu seiner Kopie bzw. Clone eines Arrays oder eines Objekts? Leider ist es auch hier so &ndash; &#228;hnlich wie beim Versuch, ein assoziatives Array zu sortieren &ndash; dass JavaScript den Programmierer bei dieser Frage weitgehend im Stich l&#228;st. Handarbeit ist demnach angesagt. Einen ersten L&#246;sungsansatz liefert der Artikel von Brian Huisman "<a href="http://my.opera.com/GreyWyvern/blog/show.dml/1725165" title="How to copy arrays and objects in Javascript">How to copy arrays and objects in Javascript</a>", der eine <code>.clone()</code> Methode einf&#252;hrt:</p>

<pre name="code" class="javascript:nocontrols">
Object.prototype.clone = function() {
  var newObj = (this instanceof Array) ? [] : {};
  for (item in this) {
    if (item == 'clone') continue;
    if (this[item] && typeof this[item] == "object") {
      newObj[item] = this[item].clone();
    } else newObj[item] = this[item]
  } return newObj;
};</pre>

<p>Speziell f&#252;r <a href="http://www.jquery.com" title="jQuery">jQuery</a>-Nutzer gibts <a href="http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-a-javascript-object" title="von John Resig h&#246;chstpers&#246;nlich">von John Resig h&#246;chstpers&#246;nlich</a> noch einen k&#252;rzeren Vorschlag &#252;ber die <code>jQuery.extend()</code>:</p>

<pre name="code" class="javascript:nocontrols">// Shallow copy
var newObject = jQuery.extend({}, oldObject);

// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);</pre>

<p>Zwar finde ich pers&#246;nlich diese Inkonsistenz bei JavaScript etwas nervig, dass man selbst nicht &#252;ber Kopie oder Pointer w&#228;hlen kann, aber was soll's. Wenigstens gibt es halbwegs einfache L&#246;sungswege aus diesem Dilemma. An dieser Stelle ein ganz dickes Dankesch&#246;n an das kalifornische JavaScript-Lexikon <a href="http://blog.ginader.de/" title="Dirk Ginader">Dirk Ginader</a>, der mir mit diesen Links den Abend gerettet hat.</p> ]]></content>
    </entry>

    <entry>
      <title type="html">Die Adventskalender kommen</title>
      <link rel="alternate" type="text/html" href="http://www.highresolution.info/weblog/entry/die_adventskalender_kommen/" /> 
      <id>tag:highresolution.info,2010:weblog/11.1398</id>
      <issued>2010-12-01T09:43:42+00:00</issued>
      <modified>2010-12-02T12:10:43+00:00</modified>
      <summary type="html">Seit einiger Zeit ist es in Bloggerland Tradition, den liebgewonnenen, schokoladengetriebenen T&#252;rchen&#45;Wahn der Vorweihnachtszeit in leicht abgewandelter Form (Pralinen zu Blogbeitr&#228;gen) auch im Internetz aufleben zu lassen. Und so finden sich jedes Jahr an verschiedenen Stellen Autoren zusammen, um ihren Lesern mit 24 Blogposts den einen oder anderen Tipp f&#252;r die t&#228;gliche Arbeit mit auf den Weg zu geben. Und da es jedes Jahr mehr werden, hier eine kleine &#45; sicherlich unvollst&#228;ndige &#45; Liste:
 Webkrauts Adventdskalender 2010Der Adventskalender der Webkrauts erscheint bereits seit 2005 und widmet sich in jedem Jahr einem &#252;bergeordneten Thema. In diesem Jahr sind dies die &#8220;Kunden&#8221;24ways 2010Was der Webkrauts&#45;Kalender im deutschsprachigen Raum ist, ist 24ways auf der gro&#223;en internationalen B&#252;hne. Das who&#45;is&#45;who der Szene trifft sich zu 24 abwechslungsreichen Beitr&#228;gen rund um das Thema modernes WebdesignWPEngeneers &#45; Advent CalendarMeines Wissen zum zweiten Mal starten die Programmierprofis ihren Adventskalender rund um das Thema &#8220;Wordpress&#8221;Maddesigns CSS3&#45;AdventskalenderSven Wolfersmann ist ein ganz harter Bursche und zieht dieses Jahr einen Adventskalender zum Thema CSS3 fast alleine durch. Ich bin gespannt ...HTML5&#45;Demos&#45;AdventskalenderWie es der Name schon sagt ... it&#8217;s all about HTML5

Na denn, f&#252;r Lesestoff ist gesorgt ...</summary>
      <created>2010-12-01T09:43:42+00:00</created>
		<author>
		  <name>Dirk Jesse</name>
		  <url>http://www.highresolution.info</url>		</author>
      <dc:subject>Tutorials, Webdesign</dc:subject>
      <content type="text/html" mode="escaped" xml:lang="en-US"><![CDATA[ <p>Seit einiger Zeit ist es in Bloggerland Tradition, den liebgewonnenen, schokoladengetriebenen T&#252;rchen-Wahn der Vorweihnachtszeit in leicht abgewandelter Form (Pralinen zu Blogbeitr&#228;gen) auch im Internetz aufleben zu lassen. Und so finden sich jedes Jahr an verschiedenen Stellen Autoren zusammen, um ihren Lesern mit 24 Blogposts den einen oder anderen Tipp f&#252;r die t&#228;gliche Arbeit mit auf den Weg zu geben. Und da es jedes Jahr mehr werden, hier eine kleine - sicherlich unvollst&#228;ndige - Liste:
</p> <dl><dt><a href="http://www.webkrauts.de/category/adventskalender/adventskalender-2010/" title="Webkrauts Adventdskalender 2010">Webkrauts Adventdskalender 2010</a></dt><dd>Der Adventskalender der Webkrauts erscheint bereits seit 2005 und widmet sich in jedem Jahr einem &#252;bergeordneten Thema. In diesem Jahr sind dies die &#8220;Kunden&#8221;</dd><dt><a href="http://24ways.org/2010" title="24ways 2010">24ways 2010</a></dt><dd>Was der Webkrauts-Kalender im deutschsprachigen Raum ist, ist 24ways auf der gro&#223;en internationalen B&#252;hne. Das who-is-who der Szene trifft sich zu 24 abwechslungsreichen Beitr&#228;gen rund um das Thema modernes Webdesign</dd><dt><a href="http://wpengineer.com/2101/advent-calendar-%E2%80%93-24-days-tips-and-tricks-each-day/" title="WPEngeneers - Advent Calendar">WPEngeneers - Advent Calendar</a></dt><dd>Meines Wissen zum zweiten Mal starten die Programmierprofis ihren Adventskalender rund um das Thema &#8220;Wordpress&#8221;</dd><dt><a href="http://maddesigns.de/css3-adventskalender-buchverlosung-286.html" title="Maddesigns CSS3-Adventskalender">Maddesigns CSS3-Adventskalender</a></dt><dd>Sven Wolfersmann ist ein ganz harter Bursche und zieht dieses Jahr einen Adventskalender zum Thema CSS3 fast alleine durch. Ich bin gespannt ...</dd><dt><a href="http://html5advent.com/" title="HTML5-Demos-Adventskalender">HTML5-Demos-Adventskalender</a></dt><dd>Wie es der Name schon sagt ... it&#8217;s all about HTML5</dd></dl>

<p>Na denn, f&#252;r Lesestoff ist gesorgt ...
</p> ]]></content>
    </entry>


</feed>
