<?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"?><!-- generator="wordpress/2.8.6" --><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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>WebAppers</title>
	<link>http://www.webappers.com</link>
	<description>- Hunting the Best Open Source Resources for Web Developers</description>
	<pubDate>Fri, 24 May 2013 07:01:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Webappers" /><feedburner:info uri="webappers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Webappers</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>FROONT: Responsive Web Design in the Visual Way</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/W9HKRGtVw0A/</link>
		<comments>http://www.webappers.com/2013/05/24/froont-responsive-web-design-in-the-visual-way/#comments</comments>
		<pubDate>Fri, 24 May 2013 07:01:50 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[License Free]]></category>
		<category><![CDATA[Tools]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8649</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1391012012" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=157516087" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>FROONT is a web-based design tool that runs in the browser and makes responsive web design accessible to all kinds of visual designers, even those without any coding skills.
FROONT makes responsive web design visual. Design can be done in-browser with intuitive drag-and-drop tools. After all, humans judge design with their eyes therefore it seems just [...]<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=809470482" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=741076352" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p><a title="Froont" href="http://froont.com/" target="_blank">FROONT</a> is a web-based design tool that runs in the browser and makes responsive web design accessible to all kinds of visual designers, even those without any coding skills.</p>
<p>FROONT makes responsive web design visual. Design can be done in-browser with intuitive drag-and-drop tools. After all, humans judge design with their eyes therefore it seems just normal to see right away how designs will look across all different screen sizes. Each project has its own URL, that makes it easy to test the designs on real devices right away.</p>
<p style="text-align: center;"><a title="Froont" href="http://froont.com/" target="_blank"><img class="size-full wp-image-8650 aligncenter" title="froont" src="http://maxcdn.webappers.com/img/2013/05/froont.jpg" alt="froont" width="580" height="336" /></a></p>
<blockquote><p>Requirements: -<br />
Demo: <a title="demo" rel="nofollow" href="http://froont.com/" target="_blank">http://froont.com/</a><br />
License: License Free</p></blockquote>

<!-- Similar Posts took 0.348 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=W9HKRGtVw0A:9MMHj09pHeM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=W9HKRGtVw0A:9MMHj09pHeM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=W9HKRGtVw0A:9MMHj09pHeM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=W9HKRGtVw0A:9MMHj09pHeM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=W9HKRGtVw0A:9MMHj09pHeM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=W9HKRGtVw0A:9MMHj09pHeM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=W9HKRGtVw0A:9MMHj09pHeM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=W9HKRGtVw0A:9MMHj09pHeM:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=W9HKRGtVw0A:9MMHj09pHeM:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=W9HKRGtVw0A:9MMHj09pHeM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/W9HKRGtVw0A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/24/froont-responsive-web-design-in-the-visual-way/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/24/froont-responsive-web-design-in-the-visual-way/</feedburner:origLink></item>
		<item>
		<title>jQuery.Swatches Turns Div into a Sweet Color Swatch</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/BoxLOjy9EUA/</link>
		<comments>http://www.webappers.com/2013/05/23/jquery-swatches-turns-div-into-a-sweet-color-swatch/#comments</comments>
		<pubDate>Thu, 23 May 2013 07:01:20 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[Color Schemes]]></category>
		<category><![CDATA[MIT License]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8641</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1158797480" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=144786938" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>jQuery.swatches is a free to use that turns a one-line div into a sweet color swatch. You can customize the class as you want. Using different classes would allow you to render groups of swatches at individual times by calling swatchify() on a different selector.

Requirements: jQuery Framework
Demo: http://maxmackie.com/jquery.swatches/
License: MIT License

<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1010675028" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=2042774384" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p><a title="jQuery Swatches" href="http://maxmackie.com/jquery.swatches/" target="_blank">jQuery.swatches</a> is a free to use that turns a one-line div into a sweet color swatch. You can customize the class as you want. Using different classes would allow you to render groups of swatches at individual times by calling swatchify() on a different selector.</p>
<p style="text-align: center;"><a title="jQuery Swatches" href="http://maxmackie.com/jquery.swatches/" target="_blank"><img class="size-full wp-image-8642 aligncenter" title="color-swatches" src="http://maxcdn.webappers.com/img/2013/05/color-swatches.jpg" alt="color-swatches" width="580" height="359" /></a></p>
<blockquote><p>Requirements: jQuery Framework<br />
Demo: <a title="demo" rel="nofollow" href="http://maxmackie.com/jquery.swatches/" target="_blank">http://maxmackie.com/jquery.swatches/</a><br />
License: MIT License</p></blockquote>

<!-- Similar Posts took 0.330 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=BoxLOjy9EUA:sQ_V4fFFcjk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=BoxLOjy9EUA:sQ_V4fFFcjk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=BoxLOjy9EUA:sQ_V4fFFcjk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=BoxLOjy9EUA:sQ_V4fFFcjk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=BoxLOjy9EUA:sQ_V4fFFcjk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=BoxLOjy9EUA:sQ_V4fFFcjk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=BoxLOjy9EUA:sQ_V4fFFcjk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=BoxLOjy9EUA:sQ_V4fFFcjk:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=BoxLOjy9EUA:sQ_V4fFFcjk:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=BoxLOjy9EUA:sQ_V4fFFcjk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/BoxLOjy9EUA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/23/jquery-swatches-turns-div-into-a-sweet-color-swatch/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/23/jquery-swatches-turns-div-into-a-sweet-color-swatch/</feedburner:origLink></item>
		<item>
		<title>Free Responsive HTML5 + CSS3 Site Templates</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/VW5__dESDjY/</link>
		<comments>http://www.webappers.com/2013/05/22/free-responsive-html5-css3-site-templates/#comments</comments>
		<pubDate>Wed, 22 May 2013 07:10:52 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[CC License]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8636</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1854534148" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1556930477" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>HTML5 Up! is a small showcase of the free responsive HTML5 + CSS3 site templates that AJ put together while developing 5grid. All of them are clean, minimal, fully responsive site templates built on HTML5 and CSS3. They are licensed under the Creative Commons Attribution license.

Requirements: Skel.js Framework
Demo: http://html5up.net/
License: Creative Commons License

<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=366550695" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1636875691" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p><a title="HTML5 Up" href="http://html5up.net/" target="_blank">HTML5 Up!</a> is <strong>a small showcase of the free responsive HTML5 + CSS3 site templates</strong> that AJ put together while developing 5grid. All of them are clean, minimal, fully responsive site templates built on HTML5 and CSS3. They are licensed under the Creative Commons Attribution license.</p>
<p style="text-align: center;"><a title="HTML5 Up" href="http://html5up.net/" target="_blank"><img class="size-full wp-image-8637 aligncenter" title="html5-templates" src="http://maxcdn.webappers.com/img/2013/05/html5-templates.jpg" alt="html5-templates" width="579" height="438" /></a></p>
<blockquote><p>Requirements: Skel.js Framework<br />
Demo: <a title="demo" rel="nofollow" href="http://html5up.net/" target="_blank">http://html5up.net/</a><br />
License: Creative Commons License</p></blockquote>

<!-- Similar Posts took 0.348 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=VW5__dESDjY:NesH53fLhN8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=VW5__dESDjY:NesH53fLhN8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=VW5__dESDjY:NesH53fLhN8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=VW5__dESDjY:NesH53fLhN8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=VW5__dESDjY:NesH53fLhN8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=VW5__dESDjY:NesH53fLhN8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=VW5__dESDjY:NesH53fLhN8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=VW5__dESDjY:NesH53fLhN8:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=VW5__dESDjY:NesH53fLhN8:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=VW5__dESDjY:NesH53fLhN8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/VW5__dESDjY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/22/free-responsive-html5-css3-site-templates/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/22/free-responsive-html5-css3-site-templates/</feedburner:origLink></item>
		<item>
		<title>How to Mobilize Atari Arcade in HTML5</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/6JAlMjQaQ9U/</link>
		<comments>http://www.webappers.com/2013/05/22/how-to-mobilize-atari-arcade-in-html5/#comments</comments>
		<pubDate>Wed, 22 May 2013 07:01:13 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[Information]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8630</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=2011530219" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1157121447" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>This article recently appeared on the Atari Arcade Developer Center, a collaboration by the teams at gskinner.com , Atari and Internet Explorer.

The Atari Arcade: a true game portal showcasing what&#8217;s possible with web standards like HTML5, CSS3, and JavaScript. Slick graphics, fast, multi-player gameplay, and platform agnostic. Initially only targeting desktop and tablet-based browsers, we&#8217;ve [...]<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1191061475" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=133702183" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p>This article recently appeared on <a href="http://atari.com/arcade/developers" target="_blank">the Atari Arcade Developer Center</a>, a collaboration by the teams at <a href="http://gskinner.com" target="_blank">gskinner.com</a> , <a href="http://atari.com">Atari</a> and <a href="http://ietestdrive.com" target="_blank">Internet Explorer.</a></p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/ArticleHeader_Mobilizing.jpg" /></p>
<p class="article-teaser">The Atari Arcade: a true game portal showcasing what&#8217;s possible with web standards like HTML5, CSS3, and JavaScript. Slick graphics, fast, multi-player gameplay, and platform agnostic. Initially only targeting desktop and tablet-based browsers, we&#8217;ve now endeavored to bring the arcade to mobile.</p>
<h3 class="header-medium">Choosing a Target</h3>
<p>By limiting to desktops and tablets in the first release, we narrowed our scope considerably, and were able to provide a semi-responsive layout with a single game size. Our reach included most standard resolution monitors, plus tablet form-factors like Surface and iPad.
   </p>
<p>But we quickly learned that we were missing something by not targeting the huge number of users on mobile devices. That is, a vast market that now accounts for about 12% of all global <a href="http://www.businessinsider.com/state-of-internet-slides-2012-10?op=1">internet traffic</a>, spanning all kinds of dimensions, resolutions, and processors. Our next task was identifying an approach to bring the arcade to the mobile web. We wanted to support a variety of resolutions, including higher DPIs in new devices like Windows Phone 8 and iPhone 5.
</p>
<p>This article discusses the goals to mobilize the arcade, as well as some approaches, the issues we encountered, and some tips and tricks where we found value.</p>
<p> <span id="more-8630"></span></p>
<h3 class="header-medium">Taking Aim</h3>
<p>We spent a good deal of time determining what was possible on different platforms to establish a feature set that was appropriate for mobile.</p>
<p>Our goal was to build a site that:</p>
<ol>
<li>Could re-use the majority of the site framework we had already built</li>
<li>Scaled fabulously on any resolution</li>
<li>Performed awesomely on newer devices</li>
<li>Was intuitive to navigate with touch</li>
<li>Could include some of our games at launch, and all of our games shortly after</li>
<li>Could be extended to third party developers!</li>
</ol>
<p>With this game plan, we set upon re-architecting the front-end of the site, and making the games elastic to support the resolutions we needed.</p>
<h3>What Works?</h3>
<p>The first task: eliminate platforms that just won&#8217;t work. With the wide array of platforms and models of phones, we did some focused testing on the following points:</p>
<ol>
<li><strong>Technology.</strong> Some devices don&#8217;t have adequate canvas, JavaScript, CSS, or HTML support.</li>
<li><strong>Touch capabilities.</strong> All of the games are already touch-enabled, so we eliminated any candidates with only single-input touch support.</li>
<li><strong>Adequate resolution.</strong> Older browsers tack on a ton of browser chrome on mobile devices, and we needed enough real estate for our games to look great and display touch controls when required.</li>
<li><strong>Performance.</strong> Once it looked right, and functioned properly, we focussed on performance and monitored frame rates.</li>
</ol>
<p>We tested a number of devices &#8211; the primary targets being Microsoft&#8217;s Windows 8 devices (to highlight the technical capabilities of the platform), and iPhones (to reach the widest market). We also tested on a number of Android phones to see what we could support.</p>
<p>The results were surprising. Not all phones are created equally, but the arcade ran quite well on almost everything we tested with.</p>
<ol>
<li>We got incredible performance on <a href="http://www.windowsphone.com/en-us" target="_blank">Windows Phone 8</a>. It had the highest frame-rates, the site rendered as expected, and the multi-touch worked great. Unfortunately, we could only get our hands on a WVGA device (800&#215;480) for launch, but we expect the WXGA and 720p devices will have no problems.</li>
<li>The site and games performed great on the new iPhones, but it was clear from the start that Mobile Safari&#8217;s chrome consumed too much real estate. In order to support iOS5 in mobile Safari, the arcade needs to be pinned to the home screen to run in fullscreen. We then discovered that iOS5 and below have no hardware support in pinned site mode, so although we can support it, not all games perform well.</li>
<li>We got mixed results on various Android devices we tested, including phones as well as a Nexus 7 tablet. The site and games mostly performed, but due to our short timeline, and the wide range of Android devices, we decided to focus on the other platforms first.</li>
</ol>
<p>Interestingly, none of the devices had any trouble with loading and displaying our games, except for a hiccup with audio. We were impressed to see such consistent support across various mobile browsers.</p>
<h3 class="header-medium">Adapting to Surroundings</h3>
<p>With the tech dust settled, we began the site redesign.</p>
<p>To hit our target devices in a single production cycle, we incorporated responsive and adaptive approaches that react to mobile visitors, and loads a scalable, flexible, percentage-based version of the arcade. It keeps everything contained in the viewport regardless of size or landscape aspect ratio. No media queries are required.</p>
<p>Check out the following comparisons of Windows Phone 8 (left) and iPhone (right):</p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/Arcade-pong.png" /><br />
<img src="http://maxcdn.webappers.com/img/2013/05/Arcade-controls.png" /><br />
<img src="http://maxcdn.webappers.com/img/2013/05/Arcade-Breakout.png" /></p>
<p>We kept as much consistency in the DOM between the desktop and mobile site as possible. This let us use most of our existing site HTML and CSS structure &#8211; both of which required relatively minor edits to support the new views. We implemented a swipe-based mobile navigation which allowed us to push our artwork to the forefront, and make it easier and faster for fingers to get into the games.</p>
<p>The Arcade now responds to the user agent, and serves the fixed-size desktop version, the adaptive mobile version, or appropriate messaging for unsupported browsers and devices.</p>
<h3>Initial Findings</h3>
<p>To have the best possible gaming experience in a mobile browser, we had to get full screen, or at least as close as possible.</p>
<p><strong>Windows Phone works great.</strong><br />
WP8 is almost there: it has a persistent browser bar at the bottom of the screen in both landscape and portrait modes (which can be easy to accidently touch), but more than enough screen real estate for an immersive in-browser gaming experience.</p>
<p><strong>iOS 6 has full screen.</strong><br/><br />
It works pretty well, but has some interesting issues. The full screen mode is really easy to toggle out of, and navigation buttons overlay the bottom area which can even scroll the screen if touched right. Worth noting is that full screen in Mobile Safari is a landscape-only feature, which worked out just fine for us.</p>
<p><strong>iOS 5 falls back.</strong><br />
iOS5 gets close to full screen by virtue of a &#8216;pinned site&#8217; on the users home screen. Without this workaround, Mobile Safari chrome reduces the viewport height by close to 50%. But beware: pinned sites do not get hardware support on iOS5. Some content will run poorly.</p>
<p><strong>Native scroll and zoom</strong><br />
Mobile browsers natively include intuitive page scroll, over-scroll, and zoom. This is great for viewing web pages &#8211; but not games. Fortunately, we can block it almost entirely. This approach does not work in Windows Phone 7, which is another reason we chose not to support it. To block the native zoom, we use these meta tags:</p>
<pre>
<code data-language="javascript">
&lt;!-- Define the viewport --&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0, target-densitydpi=device-dpi"&gt;

&lt;!-- iOS helper --&gt;
&lt;meta name="apple-mobile-web-app-capable" content="yes" /&gt;
</code>
</pre>
<p>To prevent scrolling, we include this simple JavaScript:</p>
<pre>
<code data-language="javascript">
document.addEventListener(
    "touchstart",
    function() { return false; },
    false
);
</code>
</pre>
<h3 class="header-medium">Adaptive Liquid Layouts</h3>
<p>In our first release, we chose a single resolution to make game development straightforward, and settled on dimensions that worked on most displays and would still fit into the viewport on a Surface or iPad.</p>
<p>For mobile, we had to re-think our approach and come up with ways to make the games look as good on a small screen as they do on a large one. We couldn&#8217;t just scale the games, or simply float our assets in a liquid layout. We needed a hybrid approach, where our games both flex and scale.</p>
<h3>Making it Fit</h3>
<p>The first step was scaling the canvas. This provided a unique challenge, because mobile devices with higher pixels per inch (such as Windows Phone and iPhone 4+) automatically scale content to make it more readable. Through a series of tests we determined that:</p>
<ul>
<li>Windows Phone 7 and 8 (only tested on WVGA at the time of writing) scale content to 1.666x. Read more<br />
        <a href="http://blogs.msdn.com/b/iemobile/archive/2010/11/22/the-ie-mobile-viewport-on-windows-phone-7.aspx" target="_blank">here</a>, and <a href="http://blogs.msdn.com/b/iemobile/archive/2011/01/21/managing-the-browser-viewport-in-windows-phone-7.aspx" target="_blank">here</a></li>
<li>iPhone scales content to 2x. This can be determined by checking the CSS property window.devicePixelRatio, which is the number of actual pixels, divided by the number of device pixels or “dips”.</li>
</ul>
<p>This means that we have to counter-scale our content in order to fit it properly on each device. To do this, we multiplied the dimensions on most HTML elements (such as the container iframe) by the inverse of the scale factor(0.6 for WP, and the 1/window.devicePixelRatio for iPhone). <a href="http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html" target="_blank">Read more about devicePixelRatio.</a></p>
<pre>
    <code data-language="javascript">
var factor = 1;
if (iOS) {
    // devicePixelRatio evaluates to "2" on iPhone 4+
    factor = 1 / window.devicePixelRatio;
} else if (wp7 || wp8) {
    factor = 0.6;
}

var frame = document.createElement("iframe");
frame.width = 1024 * factor;
frame.height = 622 * factor;
    </code>
</pre>
<p>On our game canvas however, we want to see the pixels instead of scaling our game down, and having the device double it up. So we used CSS scaling instead. When you change the dimensions of an HTML Canvas via CSS, the contents are scaled, rather than just changing the viewport size and relying on the browser to recalculate. This gives us almost exactly a 1/1 pixel ratio on the screen, which looks great on a small, high resolution device.</p>
<pre>
    <code data-language="javascript">
var factor = 1;
if (iOS) {
    // devicePixelRatio evaluates to "2" on iPhone 4+
    factor = 1 / window.devicePixelRatio;
} else if (wp7 || wp8) {
    factor = 0.6;
}

var canvas = document.createElement("canvas");
canvas.style.width = canvas.width * factor;
canvas.style.height = canvas.height * factor;
    </code>
</pre>
<p>The resulting (unscaled) game size is passed into the game in the GameInfo class, and the game can render everything as usual.</p>
<pre>
    <code data-language="javascript">
// In game code
function startGame() {
    var btn = new createjs.Shape(btnGraphics);
    // Position on the bottom right
    btn.x = this.gameInfo.width - btn.width - 10;
    btn.y = this.gameInfo.height - btn.height - 10;
}
    </code>
</pre>
<h3>Reflowing the Games</h3>
<p>With our new viewport set up, we were still left with a few challenges:</p>
<p><strong>1. Content alignment</strong><br />
Since the games were developed with a single use-case in mind, when the canvas changes size, the positioning of assets needs adjusting.</p>
<p>Most of the time UI and game elements were already anchored to an edge or centered, but not always. It reminded us that we should be using edge alignment or percentage-based positioning wherever possible from the onset.</p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/asteroidsSize.jpg" /></p>
<p><strong>2. Content scaling</strong><br/><br />
Some reflowing wasn&#8217;t so simple. In Super Breakout, brick sprites were designed to fit exactly 13 columns in the standard viewport size. To support a smaller screen, we started by scaling everything down. Fortunately, the bitmaps rendered just fine at a smaller size, but on a small screen we were left with 13 incredibly small bricks.</p>
<p>This encouraged us to include a straightforward method in the developer SDK that determined what sort of resolution we were dealing with, so that content can adapt. Rather than provide something like a DPI, we opted for a simple mode: Low, Normal, and High resolution. This property is now exposed in the helpful GameInfo class of the Atari Arcade SDK.</p>
<pre>
    <code data-language='javascript'>
// On a tiny device, scale down
if (gameInfo.quality == GameLibs.GameInfo.QUALITY_LOW) {
    myBtn.scaleX = myBtn.scaleY = 0.5;

// On a high-resolution device, scale up
} else if (gameInfo.quality == GameLibs.GameInfo.QUALITY_HIGH) {
    myBtn.scaleX = myBtn.scaleY = 1;
}
    </code>
</pre>
<p>When games are on higher-resolution devices, images and UI elements are scaled up. In an extreme example, WXGA and 720p Windows Phones have almost double the resolution as their WVGA counterparts &#8211; so we can almost double the sprite size to have a comparable game.</p>
<p>In the new mobile version, we include only 10 columns, and the assets scale to fit the available space. Fortunately, EaselJS makes scaling intelligent and simple. You can scale individual assets, containers with multiple children, or even provide alternate image sources to swap out with in high resolution environments.</p>
<pre>
    <code data-language="javascript">
function startGame() {
    // In high-resolution, scale the entire HUD
    if (this.gameInfo.quality == GameLibs.GameInfo.QUALITY_HIGH) {
        this.gameHud.scaleX = this.gameHud.scaleY = 0.6;
    }
}
    </code>
</pre>
<h3>On-screen Controls</h3>
<p>When changing form factors, there&#8217;s always a risk that certain aspects won&#8217;t translate well.</p>
<p>One of our key concerns when we conceived our plan was the player&#8217;s hands. On a device like the Surface, only a small portion of the lower corners are obscured by the user&#8217;s hands when in touch mode. On a phone-sized device, that area grows considerably.</p>
<p>We can&#8217;t just scale down UI controls with the rest of the game &#8211; we need them large enough to give the user enough control. Our initial plan was to only roll out 3 games, the ones not requiring UI controls: Super Breakout, Pong, and Missile Command. However after some quick tests, we were convinced that Asteroids would work too.</p>
<p><strong>And it did!</strong> Controls needed to be scaled down about 60%, but the game is still playable and fun.</p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/asteroidsFinal.jpg" /></p>
<p>We hope to be able to provide the rest of the arcade and any new games submitted by developers, in the mobile site soon.</p>
<h3 class="header-medium">More and More Testing</h3>
<p>Device testing can be a pain. Simulators can get you halfway there, but there is no replacement for an actual device to test with. We have a formidable cache of devices that we use on a regular basis.</p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/deviceTable.jpg" /></p>
<p>But there is lots of cool things you can do to make debugging and testing easier:</p>
<ol>
<li>Compat testing in IE10 provides great testing of previous IE versions without an antiquated test machine.</li>
<li>Device spoofing in browsers allows a way to test user-agents and viewport sizes. Chrome and Safari have great<br />
        tools for this.</li>
</ol>
<p><img src="http://maxcdn.webappers.com/img/2013/05/useragent.png" alt="User Agent Settings in Webkit"></p>
<ol start="3">
<li>To test responsive interfaces, simply scale your browser window.</li>
<li>Remote debugging with <a href="http://people.apache.org/~pmuellr/weinre/docs/latest/Home.html" target="_blank">Wienre</a> provides awesome DOM inspection.</li>
<li>Remote debugging with iOS6 and Lion provides full web inspection just by plugging in your device. Simply enable the inspector in the iOS Safari preferences, and access it via the Safari &#8216;developer&#8217; menu on the desktop.</li>
<li>iOS 5 users still have a rudimentary console, which can be turned on in the iOS Safari preferences.</li>
<li>Run a webserver like <a href="http://www.mamp.info/" target="_blank">MAMP</a> or <a href="http://www.apachefriends.org/en/xampp.html" target="_blank">XAMPP</a>, and devices can access the development version over an internal network.</li>
<li>The new Test Harness HTML page that is included in the Atari Arcade SDK includes some options for spoofing mobile resolutions and touch interactions in the games. Have at &#8216;er!</li>
</ol>
<h3 class="header-medium">Addressing Performance</h3>
<p>As part of this project, we spent some quality time with Microsoft engineers and evangelists, which was incredibly insightful. Not only did we gain some awesome respect for the amazing team at Microsoft, but we learned  some invaluable tips, tricks, and best practices that we have rolled into the Atari site, the Atari Arcade SDK, and the next versions of the CreateJS suite.</p>
<p>Most of us develop on blazing fast quad (or more) core machines, with awesome GPUs and more horsepower than we need. For this phase of the Arcade, we had to take a hard look at performance, and ensure that the arcade could move forward onto lower powered devices, including the just-released ARM-based Microsoft Surface.</a></p>
<p>Here are some bite-sized tips we took away:</p>
<ol>
<li>Leave the DOM alone. JavaScript -> DOM communication is expensive. Even things like adding/removing audio from the DOM caused huge performance hits.</li>
<li>Reduce complexity and nesting in your DOM.</li>
<li>Learn to use CSS transforms instead of positioning properties like top and left. CSS transforms are hardware accelerated, and super fast. Position changes via CSS are really slow. Note that many browsers still use a prefixed transform, so the approach is more complex &#8211; but the result is worth it!</li>
</ol>
<pre>
    <code data-language="javascript">
// Old way
div.style.top = "100px";

// New way
var props = ["transform", "msTransform", "webkitTransform", "oTransform", "mozTransform"];
var found = false;
for (var i=0; i < props.length; i++) {
    if (props[i] in div.styles) {
        div.styles[props[i]] = "translateY(100px)";
        found = true;
        break;
    }
}
if (!found) {
    div.style.top = "100px";
}
    </code>
</pre>
<p>Fun fact: IE10 has both prefixed and unprefixed transforms, so you will only want to apply one of them if you are looking for an extra boost in performance.</p>
<ol start="4">
<li>Use CSS classes on elements instead of injecting javascript to manipulate styles.
<li>Pixel access on Canvas is expensive, since it needs to reach into the video buffer. Avoid it when possible. For this reason, EaselJS does not track mouseOver gestures unless you explicitly turn them on:
</ol>
<pre>
    <code data-language="javascript">
// Create a stage
var stage = new createjs.Stage(canvasElement);

// Enable the mouseOver with a frequency
// whic is the maximum number of checks per second.
stage.enableMouseOver(10);
    </code>
</pre>
<ol start="6">
<li>Touch events are really expensive. Avoid complex actions that result from touch input, and instead cache touch coordinates, and perform actions on the game tick, or using some form of invalidation.
</ol>
<p>And always, <strong>always</strong> test directly on target machines. Many of the above tips are indistinguishable on the desktop, or when simulated from the desktop. Once it's in your hands on a device, you'll really feel the changes.</p>
<h3 class="header-medium">What's Next?</h3>
<p>Atari hopes to open the door shortly to developers that want to build mobile games using the Atari Arcade SDK that can be submitted to the arcade. With this latest release of the SDK, all the the necessary hooks, methods, and testing environment are available to start building and testing mobile games today. Hopefully, the submission process will extend to mobile in the near future.</p>
<p>So check out the resources below, clone the <a href="http://github.com/AtariAdmin/AtariArcadeSDK" target="_blank">Atari Arcade GitHub repository</a>, and have fun!</p>
<h3 class="header-medium">Resources</h3>
<p>Pick up these awesome books. They are a few years old, but are incredibly helpful, and are required reading at gskinner.com for all developers and designers working with HTML.</p>
<ol>
<li><a href="http://www.amazon.com/gp/product/0596529309/ref=oh_details_o00_s00_i02" target="_blank">High Performance Web Sites</a></li>
<li><a href="http://www.amazon.com/gp/product/059680279X/ref=oh_details_o00_s00_i00" target="_blank">High Performance JavaScript</a></li>
<li><a href="http://www.amazon.com/gp/product/0596522304/ref=oh_details_o00_s00_i01" target="_blank">Even Faster Websites</a></li>
</ol>
<p>Here's some additional resources and references for game development in HTML5.</p>
<ul>
<li>CreateJS<br />
		<a href="http://createjs.com" target="_blank">Learn more about CreateJS</a><br />
		<a href="http://community.createjs.com" target="_blank">Community Forum and Feedback</a><br />
		<a href="http://github.com/CreateJS" target="_blank">CreateJS on GitHub</a>
	</li>
<li>More HTML5 and Flash goodness on <a href="http://gskinner.com" target="_blank">gskinner.com</a> and the <a href="http://gskinner.com/blog" target="_blank">gBlog</a></li>
<li><a href="http://channel9.msdn.com/Events/Build/2012/3-132" target="_blank">50 performance tricks</a> from Microsoft //Build/ 2012</li>
<li><a href="http://msdn.microsoft.com/en-us/library/ie/hh673549(v=vs.85).aspx" target="_blank">Internet Explorer 10 Guide for Developers</a></li>
<li><a href="http://html5labs.interoperabilitybridges.com/" target="_blank">HTML5 Labs</a>
<li><a href="http://www.w3.org/standards/webdesign/" target="_blank">W3C</a></li>
<li><a href="http://ie.microsoft.com/testdrive/HTML5/CompatInspector/" target="_blank">Removing legacy IE Markup with Compat Inspector</a></li>
<li><a href="http://msdn.microsoft.com/en-us/magazine/hh394148.aspx" target="_blank">Feature Detection for HTML5</a></li>
<li><a href="http://blogs.msdn.com/b/ie/" target="_blank">IE Blog</a></li>
<li><a href="http://msdn.microsoft.com/en-us/IE" target="_blank">MSDN IE DevCenter</a></li>
<li><a href="http://www.ietestdrive.com/" target="_blank">IETestDrive</a></li>
<li><a href="http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx" target="_blank">Windows 8 / Internet Explorer 10 : Touch Friendly</a></li>
<li><a href="http://blogs.msdn.com/b/ie/archive/2011/08/31/browsing-without-plug-ins.aspx" target="_blank">Windows 8 / Internet Explorer 10 : Plug-in Free</a></li>
<li><a href="http://ie.microsoft.com/testdrive/Browser/SitePinningInWin8/" target="_blank">Windows 8 / Internet Explorer 10 : Pinning Sites</a></li>
</ul>
<h3 class="header-medium">About the Authors</h3>
<p>Lanny McNie, Michael Graves, and Chris Caldwell are the senior staff of <a href="http://gskinner.com" target="_blank">gskinner.com</a>, an agency focused on building bleeding edge interactive and creative, and bringing value to platform owners, developers, and end users alike. We produce success stories that showcase and enhance technology platforms. We recently worked with Atari to bring re-imagine the <a href="http://atari.com/arcade/" target="_blank">Atari Arcade</a> using webstandards like HTML5, CSS3, and websockets.</p>

<!-- Similar Posts took 0.410 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=6JAlMjQaQ9U:ceAnzAlStAA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=6JAlMjQaQ9U:ceAnzAlStAA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=6JAlMjQaQ9U:ceAnzAlStAA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=6JAlMjQaQ9U:ceAnzAlStAA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=6JAlMjQaQ9U:ceAnzAlStAA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=6JAlMjQaQ9U:ceAnzAlStAA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=6JAlMjQaQ9U:ceAnzAlStAA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=6JAlMjQaQ9U:ceAnzAlStAA:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=6JAlMjQaQ9U:ceAnzAlStAA:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=6JAlMjQaQ9U:ceAnzAlStAA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/6JAlMjQaQ9U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/22/how-to-mobilize-atari-arcade-in-html5/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/22/how-to-mobilize-atari-arcade-in-html5/</feedburner:origLink></item>
		<item>
		<title>Easy Responsive Tabs jQuery Plugin for Web &amp; Mobile</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/4cZMfBywPT8/</link>
		<comments>http://www.webappers.com/2013/05/21/easy-responsive-tabs-jquery-plugin-for-web-mobile/#comments</comments>
		<pubDate>Tue, 21 May 2013 08:01:06 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[MIT License]]></category>
		<category><![CDATA[Menu]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8617</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=392779129" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=340744705" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>Easy responsive tabs is a lightweight jQuery plugin which optimizes normal horizontal or vertical tabs to accordion on multi devices like: web, tablets, Mobile (IPad &#38; IPhone). This plugin adapts the screen size and changes its form accordingly.
It supports Horizontal / Vertical Tabs to Accordion. Tabs and accordion are created entirely with jQuery. It supports [...]<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=2075283456" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=603103717" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p><a title="Easy Responsive Tabs" href="https://github.com/samsono/Easy-Responsive-Tabs-to-Accordion" target="_blank">Easy responsive tabs</a> is<strong> a lightweight jQuery plugin which optimizes normal horizontal or vertical tabs to accordion on multi devices like: web, tablets, Mobile (IPad &amp; IPhone)</strong>. This plugin adapts the screen size and changes its form accordingly.</p>
<p>It supports Horizontal / Vertical Tabs to Accordion. Tabs and accordion are created entirely with jQuery. It supports multiple sets of tabs on same page. It has been tested on IE7+, Chrome, Firefox, Safari and Opera. It is released under MIT License.</p>
<p style="text-align: center;"><a title="Easy Responsive Tabs" href="https://github.com/samsono/Easy-Responsive-Tabs-to-Accordion" target="_blank"><img class="size-full wp-image-8618 aligncenter" title="responsive" src="http://maxcdn.webappers.com/img/2013/05/responsive.jpg" alt="responsive" width="580" height="251" /></a></p>
<blockquote><p>Requirements: jQuery Framework<br />
Demo: <a title="demo" rel="nofollow" href="http://webtrendset.com/demo/easy-responsive-tabs/Index.html" target="_blank">http://webtrendset.com/demo/easy-responsive-tabs/Index.html</a><br />
License: MIT License</p></blockquote>

<!-- Similar Posts took 0.333 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=4cZMfBywPT8:wumUabU3wes:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=4cZMfBywPT8:wumUabU3wes:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=4cZMfBywPT8:wumUabU3wes:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=4cZMfBywPT8:wumUabU3wes:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=4cZMfBywPT8:wumUabU3wes:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=4cZMfBywPT8:wumUabU3wes:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=4cZMfBywPT8:wumUabU3wes:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=4cZMfBywPT8:wumUabU3wes:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=4cZMfBywPT8:wumUabU3wes:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=4cZMfBywPT8:wumUabU3wes:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/4cZMfBywPT8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/21/easy-responsive-tabs-jquery-plugin-for-web-mobile/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/21/easy-responsive-tabs-jquery-plugin-for-web-mobile/</feedburner:origLink></item>
		<item>
		<title>Code Playground that You can Host on Your Server</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/k_Pqtqqi00M/</link>
		<comments>http://www.webappers.com/2013/05/21/code-playground-that-you-can-host-on-your-server/#comments</comments>
		<pubDate>Tue, 21 May 2013 07:52:17 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[MIT License]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8613</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1298009371" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1961029208" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>Editr is a HTML, CSS and JavaScript playground that you can host on your server. it is based on ACE Editor. It&#8217;s super easy to setup. It supports multiple instances on one page. Configurations are available via JS object or HTML attributes. Editr is licensed under MIT License.

Requirements: JavaScript Framework
Demo: http://idered.pl/editr/
License: MIT License

<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=750939732" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=374774193" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p><a title="Editr" href="http://idered.pl/editr/" target="_blank">Editr</a> is <strong>a HTML, CSS and JavaScript playground that you can host on your server</strong>. it is based on ACE Editor. It&#8217;s super easy to setup. It supports multiple instances on one page. Configurations are available via JS object or HTML attributes. Editr is licensed under MIT License.</p>
<p style="text-align: center;"><a title="Editr" href="http://idered.pl/editr/" target="_blank"><img class="size-full wp-image-8614 aligncenter" title="editr" src="http://maxcdn.webappers.com/img/2013/05/editr.jpg" alt="editr" width="580" height="396" /></a></p>
<blockquote><p>Requirements: JavaScript Framework<br />
Demo: <a title="demo" rel="nofollow" href="http://idered.pl/editr/" target="_blank">http://idered.pl/editr/</a><br />
License: MIT License</p></blockquote>

<!-- Similar Posts took 0.335 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=k_Pqtqqi00M:PoTHoWoPlRg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=k_Pqtqqi00M:PoTHoWoPlRg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=k_Pqtqqi00M:PoTHoWoPlRg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=k_Pqtqqi00M:PoTHoWoPlRg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=k_Pqtqqi00M:PoTHoWoPlRg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=k_Pqtqqi00M:PoTHoWoPlRg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=k_Pqtqqi00M:PoTHoWoPlRg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=k_Pqtqqi00M:PoTHoWoPlRg:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=k_Pqtqqi00M:PoTHoWoPlRg:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=k_Pqtqqi00M:PoTHoWoPlRg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/k_Pqtqqi00M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/21/code-playground-that-you-can-host-on-your-server/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/21/code-playground-that-you-can-host-on-your-server/</feedburner:origLink></item>
		<item>
		<title>35 Creative Twitter Covers for Web Designers</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/vXglMuUf0vU/</link>
		<comments>http://www.webappers.com/2013/05/20/35-creative-twitter-covers-for-web-designers/#comments</comments>
		<pubDate>Mon, 20 May 2013 14:33:30 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[Information]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8541</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=974129356" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=2089964107" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>Twitter has adopted a Facebook Timeline-like cover display for main profile pages, opening up a new avenue for visual creativity. Ranked as one of the ten most-visited websites and three most used social networks, twitter is definitely changing the face of social media by actively engaging with the targeted audience.
TwitrCovers collects the best Twitter Covers [...]<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1948523136" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436918&c=1478568524" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p>Twitter has adopted a Facebook Timeline-like cover display for main profile pages, opening up a new avenue for visual creativity. Ranked as one of the ten most-visited websites and three most used social networks, twitter is definitely changing the face of social media by actively engaging with the targeted audience.</p>
<p><a title="Twitter Covers" href="http://www.twitrcovers.com/" target="_blank">TwitrCovers</a> collects the best Twitter Covers around the world. There are different categories you can choose from, for example, Abstract, Art, Nature, Photos, Places and etc. Here we have selected the following 35 Creative Twitter Covers for Web Designers.</p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/paint-brain/" target="_blank">Paint Brain</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/paint-brain/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-001.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/smoking-pipe/" target="_blank">Smoking Pipe</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/smoking-pipe/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-002.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/programming-code/" target="_blank">Programming Code</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/programming-code/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-003.jpg" alt="" /></a> <span id="more-8541"></span></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/test-pattern/" target="_blank">Test Pattern</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/test-pattern/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-004.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/window-panes-2/" target="_blank">Window Panes</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/window-panes-2/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-005.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/cityscapes-architecture-2/" target="_blank">Cityscapes Architecture</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/cityscapes-architecture-2/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-006.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/ubuntu/" target="_blank">Ubuntu</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/ubuntu/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-007.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/minimalistic-humor/" target="_blank">Minimalistic Humor</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/minimalistic-humor/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-008.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/nerd-school/" target="_blank">Nerd School</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/nerd-school/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-009.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/landscapes-beach-2/" target="_blank">Landscapes Beach</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/landscapes-beach-2/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-010.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/sea/" target="_blank">Sea</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/sea/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-011.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/abstract-violet/" target="_blank">Abstract Violet</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/abstract-violet/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-012.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/grass-summer/" target="_blank">Grass Summer</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/grass-summer/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-013.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/sepia/" target="_blank">Sepia</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/sepia/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-014.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/batman-flying/" target="_blank">Batman Flying</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/batman-flying/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-015.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/sunset/" target="_blank">Sunset</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/sunset/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-016.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/leaves-2/" target="_blank">Leaves</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/leaves-2/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-017.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/glasses/" target="_blank">Glasses</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/glasses/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-018.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/danboard-sneakers/" target="_blank">Danboard Sneakers</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/danboard-sneakers/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-019.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/atari/" target="_blank">Atari</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/atari/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-020.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/1940-new-york-city/" target="_blank">1940 New York City</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/1940-new-york-city/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-021.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/abstract-light/" target="_blank">Abstract Light</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/abstract-light/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-022.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/albert-einstein/" target="_blank">Albert Einstein</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/albert-einstein/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-023.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/japan-2/" target="_blank">Japan</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/japan-2/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-024.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/artwork/" target="_blank">Artwork</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/artwork/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-025.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/comics/" target="_blank">Comics</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/comics/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-026.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/snow-2/" target="_blank">Snow</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/snow-2/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-027.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/clouds-nature/" target="_blank">Clouds Nature</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/clouds-nature/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-028.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/drowning/" target="_blank">Drowning</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/drowning/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-029.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/ubuntu/" target="_blank">Ubuntu</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/ubuntu/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-030.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/nature-desert/" target="_blank">Nature Desert</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/nature-desert/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-031.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/star-2/" target="_blank">Star</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/star-2/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-032.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/thinking/" target="_blank">Thinking</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/thinking/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-033.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/water/" target="_blank">Water</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/water/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-034.jpg" alt="" /></a></p>
<h3><a href="http://www.twitrcovers.com/twitter-covers/desert/" target="_blank">Desert</a></h3>
<p><a href="http://www.twitrcovers.com/twitter-covers/desert/" target="_blank"><img src="http://maxcdn.webappers.com/img/2013/05/Twitter-Covers-035.jpg" alt="" /></a></p>

<!-- Similar Posts took 0.478 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=vXglMuUf0vU:RYjAdZm3Lcs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=vXglMuUf0vU:RYjAdZm3Lcs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=vXglMuUf0vU:RYjAdZm3Lcs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=vXglMuUf0vU:RYjAdZm3Lcs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=vXglMuUf0vU:RYjAdZm3Lcs:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=vXglMuUf0vU:RYjAdZm3Lcs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=vXglMuUf0vU:RYjAdZm3Lcs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=vXglMuUf0vU:RYjAdZm3Lcs:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=vXglMuUf0vU:RYjAdZm3Lcs:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=vXglMuUf0vU:RYjAdZm3Lcs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/vXglMuUf0vU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/20/35-creative-twitter-covers-for-web-designers/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/20/35-creative-twitter-covers-for-web-designers/</feedburner:origLink></item>
		<item>
		<title>Two.js: 2D Drawing API for Modern Browsers</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/c3SZ0WewUZE/</link>
		<comments>http://www.webappers.com/2013/05/20/two-js-2d-drawing-api-for-modern-browsers/#comments</comments>
		<pubDate>Mon, 20 May 2013 07:01:56 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[License Free]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8604</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=1857037785" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=1082053032" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>Two.js is a two-dimensional drawing api geared towards modern web browsers. It is renderer agnostic enabling the same api to draw in multiple contexts: svg, canvas, and webgl. Two.js aims to make the creation and animation of flat shapes easier and more concise.
Two.js has a built in animation loop. It is simple in nature and [...]<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=1699331604" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=1100566149" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p><a title="Two.js" href="http://jonobr1.github.io/two.js/" target="_blank">Two.js</a> is <strong>a two-dimensional drawing api geared towards modern web browsers</strong>. It is renderer agnostic enabling the same api to draw in multiple contexts: svg, canvas, and webgl. Two.js aims to make the creation and animation of flat shapes easier and more concise.</p>
<p>Two.js has a built in animation loop. It is simple in nature and can be automated or paired with another animation library. Two.js features a Scalable Vector Graphics Interpreter. This means developers and designers alike can create SVG elements in commercial applications like Adobe Illustrator and bring them into your two.js scene.</p>
<p style="text-align: center;"><a title="Two.js" href="http://jonobr1.github.io/two.js/" target="_blank"><img class="size-full wp-image-8605 aligncenter" title="two-js" src="http://maxcdn.webappers.com/img/2013/05/two-js.jpg" alt="two-js" width="580" height="423" /></a></p>
<blockquote><p>Requirements: JavaScript Framework<br />
Demo: <a title="demo" rel="nofollow" href="http://jonobr1.github.io/two.js/" target="_blank">http://jonobr1.github.io/two.js/</a><br />
License: License Free</p></blockquote>

<!-- Similar Posts took 0.346 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=c3SZ0WewUZE:MgohdBdQnRg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=c3SZ0WewUZE:MgohdBdQnRg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=c3SZ0WewUZE:MgohdBdQnRg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=c3SZ0WewUZE:MgohdBdQnRg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=c3SZ0WewUZE:MgohdBdQnRg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=c3SZ0WewUZE:MgohdBdQnRg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=c3SZ0WewUZE:MgohdBdQnRg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=c3SZ0WewUZE:MgohdBdQnRg:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=c3SZ0WewUZE:MgohdBdQnRg:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=c3SZ0WewUZE:MgohdBdQnRg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/c3SZ0WewUZE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/20/two-js-2d-drawing-api-for-modern-browsers/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/20/two-js-2d-drawing-api-for-modern-browsers/</feedburner:origLink></item>
		<item>
		<title>Super Smooth CSS Transitions for jQuery</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/-QXFP8CFuCQ/</link>
		<comments>http://www.webappers.com/2013/05/17/super-smooth-css-transitions-for-jquery/#comments</comments>
		<pubDate>Fri, 17 May 2013 07:10:04 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[MIT License]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8598</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=1239569119" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=361318439" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>Transit is a super-smooth CSS transitions &#38; transformations for jQuery. You can make transition on any CSS property. They will happen much smoother than if you were to use jQuery&#8217;s default .animate(). You can easily translate, rotate, scale, skew and etc.
Transit degrades older browsers by simply not doing the transformations (rotate, scale, etc) while still [...]<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=1841642501" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=250882951" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p><a title="Transit" href="http://ricostacruz.com/jquery.transit/" target="_blank">Transit</a> is <strong>a super-smooth CSS transitions &amp; transformations for jQuery</strong>. You can make transition on any CSS property. They will happen much smoother than if you were to use jQuery&#8217;s default .animate(). You can easily translate, rotate, scale, skew and etc.</p>
<p>Transit degrades older browsers by simply not doing the transformations (rotate, scale, etc) while still doing standard CSS (opacity, marginLeft, etc) without any animation. Delays and durations will be ignored. It is released under MIT License.</p>
<p style="text-align: center;"><a title="Transit" href="http://ricostacruz.com/jquery.transit/" target="_blank"><img class="size-full wp-image-8599 aligncenter" title="transit" src="http://maxcdn.webappers.com/img/2013/05/transit.jpg" alt="transit" width="580" height="391" /></a></p>
<blockquote><p>Requirements: jQuery Framework<br />
Demo: <a title="demo" rel="nofollow" href="http://ricostacruz.com/jquery.transit/" target="_blank">http://ricostacruz.com/jquery.transit/</a><br />
License: MIT License</p></blockquote>

<!-- Similar Posts took 0.330 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=-QXFP8CFuCQ:_tV3qX8dVsA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=-QXFP8CFuCQ:_tV3qX8dVsA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=-QXFP8CFuCQ:_tV3qX8dVsA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=-QXFP8CFuCQ:_tV3qX8dVsA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=-QXFP8CFuCQ:_tV3qX8dVsA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=-QXFP8CFuCQ:_tV3qX8dVsA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=-QXFP8CFuCQ:_tV3qX8dVsA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=-QXFP8CFuCQ:_tV3qX8dVsA:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=-QXFP8CFuCQ:_tV3qX8dVsA:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=-QXFP8CFuCQ:_tV3qX8dVsA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/-QXFP8CFuCQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/17/super-smooth-css-transitions-for-jquery/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/17/super-smooth-css-transitions-for-jquery/</feedburner:origLink></item>
		<item>
		<title>Building Instagram-like Photo Sharing App with HTML5</title>
		<link>http://feedproxy.google.com/~r/Webappers/~3/lJn6D-PDnlk/</link>
		<comments>http://www.webappers.com/2013/05/17/building-instagram-like-photo-sharing-app-with-html5/#comments</comments>
		<pubDate>Fri, 17 May 2013 07:01:44 +0000</pubDate>
		<dc:creator>Ray Cheung</dc:creator>
				<category><![CDATA[Information]]></category>


		<guid isPermaLink="false">http://www.webappers.com/?p=8585</guid>
		<description><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=506105377" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=704833882" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>When I started out on this app I was only really just interested in seeing if the web platform had really evolved to a point where an app like the hugely popular Instagram app could be built using just HTML, JavaScript and CSS.  As it turns out we can in fact do exactly that. [...]<h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=146173688" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&k=f0f765a4a2b8013472eb1ae2074fd0ed&a=1369436919&c=213155877" border="0" alt="" /></a></p><p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p><p>When I started out on this app I was only really just interested in seeing if the web platform had really evolved to a point where an app like the hugely popular <a href="http://instagram.com/" target="_blank">Instagram</a> app could be built using just HTML, JavaScript and CSS.  As it turns out we can in fact do exactly that.  This article walks you through the technologies that make this possible and shows how it is entirely feasible today to build interoperable web applications that provide a great user experience no matter what brand of browser the user is running.</p>
<p>If you happen to be one of the two or so people who have not heard about Instagram then you might be pleased to hear that it is a hugely popular photo sharing and social networking service that allows you to take pictures, apply interesting digital filters on them and share them with the world to see.  The service got so popular that it was <a href="http://finance.fortune.cnn.com/2012/04/09/breaking-facebook-buying-instagram-for-1-billion/" target="_blank">acquired by Facebook</a> for a bag full of cash and stock in April of 2012.</p>
<p><a href="http://blogorama.nerdworks.in/arbit/InstaFuzz/" target="_blank">InstaFuzz</a> is the name of the app I put together and while I don’t expect to be acquired by Facebook or anybody else for a billion green it does however make the case that an app such as this one can be built using only standards compliant web technologies such as Canvas, File API, Drag/Drop, Web Workers, ES5 and CSS3 andstill manage to runwell on modern browsers such as <a href="http://ie.microsoft.com/testdrive/" target="_blank">Internet Explorer 10</a>,Google Chrome and Firefox.  And you could easily use the code to <a href="http://build.windowsstore.com/#fbid=lGmIUjKhWNG" target="_blank">build a Windows Store app</a> too.</p>
<h3>About the app</h3>
<p>If you’d like to take a look at the app, then here’s where it is hosted at:</p>
<p><a href="http://blogorama.nerdworks.in/arbit/InstaFuzz/" target="_blank">http://blogorama.nerdworks.in/arbit/InstaFuzz/</a></p>
<p>As soon as you load it up, you’re presented with a screen that looks like this:</p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/wimage001.png" /></p>
<p>The idea is that you can load up a photograph into the app either by clicking on the big red “Add” button on the bottom left hand corner or drag and drop an image file into the blackish/blue area on the right. Once you do that you get something that looks like this: <span id="more-8585"></span></p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/wimage003.png" /></p>
<p>You’ll note that a list of digital filters are listed on the left of the screen showing a preview of what the image would look like if you were to apply the said filter.  Applying a filter is a simple matter of clicking on one of the filter previews on the left.  Here’s what it looks like after applying the “Weighted Grayscale” filter followed by a “Motion Blur”.  As you can tell filters are additive – as you keep clicking on filters, they are applied on top of what was applied earlier:</p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/wimage004.png" /></p>
<p>Let’s next take a look at how the UI layout has been put together.</p>
<h3>UI Layout</h3>
<p>The HTML markup is actually so little that I can actually reproduce the contents of the BODY tag in its entirety here (excluding the SCRIPT includes):</p>
<pre>&lt;header&gt;
&lt;divid="title"&gt;InstaFuzz&lt;/div&gt;
&lt;/header&gt;
&lt;sectionid="container"&gt;
&lt;canvasid="picture"width="650"height="565"&gt;&lt;/canvas&gt;
&lt;divid="controls"&gt;
&lt;divid="filters-list"&gt;&lt;/div&gt;
&lt;buttonid="loadImage"&gt;Add&lt;/button&gt;
&lt;inputtype="file"id="fileUpload"
style="display: none;"
accept="image/gif, image/jpeg, image/png"/&gt;
&lt;/div&gt;
&lt;/section&gt;

&lt;!-- Handlebar template for a filter UI button --&gt;
&lt;scriptid="filter-template"type="text/x-handlebars-template"&gt;
&lt;divclass="filter-container"data-filter-id="{{filterId}}"&gt;
&lt;divclass="filter-name"&gt;{{filterName}}&lt;/div&gt;
&lt;canvasclass="filter-preview"width="128"height="128"&gt;&lt;/canvas&gt;
&lt;/div&gt;
&lt;/script&gt;</pre>
<p>There’s nothing much going on here.  Pretty much everything should be standard fare.  I will however draw attention to the fact that I am using the <a href="http://handlebarsjs.com/" target="_blank">Handlebars</a> JavaScript templating system here for rendering the markup for the list of filters on the left of the screen.  The template markup is declared in the HTML file (the SCRIPT tag in the snippet shown above) and then used from JavaScript.  The template markup is then bound to a JavaScript object that supplies the values for handlebars expressions such as {{filterId}}and {{filterName}}.  Here’s the relevant piece of JS from the app with a bit of DOM manipulation help from jQuery:</p>
<pre>var templHtml = $("#filter-template").html(),
template = Handlebars.compile(templHtml),
filtersList = $("#filters-list");
var context = {
filterName: filter.name,
filterId: index
};

filtersList.append(template(context));</pre>
<p>As you can tell from the HTML markup all the filter preview boxes feature a CANVAS tag as does the big box on the right where the final output is rendered.  We’ll go into a bit more detail later on in the article as to how canvas technology is used to achieve these effects.<br />
The app also usesCSS3 @font-face fonts to render the text in the header and the “Add” button.  The fonts have been taken from the excellent <a href="http://www.fontsquirrel.com/" target="_blank">Font Squirrel</a> site and here’s what the declaration looks like:</p>
<pre>@font-face {
font-family: 'TizaRegular';
src: url('fonts/tiza/tiza-webfont.eot');
src: url('fonts/tiza/tiza-webfont.eot?#iefix')
format('embedded-opentype'),
url('fonts/tiza/tiza-webfont.woff')format('woff'),
url('fonts/tiza/tiza-webfont.ttf')format('truetype'),
url('fonts/tiza/tiza-webfont.svg#TizaRegular')format('svg');
font-weight: normal;
font-style: normal;
}</pre>
<p>This directive causes the user agent to embed the font in the page and make it available under the name assigned to the font-family rule which in this case is “TizaRegular”.  After this we can assign this font to any CSS font-family rule like how we normally do.  In InstaFuzz I use the following rule to assign the font to the header element:</p>
<pre>font-family: TizaRegular, Cambria, Cochin, Georgia, Times,
"Times New Roman", serif;</pre>
<p>You might also have noticed that there is a subtle shadow being dropped on the page by the container element.</p>
<p><img src="http://maxcdn.webappers.com/img/2013/05/wimage005.png" /></p>
<p>This is made possible using the <a href="http://msdn.microsoft.com/library/ie/jj127322.aspx" target="_blank">CSS3 box-shadow</a> rule and here’s how it’s used in InstaFuzz.</p>
<pre>-moz-box-shadow: 1px0px4px#000000, -1px-1px4px#000000;
-webkit-box-shadow: 1px0px4px#000000, -1px-1px4px#000000;
box-shadow: 1px0px4px#000000, -1px-1px4px#000000;</pre>
<p>This causes the browser to render a shadow around the relevant element.  Each comma separated section in the value specifies the following attributes of the shadow:</p>
<p>1.	Horizontal offset<br />
2.	Vertical offset<br />
3.	Spread distance – positive values have the effect of softening the shadow<br />
4.	Shadow color</p>
<p>One can specify multiple shadow values separated by comma as in fact has been done above.  Note that I’ve also specified the shadow using vendor prefix syntax for Firefox and Chrome/Safari using the moz and webkit prefixes.  This causes the shadow to continue to work in versions of those browsers where support for this capability was provided using the vendor prefixed version of the rule.  Note that the W3C version of the rule – box-shadow – is specified last.  This is done deliberately to ensure that in case the browser supports both the forms then only the W3C behavior is actually applied to the page.</p>
<p>One often finds that web developers either fail to include vendor prefixed version of a given CSS3 rule for all the browsers that support that rule and/or fail to include the W3C version as well.  Often developers just put the webkit version of the rule ignoring other browsers and the W3C standard version.  This causes two problems – [1] poor user experience for users who are using non-webkit browsers and [2] it ends up resulting in webkit becoming a de-facto standard for the web.  Ideally we want W3C to be driving the future of the web and not one specific browser implementation.  So here are some things to remember when playing with experimental implementations of CSS features:</p>
<p>1.	Use vendor prefixed versions of CSS rules by all means but remember to specify the rule for all supported browsers and not just the one that you happen to be testing the page in (if you’re using <a href="http://www.microsoft.com/visualstudio/eng/downloads" target="_blank">Visual Studio</a> to edit your CSS then you might be interested in the supremely excellent extension for Visual Studio called <a href="http://visualstudiogallery.msdn.microsoft.com/6ed4c78f-a23e-49ad-b5fd-369af0c2107f" target="_blank">Web Essentials</a> that makes the job of managing vendor prefixes about as simple as it can possibly get).<br />
2.	Remember to specify the W3C version of the rule as well.<br />
3.	Remember to order the occurrence of the rules so that the W3C version shows up last.  This is to allow clients that support both the vendor prefixed version and the W3C version to use the W3C specified semantics for the rule.</p>
<h3>Drag/Drop</h3>
<p>One of the things that InstaFuzz supports is the ability to drag and drop image files directly on to the big blackish/blue box.  Support for this is enabled by handling the “drop” event on the CANVAS element.  When a file is dropped onto an HTML element the browser fires the “drop” event on that element and passes in a dataTransfer object which contains a files property that contains a reference to the list of files that were dropped.  Here’s how this is handled in the app (“picture” is the ID of the CANVAS element on the page):</p>
<pre>var pic = $("#picture");
pic.bind("drop", function (e) {
suppressEvent(e);
var files = e.originalEvent.dataTransfer.files;
// more code here to open the file
});
pic.bind("dragover", suppressEvent).bind("dragenter", suppressEvent);
functionsuppressEvent(e) {
e.stopPropagation();
e.preventDefault();
}</pre>
<p>The files property is a collection of File objects that can then subsequently be used with the File API to access the file contents (covered in the next section).  We also handle the dragover and dragenter events and basically prevent those events from propagating to the browser thereby preventing the browser from handling the file drop.  IE for instance might unload the current page and attempt to open the file directly otherwise.</p>
<h3>File API</h3>
<p>Once the file has been dropped, the app attempts to open the image and render it in the canvas.  It does this by using the <a href="http://msdn.microsoft.com/en-us/library/ie/hh673542(v=vs.85).aspx" target="_blank">File API</a>.  The File API is a W3C specification that allows web apps to programmatically access files from the local file system in a secure fashion.  In InstaFuzz we use the FileReader object to read the file contents as a data URL string like so using the readAsDataURLmethod:</p>
<pre>var reader = newFileReader();
reader.onloadend = function (e2) {
drawImageToCanvas(e2.target.result);
};
reader.readAsDataURL(files[0]);</pre>
<p>Here, files is the collection of File objects retrieved from the function handling the “drop” event on the CANVAS element. Since we are interested only in a single file we simply pick the first file from the collection and ignore the rest if there are any.  The actual file contents are loaded asynchronously and once the load completes, the onloadend event is fired where we get the file contents as a data URL which we then subsequently draw on to the canvas.</p>
<h3>Rendering the filters</h3>
<p>Now the core functionality here is of course the application of the filters.  In order to be able to apply the filter to the image we need a way to access the individual pixels from the image.  And before we can access the pixels we need to have actually rendered the image on to our canvas.  So let’s first take a look at the code that renders the image that the user picked on to the canvas element.</p>
<h3>Rendering images on to the canvas</h3>
<p>The canvas element supports the rendering of Image objects via the drawImage method.  To load up the image file in an Image instance, InstaFuzz uses the following utility routine:</p>
<pre>App.Namespace.define("InstaFuzz.Utils", {
loadImage: function (url, complete) {
varimg = new Image();
img.src = url;
img.onload = function () {
complete(img);
        };
    }
});</pre>
<p>This allows the app to load up image objects from a URL using code such as the following:</p>
<pre>functiondrawImageToCanvas(url) {
InstaFuzz.Utils.loadImage(url, function (img) {
// save reference to source image
sourceImage = img;

mainRenderer.clearCanvas();
mainRenderer.renderImage(img);

// load image filter previews
loadPreviews(img);
    });
}</pre>
<p>Here, mainRenderer is an instance created from the FilterRenderer constructor function defined in filter-renderer.js.  The app uses FilterRenderer objects to manage canvas elements – both in the preview pane as well as the main canvas element on the right.  The renderImage method on the FilterRenderer has been defined like so:</p>
<pre>FilterRenderer.prototype.renderImage = function (img) {
varimageWidth = img.width;
varimageHeight = img.height;
varcanvasWidth = this.size.width;
varcanvasHeight = this.size.height;
var width, height;

if ((imageWidth / imageHeight) &gt;= (canvasWidth / canvasHeight)) {
width = canvasWidth;
height = (imageHeight * canvasWidth / imageWidth);
    } else {
width = (imageWidth * canvasHeight / imageHeight);
height = canvasHeight;
    }

var x = (canvasWidth - width) / 2;
var y = (canvasHeight - height) / 2;
this.context.drawImage(img, x, y, width, height);
};</pre>
<p>That might seem like a lot of code but all it does ultimately is to figure out the best way to render the image in the available screen area considering the aspect ratio of the image.  The key piece of code that actually renders the image on the canvas occurs on the last line of the method.  The context member refers to the 2D context acquired from the canvas object by calling itsgetContext method.</p>
<h3>Fetching pixels from the canvas</h3>
<p>Now that the image has been rendered we will need access to the individual pixels in order to apply all the different filters that are available.  This is easily acquired by calling getImageData on the canvas’s context object.  Here’s how InstaFuzz calls this from instafuzz.js.</p>
<pre>varimageData = renderer.context.getImageData(
    0, 0,
renderer.size.width,
renderer.size.height);</pre>
<p>The object returned by getImageData provides access to the individual pixels via its data property which in turn is an array like object that contains a collection of byte values where each value represents the color rendered for a single channel of a single pixel.  Each pixel is represented using 4 bytes that specify values for the red, green, blue and alpha channels.  It also has a lengthproperty that returns the length of the buffer.  If you have a 2D co-ordinate you can easily transform that into an index into this array using code such as the following.  The color intensity values of each channel ranges from 0 through 255.  Here’s the utility function from filters.js that accepts as input an image data object along with 2D coordinates for the pixel the caller is interested in and returns an object containing the color values:</p>
<pre>functiongetPixel(imageData, x, y) {
var data = imageData.data, index = 0;

// normalize x and y and compute index
    x = (x &lt; 0) ? (imageData.width + x) : x;
    y = (y &lt; 0) ? (imageData.height + y) : y;
index = (x + y * imageData.width) * 4;

return {
r: data[index],
g: data[index + 1],
b: data[index + 2]
    };
}</pre>
<h3>Applying the filters</h3>
<p>Now that we have access to the individual pixels, applying the filter is fairly straightforward.  Here, for instance is the function that applies a weighted grayscale filter on the image.  It simply picks intensities from the red, green and blue channels and sums them up after applying a multiplication factor on each channel and then assigns the result for all 3 channels.</p>
<pre>// "Weighted Grayscale" filter
Filters.addFilter({
name: "Weighted Grayscale",
apply: function (imageData) {
var w = imageData.width, h = imageData.height;
var data = imageData.data;
var index;
for (var y = 0; y &lt; h; ++y) {
for (var x = 0; x &lt; w; ++x) {
index = (x + y * imageData.width) * 4;
var luminance = parseInt((data[index + 0] * 0.3) +
                                         (data[index + 1] + 0.59) +
                                         (data[index + 2] * 0.11));
	data[index + 0] = data[index + 1] =
data[index + 2] = luminance;
            }

Filters.notifyProgress(imageData, x, y, this);
        }

Filters.notifyProgress(imageData, w, h, this);
    }
});</pre>
<p>Once the filter has been applied we can have that reflected on the canvas by calling the putImageData method passing in the modified image data object.  While the weighted grayscale filter is fairly simple most of the other filters use an image processing technique known as convolution.  The code for all the filters is available in filters.js and the convolution filters were ported from the C code available <a href="http://lodev.org/cgtutor/filtering.html" target="_blank">here</a>.</p>
<h3>Web Workers</h3>
<p>As you might imagine doing all this number crunching to apply the filters can potentially take a long time to complete.  The motion blur filter for instance uses a 9&#215;9 filter matrix for computing the new value for every single pixel and is in fact the most CPU intensive filter among them all.  If we were to do all this computation on the UI thread of the browser then the app would essentially freeze every time a filter was being applied.  To provide a responsive user experience the app delegates the core image processing tasks to a background script using the support for W3C <a href="http://msdn.microsoft.com/en-us/library/ie/hh673568(v=vs.85).aspx" target="_blank">Web Workers</a> in modern browsers.</p>
<p>Web workers allow web applications to have scripts run in a background task that executes in parallel along with the UI thread.  Communication between the worker and the UI thread is accomplished by passing messages using the postMessage API.  On both ends (i.e. the UI thread and the worker) this manifests as an event notification that you can handle.  You can only pass “data” between workers and the UI thread, i.e., you cannot pass anything that has to do with the user interface  – you cannot for instance, pass DOM elements to the worker from the UI thread.</p>
<p>In InstaFuzz the worker is implemented in the file filter-worker.js.  All it does in the worker is handle the onmessage event and apply a filter and then pass the results back via postMessage.  As it turns out, even though we cannot pass DOM elements (which means we cannot just hand a CANVAS element to the worker to have the filter applied) we can in fact pass the image data object as returned by the getImageDatamethod that we discussed earlier. Here’s the filter processing code from filter-worker.js:</p>
<pre>importScripts("ns.js", "filters.js");

var tag = null;
onmessage = function (e) {
var opt = e.data;
varimageData = opt.imageData;
var filter;

tag = opt.tag;
filter = InstaFuzz.Filters.getFilter(opt.filterKey);

var start = Date.now();
filter.apply(imageData);
var end = Date.now();

postMessage({
type: "image",
imageData: imageData,
filterId: filter.id,
tag: tag,
timeTaken: end - start
    });
}</pre>
<p>The first line pulls in some script files that the worker depends on by calling <a href="http://msdn.microsoft.com/library/ie/hh772875.aspx" target="_blank">importScripts</a>.  This is similar to including a JavaScript file in a HTML document using the SCRIPT tag.  Then we set up a handler for the onmessage event in response to which we simply apply the filter in question and pass the result back to the UI thread by calling postMessage.  Simple enough!<br />
The code that initializes the worker is in instafuzz.js and looks like this:</p>
<pre>var worker = new Worker("js/filter-worker.js");</pre>
<p>Not much is it?  When a message is sent by the worker to the UI thread we handle it by specifying a handler for the onmessage event on the worker object.  Here’s how this is done in InstaFuzz:</p>
<pre>worker.onmessage = function (e) {
varisPreview = e.data.tag;
switch (e.data.type) {
case"image":
if (isPreview) {
previewRenderers[e.data.filterId].
context.putImageData(
e.data.imageData, 0, 0);
            } else {
mainRenderer.context.putImageData(
e.data.imageData, 0, 0);
            }

break;
// more code here
    }
};</pre>
<p>The code should be fairly self-explanatory.  It simply picks the image data object sent by the worker and applies it to the relevant canvas’s context object causing the modified image to be rendered on screen.  Scheduling a filter for conversion with the worker is equally simple.  Here’s the routine that performs this function in InstaFuzz:</p>
<pre>functionscheduleFilter(filterId,
renderer,
img, isPreview,
resetRender) {
if (resetRender) {
renderer.clearCanvas();
renderer.renderImage(img);
    }

varimageData = renderer.context.getImageData(
        0, 0,
renderer.size.width,
renderer.size.height);

worker.postMessage({
imageData: imageData,
width: imageData.width,
height: imageData.height,
filterKey: filterId,
tag: isPreview
    });
}</pre>
<h3>Wrapping it up</h3>
<p>The source for InstaFuzz is available for download <a href="http://sdrv.ms/11110mf" target="_blank">here</a>.  We saw that fairly intricate user experiences are possible today with HTML5 technologies such as Canvas, Drag/Drop, File API and Web Workers.  Support for all of these technologies is quite good in pretty much all modern browsers.  One thing that we did not address here is the question of making the app compatible with older browsers.  That, truth be told, is a non-trivial but necessary task that I will hopefully be able to talk about in a future article.</p>
<p>This article is part of the HTML5 tech series from the Internet Explorer team. <a href="http://www.modern.ie/en-US/virtualization-tools" target="_blank">Try-out</a> the concepts in this article with three months of free BrowserStack cross-browser testing @ <a href="http://modern.IE" target="_blank">http://modern.IE</a></p>
<h3>About the Author</h3>
<p>Rajasekharan Vengalil is a self-proclaimed nerd working for a company called <a href="http://www.microsoft.com/en-us/default.aspx" target="_blank">Microsoft</a>. He is part of their Development and Platform Evangelism team which basically means that he gets to learn all about interesting new nerdy stuff that comes out of Microsoft and then talk about it with people (like building an app in HTML5. He thinks he&#8217;s really lucky to be paid for doing what he&#8217;d anyway be doing for free!</p>

<!-- Similar Posts took 0.406 ms --><h3>Sponsors</h3><p><a href="http://www.webiconset.com/?utm_source=WebAppers&utm_medium=cpc&utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Webappers?a=lJn6D-PDnlk:1-qHoarVpVY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lJn6D-PDnlk:1-qHoarVpVY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lJn6D-PDnlk:1-qHoarVpVY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lJn6D-PDnlk:1-qHoarVpVY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lJn6D-PDnlk:1-qHoarVpVY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lJn6D-PDnlk:1-qHoarVpVY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lJn6D-PDnlk:1-qHoarVpVY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lJn6D-PDnlk:1-qHoarVpVY:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lJn6D-PDnlk:1-qHoarVpVY:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lJn6D-PDnlk:1-qHoarVpVY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Webappers/~4/lJn6D-PDnlk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.webappers.com/2013/05/17/building-instagram-like-photo-sharing-app-with-html5/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.webappers.com/2013/05/17/building-instagram-like-photo-sharing-app-with-html5/</feedburner:origLink></item>
	</channel>
</rss><!--
This site's performance optimized by W3 Total Cache. Dramatically improve the speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk (enchanced)
Content Delivery Network via maxcdn.webappers.com

Served from: ps11300.dreamhostps.com @ 2013-05-24 16:08:39 -->
