<?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>Netsetters weblog</title>
	<atom:link href="http://www.netsetters.nl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.netsetters.nl</link>
	<description>Programming, User Experience and IA</description>
	<lastBuildDate>Tue, 27 Jul 2010 12:02:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>IPad HTML5 magazine, deel 1</title>
		<link>http://www.netsetters.nl/2010/07/ipad-html5-magazine-deel-1/</link>
		<comments>http://www.netsetters.nl/2010/07/ipad-html5-magazine-deel-1/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 22:01:43 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[trends]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[e-book]]></category>
		<category><![CDATA[Ext (JavaScript library)]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[magazine]]></category>
		<category><![CDATA[sencha]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=374</guid>
		<description><![CDATA[Zoals al eerder vermeld is de iPad 'hot' binnen ons klantenbestand. Ik denk dat ik de afgelopen 3 maanden (we hebben al enige tijd van die pads liggen) al heel wat demo's en concepten gemaakt. Toch lijkt het enthausiasme waarmee men begint al snel te verstompen. Het maken van zo'n magazine is namelijk "verdomt veel werk"]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F07%2Fipad-html5-magazine-deel-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F07%2Fipad-html5-magazine-deel-1%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 235px;">
<dt class="wp-caption-dt"><a href="http://commons.wikipedia.org/wiki/File:IPad_wordmark.svg"><img title="iPad wordmark" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/IPad_wordmark.svg/225px-IPad_wordmark.svg.png" alt="iPad wordmark" width="225" height="105" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via <a href="http://commons.wikipedia.org/wiki/File:IPad_wordmark.svg">Wikipedia</a></dd>
</dl>
</div>
</div>
<p>Zoals al eerder vermeld is de iPad &#8216;hot&#8217; binnen ons klantenbestand. Ik heb de afgelopen 3 maanden (we hebben al enige tijd van die pads liggen) al heel wat demo&#8217;s en concepten gemaakt. Toch lijkt het enthausiasme waarmee men begint al snel te verstompen. Het maken van zo&#8217;n magazine is namelijk &#8220;verdomt veel werk&#8221;<span id="more-374"></span></p>
<h2>Deze kans laten we niet liggen</h2>
<p>Toen de muziekindustrie  met de digitalisering niet in zag dat het &#8220;iets&#8221; zou kunnen worden is het een van de grootste missers ooit gebleken. Toen de e-readers uitkwamen waren de boekwinkels die vooraan stonden om het te promoten:</p>
<blockquote>
<p style="text-align: center;"><em><span style="color: #800080;"><strong>&#8220;Als het dan digitaal wordt, dan wel via onze kassa&#8221;</strong></span></em></p>
</blockquote>
<p>Het resultaat is bekend. Amazon verkoopt op dit moment <a title="amazon digital sales" href="http://www.nytimes.com/2010/07/20/technology/20kindle.html" target="_blank">meer digitale boeken dan papieren</a> en heeft er uiteindelijk goed aan kunnen verdienen. Ook Bol.com, Ebook.nl en Selexyz doen het <a title="emmerce, einde van het papieren boek" href="http://www.emerce.nl/nieuws.jsp?id=3051437&amp;;" target="_blank">goed met de verkoop</a> van hun digitale boek. Er was helaas 1 grote markt waar de Ebookk niet geschikt voor was; de magazines.</p>
<h2>Ipad als e-reader voor magazines</h2>
<p>Met de komst van de iPad was de magazine-markt enorm enthousiast. Dit was waar ze allen op hoopten; Het enorme succes van de digitale boekenverkoop zou eindelijk naar de magazines komen. Dit kon wel eens de comeback zijn voor de teruglopende verkopen van de magazines. Al snel doken de eerste concepten op. Maar het enthousiasme verstompte al snel. De gemaakte magazines waren meestal niet meer dan veredelde slideshows. Daarnaast waren het grotendeels concepten en is er bijna geen enkel magazine dat er echt een reguliere digitale uitgave op nahoud.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="329" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/VFb1DXoCbiY" /><embed type="application/x-shockwave-flash" width="400" height="329" src="http://www.youtube.com/v/VFb1DXoCbiY"></embed></object></p>
<h2>Waarom de iPad Magazine (nog) niet werkt</h2>
<p>Het uitblijven van goede magazines voor de iPad heeft te maken met enkele  punten:</p>
<h3>1. Workflow</h3>
<p>Een e-book is eenvoudig gemaakt. Het is een directe kopie van het boek op een apparaatje. Het grote verkoopargument is dat je een enorme stapel boeken kwijt kan in 1 klein plat ding. Ideaal voor vakantie en in je boekenkast.  Je doet vrij lang over een boek en leest van bladzijde 1 tot de laatste bladzijde 1 voor 1  de pagina&#8217;s door. Daarom is het eenvoudig de workflow van het uitbrengen van een  boek om te zetten naar een e-book. Een magazine daarentegen heeft een entertainment waarde en lees je van achter naar voor en weer terug. Elke pagina heeft een andere opmaak en veel beeldmateriaal. De digitale versie moet die entertainment waarde ook in zich hebben door middel van video, foto&#8217;s en geluid. Dit vereist een heel andere workflow dan het uitbrengen van een magazine.</p>
<h3>2.Distributie</h3>
<p>In het aller-ergste geval kom je niet door de selectie van Apple. Dan is het direct afgelopen en kan je de ontwikkeltijd nergens meer op terugverdienen. In een minder erg geval kom je wel door de selectie heen en kan je de eerste magazine in de &#8220;store&#8221; zetten. Waarbij je nooit  meer dan de magazine prijs kan vragen, maar wel 40% mag afdragen. Daarnaast kost het gelijk zoveel (of meer) werk dan de &#8220;analoge&#8221; versie. Dan zijn we weer een half jaar verder, en komen er 6 tablets op de markt op basis van Android, en dan begint het hele ontwikkel-proces weer van voor af aan, want waarom zou je deze markt laten liggen? Daarnaast nog de vraag hoe je een maandelijks magazine elke maand gaat aanbieden. Abonnementen zijn moeilijk voor elkaar te krijgen in de store, en klant-beheer is een drama.</p>
<h3>3. Identiteit</h3>
<p>Ben je net lekker bezig met  het maken van een demo van een iPad magazine; Touch effecten er in. Stukken tekst. Mooie thumbnails voor de index en trots laat je het je collega zien&#8230; en dan komt DE opmerking:</p>
<p style="text-align: center;"><span style="color: #800080;"><strong>&#8220;Maar is het niet eigenlijk net een website?&#8221;</strong></span></p>
<p style="text-align: left;"><span style="color: #000000;">En dan zak je heel even door  de grond&#8230;</span></p>
<h2><span style="color: #000000;">Hoe bouw je het ideale iPad magazine?</span></h2>
<p style="text-align: left;"><span style="color: #800080;"><span style="color: #000000;">Bovenstaand opmerking heeft me enorm veel aan het denken gezet: In hoeverre is een Ipad magazine eigenlijk een website? Als je een website optimaliseert voor iPad gebruik, of welk ander tablet apparaat dan ook. Kan het er dan door voor een magazine? Safari bied mij HTML5, touch gestures, lokale opslag, geografische data en veel meer.  Wat heb ik meer nodig. Daarbij heb ik de distributie  zelf in de hand en zit ik  niet vast aan 1 apparaat. Vanaf toen wist ik het zeker.</span></span></p>
<p style="text-align: center;"><span style="color: #800080;"><em><strong>Het Ideale iPad magazine is een website!</strong></em></span></p>
<p style="text-align: left;"><span style="color: #800080;"><strong><em><span style="color: #000000;"><span style="font-style: normal; font-weight: normal;"><span style="color: #000000;">Mijn vorige post over de ingebouwde html en javascript functies van Safari mobile (<a title="Safari tips voor iPhone en iPad" href="http://www.netsetters.nl/2010/06/safari-tips-voor-iphone-en-ipad-ios/" target="_blank">Safari tips voor iPhone en iPad</a>) ging al over enkele nuttige truuks om je website als applicatie te kunnen laten draaien. Nu heeft het team van <a class="zem_slink" title="Ext (JavaScript library)" rel="homepage" href="http://extjs.com/">Ext JS</a> ook nog een javascript library gemaakt voor Android en iOS4: <strong><a title="sencha touch" href="http://www.sencha.com/" target="_blank">Sencha Touch</a><span style="font-weight: normal;">. Door middel van deze mogelijkheden voelt en oogt je iPad website als een applicatie, zonder de beperkingen van en applicatie.</span><br />
</strong></span></span></span></em></strong></span></p>
<p style="text-align: left;"><span style="color: #800080;"><em><span style="color: #000000;"><span style="font-style: normal; font-weight: normal;"><span style="color: #000000;">Ik ben zelf enorm blij met deze ontwikkeling, en probeer nu de eerste demo&#8217;s af te krijgen, zonder store, zonder beperking maar met identiteit. </span></span></span></em></span></p>
<p style="text-align: left;"><span style="color: #800080;"><em><span style="color: #000000;"><span style="color: #000000;">wordt vervolgd&#8230;.</span></span></em></span></p>
<p style="text-align: center;">
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://www.intomobile.com/2010/07/26/flipboard-turns-your-ipad-into-a-social-magazine/">Flipboard turns your iPad into a social magazine</a> (intomobile.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.electronista.com/articles/10/07/23/youtube.to.make.html5.embedded.clips.feasible/">YouTube tests simultaneous Flash, HTML5 video embeds</a> (electronista.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.gizmodo.com.au/2010/07/barnes-noble-ipad-app-adds-blessed-brightness-controls/">Barnes &amp; Noble iPad App Adds Blessed Brightness Controls</a> (gizmodo.com.au)</li>
<li class="zemanta-article-ul-li"><a href="http://themactrack.com/2010/07/26/introducing-spectra-magazine-for-ereaders/">Introducing Spectra Magazine for eReaders</a> (themactrack.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.macstories.net/ipad/issuu/">Issuu Updated for HTML5 iPad Reading</a> (macstories.net)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=4e8685e3-4d60-4db4-a142-cea699d4cca5" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=374&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/07/ipad-html5-magazine-deel-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safari tips voor IPhone en IPad (iOS)</title>
		<link>http://www.netsetters.nl/2010/06/safari-tips-voor-iphone-en-ipad-ios/</link>
		<comments>http://www.netsetters.nl/2010/06/safari-tips-voor-iphone-en-ipad-ios/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 20:55:07 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[visualisation]]></category>
		<category><![CDATA[Apple Inc.]]></category>
		<category><![CDATA[Data Formats]]></category>
		<category><![CDATA[FAQs Help and Tutorials]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Markup Languages]]></category>
		<category><![CDATA[mobiele applicaties]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Safari Mobile]]></category>
		<category><![CDATA[Web application]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=363</guid>
		<description><![CDATA[Ondertussen zijn wij ook mee gaan doen met de IPad gekte. Maar voordat je apps gaat ontwikkelen zijn er al heel wat mogelijkheden in de browser van deze aparaten. Safari biedt voor web-applicatie ontwikkelaars speciale tags. Hierdoor kunnen we applicaties ontwikkelen en deze via de website gelijk aanbieden, zonder gebruik te maken van de appstore.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F06%2Fsafari-tips-voor-iphone-en-ipad-ios%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F06%2Fsafari-tips-voor-iphone-en-ipad-ios%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 210px;">
<dt class="wp-caption-dt"><a href="http://commons.wikipedia.org/wiki/File:Apple_iPad_Event03.jpg"><img title="iPad with on display keyboard" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Apple_iPad_Event03.jpg/300px-Apple_iPad_Event03.jpg" alt="iPad with on display keyboard" width="200" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via <a href="http://commons.wikipedia.org/wiki/File:Apple_iPad_Event03.jpg">Wikipedia</a></dd>
</dl>
</div>
</div>
<p>Ondertussen zijn wij ook mee gaan doen met de IPad gekte. Maar voordat je apps gaat ontwikkelen zijn er al heel wat mogelijkheden in de browser van deze aparaten. Safari biedt voor web-applicatie ontwikkelaars speciale tags. Hierdoor kunnen we applicaties ontwikkelen en deze via de website gelijk aanbieden, zonder gebruik te maken van de appstore.</p>
<p><span id="more-363"></span></p>
<h2>Ken het plusje</h2>
<p>Op de IPad in de Safari-browser zit een plus icoontje, hiermee kan je een webpagina snelkoppeling op je &#8216;desktop&#8217; zetten.  Naast dat het erg handig is dat je snel een webpagina op kan roepen, geeft het je ok de mogelijkheid om een applicatie bijna &#8216;native&#8217; te laten draaien op je IPad.</p>
<h2>Maak zelf je desktop icoon</h2>
<p>Door middel van <strong>apple-touch-icon</strong> link kan je een icoon aangeven die gebruikt wordt als snelkoppeling. Het icoon moet een <strong>PNG</strong> zijn van <strong>45px </strong>bij <strong>45px</strong>. Deze kan je daarna linken in de head van je pagina.</p>
<pre class="brush: xml;">
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/apple-touch-icon.png&quot; /&gt;
</pre>
<p>Apple gooit er automatisch een glas-effect overheen, wil je dit niet hebben gebruik dan <strong>apple-touch-icon-precomposed</strong></p>
<pre class="brush: xml;">
&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;/apple-touch-icon.png&quot; /&gt;
</pre>
<h2>Web-applicatie Full Screen op je IPhone en IPad</h2>
<p>Door de volgende meta informatie te plaatsen in je &lt;head&gt; van je website kan je de applicatie fullscreen zonder zichtbaar browserscherm laten draaien nadat deze is toegevoegd aan de &#8216;desktop&#8217; met het plusje.</p>
<pre class="brush: xml;">&lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot;&gt;</pre>
<p>Door de waarde van <strong>apple-mobile-web-app-capable</strong> op &#8220;yes&#8221; te zetten zal de applicatie op fullscreen draaien. Hierdoor zal het op een volwaardige applicatie lijken. Je kan in je javascript ook kijken of een pagina in fullscreenmode draaid (en daar je inhoud of css op aanpassen) door gebruik te maken van de <strong>window.navigator.standalone</strong> boolean waarde.</p>
<pre class="brush: jscript;">
if(window.navigator.standalone) {
	alert(&quot;ik draai fullscreen als applicatie&quot;);
} else {
	alert(&quot;ik draai in een browser&quot;);
}
</pre>
<h2>Negeer de automatische telefoonnummer links</h2>
<p>Als je al eens een web-applicatie  of website voor de IPhone of IPad ebt gemaakt zal je zien dat alle op telefoonnummer lijkende nummerreeksen als bel-link worden aangemaakt. Hierdoor kan je direct eenn telefoonnummer bellen als  deze in een website staat. Dit kan erg handig zijn, maar soms wil je niet dat dit gedrag voorkomt. Daarvoor is ook een meta-tag.</p>
<pre class="brush: xml;">
&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot;&gt;
</pre>
<p>Door de <strong>format-detecion</strong> waarde op &#8220;no&#8221; te zetten voorkom je dat de telefoonnummers (of daarop gelijkende nummer-reeksen) automatisch worden gelinkt. Mocht je dan onverhoopt toch een telefoonnummer willen linken kan dat altijd nog door middel van een normale link.</p>
<pre class="brush: xml;">
&lt;a href=&quot;tel:0111-422622&quot;&gt;0111-422622&lt;/a&gt;
</pre>
<h2>Kies zelf je toetsenbord</h2>
<p>Op de iphone en IPad heb je verschillende toetsenborden. Om snel de goede toetsenborden tevoorschijn te toveren kna je ook gebruikmaken</p>
<pre class="brush: xml;">
Tekst: &lt;input type=&quot;text&quot; /&gt; &lt;!-- standaard toetsenbord --&gt;
Telefoon: &lt;input type=&quot;tel&quot; /&gt; &lt;!-- telefoon toetsenbord --&gt;
Homepage: &lt;input type=&quot;url&quot; /&gt; &lt;!-- web-adres toetsenbord --&gt;
E-mail: &lt;input type=&quot;email&quot; /&gt; &lt;!-- e-mail toetsenbord --&gt;
Leeftijd: &lt;input type=&quot;text&quot; pattern=&quot;[0-9]*&quot; /&gt; &lt;!-- numeriek toetsenbord --&gt;
</pre>
<p>Ook kan je de automatische tekstcorrectie uitzetten voor input velden:</p>
<pre class="brush: xml;">
&lt;input type=&quot;text&quot; autocorrect=&quot;off&quot; /&gt;
</pre>
<h2>Draaien met het scherm</h2>
<p>Het kan zijn dat je web-applicatie zich moet aanpassen als het apparaat wordt gedraaid, en daardoor het formaat van je scherm anders wordt. Hierdoor moet je soms veranderingen in je css of javascript doorvoeren. Daarom bestaan er in Safari Mobile verschillende methoden om hiermee om ta gaan. Allereerst is er het event, onorientationchange, hiermee kan je een bepaalde functie aanroepen als de oriëntatie van de pagina wordt veranderd.</p>
<pre class="brush: xml;">
&lt;body onorientationchange=&quot;myOrientationChangeFunction()&quot;&gt;
</pre>
<p>In javascript kan de oriëntatie van het  scherm worden opgevraagd door middel van de window.orientation:</p>
<ul>
<li>window.orientation is 0 wanneer het apparaat verticaal wordt gehouden</li>
<li>window.orientation is 90 wanneer het apparaat 90 graden naar links (tegen de klok in) is gedraaid (horizontaal).</li>
<li>window.orientation is -90 wanneer het apparaat 90 graden naar rechts (met de klok mee) is gedraaid (horizontaal).</li>
</ul>
<p>Ook kan je css file worden aangepast op je scherm oriëntatie:</p>
<pre class="brush: xml;">
&lt;link rel=&quot;stylesheet&quot; media=&quot;all and (orientation:portrait)&quot; href=&quot;portrait.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; media=&quot;all and (orientation:landscape)&quot; href=&quot;landscape.css&quot;&gt;
</pre>
<h2>(automatisch) zoomen; de viewport</h2>
<p>Je IPhone of IPad zal een website proberen te schalen zodat deze het beste zichtbaar is. Deze berekening van de viewport kan soms irritant zijn. Daarom kan je de initiële schaal vastzetten. Dit kan bijvoorbeeld op de breedte van ht scherm</p>
<pre class="brush: xml;">
&lt;meta name = &quot;viewport&quot; content = &quot;width = device-width&quot;&gt;
</pre>
<p>Of zet de breedte op 100% , dan maak je geen gebruik van de automatische zoom</p>
<pre class="brush: xml;">
&lt;meta name = &quot;viewport&quot; content = &quot;initial-scale = 1.0&quot;&gt;
</pre>
<p>Daarnaast kan je er ook nog voor zorgen dat de gebruiker niet kan in- of uit-zoomen en een vaste initiële zoom van 230%</p>
<pre class="brush: xml;">
&lt;meta name = &quot;viewport&quot; content = &quot;initial-scale = 2.3, user-scalable = no&quot;&gt;
</pre>
<h2>Nog meer mogelijkheden op IPhone en IPad</h2>
<p>Naast deze meest gebruikte technieken bestaan er nog meer eigenschappen specifiek voor de mobile versie van Safari op iOS. Bovenstaande technieken zullen ook de discussie aanwakkeren of  het wel nodig is om een applicatie via de Appstore toe te voegen. Soms is het namelijk veel handige om de web-applicatie direct via de website aan te biden als link.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://zef.me/3323/safari-5-html5-faster-js-reader">Safari 5: HTML5, Faster JS, Reader</a> (zef.me)</li>
<li class="zemanta-article-ul-li"><a href="http://news.cnet.com/8301-13579_3-20006810-37.html?part=rss&amp;subj=news&amp;tag=2547-1_3-0-20">Apple posts HTML 5 demo page</a> (news.cnet.com)</li>
<li class="zemanta-article-ul-li"><a href="http://mashable.com/2010/06/04/apple-html5-showcase/">Apple Shows Us What HTML5 Can Do</a> (mashable.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.lockergnome.com/it/2010/06/04/html5-to-apple-youre-doing-it-wrong/">HTML5 To Apple, You&#8217;re Doing It Wrong</a> (lockergnome.com)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=02e395cb-0add-4233-912d-935a86ea741c" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=363&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/06/safari-tips-voor-iphone-en-ipad-ios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS Pseudo classes</title>
		<link>http://www.netsetters.nl/2010/06/css-pseudo-classes/</link>
		<comments>http://www.netsetters.nl/2010/06/css-pseudo-classes/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 20:37:31 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[trends]]></category>
		<category><![CDATA[visualisation]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Data Formats]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Style Sheets]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=356</guid>
		<description><![CDATA[Image via Wikipedia Dit keer een kort stukje over een klein maar waardevolle mogelijkheden in CSS: Pseudo Classes. Pseudo classen worden gebruikt om een bepaald  effect aan een selector mee te geven. Het bekendste pseudo-class is wel de :hover die al aardig ingeburgerd is in het css gebruik. Met :hover kan je bijvoorbeeld  een link [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F06%2Fcss-pseudo-classes%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F06%2Fcss-pseudo-classes%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 210px;">
<dt class="wp-caption-dt"><a href="http://commons.wikipedia.org/wiki/File:CSS.svg"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/CSS.svg/275px-CSS.svg.png" alt="" width="200" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via <a href="http://commons.wikipedia.org/wiki/File:CSS.svg">Wikipedia</a></dd>
</dl>
</div>
</div>
<p>Dit keer een kort stukje over een klein maar waardevolle mogelijkheden in CSS: Pseudo Classes. Pseudo classen worden gebruikt om een bepaald  effect aan een selector mee te geven. Het bekendste pseudo-class is wel de :hover die al aardig ingeburgerd is in het css gebruik. Met :hover kan je bijvoorbeeld  een link een andere css class geven als je er met de muis overheen beweegt. Recent zijn er enkele classen bijgekomen, zo ook de :before en :after elementen<br />
<span id="more-356"></span></p>
<h2>Compatibility  van de nieuwe pseudo classen</h2>
<p>Zoals zo vaak behandel ik alleen nieuwe technieken die aardig worden ondersteund door modernere browsers. Zo kunnen deze nieuwe pseudo classen worden gebruikt in de huidige versies van alle browsers. In Internet Explorer 7 waren deze nog niet aanwezig, maar in 8 zit de functionaliteit er volledig in. Ook Chrome, Safari, Firefox en Opera doen ondersteuenen al een tijdje deze classen.</p>
<h2>Gebruik van pseudo classes</h2>
<p>Pseudo classes kunnen gebruikt worden op bijna alle CSS classes door gebruik te maken van een dubbele punt (&#8220;:&#8221;) en de naam van de pseudo class. Net als de bekende  :hover. Bijvoorbeeld:</p>
<pre class="brush: css;">
a:hover {color:red;}
</pre>
<h2>Pak het eerste kind met :first-child</h2>
<p>Soms moet je binnen een pagina elk eerste element anders stijlen dan de rest. Daarvoor bestaat er first-child. Hiermee pak je van de genoemde classe het eerste element. Zo kan je bijvoorbeeld elke eerste paragraaf binnen een document een afwijkende stijl geven</p>
<pre class="brush: css;">
p:first-child {
	font-style: oblique;
}
</pre>
<p>Zo kunnen ook eerste elementen in een lijst of rij in tabel een afwijkende stijl worden gegeven. In dat geval veranderd er wel iets, omdat het hoofdelement meerdere malen voor kan komen. In dit geval geven we aan dat er (eventueel) meerdere tabellen zijn in de css met de volgende code:</p>
<pre class="brush: css;">
table &gt; tr:first-child {
    font-weight:bold;
}
</pre>
<p>Andersom kunnen ook alle  tr in alleen de eerste table een stijl meegegeven worden</p>
<pre class="brush: css;">
table:first-child tr {
    font-weight:bold;
}
</pre>
<h2>:before en :after css elementen</h2>
<p>Ook een handige en nog niet veel gebruikte CSS elementen zijn de :before en :after pseudo elementen. Hiermee kan er voor of na het betreffende element een stuk inhoud worden toegevoegd.  Wil je bijvoorbeeld voor elke quote een tekstje &#8220;quote:&#8221; dan kan dat door middel van css.</p>
<pre class="brush: css;">
q:before {
	content: &quot;Quote:&quot;;
}
</pre>
<p>Dan kunnen we ook nog aanhalingstekens om het geheel heen plaatsen (let op dat deze wel &#8220;ge-escaped&#8221; moeten worden, de backslash geeft aan dat de quote lettterlijk genomen moet worden en niet het inde van de tekst is.)</p>
<pre class="brush: css;">
q:before {
	content: &quot;Quote: \&quot; &quot;;
}

q:after {
	content: &quot;\&quot; &quot;
}
</pre>
<p>Het is ook mogelijk om afbeeldingen mee te geven aan het begin of einde van een element. Bijvoorbeeld een plaatje voor elke paragraaf. Of alleen de eerste paragraaf in combinatie met first-child.</p>
<pre class="brush: css;">
/* Plaatje voor elke paragraaf */
p:before {
	content: url(/images/mijn_image.gif);
}

/* alleen voor de eerste paragraaf */
p:first-child:before {
	content: url(/images/mijn_image.gif);
}
</pre>
<h2>De :lang pseudo class</h2>
<p>Voor ontwikkelaars die zich moeten richten op websites in verschillende talen geeft CSS tegenwoordig wat meer hulpmiddelen in de vorm van bijvoorbeeld de :lang pseudo classe. Hiermee kan er een regel worden gezet voor een bepaalde taal. Laten we voor Nederlanders de tekst maar oranje maken <img src='http://www.netsetters.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: css;">
p:lang(nl) {
	color:#FF6633;
}
</pre>
<p>Natuurlijk zijn er ook betere toepassingen, zoals in Noorwegen gebruiken ze het bekende &#8220;golfje&#8221;  als teken voor quotes. Nu kunnen we in combinatie met de :before en :after classe van hierboven makkelijk alle quotes voorzien van andere tekens.</p>
<pre class="brush: css;">
/* eerst de 'normale situatie zetten */
q:before {
	content: &quot;\&quot; &quot;;
}

q:after {
	content: &quot; \&quot; &quot;;
}

/* alleen voor de Noorse lezers */
q:before {
	content: &quot; ~&quot;;
}

q:after {
	content: &quot;~ &quot;;
}
</pre>
<p>Dit kan ook korter met de quotes declaratie</p>
<pre class="brush: css;">
q:lang(no) {
	quotes: &quot;~&quot; &quot;~&quot;;
}
</pre>
<h2>:first-line en :first-letter classe</h2>
<p>Als laatste wil ik de :first-line en :first-letter elementen bespreken. Hiermee kan je de eerste regel of eerste letter van een element een stijl geven. Als je de eerste regel van paragraven dik gedrukt wilt hebben en de eerste letter een stuk groter (zoals de oude monnik boekwerken), dan is dit kinderlijk eenvoudig met deze pseudo-elementen.</p>
<pre class="brush: css;">
p:first-line {
	font-weight: bold;
}

p:first-letter {
	font-size: 50px;
}
</pre>
<p>Let wel op dat de eerste regel de eerste <strong>visuele</strong> is. CSS herkent geen punten maar wacht tot een regelomhaal. Dat is dus de eerste <code><br />
</code> of automatische regelomhaal omdat de container te klein is.</p>
<h2>Doe meer met CSS</h2>
<p>Zoals je kan zien is er met  CSS steeds meer mogelijk. Een logisch vervolg van het belangrijker worden van de client-side en front-end programmeren. HTML5, CSS3 en javascript gaan hand  in hand samen deze ontwikkeling door. Een ontwikkeling waardoor wij straks steeds meer applicaties web-based kunnen maken, maar dat web-based applicaties ook steeds meer gebruik kunnen gaan maken van de client.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://tc.eserver.org/36636.html">The Mysterious Pseudo Class in CSS</a> (tc.eserver.org)</li>
<li class="zemanta-article-ul-li"><a href="http://www.lukew.com/ff/entry.asp?1106">An Event Apart: Object Oriented CSS</a> (lukew.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.smashingmagazine.com/2010/06/10/50-new-useful-css-techniques-tools-and-tutorials/">50 New Useful CSS Techniques, Tools and Tutorials</a> (smashingmagazine.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.downloadsquad.com/2010/06/10/when-can-i-use-is-a-great-resource-for-browser-compatibility/">When can I use &#8230; is a great resource for browser compatibility advice</a> (downloadsquad.com)</li>
</ul>
<table>
<tbody></tbody>
</table>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=4159c16c-6f18-4518-87ee-0bb9b06e62cc" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=356&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/06/css-pseudo-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 contenteditable: Pas tekstblokken direct aan.</title>
		<link>http://www.netsetters.nl/2010/05/html5-contenteditable-pas-tekstblokken-direct-aan/</link>
		<comments>http://www.netsetters.nl/2010/05/html5-contenteditable-pas-tekstblokken-direct-aan/#comments</comments>
		<pubDate>Wed, 26 May 2010 07:58:32 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[data]]></category>
		<category><![CDATA[trends]]></category>
		<category><![CDATA[visualisation]]></category>
		<category><![CDATA[Font family]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[HTML element]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=340</guid>
		<description><![CDATA[Ooit de drang gehad om een tekstblok binnen een website even snel aan te passen. In de reeks HTML5 blog-items nu dan plaats voor  contenteditable. Met contenteditable kan je tekst binnen bijvoorbeeld een div direct aanpasbaar laten zijn, zonder input-veld of textarea.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-contenteditable-pas-tekstblokken-direct-aan%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-contenteditable-pas-tekstblokken-direct-aan%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 250px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/54772696@N00/3761420237"><img title="Dabbling with HTML5" src="http://farm3.static.flickr.com/2491/3761420237_fcb8948eb1_m.jpg" alt="Dabbling with HTML5" width="240" height="133" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/54772696@N00/3761420237">Marc Amos</a> via Flickr</dd>
</dl>
</div>
</div>
<p>Ooit de drang gehad om een tekstblok binnen een website even snel aan te passen? In de reeks <a title="html5" href="http://www.netsetters.nl/tag/html5/" target="_self">HTML5</a> blog-items nu dan plaats voor  contenteditable. Met contenteditable kan je tekst binnen bijvoorbeeld een div direct aanpasbaar laten zijn, zonder input-veld of textarea.<span id="more-340"></span></p>
<h2>Contenteditable toepassingen</h2>
<p>Van veel html5 toepassingen wist ik meteen een manier hoe deze in te zetten. Opslag met <a title="html5 local storage" href="http://www.netsetters.nl/2010/05/html5-offline-opslag-met-local-storage" target="_blank">Local Storage</a>, <a title="getcurrentlocation html5" href="http://www.netsetters.nl/2010/05/html5-localisation-vraag-de-locatie-op-in-de-browser-met-getcurrentlocation/" target="_blank">get current location</a>, <a title="Canvas html5 element" href="http://www.netsetters.nl/2010/05/html5-het-canvas-element/" target="_blank">Canvas</a> en <a title="font-face html5 css3" href="http://www.netsetters.nl/2010/05/css3-gebruik-van-lettertypen-op-het-web-met-font-face/" target="_blank">font-face </a>zijn direct toepasbaar en een meerwaarde voor applicaties waar ik aan werk. Voor contenteditable heb ik eerst enkele malen moeten nadenken. Allereerst zou het natuurlijk perfect werken voor CMS systemen, amar daar verlang je al snel een rich text editor voor het toevoegen van stijlen, en grafische elementen. Voor formulieren zou het ook kunnen , maar is dat er nou voor gemaakt. Toch zit de bruikbaarheid van dit element hem het meest in de combinatie met andere elementen zoals local storage.</p>
<h2>Compatibility van contenteditable</h2>
<p>Contenteditable is te gebruiken in de huidige versies van alle browsers en lijkt het meest compatible html5 element te zijn. Ook in Internet Explorer 7 werkt het naar behoren. Opera, Chrome, Safari en Firefox ondersteunen allemaal het contenteditable element. Zie de vergelijking op <a title="browser html5 compatible" href="http://caniuse.com/#agents=All&amp;eras=All&amp;cats=HTML5&amp;statuses=rec,pr,cr,wd,ietf" target="_blank">caniuse.com</a></p>
<h2>Welke elementen kunnen worden aangepast met contenteditbale</h2>
<p>contenteditable is een nieuw attribuut van html5 en is bruikbaar in de meeste tekst-containers. Zo kunnen ze gebruikit worden in:</p>
<ul>
<li>div</li>
<li>section</li>
<li>a</li>
<li>h1 tot h6</li>
<li>ul, li etc</li>
<li>span</li>
</ul>
<p>Natuurlijk is het ook te gebruiken in bijvoorbeeld body of table, maar op die manier is er dus weinig controle over het aanpasbare element.</p>
<h2>Gebruik van contenteditable</h2>
<p>Hieronder een code voorbeeld van het gebruik van het contenteditbale attribuut.</p>
<pre class="brush: xml;">

   &lt;section id=&quot;wrapper&quot;&gt;
      &lt;header&gt;
         &lt;h1&gt;ContentEditable&lt;/h1&gt;
      &lt;/header&gt;
      &lt;article&gt;
         &lt;section&gt;
            &lt;p&gt;De elementen met &lt;code&gt;contenteditable&lt;/code&gt; kunnen aangepast worden door de client in de browser.&lt;/p&gt;
         &lt;/section&gt;
         &lt;section contenteditable=&quot;true&quot;&gt;
             &lt;h2&gt;Deze kop is aanpasbaar&lt;/h2&gt;
             &lt;p&gt;De tekst in deze paragraaf is aanpasbaar&lt;/p&gt;
             &lt;ol&gt;
             &lt;li&gt;en deze lijst&lt;/li&gt;
             &lt;li&gt;is ook&lt;/li&gt;
             &lt;li&gt;aanpasbaar&lt;/li&gt;
             &lt;/ol&gt;
         &lt;/section&gt;
      &lt;/article&gt;
   &lt;/section&gt;
</pre>
<h2>Neemt stijl over van element</h2>
<p>Door bovenstaand voorbeeld te gebruiken kan je zien dat de tekst aan te passen is van elle elementen binnen de aanpasbare element. Je kan bepaalde elementen binnen het aanpasbare element uitzetten door bijvoorbeeld:</p>
<pre class="brush: xml;">
&lt;h1 contenteditable=&quot;false&quot;&gt;Kop is niet aan te passen&lt;/h1&gt;
</pre>
<p>In het aanpasbare element wordt de stijl van het omringende element over genomen. Zo blijft de list in bovenstaand voorbeeld een list, ook als er een enter wordt gegeven. Ook de paragraaf blijft de paragraaf en de kop blijft de kop. Er kan dus alleen binnen het element zelf aangepast worden. Er worden geen nieuwe elementen aangemaakt.</p>
<h2>Een demo van content editable</h2>
<p>Op de website van <a title="html5 contenteditble demo" href="http://html5demos.com/contenteditable" target="_blank">html5demos</a> staat een demo soortgelijk aan bovenstaande code. Door middel van javascript en css kan het content-veld worden aangepast zodra er op gefocust wordt, zodat het duidelijker is dat deze aan ta passen is.  Ook kan de inhoud van het editable deel  met een id worden opgehaald of gereset.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://www.slideshare.net/robnyman/javascript-html5-brave-new-world">JavaScript &amp; HTML5 &#8211; Brave New World</a> (slideshare.net)</li>
<li class="zemanta-article-ul-li"><a href="http://37signals.com/svn/posts/2338-html-5-for-web-designers-by-jeremy-keith">HTML 5 for Web Designers, by Jeremy Keith</a> (37signals.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.slideshare.net/derekbender/the-future-of-the-web-html5">The Future of the Web: HTML5</a> (slideshare.net)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/1076a8ac-5d0f-47d2-acc5-88ca2b8c57a5/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=1076a8ac-5d0f-47d2-acc5-88ca2b8c57a5" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=340&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/05/html5-contenteditable-pas-tekstblokken-direct-aan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3; gebruik van lettertypen op het web met @font-face</title>
		<link>http://www.netsetters.nl/2010/05/css3-gebruik-van-lettertypen-op-het-web-met-font-face/</link>
		<comments>http://www.netsetters.nl/2010/05/css3-gebruik-van-lettertypen-op-het-web-met-font-face/#comments</comments>
		<pubDate>Sat, 22 May 2010 21:23:19 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[trends]]></category>
		<category><![CDATA[visualisation]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[OpenType]]></category>
		<category><![CDATA[Sans-serif]]></category>
		<category><![CDATA[Typeface]]></category>
		<category><![CDATA[Web typography]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=331</guid>
		<description><![CDATA[Het gebruik van lettertypen op het web is meestal vrij saai. Ik heb enorm vaak een (web) designer het standaard lijstje met de web-safe fonts  door moeten sturen. Dit beperkt het design en de vrijheid van de designer enorm. Een alternatief is om de tekst als plaatje te serveren, maar dit gaat ten koste van indexering en accesability. Maar er is nu een makkelijke en enorm bruikbare methode om fonts te 'embedden' in je webpagina: @font-face]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fcss3-gebruik-van-lettertypen-op-het-web-met-font-face%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fcss3-gebruik-van-lettertypen-op-het-web-met-font-face%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 250px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/27741269@N00/3592534418"><img title="Opera 10 Beta @font-face test" src="http://farm4.static.flickr.com/3565/3592534418_4f8e63aa02_m.jpg" alt="Opera 10 Beta @font-face test" width="240" height="124" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/27741269@N00/3592534418">Rodrigo Galindez</a> via Flickr</dd>
</dl>
</div>
</div>
<p>Het gebruik van lettertypen op het web is meestal vrij saai. Ik heb enorm vaak een (web) designer het standaard lijstje met de <a class="zem_slink" title="Web typography" rel="wikipedia" href="http://en.wikipedia.org/wiki/Web_typography">web-safe fonts</a> door moeten sturen. Dit beperkt het design en de vrijheid van de designer enorm. Een alternatief is om de tekst als plaatje te serveren, maar dit gaat ten koste van indexering en accesability. Maar er is nu een makkelijke en enorm bruikbare methode om fonts te &#8216;embedden&#8217; in je webpagina: @font-face<span id="more-331"></span></p>
<h2>Het font staat op de server</h2>
<p>Allereerst moet het lettertype aanwezig zijn op de web-server. Dit omdat de kans groot is dat de gebruiker het lettertype niet heeft geïnstalleerd. Let wel op de licentie van een font. Het feit dat deze via de website wordt gedistribueerd betekend eigenlijk dat je aan het delen bent.  De fonts die geïnstalleerd staan op je computer komen vaak samen met je OS, die heeft de licenties geregeld. Het is dus niet vanzelfsprekend dat deze fonts dan ook legaal gedeeld mogen worden. Een website waar enorm veel gratis en commercieel te gebruiken fonts staan in TreuType en in <a class="zem_slink" title="OpenType" rel="wikipedia" href="http://en.wikipedia.org/wiki/OpenType">OpenType</a> is <a title="font squirrel, free commercial fonts" href="http://www.fontsquirrel.com" target="_blank">Font Squirrel</a>. Nadat je het font hebt gedownload zet je deze op je webserver zodat je ze kan embedden met <a class="zem_slink" title="Cascading Style Sheets" rel="wikipedia" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a>.</p>
<h2>Gebruik van @font-face</h2>
<p>Door onderstaande code embed ik het lettertype Lobster 1.1. een font die open beschikbaar is en te vinden is op Font Squirrel. Het toegankelijk maken van het font doe ik in CSS.</p>
<pre class="brush: css;">
@font-face {
	font-family: 'Lobster1.1';
	src: url('/fonts/lobster_1.1_.otf') format('opentype');
}
</pre>
<p>Bovenstaande code pakt het bestand lobster_1.1_.otf uit de map fonts en noemt het Lobster 1.1. Hierna is het gebruik van het font hetzelfde als anders. Geef alle H1 koppen maar eens dit lettertype, maar zorg er voor dat browsers die incompatible zijn wel de tekst kunnen laten zien met een alternatief font.</p>
<pre class="brush: css;">
h1 {
    font-weight: normal;
    font-style: normal;
    line-height:normal;
    font-family: 'Lobster1.1', sans-serif;
    font-size:83px;
    color: #333333;
    }
</pre>
<h2>Meerdere malen @font-face gebruiken</h2>
<p>Je kunt dit zelfde meerdere malen doen. Je kan dus na eenmalig het font te embedden in alle CSS code er na hetzelfde font gebruiken. Ook kan het embedden van meerdere font gewoon gebeuren door meerder malen @font-face te gebruiken.</p>
<pre class="brush: css;">
@font-face {
	font-family: 'Lobster1.1';
	src: url('../fonts/lobster_1.1_.otf') format('opentype');
	font-weight: normal;
	font-style: normal;
}

@font-face {
	font-family: 'Quicksand Book';
	src: url('../fonts/Quicksand_Book.otf') format('opentype');
	font-weight: normal;
	font-style: normal;
}

h1 {
    font-weight: normal;
    font-style: normal;
    line-height:normal;
    font-family: 'Lobster1.1', sans-serif;
    font-size:83px;
    color: #FFFFFF;
    margin:5px 0px;
    }

h2 {
    font-weight: normal;
    font-style: normal;
    line-height:normal;
    font-family: 'Lobster1.1', sans-serif;
    font-size:30px;
    color: #999999;
    margin:15px 0px 5px 0px;
    }

p   {
    font-weight: normal;
    font-style: normal;
    line-height:normal;
    font-family: 'Quicksand Book', sans-serif;
    font-size:13px;
    color: #000000;
    line-height:1.3em;
}
</pre>
<h2>Welke browsers zijn compatible met CSS3 font-face</h2>
<p>@font-face werkt goed in de huidige versies van Chrome, Opera, Safari en Firefox. Internet explorer ondersteunt alleen het EOT type font. Al met al dus geen exotische keus om een font te embedden. Vertel dat goede nieuws eens op een grafische afdeling en je zult vele glunderende gezichtjes zien.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html">Introducing the Google Font API &amp; Google Font Directory</a> (googlecode.blogspot.com)</li>
<li class="zemanta-article-ul-li"><a href="http://ajaxian.com/archives/2010-web-fonts-are-here-and-ready-to-use">2010: Web Fonts Are Here and Ready to Use</a> (ajaxian.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.wisdump.com/css/google-enters-the-font-face-business/">Google enters the @font-face business</a> (wisdump.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.macstories.net/ipad/typekit-ipad-and-web-fonts/">Typekit, iPad and Web Fonts</a> (macstories.net)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/eae22544-c065-48fa-9026-851b7a5c9488/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=eae22544-c065-48fa-9026-851b7a5c9488" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=331&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/05/css3-gebruik-van-lettertypen-op-het-web-met-font-face/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5: localisation. Vraag de locatie op in de browser met getCurrentLocation</title>
		<link>http://www.netsetters.nl/2010/05/html5-localisation-vraag-de-locatie-op-in-de-browser-met-getcurrentlocation/</link>
		<comments>http://www.netsetters.nl/2010/05/html5-localisation-vraag-de-locatie-op-in-de-browser-met-getcurrentlocation/#comments</comments>
		<pubDate>Fri, 21 May 2010 09:30:13 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[data]]></category>
		<category><![CDATA[logic]]></category>
		<category><![CDATA[trends]]></category>
		<category><![CDATA[visualisation]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Google Latitude]]></category>
		<category><![CDATA[GSM]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[mobiele applicaties]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[webapplicaties]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=320</guid>
		<description><![CDATA[Na het artikel over HTML5 Canvas en twee mogelijkheden voor lokale opslag (Local storage en Database Storage) ben ik lekker op dreef.  Daarom vandaag een stukje over geolocation. Met geolocation kunnen wij de locatie van iemand in de browser opvragen. Dit is uitermate geschikt voor mobiele toepassingen en het leveren van een gepersonaliseerde ervaring.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-localisation-vraag-de-locatie-op-in-de-browser-met-getcurrentlocation%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-localisation-vraag-de-locatie-op-in-de-browser-met-getcurrentlocation%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 170px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/35034363370@N01/4069862985"><img title="Geolocation" src="http://farm3.static.flickr.com/2634/4069862985_6afea51ae4_m.jpg" alt="Geolocation" width="160" height="240" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/35034363370@N01/4069862985">hawaii</a> via Flickr</dd>
</dl>
</div>
</div>
<p>Na het artikel over <a title="canvas element html5" href="http://www.netsetters.nl/2010/05/html5-het-canvas-element/" target="_self">HTML5 Canvas </a>en twee mogelijkheden voor lokale opslag (<a title="html5 local storage" href="http://www.netsetters.nl/2010/05/html5-offline-opslag-met-local-storage/" target="_self">Local storage</a> en <a title="html5 database storage" href="http://www.netsetters.nl/2010/05/html-5-databasestorage/" target="_self">Database Storage</a>) ben ik lekker op dreef.  Daarom vandaag een stukje over geolocation. Met geolocation kunnen wij de locatie van iemand in de browser opvragen. Dit is uitermate geschikt voor mobiele toepassingen en het leveren van een gepersonaliseerde ervaring.<span id="more-320"></span></p>
<h2>Realtime en locatiediensten steeds belangrijker</h2>
<p>Realtime informatie en gepersonaliseerde locatie-diensten zijn sterk in opkomst. Zo zijn er initiatieven als <a title="Foursquare, een realtime locatiedienst" href="http://www.netsetters.nl/2010/01/foursquare-krijgt-je-de-deur-uit/" target="_self">Foursquare</a> en <a class="zem_slink" title="Google Latitude" rel="homepage" href="http://www.google.com/latitude/">Google Latitude</a> die enorm aan populariteit winnen. Op dit moment moet een aparte mobiele applicatie geschreven worden die de locatie van de gebruiker kan doorgeven aan de server, maar door middel van geolocation in HTML5 kunnen we ook in de browser de locatie opvragen van een persoon. Dit geeft weer een enorm aantal toepassingen voor webapplicaties, vooral voor mobiele apparaten.</p>
<h2>Niet alleen via GPS</h2>
<p>De locatie van een client hoeft niet perse door middel van GPS te worden opgevraagd. Het is dus niet nodig om een apparaat te hebben met ingebouwd GPS maar het werkt ook op de normale desktop computer. Andere bronnen op locatie te bepalen zijn bijvoorbeeld het ip nummer, driehoeksmeting van GSM masten, Wifi, bluetooth etc. Het is dus niet altijd 100% zeker dat de geretourneerde waarde ook de werkelijke positie bevat, maar het geeft in ieder geval de meest betrouwbare positie van de client op dat moment weer.</p>
<h2>Compatible browsers</h2>
<p>Op dit moment is het nog onzeker of Microsoft het gaat  redden om de ondersteuning in Internet Explorer 9 te krijgen, maar het werkt al op Firefox (&gt;3.5), Chrome (&gt;5.0; komt later 2010 uit), Opera (&gt;10.*), Ok op het <a class="zem_slink" title="IPhone OS" rel="homepage" href="http://developer.apple.com/iphone/">Iphone OS</a> 3+ kan er gebruik gemaakt worden van geolocation. Het moeilijke is dat het naast een aanpassing in de browser ook een aanpassing in het onderliggende besturingssysteem vraagt, omdat deze de hardware aanstuurt om de positie van de client te berekenen. Firefox is de enige browser die geheel</p>
<h2>Positie opvragen in javascript met getCurrentPosition</h2>
<p>De locatie opvragen binnen javascript is uiterst simpel en gebeurd met getCurrentPosition. Deze functie heeft 3 argumenten namelijk:</p>
<ul>
<li>succescallback (wat te doen bij succes)</li>
<li>errorcallback (wat te doen bij een fout)</li>
<li>casheoptions (hoe lang blijft de positie in de cache bewaard)</li>
</ul>
<p>De succescallback is een functie waarin  de long-lat coördinaten gebruikt kunnen worden, hieronder een voorbeeld.</p>
<pre class="brush: jscript;">
// locatie opvragen en doorgeven aan de functie 'verwerkLocatie', als er geen locatie opgevraagd kan worden wordt de functie 'locatieError' uitgevoerd.
navigator.geolocation.getCurrentPosition(verwerkLocatie, locatieError);

function verwerkLocatie(position) {
      alert(&quot;mijn locatie is:&quot;+position.coords.latitude+&quot; &quot;+position.coords.longitude);
}

function locatieError() {
      alert(&quot;Locatie kon niet worden vastgesteld door middel van HTML5&quot;);
}
</pre>
<h2>Locatie iopvragen vanuit de cache</h2>
<p>Het kan voorkomen dat de locatie nu niet beschikbaar is, maar dat deze wel x aantal minuten geleden is vastgesteld. Mobiele telefoons doen dit om de batterijduur te verlengen. Hierdoor is het mogelijk om een positiebepaling vanuit de opgeslagen cache op te vragen.  Hieronder een voorbeeld waarin er een positie wordt opgevraagd vanuit de cache die niet ouder is dan 10 minuten.</p>
<pre class="brush: jscript;">
navigator.geolocation.getCurrentPosition(successCallback,
                                             errorCallback,
                                             {maximumAge:600000});
</pre>
<h2>Locatie gebaseerde webapplicatie bouwen</h2>
<p>Nu kan de locatie gebruikt worden om bijvoorbeeld weer te geven op een map (vind verkooppunten van product x in mijn omgeving), of kan de locatie gebruikt worden om de taal van de website te selecteren. er zijn natuurlijk veel verschillende toepassingen om de locatie te gebruiken. Uitproberen? kijk eens op de demo op <a title="html5 geolocation demo" href="http://html5demos.com/geo" target="_blank">html5demos.com</a></p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://yehudakatz.com/2010/04/30/the-web-doesnt-suck-browsers-are-innovating/">The Web Doesn&#8217;t Suck. Browsers Are Innovating.</a> (yehudakatz.com)</li>
<li class="zemanta-article-ul-li"><a href="http://r.zemanta.com/?u=http%3A//www.infoworld.com/t/internet/google-official-reaffirms-html5-readiness-444%3Fsource%3Drss_infoworld_news&amp;a=17389746&amp;rid=64702e34-01f2-48a5-8a2f-3260e89661bf&amp;e=6286a55500ca852522e5a76610fa9f5f">Google official reaffirms HTML5 readiness</a> (infoworld.com)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/64702e34-01f2-48a5-8a2f-3260e89661bf/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=64702e34-01f2-48a5-8a2f-3260e89661bf" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=320&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/05/html5-localisation-vraag-de-locatie-op-in-de-browser-met-getcurrentlocation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTML 5: databaseStorage</title>
		<link>http://www.netsetters.nl/2010/05/html-5-databasestorage/</link>
		<comments>http://www.netsetters.nl/2010/05/html-5-databasestorage/#comments</comments>
		<pubDate>Mon, 17 May 2010 22:02:08 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[data]]></category>
		<category><![CDATA[logic]]></category>
		<category><![CDATA[trends]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=313</guid>
		<description><![CDATA[Nu we toch lekker bezig zijn met HTML 5, wil ik in mijn derde artikel ingaan op de locale databaseStorage mogelijkheden. Deze methode kan complexere data opslaan en verweken aan de gebruikerskant.  Het is in principe een SQLite implementatie binnen de browser van de client. Omdat deze manier van opslag nog in draft is kan er nog veel gebeuren, daarom behandel ik de globale basis zoals hij nu bekend is.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml-5-databasestorage%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml-5-databasestorage%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 239px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/36983395@N00/513636061"><img title="HTML5 fist, after A List Apart" src="http://farm1.static.flickr.com/191/513636061_98d07f7966_m.jpg" alt="HTML5 fist, after A List Apart" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/36983395@N00/513636061">justinsomnia</a> via Flickr</dd>
</dl>
</div>
</div>
<p>Nu we toch lekker bezig zijn met HTML 5, wil ik in mijn derde artikel ingaan op de locale databaseStorage mogelijkheden. Deze methode kan complexere data opslaan en verweken aan de gebruikerskant.  Het is in principe een <a class="zem_slink" title="SQLite" rel="homepage" href="http://sqlite.org/">SQLite</a> implementatie binnen de browser van de client. Omdat deze manier van opslag nog in draft is kan er nog veel gebeuren, daarom behandel ik de globale basis zoals hij nu bekend is.<br />
<span id="more-313"></span><br />
<h2>Andere HTML5 artikelen</h2>
<p>Heb je ze nog niet gelezen? dan raad ik je aan de twee eerdere artikelen over het <a title="netsetters html5 canvas element" href="http://www.netsetters.nl/2010/05/html5-het-canvas-element/" target="_self">canvas element</a> en  <a title="netsetters html5 local storage" href="http://www.netsetters.nl/2010/05/html5-offline-opslag-met-local-storage/" target="_self">local storage</a> te lezen op Netsetters blog.</p>
<h2>databaseStorage compatible browsers</h2>
<p>Op dit moment kunnen maar een beperkt aantal browsers met de locale database storage overweg. Google&#8217;s Chrome (&gt;3), Safari (&gt; 3.2), Opera (&gt;10.5). Bij de release van Firefox 4 in November zal ook de ondersteuning voor locale database toegang meekrijgen. En als we heel veel geluk hebben zou er een kleine kans bestaan dat de functionaliteit later aan versie 9 van Internet Explorer wordt toegevoegd.</p>
<h2>Niet compatible, waarom toch gebruiken?</h2>
<p>Het is nou eenmaal zo dat &#8216;maar&#8217; de helft van de browser deze manier van opslag ondersteund, net als met vele andere HTML5 specifieke eigenschappen. Ondanks deze magere ondersteuning kan er nu al winst worden gehaald uit de techniek. Op de Iphone en Android telefoons zijn deze technieken namelijk al geheel beschikbaar gezien deze met <a class="zem_slink" title="WebKit" rel="wikipedia" href="http://en.wikipedia.org/wiki/WebKit">Webkit</a> browsers werken (safari en chrome). De tweede reden is dat de nu inspringen de kennis straks vergroot, ook zal het gebruik van de techniek door ontwikkelaars de ondersteuning van HTML5 hoger op de prioriteitenlijst bij de browser-ontwikkelaars komen te staan. want als de consument echt eerlijk mocht kiezen tussen verschillende gratis browsers, dan gebruik je toch een browser die de nieuwe technieken ondersteund? Ook kan de combinatie van oude en nieuwe techniek al een voordeel hebben.</p>
<h2>De eerste stap van databaseStorage, een database aanmaken</h2>
<p>Met openDatabase() kunnen we een database openen of creëren. Deze JavaScript functie neemt 4 argumenten aan.</p>
<ul>
<li>De database naam</li>
<li>De database versie</li>
<li>De leesbare naam van de database</li>
<li>De grote van de database in bytes (ongeveer)</li>
</ul>
<p>Om een database te creëren en browsers die het niet kunnen af te vangen kunnen we de volgende code gebruiken:</p>
<pre class="brush: jscript;">
var db;
try {
    if (window.openDatabase) {
        db = openDatabase(&quot;DatabaseTest&quot;, &quot;1.0&quot;, &quot;HTML5 Database voorbeeld&quot;, 200000);
        if (!db)
            alert(&quot;Kan database niet openen: verkeerde versie of over het limiet heen&quot;);
    } else
        alert(&quot;Kan database niet aanmaken, uw browser ondersteund geen databaseStorage&quot;);
} catch(err) { }
</pre>
<h2>Query uitvoeren op locale database</h2>
<p>Om een query uit te voeren gebruiken we de transaction() methode, deze heeft 1 t/m 3 argumenten, namelijk:</p>
<ol>
<li>transaction callback</li>
<li>error callback</li>
<li>success callback</li>
</ol>
<p>De transactie bestaat uit een anonieme functie met executeSQL() methode. Deze heeft tot 4 argumenten, namelijk:</p>
<ol>
<li>SQL statement</li>
<li>Argumenten</li>
<li>SQL callback</li>
<li>Error Callback</li>
</ol>
<p>Schematisch gebeurd er dus het volgende:</p>
<pre class="brush: jscript;">
db.transaction(function(tx)
  {
    tx.executeSql('SELECT * FROM MyTable WHERE CategoryField = ?',
      [ selectedCategory ],
      function (tx, rs) { displayMyResult(rs); },
      function (tx, err) { displayMyError(err); } );
  });
</pre>
<p>Waar displayMyResult en displayMyError de succes en error functies zijn.</p>
<h2>Voorbeelden, een tabel aanmaken</h2>
<pre class="brush: jscript;">
db.transaction(function (tx)
        {
             tx.executeSql(&quot;CREATE TABLE WebKitStickyNotes (id REAL UNIQUE, note TEXT, timestamp REAL, left TEXT, top TEXT, zindex REAL)&quot;, [], function(result) {loadNotes();
})
});
</pre>
<h2>Een rij toevoegen</h2>
<pre class="brush: jscript;">
db.transaction(function (tx)
        {
            tx.executeSql(&quot;INSERT INTO Adressen (id, naam, adres, woonplaats) VALUES (?, ?, ?, ?)&quot;, [id, naam, adres, woonplaats]);
      });
</pre>
<h2>Een rij verwijderen</h2>
<p>De meest korte uitvoering, zonder error en succes handlers</p>
<pre class="brush: jscript;">
 db.transaction(function(tx)
        {
            tx.executeSql(&quot;DELETE FROM WebKitStickyNotes WHERE id = ?&quot;, [note.id]);
        });
</pre>
<h2>Een select uitvoeren</h2>
<p>Een select maken uit tabelnaam MyTable waar de categorie gelijk is aan selectedCategory</p>
<pre class="brush: jscript;">
db.transaction(function(tx)
  {
    tx.executeSql('SELECT * FROM MyTable WHERE CategoryField = ?',
      [ selectedCategory ],
      function (tx, rs) { displayMyResult(rs); },
      function (tx, err) { displayMyError(err); } );
  });
</pre>
<h2>Meer lezen</h2>
<p>Meer kan je vinden op de pagina van het W3C met de <a title="W3C offline web applications note" href="http://www.w3.org/TR/offline-webapps/" target="_blank">offline web applicaties notitie</a>.<br />
Ook een goede aanvullende uitleg is te vinden op de website van <a title="html5 local storage" href="http://creativepark.net/blog/entry/id/1191" target="_blank">creativepark</a></p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://www.slideshare.net/bitlasoft/how-to-build-a-html5-websitesv1">How to build a html5 websites.v1</a> (slideshare.net)</li>
<li class="zemanta-article-ul-li"><a href="http://sixrevisions.com/web-development/five-things-ie9-is-actually-doing-right/">Five Things IE9 is (Actually) Doing Right</a> (sixrevisions.com)</li>
<li class="zemanta-article-ul-li"><a href="http://r.zemanta.com/?u=http%3A//www.infoworld.com/t/internet/google-official-reaffirms-html5-readiness-444%3Fsource%3Drss_infoworld_news&amp;a=17389746&amp;rid=9c89531e-b77e-468d-aa3c-31046f7f1056&amp;e=fc3ab1f2fffc1f0455c7e3ced364283c">Google official reaffirms HTML5 readiness</a> (infoworld.com)</li>
<li class="zemanta-article-ul-li"><a href="http://rethink.unspace.ca/2010/5/10/the-state-of-html5-local-data-storage">The State of HTML5 Local Data Storage</a> (rethink.unspace.ca)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/9c89531e-b77e-468d-aa3c-31046f7f1056/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=9c89531e-b77e-468d-aa3c-31046f7f1056" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=313&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/05/html-5-databasestorage/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTML5: Offline opslag met local storage</title>
		<link>http://www.netsetters.nl/2010/05/html5-offline-opslag-met-local-storage/</link>
		<comments>http://www.netsetters.nl/2010/05/html5-offline-opslag-met-local-storage/#comments</comments>
		<pubDate>Fri, 14 May 2010 19:43:22 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[data]]></category>
		<category><![CDATA[trends]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Data Formats]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Markup Languages]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=307</guid>
		<description><![CDATA[Dit is het tweede artikel over HTML5. HTML5 heeft verschillende methoden om lokaal en offline elementen op te slaan. De meest simpele is localStorage. Hiermee kunnen simpele "sleutel"-"waarde" Paren worden opgeslagen zonder database, zonder plugins, zonder server.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-offline-opslag-met-local-storage%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-offline-opslag-met-local-storage%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 250px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/45745303@N00/4293394187"><img title="HTML5" src="http://farm3.static.flickr.com/2488/4293394187_c0793b58b0_m.jpg" alt="HTML5" width="240" height="185" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/45745303@N00/4293394187">bioxid</a> via Flickr</dd>
</dl>
</div>
</div>
<p>Dit is het tweede artikel over HTML5. HTML5 heeft verschillende methoden om lokaal en offline elementen op te slaan. De meest simpele is localStorage. Hiermee kunnen simpele &#8220;sleutel&#8221;-&#8221;waarde&#8221; Paren worden opgeslagen zonder database, zonder plugins, zonder server.<span id="more-307"></span></p>
<h2>We kunnen niet altijd online zijn</h2>
<p>We kunnen al een groot deel van de dag continue online zijn. Door draadloze verbindingen als wifi,(3)G, UMTS etc kunnen we ten alle tijden met verschillende apparaten gebruik maken van het internet. Hierdoor wordt het aantrekkelijk om web-applicaties te gebruiken. Deze hoeven niet op een apparaat geïnstalleerd te worden en hebben alleen een browser nodig.  Toch kunnen we niet altijd aaneengesloten online zijn, dit was het grote struikelblok voor webapplicaties. In HTML5 zijn verschillende technieken beschikbaar om lokaal (tijdelijk) data op te slaan wanneer de verbinding er even niet is namelijk: <strong>sessionStorage</strong>, <strong>databaseStorage</strong> en <strong>localStorage</strong></p>
<h2>localStorage de simpele opslag</h2>
<p>Als je alleen één of meerdere waarden op wilt slaan is de localStorage methode voldoende. Hiermee kan er binnen een website een sleutel met waarde worden opgeslagen. Zolang de gebruiker op de website is, is deze informatie beschikbaar. Ook als de gebruiker later terugkomt op dezelfde site zal de informatie beschikbaar zijn. Een goede methode om instellingen op te slaan. een voorbeeld is bijvoorbeeld het wegschrijven van iemands gepersonaliseerde instellingen zoals kleur, de gebruikte lettergrote of naam.</p>
<h2>Waarde wegschrijven</h2>
<p>Een waarde wegschrijven in localStorage is eenvoudig, <a title="caniuse browser vergelijking" href="http://caniuse.com/#agents=All&amp;eras=past,now,near,far&amp;cats=Other&amp;statuses=rec,pr,cr,wd" target="_blank">mits je browser localStorage ondersteund</a>. Met 1 regel code binnen JavaScript staat er een waarde opgeslagen:</p>
<pre class="brush: xml;">localStorage.setItem(&quot;lettergrootte&quot;, &quot;12px&quot;);</pre>
<p>Op deze manier wordt er in de lokale opslag een waarde van 12px aan de sleutel &#8220;lettergrootte&#8221; gegeven. Dit moet natuurlijk wel binnen <script type="text/javascript"></script></p>
<h2>LocalStorage elementen ophalen.</h2>
<p>Ook het ophalen van een waarde om deze verder te gebruiken is te doen met 1 regel code.</p>
<pre class="brush: xml;">
var lettergrootte = localStorage.getItem(&quot;lettergrootte&quot;);
document.body.fontSize = lettergrootte;
</pre>
<p>Zo wijs je de variable lettergrootte in JavaScript de gezette 12px toe. Dit kan dan bijvoorbeeld zoals hierboven gebruikt worden om de lettergrootte van een pagina te zetten naar de wensen die eerder zijn ingevuld.</p>
<h2>Waarden verwijderen</h2>
<p>Natuurlijk kunnen er ook waarden uit de localStorage worden verwijderd.</p>
<pre class="brush: xml;">localStorage.remove('lettergrootte');</pre>
<p>om de sleutel en waarde van &#8220;lettergrootte te verwijderen. OM alle waarden van de website te verwijderen kan er gebruik gemaakt worden van;</p>
<pre class="brush: xml;">localStorage.clear();</pre>
<h2>Een volledig voorbeeld</h2>
<p><a title="localstorage example html5" href="http://people.w3.org/mike/localstorage.html" target="_blank"> Hier vind je een voorbeeld </a>waarbij waarden gezet, opgehaald en verwijderd kunnen worden. Als je naar de code kijkt zie je al snel dat de functies eenvoudig en begrijpelijk zijn;</p>
<pre class="brush: xml;">
 &lt;script&gt; 

     function doSetItem() {
       var name = document.forms.editor.name.value;
       var data = document.forms.editor.data.value;
       localStorage.setItem(name, data);
       doShowAll();
     }

     function doGetItem() {
       var name = document.forms.editor.name.value;
       document.forms.editor.data.value = localStorage.getItem(name);
       doShowAll();
     }

     function doRemoveItem() {
       var name = document.forms.editor.name.value;
       document.forms.editor.data.value = localStorage.removeItem(name);
       doShowAll();
     }

     function doClear() {
       localStorage.clear();
       doShowAll();
     }

     function doShowAll() {
       var key = &quot;&quot;;
       var pairs = &quot;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;\n&quot;;
       var i=0;
       for (i=0; i&lt;=localStorage.length-1; i++) {
         key = localStorage.key(i);
         pairs += &quot;&lt;tr&gt;&lt;td&gt;&quot;+key+&quot;&lt;/td&gt;&lt;td&gt;&quot;+localStorage.getItem(key)+&quot;&lt;/td&gt;&lt;/tr&gt;\n&quot;;
       }
       if (pairs == &quot;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;\n&quot;) {
         pairs += &quot;&lt;tr&gt;&lt;td&gt;&lt;i&gt;empty&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;empty&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;\n&quot;;
       }
       document.getElementById('pairs').&lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Internet_Explorer&quot; title=&quot;Internet Explorer&quot; rel=&quot;wikipedia&quot;&gt;innerHTML&lt;/a&gt; = pairs;
     }
   &lt;/script&gt;
</pre>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/7448eb78-b1ac-4f5b-81c0-9e281e315cbd/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=7448eb78-b1ac-4f5b-81c0-9e281e315cbd" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=307&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/05/html5-offline-opslag-met-local-storage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML5: het Canvas element</title>
		<link>http://www.netsetters.nl/2010/05/html5-het-canvas-element/</link>
		<comments>http://www.netsetters.nl/2010/05/html5-het-canvas-element/#comments</comments>
		<pubDate>Thu, 13 May 2010 20:49:02 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[logic]]></category>
		<category><![CDATA[trends]]></category>
		<category><![CDATA[Canvas element]]></category>
		<category><![CDATA[Data Formats]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=274</guid>
		<description><![CDATA[Hoewel het allemaal nog ver weg lijkt heeft al een groot deel van de internet gebruikers de mogelijkheid tot het bekijken van websites in HTML5 en CSS3. Samen met JavaScript kunnen enorm veel toepassingen bedacht worden zonder dat er meer nodig is dan een browser. Vandaag beschrijf ik het Canvas element]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-het-canvas-element%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F05%2Fhtml5-het-canvas-element%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 250px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/86127290@N00/4420925550"><img title="Sketching in HTML5" src="http://farm3.static.flickr.com/2751/4420925550_1b6f28f499_m.jpg" alt="Sketching in HTML5" width="240" height="159" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/86127290@N00/4420925550">birdsigh</a> via Flickr</dd>
</dl>
</div>
</div>
<p>Hoewel het allemaal nog ver weg lijkt heeft al een groot deel van de internet gebruikers de mogelijkheid tot het bekijken van websites in <a class="zem_slink" title="HTML5" rel="wikipedia" href="http://en.wikipedia.org/wiki/HTML5">HTML5</a> en CSS3.  Samen met JavaScript kunnen enorm veel toepassingen bedacht worden zonder dat er meer nodig is dan een browser. Vandaag beschrijf ik het Canvas element<span id="more-274"></span></p>
<h2>Wat kan ik met de &lt;canvas&gt;?</h2>
<ul>
<li>Tekenen</li>
<li>Animeren</li>
<li>foto bewerking, positionering</li>
<li>interactie met beeld (i.c.m. javascript)</li>
</ul>
<h2>Welke browsers zijn compatibel met &lt;canvas&gt;?</h2>
<p>De meeste moderne browsers ondersteunen al de algemene canvas onderdelen, 3dcanvas is voor de meeste nog een stapje te ver, maar dit zal eind 2010 door de meeste browser worden ondersteund. Een complete lijst is te vinden op <a title="caniuse.com" href="http://caniuse.com/#agents=All&amp;eras=past,now,near,far&amp;cats=Canvas&amp;statuses=rec,pr,cr,wd,ietf" target="_blank">canoiuse.com browser vergelijking</a>. Er is dus geen reden om nu al niet te beginnen met HTLM5 en canvas.</p>
<h2>Beginnen met canvas, wat heb ik nodig.</h2>
<p>Om nu te experimenteren met canvas heb je niet veel nodig, een compatible browser (zie hierboven) en een text programma als Notepad voldoet al. Je hebt geen servers nodig omdat het lokaal draait en je hoeft niets te uploaden, plugins te installeren of software te kopen. Een gezonde kennis van (X)HTML is wel vereist.</p>
<h2>De &lt;canvas&gt; tag, beginnen</h2>
<p>De canvas tag &#8220;reserveert&#8221; een stuk in je html pagina om in te kunnen tekenen. IN onderstaand geval is deze 150 bij 150 px breed.</p>
<pre class="brush: xml;">&lt;canvas id=&quot;mijnCanvas&quot; width=&quot;150&quot; height=&quot;150&quot;&gt;&lt;/canvas&gt; </pre>
<p>Door een waarde tussen de open en sluit-tag te geven, laten we de gebruiker iets zien als deze een browser heeft die canvas niet ondersteund.</p>
<pre class="brush: xml;">
&lt;canvas id=&quot;mijnCanvas&quot; width=&quot;150&quot; height=&quot;150&quot;&gt;
 Uw browser ondersteund geen canvas
&lt;/canvas&gt;
</pre>
<h2>Interactie met het canvas door middel van <a class="zem_slink" title="JavaScript" rel="wikipedia" href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a></h2>
<p>Nu kunnen we gaan tekenen op het canvas. Eerst moeten we in JavaScript het canvas aanspreken en in een variabele stoppen. Daarna geven we aan dat het gaat om een 2d canvas. De JavaScript kunnen we als functie uitvoeren op het moment dat de body, en dus ook het <a class="zem_slink" title="Canvas element" rel="wikipedia" href="http://en.wikipedia.org/wiki/Canvas_element">canvas element</a>, geladen is.</p>
<pre class="brush: xml;">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Canvas tutorial&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function draw(){
var canvas = document.getElementById('mijnCanvas');
var ctx = canvas.getContext('2d');
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;draw();&quot;&gt;
&lt;canvas id=&quot;mijnCanvas&quot; width=&quot;150&quot; height=&quot;150&quot;&gt;
Uw browser ondersteund geen Canvas.
&lt;/canvas&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Rechthoeken tekenen</h2>
<p>Binnen JavaScript zijn er veel mogelijkheden om te tekenen binnen het canvas. Hieronder een voorbeeld dat gebruik maakt van:</p>
<ul>
<li><strong>fillstyle</strong>: deze geeft de inkleur instellingen mee, bijvoorbeeld de vulkleur in <a class="zem_slink" title="RGB color model" rel="wikipedia" href="http://en.wikipedia.org/wiki/RGB_color_model">RGB</a> plus de opacity  bijv. <em>ctx.fillStyle = &#8221;rgba(255,0,0,0.5)&#8221;; </em>Voor een rode half-doorzichtige vulstijl.<em><br />
</em></li>
<li><strong>fillrectangle</strong>: Dit maakt een rechthoek en vult deze met de huidige vulstijl. Meegegeven worden de coördinaten van startpunt (x,y) en de lengt in x en lengte in y, bijvoorbeeld <em>ctx.fillRect (30, 30, 50, 50);</em> voor een rechthoek die op 30 <a class="zem_slink" title="Pixel" rel="wikipedia" href="http://en.wikipedia.org/wiki/Pixel">pixels</a> van boven, 30 pixels van links begint en dan 5o pixels naar rechts en 50 pixels omlaag gaat.</li>
</ul>
<pre class="brush: xml;">
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;application/javascript&quot;&gt;
function draw() {
var canvas = document.getElementById(&quot;canvas&quot;);
var ctx = canvas.getContext(&quot;2d&quot;);
ctx.fillStyle = &quot;rgba(200,0,0,0.5)&quot;;
ctx.fillRect (30, 30, 50, 50);
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;draw();&quot;&gt;
&lt;canvas id=&quot;canvas&quot; width=&quot;150&quot; height=&quot;150&quot;&gt;
Uw browser ondersteund geen canvas
&lt;/canvas&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Klaar voor het echte werk, tekenen op je canvas</h2>
<p>Zodra je deze basis onder de knie hebt kan je proberen meerdere vakken te maken om het grid te leren kennen. Daarna is het tijd om los te gaan tekenen. Door gebruik te maken van lijnen, line-stijlen, vul-stijlen etc kan iedere denkbare tekening gemaakt worden.  Omdat het in JavaScript wordt gegenereerd kan dit dus ook volledig dynamisch. Een mooie uitleg over de verschillende tekenvormen is te vinden op de <a title="Canvas, drawing shapes" href="https://developer.mozilla.org/en/Canvas_tutorial%3aDrawing_shapes" target="_blank">canvas tutorial van Mozilla</a>.</p>
<p>Een mooi voorbeeld vind ik de site van <a href="http://cartagen.org/">Cartagen</a>, die gebruikt de xml data van Openstreetmap om een gehele kaart in canvas te tekenen. Wegens het intensieve gebruik van canvas raad ik je aan deze site te openen met Chrome of <a class="zem_slink" title="Safari" rel="homepage" href="http://www.apple.com/safari">Safari</a>.</p>
<h2>Beeld manipulatie</h2>
<p>Ook afbeeldingen kunnen gemanipuleerd worden in de browser met canvas. Uitsneden maken, inzoomen, kleuren, etc. Lees er meer over op de website van <a title="canvas beeld manipulatie" href="https://developer.mozilla.org/en/Canvas_tutorial%3aUsing_images" target="_blank">Mozilla</a>.</p>
<h2>Andere voorbeelden van canvas</h2>
<p>Alleen te openen met compatible browsers:</p>
<ul>
<li>Bouw van <a title="wolfenstein 3D with Canvas html5" href="http://dev.opera.com/articles/view/3d-games-with-canvas-and-raycasting-part/" target="_blank">Wolfenstein in 3D</a> met 2D canvas en Javascript.</li>
<li>een wapperend en interactieve 3D vlag met <a title="jscloth" href="http://gyu.que.jp/jscloth/" target="_blank">jscloth</a></li>
<li>3d voorbeelden van <a title="K3D" href="http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html" target="_blank">Kevin Roast</a></li>
<li>Altijd al een website willen <a title="tekenen over een website" href="http://www.permadi.com/blog/2009/04/using-html-5-canvas-to-go-ahead-and-ruin-my-page/" target="_blank">vandaliseren</a>?</li>
<li><a title="canvas html5  cover flow" href="http://www.blarnee.com/projects/cflow/" target="_blank">Coverflow</a> met canvas</li>
</ul>
<h2>Waar gaat het heen?</h2>
<p>Het canvas element (en zeker ook het canvas 3D element) zal heel wat mogelijkheden geven. Nu al ondersteunen vele browsers en ook mobiele apparaten (Ipad, Iphone, Android smartphones) het canvas element. Dit kan het gemis van <a class="zem_slink" title="Adobe Flash" rel="homepage" href="http://www.adobe.com/products/flash/flashpro/">Flash</a> op deze apparaten vaak opvangen.  Toch blijft tekenen in canvas een enorme klus en zal het even duren voordat de browsers genoeg energie hebben gestoken in het versnellen van hun JavaScript rendering.</p>
<p style="text-align: center;"><object id="__sse1651377" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="383" height="319" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=standards-next-canvas-090628140453-phpapp01&amp;rel=0&amp;stripped_title=standardsnext-canvas-1651377" /><param name="name" value="__sse1651377" /><param name="allowfullscreen" value="true" /><embed id="__sse1651377" type="application/x-shockwave-flash" width="383" height="319" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=standards-next-canvas-090628140453-phpapp01&amp;rel=0&amp;stripped_title=standardsnext-canvas-1651377" name="__sse1651377" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://lovehateubuntu.blogspot.com/2010/05/faster-background-rendering-in-html5.html">Faster Background Rendering in HTML5 Canvas</a> (lovehateubuntu.blogspot.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.webmonkey.com/2010/05/where-on-the-web-is-html5/">Where on the Web Is HTML5?</a> (webmonkey.com)</li>
<li class="zemanta-article-ul-li"><a href="http://ajaxian.com/archives/rgraph-canvas-based-graphing-library">RGraph: Canvas based graphing library</a> (ajaxian.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.slideshare.net/dbalmer/rockstar-graphics-with-html5">Rockstar Graphics with HTML5</a> (slideshare.net)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/530cc27f-fce6-441e-8028-89b02156835d/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=530cc27f-fce6-441e-8028-89b02156835d" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=274&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/05/html5-het-canvas-element/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend Framework met MAMP op OSX, een nieuwe Dev omgeving</title>
		<link>http://www.netsetters.nl/2010/04/zend-framework-met-mamp-op-osx-een-nieuwe-dev-omgeving/</link>
		<comments>http://www.netsetters.nl/2010/04/zend-framework-met-mamp-op-osx-een-nieuwe-dev-omgeving/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 18:52:14 +0000</pubDate>
		<dc:creator>Maurice Lourens</dc:creator>
				<category><![CDATA[logic]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[MAMP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.netsetters.nl/?p=264</guid>
		<description><![CDATA[Na een tijd gewerkt te hebben met CodeIgniter kon ik het niet laten weer even terug te gaan naar  Zend Framework. Maar door het gebruik van MAMP kwam ik er even niet uit hoe ik dit aan moest pakken (en niet de interne OSX php installatie gebruiken). Nu ik het voor elkaar heb schrijf ik het ook op.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F04%2Fzend-framework-met-mamp-op-osx-een-nieuwe-dev-omgeving%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.netsetters.nl%2F2010%2F04%2Fzend-framework-met-mamp-op-osx-een-nieuwe-dev-omgeving%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 250px;">
<dt class="wp-caption-dt"><a href="http://www.flickr.com/photos/39639237@N00/2504214173"><img title="Zend" src="http://farm4.static.flickr.com/3189/2504214173_32fe2bf427_m.jpg" alt="Zend" width="240" height="180" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image by <a href="http://www.flickr.com/photos/39639237@N00/2504214173">skoop</a> via Flickr</dd>
</dl>
</div>
</div>
<p>Na een tijd gewerkt te hebben met <a class="zem_slink" title="CodeIgniter" rel="homepage" href="http://www.codeigniter.com">CodeIgniter</a> kon ik het niet laten weer even terug te gaan naar  <a class="zem_slink" title="Zend Framework" rel="homepage" href="http://framework.zend.com/">Zend Framework</a>. Maar door het gebruik van <a class="zem_slink" title="MAMP" rel="homepage" href="http://www.mamp.info/en/index.php">MAMP</a> kwam ik er even niet uit hoe ik dit aan moest pakken (en niet de interne <a class="zem_slink" title="Mac OS X" rel="homepage" href="http://apple.com/macosx/">OSX</a> php installatie gebruiken). Nu ik het voor elkaar heb schrijf ik het ook op.<span id="more-264"></span></p>
<p>1. <strong>Installeer MAMP</strong> en zorg dat het draait. Grote kans dat deze in je /Applications folder terecht komt, dus daar ga ik ook verder van uit. Mocht je een exotische configuratie hebben, dan moet je dus telkens de map-naam veranderen in deze uitleg</p>
<p>2. Het beste is om <strong>Zend Framework te verkrijgen via svn</strong>, zo maak het jezelf een stuk makkelijker met updaten.  Gebruik hervoor je terminal en de volgende commands:</p>
<pre class="brush: plain;">
cd /Applications/MAMP/
mkdir svn
cd svn
mkdir zendframework
cd zendframework
svn checkout http://framework.zend.com/svn/framework/standard/trunk
</pre>
<p>Nu kan je koffie gaan drinken totdat je het gehele framework hebt binnen gehaald. Als alles binnen is krijg je nog een &#8216;revision&#8217; nummer. Het hele Zend Framework staat nu in je MAMP directory onder svn/zendframework.</p>
<p>3. Om de <strong>zend library te &#8216;includen&#8217;</strong> binnen je php installatie moet deze aan het include path van de php.ini worden toegevoegd. Deze is te vinden in <em>/Application/MAMP/conf/php5/php.ini </em>Open php.ini met een <a class="zem_slink" title="Text editor" rel="wikipedia" href="http://en.wikipedia.org/wiki/Text_editor">text editor</a> en plak de volgende regel onder de bestaande regel met include_path = .. (bij mij regelnummer 412)</p>
<pre class="brush: plain;">
include_path = &quot;.:/usr/lib/php:/usr/local/lib/php:/Applications/MAMP/svn/zendframework/trunk/library&quot;
</pre>
<p>4. Om gebruik te maken van de <strong>command line tools </strong>van het Zend Framework moet het <em>zf</em> commando in je terminal beschikbaar gemaakt worden. Dit kan je doen door met een teksteditor <em>/etc/profile</em> te openen. De map etc op je HD kan verborgen zijn, hiervoor moeten dus eerst de verbogen bestanden getoond zijn. De file profile heeft geen extentie maar kan je wel openen met een text editor. Voeg onderaan het bestand 1 regel toe:</p>
<pre class="brush: plain;">
alias zf=/Applications/MAMP/svn/zendframework/trunk/bin/zf.sh
</pre>
<p>5. Als de terminal nog open staan moet je deze nu <strong>eerst sluiten</strong> (Command-Q) En weer openen. Na het opnieuw openen kan je de installatie controleren door middel van het commando</p>
<pre class="brush: plain;">
zf show version
</pre>
<p>Als alles werkt dan krijg je het Zend Framework versienummer terug.</p>
<p>6. Nu kan je beginnen met je eerste <strong>project aanmaken</strong>. Ga met je terminal naar de map waar het project gemaakt moet worden bijvooorbeeld:</p>
<pre class="brush: plain;">cd /Applications/MAMP/htdocs</pre>
<p>En <strong>creëer</strong> je eerste Zend Framework project:</p>
<pre class="brush: plain;">zf create project tests</pre>
<p>En maak je killer-app!! <img src='http://www.netsetters.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/4fc64a8c-4742-468b-8c6a-963932c39da7/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=4fc64a8c-4742-468b-8c6a-963932c39da7" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://www.netsetters.nl/?ak_action=api_record_view&id=264&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.netsetters.nl/2010/04/zend-framework-met-mamp-op-osx-een-nieuwe-dev-omgeving/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
