<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Mihai Corlan</title>
	
	<link>http://corlan.org</link>
	<description>Web, Mobile, and Rock&amp;Roll</description>
	<lastBuildDate>Mon, 14 May 2012 17:04:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/corlan" /><feedburner:info uri="corlan" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Adobe MAX moves to spring</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/DVKsS-eyf8k/</link>
		<comments>http://corlan.org/2012/05/14/adobe-max-moves-to-spring/#comments</comments>
		<pubDate>Mon, 14 May 2012 17:04:18 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3663</guid>
		<description><![CDATA[
			
				
			
		
We just announced that we will move Adobe MAX from the end of the year to spring. So the next Adobe MAX will be on May 4-8 in Los Angeles. I for one I am excited with this move and I can&#8217;t wait for Adobe MAX 2013. You can find more about this in Kevin [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/05/14/adobe-max-moves-to-spring/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F05%2F14%2Fadobe-max-moves-to-spring%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F05%2F14%2Fadobe-max-moves-to-spring%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We just announced that we will move Adobe MAX from the end of the year to spring. So the next Adobe MAX will be on May 4-8 in Los Angeles. I for one I am excited with this move and I can&#8217;t wait for Adobe MAX 2013. You can find more about this in<a href="http://max.adobe.com/blog/spring_max.html"> Kevin Lynch&#8217;s post</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/DVKsS-eyf8k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/05/14/adobe-max-moves-to-spring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/05/14/adobe-max-moves-to-spring/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-max-moves-to-spring</feedburner:origLink></item>
		<item>
		<title>Adobe WebUp #5</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/7rY9nrtTJ2Y/</link>
		<comments>http://corlan.org/2012/05/07/adobe-webup-5/#comments</comments>
		<pubDate>Mon, 07 May 2012 12:12:47 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3656</guid>
		<description><![CDATA[
			
				
			
		
Another month, another Adobe WebUp (#5) has come :) (May 31st in our office). You should know this by now! For the first time there will be more external speakers than Adobe speakers &#8211; in total five sessions. If you live in Bucharest or close make sure you go here and register. Here are the five [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/05/07/adobe-webup-5/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F05%2F07%2Fadobe-webup-5%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F05%2F07%2Fadobe-webup-5%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Another month, another <a href="http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/">Adobe WebUp</a> (#5) has come :) (May 31st in our office). You should know this by now! For the first time there will be more external speakers than Adobe speakers &#8211; in total five sessions. If you live in Bucharest or close make sure you go <a href="http://adobewebup5.eventbrite.com/">here</a> and register. Here are the five topics:</p>
<ul>
<li><strong>Advanced CSS Layout Techniques</strong> &#8211; Dan Popa/Adobe</li>
<li><strong>Take your web apps offline with Application Cache</strong> &#8211; Ionut Margelatu/Adobe</li>
<li><strong>Introduction to HTML5 History API</strong> &#8211; Cosmin Nicula</li>
<li><strong>Common mistakes in Mobile Web Apps</strong> &#8211; David Emanuel Oprea</li>
<li><strong>From development to evolution</strong> &#8211; Andrei Epure</li>
</ul>
<div>If you can&#8217;t make it but still want to see what&#8217;s going on, then join us on our <a href="http://eseminars.adobeconnect.com/adobewebup">live streaming site</a>.</div>
<p>See you there on May 31st and if you want to be a speaker at one of the future events, drop me an email!</p>
<p>Register for the event <a href="http://adobewebup5.eventbrite.com/">here</a>! Event hashtag #AdobeWebUp5 and Twitter @AdobeWebUp.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/7rY9nrtTJ2Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/05/07/adobe-webup-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/05/07/adobe-webup-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-webup-5</feedburner:origLink></item>
		<item>
		<title>CSS Regions and CSS Exclusions specs moving on</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/XryRIf_vdPc/</link>
		<comments>http://corlan.org/2012/05/04/css-regions-and-css-exclusions-specs-moving-on/#comments</comments>
		<pubDate>Fri, 04 May 2012 18:19:35 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3652</guid>
		<description><![CDATA[
			
				
			
		
The web is moving forward. And it is so great to see this. I know it sounds a bit dramatic but this is exactly what happened before with two CSS proposals (CSS Regions and CSS Exclusions).
As a result of the past six months or so of work between Adobe and the other parties involved in [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/05/04/css-regions-and-css-exclusions-specs-moving-on/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F05%2F04%2Fcss-regions-and-css-exclusions-specs-moving-on%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F05%2F04%2Fcss-regions-and-css-exclusions-specs-moving-on%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>The web <strong>is</strong> moving forward. And it is so great to see this. I know it sounds a bit dramatic but this is exactly what happened before with two CSS proposals (CSS Regions and CSS Exclusions).</p>
<p>As a result of the past six months or so of work between Adobe and the other parties involved in the process the specs were updated this very month (May 2012) and new working drafts have been published.</p>
<p>If you want to read more about these proposals or to understand how the standardization process works read <a href="http://corlan.org/css-bleeding-edge/">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/XryRIf_vdPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/05/04/css-regions-and-css-exclusions-specs-moving-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/05/04/css-regions-and-css-exclusions-specs-moving-on/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=css-regions-and-css-exclusions-specs-moving-on</feedburner:origLink></item>
		<item>
		<title>Adobe Shadow Release 2 is out</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/XaYXCRqXBQs/</link>
		<comments>http://corlan.org/2012/04/13/adobe-shadow-release-2-is-out/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 13:28:04 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3648</guid>
		<description><![CDATA[
			
				
			
		
We just launched the second release of Adobe Shadow. You can grab the bits from here.
If you haven&#8217;t already tried this tool and you build websites or web apps for mobile then you should definitely check this out. It will make your life so much easier.
What&#8217;s new in this release:

Localhost URL support &#8211; now you [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/04/13/adobe-shadow-release-2-is-out/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F04%2F13%2Fadobe-shadow-release-2-is-out%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F04%2F13%2Fadobe-shadow-release-2-is-out%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We just launched the second release of <a href="http://corlan.org/2012/03/07/introducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps/">Adobe Shadow</a>. You can grab the bits from <a href="http://labs.adobe.com/technologies/shadow/">here</a>.</p>
<p>If you haven&#8217;t already tried this tool and you build websites or web apps for mobile then you should definitely check this out. It will make your life so much easier.</p>
<p>What&#8217;s new in this release:</p>
<ul>
<li>Localhost URL support &#8211; now you can test localhost, 127.0.0.1, and machine.local (for Mac OS X) URLs instead of using the IP address of your desktop device</li>
<li>Adobe Edge integration &#8211; the Preview command from Adobe Edge works with Adobe Shadow</li>
<li>HTTP Authentication Support &#8211; you can navigate to URLs that require HTTP Authentication (you will see the login form on the mobile devices). It works also with URLs that contain the login information - http://login:password@mysite.com</li>
<li>Support for the latest iPad (retina display)</li>
<li>Support for working with sticky caches &#8211; you can perform a gesture on the mobile devices to force Shadow to load the latest resources (tap on the page, hold, and pull down until you see the “Release to refresh…” message)</li>
<li>Amazon Kindle Fire version will be soon available for download in store</li>
<li>URL Monitoring &#8211; if your website/web app uses # to change the state, now it will work with Shadow</li>
</ul>
<p>If you want to stay updated with what&#8217;s happening with Shadow make sure you follow the team <a href="http://blogs.adobe.com/shadow/">blog</a>.</p>
<p>Now go and make sure you update your desktop app, Chrome extension, and iOS/Android clients. Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/XaYXCRqXBQs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/04/13/adobe-shadow-release-2-is-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/04/13/adobe-shadow-release-2-is-out/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-shadow-release-2-is-out</feedburner:origLink></item>
		<item>
		<title>Adobe WebUp #4 is on</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/vaLUchhFuE4/</link>
		<comments>http://corlan.org/2012/04/10/adobe-webup-4-is-on/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 09:15:51 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3644</guid>
		<description><![CDATA[
			
				
			
		
Adobe WebUp #4 registration is open now! This means that you should not only register yourself and your girlfriend/friend/brothers&#38;sisters but you should also tell others about this awesome event!
What? You don’t believe that it will be awesome? Trust me, I should know as I am the organizer:)
Now seriously, when I started to plan this series [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/04/10/adobe-webup-4-is-on/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F04%2F10%2Fadobe-webup-4-is-on%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F04%2F10%2Fadobe-webup-4-is-on%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Adobe WebUp #4 <a href="http://adobewebup4.eventbrite.com/">registration</a> is open now! This means that you should not only register yourself and your girlfriend/friend/brothers&amp;sisters but you should also tell others about this awesome event!</p>
<p>What? You don’t believe that it will be awesome? Trust me, I should know as I am the organizer:)</p>
<p>Now seriously, when I started to plan this series back in December 2011 one of the goals and success indicators that I set at the time was having people outside of Adobe speaking at our event. And this is exactly what is about to happen: two great programmers who don&#8217;t work for Adobe will be our first two speakers (thanks Cristian and Alexandru).</p>
<p>See you on April 26th. Until then all the best and Happy Easter!</p>
<p>Later Update: if you can&#8217;t attend the event and you still want to see what&#8217;s happening there (maybe you are from Republic of Moldova or Timisoara) you can watch the live streaming at</p>
<p><a href="https://eseminars.adobeconnect.com/_a827192574/adobewebup">https://eseminars.adobeconnect.com/_a827192574/adobewebup</a> (we will open the stream around 5:30PM)</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/vaLUchhFuE4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/04/10/adobe-webup-4-is-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/04/10/adobe-webup-4-is-on/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-webup-4-is-on</feedburner:origLink></item>
		<item>
		<title>Appliness or French “magique” at its best</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/nfCSTfOfNbY/</link>
		<comments>http://corlan.org/2012/03/29/appliness-or-french-magique-at-its-best/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 09:38:36 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3626</guid>
		<description><![CDATA[
			
				
			
		
My fellow evangelist Michaël Chaize was quite busy lately doing some strange alchemy experiments that involved high command of DPS, the art of charming people, UXD, and many more I am afraid to name.
And the result is even tastier than a French croissant in a Spring morning in the 18th arrondissement of Paris (which is Montmartre, [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/29/appliness-or-french-magique-at-its-best/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F29%2Fappliness-or-french-magique-at-its-best%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F29%2Fappliness-or-french-magique-at-its-best%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>My fellow evangelist Michaël Chaize was quite busy lately doing some strange alchemy experiments that involved high command of <a href="http://www.adobe.com/products/digital-publishing-suite-family.html">DPS</a>, the art of charming people, UXD, and many more I am afraid to name.</p>
<p>And the result is even tastier than a French croissant in a Spring morning in the 18th arrondissement of Paris (which is Montmartre, if you didn&#8217;t know). Which shouldn&#8217;t come as a big surprise because although Michaël didn&#8217;t invent the croissant, he is very French.</p>
<p><img class="alignnone size-full wp-image-3627" title="appliness1" src="http://corlan.org/wp-content/uploads/2012/03/appliness1.png" alt="" width="360" height="480" /></p>
<p>What is Appliness? In a nutshell, Michaël used Adobe Digital Publishing Suite to create the first digital magazine for web application developers. It has lots of interesting topics (jQuery Mobile, PhoneGap, BackBone,&#8230;). You can download the magazine for your <a href="http://itunes.apple.com/au/app/appliness/id510636049">iPad</a> or <a href="https://play.google.com/store/apps/details?id=com.appliness.applinessAndroid">Android</a> tablet (it is free by the way). If you want to contribute to this magazine go to <a href="http://appliness.com">http://appliness.com</a> and if you want to learn more about the project read Michaël&#8217;s <a href="http://www.riagora.com/2012/03/appliness-digital-magazine/">post</a>.</p>
<p><strong>Later Update</strong>: Just got an email from Michaël saying that my post is epic. I guess some of the &#8220;magique&#8221; did rub off on me :)</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/nfCSTfOfNbY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/29/appliness-or-french-magique-at-its-best/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/29/appliness-or-french-magique-at-its-best/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=appliness-or-french-magique-at-its-best</feedburner:origLink></item>
		<item>
		<title>Adobe Romania WebKit Hackathon</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/aDiV66FJdc8/</link>
		<comments>http://corlan.org/2012/03/28/adobe-romania-webkit-hackathon/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 13:08:47 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3620</guid>
		<description><![CDATA[
			
				
			
		
Last week, for three days, the Adobe Romanian office hosted a WebKit Hackathon. What&#8217;s all the fuss with this WebKit Hackathon you might wonder. Let me explain :D
First of all, why WebKit? I truly believe that you already know the answer. In case you don&#8217;t, here is a short anecdote: Dion Almaer (you know, the [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/28/adobe-romania-webkit-hackathon/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F28%2Fadobe-romania-webkit-hackathon%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F28%2Fadobe-romania-webkit-hackathon%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Last week, for three days, the Adobe Romanian office hosted a WebKit Hackathon. What&#8217;s all the fuss with this WebKit Hackathon you might wonder. Let me explain :D</p>
<p>First of all, why WebKit? I truly believe that you already know the answer. In case you don&#8217;t, here is a short anecdote: Dion Almaer (you know, the guy who started Ajaxian among many other things) once said something along these lines: if you are a student probably the best time investment you can make today is to grab the WebKit source code and start &#8220;playing&#8221; with it. There is no dennying that WebKit is one of the most used  browser engines today (I&#8217;m not talking about browser market share I&#8217;m talking about the number of different projects using this engine).</p>
<p>Let&#8217;s move on and talk about the hackathon. A hackathon gives developers a chance to learn or to teach about a specific technology. Because you have these two categories involved (people who want to learn new things and people who know these things and want to teach others) the energy level and enthusiasm is pretty much off the scale. This is why it is not unusual at the end of a hackathon to realize you&#8217;ve gotten more work done than what you had expected.</p>
<p>The last question you might have is why Adobe Romania? Because we have engineers who have been working on the WebKit codebase for the past 4-5 years. From their work prototypes of CSS Regions, CSS Exclusions, and CSS Shaders &#8211; to name just a few &#8211; emerged.</p>
<p>Thus, if you put these three ingredients together you get the first Romanian WebKit Hackathon. So what exactly happened there?</p>
<p>A number of Adobe WebKit engineers together with seven students worked on the WebKit codebase. It is interesting to note that the students didn&#8217;t have any prior experience with WebKit. The result was amazing. Some of their work was accepted by WebKit reviewers and it will be committed back to the WebKit trunk. Here are some examples of the work they did:</p>
<ul>
<li>Fixed elements that use rounded corners and background images so the image will be clipped.</li>
<li>Enhanced the Web Inspector UI for visual manipulation of numerical data-types</li>
<li>Created a prototype of CSS Regions that uses Shadow DOM</li>
<li>Implemented overflow event on NamedFlow objects</li>
<li>Added support for resize events for any DOM element</li>
</ul>
<p>My colleagues are working on getting the demos out. I will update this post with the links once they are published. Until the next Adobe Romania WebKit Hackathon, all the best and, of course, congrats to all people involved in this event!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/aDiV66FJdc8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/28/adobe-romania-webkit-hackathon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/28/adobe-romania-webkit-hackathon/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-romania-webkit-hackathon</feedburner:origLink></item>
		<item>
		<title>Playing with Adobe Edge</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/mD92gDbdUto/</link>
		<comments>http://corlan.org/2012/03/19/playing-with-adobe-edge/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 15:23:30 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3600</guid>
		<description><![CDATA[
			
				
			
		
Recently, we released Adobe Edge preview 5.1 (you can grab the bits from here). Adobe Edge helps you to create interactive web sites and web animation using just HTML, CSS, and JavaScript. The tool does a really good job of being intuitive. Look at the image below:

You have the web page loaded on the canvas [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/19/playing-with-adobe-edge/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F19%2Fplaying-with-adobe-edge%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F19%2Fplaying-with-adobe-edge%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Recently, we released Adobe Edge preview 5.1 (you can grab the bits from <a href="http://labs.adobe.com/technologies/edge/">here</a>). Adobe Edge helps you to create interactive web sites and web animation using just HTML, CSS, and JavaScript. The tool does a really good job of being intuitive. Look at the image below:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/edge-1.png"><img class="alignnone size-medium wp-image-3602" title="Adobe Edge" src="http://corlan.org/wp-content/uploads/2012/03/edge-1-300x184.png" alt="" width="300" height="184" /></a></p>
<p>You have the web page loaded on the canvas (Edge uses WebKit to render web pages), you have the timeline at the bottom, and on the right side you have a panel with all the HTML DOM elements from the current page. Here is a screenshot of an interactive design created with this tool:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/edge-2.png"><img class="alignnone size-medium wp-image-3603" title="Edge Example" src="http://corlan.org/wp-content/uploads/2012/03/edge-2-300x244.png" alt="" width="300" height="244" /></a></p>
<p>I know there are some people who don&#8217;t trust visual tools that create web pages. But I encourage you to take a look at this tool and also give us feedback to make it better (Edge was downloaded by a large number of people, a clear sign that the tool answers a need many people have). If you are not able to visualize code like <a href="http://en.wikipedia.org/wiki/Neo_(The_Matrix)">Neo</a>,  a tool that helps you to code visually is simply awesome :)</p>
<p>There are many more things that the tool can do and as we move on towards the launch day more features will be added. If you want to check all the features that Edge supports, make sure you take a look at this <a href="http://labs.adobe.com/technologies/edge/">page</a>. If you prefer watching a video, here is the <a href="http://tv.adobe.com/watch/adc-presents/introducing-adobe-edge-preview-5/">link</a>. And if you want to see some cool sites created with Edge check <a href="http://screenrights.net/pmkwilliams/">this</a>  link or <a href="http://g-plus-follow-me-animated-button.tumblr.com/">this</a> (if this isn&#8217;t enough check the Facebook <a href="https://www.facebook.com/AdobeEdge">page</a>).</p>
<p><span id="more-3600"></span></p>
<h2>A simple example of a web animation</h2>
<p>My fellow evangelist Kevin Hoyt created the <a href="http://blog.kevinhoyt.com/2012/02/drawing-with-css/">Adobe logo</a> using just CSS and DIV elements (that&#8217;s right, no letters). Once the Edge preview 5 was out I thought that this would be the perfect opportunity to play with the tool on some cool HTML code.</p>
<p>First, I saved Kevin&#8217;s example locally. Then I removed the JavaScript code (it was used for centering the logo and I didn&#8217;t need it for my example) and I inlined the CSS (this is not an Edge requirement; I did it only to contain everything in a single resource). With all these small tweaks I was ready to start my Edge animation: I opened the Edge tool, I chose Open File and selected the web page with the Adobe logo (this is one of the great things about Edge: it allows you to work directly on a web page).</p>
<p>Having the page loaded in Edge, it is time to create my simple animation. The timeline features two important parts: the <em>playhead</em> and the <em>pin</em>. Using these two tools you can either animate from the current state of the DOM to a future one, or you can animate towards the current state of the DOM.</p>
<p>For what I want to create I have to use the second scenario: I want to animate the individual parts of the logo from &#8220;nothing&#8221; to the finished logo. To do that I will enable the <em>pin</em> by clicking on the third icon from the <em>Timeline</em> panel (see the picture below). This will add to the timeline a little blue icon.</p>
<p><img class="alignnone size-full wp-image-3607" title="Enabling the Pin" src="http://corlan.org/wp-content/uploads/2012/03/edge-31.png" alt="" width="381" height="190" /></p>
<p>Adobe Edge allows you to control the easing equation for your animations. If you click the fourth icon from the <em>Timeline</em> panel you will be able to select the equation to be used.</p>
<p><img class="alignnone size-full wp-image-3608" title="Choosing the easing equation" src="http://corlan.org/wp-content/uploads/2012/03/edge-4.png" alt="" width="449" height="245" /></p>
<p>Once I selected the easing equation I moved the pin to the right of the playhead. This means that I will create an animation towards the current state, which means that at the end of the animation the logo will look like the one created by Kevin.</p>
<p><img class="alignnone size-full wp-image-3609" title="Creating the animation" src="http://corlan.org/wp-content/uploads/2012/03/edge-5.png" alt="" width="302" height="117" /></p>
<p>Now I am ready to  be creative with the different parts of the logo. I can play with the position by dragging the DIV elements in different positions, rotate (right-click on an element and choose Add Key Frame &gt; Rotate), and changing its opacity (right-click on the element and choose Add Key Frame &gt; Opacity).</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/edge-6.png"><img class="alignnone size-medium wp-image-3611" title="Orchestrating the animations" src="http://corlan.org/wp-content/uploads/2012/03/edge-6-242x300.png" alt="" width="242" height="300" /></a></p>
<p>You can orchestrate the animations so instead of moving all elements with the same speed and at the same time you can choose to delay some of them (just select the elements on the timeline and drag to the right or left and/or compress the animation line when you want to accelerate  or slow an animation). You can insert key frames along an existing animation to fine tune the whole animation. In short, you have pretty much everything you&#8217;d expect from an animation tool.</p>
<p>When you are ready to publish your project, all you have to do is to select File &gt; Publish Settings (you can choose to embed some of the JavaScript files from CDNs instead of your server; this way you might speed up the loading time) and then hit File &gt; Publish. The last command will create a folder named <em>publish</em> in the same folder where your HTML file is stored (all the JS files being minified). All you have to do is to copy this folder to your server and you are done. Here is a screenshot with the project folder:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/edge-7.png"><img class="alignnone size-medium wp-image-3612" title="Publishing Adobe Edge projects" src="http://corlan.org/wp-content/uploads/2012/03/edge-7-300x102.png" alt="" width="300" height="102" /></a></p>
<p>So what did Edge add to the original file (remember that we started with only one file containing HTML and CSS)? Basically it added just JavaScript files (Edge libraries plus jQuery libraries). All the information needed for the animations are stored in a JavaScript file that ends with <em>_edge.js</em>. Edge didn&#8217;t touch the original file other than including the pre-loader JavaScript file; if you open the HTML file you will see in the <em>head</em> section these lines:</p>
<pre class="brush: plain; title: ; notranslate">

&lt;!--Adobe Edge Runtime--&gt;
 &lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot; src=&quot;Adobe-Logo-in-CSS_edgePreload.js&quot;&gt;&lt;/script&gt;
&lt;!--Adobe Edge Runtime End--&gt;
</pre>
<p><strong>You can see the final animation <a href="http://corlan.org/downloads/edge/logo/Adobe-Logo-in-CSS.html">here</a>.</strong></p>
<h2>What browsers are supported</h2>
<p>Basically almost all browsers are supported: Chrome, Safari (including iOS and Android), Firefox,  and Internet Explorer 9. For older browsers you have an option to create an image from any state of the animation and display that image.</p>
<h2>Where to go next</h2>
<p>I hope this short introduction raised your curiosity and you&#8217;ll try the product and give us feedback. As I said earlier, as we move on towards the 1.0 release it is important that people who actually build the web try this product and help us make the best tool for motion and interaction web content based on web standards &#8211; <a href="http://forums.adobe.com/community/labs/edge/">here</a> you can find the product forum, a perfect place to share your thoughts.</p>
<p>Follow <a href="https://twitter.com/#!/mcorlan">me</a>, my blog or <a href="https://twitter.com/#!/adobeedge">Edge</a> to stay informed on what&#8217;s new and hot.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/mD92gDbdUto" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/19/playing-with-adobe-edge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/19/playing-with-adobe-edge/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=playing-with-adobe-edge</feedburner:origLink></item>
		<item>
		<title>CSS Bleeding Edge Features</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/wSJbe_wVl6w/</link>
		<comments>http://corlan.org/2012/03/16/css-bleeding-edge-features/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 17:09:17 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3556</guid>
		<description><![CDATA[
			
				
			
		
This post has been in the back of my mind for sometime. When I woke up this morning I felt a strong desire to help spread the gospels about some of the coolest CSS proposals around layout and effects. If you are the type of person who attends W3C CSS Working Group or maybe W3C [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/16/css-bleeding-edge-features/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F16%2Fcss-bleeding-edge-features%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F16%2Fcss-bleeding-edge-features%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>This post has been in the back of my mind for sometime. When I woke up this morning I felt a strong desire to help spread the gospels about some of the coolest CSS proposals around layout and effects. If you are the type of person who attends W3C CSS Working Group or maybe W3C CSS-SVG Effects Task Force meetings then you already know this stuff. Otherwise, you should probably keep reading because you might learn some new things.</p>
<p>So what am I talking about here? Pardon me sir, I should have said right at the beginning of this post: I am talking about CSS Regions, CSS Exclusions, CSS Pagination Templates, and CSS Shaders. All of these features were proposed by Adobe and we are working together with other members of web standard groups to make them a &#8230; web standard :).</p>
<p>Before getting into details and stuff, let me step back to give you the context in which these CSS proposals were born. Most of the time the feature proposals for new web standards come from web browser manufacturers, guys like Google, Apple, Mozilla, Opera, and so forth. And this is great because they are building browsers day in, day out.</p>
<p>However, there are other players out there who can give a valuable input despite the fact they don&#8217;t build a browser. And Adobe is one good example. Our clients create digital content using various combinations of Adobe tools and this content targets the web browser along with other mediums.</p>
<p>And when you talk to a client who comes from the publishing business, one of the things he&#8217;ll tell you is that it is extremely hard to create complex layouts using today&#8217;s web standards. Of course if you throw in some JavaScript libraries and/or lots of PNGs then you can actually recreate what is possible to do in print. But why not have support for complex layouts built-in directly at the browser level and exposed as a number of CSS properties? This would ensure that you can not only build the content faster (because you don&#8217;t have to jump through all kind of hoops) but you&#8217;d get consistent performance across devices (mobile and desktop).</p>
<p>Adobe&#8217;s solution to this very question (how can you create magazine quality layout for web?) is this trio of CSS proposals: Regions, Exclusions &amp; Shapes, and Pagination Templates.</p>
<p>While making CSS proposals is important, having a prototype could be even more important. Adobe provided for three of them a prototype implementation for WebKit. In case you wonder why Adobe chose WebKit as the engine to build prototypes for, the response is simple: WebKit has been used for different products for a number of years already. This means that we have engineers who are familiar with the WebKit code base (some being WebKit committers/reviewers).</p>
<p><span id="more-3556"></span></p>
<h2>Current Status</h2>
<p>Before talking about what each proposal does, I think that it is better to talk about today&#8217;s status (<strong>yes, I&#8217;m going to keep this section up to date</strong>). So, what is the spec status and what browsers implement the feature?</p>
<table border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr style="background-color: #080808; color: #ffffff;">
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><strong>CSS Proposal</strong></td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><strong>Supported In</strong></td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><strong>Spec Status</strong></td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><strong>Authored By</strong></td>
</tr>
<tr>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">CSS Regions</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">Chrome newer than 15, Chrome for Android,<br />
Internet Explorer 10</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><a href="http://dev.w3.org/csswg/css3-regions/">Editor&#8217;s Draft 2</a></td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">Adobe, Microsoft</td>
</tr>
<tr style="background-color: #dedede;">
<td style="border-width: 1px; border-color: #696969; border-style: solid;">CSS Exclusions &amp; Shapes</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">No browser &#8211; only special WebKit builds</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><a href="http://dev.w3.org/csswg/css3-exclusions/">Editor&#8217;s Draft 2</a></td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">Adobe, Microsoft</td>
</tr>
<tr>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">CSS Pagination Templates</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">No browser</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><a href="http://dev.w3.org/csswg/css3-page-template/">Editor&#8217;s Draft 3</a></td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">Adobe</td>
</tr>
<tr style="background-color: #dedede;">
<td style="border-width: 1px; border-color: #696969; border-style: solid;">CSS Shaders</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">No browser &#8211; only special WebKit builds</td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;"><a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/custom/index.html">Editor&#8217;s Draft</a></td>
<td style="border-width: 1px; border-color: #696969; border-style: solid;">Adobe, Apple, Opera</td>
</tr>
</tbody>
</table>
<p><strong>Note:</strong> If you&#8217;re wondering what an Editor&#8217;s Draft is, then here is a little explanation. The proposal life-cycle is pretty much like this:</p>
<ol>
<li><strong>Working Draft (WD)</strong> (could be multiple iterations) &#8211; the new standard is published for review by the community for the first time (virtually anyone can provide feedback).</li>
<li><strong>Candidate Recommendation (CR) </strong>- at this point the important features are locked in although the design of these features can change.</li>
<li><strong>Proposed Recommendation (PR) </strong>- Once all the involved parties (users and implementers of the standard) provided feedback and the feedback is addressed, the spec moves to this stage, Proposed Recommendation.</li>
<li>Finally it becomes a <strong>W3C Recommendation (REC)</strong> - the final stage of the technical specification. This is what the browsers should use to implement support for the given spec.</li>
</ol>
<div>So where is Editor&#8217;s Draft in the list above? Well, Editor&#8217;s draft means Working Draft. Confusing? I know; if you want the whole menu, read <a href="http://www.w3.org/2005/10/Process-20051014/tr.html">here</a>.</div>
<h2>CSS Regions</h2>
<p>CSS Regions allow you to create &#8220;named flows&#8221; of content which can then get laid out across multiple regions. In other words, you can reflow the content from an element to an arbitrary number of elements, which can be in different parts of document. The simple example is one that allows you to create a number of columns and as you change the columns&#8217; number or dimensions, the content automatically flows within them.</p>
<p><img class="size-full wp-image-3575 alignnone" title="css-1" src="http://corlan.org/wp-content/uploads/2012/03/css-1.png" alt="" width="295" height="366" /> <img class="size-full wp-image-3576" title="css-2" src="http://corlan.org/wp-content/uploads/2012/03/css-2.png" alt="" width="295" height="366" /></p>
<p>If you have a Chrome browser on your desktop/mobile device or Internet Explorer 10 you should be able to see this <a href="http://corlan.org/downloads/simple_single_thread.html">example</a>.</p>
<p>Probably the simplest example you can build (using the current syntax) is this:</p>
<pre class="brush: plain; title: ; notranslate">

&lt;style&gt;

#article {
flow-into: article_flow;
}

#region1, #region2, #region3 {
flow-from: article_flow;

&lt;/style&gt;

&lt;div id=&quot;article&quot;&gt;Here comes the text you want to display in different regions&lt;/div&gt;

&lt;div id=&quot;region1&quot;&gt;&lt;/div&gt;&lt;!-- First region --&gt;
&lt;div id=&quot;region2&quot;&gt;&lt;/div&gt;&lt;!-- Second region --&gt;
&lt;div id=&quot;region3&quot;&gt;&lt;/div&gt;&lt;!-- Third region --&gt;
</pre>
<p>The flow order (the order in which the regions are filled with the text) is determined according to the document order. The proposal specifies that you can use region styling. This allows you to style the content depending on the region it flows into.</p>
<ul>
<li>Proposal authored by Adobe and Microsoft</li>
<li><a href="http://blogs.adobe.com/webplatform/2012/03/16/css-regions-one-year-in/">Blogpost</a> by Vincent Hardy from Adobe, one of the two editors of this spec</li>
<li><a href="http://dev.w3.org/csswg/css3-regions/">Spec home</a></li>
<li><a href="http://labs.adobe.com/downloads/cssregions.html">Custom build of WebKit (the first prototype showed)</a></li>
</ul>
<h2>CSS Pagination Templates</h2>
<p>If you read the CSS Regions description and think a little bit about it chances are you discovered two issues. First, you have to define in the page a bunch of elements that initially are empty &#8211; these elements will be filled with the content to be flowed. Second, if the content is less or more than the regions capability to display the text, then you don&#8217;t have a clean way to deal with this.</p>
<p>This is where Adobe&#8217;s CSS Pagination Templates proposal comes in. It allows you to define templates to be used for displaying content using just CSS. And because you define a template, it doesn&#8217;t matter how much content you have. The browser will be capable of generating the number of elements you need to fully display the content. Now this is something sweet, isn&#8217;t it?</p>
<ul>
<li><a href="http://dev.w3.org/csswg/css3-page-template/">Spec home</a></li>
<li>No prototype available for now, BUT keep an eye on this page &#8211; I will have something awesome for you to play with :)</li>
</ul>
<h2>CSS Exclusions and Shapes</h2>
<p>If you go back to the original problem Adobe wanted to solve (magazines quality layout for the web) then you likely realize that CSS Regions (and his little brother, CSS Pagination Templates) is just half of the problem. Consider these two layouts:</p>
<p><img class="alignnone size-full wp-image-3579" title="css-3" src="http://corlan.org/wp-content/uploads/2012/03/css-3.png" alt="" width="450" height="387" /></p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/css-4.png"><img class="alignnone size-full wp-image-3580" title="css-4" src="http://corlan.org/wp-content/uploads/2012/03/css-4.png" alt="" width="450" height="389" /></a></p>
<p>You don&#8217;t have to be a CSS ninja to understand that there is no way to create this design for the web using just text and CSS.</p>
<p>So how can you solve this problem? Probably the best friend (or girlfriend if you want) of CSS Regions is CSS Shapes and Exclusions. This proposal allows you to:</p>
<div>
<ul>
<li>define arbitrary areas around which content can flow (exclusions)</li>
<li>control the geometric shape used for wrapping content (shapes). Suppose you want to render text in a DIV element as if the DIV would be actually a circle.</li>
</ul>
</div>
<div>The current syntax for this feature is not too difficult to follow. This would be a simple example that allows you to exclude a rectangular region from a text flow:</div>
<div></div>
<div>
<pre class="brush: plain; title: ; notranslate">
&lt;style&gt;
#exclusion {
   position: absolute;
   wrap-flow: both;
   background: #dedede;
   width: 80px;
height: 70px;
}
&lt;/style&gt;

&lt;div&gt;
   &lt;div id=&quot;exclusion&quot;&gt;&lt;/div&gt;
Lorem ipsum dolor sit amet...
&lt;/div&gt;
</pre>
</div>
<div></div>
<div><img class="alignnone size-full wp-image-3581" title="css-5" src="http://corlan.org/wp-content/uploads/2012/03/css-5.png" alt="" width="300" height="234" /></div>
<div></div>
<div>What about changing the box shape of an element to something different, like for example making the text appear as rendered inside of a circle?</div>
<div></div>
<div><img class="alignnone size-full wp-image-3582" title="css-6" src="http://corlan.org/wp-content/uploads/2012/03/css-6.png" alt="" width="355" height="319" /></div>
<div>To define this kind of wrapping you&#8217;d use the <em>shape-inside</em> CSS property. And you can use SVG shapes for defining the shape to be used for wrapping content; for example:</div>
<div></div>
<div>
<pre class="brush: plain; title: ; notranslate">
&lt;style&gt;
.in-a-circle {
    shape-inside: url(#circle_shape);
}
&lt;/style&gt;

&lt;svg...&gt;
    &lt;circle id=&quot;circle_shape&quot; cx=&quot;50%&quot; cy=&quot;50%&quot; r=&quot;50%&quot;/&gt;
&lt;/svg&gt;

&lt;div class=&quot;in-a-circle&quot;&gt;Content to be wrap...&lt;/div&gt;
</pre>
</div>
<p>Another cool aspect of this spec is the ability to use images for defining the exclusion area. In this case the alpha channel is used to compute the shape.</p>
<ul>
<li>Proposal authored by Adobe and Microsoft</li>
<li><a href="http://dev.w3.org/csswg/css3-exclusions/">Spec home</a></li>
<li><a href="http://labs.adobe.com/downloads/cssregions.html">Custom build of WebKit (the first prototype showed)</a></li>
</ul>
<h2>CSS Shaders</h2>
<p>This proposal brings cinematic effects to the web. If you are familiar with the <a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html">Filter Effects</a> spec then you know that you can use a number of predefined filters (or effects) on any DOM element: blur, drop-shadow, hue-rotate, saturate, invert, grayscale, opacity, gamma, and sepia.</p>
<p>Together with CSS transitions you can create some nice visual effects. However, what if you want to do something that is not covered by these built-in effects? The answer is the CSS Shaders proposal.</p>
<p>As with Filter Effects, you can apply a CSS Shader to any DOM element. This means that the source of a CSS Shader (texture) will be the DOM element rendered by the browser. Then you can apply a vertex shader and/or fragment shader to change the appearance.</p>
<p>A vertex shader is used to change the geometry of the pixels input. This is what you&#8217;d have to use in order to wrap the DOM element to sphere for example or any other 3D surface. Consider the two images below:</p>
<p><img class="alignnone size-full wp-image-3586" title="css-7" src="http://corlan.org/wp-content/uploads/2012/03/css-7.png" alt="" width="295" height="395" /> <img class="alignnone size-full wp-image-3587" title="css-8" src="http://corlan.org/wp-content/uploads/2012/03/css-8.png" alt="" width="295" height="381" /></p>
<p>On the left-hand side you can see a list (&lt;ul&gt;) that displays some tweets. On the right-hand side the same list is wrapped in a 3D perspective by applying a vertex shader.</p>
<p>A fragment shader (also known as pixel shader) changes the color of the pixels. Here is simple example where the fragment shader applies a grayscale (the result is on the right) on the DIV element (on the left):</p>
<p><img class="alignnone size-full wp-image-3588" title="css-9" src="http://corlan.org/wp-content/uploads/2012/03/css-9.png" alt="" width="295" height="219" /> <img class="alignnone size-full wp-image-3589" title="css-10" src="http://corlan.org/wp-content/uploads/2012/03/css-10.png" alt="" width="295" height="221" /></p>
<p>When you create CSS Shaders that apply both vertex and fragment shaders, behind the scene the source DOM element (the raster image of the element as rendered by the browser before applying the CSS Shader) is first processed by the vertex shader and its geometry is changed and then the fragment shader kicks in and changes the pixels&#8217; appearance (color or alpha).</p>
<p>The Shaders are written using the <a href="http://www.khronos.org/files/opengles_shading_language.pdf">OpenGL ES</a> shading language, the same language used for WebGL shaders. I encourage you to look at the videos from this <a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html">page</a> where you can see a bunch of examples of CSS Shaders.</p>
<ul>
<li>Proposal authored by Adobe, Apple, and Opera</li>
<li><a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/custom/index.html">Spec home</a></li>
<li><a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html">More info about CSS Shaders</a></li>
<li>No prototype available for no</li>
</ul>
<h2>Conclusions</h2>
<p>I hope that you are excited by these features. If you have input please make sure you watch the proposal specs and you give your feedback. And keep an eye on this page to see how the specs evolve. Another good resource is <a href="http://blogs.adobe.com/webplatform/">Adobe Web Platform Team blog</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/wSJbe_wVl6w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/16/css-bleeding-edge-features/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/16/css-bleeding-edge-features/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=css-bleeding-edge-features</feedburner:origLink></item>
		<item>
		<title>Adobe WebUp #3 is on</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/4WEyRGose-8/</link>
		<comments>http://corlan.org/2012/03/14/adobe-webup-3-is-on/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 11:05:32 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3552</guid>
		<description><![CDATA[
			
				
			
		
It is my pleasure to announce that registration for Adobe WebUp (the third event of the series) is open. If you care about technologies like: Google Web Toolkit, CoffeeScript, mobile web site debugging, Backbone.js, Liquid.js, and Node.js then you should come. You can read more about the agenda here.

If you&#8217;ve attended the previous editions and [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/14/adobe-webup-3-is-on/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F14%2Fadobe-webup-3-is-on%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F14%2Fadobe-webup-3-is-on%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>It is my pleasure to announce that registration for <a href="http://adobewebup3.eventbrite.com/">Adobe WebUp</a> (the third event of the <a href="http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/">series</a>) is open. If you care about technologies like: Google Web Toolkit, CoffeeScript, mobile web site debugging, Backbone.js, Liquid.js, and Node.js then you should come. You can read more about the agenda <a href="http://adobewebup3.eventbrite.com/">here</a>.</p>
<p><img class="aligncenter size-medium wp-image-3403" title="adobeWebup" src="http://corlan.org/wp-content/uploads/2012/02/adobeWebup-300x133.png" alt="" width="300" height="133" /></p>
<p>If you&#8217;ve attended the previous editions and enjoyed it, then make sure you tell your friends about this. By the way the &#8220;official&#8221; Twitter hashtag is #AdobeWebUp.</p>
<p>As usual, the conference is on a Thursday (March 29th) and registration starts at 17:30. See you there amigos!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/4WEyRGose-8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/14/adobe-webup-3-is-on/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/14/adobe-webup-3-is-on/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-webup-3-is-on</feedburner:origLink></item>
		<item>
		<title>My thoughts on Windows Phone</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/sFXT6_PnKZ0/</link>
		<comments>http://corlan.org/2012/03/07/my-thoughts-on-windows-phone/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 18:01:16 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3542</guid>
		<description><![CDATA[
			
				
			
		
A friend of mine, Ray Camden, has recently posted his thoughts on Windows Phone. As his impressions are quite different from mine I thought I should give it a try and explain what Windows Phone felt like to me.
I had the chance to play with it at Barcelona Mobile World Congress. Right near our booth [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/07/my-thoughts-on-windows-phone/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fmy-thoughts-on-windows-phone%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fmy-thoughts-on-windows-phone%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://feedproxy.google.com/~r/RaymondCamdensColdfusionBlog/~3/YXEc-4xuqMg/Some-thoughts-on-Windows-Phone-and-Windows-8-in-general">A friend of mine</a>, Ray Camden, has recently posted his thoughts on Windows Phone. As his impressions are quite different from mine I thought I should give it a try and explain what Windows Phone felt like to me.</p>
<p>I had the chance to play with it at Barcelona Mobile World Congress. Right near our booth was the Microsoft booth. There were four devices running the latest Windows mobile OS (I can&#8217;t remember all four devices but I&#8217;m pretty sure they included Nokia, HTC, and Samsung).</p>
<p>What I really liked was the sheer speed of the device. I couldn&#8217;t sense any lag everything was running fast and smooth. This doesn&#8217;t mean that this will be the case for anything or everything running on the device &#8211; remember I tried just the default apps.</p>
<p>Then, I liked the fact that they went for something different that doesn&#8217;t look like Android or iOS or anything else I played with.</p>
<p>Unfortunately, this is exactly why I could not say that I&#8217;d love to use it regularly. To me, the two biggest mistakes or drawbacks are:</p>
<ol>
<li>Using the apps tiles from the home screen to display notifications. As I was firing up the screens from sleep mode on these phones I couldn&#8217;t help feeling that all those notifications were competing for my attention. At a minimum I&#8217;d say they are distracting.I could be biased but when I unlock my Android screen I know exactly what I want to do (like checking email or send a message). Although there are notifications in the Android&#8217;s title bar they are not screaming in your face.<br />
Compared to this, the dozens of Windows tiles were like a school of piranhas and by the time I was finished dodging them I&#8217;ve already forgotten what I wanted to do.</p>
<p>After my second attempt using the phone I realized that this phone doesn&#8217;t feel like a business or knowledge worker type of phone but like a device for a college kid who only cares about keeping &#8220;in synch&#8221; with all his friends.</li>
<li>As I was playing with different apps on the phone I realized that something was odd. After a couple of seconds I realized that there was too much animation going on, things were flying on the screen or flipping over onto something else, and it was all a bit too much.</li>
</ol>
<div>In the end I think it is refreshing to see someone who doesn&#8217;t follow other&#8217;s steps. At the same time it is a pity that they went overboard with reinventing everything. My first experience with the phone made me think that it is not for me or I am not in its target audience.</div>
<div></div>
<div>What is your experience with Windows Mobile Phone?</div>
<p>Note: I may be biased as I&#8217;ve been using iPhone and Android phones for the past five years.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/sFXT6_PnKZ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/07/my-thoughts-on-windows-phone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/07/my-thoughts-on-windows-phone/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=my-thoughts-on-windows-phone</feedburner:origLink></item>
		<item>
		<title>About users and modern browsers</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/xgRUqh5Cj9Y/</link>
		<comments>http://corlan.org/2012/03/07/about-users-and-modern-browsers/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 11:10:39 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3535</guid>
		<description><![CDATA[
			
				
			
		
During one of the Q&#38;A sessions we had at the Adobe WebUp #2 event I was surprised to see so many people defending quite aggressively the idea of building web sites/apps for the common denominator (in other words making sure that everything works in IE6).
Well, just to be clear there is nothing wrong with building [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/07/about-users-and-modern-browsers/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fabout-users-and-modern-browsers%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fabout-users-and-modern-browsers%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>During one of the Q&amp;A sessions we had at the Adobe WebUp #2 event I was surprised to see so many people defending quite aggressively the idea of building web sites/apps for the common denominator (in other words making sure that everything works in IE6).</p>
<p>Well, just to be clear there is nothing wrong with building a web site or application that supports IE6. What I think is wrong is when you get so comfortable with this mindset that you don&#8217;t even question the need of supporting IE6. And this is the very reason I was actually surprised to see defending the support for IE6 in the name of the user.</p>
<p>Just off the top of my head I can give you three simple examples where supporting old browsers doesn&#8217;t add any benefit:</p>
<ul>
<li>You build a web site or application for enterprise or something that will be consumed behind a firewall. In this scenario you are free to choose whatever HTML features you want to use because you can control the web browser of the users. So you can enforce the use of modern browsers.</li>
<li>You build a mobile web site or application. Although there are stats suggesting that the mobile landscape is not only about iOS and Android, I think that for most businesses this is what they mean when talking about mobile web sites. Obviously both iOS and Android have great support for HTML5 and CSS3 features so you are &#8220;liberated&#8221; to use whatever you want.</li>
<li>Finally, you&#8217;re working on an existing project and the analytics you have suggest that your customers don&#8217;t use older browsers.</li>
</ul>
<div>And even if your users demand support for older browsers maybe it is worth taking a look at some of the <a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills">polyfills/shims/fallbacks</a> for shiny new features available for older browsers and use <a href="http://www.alistapart.com/articles/understandingprogressiveenhancement">progressive enhancement</a>.</div>
<p>Am I wrong? Have you seen this in practice? Talk back!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/xgRUqh5Cj9Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/07/about-users-and-modern-browsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/07/about-users-and-modern-browsers/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=about-users-and-modern-browsers</feedburner:origLink></item>
		<item>
		<title>Using PhoneGap Build and Debug</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/DmIOll4NLSU/</link>
		<comments>http://corlan.org/2012/03/07/using-phonegap-build-and-debug/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 10:05:06 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3492</guid>
		<description><![CDATA[
			
				
			
		
PhoneGap is a great solution for building mobile applications for multiple platforms using the &#8220;write once, run everywhere&#8221; paradigm. However there is a tricky part: when you want to package your app and get the native installers you get back to the native development nightmare.
Typically you package your PhoneGap app using the developer tool chain [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/07/using-phonegap-build-and-debug/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fusing-phonegap-build-and-debug%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fusing-phonegap-build-and-debug%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>PhoneGap is a great solution for building mobile applications for multiple platforms using the &#8220;write once, run everywhere&#8221; paradigm. However there is a tricky part: when you want to package your app and get the native installers you get back to the native development nightmare.</p>
<p>Typically you package your PhoneGap app using the developer tool chain for the specific platform. In other words, if you want to package your app for iOS and Android you will be using a Mac and XCode for iOS and Eclipse with Android plugins for Android. As you add more platforms you can get a sense of the magnitude of the problem.</p>
<p><img class="aligncenter size-full wp-image-3527" title="PhoneGap Build" src="http://corlan.org/wp-content/uploads/2012/03/pg.png" alt="" width="192" height="42" /></p>
<p>This is exactly the problem PhoneGap Build solves. Using PhoneGap Build you can let the &#8220;cloud&#8221; do the crunching task for you. So from the comfort of your browser you only have to upload your application files (HTML, CSS, JavaScript, and images files) and PhoneGap Build will give you back installers for:</p>
<ul>
<li>iOS</li>
<li>Android</li>
<li>BlackBerry</li>
<li>webOS</li>
<li>Symbian</li>
</ul>
<p>Windows mobile support is coming in case this question was about to land in the comments section :)</p>
<p>Before moving on I want to stress one thing so I make sure you get the awesomeness of this service: in order to use it and get the native installers you don&#8217;t have install anything &#8211; no IDEs or developer SDKs.</p>
<div><span id="more-3492"></span></div>
<h2>What&#8217;s the catch?</h2>
<p>If it sounds t0o good to be true then I will have to partly disagree with you. It does what it advertises for. However, you have to understand that as of today (March 7th, 2012) this service is still in beta. So you might find some rough edges or you might discover that some things you need are not there.</p>
<p>However, the service is completely free and it will remain free for open source projects. We haven&#8217;t announced any other pricing details yet.</p>
<p>Another rough edge is the support for PhoneGap plugins. Out of the box, PhoneGap Build supports the ChildBrowser plugin (again, you may want to verify this info going forward because this is true as of March 7th, 2012). However, if you are not afraid of a little work you might be able to use other plugins too. You can read more <a href="https://build.phonegap.com/docs/plugins">here</a>.</p>
<h2>Using PhoneGap Build</h2>
<p>Once you&#8217;ve created an account at <a href="https://build.phonegap.com">https://build.phonegap.com</a> it is time to rock. And you can rock like a newbie and upload a ZIP file with your application or you can rock like U2 and point the PhoneGap Build to a GitHub or SVN repository.</p>
<p>A couple of weeks ago I built a simple <a href="http://corlan.org/2012/02/22/atabsplitter-the-web-standards-edition/">web app</a> for splitting a restaurant bill. And because I have the app uploaded to my GitHub account I thought that this might be perfect for testing the service. So all I had to do was click the <em>New App</em> button and then fill in two fields: application name and GitHub application URL.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg-build-1.png"><img class="alignnone size-medium wp-image-3504" title="Creating a new app" src="http://corlan.org/wp-content/uploads/2012/03/pg-build-1-241x300.png" alt="" width="241" height="300" /></a></p>
<p>Then I hit the <em>Create</em> button. In less than one minute I was able to download the Android APK file, and files for webOS and Symbian (the BlackBerry one wasn&#8217;t successful first time). The only one that needs a little bit more work than that is the iOS (you have to provide signing key/provisioning files).</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg-build-21.png"><img class="alignnone size-medium wp-image-3505" title="PhoneGap Build in Action" src="http://corlan.org/wp-content/uploads/2012/03/pg-build-21-300x193.png" alt="" width="300" height="193" /></a></p>
<p>I don&#8217;t know about you but I was really impressed to see that it only took 2-3 minutes to go from a web app to running an Android app on my phone.</p>
<p>For now the PhoneGap Build doesn&#8217;t support private GitHub repositories (this feature will come). But you can work around this buy creating a new Git repository on the service servers. Read more <a href="https://build.phonegap.com/docs/git-hosting">here</a>.</p>
<p>You can make your application private and then add people so they can download the app. These individuals can have two roles: tester (read access only) and developer (read/write access). If you want to play with this feature all you have to do is to click the <em>Edit</em> button from the application page and then, from the left-hand menu choose the <em>Collaborators</em> entry.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg101.png"><img class="size-medium wp-image-3532 alignnone" title="Adding collaborators" src="http://corlan.org/wp-content/uploads/2012/03/pg101-300x217.png" alt="" width="300" height="217" /></a></p>
<h2>The PhoneGap Build API</h2>
<p>The PhoneGap Build API it is really cool. Basically you have programmatic access to the service and thus you can add PhoneGap Build support to IDEs or automated build processes.</p>
<p>You can read more <a href="https://build.phonegap.com/docs/api">here</a>.</p>
<h2>Debug Build</h2>
<p>Another cool and time saving feature is the ability to build a debug version of your app and then use http://debug.phonegap.com to start a Web Inspector session on your computer that is connected to your app running on the mobile device.</p>
<p>The first thing you have to do is to enable debug mode for your app. So from the Application view click the <em>Edit</em> button, then select the <em>enable debug mode</em> option.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg-build-5.png"><img class="alignnone size-medium wp-image-3507" title="Enabling Debug Mode" src="http://corlan.org/wp-content/uploads/2012/03/pg-build-5-300x184.png" alt="" width="300" height="184" /></a></p>
<p>Once you click <em>Save</em> you will see the Application build page and a new button labeled <em>Debug</em>. After couple of minutes you should get builds created (refresh the page to see this). Install the native app on your device, fire up the app on your mobile device, and make sure it is connected to the Internet.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg-build-6.png"><img class="alignnone size-medium wp-image-3508" title="Getting the debug versions" src="http://corlan.org/wp-content/uploads/2012/03/pg-build-6-300x216.png" alt="" width="300" height="216" /></a></p>
<p>Then click the <em>Debug</em> button on the Application page. This will open a new browser and you will be able to use the Elements and Console sections of this remote Web Inspector. Pretty cool, isn&#8217;t it?</p>
<p>Once again I have to warn you that because it is a beta service sometimes the servers are overloaded with requests from people from all over the world.</p>
<h2>Rebuild the app</h2>
<p>Every time you change your app you may want to test the app again on your devices. With PhoneGap Build this task is extremely easy. From the Application page all you have to do is to click the <em>Update Code</em> button and then <em>Rebuild</em> all or <em>Rebuild</em> for the platform you are interested in. Of course before rebuilding the app you have to remember to push the changes to your GitHub repository.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg-build-4.png"><img class="alignnone size-medium wp-image-3498" title="Rebuild the app" src="http://corlan.org/wp-content/uploads/2012/03/pg-build-4-300x98.png" alt="" width="300" height="98" /></a></p>
<p>You have to refresh the page if you want to know when the build process has finished.</p>
<h2>Adding code signing certificates</h2>
<p>If you have ever done mobile development for iOS, Android, or BlackBerry you know that in order to be able to submit your application to their stores the app must be properly signed. PhoneGap build supports this.</p>
<p>Under the <em>Navigation</em> section, choose <em>Edit account</em> link and then <em>Signing</em> (it is on the right hand side) &#8211; see the picture below.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg-build-2.png"><img class="alignnone size-medium wp-image-3493" title="Edit account" src="http://corlan.org/wp-content/uploads/2012/03/pg-build-2-300x193.png" alt="" width="300" height="193" /></a></p>
<p>Once the <em>Signing</em> page loads you will see that you can add the keys for Android, iOS, and BlackBerry. You can add multiple keys for each supported platform and select the one for the default option.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/pg-build-3.png"><img class="alignnone size-medium wp-image-3494" title="Signing Page" src="http://corlan.org/wp-content/uploads/2012/03/pg-build-3-300x150.png" alt="" width="300" height="150" /></a></p>
<h2>Using the <em>config.xml</em> file</h2>
<p>At a minimum all you have to provide to PhoneGap Build is an <em>index.html</em> file of your application. However you can control a number of settings using a file named <em>config.xml</em>, which has to stay in the root folder of your application. Using this file you can specify a version number, icons for your app, splash screens, and device orientation among other things. You can read more <a href="https://build.phonegap.com/docs/config-xml">here</a>.</p>
<p>For my app I wanted to set icons, a splash screen, and the orientation mode to portrait. Here is the file:</p>
<pre class="brush: plain; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
 &lt;widget xmlns = &quot;http://www.w3.org/ns/widgets&quot;
 xmlns:gap = &quot;http://phonegap.com/ns/1.0&quot;
 id = &quot;org.corlan.atabsplitter&quot;
 version = &quot;1.0.0&quot;&gt;

&lt;name&gt;aTabSplitter&lt;/name&gt;

&lt;description&gt;
 A simple app for splitting a restaurant bill.
 &lt;/description&gt;

&lt;author href=&quot;http://corlan.org&quot; email=&quot;mcorlan@adobe.com&quot;&gt;
 Mihai Corlan
 &lt;/author&gt;

 &lt;preference name=&quot;orientation&quot; value=&quot;portrait&quot; /&gt;

 &lt;!-- the default attribute can also be used --&gt;
 &lt;icon src=&quot;assets/icons/48.png&quot; gap:role=&quot;default&quot; /&gt;

 &lt;!-- Android icons --&gt;
 &lt;icon src=&quot;assets/icons/36.png&quot; width=&quot;36&quot; height=&quot;36&quot;/&gt;
 &lt;icon src=&quot;assets/icons/48.png&quot; width=&quot;48&quot; height=&quot;48&quot;/&gt;
 &lt;icon src=&quot;assets/icons/72.png&quot; width=&quot;72&quot; height=&quot;72&quot;/&gt;

 &lt;!-- if a single splash screen is specified it will be used for all platforms --&gt;
 &lt;gap:splash src=&quot;assets/images/table_01.png&quot; /&gt;
&lt;/widget&gt;
</pre>
<h2>Where to go next</h2>
<p>First of all make sure you go to https://build.phonegap.com and you create an account :) Then you can read the documentation, give feedback, make feature requests, and start building your app.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/DmIOll4NLSU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/07/using-phonegap-build-and-debug/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/07/using-phonegap-build-and-debug/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=using-phonegap-build-and-debug</feedburner:origLink></item>
		<item>
		<title>Introducing Adobe Shadow – a new way to debug mobile web sites and apps</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/rw8xWN2uCME/</link>
		<comments>http://corlan.org/2012/03/07/introducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 09:01:54 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3511</guid>
		<description><![CDATA[
			
				
			
		
So what is Adobe Shadow? Shadow helps developers who work on mobile web sites and applications by enabling them to do &#8220;synchronous browsing&#8221;. You connect your mobile devices to your computer and then you navigate to a page on your computer and all the devices are synchronized displaying the same web page.

So when you open [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/03/07/introducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fintroducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F03%2F07%2Fintroducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>So what is Adobe Shadow? Shadow helps developers who work on mobile web sites and applications by enabling them to do &#8220;synchronous browsing&#8221;. You connect your mobile devices to your computer and then you navigate to a page on your computer and all the devices are synchronized displaying the same web page.</p>
<p><img class="aligncenter size-medium wp-image-3529" title="Adobe Shadow" src="http://corlan.org/wp-content/uploads/2012/03/sd-298x300.png" alt="" width="298" height="300" /></p>
<p>So when you open an URL in your desktop browser, all the connected devices will stay synchronized displaying the same URL. Furthermore, you can open up a debug session with one mobile device and use Web Inspector to check the DOM as it was generated on that device, check the CSS properties for DOM elements, resources, and network calls.</p>
<p>It supports iOS and Android devices and it works on Windows/Mac OS computers using the Chrome browser.</p>
<p><span id="more-3511"></span></p>
<h2>How does it work?</h2>
<p>Under the hood, Adobe Shadow uses the <em>weinre</em> project (I wrote about <em>weinre</em> <a href="http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/">here</a>). The main difference is that there is zero configuration setup when using Adobe Shadow (no need to add the <em>weinre</em> JavaScript file to your webpage in order to enable the workflow) and also you get the this nice synchronization between devices where the connected devices follow the computer browser.</p>
<p>There is one limitation at least for now: all the devices must be connected to the same Wi-Fi network.</p>
<h2><strong>Installing Shadow</strong></h2>
<p>The installation process is quite simple. You <a href="http://labs.adobe.com/downloads/shadow.html">grab</a> the desktop Shadow app for your operating system. You install the Shadow Chrome extension from <a href="http://www.adobe.com/go/sd_chrome_app">here</a>.</p>
<p>Then you install the Shadow app for your mobile devices from the app stores (<a href="http://www.adobe.com/go/sd_ios_app">iOS App Store</a> and <a href="http://www.adobe.com/go/sd_android_app">Android Market</a>).</p>
<p>You can read more about this process on the <a href="http://labs.adobe.com/technologies/shadow/">project page</a>.</p>
<h2>Shadow in action</h2>
<p>Now let&#8217;s see how you use Shadow. Once you&#8217;ve installed everything, you are ready to pair the mobile devices to your computer. Here are the steps:</p>
<p>1. Make sure your computer and mobile devices are connected to the same Wi-Fi network.</p>
<p>2. Start the Shadow application on your computer and make sure that the Shadow Chrome extension is enabled.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-1.png"><img class="alignnone size-medium wp-image-3513" title="Shadow Chrome extension" src="http://corlan.org/wp-content/uploads/2012/03/shadow-1-300x168.png" alt="" width="300" height="168" /></a></p>
<p>3. On all your mobile devices start the Shadow application and choose the computer you want to connect to (you will see all the computers running Shadow and connected to the same Wi-Fi network).</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-2.png"><img class="alignnone size-medium wp-image-3514" title="Running Shadow on the mobile devices" src="http://corlan.org/wp-content/uploads/2012/03/shadow-2-179x300.png" alt="" width="179" height="300" /></a></p>
<p>4. The first time you pair a mobile device to your computer you&#8217;ll have to provide a PIN. So once you select the computer you want to connect to, the mobile device will display a PIN number.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/1.png"><img class="alignnone size-medium wp-image-3516" title="Getting the PIN number from the mobile device" src="http://corlan.org/wp-content/uploads/2012/03/1-181x300.png" alt="" width="181" height="300" /></a></p>
<p>5. Grab the PIN number and type it in the Chrome Shadow Extension (you will see that the extension displays a little green plus every time a new device needs pairing)</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-4.png"><img class="alignnone size-medium wp-image-3515" title="Introducing the PIN number in the Chrome Shadow Extension" src="http://corlan.org/wp-content/uploads/2012/03/shadow-4-300x169.png" alt="" width="300" height="169" /></a></p>
<p>6. That&#8217;s it. From now on your devices are connected (your mobile device and your desktop/laptop computer). What&#8217;s more: you need to do this only once for a pair. Of course, if you need to disconnect or reauthorized a device you can do this (you do this from the Shadow Chrome extension).</p>
<h2>Starting a Remote Inspection session</h2>
<p>Once the devices are connected via Shadow, choose the brackets icon corresponding to the mobile device you want to debug. See the picture below:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-5.png"><img class="alignnone size-medium wp-image-3517" title="Starting a Remote Inspection session" src="http://corlan.org/wp-content/uploads/2012/03/shadow-5-300x152.png" alt="" width="300" height="152" /></a></p>
<p>This will open up the Web Inspector that it is connected to the selected mobile device. You can go to Elements and select a node and you will see it highlighted on your mobile device. You can check the Console or check the CSS properties and metrics. You can even play with the JavaScript Console.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-7.png"><img class="alignnone size-medium wp-image-3518" title="Selecting DOM nodes" src="http://corlan.org/wp-content/uploads/2012/03/shadow-7-300x187.png" alt="" width="300" height="187" /></a></p>
<p>As you select nodes from the DOM you will see that on the mobile device that very DOM element is highlighted.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-6.png"><img class="alignnone size-medium wp-image-3519" title="DOM element highlighted" src="http://corlan.org/wp-content/uploads/2012/03/shadow-6-182x300.png" alt="" width="182" height="300" /></a></p>
<p>Here I used the Console to remotely execute some JavaScript code (alert(&#8216;Hello Adobe Shadow! &#8216;)):</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-8.png"><img class="alignnone size-medium wp-image-3520" title="Executing JavaScript on the device from the Remote Inspector Console" src="http://corlan.org/wp-content/uploads/2012/03/shadow-8-300x239.png" alt="" width="300" height="239" /></a></p>
<p>And here is the result of the JavaScript code execution on the device:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/03/shadow-9.png"><img class="alignnone size-medium wp-image-3521" title="Alert message on the mobile device" src="http://corlan.org/wp-content/uploads/2012/03/shadow-9-183x300.png" alt="" width="183" height="300" /></a></p>
<h2>Conclusions</h2>
<p>I think that Adobe Shadow brings mobile development to a whole new level by greatly simplifying the testing and debugging of web pages and apps on mobile devices. Right now it is in beta and it is free so make sure you go to <a href="http://labs.adobe.com/technologies/shadow/">Adobe Labs</a>, grab Adobe Shadow, and give it a try.</p>
<p>Although there are other methods to do mobile testing for web pages (I am thinking of <em>weinre</em> and Google Chrome for Android), I think Adobe Shadow offers more value. Someone from the team told me that at some point he had 35 mobile devices connected to his computer and it was awesome to see how different web pages were rendered on all these different devices.</p>
<p>Also, keep in mind that this is just the beginning. The team has many more ideas and we are happy to listen to your feedback. So don&#8217;t be shy :D</p>
<p>Actually, if you want to keep a close eye on the team you can follow them on <a href="https://twitter.com/#!/adobeshadow">Twitter</a> and is the team blog, <a href="http://blogs.adobe.com/shadow/">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/rw8xWN2uCME" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/03/07/introducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/03/07/introducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=introducing-adobe-shadow-a-new-way-to-debug-mobile-web-sites-and-apps</feedburner:origLink></item>
		<item>
		<title>Pictures from MWC12 floor</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/ox_2X7BISHY/</link>
		<comments>http://corlan.org/2012/02/27/pictures-from-mwc12-floor/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 12:42:30 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3476</guid>
		<description><![CDATA[
			
				
			
		
As my duty at Adobe&#8217;s booth started only in the afternoon, I used the first part of the day to walk around and get a sense of the show. Here are some pictures I took with my phone camera.
First, the Adobe booth. I was surprised by the number of people coming right from the opening [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/02/27/pictures-from-mwc12-floor/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F27%2Fpictures-from-mwc12-floor%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F27%2Fpictures-from-mwc12-floor%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>As my duty at Adobe&#8217;s booth started only in the afternoon, I used the first part of the day to walk around and get a sense of the show. Here are some pictures I took with my phone camera.</p>
<p>First, the Adobe booth. I was surprised by the number of people coming right from the opening hours. I was expectecting people to be more interested in all the new cool devices. Instead there were lots of people all over the place.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124702.jpg"><img class="alignnone size-medium wp-image-3477" title="IMG_20120227_124702" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124702-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>One of the biggest booths around is Google&#8217;s. I think they are using the same booth they had last year. Nevertheless it is impressive. You can see there are lots of people.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_105952.jpg"><img class="alignnone size-medium wp-image-3478" title="IMG_20120227_105952" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_105952-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Some press guys resting before their next interview.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_105856.jpg"><img class="alignnone size-medium wp-image-3479" title="IMG_20120227_105856" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_105856-225x300.jpg" alt="" width="225" height="300" /></a></p>
<p>Next, the Microsoft Windows Phone booth. I played a bit with some HTC and Nokia devices. I am sure I am biased, but I will say it anyway: the devices are fast. No doubt. But somehow I don&#8217;t get the UI. Probably all the years I&#8217;ve been using iOS and Android devices&#8230;</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124608.jpg"><img class="alignnone size-medium wp-image-3480" title="IMG_20120227_124608" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124608-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Right near our booth there is the HTC booth. I have to check them out as it seems they announced a crazy powerful new phone, HTC One X.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124629.jpg"><img class="alignnone size-medium wp-image-3481" title="IMG_20120227_124629" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124629-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>That phone is powered NVidia&#8217;s Tegra 3 chip. So here is NVidia booth:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124651.jpg"><img class="alignnone size-medium wp-image-3482" title="IMG_20120227_124651" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124651-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>As with any show there are lots of characters :)</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_105427.png"><img class="alignnone size-medium wp-image-3483" title="IMG_20120227_105427" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_105427-242x300.png" alt="" width="242" height="300" /></a></p>
<p>It&#8217;s lunch time, which means the crowd is starting to move outside.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124916.jpg"><img class="alignnone size-medium wp-image-3484" title="IMG_20120227_124916" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_124916-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>That&#8217;s it for today. Now I have to run for my booth duties.</p>
<p><strong>Later Update:</strong> This is the only conference where I&#8217;ve seen only men queueing in front of the rest rooms. It must be divine retribution I guess:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120229_114055.jpg"><img class="alignnone size-full wp-image-3490" title="IMG_20120229_114055" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120229_114055.jpg" alt="" width="600" height="450" /></a></p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/ox_2X7BISHY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/02/27/pictures-from-mwc12-floor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/02/27/pictures-from-mwc12-floor/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pictures-from-mwc12-floor</feedburner:origLink></item>
		<item>
		<title>Photoshop Touch for iPad and Barcelona Mobile World Congress 2012</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/IMqZ6M68MF4/</link>
		<comments>http://corlan.org/2012/02/27/photoshop-touch-for-ipad-and-barcelona-mobile-world-congress-2012/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 09:40:32 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3471</guid>
		<description><![CDATA[
			
				
			
		
The Mobile World Congress has started this morning and one of big announcements is Adobe&#8217;s release of Adobe Photoshop Touch app for iPad 2. This tool offers core Photoshop features plus some features uniquely tailored to the mobile medium like sharing. What&#8217;s more is that this is just the first step. Photoshop Touch is part [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/02/27/photoshop-touch-for-ipad-and-barcelona-mobile-world-congress-2012/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F27%2Fphotoshop-touch-for-ipad-and-barcelona-mobile-world-congress-2012%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F27%2Fphotoshop-touch-for-ipad-and-barcelona-mobile-world-congress-2012%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>The Mobile World Congress has started this morning and one of big announcements is Adobe&#8217;s release of Adobe Photoshop Touch app for iPad 2. This tool offers core Photoshop features plus some features uniquely tailored to the mobile medium like sharing. What&#8217;s more is that this is just the first step. Photoshop Touch is part of a family of six touch apps &#8211; the rest of the suite will come to iPad later this year. You can see the app <a href="http://itunes.apple.com/us/app/adobe-photoshop-touch/id495716481?ls=1&amp;mt=8">here</a>.</p>
<p>If you are at the MWC then make sure you drop by our booth in Hall 1. You can play with the app on our devices and you can see how it is already being used by professionals.</p>
<p><img class="alignnone size-full wp-image-3472" title="ps-1" src="http://corlan.org/wp-content/uploads/2012/02/ps-1.png" alt="" width="481" height="357" /></p>
<p>There were two other announcements this morning related to digital publishing and video. If you are a developer, maybe this type of announcement  is not your cup of tea, but nevertheless they are important because digital publishing and video publishing are growing.</p>
<p>Adobe&#8217;s solution for digital publishing (AKA creating beautiful digital magazines and newspapers for tablets) has served more than 16 million publications for the past 12 months. Using anonymous data collected across these publications we distilled them to:</p>
<ul>
<li>68% of readers are paying for the content</li>
<li>48% of readers explore the interactive features (web views, audio and video clips, slide shows, and image sequences</li>
<li>56% of readers spent 25 minutes to 2.5 hours reading digital titles each month. What is even more important is the trend: this time has increased more than 70% over the last six months.</li>
</ul>
<p>Project Primetime was announced today too and it is all about delivering and monetizing video content. Nothing new so far, right? Well, here is where the interesting things come together: Primetime helps you use a single, end-to-end workflow, to create a TV-like experience for premium video and ad content and distribute this to all major Web connected devices: iOS devices, Android devices, and of course desktop computers. It supports live streaming, linear, and on demand streams and for all of them you can insert ads with complete control.</p>
<p>Again, if you are at MWC come to our booth and you can find out more. There are presentations on all these topics.</p>
<p>Finally, here is a picture of the main entrance this morning:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_093339.jpg"><img class="alignnone size-medium wp-image-3473" title="IMG_20120227_093339" src="http://corlan.org/wp-content/uploads/2012/02/IMG_20120227_093339-300x225.jpg" alt="" width="300" height="225" /></a></p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/IMqZ6M68MF4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/02/27/photoshop-touch-for-ipad-and-barcelona-mobile-world-congress-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/02/27/photoshop-touch-for-ipad-and-barcelona-mobile-world-congress-2012/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=photoshop-touch-for-ipad-and-barcelona-mobile-world-congress-2012</feedburner:origLink></item>
		<item>
		<title>aTabSplitter – the web standards edition</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/8aR6oug1QmA/</link>
		<comments>http://corlan.org/2012/02/22/atabsplitter-the-web-standards-edition/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 20:44:45 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3417</guid>
		<description><![CDATA[
			
				
			
		
I thought that it would be helpful to document the experience I had while building a web application using jQuery Mobile. And this is what this article is all about. But before going into details let me set the context.
I started building mobile applications a while ago using Adobe AIR and the Flex framework. My [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/02/22/atabsplitter-the-web-standards-edition/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F22%2Fatabsplitter-the-web-standards-edition%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F22%2Fatabsplitter-the-web-standards-edition%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I thought that it would be helpful to document the experience I had while building a web application using jQuery Mobile. And this is what this article is all about. But before going into details let me set the context.</p>
<p>I started building mobile applications a while ago using Adobe AIR and the Flex framework. My first &#8220;production ready&#8221; application was called <a href="https://market.android.com/details?id=air.org.corlan.aTabSplitter2">aTabSplitter</a> and it is available for download in Android and BlackBerry markets. It was a fun and eye-opening experience. I mean it is one thing &#8220;to play&#8221; with technology and an entirely different thing to build something that will be actually useful and people will love to use.</p>
<p>Recently, as I was playing with jQuery mobile I had an idea: what if I tried to rebuild the application using HTML, CSS, and JavaScript? To make things more complicated I wanted to retain the same UI and user experience. In other words I treated the mobile application as the design and user workflow diagrams you&#8217;d get from a UX.</p>
<p>If you haven&#8217;t tried the application yet let me briefly describe it: it allows you to split a restaurant bill. The important workflows are the first screen, where you add new persons, delete them, move them around the table, or adjust the tip, and the calculator screen where you add the items for a single person. Actually, I am pretty proud because I think I found a good/intuitive user interface.</p>
<p>And by the way, <a href="http://corlan.org/atabsplitter/">here</a> is the link for this web app.</p>
<p>Here are screenshots with the application running on desktop and mobile devices.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/atab-1.png"><img class="alignnone size-medium wp-image-3424" title="atab-1" src="http://corlan.org/wp-content/uploads/2012/02/atab-1-170x300.png" alt="" width="170" height="300" /></a> <a href="http://corlan.org/wp-content/uploads/2012/02/atab-2.png"><img class="alignnone size-medium wp-image-3425" title="atab-2" src="http://corlan.org/wp-content/uploads/2012/02/atab-2-170x300.png" alt="" width="170" height="300" /></a></p>
<p>Android 4 Phone:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/atab-3.png"><img class="alignnone size-medium wp-image-3426" title="atab-3" src="http://corlan.org/wp-content/uploads/2012/02/atab-3-168x300.png" alt="" width="168" height="300" /></a> <a href="http://corlan.org/wp-content/uploads/2012/02/atab-4.png"><img class="alignnone size-medium wp-image-3427" title="atab-4" src="http://corlan.org/wp-content/uploads/2012/02/atab-4-167x300.png" alt="" width="167" height="300" /></a></p>
<p>On iPad:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/atab-5.png"><img class="alignnone size-medium wp-image-3428" title="atab-5" src="http://corlan.org/wp-content/uploads/2012/02/atab-5-225x300.png" alt="" width="225" height="300" /></a> <a href="http://corlan.org/wp-content/uploads/2012/02/atab-6.png"><img class="alignnone size-medium wp-image-3429" title="atab-6" src="http://corlan.org/wp-content/uploads/2012/02/atab-6-225x300.png" alt="" width="225" height="300" /></a></p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/atab-6.png"><span id="more-3417"></span></a></p>
<h2>The Plan</h2>
<p>Here is what I was set to achieve: a web application that will work on mobile devices and the desktop. Although I could have gone the PhoneGap route and pack the whole thing into a native app, I wanted to have a single base code base for the first pass that will work in browsers on all these different devices. As a framework I decided to go with jQuery Mobile. This, at least in theory, was a perfect match for my application given the fact that all I needed was a nice way to keep the two screens separated from a functional point of view.</p>
<p>I didn&#8217;t see any need for other frameworks. So for the rest of functionality I wrote JavaScript and used HTML/CSS and images to create all the UI I needed. Because I went for a web application I chose to implement only the main features of the original AIR app. Nevertheless, I wanted to use all the new features available in modern browsers that made sense for my app so I could make a responsive and usable web app. For the rest of the article, I will highlight some of the things that were either trickier than I anticipated or altogeher unexpected and the general approach. I hope you will find it useful.</p>
<h2>jQuery Mobile and architectural considerations</h2>
<p><a href="http://jquerymobile.com/">jQuery mobile</a> was a pretty obvious choice because of the features it offers. The way it lets you organize your application using &#8220;pages&#8221; and keep them in the same HTML document is perfect for what I needed. Remember that I wanted to build a small application that has only two &#8220;screens&#8221;.  Also I like the fact that I can define most of the UI using pure HTML without the need for JavaScript.</p>
<p>Once I had the UI in place, I started to write the JavaScript code that powers the user interface. Normally, I would wrap the different functionalities in a number of objects. However for this project I decided to go against the best practices and write mainly functions. The only way I organized them was by splitting them in three different files: <em>home.js</em>, <em>calculator.js</em>, and <em>utils.js</em>. The first two files hold the functions used for the home screen and calculator screen and the third one holds utility functions. Why did I choose to go against best practices? One main reason: the application is too small to be worth spending time on architecting the code.</p>
<p>Although conceptually, there are two pages in my application as far as the browser is concerned there is only one page. This means that the JavaScript code has visibility over the whole application DOM.</p>
<p>In <em>index.html</em> there is a little bit of JavaScript code used for boot strapping the application. It is the usual jQuery business, executing the bootstrap code on the jQuery <em>ready</em> event. This is where I attached various event listeners on UI components and I set the height for main UI components.</p>
<p>The part with setting up the height manually was a bit of a surprised. I was expecting that jQuery Mobile will take care of this for me and when the content in the page didn&#8217;t overflow it would set the size of the div to be equal to the viewport minus the header and footer. This is not the case.</p>
<p>Another interesting thing in <em>index.html</em> is the array that holds references to all the plates on the screen, as well as a reference to the trash bin image &#8211; so I can quickly check if the user wants to delete a plate (if you drag a plate on top of the trash bin it will be deleted).</p>
<p>One of the issues I had was how can I make sure that the user doesn&#8217;t land directly on the second page. It doesn&#8217;t make sense to support this and if it happens it is confusing for the user. After I spent some time reading the documentation and talking to my fellow evangelist <a href="http://www.raymondcamden.com/index.cfm">Ray Camden</a> I decided to go for an extreme solution. Inside the function executed for the jQuery <em>ready</em> event I checked the current page value. If it is <em>calculator</em> (the second page) then I reload the page:</p>
<pre class="brush: plain; title: ; notranslate">

//forcing the app to load the first screen if the user lands directly on the second page
if ($.mobile.activePage[0].id === 'calculator') {
   l = window.location;
   l.hash = '';
   window.location = l;
}
</pre>
<p>Finally, I tried to keep the dependencies on jQuery to a minimum. Why? Because I plan to rewrite the application using other frameworks and if I decide to go without jQuery then I don&#8217;t want to have lots of code to clean up.</p>
<h2>Custom Data Attributes</h2>
<p>Obviously this application must have a data model, right? There are different approaches I could have used to store the data model. The one that made most sense to me is using <a href="http://dev.w3.org/html5/spec/global-attributes.html#embedding-custom-non-visible-data-with-the-data-attributes">custom data- attributes</a>.</p>
<p>Each plate that you add has the data stored in two attributes:</p>
<ul>
<li><em>data-i</em> : stores the items you add. For example, if you added 5 + 12, then <em>data-i = [5, 12]</em></li>
<li><em>data-t</em>: stores the total. Using the example above, <em>data-t = 17</em></li>
</ul>
<div>This is convenient because if I want to delete a plate I just remove that element from the DOM and both the visual part and the data model go away.</div>
<h2>Touchstart event vs mouse click event</h2>
<p>If you&#8217;ve worked with mobile web apps then chances are that you already know this. If not then you should pay attention. If you use <em>click</em> events for your UI components (buttons for example) when you run the application on a mobile device (including most powerful tablets) you will notice a huge lag between the time you touch a button and the execution of the <em>click</em> event listener. It is so big that it renders the app almost unusable. The solution is pretty simple: use <em>touchstart</em> events instead of <em>click</em>events. On touch devices whenever you touch the screen you get events in the following order:</p>
<ol>
<li><em>touchstart</em></li>
<li><em>touchmove</em></li>
<li><em>touchend</em></li>
</ol>
<div>A <em>click</em> event is basically an event that triggers once you&#8217;ve closed the whole loop &#8211; actually if you&#8217;d listen for <em>touchend</em> you should get this event long before the <em>click</em> one. So this is the reason for getting improved speed when using <em>touchstart</em> instead of <em>click</em> &#8211; you use the very first event triggered.</div>
<h2>Dealing with multiple touch events</h2>
<p>When you use <em>touchstart </em>and <em>click</em> events in your application a lot, you will end up in a situation where you need to add logic to handle some use cases. The first screen of my application is pretty heavy on touch events usage: you can touch the screen to add a new plate, you touch a plate to go the second screen and edit, you can move around a plate, or you can touch the slider to adjust the tip. I have all my events registered for the bubbling phase (if you need a refresher on the event phases check <a href="http://www.quirksmode.org/js/events_order.html">this resource)</a>.</p>
<p>Much to my surprise, I couldn&#8217;t use the slider on mobile devices. Every time I touched the slider a new plate was added to the screen. My solution to this issue was a quick hack to check for the target object in the event listener that adds a new plate &#8211; if the target is part of the slider then I don&#8217;t add a new plate.</p>
<p>Another area where I had to pay attention was the plate itself. You can touch/click a plate to move around or to edit. I decided that if you move a plate around it doesn&#8217;t necessarily mean you want to edit. I change the app to the edit plate screen if the plate has moved more than 10 pixels in any direction.</p>
<h2>Custom components</h2>
<p>Most of the UI components I needed for my app were covered by the browser or jQuery Mobile. However there was one I needed to create &#8211; the component that represents one person on the first screen.</p>
<p><img class="alignnone size-full wp-image-3447" title="atab-9" src="http://corlan.org/wp-content/uploads/2012/02/atab-9.png" alt="" width="121" height="117" /></p>
<p>It is pretty simple component: an image that represents a plate and a label that displays the total. At least it seems simple until you try to make it work. Because I wanted the text to be centered both vertically and horizontally. Also, if the text grows bigger than the image, I wanted it to be centered (see the picture below).</p>
<p><img class="alignnone size-full wp-image-3449" title="atab-10" src="http://corlan.org/wp-content/uploads/2012/02/atab-10.png" alt="" width="159" height="127" /></p>
<p>After some trial and error I managed to come up with the following code for this:</p>
<pre class="brush: plain; title: ; notranslate">
&lt;div class=&quot;plate&quot;&gt;
    &lt;img src=&quot;assets/images/plate-big.png&quot; alt=&quot;&quot; /&gt;
    &lt;div&gt;0&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Here is the CSS for this component:</p>
<pre class="brush: plain; title: ; notranslate">

.plate {
      position: absolute;
      color: #000000;
      font-size: 20px;
      overflow: visible;
      text-align: center;
      -moz-user-select: -moz-none;
      -khtml-user-select: none;
      -webkit-user-select: none;
      user-select: none;
}
.plate &gt; div {
      text-align: center;
      margin-top: -65px;
      width: 100%;
}
</pre>
<p>The second custom component was the keyboard I use on the second screen. All I needed was a basic <em>calculator</em> keyboard &#8211; actually even simpler as I didn&#8217;t need all the operations. Why did I go for a custom keyboard? Because it makes my app more usable by giving the user only the keys he needs.</p>
<p><img class="alignnone size-full wp-image-3452" title="atab-11" src="http://corlan.org/wp-content/uploads/2012/02/atab-111.png" alt="" width="350" height="292" /></p>
<p>I used the old school tables approach. And it worked beautifully on the desktop but not so good on mobile phones &#8211; the keyboard was falling out the screen. After some debugging using <em>weinre</em>I realized what was happening. jQuery Mobile augments your code. Typically, for any button you have in your app it will generate a number of <em>divs</em>/<em>span</em>s that are positioned on top of the button and these elements actually provides the visual appearance of the button.</p>
<p>Because it does a generous use of padding and margins there was no way I could manage to fit 5 buttons on the same row on an iPhone or Android phone. How did I fix this? Well my solution is certainly not the most elegant but it works. I used Media Queries, CSS selectors, and the infamous <em>!important</em> to overwrite the jQuery styles for my keyboard when the app is running on mobile phones. If anyone knows a better solution, please tell me!</p>
<h2>Saving application state &#8211; Web Storage</h2>
<p>Suppose you add some items and persons to the app and you accidentally hit the back button. Of course, the whole state of the application will be lost. And this is something I didn&#8217;t want to happen.</p>
<p>I save the application state using the <a href="http://dev.w3.org/html5/webstorage/">Web Storage localStorage</a> feature. This feature is supported by all modern browsers and it offers a simple API to store key/value pairs (think of a hash map or associative array in PHP). The only catch is that the value is saved as a string. The application state is saved in the form of an array of objects where each object maps one of the plates: it holds the top and left position, the total, and the items. This information is enough to restore the application state. The relevant code is in the <em>scripts/home.js</em>file. Here is the code for saving and reading:</p>
<pre class="brush: plain; title: ; notranslate">

//
function persistApplicationState(arr) {
    var i, l, toSave, el;
    toSave = [];
    for (i = 0, l = arr.length; i 0 &amp;&amp; localStorage) {
       localStorage.setItem('plates', JSON.stringify(toSave));
   }
}

function getPersistedPlates() {
    var ret;
    if (!localStorage)
       return false;
    ret = JSON.parse(localStorage.getItem('plates'));
    if (!ret || ret.length === 0)
       return false;
    return ret;
}
</pre>
<p>Note that I am using <em>JSON.stringify()</em> and <em>JSON.parse()</em>. This is related to the fact that Web Storage saves only strings. In terms of size, most browsers offer by default 5MB (Firefox warns the users and asks for permission).</p>
<h2>Reduce Loading Time &#8211; Application Cache</h2>
<p>You might think of <a href="http://www.html5rocks.com/en/tutorials/appcache/beginner/">Application Cache</a> like browser caching on steroids. By using Application Cache you can dramatically improve the loading speed of your application and the app can be used while users are offline.</p>
<p>This feature is pretty simple to use: you create a manifest file (which is a simple text file with an <em>appcache</em> extension and the first line must have this text CACHE MANIFEST). In this file you add entries for all the things you want to cache &#8211; could be CSS files, JS files, images, HTML. Then you enable the Application cache by setting the <em>manifest </em>attribute on the <em>&lt;html&gt;</em> tag:</p>
<pre class="brush: plain; title: ; notranslate">
&lt;html manifest=&quot;app.appcache&quot;&gt;
</pre>
<p>Now, every time you want to invalidate the cache and make the browser reload the resources you change something in the application cache file. Most people add a commented line with a timestamp and version number and they just change this. Here is my cache file:</p>
<pre class="brush: plain; title: ; notranslate">

CACHE MANIFEST
# 2012-02-21:v9.5

CACHE:
index.html
styles/styles.css
styles/jquery.mobile-1.0.1.min.css
scripts/jquery-1.6.4.min.js
scripts/jquery.mobile-1.0.1.min.js
scripts/utils.js
scripts/home.js
scripts/calculator.js
assets/images/plate-big.png
assets/images/table_01.jpg
assets/images/bill.jpg
assets/images/trash.png
assets/favicon.ico
styles/images/ajax-loader.png
styles/images/icons-18-black.png
styles/images/icons-18-white.png
styles/images/icons-36-black.png
styles/images/icons-36-white.png
</pre>
<p>Once the application has loaded for the first time, you will notice that subsequent loads are extremely fast. This is because all the resources used in the app are cached locally. And remember that each time you change something in your application you have to invalidate the cache.</p>
<h2>iOS Offline Web Application</h2>
<p>iOS lets you save a web site/application to the home screen. This is the closest you can get to a native app with HTML without using something like PhoneGap. Also this feature plays nicely with Application Cache.</p>
<p>You have control over a number of things:  the icon to be used for your application, an image to be used during the loading time (startup image), and if you want to hide the Safari Mobile chrome or not. All these are set or controlled by using <em>&lt;meta&gt;</em> or <em>&lt;link&gt;</em> tags added to the <em>&lt;head&gt;</em> section of your webpage.</p>
<p>In the index.html you will find these tags:</p>
<pre class="brush: plain; title: ; notranslate">
&lt;!-- Hiding the browser chrome --&gt;
&lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot; /&gt;
&lt;!-- Setting a startup image for the app --&gt;
&lt;link rel=&quot;apple-touch-startup-image&quot; href=&quot;assets/images/table_01.jpg&quot;&gt;
&lt;!-- Providing Icons for iOS and iPAd --&gt;
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;apple-touch-icon-57x57-precomposed.png&quot; /&gt;
&lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;72x72&quot; href=&quot;apple-touch-icon-72x72-precomposed.png&quot; /&gt;
&lt;link rel=&quot;apple-touch-icon&quot; sizes=&quot;114x114&quot; href=&quot;apple-touch-icon-114x114-precomposed.png&quot; /&gt;
</pre>
<p>Here are screenshots with the app saved to the home screen and running without the browser chrome.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/02/atab-7.png"><img class="alignnone size-medium wp-image-3455" title="atab-7" src="http://corlan.org/wp-content/uploads/2012/02/atab-7-225x300.png" alt="" width="225" height="300" /></a> <a href="http://corlan.org/wp-content/uploads/2012/02/atab-81.png"><img class="alignnone size-medium wp-image-3457" title="atab-8" src="http://corlan.org/wp-content/uploads/2012/02/atab-81-225x300.png" alt="" width="225" height="300" /></a></p>
<p>You can read more about this topic <a href="https://developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html">here</a>.</p>
<h2>Preparing the app for mobile browsers</h2>
<p>By default, on most mobile platforms you can scroll the page in the browsers a few pixels up and down even when the page content fits to the screen. Man, I hated this feature so much. Why? Because the main paradigm for using the first screen is by touch and dragging. Now every time you tried to move a plate up or down, the whole page was moving in the same direction. It was disturbing and annoying at the same time. To fix this I added a listener on the body for the <em>touchmove </em>event to prevent the default behavior:</p>
<pre class="brush: plain; title: ; notranslate">

// fix for canceling the scrolling of the body on mobile devices
 document.body.addEventListener('touchmove', function(event) {
           event.preventDefault();
      }, false);
</pre>
<p>The second thing I had to do was to set the layout viewport width to the device width and make sure scaling was disabled &#8211; I didn&#8217;t feel that the user could benefit in any way by zooming the app in or out. So I placed the following <em>meta</em> tag in the <em>head </em>section:</p>
<pre class="brush: plain; title: ; notranslate">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=no&quot;&gt;
</pre>
<p><a href="http://www.quirksmode.org/mobile/viewports2.html">This</a> is a good read on understanding the mobile layouts viewports and screen sizes and the difference between screen resolution and CSS pixels.</p>
<h2>Handling different screen sizes/devices &#8211; Media Queries</h2>
<p>The <a href="http://www.adobe.com/devnet/dreamweaver/articles/introducing-media-queries.html">Media Queries</a> feature was quite handy especially for getting the second screen of the application right. Because that screen has a keyboard, I had to make sure that the keyboard size was big enough to be usable on the phones and, at the same time, stays within the screen width.</p>
<p>Due to how the layout viewport works on mobiles and how jQuery Mobile styles buttons, the code that was working perfectly on the desktop even when minimizing the browser window was entirely unusable on iPhone or Android phones. The keyboard (on the second screen) didn&#8217;t fit so almost half of it was invisible. By setting up two additional sections for devices with maximum width 720px (Samsung Nexus) and 640px (most Android phones and iPhone/iPod Touches) I managed to fix the problems.</p>
<pre class="brush: plain; title: ; notranslate">

//styles/styles.css

@media only screen and (max-device-width: 720px) {

...

}

@media only screen and (max-device-width: 640px) {

...

}
</pre>
<h2>Debugging the code</h2>
<p>Nothing new here. For the desktop I used <em>Web Inspector</em> and for mobile, <em>weinre</em>. In case you have never used <em>weinre</em> then you can read my post on this topic <a href="http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/">here</a>. I was so happy to have <em>weinre </em>because it helped me to understand and fix the issues I had with the layout on the calculator screen.</p>
<p>Google released this month a special build of Chrome for Android that enables remote debugging. Basically you get the web inspector on your desktop hooked up to the app running on your mobile device. Unfortunately, the application is not available in all the countries. I don&#8217;t exactly understand why and I don&#8217;t know when it will be available world wide.</p>
<h2>The Code</h2>
<p>You can download the source code from <a href="https://github.com/mcorlan/atabsplitter">GitHub</a> or you can play with <a href="http://corlan.org/atabsplitter/">the application</a>. I tested it on desktop (Firefox, Chrome, and Safari) and on Android Phones/iPad/iPhone4.</p>
<h2>Conclusions</h2>
<p>As I said at the beginning, I had lots of fun while building this. The fact that I was able to test some of the frameworks and HTML features I&#8217;ve been playing with in a real app was a bonus.</p>
<p>In terms of development effort, I spent most of the time on making the application look the same (or as close as possible) on different browsers/devices. I used Chrome during my development. And once everything was in place I was sure that I was done. Poor me, because I kid you not the app looked differently in Firefox, Safari, and Chrome &#8211; I mean each browser rendered something different than the other two :D</p>
<p>In terms of performance and quality there is a big difference between how the app performs on the desktop and how it works on mobile. On mobile there is some screen flickering, the transitions are not always smooth, and the UI is not always perfectly aligned. You might argue that it is jQuery Mobile&#8217;s fault or my fault. My opinion is this: it is what it is. I mean mobile browsers have come a long way in recent years but there is still a gap between desktop and mobile. This is what is possible today. Tomorrow it will be better, no doubts.</p>
<p>Now, that I have the V.1 I am ready to experiment with different approaches. First on my list is to use PhoneGap to package my web application as a native application. This will give me a chance to add another feature from the original app: taking a photo with the device camera and replacing the picture from the first screen. Second, I will try frameworks other than jQuery Mobile.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/8aR6oug1QmA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/02/22/atabsplitter-the-web-standards-edition/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/02/22/atabsplitter-the-web-standards-edition/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=atabsplitter-the-web-standards-edition</feedburner:origLink></item>
		<item>
		<title>Quick hack to deal with touch and mouse events</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/1y5sfo74A9M/</link>
		<comments>http://corlan.org/2012/02/15/quick-hack-to-deal-with-touch-and-mouse-events/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 18:29:46 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3406</guid>
		<description><![CDATA[
			
				
			
		
If you build web pages that are interactive and work on desktops and mobile devices then chances are that you need to work with touch and click events. For mobile devices you&#8217;d want to use events like touchstart, touchmove, and touchend and for desktops you&#8217;d use mouse events (mousedown, mousemove, and mouseup).
Most of the time [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/02/15/quick-hack-to-deal-with-touch-and-mouse-events/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F15%2Fquick-hack-to-deal-with-touch-and-mouse-events%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F15%2Fquick-hack-to-deal-with-touch-and-mouse-events%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you build web pages that are interactive and work on desktops and mobile devices then chances are that you need to work with touch and click events. For mobile devices you&#8217;d want to use events like <em>touchstart</em>, <em>touchmove</em>, and <em>touchend</em> and for desktops you&#8217;d use mouse events (<em>mousedown</em>, <em>mousemove</em>, and <em>mouseup</em>).</p>
<p>Most of the time the code you execute as a response to these events is the same between these two platforms. So one way to avoid duplicating your code is to take advantage of the JavaScript&#8217;s dynamic nature to inject additional data into the event object and chain the click and touch event listeners.</p>
<p>Here is a snippet of code that illustrates my point:</p>
<pre class="brush: jscript; title: ; notranslate">
function init() {
    var el = document.getElementById('myDiv');
    el.addEventListener('mousemove', onMouseMove);
    el.addEventListener('touchmove', onTouchMove);
}

function onMouseMove(e) {
    e.touches = [{clientX: e.clientX, clientY: e.clientY}];
    onTouchMove(e);
}

function onTouchMove(e) {
    //do something with e.touches[0].clientX or e.touches[0].clientY

}
</pre>
<p>The code should be pretty simple to follow:</p>
<ul>
<li>I register listeners for <em>mousemove</em> and <em>touchmove</em></li>
<li>If the code runs on a desktop then the <em>mousemove</em> listeners will be triggered. When this happens I inject the mouse X and Y position in the event object using the data structure used by touch events (touch events have a <em>touches</em> property, which is an <em>array</em> of objects that follow this pattern: <em>{clientX: value, clientY: value}</em>). The touches property is an array because you can expect more than one touch point on some devices. Then I call the <em>onTouchMove</em> function passing along the modified event object</li>
<li>The logic I want to execute for that specific action is declared in a single place, the <em>onTouchMove</em> function</li>
</ul>
<p>I put together a simple page so you can see the code and test it on you computer/devices: <a href="http://corlan.org/downloads/touch-and-click.html">demo here</a>.</p>
<p>What method do you use to deal with this?</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/1y5sfo74A9M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/02/15/quick-hack-to-deal-with-touch-and-mouse-events/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/02/15/quick-hack-to-deal-with-touch-and-mouse-events/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=quick-hack-to-deal-with-touch-and-mouse-events</feedburner:origLink></item>
		<item>
		<title>Adobe WebUp #2</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/GMBBC9WVWp8/</link>
		<comments>http://corlan.org/2012/02/13/adobe-webup-2/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 11:26:39 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3402</guid>
		<description><![CDATA[
			
				
			
		

I am happy to announce that the second event of the Adobe WebUp series has been announced and you can register yourself here. In the meantime we&#8217;ve changed the name from &#8220;Adobe Developer Days &#8211; Web Platform&#8221; to &#8220;Adobe WebUP&#8221;.
The second event is dedicated to HTML5 forms: what HTML5 forms are, how to style them, and [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/02/13/adobe-webup-2/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F13%2Fadobe-webup-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F02%2F13%2Fadobe-webup-2%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignnone size-full wp-image-3403" title="adobeWebup" src="http://corlan.org/wp-content/uploads/2012/02/adobeWebup.png" alt="" width="450" height="200" /></p>
<p>I am happy to announce that the second event of the <a href="http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/">Adobe WebUp series</a> has been announced and you can register yourself <a href="http://adobewebup.eventbrite.com/">here</a>. In the meantime we&#8217;ve changed the name from <em>&#8220;Adobe Developer Days &#8211; Web Platform&#8221;</em> to <em>&#8220;Adobe WebUP&#8221;</em>.</p>
<p>The second event is dedicated to HTML5 forms: what HTML5 forms are, how to style them, and browsers support for them.</p>
<p>I hope you&#8217;ll join us on February 23rd. You have to register <a href="http://adobewebup.eventbrite.com/">here</a> if you want to participate.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/GMBBC9WVWp8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/02/13/adobe-webup-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/02/13/adobe-webup-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-webup-2</feedburner:origLink></item>
		<item>
		<title>Announcing a series of web conferences organized by Adobe Romania</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/lO0JjeKTeMA/</link>
		<comments>http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 10:31:10 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3380</guid>
		<description><![CDATA[
			
				
			
		
On February 2nd we will host the first conference from a series of conferences about web technologies and development. Our presenter will be Vincent Hardy, principal scientist at Adobe Systems.

See you on February 2nd!
You can find more info about this conference and register here (the presentations will be in English).
PS. I am so happy to see this [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F16%2Fannouncing-a-series-of-web-conferences-organized-by-adobe-romania%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F16%2Fannouncing-a-series-of-web-conferences-organized-by-adobe-romania%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>On February 2nd we will host the first conference from a series of conferences about web technologies and development. Our presenter will be Vincent Hardy, principal scientist at Adobe Systems.</p>
<p><img class="alignnone size-full wp-image-3382" title="Adobe Developer Day -  Web Platform" src="http://corlan.org/wp-content/uploads/2012/01/add.png" alt="" width="450" height="155" /></p>
<p>See you on February 2nd!</p>
<p>You can find more info about this conference and register <a href="http://adobedeveloperday.eventbrite.com/">here</a> (the presentations will be in English).</p>
<p>PS. I am so happy to see this finally get started as I&#8217;ve been working on it for some time.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/lO0JjeKTeMA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/16/announcing-a-series-of-web-conferences-organized-by-adobe-romania/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=announcing-a-series-of-web-conferences-organized-by-adobe-romania</feedburner:origLink></item>
		<item>
		<title>Getting Started with PhoneGap resources</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/92an26ohwNM/</link>
		<comments>http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 11:29:43 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3375</guid>
		<description><![CDATA[
			
				
			
		
If you want to learn how to use PhoneGap to build mobile applications with JavaScript and HTML, one good way is to watch this great series of nine videos. My fellow evangelist Kevin Hoyt spent some time in the studio for shooting and the result is great. It will take you less than a hour [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F13%2Fgetting-started-with-phonegap-resources%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F13%2Fgetting-started-with-phonegap-resources%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you want to learn how to use PhoneGap to build mobile applications with JavaScript and HTML, one good way is to watch this great series of nine videos. My fellow evangelist <a href="http://blog.kevinhoyt.com/">Kevin Hoyt</a> spent some time in the studio for shooting and the result is great. It will take you less than a hour and a half to watch all the videos.</p>
<p>Here is the list:</p>
<p><span id="more-3375"></span></p>
<h3>1. Getting Started with PhoneGap</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11728/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>2. Developing for iOS</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11729/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>3. Developing for Android</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11730/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>4. Device API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11750/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>5. Accelerometer API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11745/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>6. Camera API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11746/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>7. Compass API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11747/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>8. Connection API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11748/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<h3>9. Contacts API</h3>
<p><iframe width="480" height="296" title="AdobeTV Video Player" src="http://tv.adobe.com/embed/827/11749/" frameborder="0" allowfullscreen="" scrolling="no"></iframe></p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/92an26ohwNM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/13/getting-started-with-phonegap-resources/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=getting-started-with-phonegap-resources</feedburner:origLink></item>
		<item>
		<title>Debugging web pages remotely using a PlayBook tablet</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/Rt5B8unFu_8/</link>
		<comments>http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 15:17:15 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3351</guid>
		<description><![CDATA[
			
				
			
		
In  a previous post I explained how you can use weinre to remotely &#8221;debug&#8221; web pages that run on your mobile devices. If you are familiar with weinre then you also know its biggest limitations: no JavaScript debug support and CSS styles introspection.
Now there is no need to be sad if you happen to have a [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fdebugging-web-pages-remotely-using-a-playbook-tablet%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fdebugging-web-pages-remotely-using-a-playbook-tablet%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>In  a previous <a href="http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/">post</a> I explained how you can use weinre to remotely &#8221;debug&#8221; web pages that run on your mobile devices. If you are familiar with weinre then you also know its biggest limitations: no JavaScript debug support and CSS styles introspection.</p>
<p>Now there is no need to be sad if you happen to have a PlayBook device. If so, then you are back in business. What do I mean by that? I mean full access to Web Inspector/Developer Tools goodies while browsing web pages on the PlayBook tablet. Yes, including JavaScript debugging and CSS introspection.</p>
<p>A question or a doubt might pop in at this point &#8230; how this could this be possibly useful for developing web applications that run on mobile devices when Android and iOS devices have the greatest market share? Relax my friend, no need to lose your faith :D Because iOS, Android, and PlayBook default browsers are all based on WebKit. Although there are some differences between them I think they are close enough that you can get lots of value out of using the PlayBook device as the &#8220;debug&#8221; mobile platform. It also performs fine, at least today. I mean it is not too far off from the latest mobile phones or tablets.</p>
<p>So let me guide you through the steps you need to complete if you want to remotely debug web pages using a PlayBook.</p>
<p><span id="more-3351"></span></p>
<h3>1. Get a PlayBook</h3>
<p>The most important step is actually getting a device :D. You might be able to buy a used one for a good price. I think it is a good investment if you plan to (or  you already) do lots of mobile web development.</p>
<h3>2. Connect the PlayBook and your computer to the same WiFi network</h3>
<p>This is another important step. The PlayBook browser has Web Inspector support. While you can use it directly on the device I bet my 2 cents that it is far more convenient to use it on your computer. So this is the reason you need to connect them to the same network</p>
<h3>3. Enable Web Inspector on your PlayBook</h3>
<p>Set up a password for your PlayBook if you haven&#8217;t already set one (Settings &gt; Security &gt; Password). Then open the browser application and go to Settings. Select Privacy &amp; Security and then enable Web Inspector (it will ask for your password when enabling this option).</p>
<p><img class="alignnone size-full wp-image-3356" title="IMG_00000001" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000001.jpg" alt="" width="600" height="352" /></p>
<p>Once you enter the password a message window will give you the IP and port number of the PlayBook Web Inspector. Write down this info because you will need it.</p>
<p><img class="alignnone size-full wp-image-3355" title="IMG_00000002" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000002.jpg" alt="" width="600" height="352" /></p>
<h3>4. Load the page you want to debug/profile</h3>
<p>Now it is time to get serious. So open the web page you want to debug in the PlayBook browser. Please note that it is possible to open up a web page hosted on your computer web server (remember that the PlayBook and your computer are connected to the same network; so if you have a web server running on your computer you will be able to access it from your tablet).</p>
<h3>5. Start Web Inspector</h3>
<p>You can do this in two different ways. If you are a masochist you could use the Web Inspector on the PlayBook: open a new tab in your browser and type in this URL http://localhost:1337. You will see a page that has an entry for each opened tab in your browser (the URL must be opened after you enable Web Inspector in order to be listed). Here is an image to get an idea:</p>
<p><img class="alignnone size-full wp-image-3358" title="IMG_00000003" src="http://corlan.org/wp-content/uploads/2012/01/IMG_000000031.jpg" alt="" width="600" height="352" /></p>
<p>And here is the Web Inspector running for the first tab on my PlayBook on the PlayBook if you know what I mean:</p>
<p><img class="alignnone size-full wp-image-3359" title="IMG_00000004" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000004.jpg" alt="" width="600" height="352" /></p>
<p>But probably the sane way to do it is to run the Web Inspector remotely on your computer. So open a browser and type in the URL you got from Step 3. Once it is loaded you can select the tab you want to debug. And once you select the tab the Web Inspector should be displayed. From now onit is business as usual: you can access Elements, Resources, Scripts, Timeline, Profiles, Storage, Audits, and Console. You can debug the JavaScript code, audit the page for performance, and all sorts of magical things.</p>
<p>Here are screenshots with the Web Inspector running on my machine and the page I am debugging on the PlayBook. In the Web Inspector I selected a DIV element and you can see that the element was highlighted in the PlayBook browser.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/webinspector2.png"><img class="alignnone  wp-image-3361" title="webinspector2" src="http://corlan.org/wp-content/uploads/2012/01/webinspector2-300x167.png" alt="" width="600" /></a></p>
<p><img class="alignnone size-full wp-image-3360" title="IMG_00000005" src="http://corlan.org/wp-content/uploads/2012/01/IMG_00000005.jpg" alt="" width="600" height="352" /></p>
<p><strong>Word of warning:</strong> it might take a while for the Web Inspector to initialize on your machine. Be patient and don&#8217;t give up.</p>
<h2>Conclusions</h2>
<p>If you are not excited by this amazing workflow then there must be something wrong with you (or you are not a web developer and then it is OK :D). Again it might not be the perfect solution. I mean in a perfect world you&#8217;d have something similar for each mobile platform. Until then don&#8217;t whine too much and do your work with what you got!</p>
<p>Here is a screencast that takes you through the setup steps of the PlayBook Web Inspector and shows a simple debugging session. Enjoy!</p>
<p><iframe width="400" height="250" src="http://player.vimeo.com/video/34954294?title=0&amp;byline=0&amp;portrait=0" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe></p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/Rt5B8unFu_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/12/debugging-web-pages-remotely-using-a-playbook-tablet/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=debugging-web-pages-remotely-using-a-playbook-tablet</feedburner:origLink></item>
		<item>
		<title>Canvas Quirks</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/7DqSjfU5yTc/</link>
		<comments>http://corlan.org/2012/01/12/canvas-quirks/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 10:30:00 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3330</guid>
		<description><![CDATA[
			
				
			
		
While using Canvas 2D context for drawing stuff I discovered that the drawing line API can surprise you a bit especially when drawing horizontal or vertical lines. Here is a screenshot with a Canvas element and 5 lines drawn using lineTo() calls:

In case you haven&#8217;t noticed, let me tell you what&#8217;s wrong with this: the [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/12/canvas-quirks/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fcanvas-quirks%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F12%2Fcanvas-quirks%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>While using Canvas 2D context for drawing stuff I discovered that the drawing line API can surprise you a bit especially when drawing horizontal or vertical lines. Here is a screenshot with a Canvas element and 5 lines drawn using lineTo() calls:</p>
<p><img class="alignnone size-full wp-image-3335" title="canvas-1" src="http://corlan.org/wp-content/uploads/2012/01/canvas-1.png" alt="" width="487" height="312" /></p>
<p>In case you haven&#8217;t noticed, let me tell you what&#8217;s wrong with this: the lines are suposed to be 1 pixel width and black. Clearly what you see on the screen is not 1 pixel and the lines are somehow grayish. It looks more like 2 pixels. The code for drawing this looks like this:</p>
<pre class="brush: jscript; title: ; notranslate">

&lt;input onclick=&quot;draw()&quot; type=&quot;button&quot; value=&quot;draw&quot; /&gt;

&lt;script type=&quot;text/javascript&quot;&gt;// &lt;![CDATA[
function draw() {
    var context, i, y;

    context = document.getElementById('canvas').getContext('2d');
    y = 20;
    context.lineWidth = 1;
    context.strokeStyle = '#000000';
    for (i = 0; i &lt; 5; i++) {
       context.moveTo(0, y);
       context.lineTo(450, y);
       y += 10;
    }
    context.stroke();
}
// ]]&gt;&lt;/script&gt;
</pre>
<p>Let&#8217;s change the line width to 2 (line 10 in the above code snippet) and check the result:</p>
<p><img class="alignnone size-full wp-image-3340" title="canvas-2" src="http://corlan.org/wp-content/uploads/2012/01/canvas-2.png" alt="" width="487" height="316" /><br />
Interesting, isn&#8217;t it? So the lines width is basically the same, but the color now is really black. Now, let&#8217;s try something else: change the line width back to 1 and adjust the y property of the moveTo/lineTo functions with o.5 (line 13/14):</p>
<pre>context.moveTo(0, y + 0.5);
context.lineTo(450, y + 0.5);</pre>
<p>And surprise, surprise the lines are now exactly 1 pixel and black:</p>
<p><img class="alignnone size-full wp-image-3341" title="canvas-3" src="http://corlan.org/wp-content/uploads/2012/01/canvas-3.png" alt="" width="489" height="320" /></p>
<p>So what&#8217;s happening? After some research I think that this is what is happening:</p>
<ul>
<li>When you use integer coordinates like 10 or 15 the drawing algorithm is actually trying to draw a line in between two pixels (for example between the 9th and 10th pixels). As a result it will actually draw two lines.</li>
<li>I think the line is slightly lighter than the color set because of the antialiasing algorithm.</li>
<li>When you offset the coordinates by 0.5 then you &#8220;end&#8221; up with drawing the line exactly on one pixel.</li>
<li>If you draw a 1 pixel vertical line from (0,0) to (0,200) you will see that this time the line is exactly one pixel wide but the issue of lighter than defined color remains. As there is no other pixel to the left of the 0 pixel on the X axis on the screen you will see only one line.</li>
</ul>
<h2>Using fillRect() function instead of lineTo()</h2>
<p>If you don&#8217;t like adding those 0.5 to any coordinate when using the lineT0() API then you can actually use the drawing rectangle API. As you probably already guessed, the trick is to draw a rectangle of one pixel for one dimension and the length you need for the other one. So here is the script for drawing 5 horizontal lines:</p>
<pre class="brush: jscript; title: ; notranslate">
function draw() {
    var context, i, y;

    context = document.getElementById('canvas').getContext('2d');
    y = 20;

    for (i = 0; i &lt; 5; i++) {
       context.fillRect(0, 10 + y, 450, 1);
       y += 10;
    }
}
</pre>
<p>And here is the result:</p>
<p><img class="alignnone size-full wp-image-3348" title="canvas-4" src="http://corlan.org/wp-content/uploads/2012/01/canvas-4.png" alt="" width="490" height="319" /></p>
<p>If you are wondering about performance differences between lineTo() and fillRect() then you shouldn&#8217;t. fillRect() is probably even faster than lineTo().</p>
<p>You can see <a href="http://corlan.org/downloads/_html/canvas_quirks.html">here</a> a page that illustrates the differences between lineTo() and fillRect() when using integer coordinates.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/7DqSjfU5yTc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/12/canvas-quirks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/12/canvas-quirks/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=canvas-quirks</feedburner:origLink></item>
		<item>
		<title>Debugging Web Pages and PhoneGap apps on mobile devices</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/fr71xlJxSHQ/</link>
		<comments>http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 18:36:17 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3310</guid>
		<description><![CDATA[
			
				
			
		
If you are a web developer chances are that Google Chrome Developer Tools, Safari Web Inspector, or a Firefox equivalent are your best friends when it comes to debugging web pages (check CSS styles, verify generated HTML, or debug JavaScript). Isn&#8217;t that great? I mean not so long ago we used to debug JavaScript using [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F10%2Fdebugging-web-pages-and-phonegap-apps-on-mobile-devices%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F10%2Fdebugging-web-pages-and-phonegap-apps-on-mobile-devices%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you are a web developer chances are that Google Chrome Developer Tools, Safari Web Inspector, or a Firefox equivalent are your best friends when it comes to debugging web pages (check CSS styles, verify generated HTML, or debug JavaScript). Isn&#8217;t that great? I mean not so long ago we used to debug JavaScript using alert() calls.</p>
<p>Once you get used to these tools it is hard not to have them. And this is exactly what happens when you move to mobile web development. As you probably know there is no web inspector running on your iOS device browser.</p>
<p>How do you debug your web apps when running on mobile devices? The best answer to this question is using <a href="http://phonegap.github.com/weinre/Home.html">weinre</a> (if you know a better way, please let me know).</p>
<p><span id="more-3310"></span></p>
<h2>What is weinre?</h2>
<p>weinre is a remote Web Inspector that runs on your computer but it is connected to a browser (or a PhoneGap application) that is running on a mobile device. In terms of user interface it reuses the Web Inspector project at WebKit.</p>
<p>weinre consists of a debug server that runs on your computer and a user interface that also runs on your computer. The server component is able to communicate with the web page you are &#8220;debugging&#8221; (that typically runs on a mobile device) thanks to a JavaScript script that you have to inject in the page you want to debug (the script is served by the server component). And here comes the first thing you have to know: because of this architecture your mobile phone must be able to reach the server running on your computer (you can easily achieve this by connecting the computer and mobile device to the same WiFi network). If you are curious about how the web page running on the mobile device is able to communicate with the debug server, the answer is using XMLHttpRequest.</p>
<p>Finally, weinre is distributed either as a Java JAR file or as a Mac OS X application. This means that you can use this tool on a Windows, Mac OS X, or Linux machine.</p>
<h2>Are there any limitations?</h2>
<p>Unfortunately there are: you can&#8217;t debug the JavaScript code. This means you are not able to set breakpoints in your JavaScript code and introspect the variables. Unfortunate though this limitation might be, weinre is still incredibly useful because you can introspect the HTML code, see the Console output, execute JavaScript code in the console, get information about the XHR calls made by your page, and even select DOM elements.</p>
<h2>How can you use it?</h2>
<p>Here is a step-by-step list that explains how you can use weinre to &#8220;debug&#8221; a web page that is running on your mobile phone:</p>
<h3>1. Download the weinre debug server application</h3>
<p>First <a href="http://phonegap.github.com/weinre/Installing.html">download</a> the weinre application (this will be basically the debug server). I will use the Mac OS X application instead of the JAR file and I will point out what is different if you use the JAR file.</p>
<h3>2. Connect the computer and mobile device to the same WiFi network</h3>
<p>After you download the weinre file it is time to connect your computer and mobile device to the same WiFi network. Once the computer is connected, it is time to find out what IP address it is using. On my case the IP address is 42.1.2.250.</p>
<h3>3. Configure the weinre debug server application</h3>
<p>Now, it is time to configure the weinre debug server. Because I am using the Mac OS application, all I have to do is to create a server.properties file in the following location: ~/.weinre/server.properties</p>
<p>Next, open the server.properties file and add these two lines (for boundHost you have to introduce the IP address of your computer and for httpPort you can use any port number you want that doesn&#8217;t conflict with other web servers that might be running on your computer):</p>
<pre>boundHost: 42.1.2.250
httpPort:  8080</pre>
<p>Make sure you save the file.</p>
<p>If you use the JAR file, then you can set the options either using the server.properties file or adding them as options to the command line when invoking the JAR file.</p>
<h3>4. Start the weinre debug server</h3>
<p>For the Mac OS X app all you have to do is start the weinre application. If you use the JAR file then you should start the application using the command line.</p>
<h3>5. Inject the JavaScript file in the web page you want to debug</h3>
<p>With the debug server running it is time to inject the JavaScript file that makes all the parts to communicate. To do so, open the HTML page you want to &#8220;debug&#8221; and add this line:</p>
<pre>&lt;script src="http://42.1.2.250:8080/target/target-script-min.js#anonymous"&gt;&lt;/script&gt;</pre>
<p>Please note that the IP address and port number must match the values you set in the server.properties file. Make sure you save these changes.</p>
<h3>6. Make the web page available to your mobile phone</h3>
<p>Now, you are ready to debug the web page. However, in order to do this you have to load this page in the browser that runs on your mobile device. You will have to copy the web page and its dependencies to a web server running on your computer. In my case I&#8217;m running a MAMP instance on port 80. So what I&#8217;ve done is to copy the folder where I created the web page to the htdocs folder of the MAMP. Make sure the web server you want to use is running.</p>
<h3>7. Load the web page on your mobile device browser</h3>
<p>Open the browser on your mobile phone and load the page: http://42.1.2.250/weinre/index.html</p>
<p>Please note the IP address and port number must be your computer IP address and your web server port number (in my case I am running on the default port so there was no need to add it) and the rest of the URL must match the folder/file name you have.</p>
<h3>8. Debug the page</h3>
<p>Once your mobile browser loads the page, the weinre application should look like this:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/weinre-1.png"><img class="alignnone size-medium wp-image-3319" title="weinre-1" src="http://corlan.org/wp-content/uploads/2012/01/weinre-1-285x300.png" alt="" width="285" height="300" /></a></p>
<p>In the picture above Targets refers to the mobile device browser (so the IP address is your mobile device IP) and Clients refers to the debug client/server.</p>
<p>Here is a screenshot with the weinre application when the Elements tab is used and the console is opened too. You can see that the whole body element is selected. And in the console you can see some outputs. These were dysplayed once I hit the two buttons I have created in the web page.</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/weinre-3.png"><img class="alignnone size-medium wp-image-3320" title="weinre-3" src="http://corlan.org/wp-content/uploads/2012/01/weinre-3-268x300.png" alt="" width="268" height="300" /></a></p>
<p>And here is a screenshot of the web page running on my Android phone. As you can see the body is selected &#8211; because in the weinre app the body element was selected.</p>
<p><img class="alignnone size-full wp-image-3321" title="weinre-2" src="http://corlan.org/wp-content/uploads/2012/01/weinre-2.png" alt="" width="600" height="350" /></p>
<p>Finally, the web page used in this example looks like this:</p>
<p>&lt;!DOCTYPE HTML&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&#8221;UTF-8&#8243;&gt;</p>
<p>&lt;title&gt;Testing&lt;/title&gt;<br />
&lt;script src=&#8221;http://42.1.2.250:8080/target/target-script-min.js#anonymous&#8221;&gt;&lt;/script&gt;<br />
&lt;script&gt;<br />
function clickBtn() {<br />
console.log(&#8216;clickBtn() was called!&#8217;);<br />
}<br />
function click2Btn() {<br />
console.log(&#8216;click2Btn() was called!&#8217;);<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body onLoad=&#8221;init()&#8221;&gt;<br />
&lt;h1&gt;A simple page&lt;/h1&gt;<br />
&lt;h2&gt;To test weinre &#8211; Web Inspector Remote&lt;/h2&gt;<br />
&lt;button onClick=&#8221;clickBtn()&#8221;&gt;Click Me&lt;/button&gt;<br />
&lt;br&gt;<br />
&lt;button onClick=&#8221;click2Btn()&#8221;&gt;Click Me Too&lt;/button&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>If you use the JAR file, then you should open on your computer this URL: http://42.1.2.250:8080/client/#anonymous. Again change the IP address and port number to what you configured for the weinre debug server. Here is a screenshot with the debugger client opened in my browser:</p>
<p><a href="http://corlan.org/wp-content/uploads/2012/01/weinre-4.png"><img class="alignnone size-medium wp-image-3323" title="weinre-4" src="http://corlan.org/wp-content/uploads/2012/01/weinre-4-300x295.png" alt="" width="300" height="295" /></a></p>
<p>For your convenience, I captured this workflow in a short screencast:</p>
<p><iframe width="400" height="225" src="http://player.vimeo.com/video/34847707?title=0&amp;byline=0&amp;portrait=0" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe></p>
<h2>Conclusions</h2>
<p>Although you don&#8217;t get all the features available in the desktop Web Inspector, weinre is still a formidable asset in any developer&#8217;s toolbox. I mean without this you would have to use alert() or some other ten times more time consuming technique. Recently I was working on a web mobile application and weinre came to my rescue on a number of occasions.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/fr71xlJxSHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/10/debugging-web-pages-and-phonegap-apps-on-mobile-devices/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=debugging-web-pages-and-phonegap-apps-on-mobile-devices</feedburner:origLink></item>
		<item>
		<title>Happy New Year!</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/fkNRgdooNc8/</link>
		<comments>http://corlan.org/2012/01/04/happy-new-year-2/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 19:01:10 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3301</guid>
		<description><![CDATA[
			
				
			
		
I intended to write this post last month. But because the last two months were so busy, in the end I could find neither the time nor the energy to write. So here I go with my first post in 2012 that partially talks about 2011.
Speaking of the previous year, I&#8217;d like to extend a [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2012/01/04/happy-new-year-2/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F04%2Fhappy-new-year-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2012%2F01%2F04%2Fhappy-new-year-2%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I intended to write this post last month. But because the last two months were so busy, in the end I could find neither the time nor the energy to write. So here I go with my first post in 2012 that partially talks about 2011.</p>
<p>Speaking of the previous year, I&#8217;d like to extend a big thank you to all my readers and followers. Knowing that people will read your posts and send feedback is like fuel for engines. Next, I&#8217;d like to say thank you and applaud all the community leaders who worked so hard to organize events. I know firsthand the hard work needed to put together an event. You guys did an amazing job in 2011. I feel both proud and lucky being able to be part of some of the events you organized around the world.</p>
<p>People asked me what the highlights of 2011 were for me. Many things come to mind, but once I boiled them down they distilled  down to only two:</p>
<ol>
<li>Adobe AIR and Flex demonstrated that development for multiple mobile platforms can be both fun and efficient. Indeed, what started as a promise back in 2010 grew to an amazing platform in less than a year.</li>
<li>Adobe increased investment and effort in HTML/CSS/JavaScript. The last part of 2011 only accelerated a process that started long ago and produces things like: CSS Regions and Exclusions, CSS Shaders, Dreamweaver support for jQuery and PhoneGap, contributions to WebKit and jQuery Mobile. The PhoneGap and Typekit acquisitions cemented these trends and set up a perfect scene for more things to come moving forward.</li>
</ol>
<p>What about me (I know, I know it&#8217;s a bit too much :D)? Well, I couldn&#8217;t be happier to tell you the truth! I am still having the time of my life and enjoy every bit of my job :) I&#8217;ve been doing evangelism for almost four years and I&#8217;m looking forward to many more. However 2012 marks a change regarding what my focus will be: I will focus more and more on HTML, JavaScript, and CSS. And I have to confess that I&#8217;m excited. First, because this is how I started to make money programming years ago (HTML/JavaScript/CSS and server-side technologies). And second, I think Adobe is extremely well positioned on moving forward the web standards and HTML authoring/services tools.</p>
<p>What about Flex, AIR, and Flash Player? Despite what some people are saying I think they will be doing great. The runtimes are pushed harder and harder because Adobe wants to make the Flash Platform the game console of the web. This means that even if you are not in the gaming industry your Flash apps will benefit. What about Flex? I think the Flex framework is mature, it has a great community around it, and it is used for big enterprise projects and consumer apps. Having said that I think that the Flex framework will be relevant as long as the community wants it to be. Because if the community doesn&#8217;t believe in it and stops using it then it doesn&#8217;t matter what Adobe does and who&#8217;s behind it. I will surely keep an eye on what you guys will be doing :).</p>
<p>I wish you a Happy New Year!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/fkNRgdooNc8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2012/01/04/happy-new-year-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2012/01/04/happy-new-year-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=happy-new-year-2</feedburner:origLink></item>
		<item>
		<title>CoffeeScript or JavaScript?</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/gUUEwKAjLaI/</link>
		<comments>http://corlan.org/2011/12/11/coffeescript-or-javascript/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 14:25:41 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3292</guid>
		<description><![CDATA[
			
				
			
		
Recently I played with CoffeeScript a bit. Friends were talking about CoffeeScript and also I read couple of interesting blog posts. Based on my limited experience with it here is my understanding of what is cool and not so cool.
Cool:

It is much more compact than JavaScript. This translates to up to 1/3 less lines of code than [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/12/11/coffeescript-or-javascript/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F11%2Fcoffeescript-or-javascript%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F11%2Fcoffeescript-or-javascript%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Recently I played with <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> a bit. Friends were talking about CoffeeScript and also I read couple of interesting blog posts. Based on my limited experience with it here is my understanding of what is cool and not so cool.</p>
<p><strong>Cool:</strong></p>
<ol>
<li>It is much more compact than JavaScript. This translates to up to 1/3 less lines of code than the equivalent JavaScript</li>
<li>Offers the concept of classes &#8211; something that is familiar for people coming from the Java world</li>
<li>Insulates you from JavaScript pitfalls like global scope</li>
<li>Some times you can get a performance boost &#8211; hard to tell when and by how much</li>
<li>Some compile-time error checking, which helps you to write code with fewer bugs right off the bat</li>
</ol>
<p><strong>Not so cool:</strong></p>
<ol>
<li>Hard to debug. You have to debug the generated JavaScript code and from there you have to trace back to the CoffeeScript code</li>
<li>Writing less code can actually be something bad. Anyone remember Perl? And how hard it can be to read Perl code?</li>
<li>Adds another layer of abstraction on top of the browser stack. Adding to this jQuery or other frameworks and you can easily be in a situation where you can put together reasonably complex apps but you have no idea of what is happening under the hood nor how to fix a bug that originates from the frameworks you used</li>
<li>While I understand from why is done the way it was, I still think it would have been nice to have optional data typing</li>
</ol>
<p>Maybe not so surprisingly , I&#8217;ve seen people coming from OOP languages (Java or C#) that totally love CoffeeScript and this is their preferred way to write JavaScript apps.</p>
<p>As I said, I just played with it. So if I misunderstood something or completely missed a point please let me know.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/gUUEwKAjLaI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/12/11/coffeescript-or-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/12/11/coffeescript-or-javascript/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=coffeescript-or-javascript</feedburner:origLink></item>
		<item>
		<title>Tour de Flex is available for iPad now</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/UoHMvUq3Gss/</link>
		<comments>http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 08:06:04 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3283</guid>
		<description><![CDATA[
			
				
			
		
My colleagues from the Enterprise team were busy updating the Tour de Flex application to Flex 4.6 and they have published it to Android Market and the Apple App Store.

What&#8217;s cool about this project is that it is a three-in-one type of product: you can learn how to use Flex, you can experience the performance [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Ftour-de-flex-is-available-for-ipad-now%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Ftour-de-flex-is-available-for-ipad-now%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>My colleagues from the Enterprise team were busy updating the Tour de Flex application to Flex 4.6 and they have published it to Android Market and the Apple App Store.</p>
<p><img class="alignnone size-full wp-image-3284" title="tourflex" src="http://corlan.org/wp-content/uploads/2011/12/tourflex.png" alt="" width="599" height="262" /></p>
<p>What&#8217;s cool about this project is that it is a three-in-one type of product: you can learn how to use Flex, you can experience the performance of the Flex framework on mobile devices firsthand, and you can check the source code and learn how to build awesome mobile projects. <a href="http://flex.org/flexgame/">Here</a> is the project home page and you can get the source code from <a href="http://riagora.com/pvt_content/flexgame/FlexGame-source.fxp">here</a> (you&#8217;ll need <a href="http://www.adobe.com/go/try/flashbuilder">Flash Builder 4.6</a> to import the project).</p>
<p>And if you&#8217;re looking for the app on the stores search fom &#8220;Game of Flex&#8221; and not Tour de Flex!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/UoHMvUq3Gss" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/12/09/tour-de-flex-is-available-for-ipad-now/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tour-de-flex-is-available-for-ipad-now</feedburner:origLink></item>
		<item>
		<title>Steps to deploy a Flex and PHP application</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/J5w463JRA_E/</link>
		<comments>http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 07:57:02 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3281</guid>
		<description><![CDATA[
			
				
			
		
I&#8217;ve been receiving a number of emails on this topic lately. It seems there is little information out there about how to move from development to production with a Flex and PHP application. Here is a simple checklist that could help you, especially if you are doing this for the first time. Please note that [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Fsteps-to-deploy-a-flex-and-php-application%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F12%2F09%2Fsteps-to-deploy-a-flex-and-php-application%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve been receiving a number of emails on this topic lately. It seems there is little information out there about how to move from development to production with a Flex and PHP application. Here is a simple checklist that could help you, especially if you are doing this for the first time. Please note that I presume you used the Data Services (wizards) to connect the Flex client to PHP services.</p>
<ol>
<li>Make sure you have Zend Framework on your server. If you don&#8217;t, install it</li>
<li>Make sure you change MySQL credentials and server IP/name used by your PHP scripts to connect to the database</li>
<li>Copy the PHP services folder to your server. Then test these services. If they don&#8217;t work check the MySQL credentials or look for dependencies (maybe your PHP services use other PHP classes that you forgot to copy to your server)</li>
<li>Edit the amy_config.ini file and make sure the path to the Zend Framework is OK and set production to true</li>
<li>Edit the Flex services to point to your live server gateway.php. In the services folder of your Flex project you will find _Super_something.as files. In the constructor you will find a line like this:
<p><em> _serviceControl.endpoint = &#8220;http://localhost:10088/MobileFlexPHP-PHP/public/gateway.php&#8221;;</em><br /> Copy that line and then open the class that extends this _Super class and paste the line in the constructor. Then change the URL to reflect your server setup</li>
<li>Copy the bin-release/ folder to your server (you should choose the export release for your project; this will create a SWF file smaller than the debug version)</li>
</ol>
<p>That&#8217;s it! If I missed something please drop a comment!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/J5w463JRA_E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/12/09/steps-to-deploy-a-flex-and-php-application/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=steps-to-deploy-a-flex-and-php-application</feedburner:origLink></item>
		<item>
		<title>The future of the Flex framework</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/CbNMqo-Lye0/</link>
		<comments>http://corlan.org/2011/11/16/the-future-of-the-flex-framework/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 10:08:57 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3275</guid>
		<description><![CDATA[
			
				
			
		
As many of you probably know we made a few announcements last week that are quite interesting &#8211; let&#8217;s put it that way :). What made things even more interesting for Ryan and me is that we were right in the middle of the tour on mobile development (and we are still on tour for [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/11/16/the-future-of-the-flex-framework/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fthe-future-of-the-flex-framework%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fthe-future-of-the-flex-framework%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>As many of you probably know we made a few announcements last week that are quite interesting &#8211; let&#8217;s put it that way :). What made things even more interesting for Ryan and me is that we were right in the middle of the tour on mobile development (and we are still on tour for that matter). So we got your feedback first hand.</p>
<p>The good news is that last night the Flex team posted an update that adds more context and details about how Adobe plans to move Flex to Apache Software Foundation. And in short the essence of this update is that we still support Flex and Flash Builder; they won&#8217;t go away and we are not <em>killing</em> them. Here are some quotes from the post:</p>
<blockquote><p><strong>What specifically is Adobe proposing?</strong></p>
<p>We are preparing two proposals for incubating Flex SDK and BlazeDS at the Apache Software Foundation.</p>
<p>In addition to contributing the core Flex SDK (including automation and advanced data visualization components), Adobe also plans to donate the following:</p>
<ul>
<li>Complete, but yet-to-be-released, Spark components, including ViewStack, Accordion, DateField, DateChooser and an enhanced DataGrid.</li>
<li>BlazeDS, the server-based Java remoting and web messaging technology that enables developers to easily connect to back-end distributed data and push data in real-time to Flex applications.</li>
<li>Falcon, the next-generation MXML and ActionScript compiler that is currently under development (this will be contributed when complete in 2012)</li>
<li>Falcon JS, an experimental cross-compiler from MXML and ActionScript to HTML and JavaScript.</li>
<li>Flex testing tools, as used previously by Adobe, so as to ensure successful continued development of Flex with high quality</li>
</ul>
<p>Adobe will also have a team of Flex SDK engineers contributing to those new Apache projects as their full-time responsibility. Adobe has in-development work already started, including additional Spark-based components.<br />
<strong>Isn’t Adobe just abandoning Flex SDK and putting it out to Apache to die?</strong></p>
<p>Absolutely not – we are incredibly proud of what we’ve achieved with Flex and know that it will continue to provide significant value for many years to come. We expect active and on-going contributions from the Apache community. To be clear, Adobe plans on steadily contributing to the projects and we are working with the Flex community to make them contributors as well.</p></blockquote>
<p>You can read the whole post/update <a href="http://blogs.adobe.com/flex/2011/11/your-questions-about-flex.html">here</a>. And drop a comment if you have something to share!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/CbNMqo-Lye0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/11/16/the-future-of-the-flex-framework/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/11/16/the-future-of-the-flex-framework/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=the-future-of-the-flex-framework</feedburner:origLink></item>
		<item>
		<title>Adobe Touch Apps are available now</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/K5yRTpln_9s/</link>
		<comments>http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 09:43:11 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3271</guid>
		<description><![CDATA[
			
				
			
		
We just launched the Adobe Touch Apps part of the Adobe Cloud. You will find the six apps in the Android Market with one of them being available for iOS too (iOS versions will follow). Just as a quick reminder the six apps are: Collage, Debut, Ideas, Kuler, Photoshop Touch, and Proto.

I think this is [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fadobe-touch-apps-are-available-now%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F16%2Fadobe-touch-apps-are-available-now%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We just launched the Adobe Touch Apps part of the Adobe Cloud. You will find the six apps in the Android Market with one of them being available for iOS too (iOS versions will follow). Just as a quick reminder the six apps are: Collage, Debut, Ideas, Kuler, Photoshop Touch, and Proto.</p>
<p><img class="alignnone size-full wp-image-3272" title="adtouch" src="http://corlan.org/wp-content/uploads/2011/11/adtouch.png" alt="" width="600" height="222" /></p>
<p>I think this is great because it was about time we had more apps for tablets that can be used to create digital content. So far developers and companies were extremely good at creating apps for consuming existing content on tablets. As I said many times it is a pity not to be able to create content on your tablet device. I think that with the Adobe Touch apps we are going in the right direction: you can start working on a prototype while you are commuting and all you have is your tablet. Once you get to your computer you can continue your work on the same file. And the synch process between your computer and tablets devices is transparent; it happens auto-magically.</p>
<p>You can read more about these apps <a href="http://www.adobe.com/products/touchapps.html">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/K5yRTpln_9s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/11/16/adobe-touch-apps-are-available-now/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adobe-touch-apps-are-available-now</feedburner:origLink></item>
		<item>
		<title>Bucharest Flash Camp 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/e0_Icts8iag/</link>
		<comments>http://corlan.org/2011/11/09/bucharest-flash-camp-2011/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 07:58:58 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3265</guid>
		<description><![CDATA[
			
				
			
		
This Friday we will host a Flash Camp in our Bucharest office. The event starts at 5:00 PM and will end at 8:00 PM. If you have questions about what was announced at MAX, if you want to find out what&#8217;s coming next, or if you want to learn how you can start mobile development with [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/11/09/bucharest-flash-camp-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F09%2Fbucharest-flash-camp-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F11%2F09%2Fbucharest-flash-camp-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>This Friday we will host a Flash Camp in our Bucharest office. The event starts at 5:00 PM and will end at 8:00 PM. If you have questions about what was announced at MAX, if you want to find out what&#8217;s coming next, or if you want to learn how you can start mobile development with our tools, runtimes, and frameworks then make plans to be there. There are still a few seats left so you can go <a href="http://www.eventbrite.com/myevent?eid=2406425684">here</a> and register.</p>
<p>This event is a premiere because for the first time I will have the pleasure of co-presenting  (a Romanian event) with one of my American teammates: <a href="http://blog.digitalbackcountry.com/">Ryan Stewart</a>. So that is another reason to be there :)</p>
<p>And finally, we will have a hands-on session on getting startet with mobile development with Flex, AIR, and Flash Builder. So if you never tried Flex mobile and you want to learn the basics then you have a third reason to be there.</p>
<p>See you Friday!</p>
<p><a href="http://www.eventbrite.com/myevent?eid=2406425684">Registration link</a>.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/e0_Icts8iag" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/11/09/bucharest-flash-camp-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/11/09/bucharest-flash-camp-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=bucharest-flash-camp-2011</feedburner:origLink></item>
		<item>
		<title>Flex Mobile European Tour 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/JIHC9iBYvTY/</link>
		<comments>http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 10:35:58 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3255</guid>
		<description><![CDATA[
			
				
			
		
With almost all the bits and pieces falling nicely in place I can finally blog about the European tour we&#8217;ve been working on. Before talking about content, dates, and locations let me say loud and clear &#8220;Thank you!&#8221; to the people in our community who worked hard to make these events possible and to Magda Neagu and [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fflex-mobile-european-tour-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fflex-mobile-european-tour-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>With almost all the bits and pieces falling nicely in place I can finally blog about the European tour we&#8217;ve been working on. Before talking about content, dates, and locations let me say loud and clear &#8220;Thank you!&#8221; to the people in our community who worked hard to make these events possible and to Magda Neagu and John Koch, my colleagues who gave us all the support we needed.</p>
<p>Why am I saying us instead of I? Because I have the pleasure of doing this tour together with my friend and fellow evangelist <a href="http://blog.digitalbackcountry.com/">Ryan Stewart</a>.</p>
<p>Here is the list:</p>
<ol>
<li>November 3rd &#8211; <a href="https://www.xing.com/events/mobile-flash-camp-wien-827635">Vienna</a> / Austria</li>
<li>November 4rd &#8211; <a href="http://flashcamprome.eventbrite.com/#en">Rome</a> / Italy</li>
<li>November 7th &#8211; <a href="http://mobileflextourlondon.eventbrite.com/">London</a> / UK</li>
<li>November 9th &#8211; <a href="http://fpug.org.ua/meeting/32">Kiev</a> / Ukraine</li>
<li>November 10th &#8211; <a href="http://flexlabs.groups.adobe.com/index.cfm?event=post.display&amp;postid=38975">Berlin</a> / Germany</li>
<li>November 11th &#8211; <a href="http://www.eventbrite.com/myevent?eid=2406425684">Bucharest</a> / Romania</li>
<li>November 14th &#8211; <a href="http://mobileflextourzurich.eventbrite.com/">Zurich</a> / Swiss</li>
<li>November 15th &#8211; <a href="http://www.meetup.com/augdublin/events/37088572/?a=ea1.2_lnm&amp;rv=ea1.2">Dublin</a> / Ireland</li>
<li>November 17th &#8211; Barcelona / Spain
<ol>
<li>We will do a session at <a href="http://bcndevcon.org/">Barcelona DevCon</a></li>
<li>We will have a meeting with the local Flex and Flash user group. I will update this post once I have the location and date</li>
</ol>
</li>
<li>November 19th &#8211; <a href="http://flashrdevday.eventbrite.com/">Zagreb</a> / Croatia</li>
</ol>
<p>If you want to attend one of these events make sure you register today because the number of seats is limited.</p>
<p>In terms of content, we will do a hands-on on mobile development with Flex, Adobe AIR, and Flash Builder. We will also have sessions about mobile development and some of the cool things we announced at MAX. And this will provide you with the perfect opportunity to throw questions at us. Actually let me re-phrase this: it will be the perfect opportunity to ask Mr. Ryan Stewart anything you want to know :).</p>
<p>Last but definitely not the least, if you have a cool project and you want to show it to us, please don&#8217;t be shy. Come to us after the event or during one of the breaks and we will listen to you. We always love seeing the great stuff you build and listening to your feedback. If you are reading my blog you know that from time to time I blog about cool apps and projects.</p>
<p>PS. If you plan to attend one of our hands-on sessions then you should have Flash Builder installed on your laptop. Also, if you have an Android phone you will be able to run all the examples on your device too (you will need a USB cable to connect the device to your laptop). Otherwise you can use the Flash Builder desktop simulator.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/JIHC9iBYvTY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/27/flex-mobile-european-tour-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flex-mobile-european-tour-2011</feedburner:origLink></item>
		<item>
		<title>CSS Regions running in Chrome 15</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/RA1Ueq9NGkw/</link>
		<comments>http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 09:22:10 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3248</guid>
		<description><![CDATA[
			
				
			
		
The latest release of the Chrome browser (15 was launched last night) makes Chrome the first browser that offers support for the CSS Regions feature. This is really amazing as the story has been developing for a little bit more than a year: from the initial idea, to the first proof of concept, then working [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fcss-regions-running-in-chrome-15%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F27%2Fcss-regions-running-in-chrome-15%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>The latest release of the Chrome browser (15 was launched last night) makes Chrome the first browser that offers support for the <a href="http://www.adobe.com/devnet/html5/articles/css3-regions.html">CSS Regions feature</a>. This is really amazing as the story has been developing for a little bit more than a year: from the initial idea, to the first proof of concept, then working with the standards bodies and WebKit, and finally to Chrome 15.</p>
<p>If you have the latest Chrome on your machine (should work on both Windows and Mac OS) you should be able to test this <a href="http://corlan.org/downloads/simple_single_thread.html">page</a>. Just play with the size of your browser window and you should see how the text fills the three different columns.</p>
<p><img class="alignnone size-full wp-image-3249" title="cssreg1" src="http://corlan.org/wp-content/uploads/2011/10/cssreg1.png" alt="" width="523" height="516" /></p>
<p><img class="alignnone size-full wp-image-3250" title="cssreg2" src="http://corlan.org/wp-content/uploads/2011/10/cssreg2.png" alt="" width="600" height="321" /></p>
<p><strong>PS.</strong> Just talked to the Adobe engineers that work on this and they told me that there might be a small glitch with how the text flows sometimes. But this has been already been fixed in the main line. So probably the next update of the Chrome will pick up this change.</p>
<p><strong>Later Update:</strong> Peter Elst dropped me a message telling me that the CSS Regions examples we host on Adobe Labs don&#8217;t work in Chrome 15. This is true and normal at the same time. The examples we have there represent one of the first drafts of CSS Regions. Since then the syntax has changed. This is why I included <a href="http://corlan.org/downloads/simple_single_thread.html">a page for test </a>in my post.</p>
<p><strong>Later Update 2: </strong>Someone told me that Internet Explorer 10 already supports CSS Regions. This is true, but IE 10 is a pre-release version while Chrome 15 is a &#8220;production&#8221; ready release.</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/RA1Ueq9NGkw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/27/css-regions-running-in-chrome-15/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=css-regions-running-in-chrome-15</feedburner:origLink></item>
		<item>
		<title>Flash Player 11.2 Beta and Adobe AIR 3.2 Beta available on Adobe Labs</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/lmfWSwo6C_o/</link>
		<comments>http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 19:46:25 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3244</guid>
		<description><![CDATA[
			
				
			
		
We just released Flash Player 11.2 Beta and Adobe AIR 3.2 Beta on Adobe Labs. The main features for this release are:
Multi-threaded video decoding (Windows, Mac OS, and Linux) — The video decoding pipeline is now fully multi-threaded. This feature should improve the overall performance on all platforms. Note that this feature is a significant architecture [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F26%2Fflash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F26%2Fflash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We just released <a href="http://labs.adobe.com/technologies/flashplatformruntimes/flashplayer11-2/">Flash Player 11.2</a> Beta and <a href="http://labs.adobe.com/technologies/flashplatformruntimes/air3-2/">Adobe AIR 3.2</a> Beta on Adobe Labs. The main features for this release are:</p>
<blockquote><p><strong>Multi-threaded video decoding</strong> (Windows, Mac OS, and Linux) — The video decoding pipeline is now fully multi-threaded. This feature should improve the overall performance on all platforms. Note that this feature is a significant architecture change required for other future improvements.</p>
<p><strong>Flash Player background updates</strong> (Windows) — New versions of the runtimes can now be delivered more effectively to the end user with this enhanced updating mechanism (Background update is only available in the release versions of Flash Player).</p></blockquote>
<p>From the release notes some additional info on the multi-threaded video decoding feature:</p>
<blockquote><p>Multi-threaded pipeline was written grounds up to support lower end devices and full hardware stacks where all the decoding and rendering isoffloaded to hardware. The benefits of the modernization of the pipeline would be visible from mobile devices, tvs, netbooks to high end desktops.In Flash Player 11.2, the new video pipeline is available for desktop platforms (including netbooks ) and brings enhancements with respect to:</p>
<ul>
<li>Eliminating jitter seen occasionally in some encoding and typically in live streams and real time interactive scenarios.</li>
<li>Gains in frame rate by reducing dropped frames as much as 50% on certain platforms with high bit rate content.</li>
<li>Seek frame accuracy.</li>
<li>High resolution/bit rate content decoding would still keep the player UI responsive and any background ActionScript processing going,which earlier could have experienced brief halts because all the decoding and player UI/ActionScript resided on the main thread. For HTTP streaming, ActionScript is the control point of fetching the stream data and delivering to the video stack. On seek, earlier thestreaming would halt, while the frames up to the point of seek would be getting decoded. With multithreaded video decoding, not onlywould the seek be more responsive, but it would also start playback faster after seek.</li>
<li>50+ fixes as part of the modernization of the video pipeline architecture</li>
</ul>
</blockquote>
<p>Is this cool or what?</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/lmfWSwo6C_o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/26/flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flash-player-11-2-beta-and-adobe-air-3-2-beta-available-on-adobe-labs</feedburner:origLink></item>
		<item>
		<title>Speaking at ZendCon 2011</title>
		<link>http://feedproxy.google.com/~r/corlan/~3/O-KuAVTWC6w/</link>
		<comments>http://corlan.org/2011/10/17/speaking-at-zendcon-2011/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 07:00:30 +0000</pubDate>
		<dc:creator>Mihai Corlan</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://corlan.org/?p=3240</guid>
		<description><![CDATA[
			
				
			
		
This week I&#8217;ll be at the ZendCon PHP Conference in Santa Clara. I will have a session on Flex and PHP mobile development for iOS, Android, and PlayBook on Thursday starting at 9:15 AM.
If you plan to attend this conference make sure you drop by to say hello. We will have a booth in the [...]]]></description>
			<content:encoded><![CDATA[<div class="none" style="float: right; margin-left: 10px;"><g:plusone href="http://corlan.org/2011/10/17/speaking-at-zendcon-2011/" size="tall" count="true"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F17%2Fspeaking-at-zendcon-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorlan.org%2F2011%2F10%2F17%2Fspeaking-at-zendcon-2011%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>This week I&#8217;ll be at the ZendCon PHP Conference in Santa Clara. I will have a session on Flex and PHP mobile development for iOS, Android, and PlayBook on Thursday starting at 9:15 AM.</p>
<p>If you plan to attend this conference make sure you drop by to say hello. We will have a booth in the exposition area next to Zend&#8217;s booth.</p>
<p>I&#8217;m really excited to be part of this conference. First, it is my first PHP conference in the States &#8211; so far I&#8217;ve been speaking only at European conferences. And second, it has been a while since my last PHP conference. I think I will have a great time catching up with what the PHP community is doing these days. I already picked up some sessions that I&#8217;m sure will blow my mind :)</p>
<p>Now straight to the airport! A long trip awaits me!</p>
<img src="http://feeds.feedburner.com/~r/corlan/~4/O-KuAVTWC6w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://corlan.org/2011/10/17/speaking-at-zendcon-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corlan.org/2011/10/17/speaking-at-zendcon-2011/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=speaking-at-zendcon-2011</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.988 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-15 17:05:50 -->

