<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codecandies &#187; development</title>
	<atom:link href="http://codecandies.de/tag/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://codecandies.de</link>
	<description>Das Weblog von Nico Brünjes.</description>
	<lastBuildDate>Sat, 05 May 2012 07:17:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Offline</title>
		<link>http://codecandies.de/2012/03/20/offline/</link>
		<comments>http://codecandies.de/2012/03/20/offline/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 18:37:33 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[considered harmful]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=5012</guid>
		<description><![CDATA[Es ist nicht alles Gold, was sich HTML5 nennt. DOM Storage, Application Cache, Datenbanken, beim Storage geht es teilweise noch sehr holprig zu. Die Grenze f&#252;r Offlinedatenspeicherung liegt doch noch sehr sehr sehr niedrig…]]></description>
			<content:encoded><![CDATA[<p><img src="http://codecandies.de/wp-content/uploads/2011/03/folien_boot-686x485.png" alt="" title="Screenshot" width="500" height="353" class="alignnone size-medium wp-image-3605" /></p>
<p>Als Alternative zur <em>Apptisierung</em> des mobilen Internets wird immer wieder die Webapp genannt. Ebenso oft wird betont, dass native Apps den Webapps in UI und Features &#252;berlegen sind. Die Browser holen jedoch langsam auf, z.B. mit der M&#246;glichkeit Geodaten zu lesen, oder auch Zugriff auf eine im Smartphone integrierte Kamera zu erhalten. Und dann ist das noch das Feature der <em>offlinef&#228;higkeit</em>. Im folgenden will ich einige Techniken dazu kurz anreissen, zum einen um (mir) einen &#220;berblick zu verschaffen, zum anderen um feststellen zu k&#246;nnen, wie weit wir denn technologisch heute sind, in Sachen <em>offline</em>. Zum &#252;ber den Onlinezustand hinaus gehenden Speichern von Daten stehen im wesentlichen drei Techniken zur Verf&#252;gung.</p>
<p><span id="more-5012"></span></p>
<h3>DOM Storage</h3>
<p>Als <a href="https://developer.mozilla.org/en/DOM/Storage">DOM Storage</a> bezeichnet man einen kleinen, leicht zug&#228;nglichen Speicherbereich, auf den vom Browser &#252;ber eine sehr einfaches Interface zugegriffen werden kann: es werden jeweils Key-Value-Paare gespeichert. Das DOM Storage kommt in zwei Ausf&#252;hrungen: als Localstorage ist der Speicher persistent, als Sessionstorage h&#228;lt er nur bis zum Sessionende.</p>
<p>DOM Storage besticht vor allem durch die Einfachheit mit der man ihn nutzen kann und ist zudem weit verbreitet. Deswegen wird er wohl vielerorts als das Schweizer Messer der Offlineapplikationen angespriesen; ja, das w&#228;re ja zu sch&#246;n… die Wahrheit ist: <a href="http://hacks.mozilla.org/2012/03/there-is-no-simple-solution-for-local-storage/">DOM Storage is considered harmful</a>, vor allem wegen seiner grausigen Performance. Zudem ist die Menge an Speicher, die man damit zur Verf&#252;gung bekommt ziemlich klein. Unter iOS stehen wohl nicht mehr als 5 MB zur Verf&#252;gung, da kann man eh&#8217; keine gro&#223;en Spr&#252;nge machen, auch wenn Androiden und Desktopbrowser mehr Speicher zu lassen.</p>
<h3>Application Cache</h3>
<p>Die Mutter der Offlinefunktionalit&#228;ten d&#252;rfte der <a href="http://diveintohtml5.info/offline.html">Application Cache</a> sein. Hier steuert man unter Zuhilfenahme einer Manifest-Datei, welche Dateien der Browser f&#252;r die eigene Webapp in den Application Cache legt. Der Clou dabei ist, dass im Offlinezustand diese gecachten Dateien v&#246;llig transparent zur Verf&#252;gung stehen. Ohne die Meldung »Ey Alter, geh&#8217; mal online« werden Bilder aus dem Cache geladen und Scripts interpretiert. So sollte es jedenfalls sein. Hier zeigt sich der <em>Browser called Browser</em> (aka. Android-Webkit) aus Android 3.2 etwas unwillig und beschwert sich per Popup, das man ja nun offline sei, nur um danach alles wie gew&#252;nscht zu verarbeiten.</p>
<p>F&#252;r den Application Cache gibt es auch etwas <a href="https://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/OfflineApplicationCache/OfflineApplicationCache.html#//apple_ref/doc/uid/TP40007256-CH7-SW5">Javascript-Interface</a> mit dem man bspw. den Cache leeren kann. Auch gut geeignet zum Debuggen, denn wegen der oben erw&#228;hnten Transparenz, sind Fehler manchmal etwas schwierig zu finden. Hilfreich: <a href="http://manifest-validator.com/">hier kann man seine Manifest-Datei validieren lassen</a>. Wermutstropfen Nummer eins: <a href="http://techblog.viewbook.com/2011/02/mobile-safari-offline-application-cache-limit/">auch der AppCache wird durch das st&#246;rrische iOS auf einer Untergrenze von 5 MB festgenagelt</a>.</p>
<h3>Browserdatenbanken</h3>
<p>Wer bis hier mit den vorgeschlagenen M&#246;glichkeiten zurecht kommt, oder mit anderen Worten: wer nicht mehr als 5 MB offline zu speichern hat, der hat Gl&#252;ck gehabt, denn er ist nicht auf die DB-Funktionalit&#228;ten der modernen Browser angewiesen. Diese stellen zwar wesentlich mehr Speicherplatz zur Verf&#252;gung, selbst im mobile Safari kann man, nachdem der Nutzer zugestimmt hat, bis zu 50 MB Daten in Datenbanken speichern und offline wieder abrufen. Trotzdem steht man derzeit vor einem Schlachtfeld.</p>
<p>Auf der einen Seite steht WebSQL, dass zwar in vielen Browsern zur Verf&#252;gung steht (Chrome, Opera, Safari, Android Browser…), aber vom W3C letztendlich <a href="http://www.w3.org/TR/webdatabase/">verschm&#228;ht</a> wurde, weil alle Browserhersteller das gleiche Backend nutzten. Stattdessen arbeitet man nun an <a href="https://developer.mozilla.org/en/IndexedDB">IndexedDB</a>. Das w&#228;re sicherlich eine genauso gute L&#246;sung, ist aber zumindest zum heutigen Zeitpunkt <a href="http://caniuse.com/#feat=indexeddb">nicht gerade verbreitet</a>: Firefox kommt seit Version 4 damit, Chrome (ab 12) kann beides, IE 10 <del>wird es haben</del> <ins><a href="http://blogs.msdn.com/b/ie/archive/2012/03/21/indexeddb-updates-for-ie10-and-metro-style-apps.aspx">hat es</a></ins>, eines Tages. Der neue Chrome f&#252;r Android kommt ebenfalls mit IndexedDB. Momentaner Stand hier ist allerdings, dass sich die Implementierungen doch noch sehr stark unterscheiden, zwischen den Browsern, aber vor allem auch von einer Browserversion zur n&#228;chsten, die ja heutzutage praktisch w&#246;chentlich kommen…</p>
<p>Da muss man sich dann nat&#252;rlich fragen, ab wann sich der Aufwand lohnt, denn um eine Browser-Offline-Datenbank-Anwendung zu schreiben, braucht man schon ein paar ausgewachsene Abstraktionsstufen, um die Daten in allen Browsern ordentlich wegzuschreiben und auch wieder zu finden…</p>
<h3>Ein Fazit</h3>
<p>Es ist nicht alles Gold, was sich HTML5 nennt. Beim Storage geht es jedenfalls, vor allem bei den Datenbanken noch sehr holprig zu. Somit liegt die Grenze f&#252;r Offlinedatenspeicherung doch sehr sehr sehr niedrig. Definiert wird diese Untergrenze regelm&#228;&#223;ig von den iOS-Ger&#228;ten, man k&#246;nnte Apple verd&#228;chtigen, den Webapp-Entwicklern Steine in den Weg legen zu wollen, um seine liebgewonnene App-Welt zu sch&#252;tzen, aber andererseits, man will ja auch keine Verschw&#246;rungstheorien verbreiten. ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2012/03/20/offline/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Bookmarklet: iPad view source]]></title>
		<link><![CDATA[http://www.ravelrumba.com/blog/ipad-view-source-bookmarklet/]]></link>
		<comments>http://codecandies.de/2012/02/01/bookmarklet-ipad-view-source/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 11:45:10 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ipad]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=4704</guid>
		<description><![CDATA[Kleines Bookmarklet zum Anschauen des HTML-Sourcecodes auf dem iPad. Das komplizierteste darin ist noch die Installation von Bookmarklets. Sehr sch&#246;n…<p><a href="http://codecandies.de/2012/02/01/bookmarklet-ipad-view-source/" rel="bookmark" title="Permanent link to 'Bookmarklet: iPad view source'" class="glyph">→</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Kleines Bookmarklet zum Anschauen des HTML-Sourcecodes auf dem iPad. Das komplizierteste daran ist noch die Installation von Bookmarklets. Sehr sch&#246;n…</p>
<p>Via <a href="https://twitter.com/#!/datenkind/status/164664877783330816">@datenkind</a>.</p>
<p><a href="http://codecandies.de/2012/02/01/bookmarklet-ipad-view-source/" rel="bookmark" title="Permanent link to 'Bookmarklet: iPad view source'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2012/02/01/bookmarklet-ipad-view-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Media Queries und Bilder</title>
		<link>http://codecandies.de/2012/01/25/media-queries-und-bilder/</link>
		<comments>http://codecandies.de/2012/01/25/media-queries-und-bilder/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 15:26:54 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=4617</guid>
		<description><![CDATA[Nur f&#252;r die Akten, eine Art, unterschiedlich gro&#223;e Bilder in den Content zu bekommen…]]></description>
			<content:encoded><![CDATA[<p>Nur f&#252;r die Akten, eine Art, unterschiedlich gro&#223;e Bilder in den Content zu bekommen…</p>
<p><a href="http://nicobruenjes.de/demos/responsive_images/">Testseite (Fenster fr&#246;hlich gro&#223; und klein ziehen)</a>.</p>
<p><span id="more-4617"></span></p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;H1 Test&lt;/title&gt;
		&lt;style type=&quot;text/css&quot;&gt;
		body {
			min-height: 500px;
		}
			@media screen and (min-width: 680px) and (max-width: 1024px) {
				h1::before {
					content: url('img/freude_680.jpg');
					display: block;
				}
			}
			@media screen and (min-width: 1024px) {
				h1::before {
					content: url('img/freude.jpg');
					display: block;
				}
			}

		&lt;/style&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;Meine tolle H1&lt;/h1&gt;
		&lt;p&gt;Lebowski ipsum vee vant zat money, Lebowski. Dolor sit amet, consectetur adipiscing elit praesent ac magna justo. I did not watch my buddies die face down in the mud so that this fucking strumpet. Pellentesque ac lectus quis elit blandit fringilla a ut turpis. Praesent felis ligula, malesuada suscipit malesuada non, ultrices non urna. It's a complicated case, Maude. Lotta ins. Lotta outs. And a lotta strands to keep in my head, man.&lt;/p&gt;

&lt;p&gt;I got information—new shit has come to light and—shit, man! She kidnapped herself! Sed orci ipsum, placerat id condimentum. Rutrum, rhoncus ac lorem aliquam placerat. You got the wrong guy. I'm the Dude, man. My dirty undies. Laundry, Dude. The whites. Posuere neque, at dignissim magna ullamcorper. In aliquam sagittis massa ac tortor. I've had a rough night, and I hate the fucking Eagles, man.&lt;/p&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Getestet gerade nur in Chrome. Kommt von <a href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-January/034490.html">hier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2012/01/25/media-queries-und-bilder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototyp</title>
		<link>http://codecandies.de/2011/07/13/prototyp/</link>
		<comments>http://codecandies.de/2011/07/13/prototyp/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 22:09:29 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3853</guid>
		<description><![CDATA[Ein Prototyp (altgr. protos ,der Erste‘ und typos ,Urbild, Vorbild‘) stellt in der Technik ein f&#252;r die jeweiligen Zwecke funktionsf&#228;higes,…]]></description>
			<content:encoded><![CDATA[<blockquote cite="http://de.wikipedia.org/wiki/Prototyp_(Technik)"><p>Ein Prototyp (altgr. protos ,der Erste‘ und typos ,Urbild, Vorbild‘) stellt in der Technik ein f&#252;r die jeweiligen Zwecke funktionsf&#228;higes, oft aber auch vereinfachtes Versuchsmodell eines geplanten Produktes oder Bauteils dar. Es kann dabei nur rein &#228;u&#223;erlich oder auch technisch dem Endprodukt entsprechen.</p>
 <p class="citesource"><cite><a href="http://de.wikipedia.org/wiki/Prototyp_(Technik)">de.wikipedia.org</a></cite></p></blockquote>
<p>Wenn der Prototyp das Licht der Welt erblickt, dann hat es &#8220;Klick&#8221; gemacht, dann ist das Team aufgestanden vom Konzepttisch und hin&#252;ber gegangen an die Werkbank. Und wenn schon nach kurzer Zeit erste Ergebnisse zu sehen sind—Sachen die sich bewegen, auf die man klicken kann—dann weiss man, dass es nun losgeht, das jetzt etwas gebaut wird, an dem man bald Freude haben wird. Der erste Schritt ist getan. Fehlen nur noch 99%.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2011/07/13/prototyp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hinter dem mobilen Proxy</title>
		<link>http://codecandies.de/2011/01/20/hinter-dem-mobilen-proxy/</link>
		<comments>http://codecandies.de/2011/01/20/hinter-dem-mobilen-proxy/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 10:12:04 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3399</guid>
		<description><![CDATA[Ob das mobile Web nun Spass macht oder nicht, hin und her, daf&#252;r zu entwickeln und zu programmieren ist zumindest eine Herausforderung, gegebenenfalls eben f&#252;r Masochisten. Schnell macht man jedenfalls mit den sog. <em>mobile Proxies</em> der Mobilprovider, f&#252;r die Sourcecode keinerlei Heiligkeit inne wohnt.]]></description>
			<content:encoded><![CDATA[<div class="foto"><img src="http://codecandies.de/wp-content/uploads/2011/01/new_religions-620x620.jpg" alt="" title="Hinter dem mobilen Proxy" width="620" height="620" class="alignnone size-medium wp-image-3401" />
<p><a href="http://creativecommons.org/licenses/by-sa/2.0/">Some rights</a> reserved by <a href="http://www.flickr.com/photos/maskedmalayan/">Masked Malayan</a></p>
</div>
<p>Ich hatte j&#252;ngst gro&#223;en Spa&#223; mit dem mobilen Proxy der Telekomiker und—w&#252;rde es nicht immer eine besonders st&#246;rungsanf&#228;llige Nutzerschar treffen—ich w&#252;rde glatt dar&#252;ber lachen. Denkt man allerdings die Gutsherrenartigkeit mit der alle Mobilprovider mit unseren Websites im mobilen Netz umgehen konsequent zu Ende, wird einem leider Angst und Bange.</p>
<p>Erste Erfahrungen damit, das im mobilen Internet der Sourcecode einer Website beim Nutzer nicht so ankommt, wie man ihn am Server losgeschickt hat, hatten wir kurz nach dem Launch unserer iPad-Website. Eins der zahlreichen Scripte auf der Seite nutze einen <code>&lt;meta&gt;</code>-Eintrag im Head der Seite, um zu erfahren, in welchem Ressort es sich gerade befand. Informationen, die man zwischen Datenbasis und Frontend sicherlich auch bspw. mit Hilfe einer Klasse am <code>&lt;body&gt;</code>-Element &#252;bertragen h&#228;tte k&#246;nnen. Aber unsere Templatehasen haben uns einst einen dicken <code>&lt;head&gt;</code> mit massig Informationen &#252;ber die Seiten unserer Anwendung gegeben, warum sollte man die nicht nutzen und auslesen? Weil im mobilen Netz (zum Zwecke der Geschwindigkeitserh&#246;hung) von den diversen <em>mobile proxy</em> alle <code>&lt;meta/&gt;</code> herausgefiltert werden, zum Beispiel.</p>
<p>Ok, das kann man ja noch verstehen, steht ja auch nichts drin, was so ein Handy, iPhone oder auch iPad im 3G-Betrieb brauchen k&#246;nnte. Der zuckt der Entwickler kurz mit den Schultern und programmiert drum herum. Ein wenig komplizierter wurde es, als wir feststellten, dass im mobilen Netz nicht nur Daten aus dem <code>&lt;head&gt;</code> entfernt werden, es werden auch welche hinzugef&#252;gt. Dort verlinkte Javascripte bspw. werden komprimiert und direkt in den <code>&lt;head&gt;</code> ausgegeben. Das ist ja nett. Ich nehme mal an, ein derart aufbereitete Seite wird dann so gecached, spart ja auch reichlich Verbindungen. Technisch alles durchaus verst&#228;ndlich.</p>
<p>Und wenn man sich denn darauf verlassen k&#246;nnte. Aber bspw. die Telekomiker <em>verbessern</em> ihre Systeme nat&#252;rlich auch und da dieses Treiben nur wenig oder gar nicht dokumentiert ist, gibt es nat&#252;rlich auch keine Releasetermine, keine Vorwarnung. Dass man wieder in die 3G-Falle gelaufen ist, merkt man genau dann, wenn der erste Nutzer sich meldet.</p>
<p>Dazu ein kurzer murphyesker, aber logischer Merksatz: <em>Fehler am Livesystem werden <strong>immer</strong> zuerst von einem Nutzer entdeckt, niemals vom Entwickler</em>.</p>
<p>Vor kurzem hatte also mein Lieblingsprovider wieder an seinem Proxy herumgespielt und folgendes Verhalten hinzugef&#252;gt: &#228;hnlich wie die Javascripte wurden nun auch CSS statt wie vorgesehen verlinkt zu werden, direkt in den <code>&lt;head&gt;</code> <em>geechoet</em>, schick auf eine Zeile komprimiert. Das sollte weiter nicht st&#246;ren, es sei denn man nutzt eine Technik zum Austauschen von verlinkten Styles zur Ladezeit. Dieser Hack um Stylesheets bei Bedarf zu dis- und/oder enablen funktioniert dann so gar nicht mehr.</p>
<p>Und wenn diese Technik dann f&#252;r die Seite <strong>wichtig</strong> ist, dann kann man schon mal ins Schwitzen kommen. Die L&#246;sung war in diesem Fall recht einfach: schreibt man statt <code>&lt;link rel="stylesheet" href="../styles.css"/&gt;</code> genauer <code>&lt;link rel="stylesheet" href="../styles.css" media="screen"/&gt;</code>, zeigt sich der Proxy derzeit g&#252;tig und l&#228;sst die Styles in Ruhe. Mal davon abgesehen, dass sich das leider morgen &#228;ndern kann, kann man nun auch keine <code>@media</code> innerhalb des CSS mehr machen.</p>
<p>Im Grunde ist das ja auch alles nicht so schlimm, so lange der Mobilprovider sich nicht auch noch am Inhalt der Seite zu schaffen macht. Es zeigt aber, dass eine iPad-HTML-Anwendung sehr viel defensiver gebaut werden m&#252;sste, als ich es bisher getan habe. Vielmehr muss man ber&#252;cksichtigen, dass ein Tablet eben auch ein mobiles Device <em>sein kann</em> und dann eben den gleichen Restriktionen unterliegt, wie das schn&#246;de Handy in meiner Tasche. Hier klafft imho noch eine <em>mobile-Web-Smartphone-und-Tablet-L&#252;cke</em>, die sich auch darin zeigt, wie drastisch niedrig die Datenmengen von den Providern beschr&#228;nkt werden (statt die Infrastruktur auszubauen oder die Technik zu verbessern). An Seiten, die eine Tonne wiegen und zwei Minuten Ladezeit bei UMTS auf die Ur bringen, hat der Nutzer in zweierlei Hinsicht wenig Freude.</p>
<p><em>One Web</em> ist gar nicht so einfach.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2011/01/20/hinter-dem-mobilen-proxy/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Mein Werkzeugkasten</title>
		<link>http://codecandies.de/2010/07/27/mein-werkzeugkasten/</link>
		<comments>http://codecandies.de/2010/07/27/mein-werkzeugkasten/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 10:51:37 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[nebenbei]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3247</guid>
		<description><![CDATA[Jeder Developer und jeder Webdesigner hat seine bevorzugten Programme und Tools, die er zum <em>coden</em> oder <em>designen</em> verwendet. Viele Programme findet man auf allen Rechnern, andere sind eher wenig verbreitet. Hier stelle ich den Inhalt meiner <em>Toolbox</em> vor.]]></description>
			<content:encoded><![CDATA[<div class="foto"><img src="http://codecandies.de/wp-content/uploads/2010/07/3967329241_9c3791a402_z.jpg" alt="" title="Artist Studio: James Cospito / Dumbo Arts Center: Art Under the" width="640" height="427" class="alignnone size-full wp-image-3258" />
<p>&#220;ber die Jahre hat sich in meiner Toolbox ganz sch&#246;n was angesammelt.<br/><span class="copyright">Foto: <a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/">Some rights reserved</a> by <a href="http://www.flickr.com/photos/seeminglee/3967329241/">See-ming Lee 李思明 SML</a></span></p>
</div>
<p>Schon vor ewig hatte der gute Frank Bueltge einen Artikel &#252;ber seine <a href="http://bueltge.de/meine-wordpress-entwickler-toolbox/1037/">WordPress Entwickler Toolbox</a> gepostet und seitdem habe ich einen &#228;hnlichen Artikel in die <em>Pipe</em> gelegt, der nun endlich fertig ist. Die Frage, womit ich dieses Blog entwickle l&#228;sst sich von der Frage, womit ich auch professionell arbeite, nicht trennen. Dieses Blog (und die anderen zuvor) ist ja immer die Spielwiese f&#252;r das, was ich <a href="http://www.zeit.de"><em>auf Arbeit</em></a> mache und umgekehrt, setze ich im Arbeitsleben Gelerntes hier gerne ein und um. Von daher kann ich nur meinen globalen Werkzeugkasten pr&#228;sentieren, f&#252;r das, was ich so mache… Digitalkreativer und Internethandwerker.</p>
<h2>Betriebsystem(e)</h2>
<p>Ganz grunds&#228;tzlich arbeite ich seit Jahren fast nur noch mit Apple-Rechnern, namentlich zur Zeit einem MacBook Pro (2.66 GHz Intel Core 2 Duo, 4GB RAM). Zu Hause steht noch ein kleiner <em>Mac mini</em>. Vor kurzem wurde allerdings zus&#228;tzlich ein Samsung Netbook angeschafft, dessen mitgeliefertes Windows 7 <em>Stalker</em> gepl&#228;ttet und durch das aktuelle Netbook-Ubuntu ersetzt. Mein Arbeitgeber stellt mir zus&#228;tzlich ein iPhone und zum Testen auch regelm&#228;&#223;ig ein iPad. Entwickelt wird bei mir aber eigentlich ausschlie&#223;lich auf dem MacBook Pro.</p>
<h2>Editor/IDE</h2>
<p>Ich weiss gar nicht wirklich, ob es derzeit ein sinnvolles <abbr title="integrated development environment">IDE</abbr> f&#252;r HTML und CSS auf dem Mac gibt. Ich habe in den Jahren viel ausprobiert, <a href="http://www.aptana.com/">Aptana</a>, <a href="http://netbeans.org/index.html">NetBeans</a>, <a href="http://macrabbit.com/espresso/">Espresso</a>, <a href="http://www.panic.com/coda/">Coda</a>, am Ende des Tages bin ich immer wieder zu meinem hei&#223;geliebten <a href="http://macromates.com/">Textmate</a> zur&#252;ckgekehrt. Textmate ist eben ausdr&#252;cklich keine IDE, sondern ein Texteditor, <a href="http://astore.amazon.de/codecandies-21/detail/097873923X" title="Gesponsorter Buchlink: Textmate: Power Editing for the Mac (Pragmatic Programmers)">der praktisch alles kann</a>.</p>
<p>Ja, das ist richtig, ich mache alles mit dem Texteditor, bis hin zu kleineren jQuery-Projekten. Unterst&#252;tzt wird dies durch viele viele Textmate-Bundles, die beispielsweise <a href="http://www.jslint.com/">JS Lint</a> integrieren, f&#252;r ordentliche Formatierung sorgen, gegen den <a href="http://validator.w3.org/">W3C Validator</a> checken, <abbr title="Subversion">SVN</abbr> (oder Git oder Mercurial) bedienen und so weiter und so fort. Hinzu kommen Templates und eine prima Projektverwaltung.</p>
<h2>Serverkontakt</h2>
<p>Obwohl ich gerne bis zur letzten Sekunde lokal entwickle (Server zur Verf&#252;gung gestellt von <a href="http://www.mamp.info/de/index.html">MAMP</a>), kommt man nat&#252;rlich ohne Serverkontakt nicht aus. Wenn ich dabei auf das vorsintflutliche und leider noch viel zu verbreitete FTP angewiesen bin, dann nutze ich dazu @work <a href="http://www.panic.com/transmit/">Transmit</a> und sonst gerne <a href="http://cyberduck.de/">Cyberduck</a>. Viel lieber mag ich allerdings entfernte Dateisysteme mounten, mit <a href="http://www.macfusionapp.org/">MacFusion</a> und <a href="http://code.google.com/p/macfuse/">MacFUSE</a>. Ich kann aber auch eine Shell bedienen und direkt auf dem Server mit <a href="http://de.wikipedia.org/wiki/Vi">vi</a>. Ich habe auch schon mal mit <a href="http://code.google.com/p/macvim/">macvim</a> gespielt, f&#252;r vi-Abh&#228;ngige am Mac jedenfalls das Richtige. Meine terminal.app erreiche ich &#252;brigens mit dem coolen <a href="http://visor.binaryage.com/">Visor</a>, aber das ist nat&#252;rlich nur Spielerei.</p>
<h2>Grafik, Konzept</h2>
<p>Da ich mir privat kein Photoshop leisten will und kann, und im Beruf nicht zu denen geh&#246;re, die standardm&#228;&#223;ig damit ausgestattet sind, habe ich mir vor einiger Zeit schon <a href="http://flyingmeat.com/acorn/">Acorn</a> zugelegt. Das macht zumindest alles, was man im Blogalltag so braucht und &#246;ffnet sogar PSDs (was auch im B&#252;ro manchmal hilfreich ist). Zum Webdesign eignet es sich aber weniger. Hin und wieder spiele ich mit <a href="http://www.gimp.org/macintosh/">GIMP</a>, aber mal ehrlich… naja.</p>
<p>Zur <em>graphischen Analyse</em> von Webseiten (und damit ich mir die Standardpixelwerte von zeit.de nicht merken muss), habe ich mir <a href="http://iconfactory.com/software/xscope">xScope</a> gekauft. Dieses wirklich grandiose Tool misst alles am Bildschirm aus, zeigt Farbwerte, macht globale Hilfslinien, Grids und und und…</p>
<p>Im Beruf brauche ich noch zus&#228;tzlich Helfer f&#252;r die Visualisierung von Seiten, Abl&#228;ufen, etc., bspw. bei der Konzeption. Standardm&#228;&#223;ig nutzen wir <a href="http://www.omnigroup.com/products/omnigraffle/">Omni Graffle</a>, was ich auch sehr mag. Trotzdem habe ich mich schon an <a href="http://www.balsamiq.com/products/mockups">Balsamiq</a> versucht, da ich Mockups, die aussehen wie Mockups f&#252;r p&#228;dagogisch sinnvoll halte. Zumal wir dann sehr schnell zu HTML-Prototypen &#252;bergehen, da muss man Grenzen ziehen. In Omni Graffle nutze ich deswegen das <a href="http://graffletopia.com/stencils/459">Web Sketch Interface</a> Stencil.</p>
<div class="foto"><img src="http://codecandies.de/wp-content/uploads/2010/07/screen1.jpg" alt="" title="screen1" class="alignnone size-full wp-image-3251" />
<p>Firefox ist immer noch die Nummer 1.</p>
</div>
<h2>Browser, Virtualisierung</h2>
<p>Ich entwickle nach wie vor im Firefox. Ich habe mit Chrome gelieb&#228;ugelt, aber es geht doch nichts &#252;ber Firefox mit Firebug. Dazu habe ich noch ein paar Addons am Start: nat&#252;rlich die <a href="https://addons.mozilla.org/de/firefox/addon/60/">Web Developer</a> Extension, den <a href="https://addons.mozilla.org/de/firefox/addon/59/">User Agent Switcher</a>, den <a href="https://addons.mozilla.org/de/firefox/addon/402/">Fangs Screenreader</a> und die <a href="https://addons.mozilla.org/en-US/firefox/addon/2079/">Selenium IDE</a> und die passenden <a href="https://addons.mozilla.org/de/firefox/addon/46131/">Selenium IDE Buttons</a>. Nat&#252;rlich habe ich trotzdem zus&#228;tzlich jede Menge Browser auf dem Rechner installiert, zum Testen eben.</p>
<p>Daf&#252;r betreibe ich auch gezwungenerma&#223;en Virtualisierung und zwar mit <a href="http://www.virtualbox.org/">VirtualBox</a>, wo diverse Ausw&#252;chse der Windows-&#196;ra zu Hause sind und diverse Browserversionen von IE verf&#252;gbar machen.</p>
<h2>Und sonst so?</h2>
<p>Puh, das war ja eine lange Liste. Aber alle diese Programme und Tools brauche ich f&#252;r meinen gelungenen Arbeitsalltag. Und es werden immer mehr. Seitdem ich zum Beispiel viel mit dem iPad zu tun habe, nutze ich immer &#246;fter <a href="http://simplenoteapp.com/">Simplenote</a> zusammen mit <a href="http://notational.net/">Notational Velocity</a> und gerne auch in Kombination mit <a href="https://www.dropbox.com/referrals/NTE2MDc0Mzk5" title="Gesponserter Link: dropbox.com">Dropbox</a>, mit dessen Hilfe ich Dateien zwischen meinen verschiedenen Rechnern <em>share</em>. Und man will ja auch kommunizieren, obwohl sich immer alle beschweren, dass ich viel zu selten mein <a href="http://adium.im/">Adium</a> am Start habe. Und Gmail und Tweetie und Skype…</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/07/27/mein-werkzeugkasten/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Setting up a Mac to Work with Git and GitHub]]></title>
		<link><![CDATA[http://www.silverwareconsulting.com/index.cfm/2009/10/26/Setting-up-a-Mac-to-Work-with-Git-and-GitHub]]></link>
		<comments>http://codecandies.de/2009/11/05/setting-up-a-mac-to-work-with-git-and-github/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 08:21:55 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2430</guid>
		<description><![CDATA[Kurze Anleitung f&#252;r den Start mit Git/GitHub. →<p><a href="http://codecandies.de/2009/11/05/setting-up-a-mac-to-work-with-git-and-github/" rel="bookmark" title="Permanent link to 'Setting up a Mac to Work with Git and GitHub'" class="glyph">→</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Kurze Anleitung f&#252;r den Start mit Git/GitHub.</p>
<p><a href="http://codecandies.de/2009/11/05/setting-up-a-mac-to-work-with-git-and-github/" rel="bookmark" title="Permanent link to 'Setting up a Mac to Work with Git and GitHub'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/11/05/setting-up-a-mac-to-work-with-git-and-github/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Web Inspector Updates]]></title>
		<link><![CDATA[http://webkit.org/blog/829/web-inspector-updates/]]></link>
		<comments>http://codecandies.de/2009/11/05/web-inspector-updates/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 08:19:57 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2426</guid>
		<description><![CDATA[A number of exciting new features have been added to the Web Inspector since our last update. Today we would…<p><a href="http://codecandies.de/2009/11/05/web-inspector-updates/" rel="bookmark" title="Permanent link to 'Web Inspector Updates'" class="glyph">→</a></p>
]]></description>
			<content:encoded><![CDATA[<p><q>A number of exciting new features have been added to the Web Inspector since our last update. Today we would like to highlight some of those features!</q> […] <q>If you would like to play with most of these features you will need to be running a recent WebKit Nightly.</q></p>
<p><a href="http://codecandies.de/2009/11/05/web-inspector-updates/" rel="bookmark" title="Permanent link to 'Web Inspector Updates'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/11/05/web-inspector-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Adventskalender]]></title>
		<link><![CDATA[http://www.webkrauts.de/2008/11/26/das-beste-aus-der-praxis/]]></link>
		<comments>http://codecandies.de/2008/11/26/adventskalender/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 18:09:00 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[weblogs]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=1519</guid>
		<description><![CDATA[Die Webkrauts kredenzen auch in diesem Jahr wieder ihren Adventskalender. Nicht verpassen. →<p><a href="http://codecandies.de/2008/11/26/adventskalender/" rel="bookmark" title="Permanent link to 'Adventskalender'" class="glyph">→</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Die <a href="http://www.webkrauts.de/">Webkrauts</a> kredenzen auch in diesem Jahr wieder ihren <a href="http://www.webkrauts.de/2008/11/26/das-beste-aus-der-praxis/">Adventskalender</a>. Nicht verpassen.</p>
<p><a href="http://codecandies.de/2008/11/26/adventskalender/" rel="bookmark" title="Permanent link to 'Adventskalender'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/11/26/adventskalender/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Clever CleverCSS</title>
		<link>http://codecandies.de/2008/09/24/clever-clevercss/</link>
		<comments>http://codecandies.de/2008/09/24/clever-clevercss/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 20:06:16 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=1191</guid>
		<description><![CDATA[In welcher Reihenfolge man CSS-Eigenschaften notieren soll, haben wir nun wohl genug diskutiert, kommen wir nun zu etwas v&#246;llig anderem: programmiertes CSS.]]></description>
			<content:encoded><![CDATA[<p>In welcher Reihenfolge man CSS-Eigenschaften notieren soll, <a href="http://codecandies.de/2008/09/22/you-never-have-expected/">haben wir nun wohl genug diskutiert</a>, kommen wir nun zu etwas v&#246;llig anderem: <strong>programmiertes CSS</strong>.</p>
<p>Hatte schon die Idee (in Webkit bereits testweise implmentiert) von <a href="http://codecandies.de/2008/04/26/css-variablen/">Konstanten in CSS</a> die Welt in <a href="http://codecandies.de/2008/08/06/css-entwicklung/">Aufregung</a> versetzt, d&#252;rfte man <a href="http://sandbox.pocoo.org/clevercss/">CleverCSS – the pythonic way of webdesign</a> als die endg&#252;ltige Gottesl&#228;sterung betrachten. Um es kurz zu machen zitiere ich flugs:</p>
<blockquote cite="http://sandbox.pocoo.org/clevercss/"><p>CleverCSS is a small markup language for CSS inspired by Python that can be used to build a style sheet in a clean and structured way. In many ways it&#8217;s cleaner and more powerful than CSS2 is.</p>
 <p class="citesource"><cite><a href="http://sandbox.pocoo.org/clevercss/">sandbox.pocoo.org</a></cite></p></blockquote>
<p>Hmmm… <em>pythonic</em>, das k&#246;nnte meinem Wunsch nach Formatierung und Sauberkeit doch entgegenkommen. Und CleverCSS kann einige witzige Sachen, ausser einfach CSS wieder raus zu printen. Bspw. gibt es einen <em>grouping operator</em>, der Attribute zu Gruppen zusammenfasst. So:</p>
<pre class="codeexample"><code>#main p
  font->
    family: Verdana, sans-serif
    size: 1.1em
    style: italic</code></pre>
<p>Ausgegeben w&#252;rde hierf&#252;r:</p>
<pre class="codeexample"><code>#main p {
    font-family: Verdana, sans-serif;
    font-size: 1.1em;
    font-style: italic;
}</code></pre>
<p>Mal bitte, das ist ja lustig. Und dann wirds spannend, CleverCSS beherrscht nat&#252;rlich <strong>Konstanten</strong>, um z.B. Farbwerte einmalig festzulegen und editierbar zu machen. Ich wei&#223; schon, nichts, was man nicht auch mit suchen &amp; ersetzen erschlagen kann… nur, CleverCSS kann damit auch ein wenig rechnen:</p>
<pre class="codeexample"><code>background-position: $foo + 2 + 3 $foo - 2</code></pre>
<p>Das t&#228;te <code>background-position: 15 8;</code> ergeben. Mit CleverCSS kann man beinahe richtig rechen, sogar mit Farben (<code>#fff - #ccc =&gt; #333333</code>). Und als w&#228;r das nicht schon genug: es gibt auch noch einen ganzen Satz Methoden, wie Number.abs(), String.length(delimiter), Color.brighten(amount) oder String.split(). Klingt doch spannend.</p>
<p>Allen Features zum Trotze muss man nat&#252;rlich die Frage nach dem Sinn stellen. Ehrlich gesagt: weiss ich noch nicht. F&#228;llt mir aber sicherlich noch ein. Zusammenh&#228;nge k&#246;nnten Frameworks, Templatesysteme, …, ja was?</p>
<p>Pr&#228;dikat: unbedingt mal <a href="http://pypi.python.org/pypi/CleverCSS/">runterladen</a> und ausprobieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/09/24/clever-clevercss/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>You never have expected…</title>
		<link>http://codecandies.de/2008/09/22/you-never-have-expected/</link>
		<comments>http://codecandies.de/2008/09/22/you-never-have-expected/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 07:17:52 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=1176</guid>
		<description><![CDATA[In Pisto bettelt Andreas D&#246;lling um Schl&#228;ge der heiligen CSS-Inquisition. Es gibt eine heilige CSS-Inquisition? Das bin ja dann wohl ich. Schl&#228;ge? Kann er haben!]]></description>
			<content:encoded><![CDATA[<p>Hallo, hier spricht die <q>heilige CSS-Inqisition</q>. Sie h&#228;tten das sicherlich nicht erwartet, aber hier ging es ja schon das <a href="http://codecandies.de/2008/05/21/css-coding-guidelines-i/">eine</a> oder <a href="http://codecandies.de/2008/05/22/css-coding-guidelines-ii/">andere</a> Mal um CSS-Code<del>poetry</del><ins>styleguidespie&#223;ereien</ins>, da kann ich nat&#252;rlich kaum an mich halten, wenn in einem von mir hochgelobten <a href="http://pisto-magazin.de">Webmagazin</a> derartig <a href="http://pisto-magazin.de/artikel/css-wir-raeumen-auf">hahneb&#252;chener Bl&#246;dsinn</a> verzapft wird.</p>
<p>Andreas D&#246;lling ist laut Autorenangbae <q><a href="http://a-doelling.de/">Webentwickler</a>, kann es aber nicht lassen, seine Nase immer wieder in Bereiche zu stecken, die ihn eigentlich gar nichts angehen, und seine Meinung dazu kundzutun.</q> Schon passiert w&#252;rde ich mal sagen, obwohl ich dachte, dass CSS einen Webentwickler sehr wohl etwas angeht.</p>
<p>Zun&#228;chst einmal ist es nat&#252;rlich eine super Sache, seine CSS-Klassen gut und semantisch zu benennen, es werden auch wirklich sch&#246;ne und einleuchtende Besipiele genannt, die Herr D&#246;lling einem <em>alten Hasen</em> abgescahut hat bzw. zu denen ihn das Qualit&#228;tsmanagement einer professionellen Firma <em>gezwungen</em> hat. Scheinbar aus Rachen gegen die Affront jedoch hat sich Herr D&#246;lling noch einige Reste eigenen CSS-Stils bewahrt und die haben es in sich. Mein Vorschlag dazu: <strong>auf gar keinen Fall nachmachen!</strong></p>
<h4>Anordnung von CSS-Eigenschaften</h4>
<p>Es wird empfohlen, Eigenschaften in der Reihenfolge der Wichtigkeit zu notieren, wobei in f&#252;nf Wichtigkeitsgruppen eingeteilt  wird (Verhalten, Position und Dimension, Abst&#228;nde und Rahme, Schriftgr&#246;&#223;e und Zeilenh&#246;he, Hintergrund und &#252;brige Eigenschaften). D&#228;mliche Idee numero uno: erstens halte ich die <em>Wichtigeit von CSS-Eigenschaften</em> f&#252;r h&#246;chst diskutabel, das kommt halt immer auf den Fall an, in Wahrheit ist dies ein willk&#252;rliche Festlegung. Wogegen man eigentlich gar nichts einwenden kann, denn wenn es keine logische Reihenfolge gibt ist koordninierte Willk&#252;r der einzige Weg. Nur sind diese Gruppen schwer vemittelbar: man muss lernen, was zu welcher Gruppe geh&#246;rt, lernen in welcher Reihenfolge die Gruppen anzuordnen sind und innerhalb der Gruppen, gibt es gar keine definierte Reihenfolge. Stellen sie sich einmal vor, sie sind Qualit&#228;tsmanager und sollen nun dieses Regelwerk an diverse Webentwickler und -dekorateure kommunizieren. Sch&#246;nen Dank. Ich sag&#8217;s mal in CSS-Inquisitions-Sprache: <em>wird sich nicht durchsetzen</em>. Zu kompliziert, zu schwierig umzusetzen.</p>
<p>Der Gegenvorschlag bleibt bestehen: <strong>CSS-Eigenschaften immer in aplhabetischer Reihenfolge notieren.</strong> Das ist einfach, versteht jeder, ist eine nachpr&#252;fbare, also durchsetzbare Regel und super umsetzbar. Und f&#252;hrt auch auf lange Sicht zu lesbaren Stylesheets.</p>
<h4>Einr&#252;ckung und Umbr&#252;che</h4>
<p>Endg&#252;ltig die Haare zu Berge stehen einem dann, wenn man die Idee zum <q>quer schreiben</q> liest. Herr D&#246;lling, lassen sie sich an dieser Stelle einmal folgendes sagen: wer quer schreibt, ist noch lange kein Querdenker, eher schon ein Quertreiber. Mal davon abgesehen, dass die letzte &#220;bersichtlichkeit, die Herrn D&#246;llings drolliger Dialekt noch bietet, einzig und allein durchs Synthaxhighlighting zustande kommt, ist dies ein CSS-Code der sagt: »Fass mich nicht an! Mein Autor ist so von sich selbst &#252;berzeugt, dass er nicht glaubt, dass jemand anderes ausser er selbst &#196;nderungen vornehmen m&#246;chte.« Danke sch&#246;n.</p>
<p>Sowas darf man sicherlich auf den Server stellen, es spart eine Menge Platz und sicherlich das eine oder andere Byte an Gewicht. Aber w&#228;hrend der Entwicklungszeit ist so eine Schreibweise einfach nur eins: kontraproduktiv. Man stelle sich nur vor, man soll jetzt hier eine CSS-Regel hinzuf&#252;gen, wom&#246;glich nach der vorgenannten Fehllehre, sozusagen irgendwo in der 400 Zeichen langen Zeile. Wir w&#252;nschen fr&#246;hliches horizontal scrollen. Das ist wirklich eine dumme Idee. <strong>Auf gar keinen Fall nachmachen.</strong></p>
<p>Hoffe, das war jetzt inquisitorisch genug, war ja auch so gew&#252;nscht. Da kann einem aber auch der Geduldsfaden reissen. Schon passiert: hier habe ich eine Videoaufnahme davon:</p>
<p><a href="http://www.youtube.com/watch?v=gldlyTjXk9A">http://www.youtube.com/watch?v=gldlyTjXk9A</a></p>
<p class="update">Nachtrag: ich habe heute morgen in meiner grenzenlosen <del>Weisheit</del> D&#228;mlichkeit diesen Artikel aus Versehen gel&#246;scht und musste z.T. von Hand restoren, dabei sind die Pingbacks fl&#246;ten gegangen. Sorry.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/09/22/you-never-have-expected/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: Protecting Your Cookies: HttpOnly]]></title>
		<link><![CDATA[http://www.codinghorror.com/blog/archives/001167.html]]></link>
		<comments>http://codecandies.de/2008/08/29/protecting-your-cookies-httponly/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 07:20:18 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=965</guid>
		<description><![CDATA[If you develop web applications, or you know anyone who develops web applications, make sure they know about HttpOnly cookies.…<p><a href="http://codecandies.de/2008/08/29/protecting-your-cookies-httponly/" rel="bookmark" title="Permanent link to 'Protecting Your Cookies: HttpOnly'" class="glyph">→</a></p>
]]></description>
			<content:encoded><![CDATA[<p><q>If you develop web applications, or you know anyone who develops web applications, make sure they know about <strong>HttpOnly cookies</strong>.</q></p>
<p><a href="http://codecandies.de/2008/08/29/protecting-your-cookies-httponly/" rel="bookmark" title="Permanent link to 'Protecting Your Cookies: HttpOnly'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/08/29/protecting-your-cookies-httponly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title><![CDATA[Verlinkt: The 5 Best Firebug Extensions]]></title>
		<link><![CDATA[http://www.webmonkey.com/blog/The_Five_Best_Firebug_Extensions]]></link>
		<comments>http://codecandies.de/2008/07/22/the-5-best-firebug-extensions/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 04:25:27 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=703</guid>
		<description><![CDATA[Firebug extensions are a sort of meta-extension that lets you add on to Firebug. Developers are adding some features that…<p><a href="http://codecandies.de/2008/07/22/the-5-best-firebug-extensions/" rel="bookmark" title="Permanent link to 'The 5 Best Firebug Extensions'" class="glyph">→</a></p>
]]></description>
			<content:encoded><![CDATA[<p><q>Firebug extensions are a sort of meta-extension that lets you add on to Firebug. Developers are adding some features that we’re starting to find hard to live without.</q> [<a href="http://codecandies.de/2008/07/21/voran-firebug/#comment-4606">via</a>]</p>
<p><a href="http://codecandies.de/2008/07/22/the-5-best-firebug-extensions/" rel="bookmark" title="Permanent link to 'The 5 Best Firebug Extensions'" class="glyph">→</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/07/22/the-5-best-firebug-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zitat des Tages</title>
		<link>http://codecandies.de/2008/06/17/zitat-des-tages-2/</link>
		<comments>http://codecandies.de/2008/06/17/zitat-des-tages-2/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 19:38:50 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=630</guid>
		<description><![CDATA[Manchmal denke ich, hier, diesseits des gro&#223;en Teiches, machen wir Webentwicklung irgendwie noch mit Hammer und Mei&#223;el.]]></description>
			<content:encoded><![CDATA[<blockquote class="pull" cite="http://www.alistapart.com/articles/sketchingincode" ><p>I’ve often seen features cut from a product launch in favor of generating “better” documentation.</p>
</blockquote>
<p><cite>David Verba</cite> in <a href="http://alistapart.com/articles/sketchingincode">Sketching in Code: the Magic of Prototyping</a>.</p>
<p>Manchmal denke ich, hier, diesseits des gro&#223;en Teiches, machen wir Webentwicklung irgendwie noch mit Hammer und Mei&#223;el. So ein bi&#223;chen, als w&#228;ren wir Steinzeitmenschen, die eben zusehen d&#252;rfen, wie der Stamm nebenan das Feuer kultiviert, das Rad erfindet etc., aber unser Stammes&#228;ltester unterbindet den neumodischen Kram.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/06/17/zitat-des-tages-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CSS Coding Guidelines II</title>
		<link>http://codecandies.de/2008/05/22/css-coding-guidelines-ii/</link>
		<comments>http://codecandies.de/2008/05/22/css-coding-guidelines-ii/#comments</comments>
		<pubDate>Thu, 22 May 2008 16:06:42 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=564</guid>
		<description><![CDATA[Nach angeregter Diskussion gegen die CSS.Guidelines in die zweite Runde. Und wir sind immer noch beim reinen Codelayout, noch kein wort dar&#252;ber, welche Techniken zu nutzen und welche verboten sind…]]></description>
			<content:encoded><![CDATA[<p><a href="http://codecandies.de/2008/05/21/css-coding-guidelines-i/">Teil 1</a> wurde ja schon ausgiebig diskutiert, daraus habe ich schon einiges mitgenommen. Machen wir also fr&#246;hlich weiter mit meinen Ideen, wie man CSS am besten notiert…</p>
<p><img src="http://codecandies.de/wp-content/uploads/iw/ZZ46E36474.jpg" width="632" height="347" alt="dr. who" /><br />
»It&#8217;s not <strong>everything</strong> that bad…« &copy;BBC</p>
<h4>Kommentare</h4>
<p><strong>Mehrzeilige Kommentare, mit Einr&#252;ckung et al.</strong> sind zu platzieren:</p>
<ul>
<li>am Beginn jeder Datei
<ul>
<li>mit Angabe wozu und an welcher Stelle das Stylesheet ben&#246;tigt wird, kurze Inhaltsangabe o.&#228;.</li>
<li>Abh&#228;ngigkeiten</li>
</ul>
</li>
<li>vor jedem Themenabschnitt</li>
</ul>
<p class="codeexample"><strong>Codebespiel:</strong> mehrzeiliger Kommentar</p>
<pre class="codeexample"><code>/**
 * Hello World
 * Dies ist ein mehrzeiliger Kommentar
 */
</code></pre>
<p>In allen anderen F&#228;llen ist der Zeilenkommentar zu nutzen</p>
<p class="codeexample"><strong>Codebespiel:</strong> einzeiliger Kommentar</p>
<pre class="codeexample"><code>/* Dies ist ein einzeiliger Kommentar */
</code></pre>
<h4>Leerzeilen</h4>
<p>Einzelne Regeln sind durch <strong>1</strong> Leerzeile voneinander zu trennen. Es sollten niemal mehr als <strong>2</strong> Leerzeilen aufeinander folgen.</p>
<p class="codeexample"><strong>Codebespiel:</strong> Leerzeilen</p>
<pre class="codeexample"><code>.note { border: 1px solid #000; }

.black_note {
    background: #ff00ff;
    color: #000;
}</code></pre>
<p>Anm.: <em>Bitte den Code immer so leserlich wie m&#246;glich gestalten. Optimierung des CSS auf Gr&#246;&#223;e wird in sp&#228;teren Buildprozessen umgesetzt und ist vom Layout unabh&#228;ngig.</em></p>
<h4>Kurzschrift-Eigenschaften</h4>
<p>Wo immer <em>m&#246;glich <strong>und</strong> sinnvoll</em> sollen die Deklarationen in Kurzschreibweise zusammengefasst werden.</p>
<p class="codeexample"><strong>Codebespiel:</strong> Kurzschreibweisen 1</p>
<pre class="codeexample"><code>.small {
    background: transparent url(img/border-bottom.gif) repeat-x bottom;
    border: 1px solid #000;
}
</code></pre>
<p>Trotzdem bitte flexibel bleiben und davon abweichen, wenn es sinnvoll ist:</p>
<p class="codeexample"><strong>Codebespiel:</strong> Kurzschreibweisen 2</p>
<pre class="codeexample"><code>a:link {
    background: transparent url(img/sprite.gif) no-repeat 0 0;
}

a:hover {
    background-position: 0 -16px;
}
</code></pre>
<h4>Best practice</h4>
<p>Bitte jede Deklaration immer mit einem Semikolon abschlie&#223;en.</p>
<h4>Namen</h4>
<ul>
<li>alle Namen in Kleinbuchstaben</li>
<li>zusammengesetzte Namen mit _ (underscore) verbinden</li>
<li>eher aber kurze Namen suchen, h&#246;chstens 1 Zusammensetzung </li>
<li>Update: <q>Klassennamen verraten nicht das Aussehen eines Elementes.</q> (<a href="http://cyberer.wordpress.com/2008/07/21/css-und-html/">via</a>) D.h. Klassen heissen nicht &#8220;.grey-border&#8221; oder &#228;hnliches.</li>
</ul>
<p><strong>Reservierte IDs:</strong> folgende IDs sind in der Regel f&#252;r das HTML-Ger&#252;st vergeben und sollen au&#223;erhalb dessen nicht benutzt werden:</p>
<ul>
<li>#wrapper</li>
<li>#container</li>
<li>#header</li>
<li>#content</li>
<li>#sidebar</li>
<li>#footer</li>
</ul>
<p><strong>To be continued.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/05/22/css-coding-guidelines-ii/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CSS Coding Guidelines I</title>
		<link>http://codecandies.de/2008/05/21/css-coding-guidelines-i/</link>
		<comments>http://codecandies.de/2008/05/21/css-coding-guidelines-i/#comments</comments>
		<pubDate>Wed, 21 May 2008 16:34:37 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=556</guid>
		<description><![CDATA[Zur Zeit dr&#252;cke ich mir kiloweise Coding Guidelines aus dem Kopf. In loser Reihenfolge werde ich die Ergebnisse hier posten- Den Anfang machen die ersten Zeilen CSS-Guideline.]]></description>
			<content:encoded><![CDATA[<p><img src="http://codecandies.de/wp-content/uploads/iw/ZZ58D4E4B0.jpg" width="632" height="347" alt="the doctor" /><br />The Doctor. &copy; BBC</p>
<h4>Begriffskl&#228;rung</h4>
<p class="codeexample"><strong>Codebespiel:</strong> Begrifflichkeiten</p>
<pre class="codeexample"><code>h2 { color: #000; }</code></pre>
<ul>
<li> Diese Codezeile ist eine CSS-Regel (rule)</li>
<li> <b>h2</b> ist (hier) ein Selektor (selector)</li>
<li> <b>color: #000;</b> ist die Deklaration (declaration)</li>
<li> <b>color</b> ist eine Eigenschaft (property)</li>
<li> <b>#000</b> ist ein Wert (value)</li>
</ul>
<p>Nachzulesen beim <a href="http://www.w3.org/TR/CSS1#basic-concepts">W3C</a>.</p>
<h4>Schreibweisen</h4>
<ul>
<li>Alle IDs und Klassennamen <strong>klein</strong> schreiben</li>
<li>Alle Selektoren <strong>klein</strong> schreiben</li>
<li>Alle Deklarationen <strong>klein</strong> schreiben</li>
<li>Alle Werte <strong>klein</strong> schreiben</li>
</ul>
<p class="codeexample"><strong>Codebespiel:</strong> Schreibweisen</p>
<pre class="codeexample"><code>h2, #container, .formbox { color: #efe; }</code></pre>
<h4>Leerzeichen (Space)</h4>
<ul>
<li> Zwischen Deklaration und Wert (nach dem Doppelpunkt)</li>
<li>nach Kommata</li>
<li>bei einzeligen Selektoren nach <code>{</code> und vor <code>}</code></li>
<li> nach <code>/*</code> und vor <code>*/</code></li>
</ul>
<h4>Einr&#252;ckung</h4>
<ul>
<li> Selektor auf eigener Zeile, dahinter <code>{</code>-Klammer</li>
<li> Deklarationen (1 pro Zeile) einger&#252;ckt um vier Leerzeichen</li>
<li> <code>}</code>-Klammer am Ende wieder ausger&#252;ckt </li>
</ul>
<p class="codeexample"><strong>Codebespiel:</strong> Einr&#252;ckung 1</p>
<pre class="codeexample"><code>.note {
    border: 1px solid #000;
    color: #ff0000;
    margin-bottom: 10px;
}</code></pre>
<p><strong>Ausnahme:</strong> Selektor mit nur <strong>1</strong> Deklaration wird einzeilig geschrieben</p>
<p class="codeexample"><strong>Codebespiel:</strong> Einr&#252;ckung 2</p>
<pre class="codeexample"><code>.note { border: 1px solid #000; }</code></pre>
<p>Regeln, die sich auf Kindelemente beziehen, werden an der Mutter-Regel ausgerichtet.</p>
<p class="codeexample"><strong>Codebespiel:</strong> Einr&#252;ckung 3</p>
<pre class="codeexample"><code>.note {
    border: 1px solid #000;
}
    .note p {
        padding: 4px 2px;
    }</code></pre>
<p>To be continued. <strong>Update:</strong> <ins><a href="http://codecandies.de/2008/05/22/css-coding-guidelines-ii/">Teil 2 ist fertig</a>.</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/05/21/css-coding-guidelines-i/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Scalr – EC2 Framework</title>
		<link>http://codecandies.de/2008/04/04/scalr-ec2-framework/</link>
		<comments>http://codecandies.de/2008/04/04/scalr-ec2-framework/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 09:50:47 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://codecandies.de/2008/04/04/scalr-ec2-framework/</guid>
		<description><![CDATA[Ich war gestern schon kurz &#252;ber Scalr gestolpert, zusammen mit einem Kollegen hatten wir aber beschlossen: gute Idee, aber das…]]></description>
			<content:encoded><![CDATA[<p>Ich war gestern schon kurz &#252;ber <a href="http://scalr.intridea.com/">Scalr</a> gestolpert, zusammen mit einem Kollegen hatten wir aber beschlossen: gute Idee, aber das k&#246;nnen dann ja andere f&#252;r uns testen. Denn »Scal(e)r« versprciht wirklich ziemlich viel mit ziemlich wenig Aufwand, da kann man schon mal mi&#223;trauisch werden. Kurz gesagt: Scalr ist ein Framework, das <a href="http://www.amazon.com/gp/browse.html?node=201590011">Amazons EC2 Cloud</a> nutzt, um dort komplette und vor allem ausfallsichere Serverumgebungen mit Web- und Datenbankserver plus Loadbalancer zur Verf&#252;gung zu stellen und zu verwalten. Das k&#246;nnte ja interessant sein. Kaum habe ich das gestern nicht gebloggt, kommt nachmittags ein Dienstleister und bietet uns genau dasselbe in zartrosa an. Und heute nacht ist es dann auch schon bei <a href="http://www.techcrunch.com/2008/04/03/scalr-the-auto-scaling-open-source-amazon-ec2-effort/">Techcrunch</a>. K&#246;nnte also doch etwas dran sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/04/04/scalr-ec2-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Telefonat</title>
		<link>http://codecandies.de/2008/03/20/telefonat/</link>
		<comments>http://codecandies.de/2008/03/20/telefonat/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 11:18:33 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[projekte]]></category>

		<guid isPermaLink="false">http://codecandies.de/2008/03/20/telefonat/</guid>
		<description><![CDATA[Selten so gelacht.]]></description>
			<content:encoded><![CDATA[<p><a href="http://codecandies.stripgenerator.com/2008/03/20/qualitymanagement.html" title="Stripgenerator Blog von Codecandies"><img src="http://codecandies.de/wp-content/uploads/iw/ZZ2B338451.jpg" width="440" height="230" alt="Stripgenerator" /></a></p>
<p>Selten so gelacht.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/03/20/telefonat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The question is what is the question</title>
		<link>http://codecandies.de/2008/03/09/the-question-is-what-is-the-question/</link>
		<comments>http://codecandies.de/2008/03/09/the-question-is-what-is-the-question/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 22:39:02 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[projekte]]></category>

		<guid isPermaLink="false">http://codecandies.de/2008/03/09/the-question-is-what-is-the-question/</guid>
		<description><![CDATA[why are we doing this? what problem are we solving? is this actually useful? are we adding value? will this…]]></description>
			<content:encoded><![CDATA[<blockquote><ul>
<li>why are we doing this?</li>
<li>what problem are we solving?</li>
<li>is this actually useful?</li>
<li>are we adding value?</li>
<li>will this change behavior?</li>
<li>is there an easier way?</li>
<li>what&#8217;s the opportunity cost?</li>
<li>is it really worth it?</li>
</ul>
</blockquote>
<p><cite>Jason Fried</cite> von 37signal, via <a href="http://www.readwriteweb.com/archives/sxsw_lessons_learned_at_37signals.php">hier sozusagen</a>. Auch mal als Antwort <a href="http://anmutunddemut.de/node/5836">hierzu</a> zu verstehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2008/03/09/the-question-is-what-is-the-question/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Just for the record</title>
		<link>http://codecandies.de/2007/08/21/just-for-the-record/</link>
		<comments>http://codecandies.de/2007/08/21/just-for-the-record/#comments</comments>
		<pubDate>Tue, 21 Aug 2007 07:16:31 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://codecandies.de/2007/08/21/just-for-the-record/</guid>
		<description><![CDATA[Dojo 0.9.0 freigegeben. Mehr im SitePen Blog.]]></description>
			<content:encoded><![CDATA[<p><a href="http://download.dojotoolkit.org/release-0.9.0">Dojo 0.9.0</a> freigegeben. Mehr im <a href="http://www.sitepen.com/blog/2007/08/20/dojo-09-released/">SitePen Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2007/08/21/just-for-the-record/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

