<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Tutorialzine</title>
	
	<link>http://tutorialzine.com</link>
	<description>Web Development Tutorials &amp; Resources</description>
	<lastBuildDate>Thu, 16 May 2013 15:03:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Tutorialzine" /><feedburner:info uri="tutorialzine" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The Best Free Books, Videos, Tutorials and More for Learning jQuery</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/AWy0FFoP4N4/</link>
		<comments>http://tutorialzine.com/2013/05/the-best-free-books-videos-tutorials-and-more-for-learning-jquery/#comments</comments>
		<pubDate>Thu, 16 May 2013 15:03:07 +0000</pubDate>
		<dc:creator>Martin Angelov</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=3124</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/05/the-best-free-books-videos-tutorials-and-more-for-learning-jquery/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/learning_jquery-620x340.jpg" class="attachment-tzmedium" alt="Learning jQuery" /></a></div> In this article, you will find a list of resources that I wish were around when I was starting out with jQuery and which I would recommend to every beginner.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/05/the-best-free-books-videos-tutorials-and-more-for-learning-jquery/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/learning_jquery-620x340.jpg" class="attachment-tzmedium" alt="Learning jQuery" /></a></div> <p>jQuery is undoubtedly the most popular JavaScript library on the web today. It is <a href="http://trends.builtwith.com/javascript/jQuery" target="_blank">used by 70%</a> of the top websites and is becoming a defacto standard in web development. If you are looking for a programming job, knowing the library is a big plus.</p>
<p>Things have progressed as well in terms of the quality and availability of teaching material. In other words, now is the best time to learn about web development! In this article, you will find a list of resources that I wish were around when I was starting out with jQuery and which I would recommend to every beginner.</p>
<h3>First, Meet the jQuery Family</h3>
<p>jQuery is a library that makes it easy to work with the <a href="http://en.wikipedia.org/wiki/Document_Object_Model" target="_blank">DOM</a>, listen for events, animate elements and issue AJAX requests among other things. However, do you know that the jQuery project actually supports three libraries which bare the name jQuery? These are:</p>
<ol>
<li><a href="http://jquery.com/" target="_blank">The jQuery library</a>. This is the library that people usually refer to when they say jQuery. This is also what the resources in this article are about. The other two libraries build upon it, with specific use cases in mind. There are two versions of jQuery as of this writing: 1.9.1 and 2.0. Version 2.0 drops support for older browsers like IE 6, 7 and 8, so I strongly suggest you download and use version 1.9.1 which works everywhere.</li>
<li><a href="http://jquerymobile.com/" target="_blank">jQuery Mobile</a> is a lightweight framework for building mobile web apps with HTML5. It lets you build ajax-driven and touch-friendly interfaces with toolbars, buttons, listviews and more, that will look and work consistently across mobile devices. This is a library that I can recommend learning after you get the basics of jQuery, as it builds upon it. Here is <a href="http://tutorialzine.com/2011/08/jquery-mobile-product-website/" target="_blank">one of our tutorials</a> to get you started.</li>
<li><a href="http://jqueryui.com/">jQuery UI</a>. This is a collection of widgets like date pickers, dialogs, progress bars, effects and more aimed at interactive web applications. I feel that this library is losing mindshare as developers are flocking to more modern frameworks, which is why I would recommend learning <a href="http://twitter.github.io/bootstrap/" target="_blank">Twitter Bootstrap</a> instead.</li>
</ol>
<div id="attachment_3127" class="wp-caption alignnone" style="width: 630px"><img class="size-full wp-image-3127" alt="The jQuery Family" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-1.jpg" width="620" height="400" /><p class="wp-caption-text">The jQuery Family</p></div>
<p>So now that you know a bit more about the jQuery family, where do you start?</p>
<h3>The First Steps</h3>
<p>There has been a remarkable increase in the number and quality of free resources available for web developers in recent years. This is especially true for jQuery. Here is what you should start with:</p>
<ul>
<li><a href="http://learn.jquery.com/javascript-101/" target="_blank">JavaScript 101</a> is a good introductory article to JavaScript from the jQuery site. This is where you should begin if you aren&#8217;t familiar with the language.  You can then continue with some of the free JS books included in the next chapter.</li>
<li><a href="http://learn.jquery.com/about-jquery/how-jquery-works/" target="_blank">The jQuery Getting Started Guide</a> is a good first step for the beginner. It explains basics like how you should include jQuery in your page, and how to write your first script.</li>
<li><a href="http://try.jquery.com/" target="_blank">Try jQuery</a> is a very good interactive course with videos and code challenges that you can take for free.</li>
</ul>
<div id="attachment_3128" class="wp-caption alignnone" style="width: 630px"><a href="http://try.jquery.com/" target="_blank"><img class="size-full wp-image-3128" alt="Try jQuery" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-2.jpg" width="620" height="400" /></a><p class="wp-caption-text">Try jQuery</p></div>
<p>After you&#8217;ve whetted your appetite, you can read some of the books in the next chapter.</p>
<h3>Free eBooks</h3>
<p>Tutorials and blog posts are good to learn specific techniques but they aren&#8217;t much use if you are entirely new at something. This is what books are best at &#8211; they give you a complete and systematic overview of a technology, with examples and plenty of detail.</p>
<p>Franky you can&#8217;t learn jQuery without first knowing JavaScript, so here are a few books to get you started:</p>
<ul>
<li><a href="http://eloquentjavascript.net/" target="_blank">Eloquent JavaScript</a> is a book that doesn&#8217;t only teach you JavaScript, but also the basics of programming. It is a great read for those who don&#8217;t have much experience with writing code.</li>
<li><a href="https://developer.mozilla.org/en-US/docs/JavaScript/Guide" target="_blank">Mozilla Developer Network&#8217;s JavaScript Guide</a> is another good and succinct overview of the language.</li>
<li><a href="http://www.javascriptenlightenment.com/" target="_blank">JavaScript Enlightenment</a> is a book that covers advanced concepts like closures, prototypes, complex values, inheritance and more. It is intended to be a short and digestible summary of the language.</li>
<li><a href="http://domenlightenment.com/" target="_blank">Dom Enlightenment</a> is from the same author, and gives you a deep understanding of the relationship between JS and the DOM. The examples will show you the powerful functionality jQuery uses behind the scenes to make your life easier.</li>
<li><a href="http://singlepageappbook.com/single-page.html" target="_blank">Single Page Web Apps in Depth</a> is a book that teaches you how to make your application feel almost native. You will learn about implementing collections, models and views in JS, synchronizing them with your backend, and writing maintainable code.</li>
<li><a href="http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/" target="_blank">Learning JavaScript Design Patterns</a> is a book that explores applying well-known design patterns in the software development world to JavaScript applications.</li>
<li><a href="http://addyosmani.com/largescalejavascript/" target="_blank">Patterns for Large-Scale JavaScript Applications</a> is a more complex book that focuses specifically on organizing large code bases. Suitable only for experienced JS developers.</li>
</ul>
<div id="attachment_3129" class="wp-caption alignnone" style="width: 630px"><a href="http://eloquentjavascript.net/" target="_blank"><img class="size-full wp-image-3129" alt="Eloquent JavaScript" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-3.jpg" width="620" height="400" /></a><p class="wp-caption-text">Eloquent JavaScript</p></div>
<p>And of course, here are some great free jQuery books:</p>
<ul>
<li><a href="http://jqfundamentals.com/" target="_blank">jQuery Fundamentals</a> is a must-read book for every jQuery beginner. It explains in depth all the major jQuery features, and has easy to understand examples that you can run directly in your browser.</li>
<li><a href="http://www.syncfusion.com/resources/techportal/ebooks/jquery" target="_blank">jQuery Succinctly</a> is a book that has been written to express the concepts essential to intermediate and advanced jQuery development. This is the perfect next step after the jQuery Fundamentals book above.</li>
<li>jQuery has a very good <a href="http://api.jquery.com/" target="_blank">API documentation</a>, full of example code, which is a book on its own right.</li>
</ul>
<div id="attachment_3130" class="wp-caption alignnone" style="width: 630px"><a href="http://jqfundamentals.com/" target="_blank"><img class="size-full wp-image-3130" alt="jQuery Fundamentals" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-4.jpg" width="620" height="400" /></a><p class="wp-caption-text">jQuery Fundamentals</p></div>
<p>[Hey, check our brand new <a href="http://tutorialzine.com/books/jquery-trickshots/" target="_blank">jQuery Trickshots</a> book, where you can learn 100 epic tips and tricks for working with jQuery!]</p>
<h3>Courses and training</h3>
<p>Courses also go a long way to explaining new concepts. They may include professionally edited videos with exercises and example code. Here are some of the best that are available for free:</p>
<ul>
<li><a href="http://try.jquery.com/" target="_blank">Try jQuery</a>. I already mentioned it, but it is included here again for completeness. This course includes videos, example code and excersises.</li>
<li><a href="http://learn.appendto.com/lessons" target="_blank">Lessons by appendTo()</a> contains free video lessons on JavaScript, jQuery, events, methods and selectors.</li>
<li><a href="http://learn.jquery.com/" target="_blank">Learn jQuery</a> is the official learning portal for the library. Here you will find tutorials and articles suitable for beginners.</li>
<li><a href="http://www.percederberg.net/software/jsi/" target="_blank">JavaScript interactive</a> is a console-based crash course that involves writing code in your browser and passing challenges.</li>
<li><a href="http://learnjquery.tutsplus.com/" target="_blank">Learn jQuery in 30 Days</a> is a free newsletter course by tutsplus. After subscribing you will receive a video lesson in your email every day for 30 days.</li>
<li><a href="http://ejohn.org/apps/learn/" target="_blank">Learning Advanced JavaScript</a> is a series of tips by jQuery&#8217;s creator John Resig.</li>
</ul>
<div id="attachment_3131" class="wp-caption alignnone" style="width: 630px"><a href="http://learnjquery.tutsplus.com/" target="_blank"><img class="size-full wp-image-3131" alt="Learn jQuery in 30 Days" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-5.jpg" width="620" height="400" /></a><p class="wp-caption-text">Learn jQuery in 30 Days</p></div>
<h3>Videos</h3>
<p>Videos are a good and lazy way to learn about new programming topics. The presenter spoon-feeds you with tasty web development knowledge while you are comfortably sitting on your couch. What&#8217;s not to like!</p>
<p>Here are some of the best jQuery videos that you can watch right now for free:</p>
<ul>
<li><a href="http://net.tutsplus.com/articles/web-roundups/jquery-for-absolute-beginners-video-series/" target="_blank">jQuery for absolute beginners</a> by Nettuts is getting rather old, but you can still learn some of the fundamentals of the library</li>
<li><a href="http://www.youtube.com/playlist?list=PLQVUXNECA8bM182MyebrJVabrIy-XE9gI" target="_blank">Learning jQuery</a> is a huge YouTube playlist with a series of screencasts that covers everything from the ready event to submitting forms with ajax.</li>
<li><a href="http://ontwik.com/category/jquery/" target="_blank">Ontwik&#8217;s jQuery Videos</a> is a growing collection of high-quality videos and lectures on many topics given on conferences around the world (seems to be down in the moment).</li>
<li><a href="http://www.youtube.com/user/jsconfeu" target="_blank">JSConf</a> hosts a collection of videos from the popular JavaScript conference.</li>
<li><a href="http://vimeo.com/fronteers/videos" target="_blank">Fronteers videos</a> this is the video collection of the Fronteers front-end conference. Some of their videos are in Dutch, but there are plenty of interesting English lectures.</li>
</ul>
<div id="attachment_3132" class="wp-caption alignnone" style="width: 630px"><img class="size-full wp-image-3132" alt="Ontwik jQuery Conference Videos" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-6.jpg" width="620" height="400" /><p class="wp-caption-text">Ontwik jQuery Conference Videos</p></div>
<h3>Presentations</h3>
<p>Presentations are like videos, but more concise and without a person standing in the way. Here are some of the most popular jQuery presentations:</p>
<ul>
<li><a href="http://www.slideshare.net/simon/learning-jquery-in-30-minutes" target="_blank">jQuery in 30 minutes</a> is a bit old but still interesting for beginners.</li>
<li><a href="http://www.slideshare.net/AddyOsmani/jquery-proven-performance-tips-tricks" target="_blank">jQuery proven performance tips and tricks</a> is a great collection of tips for optimizing your jQuery code.</li>
<li><a href="http://www.slideshare.net/paul.irish/perfcompression" target="_blank">jQuery Anti-Patterns</a> is a presentation that explains how to properly organize your code and stay clear from anti-patterns that will make your application unmaintainable in the long run.</li>
<li><a href="http://www.slideshare.net/rmurphey/using-objects-to-organize-your-jquery-code" target="_blank">Using objects to organize your code</a> is another presentation that is focused on code maintainability.</li>
<li><a href="http://www.slideshare.net/ryanlsmith/jquery-its-a-library-not-a-framework" target="_blank">jQuery: It&#8217;s a library, not a framework</a> reminds you that although jQuery gives you power, it doesn&#8217;t keep your code organized, which can pretty soon lead to a spaghetti code mess.</li>
<li><a href="http://ejohn.org/apps/workshop/adv-talk/" target="_blank">Things you might not know about jQuery</a> was written for jQuery 1.4, but is also applicable to the latest versions of the library.</li>
</ul>
<div id="attachment_3133" class="wp-caption alignnone" style="width: 630px"><a href="http://www.slideshare.net/ryanlsmith/jquery-its-a-library-not-a-framework" target="_blank"><img class="size-full wp-image-3133" alt="jQuery: It's a library, not a framework" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-7.jpg" width="620" height="400" /></a><p class="wp-caption-text">jQuery: It&#8217;s a library, not a framework</p></div>
<h3>Tutorials and Blogs</h3>
<p>Of course, tutorials have their place, and are a good choice once you&#8217;ve mastered the basics. Here are the best places to find jQuery tutorials:</p>
<ul>
<li><a href="http://tutorialzine.com/tag/jquery/" target="_blank">Our own tutorial collection</a> covers lots of jQuery goodness. We do all kinds of interesting things with the library and show advanced techniques. (Also all our PSDs are available for download from our free to join <a href="http://tutorialzine.com/members/" target="_blank">Member Area</a>).</li>
<li>Nettuts has a <a href="http://net.tutsplus.com/category/tutorials/?tag=jquery" target="_blank">large collection</a> of jQuery tutorials. They&#8217;ve pretty much moved away from jQuery for their new stuff which is unfortunate.</li>
<li><a href="http://jquery-howto.blogspot.com/" target="_blank">jQuery Howto</a> is one of the oldest jQuery blogs. They have covered pretty much everything about the library.</li>
<li><a href="http://jqueryfordesigners.com/" target="_blank">jQuery For Designers</a> used to be a very popular tutorial website which unfortunately hasn&#8217;t been updated for a couple of years. Anyway the scripts there are useful even today (with the ocasional fix for jQuery 1.9).</li>
<li><a href="http://badassjs.com/" target="_blank">Badass JS</a> is a blog that presents awesome developments in the JavaScript world. Although not a tutorial site, the posts there often lead to in depth technical articles and interesting libraries.</li>
<li><a href="http://dailyjs.com/" target="_blank">DailyJS</a> is another JavaScript/jQuery blog. You can find lots of new plugins here, and it is updated very often.</li>
</ul>
<div id="attachment_3135" class="wp-caption alignnone" style="width: 630px"><a href="http://tutorialzine.com/tag/jquery/" target="_blank"><img class="size-full wp-image-3135" alt="jQuery Tutorials from Tutorialzine" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustrations-9.jpg" width="620" height="400" /></a><p class="wp-caption-text">jQuery Tutorials from Tutorialzine</p></div>
<h3>Misc</h3>
<p>And here are some projects and sites that didn&#8217;t fit anywhere, but I think that they are worth a look:</p>
<ul>
<li>Sorting the jQuery questions on stackoverflow by votes reveals lots of interesting topics that will help you become a better developer. <a href="http://stackoverflow.com/questions/tagged/jquery?sort=votes&amp;pagesize=15" target="_blank">See for yourself</a>.</li>
<li><a href="http://bonsaiden.github.io/JavaScript-Garden/" target="_blank">JavaScript Garden</a> is a growing collection of documentation about the most quirky parts of JavaScript.</li>
<li><a href="http://jqapi.com/" target="_blank">jQAPI</a> is an alternative jQuery documentation browser. It has a pretty interface that in my opinion is easier to browse than the official api site.</li>
<li><a href="http://oscarotero.com/jquery/" target="_blank">jQuery Cheatsheet</a> is a quick and neatly organized reference of the entire jQuery API. Highly bookmarkable.</li>
<li><a href="http://www.keyframesandcode.com/resources/javascript/deconstructed/jquery/" target="_blank">jQuery Deconstructed</a> is a very interesting experiment which visually analyzes and presents the source code of the entire library. Unfortunately it hasn&#8217;t been updated for newer version of jQuery.</li>
<li><a href="http://javascriptweekly.com/" target="_blank">JavaScript weekly</a> is a weekly newsletter. You will get interesting JavaScript links in your email every Friday.</li>
<li><a href="http://www.unheap.com/" target="_blank">Unheap</a> is a pretty and tidy collection of jQuery plugins. Everything is neatly organized in categories with links to demos and previews.</li>
<li><a href="http://plugins.jquery.com/" target="_blank">jQuery Plugins</a> is the official jQuery plugin site, where you can find lots of plugins organized in categories.</li>
<li><a href="http://microjs.com/" target="_blank">Microjs</a> is a collection of minimal JavaScript libraries (no jQuery plugins here) who are fully featured and lightweight. Only those of small filesize are included here.</li>
<li><a href="http://www.jsdb.io/?sort=trending" target="_blank">JSDB</a> is another collection of useful libraries and plugins, but it is not limited in regards to file size. Sorting the list by popularity reveals lots of life-saving libraries.</li>
<li><a href="http://cdnjs.com/" target="_blank">CDNJS</a> is a very fast CDN that hosts lots of libraries. You can include jQuery and plugins from their servers, which can speed up your site (and save you some traffic).</li>
</ul>
<div id="attachment_3134" class="wp-caption alignnone" style="width: 630px"><a href="http://www.unheap.com/" target="_blank"><img class="size-full wp-image-3134" alt="Unheap - jQuery plugins and Libraries" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/illustration-8.jpg" width="620" height="400" /></a><p class="wp-caption-text">Unheap &#8211; jQuery plugins and Libraries</p></div>
<h3>Happy Learning!</h3>
<p>Know of good learning resources that are not included in this list? Share them in the comment section!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=AWy0FFoP4N4:nRJl4KIQY6M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=AWy0FFoP4N4:nRJl4KIQY6M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=AWy0FFoP4N4:nRJl4KIQY6M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=AWy0FFoP4N4:nRJl4KIQY6M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=AWy0FFoP4N4:nRJl4KIQY6M:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=AWy0FFoP4N4:nRJl4KIQY6M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=AWy0FFoP4N4:nRJl4KIQY6M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=AWy0FFoP4N4:nRJl4KIQY6M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=AWy0FFoP4N4:nRJl4KIQY6M:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=AWy0FFoP4N4:nRJl4KIQY6M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/AWy0FFoP4N4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/05/the-best-free-books-videos-tutorials-and-more-for-learning-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/05/the-best-free-books-videos-tutorials-and-more-for-learning-jquery/</feedburner:origLink></item>
		<item>
		<title>Mini AJAX File Upload Form</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/PjZS0sgjIE4/</link>
		<comments>http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/#comments</comments>
		<pubDate>Thu, 09 May 2013 14:21:17 +0000</pubDate>
		<dc:creator>Martin Angelov</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Form]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Upload]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=3115</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/ajax-file-upload-form-620x340.jpg" class="attachment-tzmedium" alt="Mini Ajax File Upload Form" /></a></div> In this tutorial we are going to create an AJAX file upload form, that will let visitors upload files from their browsers with drag/drop or by selecting them individually.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/ajax-file-upload-form-620x340.jpg" class="attachment-tzmedium" alt="Mini Ajax File Upload Form" /></a></div> <p>In this tutorial we are going to create an AJAX file upload form, that will let visitors upload files from their browsers with drag/drop or by selecting them individually. For the purpose, we will combine the powerful <a href="https://github.com/blueimp/jQuery-File-Upload" target="_blank">jQuery File Upload plugin</a> with the neat <a href="http://anthonyterrien.com/knob/" target="_blank">jQuery Knob</a> to present a slick CSS3/JS driven interface.</p>
<h3>The HTML</h3>
<p>As usual, we will start off with a basic HTML5 document:</p>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;html&gt;

	&lt;head&gt;
		&lt;meta charset="utf-8"/&gt;
		&lt;title&gt;Mini Ajax File Upload Form&lt;/title&gt;

		&lt;!-- Google web fonts --&gt;
		&lt;link href="http://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700" rel='stylesheet' /&gt;

		&lt;!-- The main CSS file --&gt;
		&lt;link href="assets/css/style.css" rel="stylesheet" /&gt;
	&lt;/head&gt;

	&lt;body&gt;

		&lt;form id="upload" method="post" action="upload.php" enctype="multipart/form-data"&gt;
			&lt;div id="drop"&gt;
				Drop Here

				&lt;a&gt;Browse&lt;/a&gt;
				&lt;input type="file" name="upl" multiple /&gt;
			&lt;/div&gt;

			&lt;ul&gt;
				&lt;!-- The file uploads will be shown here --&gt;
			&lt;/ul&gt;

		&lt;/form&gt;

		&lt;!-- JavaScript Includes --&gt;
		&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"&gt;&lt;/script&gt;
		&lt;script src="assets/js/jquery.knob.js"&gt;&lt;/script&gt;

		&lt;!-- jQuery File Upload Dependencies --&gt;
		&lt;script src="assets/js/jquery.ui.widget.js"&gt;&lt;/script&gt;
		&lt;script src="assets/js/jquery.iframe-transport.js"&gt;&lt;/script&gt;
		&lt;script src="assets/js/jquery.fileupload.js"&gt;&lt;/script&gt;

		&lt;!-- Our main JS file --&gt;
		&lt;script src="assets/js/script.js"&gt;&lt;/script&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>In the head of the document, I have included two fonts from <a href="http://www.google.com/webfonts" target="_blank">Google Webfonts</a>, and before the closing &lt;/body&gt;tag you can see a number of JavaScript libraries. These are the jQuery library, the <a href="http://anthonyterrien.com/knob/" target="_blank">jQuery Knob plugin</a> and the dependencies for the <a href="https://github.com/blueimp/jQuery-File-Upload" target="_blank">jQuery File Upload plugin</a>.</p>
<p>The main element on the page is the <b>#upload</b> form. Inside it is the <b>#drop</b> div (which accepts drag/drop uploads) and an unordered list. This list will hold a li item for each of the transferred files. You can see the markup generated for a file upload below:</p>
<pre class="brush:html">&lt;li class="working"&gt;
	&lt;input type="text" value="0" data-width="48" data-height="48" data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /&gt;
	&lt;p&gt;Sunset.jpg &lt;i&gt;145 KB&lt;/i&gt;&lt;/p&gt;
	&lt;span&gt;&lt;/span&gt;
&lt;/li&gt;</pre>
<p>The input item in the snippet above is hidden with CSS. Its only purpose is to initialize the jQuery Knob plugin, which will output a pretty canvas-based knob control. The input has a number of <b>data-*</b> attributes that modify the appearance of the knob. Later, when we listen for the file upload progress, we will update the value of this input which will cause the knob to get redrawn. The span holds the icon to the right; this can either be a check mark or a red cross.</p>
<div id="attachment_3117" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2013/05/mini-ajax-file-upload-form/"><img class="size-full wp-image-3117" alt="Mini AJAX File Upload Form" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/05/mini-jquery-file-upload-form.jpg" width="620" height="700" /></a><p class="wp-caption-text">Mini AJAX File Upload Form</p></div>
<h3>The jQuery Code</h3>
<p>There are two ways a visitor can upload files with this form:</p>
<ul>
<li>By dropping them on the <b>#drop</b> div (in all browsers except IE);</li>
<li>By clicking the browse button. This will simulate a click on the hidden file input, which will bring the system&#8217;s file browsing window. Notice that the file input has the <b>multiple</b> parameter set, which will allow more than one file to be selected at a given time (the files will still be uploaded individually though!).</li>
</ul>
<p>The default behavior of the plugin is to place the files in a queue, but we will make the files upload automatically when they are dropped/selected, which will make the experience more straightforward. You can see the JS below:</p>
<h4>assets/js/script.js</h4>
<pre class="brush:js">$(function(){

    var ul = $('#upload ul');

    $('#drop a').click(function(){
        // Simulate a click on the file input button
        // to show the file browser dialog
        $(this).parent().find('input').click();
    });

    // Initialize the jQuery File Upload plugin
    $('#upload').fileupload({

        // This element will accept file drag/drop uploading
        dropZone: $('#drop'),

        // This function is called when a file is added to the queue;
        // either via the browse button, or via drag/drop:
        add: function (e, data) {

            var tpl = $('&lt;li class="working"&gt;&lt;input type="text" value="0" data-width="48" data-height="48"'+
                ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /&gt;&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;');

            // Append the file name and file size
            tpl.find('p').text(data.files[0].name)
                         .append('&lt;i&gt;' + formatFileSize(data.files[0].size) + '&lt;/i&gt;');

            // Add the HTML to the UL element
            data.context = tpl.appendTo(ul);

            // Initialize the knob plugin
            tpl.find('input').knob();

            // Listen for clicks on the cancel icon
            tpl.find('span').click(function(){

                if(tpl.hasClass('working')){
                    jqXHR.abort();
                }

                tpl.fadeOut(function(){
                    tpl.remove();
                });

            });

            // Automatically upload the file once it is added to the queue
            var jqXHR = data.submit();
        },

        progress: function(e, data){

            // Calculate the completion percentage of the upload
            var progress = parseInt(data.loaded / data.total * 100, 10);

            // Update the hidden input field and trigger a change
            // so that the jQuery knob plugin knows to update the dial
            data.context.find('input').val(progress).change();

            if(progress == 100){
                data.context.removeClass('working');
            }
        },

        fail:function(e, data){
            // Something has gone wrong!
            data.context.addClass('error');
        }

    });

    // Prevent the default action when a file is dropped on the window
    $(document).on('drop dragover', function (e) {
        e.preventDefault();
    });

    // Helper function that formats the file sizes
    function formatFileSize(bytes) {
        if (typeof bytes !== 'number') {
            return '';
        }

        if (bytes &gt;= 1000000000) {
            return (bytes / 1000000000).toFixed(2) + ' GB';
        }

        if (bytes &gt;= 1000000) {
            return (bytes / 1000000).toFixed(2) + ' MB';
        }

        return (bytes / 1000).toFixed(2) + ' KB';
    }

});</pre>
<p>The jQuery File Upload library comes with its own jQuery UI-powered design that you can use straight away. However, because we need an entirely custom interface, we will make use of the <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin" target="_blank">basic version of the plugin</a>, which doesn&#8217;t include an interface. To make it work, we are passing a number of configuration options / callbacks. In the code above, these are:</p>
<ul>
<li><b>dropZone</b> &#8211; This property holds the jQuery selector of the element which will act as a drop target. Files dropped upon it will be added to the upload queue.</li>
<li><b>add</b> &#8211; This callback function is called whenever a file is added to the queue. Inside it, we create the HTML markup that will represent the file, add it to the UL and trigger the <code>data.submit()</code> method. This will cause the added file to be directly uploaded without waiting.</li>
<li><b>progress</b> &#8211; This callback is executed by the plugin every 100ms (configurable). The second argument (the data attribute) holds the file size and how many bytes have been transferred. This allows us to calculate a percentage, and subsequently update the hidden input element, which in turn updates the knob.</li>
<li><b>fail</b> &#8211; This callback function is executed if there is a problem with your PHP script. This would most likely mean that upload.php is missing or throwing some kind of error (use your web browser&#8217;s inspector to debug any potential problems here).</li>
</ul>
<blockquote class="note"><p>See a full list of all the available configuration options in <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Options" target="_blank">this page</a>. I have included more resources about the plugin in the <i>Resources and further reading</i> section at the end of this tutorial.</p></blockquote>
<p>The <code>data.context</code> property is preserved between the method calls of the plugin. This way we know which LI item we should update in the progress and fail events.</p>
<h3>The PHP Script</h3>
<p>jQuery File Upload also comes with a powerful PHP script for handling file uploads that you can put on your server, but for this tutorial, we will build our own. The file uploads sent by the plugin are practically the same as a regular form upload &#8211; you can access information about the uploads through the $_FILES array:</p>
<pre class="brush:php">&lt;?php

// A list of permitted file extensions
$allowed = array('png', 'jpg', 'gif','zip');

if(isset($_FILES['upl']) &amp;&amp; $_FILES['upl']['error'] == 0){

	$extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);

	if(!in_array(strtolower($extension), $allowed)){
		echo '{"status":"error"}';
		exit;
	}

	if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
		echo '{"status":"success"}';
		exit;
	}
}

echo '{"status":"error"}';
exit;</pre>
<p>As I mentioned further back, although we may select a bunch of files at once, they are uploaded one by one. This makes it even easier to handle them with our PHP script. Currently, the files are simply moved to the uploads folder, but you can extend it by adding authentication or creating records in your database.</p>
<h3>We&#8217;re done!</h3>
<p>I hope that you find this ajax file upload form useful! If you have suggestions or questions, leave them in our comment area.</p>
<h3>Resources and further reading</h3>
<ul>
<li><a href="http://anthonyterrien.com/knob/" target="_blank">The jQuery Knob plugin home page</a></li>
<li><a href="https://github.com/blueimp/jQuery-File-Upload" target="_blank">The jQuery File Upload plugin github page</a></li>
<li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki/API" target="_blank">jQuery File Upload API</a></li>
<li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Options" target="_blank">jQuery File Upload options</a></li>
<li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Frequently-Asked-Questions" target="_blank">jQuery File Upload FAQ</a></li>
<li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Drop-zone-effects" target="_blank">How to enhance the drop zone with drag-over effects</a></li>
<li><a href="http://dribbble.com/shots/920904-Drag-2-Upload-Widget" target="_blank">Dribbble shot that this tutorial&#8217;s design was inspired by</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=PjZS0sgjIE4:9k_MbkmVN38:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=PjZS0sgjIE4:9k_MbkmVN38:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=PjZS0sgjIE4:9k_MbkmVN38:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=PjZS0sgjIE4:9k_MbkmVN38:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=PjZS0sgjIE4:9k_MbkmVN38:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=PjZS0sgjIE4:9k_MbkmVN38:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=PjZS0sgjIE4:9k_MbkmVN38:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=PjZS0sgjIE4:9k_MbkmVN38:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=PjZS0sgjIE4:9k_MbkmVN38:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=PjZS0sgjIE4:9k_MbkmVN38:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/PjZS0sgjIE4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/</feedburner:origLink></item>
		<item>
		<title>Quick Tip: Convert The Service Chooser App From Backbone.js to AngularJS</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/T5QSRMLcgfU/</link>
		<comments>http://tutorialzine.com/2013/05/quick-tip-convert-backbone-to-angularjs/#comments</comments>
		<pubDate>Thu, 02 May 2013 16:51:12 +0000</pubDate>
		<dc:creator>Kevin P.</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[AngularJS]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=3098</guid>
		<description><![CDATA[In this guest post, Kevin P. is going to show you how to convert our Backbone.js form into an AngularJS app, while at the same making the code much simpler.]]></description>
				<content:encoded><![CDATA[<p><em>This is a guest post by <strong>Kevin P.</strong> a web developer and a reader of Tutorialzine, who suggested a better approach to our Backbone.js form tut from last week, using AngularJS. The resulting code was so much simpler and shorter, that I invited Kevin to share it with you.</em></p>
<p>The <a href="http://tutorialzine.com/2013/04/services-chooser-backbone-js/">Backbone.js app</a> tutorial from last week shows how to build a dynamic form with JavaScript, jQuery and the Backbone library. It works perfectly well, but there is more than one way to make that form, and here I will show you how to build it with AngularJS. The JS code is only 15 lines, compared to the original 123! And what is more, no additional libraries besides AngularJS are needed!</p>
<h3>A few words about AngularJS</h3>
<p><a href="http://angularjs.org/">AngularJS</a> is a library by Google that aims to clearly separate the HTML rendering from your data. With it, you can declare bindings in your HTML that describe how it should be rendered and to which data model your markup corresponds. If you need to modify any aspect of your page, do it by changing your HTML and CSS; the JS contains your data and the logic behind it &#8211; in our example the model are the different services, and the logic is the calculation of the total price.</p>
<p>With AngularJS your code becomes short and easy to understand. This is important as when the code is concise, you can spot where to make changes quickly and is more maintainable.</p>
<h3>The HTML</h3>
<h4>index.html</h4>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;html&gt;

	&lt;head&gt;
		&lt;meta charset="utf-8"/&gt;
		&lt;title&gt;Your First AngularJS App&lt;/title&gt;

		&lt;!-- Google web fonts --&gt;
		&lt;link href="http://fonts.googleapis.com/css?family=PT+Sans:400,700" rel='stylesheet' /&gt;

		&lt;!-- The main CSS file --&gt;
		&lt;link href="assets/css/style.css" rel="stylesheet" /&gt;
	&lt;/head&gt;

	&lt;body&gt;

		&lt;form id="main" ng-app ng-controller="myservices"&gt;
			&lt;h1&gt;My Services&lt;/h1&gt;

			&lt;ul id="services"&gt;
				&lt;!-- The services will be inserted here --&gt;
				&lt;li ng-repeat="service in services"&gt;
					&lt;label&gt;
						&lt;input type="checkbox" ng-model="service.selected" value="1" name="{{service.title}}" /&gt;
						{{service.title}}&lt;span&gt;${{service.price}}&lt;/span&gt;
					&lt;/label&gt;
				&lt;/li&gt;
			&lt;/ul&gt;

			&lt;p id="total"&gt;total: &lt;span&gt;${{total()}}&lt;/span&gt;&lt;/p&gt;

			&lt;input type="submit" id="order" value="Order"/&gt;

		&lt;/form&gt;

		&lt;!-- The single AngularJS include --&gt;
		&lt;script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.5/angular.min.js"&gt;&lt;/script&gt;
		&lt;script src="assets/js/script.js"&gt;&lt;/script&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>It looks similar to the original with important differences:</p>
<ul>
<li> The whole HTML is here. No &#8216;&lt;input type=&#8221;checkbox&#8221;&#8230;&#8217; in the JavaScript;</li>
<li> New attributes describe what to do with the data. &#8216;<strong>ng-repeat</strong>&#8216; declares the template to use for each service (a <strong>&lt;li&gt;</strong> with an <strong>&lt;input&gt;</strong>);</li>
<li><strong> ng-model=&#8221;service.selected&#8221;</strong> associates the checkbox state to a &#8216;selected&#8217; variable of each service (initially undefined, meaning false);</li>
<li> Placeholders indicate where to insert a value from our model. <strong>{{service.price}}</strong> puts the price;</li>
<li> Function calls are needed when logic is applied to data. With <strong>total()</strong> we sum up the price of the selected services;</li>
<li>The jQuery library is not needed!</li>
</ul>
<div id="attachment_3066" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2013/05/quick-tip-convert-backbone-to-angularjs/"><img class="size-full wp-image-3066" alt="Services Chooser Form With AngularJS" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/illustration.jpg" width="620" height="600" /></a><p class="wp-caption-text">Services Chooser Form With AngularJS</p></div>
<h3>The JavaScript</h3>
<p>The JavaScript is as short as it could be:</p>
<h4>assets/js/script.js</h4>
<pre class="brush:js">function myservices($scope){
    $scope.services=[
        { title: 'web development', price: 200},
        { title: 'web design', price: 250},
        { title: 'photography', price: 100},
        { title: 'coffee drinking', price: 10}];
    $scope.total=function(){
        var t = 0;
        angular.forEach($scope.services, function(s){
            if(s.selected)
                t+=s.price;
        });
        return t;
    };
}</pre>
<ul>
<li>The function &#8220;<strong>myservices</strong>&#8221; matches the <strong>ng-controller</strong> attribute on our form. AngularJS will act only inside our form;</li>
<li>Our data model must be stored into the <strong>$scope</strong> variable to be accessible from the HTML. We first declare our list of services;</li>
<li>The <strong>total()</strong> function loops through the services, adding the prices of the selected ones. &#8216;<strong>angular.forEach</strong>&#8216; is a convenient function, a standard &#8216;for&#8217; could have been used.</li>
</ul>
<p>You don&#8217;t have to worry when your data is read or the <strong>total()</strong> function called. AngularJS does it for you. Just update the data of the model in JavaScript, and the library will update the HTML.</p>
<h3>Go further</h3>
<p>AngularJS and Backbone.js are similar in their purpose but solve problems differently. They both give you tools to build highly dynamic web applications. But the usual shortcomings apply &#8211; because the application is dependent on JavaScript, these libraries are not good from a SEO point of view.</p>
<p>A good next step is to read the official <a href="http://docs.angularjs.org/tutorial" target="_blank">AngularJS tutorial</a> which explains all the basics, or <a href="http://www.youtube.com/user/angularjs" target="_blank">watch some videos</a>. For a great overview of all the major client-side JS frameworks, you can visit <a href="http://todomvc.com/">http://todomvc.com/</a> that implements the same <em>To Do</em> application in each of them.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=T5QSRMLcgfU:-eWqJ7cGoRU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=T5QSRMLcgfU:-eWqJ7cGoRU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=T5QSRMLcgfU:-eWqJ7cGoRU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=T5QSRMLcgfU:-eWqJ7cGoRU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=T5QSRMLcgfU:-eWqJ7cGoRU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=T5QSRMLcgfU:-eWqJ7cGoRU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=T5QSRMLcgfU:-eWqJ7cGoRU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=T5QSRMLcgfU:-eWqJ7cGoRU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=T5QSRMLcgfU:-eWqJ7cGoRU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=T5QSRMLcgfU:-eWqJ7cGoRU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/T5QSRMLcgfU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/05/quick-tip-convert-backbone-to-angularjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/05/quick-tip-convert-backbone-to-angularjs/</feedburner:origLink></item>
		<item>
		<title>Check Out jQuery Trickshots – Our First Book!</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/D3rJvCQlhOE/</link>
		<comments>http://tutorialzine.com/2013/04/check-out-jquery-trickshots-our-first-book/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 14:32:25 +0000</pubDate>
		<dc:creator>Martin Angelov</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=3086</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/04/check-out-jquery-trickshots-our-first-book/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/featured-620x340.jpg" class="attachment-tzmedium" alt="jQuery Trickshots - Our New Book" /></a></div> Announcing jQuery Trickshots, our new book! Inside it, you will find a collection of 100 kickass tips and tricks for working with jQuery that I have discovered over the years as a JavaScript developer and author for Tutorialzine.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/04/check-out-jquery-trickshots-our-first-book/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/featured-620x340.jpg" class="attachment-tzmedium" alt="jQuery Trickshots - Our New Book" /></a></div> <p>I am happy to announce the release of our first ebook &#8211; <a href="http://tutorialzine.com/books/jquery-trickshots/" target="_blank">jQuery Trickshots</a>. Inside it, you will find a collection of 100 kickass tips and tricks for working with jQuery that I have discovered over the years as a JavaScript developer and author for Tutorialzine.</p>
<p>jQuery needs no introduction &#8211; it is the most popular JavaScript library in use today, and it drives most of the tutorials on this site. It gives web developers a great deal of power by abstracting away the complex tasks of traversing the DOM, creating elements, handling events and more, while at the same time leveling the play field by working around browser differences.</p>
<p>Here are some of the things that you will read about in <strong>jQuery Trickshots</strong>:</p>
<ul>
<li><strong>DOM Manipulation: </strong>Tips on chaining, organizing your code, using the power of the DOM to your advantage.</li>
<li><strong>Performance: </strong>Learn how to optimize your jQuery code and how to squeeze every bit of performance.</li>
<li><strong>Events: </strong>A collection of tricks on working with events, making your code work on touch devices, chaining event handlers and more.</li>
<li><strong>AJAX: </strong>Tips on working with deferreds, useful third party APIs, scraping HTML content and more.</li>
<li><strong>Master Class: </strong>Making use of little-known jQuery methods, applying old-school JavaScript tricks, isolating code blocks and extending jQuery.</li>
<li><strong>Plugins: </strong>A collection of must-know plugins for modern web apps, with examples and live code.</li>
</ul>
<p>To get a better taste of the book, go ahead and download <a href="http://tutorialzine.com/misc/files/jquery-trickshots-free-chapter.pdf" target="_blank">the AJAX chapter for free</a>!</p>
<p><a href="http://tutorialzine.com/books/jquery-trickshots/" target="_blank">jQuery Trickshots</a> comes in <strong>PDF</strong>, <strong>Epub</strong> and <strong>Mobi</strong> so you can read it on all your devices. To make the package complete, there are <strong>100 HTML5 &amp; jQuery examples</strong> that you can edit and run in your browser!</p>
<div id="attachment_3089" class="wp-caption alignnone" style="width: 630px"><a href="http://tutorialzine.com/books/jquery-trickshots/"><img class="size-full wp-image-3089" alt="The jQuery Trickshots Book" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/jquery-trickshots1.jpg" width="620" height="400" /></a><p class="wp-caption-text">The jQuery Trickshots Book</p></div>
<h3>The Giveaway</h3>
<p>To celebrate the release, we are offering<strong> three copies of the book for free</strong>, to three lucky Tutorialzine readers. To participate do the following:</p>
<ul>
<li><span style="line-height: 13px;">Tweet about this post (<a href="https://twitter.com/intent/tweet?text=Check%20Out%20jQuery%20Trickshots%20-%20Tutorialzine's%20Epic%20Tips%20And%20Tricks%20Book&amp;url=http%3A%2F%2Ftutorialzine.com%2F2013%2F04%2Fcheck-out-jquery-trickshots-our-first-book">click</a>);</span></li>
<li>Leave a comment below, saying what you&#8217;d like our next book to be about.</li>
</ul>
<p><span style="text-decoration: line-through;">The winners will be randomly chosen on <strong>May 7th, 2013</strong>, and announced with an update to this post. Good luck!</span></p>
<p><strong>The winners have been chosen! And they are:</strong></p>
<ul>
<li>Pablo</li>
<li>Phillip Jacobs</li>
<li>Sam</li>
</ul>
<p>They have been contacted and have been sent their prizes. Congratulations!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=D3rJvCQlhOE:m92tpyG0Em0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=D3rJvCQlhOE:m92tpyG0Em0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=D3rJvCQlhOE:m92tpyG0Em0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=D3rJvCQlhOE:m92tpyG0Em0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=D3rJvCQlhOE:m92tpyG0Em0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=D3rJvCQlhOE:m92tpyG0Em0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=D3rJvCQlhOE:m92tpyG0Em0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=D3rJvCQlhOE:m92tpyG0Em0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=D3rJvCQlhOE:m92tpyG0Em0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=D3rJvCQlhOE:m92tpyG0Em0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/D3rJvCQlhOE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/04/check-out-jquery-trickshots-our-first-book/feed/</wfw:commentRss>
		<slash:comments>63</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/04/check-out-jquery-trickshots-our-first-book/</feedburner:origLink></item>
		<item>
		<title>Your First Backbone.js App – Service Chooser</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/Z-YgeQ298ls/</link>
		<comments>http://tutorialzine.com/2013/04/services-chooser-backbone-js/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 07:01:28 +0000</pubDate>
		<dc:creator>Martin Angelov</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Backbone]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=3055</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/04/services-chooser-backbone-js/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/service_chooser_form-620x340.jpg" class="attachment-tzmedium" alt="Service Chooser Form" /></a></div> Today we are going to make a service chooser form with Backbone.js, that lets you choose a set of items from a list. A total price field is going to be calculated in real-time with the aggregate price of the services.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/04/services-chooser-backbone-js/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/service_chooser_form-620x340.jpg" class="attachment-tzmedium" alt="Service Chooser Form" /></a></div> <p>Client-side MVC frameworks have gotten increasingly popular with the raise in complexity of in-browser web apps. These frameworks let you organize your JavaScript using the proven <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">MVC pattern</a>. <a href="http://documentcloud.github.io/backbone/" target="_blank">Backbone.js</a> is one of the most popular and is quickly becoming the go-to choice when considering such a framework.</p>
<p>Today we are going to make a service chooser form with Backbone.js, that lets you choose a set of items from a list. A total price field is going to be calculated in real-time with the aggregate price of the services.</p>
<blockquote class="note"><p><strong>Update:</strong> We now have a version of this form using AngularJS. See it <a href="http://tutorialzine.com/2013/05/quick-tip-convert-backbone-to-angularjs/">here</a>.</p></blockquote>
<h3>What is Backbone.js?</h3>
<p><a href="http://documentcloud.github.io/backbone/" target="_blank">Backbone.js</a> is a library that gives structure to web applications by providing models, collections and views, all hooked up together with custom events. It connects your application to your backend via a RESTful JSON interface, and can automatically fetch and save data. In this tutorial we won&#8217;t be using the advanced features of the library &#8211; everything will be stored client-side. Backbone does not replace and does not depend on jQuery, but the two work together nicely.</p>
<p>Backbone won&#8217;t magically solve your problems though &#8211; you still have to be smart in the way you organize your code, which can be an issue if you don&#8217;t have prior experience with MVC frameworks. Backbone can also be an overkill for smaller applications, where a few lines of jQuery would suffice, so it would better be left for large code bases. The app that we are building here is in the first camp, but it does show the fundamental concepts behind the framework.</p>
<h3>The HTML</h3>
<p>We are starting off with a regular HTML5 document. I haven&#8217;t added the HTML5 shim, so this might not look good in older IEs:</p>
<h4>index.html</h4>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;html&gt;

    &lt;head&gt;
        &lt;meta charset="utf-8" /&gt;
        &lt;title&gt;Your first Backbone.js App | Tutorialzine &lt;/title&gt;

        &lt;!-- Google web fonts --&gt;
		&lt;link href="http://fonts.googleapis.com/css?family=PT+Sans:400,700" rel='stylesheet' /&gt;

        &lt;!-- The main CSS file --&gt;
		&lt;link href="assets/css/style.css" rel="stylesheet" /&gt;

    &lt;/head&gt;

    &lt;body&gt;

		&lt;form id="main" method="post" action="submit.php"&gt;
			&lt;h1&gt;My Services&lt;/h1&gt;

			&lt;ul id="services"&gt;
				&lt;!-- The services will be inserted here --&gt;
			&lt;/ul&gt;

			&lt;p id="total"&gt;total: &lt;span&gt;$0&lt;/span&gt;&lt;/p&gt;

			&lt;input type="submit" id="order" value="Order" /&gt;

		&lt;/form&gt;

		&lt;!-- JavaScript Includes --&gt;
		&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"&gt;&lt;/script&gt;
		&lt;script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"&gt;&lt;/script&gt;
		&lt;script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"&gt;&lt;/script&gt;

		&lt;script src="assets/js/script.js"&gt;&lt;/script&gt;

    &lt;/body&gt;
&lt;/html&gt;</pre>
<p>The main element on the page is the form. The UL inside it will be populated with LI items for the services, and the span inside the <strong>#total</strong> paragraph will hold the price.</p>
<p>Before the closing &lt;/body&gt; tag, I have included jQuery, Backbone and the <a href="http://underscorejs.org/" target="_blank">Underscore library</a> (backbone depends on its powerful utility functions). Last comes the script.js file, which you can see in the next section.</p>
<div id="attachment_3066" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2013/04/services-chooser-backbone-js/"><img class="size-full wp-image-3066" alt="Services Chooser Form With Backbone.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/illustration.jpg" width="620" height="600" /></a><p class="wp-caption-text">Services Chooser Form With Backbone.js</p></div>
<h3>The JavaScript</h3>
<p>Here is the overall idea of our Backbone code:</p>
<ol>
<li>First we will create a service model. It will have properties for the <strong>name</strong> of the service, the <strong>price</strong>, and <strong>checked </strong>- a status field showing whether this service has been chosen or not. An object of this class will be created for every service that we offer;</li>
<li>Then we will create a Backbone collection that will store all the services. It will make it easier to listen for events on all objects at once. In larger apps, you would listen for when items are inserted or removed from the collection, and update the views accordingly. In our case, as the items in the collection are predetermined, we will only listen for the <strong>change</strong> event (which is raised whenever the <strong>checked</strong> property is updated).</li>
<li>After this, we define a view for the services. Each view will be associated with a single model, and turn its properties into HTML. It listens for clicks and updates the <strong>checked</strong> property of the model.</li>
<li>Lastly, we define a master view, which loops through all the services in the collection and creates views for them. It also listens for the change event on the collection and updates the total price.</li>
</ol>
<p>Since I know you didn&#8217;t read all of the above, here is the richly-commented source code:</p>
<h4>assets/js/script.js</h4>
<pre class="brush:js">$(function(){

	// Create a model for the services
	var Service = Backbone.Model.extend({

		// Will contain three attributes.
		// These are their default values

		defaults:{
			title: 'My service',
			price: 100,
			checked: false
		},

		// Helper function for checking/unchecking a service
		toggle: function(){
			this.set('checked', !this.get('checked'));
		}
	});

	// Create a collection of services
	var ServiceList = Backbone.Collection.extend({

		// Will hold objects of the Service model
		model: Service,

		// Return an array only with the checked services
		getChecked: function(){
			return this.where({checked:true});
		}
	});

	// Prefill the collection with a number of services.
	var services = new ServiceList([
		new Service({ title: 'web development', price: 200}),
		new Service({ title: 'web design', price: 250}),
		new Service({ title: 'photography', price: 100}),
		new Service({ title: 'coffee drinking', price: 10})
		// Add more here
	]);

	// This view turns a Service model into HTML. Will create LI elements.
	var ServiceView = Backbone.View.extend({
		tagName: 'li',

		events:{
			'click': 'toggleService'
		},

		initialize: function(){

			// Set up event listeners. The change backbone event
			// is raised when a property changes (like the checked field)

			this.listenTo(this.model, 'change', this.render);
		},

		render: function(){

			// Create the HTML

			this.$el.html('&lt;input type="checkbox" value="1" name="' + this.model.get('title') + '" /&gt; ' + this.model.get('title') + '&lt;span&gt;$' + this.model.get('price') + '&lt;/span&gt;');
			this.$('input').prop('checked', this.model.get('checked'));

			// Returning the object is a good practice
			// that makes chaining possible
			return this;
		},

		toggleService: function(){
			this.model.toggle();
		}
	});

	// The main view of the application
	var App = Backbone.View.extend({

		// Base the view on an existing element
		el: $('#main'),

		initialize: function(){

			// Cache these selectors
			this.total = $('#total span');
			this.list = $('#services');

			// Listen for the change event on the collection.
			// This is equivalent to listening on every one of the 
			// service objects in the collection.
			this.listenTo(services, 'change', this.render);

			// Create views for every one of the services in the
			// collection and add them to the page

			services.each(function(service){

				var view = new ServiceView({ model: service });
				this.list.append(view.render().el);

			}, this);	// "this" is the context in the callback
		},

		render: function(){

			// Calculate the total order amount by agregating
			// the prices of only the checked elements

			var total = 0;

			_.each(services.getChecked(), function(elem){
				total += elem.get('price');
			});

			// Update the total price
			this.total.text('$'+total);

			return this;
		}
	});

	new App();

});</pre>
<p>As you can see, you have to extend the classes provided by Backbone, and in the process override the methods that you want to perform differently (for the views you almost certainly want to override the render method). You can further extend them and build hierarchies of classes.</p>
<p>The views can either create their own HTML, as in the case of <strong>ServiceView</strong>, or be attached to existing elements. The main view of the application is <strong>App</strong>, which is bound to the <strong>#main</strong> form. It initializes the other views and updates the total price in its render method.</p>
<h3>The PHP</h3>
<p>I also included a line of PHP that will handle the form submissions. All it does is print the names of the selected checkbox fields:</p>
<h4>submit.php</h4>
<pre class="brush:php">echo htmlspecialchars(implode(array_keys($_POST), ', '));</pre>
<p>You are welcome to extend it with whatever functionality you need, like sending email, inserting the results in a database and more.</p>
<h3>We&#8217;re done!</h3>
<p>With this our Backbone service chooser form is done! I hope that you find the form useful and that it gives you a good overview of the framework, so you can tell when the time is right to use it.</p>
<h3>Resources and further reading:</h3>
<ul>
<li><a href="http://documentcloud.github.io/backbone/" target="_blank">The Backbone documentation</a></li>
<li><a href="http://underscorejs.org/" target="_blank">The Underscore documentation</a></li>
<li><a href="http://documentcloud.github.io/backbone/docs/todos.html" target="_blank">A Todo list application with backbone</a></li>
<li><a href="http://addyosmani.github.io/backbone-fundamentals/" target="_blank">The free Backbone Fundamentals book</a></li>
<li><a href="https://github.com/documentcloud/backbone/wiki/Tutorials%2C-blog-posts-and-example-sites" target="_blank">A list of Backbone tutorials and examples</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Z-YgeQ298ls:nGFxxF_4rBk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Z-YgeQ298ls:nGFxxF_4rBk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Z-YgeQ298ls:nGFxxF_4rBk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Z-YgeQ298ls:nGFxxF_4rBk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Z-YgeQ298ls:nGFxxF_4rBk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Z-YgeQ298ls:nGFxxF_4rBk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Z-YgeQ298ls:nGFxxF_4rBk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Z-YgeQ298ls:nGFxxF_4rBk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Z-YgeQ298ls:nGFxxF_4rBk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Z-YgeQ298ls:nGFxxF_4rBk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/Z-YgeQ298ls" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/04/services-chooser-backbone-js/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/04/services-chooser-backbone-js/</feedburner:origLink></item>
		<item>
		<title>Improving Your Site’s User Experience</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/2I7gxY-55CM/</link>
		<comments>http://tutorialzine.com/2013/04/improving-your-sites-user-experience/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 19:16:08 +0000</pubDate>
		<dc:creator>Luke Clum</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=2822</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/04/improving-your-sites-user-experience/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/2822-620x340.jpg" class="attachment-tzmedium" alt="Improving Your Site&#039;s User Experience" /></a></div> When it comes to web design, the quality of experience that users have with a site determines whether it's successful or not – regardless of how visually catchy the design is. Here are a few guidelines on how to improve the experience of your site.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/04/improving-your-sites-user-experience/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/2822-620x340.jpg" class="attachment-tzmedium" alt="Improving Your Site&#039;s User Experience" /></a></div> <p>When it comes to web design, the quality of experience that users have with a site determines whether it&#8217;s successful or not – regardless of how visually catchy the design is. A positive experience drives sales and conversions, while a negative one deters visitors from staying or returning. Therefore performance optimization should be a central part of your design process if you&#8217;re aiming for high conversions and user satisfaction. Here are some ways to improve your site&#8217;s user experience.</p>
<h3>Increase Site Speed</h3>
<p>Consider how many people take out their phones to quickly check email or look something up when they have a spare second in the day. Whether it&#8217;s while waiting for the bus, standing in line for coffee or running to a meeting, they expect to achieve their goal on the web in that short amount of time. <a href="http://blog.kissmetrics.com/loading-time/" target="_blank">Forty percent</a> of users will abandon a page after waiting longer than 3 seconds, and many people share their bad site experiences with others. It&#8217;s your job as a designer to make sure your site is loading fast enough to satisfy these standards and to make sure yours provides an experience that gets positive feedback.</p>
<p>To begin the process of improving your speed, first use a <a href="http://www.metacdn.com/#speedTest" target="_blank">site speed testing tool</a> to measure how it&#8217;s currently performing. Then make changes like:</p>
<ul>
<li>Resize or remove large images and files</li>
<li>Reduce the number of plug-ins in your site</li>
<li>Eliminate flash files, which greatly weigh down performance</li>
<li>Cache your site so that it won&#8217;t have to take time to fully assemble every time a user accesses it</li>
<li>Always retest your speed after making changes so you know what is effective in improving it.</li>
</ul>
<h3>Clean Up Your Navigation</h3>
<p>Reassess your navigation system: does your menu and search field honor conventions in that they are easily identifiable and usable? Minimize the number of options users have when entering your site by combining pages/content and getting rid of low-traffic pages. The fewer options there are, the more direct your site&#8217;s purpose is, and the easier it is for users to decide where they want to go. You can evaluate how users currently use your site by carrying out <a href="http://uxdesign.smashingmagazine.com/2013/01/08/improving-your-website-usability-tests/" target="_blank">usability tests</a> and referring to your site analytics data.</p>
<div id="attachment_2826" class="wp-caption alignnone" style="width: 658px"><img class="size-full wp-image-2826" title="Mercy Online" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/UX-01-e1365704371518.jpg" alt="Mercy Online" width="648" height="311" /><p class="wp-caption-text">Mercy Online</p></div>
<p><a href="http://www.mercyonline.co.uk/" target="_blank">This site has a visible search box</a>, an option to easily subscribe to a newsletter and a few clickable links to navigate to other pages.</p>
<h3>Aim For High Conversion Rates</h3>
<p>You can be sure that a high converting website is also highly usable. Focus on the usability of your site, and user satisfaction (and in turn, conversions) will follow. To maximize usability:</p>
<ul>
<li>Make your purpose clear. Use recognizable and concise calls-to-action so that users know exactly what they are meant to do with your site. Show users the value your product or service will add to their lives.</li>
<li>Be consistent. Make sure each page of your site sends the same message, and shares the style of design elements and layout.</li>
<li>Make text readable. Tailor your content to be easily perceived while users scan the page. Headlines, variations in font sizes and weights, and breaks in text blocks create a breathable set of information that can be retained even while glancing through it.</li>
<li>Keep it simple. Comparable to the fact that simple navigation makes it easier for users to decide what to do, simplicity in your entire site design keeps users from being overwhelmed with information. Ample white space and a unified style give users a sense of comfort and professionalism, and builds their confidence that they&#8217;ll find what they&#8217;re looking for quickly.</li>
</ul>
<div id="attachment_2827" class="wp-caption alignnone" style="width: 660px"><img class="size-full wp-image-2827" title="Red Digital Agency" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/UX-02-e1365704435503.jpg" alt="Red Digital Agency" width="650" height="307" /><p class="wp-caption-text">Red Digital Agency</p></div>
<p><a href="http://ff0000.com/about/" target="_blank">Red</a> presents a good balance of white space, imagery, text and color to reveal its purpose and capture attention.</p>
<h3>Build Trust</h3>
<p>Visitors to your site will have a more positive experience if they can trust you. Whether it&#8217;s the validity of your information, your protection of their personal information or confidence in the quality of your product, it&#8217;s important to give them reason to trust you. You can do this by providing visible contact information, allowing customer feedback, presenting previous customer testimonials and/or client logos, and displaying your SSL certificate if you have a registration or checkout page.</p>
<p>When working to improve your site&#8217;s user experience, just remember to consider what your audience is looking for, and test and measure the changes you make to create a more effective and usable site.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=2I7gxY-55CM:LvAF60KYqDk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=2I7gxY-55CM:LvAF60KYqDk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=2I7gxY-55CM:LvAF60KYqDk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=2I7gxY-55CM:LvAF60KYqDk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=2I7gxY-55CM:LvAF60KYqDk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=2I7gxY-55CM:LvAF60KYqDk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=2I7gxY-55CM:LvAF60KYqDk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=2I7gxY-55CM:LvAF60KYqDk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=2I7gxY-55CM:LvAF60KYqDk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=2I7gxY-55CM:LvAF60KYqDk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/2I7gxY-55CM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/04/improving-your-sites-user-experience/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/04/improving-your-sites-user-experience/</feedburner:origLink></item>
		<item>
		<title>50 Amazing jQuery Plugins That You Should Start Using Right Now</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/12uGNJlfDc4/</link>
		<comments>http://tutorialzine.com/2013/04/50-amazing-jquery-plugins/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 12:47:22 +0000</pubDate>
		<dc:creator>Martin Angelov</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=2748</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/04/50-amazing-jquery-plugins/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/2748-620x340.jpg" class="attachment-tzmedium" alt="50 Amazing jQuery Plugins That You Should Start Using Right Now" /></a></div> in this post, you will find a collection of 50 new and awesome jQuery plugins and JavaScript libraries that, when applied with good measure, can make your sites a joy to use.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/04/50-amazing-jquery-plugins/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/04/2748-620x340.jpg" class="attachment-tzmedium" alt="50 Amazing jQuery Plugins That You Should Start Using Right Now" /></a></div> <p>jQuery has a wonderful community of programmers that create incredible things. However, it may become difficult to sift through everything that is released and find the gems that are absolute must-haves. This is why, in this post, you will find a collection of 50 new jQuery plugins and JavaScript libraries that, when applied with good measure, can make your sites a joy to use. The plugins are organized into categories for easier browsing. Enjoy!</p>
<h3>Dialogs</h3>
<p>The browser&#8217;s built-in dialogs are easy to use but are ugly and non-customizable. If you want your application to look sharp and professional, you will have to part with the loathed default look. The plugins in this section can substitute the built-in dialogs and can be readily customized.</p>
<h4>1. Alertify.js</h4>
<p><a href="http://fabien-d.github.com/alertify.js/">Alertify</a> (<a href="https://github.com/fabien-d/alertify.js">github</a>) is small library for presenting beautiful dialog windows and notifications. It is easy to customize with CSS, has a simple API and doesn&#8217;t depend on third party libraries (but plays nicely with them). To use it, include the js file and call the methods of the global alertify object:</p>
<pre class="brush:js">// alert dialog
alertify.alert("Message");

// confirm dialog
alertify.confirm("Message", function (e) {
    if (e) {
        // user clicked "ok"
    } else {
        // user clicked "cancel"
    }
});</pre>
<div id="attachment_2800" class="wp-caption alignnone" style="width: 630px"><a href="http://fabien-d.github.com/alertify.js/" target="_blank"><img class="size-full wp-image-2800" title="Alertify.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0048_2.jpg" alt="Alertify.js" width="620" height="400" /></a><p class="wp-caption-text">Alertify.js</p></div>
<h4>2. jQuery Avgrund</h4>
<p><a href="http://labs.voronianski.com/jquery.avgrund.js/">jQuery Avgrund</a> (<a href="https://github.com/voronianski/jquery.avgrund.js" target="_blank">github</a>) is another cool dialog solution. It is not as feature-rich as alertify, but it has the Wow! factor that your web app needs. The dialog is shown with an impressive animation that brings it into focus, while blurring and darkening the background.</p>
<div id="attachment_2799" class="wp-caption alignnone" style="width: 630px"><a href="http://labs.voronianski.com/jquery.avgrund.js/" target="_blank"><img class="size-full wp-image-2799  " title="jQuery Avgrund" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0047_3.jpg" alt="jQuery Avgrund" width="620" height="400" /></a><p class="wp-caption-text">jQuery Avgrund</p></div>
<h3>Forms</h3>
<p>Forms are tedious and boring. Everyone hates filling them. It is even a bigger deal if no client-side validation is present and we are forced to enter the data a second time. The plugins in this section attempt to make things better by enhancing your forms with useful functionality.</p>
<h4>3. iCheck</h4>
<p><a href="http://damirfoy.com/iCheck/">iCheck</a> (<a href="https://github.com/damirfoy/iCheck/">github</a>) is a jQuery plugin that enhances your form controls. It is perfectly customizable, works on mobile and comes with beautiful flat-style skins. To use it, include the js and css files in your page, and convert all your radio and checkboxes with a few lines of jQuery.</p>
<pre class="brush:js">$(document).ready(function(){
	$('input').iCheck({
		checkboxClass: 'icheckbox_minimal',
		radioClass: 'iradio_minimal'
	});
});</pre>
<div id="attachment_2798" class="wp-caption alignnone" style="width: 630px"><a href="http://damirfoy.com/iCheck/" target="_blank"><img class="size-full wp-image-2798  " title="iCheck" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0046_4.jpg" alt="iCheck" width="620" height="400" /></a><p class="wp-caption-text">iCheck</p></div>
<h4>4. Long Press</h4>
<p><a href="http://toki-woki.net/lab/long-press/">Long Press</a> is a jQuery plugin that eases the writing of accented or rare characters. Holding down a key while typing will bring a bar with alternative characters that you can use. The plugin also has a <a href="https://github.com/quentint/long-press">github</a> page.</p>
<div id="attachment_2797" class="wp-caption alignnone" style="width: 630px"><a href="http://toki-woki.net/lab/long-press/" target="_blank"><img class="size-full wp-image-2797 " title="Long Press" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0045_5.jpg" alt="Long Press" width="620" height="400" /></a><p class="wp-caption-text">Long Press</p></div>
<h4>5. jQuery File Upload</h4>
<p><a href="http://blueimp.github.com/jQuery-File-Upload/">jQuery File Upload</a> (<a href="https://github.com/blueimp/jQuery-File-Upload">github</a>) is a widget with multiple file selection, drag&amp;drop support, progress bars and preview images. It supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) and is easy to embed into your application thanks to a number of hooks and callbacks.</p>
<div id="attachment_2796" class="wp-caption alignnone" style="width: 630px"><a href="http://blueimp.github.com/jQuery-File-Upload/" target="_blank"><img class="size-full wp-image-2796 " title="jQuery File Upload" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0044_6.jpg" alt="jQuery File Upload" width="620" height="400" /></a><p class="wp-caption-text">jQuery File Upload</p></div>
<h4>6. Complexify</h4>
<p><a href="http://danpalmer.me/jquery-complexify/">Complexify</a> (<a href="https://github.com/danpalmer/jquery.complexify.js/">github</a>) is a jQuery plugin that aims to assess how complex passwords are. You can use it in signup forms to present a percentage to users (like we did in <a href="http://tutorialzine.com/2012/06/beautiful-password-strength-indicator/">this tutorial</a>). With this plugin you can force passwords to contain a combination of upper/lowercase letters, numbers, special symbols and more. I should note that this is purely a client-side solution, which means that it can be circumvented. This is why you should also check the password complexity on the server side.</p>
<div id="attachment_2795" class="wp-caption alignnone" style="width: 630px"><a href="http://danpalmer.me/jquery-complexify/" target="_blank"><img class="size-full wp-image-2795 " title="Complexify" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0043_7.jpg" alt="Complexify" width="620" height="400" /></a><p class="wp-caption-text">Complexify</p></div>
<h4>7. jQuery Knob</h4>
<p><a href="http://anthonyterrien.com/knob/">jQuery Knob</a> (<a href="https://github.com/aterrien/jQuery-Knob">github</a>) is a plugin for turning input elements into touchable jQuery dials. It is built using canvas, and is fully customizable by setting data attributes on the inputs like this:</p>
<pre class="brush:html">&lt;input class="knob" data-width="150" data-cursor=true data-fgColor="#222222" data-thickness="0.3" value="29"&gt;</pre>
<p>The dials can be controlled using the mouse (click and drag; mousewheel), the keyboard, and by using touch on mobile devices.</p>
<div id="attachment_2794" class="wp-caption alignnone" style="width: 630px"><a href="http://anthonyterrien.com/knob/" target="_blank"><img class="size-full wp-image-2794 " title="jQuery Knob" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0042_8.jpg" alt="jQuery Knob" width="620" height="400" /></a><p class="wp-caption-text">jQuery Knob</p></div>
<h4>8. Pickadate.js</h4>
<p><a href="http://amsul.ca/pickadate.js/">Pickadate.js</a> (<a href="https://github.com/amsul/pickadate.js">github</a>) is a jQuery plugin that creates a responsive and mobile friendly date selection widget. It is very easy to use and can be customized with CSS. To use it, include the js file and the stylesheet, and call the plugin on your input element:</p>
<pre class="brush:js">$('.datepicker').pickadate();</pre>
<p>The plugin takes lots of options which you can find in the <a href="http://amsul.ca/pickadate.js/docs.htm">docs</a>.</p>
<div id="attachment_2793" class="wp-caption alignnone" style="width: 630px"><a href="http://amsul.ca/pickadate.js/" target="_blank"><img class="size-full wp-image-2793 " title="Pickadate.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0041_9.jpg" alt="Pickadate.js" width="620" height="400" /></a><p class="wp-caption-text">Pickadate.js</p></div>
<h4>9. Chosen</h4>
<p><a href="http://harvesthq.github.com/chosen/">Chosen</a> (<a href="https://github.com/harvesthq/chosen">github</a>) is a powerful widget which converts a select input into a searchable dropdown list. It is easy to customize with CSS, and you can hook your own code thanks to a number of callbacks. The plugin also updates the original element (which is hidden) so that submitting it as a part of a form or reading it with JS will give you the correct result.</p>
<div id="attachment_2792" class="wp-caption alignnone" style="width: 630px"><a href="http://harvesthq.github.com/chosen/" target="_blank"><img class="size-full wp-image-2792 " title="Chosen" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0040_10.jpg" alt="Chosen" width="620" height="400" /></a><p class="wp-caption-text">Chosen</p></div>
<h4>10. Fancy Input</h4>
<p><a href="http://dropthebit.com/demos/fancy_input/fancyInput.html">Fancy Input</a> (<a href="https://github.com/yairEO/fancyInput">github</a>) is a jQuery plugin that makes entering or deleting text in a textboox uber cool. It uses CSS3 animations to achieve the effect. To use it, simply include the JS file after jQuery, and call the plugin:</p>
<pre class="brush:js">$('div :input').fancyInput();</pre>
<div id="attachment_2791" class="wp-caption alignnone" style="width: 630px"><a href="http://dropthebit.com/demos/fancy_input/fancyInput.html" target="_blank"><img class="size-full wp-image-2791 " title="Fancy Input" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0039_11.jpg" alt="Fancy Input" width="620" height="400" /></a><p class="wp-caption-text">Fancy Input</p></div>
<h4>11. Typeahead.js</h4>
<p><a href="http://twitter.github.com/typeahead.js/">Typeahead</a> (<a href="https://github.com/twitter/typeahead.js/">github</a>) is a fast autocomplete library by twitter. It is inspired by twitter.com&#8217;s search box and is full of features. It displays suggestions as users type, and shows the top suggestion as a hint. The plugin works with hardcoded data as well as remote data, and rate-limits network requests to lighten the load.</p>
<div id="attachment_2790" class="wp-caption alignnone" style="width: 630px"><a href="http://twitter.github.com/typeahead.js/" target="_blank"><img class="size-full wp-image-2790 " title="Typeahead.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0038_12.jpg" alt="Typeahead.js" width="620" height="400" /></a><p class="wp-caption-text">Typeahead.js</p></div>
<h4>12. Parsley.js</h4>
<p><a href="http://parsleyjs.org/">Parsley.js</a> (<a href="https://github.com/guillaumepotier/Parsley.js/">github</a>) is an unobtrusive form validation library. It lets you validate form fields without having to write a single line of JavaScript. Instead, you have to place <strong>data</strong> attributes in the input fields that you need to be validated, and Parsley handles the rest. The library works with either jQuery or Zepto and is less than 800 lines long.</p>
<div id="attachment_2789" class="wp-caption alignnone" style="width: 630px"><a href="http://parsleyjs.org/" target="_blank"><img class="size-full wp-image-2789  " title="Parsley.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0037_13.jpg" alt="Parsley.js" width="620" height="400" /></a><p class="wp-caption-text">Parsley.js</p></div>
<h3>Page scrolling and Parallax</h3>
<p>Single page websites that feature a parallax scrolling effect are popular these days. They will probably stay in fashion for some time, as they are perfect for sites with low information density and lots of photos &#8211; marketing sites, portfolios and more. These plugins aim to make them easier to develop.</p>
<h4>13. Windows</h4>
<p><a href="http://nick-jonas.github.com/windows/">Windows</a> (<a href="https://github.com/modernassembly/windows/">github</a>) is a plugin that lets you build single page websites with sections that take up the whole screens. The plugin gives you callbacks that are called when new sections come into visibility and handles snapping, so you can easily extend it with custom navigation menus or more. Here is an example:</p>
<pre class="brush:js">$('.window').windows({
    snapping: true,
    snapSpeed: 500,
    snapInterval: 1100,
    onScroll: function(scrollPos){
        // scrollPos:Number
    },
    onSnapComplete: function($el){
        // after window ($el) snaps into place
    },
    onWindowEnter: function($el){
        // when new window ($el) enters viewport
    }
});</pre>
<div id="attachment_2788" class="wp-caption alignnone" style="width: 630px"><a href="http://nick-jonas.github.com/windows/" target="_blank"><img class="size-full wp-image-2788 " title="Windows" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0036_14.jpg" alt="Windows" width="620" height="400" /></a><p class="wp-caption-text">Windows</p></div>
<h4>14. Cool Kitten</h4>
<p><a href="http://jalxob.com/cool-kitten/">Cook Kitten</a> (<a href="https://github.com/jalxob/cool-kitten">github</a>) is a responsive framework for parallax scrolling websites. It organizes the sections of your site into slides and uses the <a href="https://github.com/imakewebthings/jquery-waypoints">jQuery Waypoints</a> plugin to detect when they come into visibility, which causes the navigation menu to get updated.</p>
<div id="attachment_2787" class="wp-caption alignnone" style="width: 630px"><a href="http://jalxob.com/cool-kitten/" target="_blank"><img class="size-full wp-image-2787 " title="Cook Kitten" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0035_15.jpg" alt="Cook Kitten" width="620" height="400" /></a><p class="wp-caption-text">Cook Kitten</p></div>
<h4>15. Sticky</h4>
<p><a href="http://stickyjs.com/">Sticky</a> (<a href="https://github.com/garand/sticky">github</a>) is a jQuery plugin that gives you the ability to make any element on your page always stay visible when scrolling the page. This can come handy in your single-page website to present a sticky navigation menu or sharing bar. It is straightforward to use, the only option you may pass is a top offset:</p>
<pre class="brush:js">$("#sticker").sticky({topSpacing:0});</pre>
<div id="attachment_2786" class="wp-caption alignnone" style="width: 630px"><a href="http://stickyjs.com/" target="_blank"><img class="size-full wp-image-2786 " title="Sticky" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0034_16.jpg" alt="Sticky" width="620" height="400" /></a><p class="wp-caption-text">Sticky</p></div>
<h4>16. Super Scrollorama</h4>
<p><a href="http://johnpolacek.github.com/superscrollorama/">Super Scrollorama</a> (<a href="https://github.com/johnpolacek/superscrollorama">github</a>) is a jQuery plugin for cool scroll animations. It lets you define tweens and animations that are triggered when an element comes into view, or on specific scroll points.</p>
<pre class="brush:js">$(document).ready(function() {
  var controller = $.superscrollorama();
  controller.addTween('#fade',
    TweenMax.from($('#fade'), .5, {css:{opacity:0}}));
});</pre>
<div id="attachment_2785" class="wp-caption alignnone" style="width: 630px"><a href="http://johnpolacek.github.com/superscrollorama/" target="_blank"><img class="size-full wp-image-2785 " title="Super Scrollorama" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0033_17.jpg" alt="Super Scrollorama" width="620" height="400" /></a><p class="wp-caption-text">Super Scrollorama</p></div>
<h4>17. Stellar.js</h4>
<p><a href="http://markdalgleish.com/projects/stellar.js/demos/">Stellar.js</a> (<a href="https://github.com/markdalgleish/stellar.js">github</a>) is a jQuery plugin that provides parallax scrolling effects to any scrolling element. It looks for any parallax backgrounds or elements within the specified element, and repositions them when the element scrolls. You can control the scroll speed of the elements by using <strong>data</strong> attributes for a true parallax effect. To trigger the plugin, simply call it on your root element (or on <em>window</em>):</p>
<pre class="brush:js">$('#main').stellar();</pre>
<div id="attachment_2784" class="wp-caption alignnone" style="width: 630px"><a href="http://markdalgleish.com/projects/stellar.js/demos/" target="_blank"><img class="size-full wp-image-2784 " title="Stellar.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0032_18.jpg" alt="Stellar.js" width="620" height="400" /></a><p class="wp-caption-text">Stellar.js</p></div>
<h4>18. Scrollpath</h4>
<p><a href="http://joelb.me/scrollpath/">Scrollpath</a> (<a href="https://github.com/JoelBesada/scrollpath">github</a>) is another scrolling plugin, but what it gives you that the previous plugin does not, is the ability to define your own custom scroll path. The plugin uses canvas flavored syntax for drawing paths, using the methods <strong>moveTo</strong>,<strong> lineTo</strong> and <strong>arc</strong>. To help with getting the path right, a canvas overlay with the path can be enabled when initializing the plugin.</p>
<div id="attachment_2783" class="wp-caption alignnone" style="width: 630px"><a href="http://joelb.me/scrollpath/" target="_blank"><img class="size-full wp-image-2783 " title="Scrollpath" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0031_19.jpg" alt="Scrollpath" width="620" height="400" /></a><p class="wp-caption-text">Scrollpath</p></div>
<h3>Text effects</h3>
<p>There has been a huge improvement in web typography in the last few years. From just a handful of web-safe fonts that we could use not long ago, we now can embed custom fonts and enhance them with CSS3. The plugins in this section give you a great deal of control over text.</p>
<h4>19. Textillate.js</h4>
<p><a href="http://jschr.github.com/textillate/">Textillate.js</a> (<a href="https://github.com/jschr/textillate">github</a>) is a jQuery plugin that combines the power of <a href="http://daneden.me/animate/" target="_blank">animate.css</a> and <a href="#23">lettering.js</a>, to apply advanced animations on text elements. The animations are CSS3 based, which makes them smooth even on mobile devices. There is a large number of effects to choose from.</p>
<div id="attachment_2782" class="wp-caption alignnone" style="width: 630px"><a href="http://jschr.github.com/textillate/" target="_blank"><img class="size-full wp-image-2782 " title="Textillate.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0030_20.jpg" alt="Textillate.js" width="620" height="400" /></a><p class="wp-caption-text">Textillate.js</p></div>
<h4>20. Arctext.js</h4>
<p><a href="http://tympanus.net/codrops/2012/01/24/arctext-js-curving-text-with-css3-and-jquery/">Arctext.js</a> (<a href="http://tympanus.net/Development/Arctext/">demo</a>) is a jQuery plugin that lets you arrange each letter of a text element along a curved path. Based on lettering.js, it calculates the right rotation of each letter and distributes the letters equally across the imaginary arc of the given radius, and applies the proper CSS3 rotation.</p>
<div id="attachment_2781" class="wp-caption alignnone" style="width: 630px"><a href="http://tympanus.net/Development/Arctext/" target="_blank"><img class="size-full wp-image-2781 " title="Artctext.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0029_21.jpg" alt="Artctext.js" width="620" height="400" /></a><p class="wp-caption-text">Artctext.js</p></div>
<h4>21. Bacon</h4>
<p><a href="http://baconforme.com/">Bacon</a> (<a href="https://github.com/hudsonfoo/jQuery-Bacon">githug</a>) is a jQuery plugin that allows you to wrap text around a bezier curve or a line. This gives you a great deal of typographic control, and as illustrated by the plugin&#8217;s home page, the ability to put bacon strips in the middle of your designs (finally!).</p>
<div id="attachment_2779" class="wp-caption alignnone" style="width: 630px"><a href="http://baconforme.com/" target="_blank"><img class="size-full wp-image-2779 " title="Bacon.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0027_23.jpg" alt="Bacon.js" width="620" height="400" /></a><p class="wp-caption-text">Bacon.js</p></div>
<h4 id="23">22. Lettering.js</h4>
<p><a href="http://letteringjs.com/">Lettering.js</a> (<a href="https://github.com/davatron5000/Lettering.js">github</a>) is a simple but effective jQuery plugin for better web typography. What it does, is split the textual content of an element into individual spans with ordinal <strong>.char#</strong> classes, so you can style each letter individually.</p>
<div id="attachment_2778" class="wp-caption alignnone" style="width: 630px"><a href="http://letteringjs.com/" target="_blank"><img class="size-full wp-image-2778" title="Lettering.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0026_24.jpg" alt="Lettering.js" width="620" height="400" /></a><p class="wp-caption-text">Lettering.js</p></div>
<h4>23. jQuery Shuffle Letters</h4>
<p><a href="http://tutorialzine.com/2011/09/shuffle-letters-effect-jquery/">jQuery Shuffle Letters</a> (<a href="http://demo.tutorialzine.com/2011/09/shuffle-letters-effect-jquery/">demo</a>) is one of our experiments. It creates an interesting effect that randomizes the content of a text element. Here is how to use it:</p>
<pre class="brush:js">// Shuffle the container with custom text
$('h1').shuffleLetters({
	"text": "show this text!" // optional
});</pre>
<p>The text parameter is optional &#8211; if it is missing, the plugin will take the content of the element.</p>
<div id="attachment_2777" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2011/09/shuffle-letters-effect-jquery/" target="_blank"><img class="size-full wp-image-2777" title="jQuery Shuffle Letters" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0025_25.jpg" alt="jQuery Shuffle Letters" width="620" height="400" /></a><p class="wp-caption-text">jQuery Shuffle Letters</p></div>
<h4>24. FitText.js</h4>
<p><a href="http://fittextjs.com/">FitText.js</a> (<a href="https://github.com/davatron5000/FitText.js">github</a>) is a jQuery plugin for inflating web type. It automatically scales the text of an element to take up the full width of its container. This makes the layout responsive and looking sharp on any device.</p>
<div id="attachment_2776" class="wp-caption alignnone" style="width: 630px"><a href="http://fittextjs.com/" target="_blank"><img class="size-full wp-image-2776" title="FitText.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0024_26.jpg" alt="FitText.js" width="620" height="400" /></a><p class="wp-caption-text">FitText.js</p></div>
<h3>Grids</h3>
<p>The plugins in this section make it easy to organize content into grids. They calculate the best way to pack your items densely and align them in real time.</p>
<h4>25. Gridster.js</h4>
<p><a href="http://gridster.net/">Gridster.js</a> (<a href="https://github.com/ducksboard/gridster.js">github</a>) is a jQuery plugin that allows building intuitive draggable layouts from elements spanning multiple columns. You can even dynamically add and remove elements from the grid. Dragging an element causes the others to rearrange and free up place for it, which can be great for user-controlled layouts and dashboards.</p>
<div id="attachment_2775" class="wp-caption alignnone" style="width: 630px"><a href="http://gridster.net/" target="_blank"><img class="size-full wp-image-2775 " title="Gridster.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0023_27.jpg" alt="Gridster.js" width="620" height="400" /></a><p class="wp-caption-text">Gridster.js</p></div>
<h4>26. Freetile</h4>
<p><a href="http://yconst.com/web/freetile/">Freetile</a> (<a href="https://github.com/yconst/Freetile">github</a>) is a plugin for jQuery that enables the organization of webpage content in an efficient, dynamic and responsive layout. It can be applied to a container element and it will attempt to arrange it&#8217;s children in a layout that makes optimal use of screen space, by &#8220;packing&#8221; them in a tight arrangement.</p>
<div id="attachment_2774" class="wp-caption alignnone" style="width: 630px"><a href="http://yconst.com/web/freetile/" target="_blank"><img class="size-full wp-image-2774" title="Freetile" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0022_28.jpg" alt="Freetile" width="620" height="400" /></a><p class="wp-caption-text">Freetile</p></div>
<h4>27. Stalactite</h4>
<p><a href="http://jonobr1.github.com/stalactite/">Stalactite</a> (<a href="https://github.com/jonobr1/stalactite">github</a>) is a library that packs page content depending on the available space. It takes a lazy approach and sorts the elements sequentially with the scrolling of the page, which makes for an interesting effect.</p>
<div id="attachment_2773" class="wp-caption alignnone" style="width: 630px"><a href="http://jonobr1.github.com/stalactite/" target="_blank"><img class="size-full wp-image-2773" title="Stalactite" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0021_29.jpg" alt="Stalactite" width="620" height="400" /></a><p class="wp-caption-text">Stalactite</p></div>
<h3>Custom scrollbars</h3>
<p>Something that we have all wanted to do in one point or another is to customize the appearance of the default browser scrollbars. Some browsers allow this, but it doesn&#8217;t work everywhere. The two plugins below make that possible.</p>
<h4>28. nanoScroller.js</h4>
<p><a href="http://jamesflorentino.github.com/nanoScrollerJS/">nanoScroller.js</a> (<a href="https://github.com/jamesflorentino/nanoScrollerJS">github</a>) is a jQuery plugin that offers a simplistic way of implementing Mac OS X Lion-styled scrollbars for your website. It uses minimal HTML markup and utilizes native scrolling. The plugin works on iPad, iPhone, and some Android Tablets.</p>
<div id="attachment_2772" class="wp-caption alignnone" style="width: 630px"><a href="http://jamesflorentino.github.com/nanoScrollerJS/" target="_blank"><img class="size-full wp-image-2772 " title="nanoScroller.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0020_30.jpg" alt="nanoScroller.js" width="620" height="400" /></a><p class="wp-caption-text">nanoScroller.js</p></div>
<h4>29. jQuery Custom Content Scroller</h4>
<p><a href="http://manos.malihu.gr/jquery-custom-content-scroller/">jQuery Custom Content Scroller</a> (<a href="https://github.com/malihu/malihu-custom-scrollbar-plugin">github</a>) is a custom scrollbar plugin that’s fully customizable with CSS. Features vertical/horizontal scrolling, mouse-wheel support (via the <a href="https://github.com/brandonaaron/jquery-mousewheel" target="_blank">jQuery mousewheel plugin</a>), scrolling buttons, scroll inertia with easing, auto-adjustable scrollbar length, nested scrollbars, scroll-to functionality, user defined callbacks and more.</p>
<div id="attachment_2771" class="wp-caption alignnone" style="width: 630px"><a href="http://manos.malihu.gr/tuts/custom-scrollbar-plugin/complete_examples.html" target="_blank"><img class="size-full wp-image-2771 " title="jQuery Custom Content Scroller" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0019_31.jpg" alt="jQuery Custom Content Scroller" width="620" height="400" /></a><p class="wp-caption-text">jQuery Custom Content Scroller</p></div>
<h3>Backgrounds</h3>
<p>Full screen backgrounds are another popular design trend. The plugins listed here aim to make it easier to set a single image, a gallery or even a video as a background.</p>
<h4>30. Tubular.js</h4>
<p><a href="http://www.seanmccambridge.com/tubular/">Tubular.js</a> is a jQuery plugin that lets you set a YouTube video as your page background. Just attach it to your page wrapper element, set some options, and you&#8217;re on your way:</p>
<pre class="brush:js">$('#wrapper').tubular({videoId: '0Bmhjf0rKe8'});</pre>
<p>The plugin also supports controlling the video with play/pause, setting the volume and more.</p>
<div id="attachment_2769" class="wp-caption alignnone" style="width: 630px"><a href="http://www.seanmccambridge.com/tubular/" target="_blank"><img class="size-full wp-image-2769" title="Tubular.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0017_33.jpg" alt="Tubular.js" width="620" height="400" /></a><p class="wp-caption-text">Tubular.js</p></div>
<h4>31. Backstretch</h4>
<p><a href="http://srobbin.com/jquery-plugins/backstretch/">Backstretch</a> (<a href="https://github.com/srobbin/jquery-backstretch">github</a>) is a simple jQuery plugin that allows you to add a dynamically-resized, slideshow-capable background image to any page or element. It will stretch any image to fit the page or block-level element, and will automatically resize as the window or element size changes. Images are fetched after your page is loaded, so your users won&#8217;t have to wait for the (often large) image to download before using your site. For the curious, and those that don&#8217;t want to use plugins, there is also a technique that can <a title="Quick Tip – Make a Full Screen Image Background With a Line of CSS" href="http://tutorialzine.com/2012/06/quick-tip-fullscreen-backgrounds/">set a full screen background image purely with CSS</a>.</p>
<div id="attachment_2768" class="wp-caption alignnone" style="width: 630px"><a href="http://srobbin.com/jquery-plugins/backstretch/" target="_blank"><img class="size-full wp-image-2768" title="Backstretch" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0016_34.jpg" alt="Backstretch" width="620" height="400" /></a><p class="wp-caption-text">Backstretch</p></div>
<h4>32. Supersized</h4>
<p><a href="http://buildinternet.com/project/supersized/">Supersized</a> (<a href="https://github.com/buildinternet/supersized">github</a>) is an advanced full screen background plugin for jQuery. With it, you can show a set of photos as a slideshow that takes the full width and height of the page. This makes it perfect for photography sites, portfolios, or event sites. The plugin comes with lots of options, supports multiple transition effects and can be extended with custom themes.</p>
<div id="attachment_2804" class="wp-caption alignnone" style="width: 630px"><a href="http://buildinternet.com/project/supersized/" target="_blank"><img class="size-full wp-image-2804" title="Supersized" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/supersized.jpg" alt="Supersized" width="620" height="400" /></a><p class="wp-caption-text">Supersized</p></div>
<h3>Galleries and image effects</h3>
<p>The plugins listed here aim to enhance the way visitors browse images on your site, and let you apply interesting effects that will make your galleries stand out.</p>
<h4>33. jQuery TouchTouch</h4>
<p><a href="http://tutorialzine.com/2012/04/mobile-touch-gallery/">jQuery TouchTouch</a> (<a href="http://demo.tutorialzine.com/2012/04/mobile-touch-gallery/">demo</a>) is a plugin we released last year that aims to be simple to use and to work on mobile devices. It uses CSS transitions to make animations smoother, and preloads images dynamically. Also, it can be completely restyled by modifying a single CSS file.</p>
<div id="attachment_2759" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2012/04/mobile-touch-gallery/" target="_blank"><img class="size-full wp-image-2759" title="jQuery TouchTouch" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0007_43.jpg" alt="jQuery TouchTouch" width="620" height="400" /></a><p class="wp-caption-text">jQuery TouchTouch</p></div>
<h4>34. iPicture</h4>
<p><a href="http://ipicture-square.justmybit.com/">iPicture</a> is a jQuery plugin that can create interactive image walkthroughs. It can overlay tooltips and hints on top of the image, and presents rich content like HTML, photos and videos. It is easy to integrate into your site and can be customized and extended with CSS.</p>
<div id="attachment_2758" class="wp-caption alignnone" style="width: 630px"><a href="http://ipicture-square.justmybit.com/" target="_blank"><img class="size-full wp-image-2758" title="iPicture" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0006_44.jpg" alt="iPicture" width="620" height="400" /></a><p class="wp-caption-text">iPicture</p></div>
<h4>35. Adipoli jQuery Image Hover Plugin</h4>
<p><a href="http://cube3x.com/adipoli-jquery-image-hover-plugin/" target="_blank">Adipoli</a> (<a href="http://cube3x.com/demo/adipoli-jquery-image-hover-plugin/">demo</a>) is a jQuery plugin for creating stylish image hover effects. With it, you can turn images black and white, apply popout, slice and box transitions. To use the plugin, you only need to include the necessary files and define the start and hover effects:</p>
<pre class="brush:js">$('#image1').adipoli({
    'startEffect' : 'normal',
    'hoverEffect' : 'popout'
});</pre>
<p>This makes it the perfect addition to your gallery or portfolio page.</p>
<div id="attachment_2757" class="wp-caption alignnone" style="width: 630px"><a href="http://cube3x.com/demo/adipoli-jquery-image-hover-plugin/" target="_blank"><img class="size-full wp-image-2757" title="Adipoli jQuery Image Hover Plugin" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0005_45.jpg" alt="Adipoli jQuery Image Hover Plugin" width="620" height="400" /></a><p class="wp-caption-text">Adipoli jQuery Image Hover Plugin</p></div>
<h4>36. Swipebox</h4>
<p><a href="http://brutaldesign.github.com/swipebox/">Swipebox</a> (<a href="https://github.com/brutaldesign/swipebox">github</a>) is a lightbox plugin that supports desktop, mobile devices and tablet browsers. It understands swipe gestures and keyboard navigaton and is retina-ready. To enable it, include the plugin JS/CSS files, and add the <em>swipebox</em> class to the images that you want to show in a lightbox:</p>
<pre class="brush:js">&lt;a href="big/image.jpg" title="My Caption"&gt;
	&lt;img src="small/image.jpg" alt="image"&gt;
&lt;/a&gt;</pre>
<p>Like the rest of the plugins in this collection, it can be customized entirely with CSS.</p>
<div id="attachment_2756" class="wp-caption alignnone" style="width: 630px"><a href="http://brutaldesign.github.com/swipebox/" target="_blank"><img class="size-full wp-image-2756" title="Swipebox" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0004_46.jpg" alt="Swipebox" width="620" height="400" /></a><p class="wp-caption-text">Swipebox</p></div>
<h4>37. TiltShift.js</h4>
<p><a href="http://www.noeltock.com/tilt-shift-css3-jquery-plugin/">TiltShift.js</a> (<a href="https://github.com/noeltock/tiltShift.js">github</a>) is a neat plugin that replicates the tilt-shift effect (which causes real-life object to appear as miniatures) using CSS3 image filters. The bad news is that this only works on Chrome and Safari at the moment, but support should gradually land in other browsers as well.</p>
<div id="attachment_2755" class="wp-caption alignnone" style="width: 630px"><a href="http://www.noeltock.com/tilt-shift-css3-jquery-plugin/" target="_blank"><img class="size-full wp-image-2755" title="TiltShift.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0003_47.jpg" alt="TiltShift.js" width="620" height="400" /></a><p class="wp-caption-text">TiltShift.js</p></div>
<h4>38. Threesixty.js</h4>
<p><a href="http://nick-jonas.github.com/threesixtyjs/">Threesixty.js</a> (<a href="https://github.com/modernassembly/threesixtyjs/">github</a>) is a jQuery plugin that creates draggable 360 degree views. You have to provide the plugin with the path to a collection of images of your product (shot from different angles) and Threesixty.js will assemble them into a interactive view. You can drag or use the arrow keys to explore the object from different angles.</p>
<div id="attachment_2754" class="wp-caption alignnone" style="width: 630px"><a href="http://nick-jonas.github.com/threesixtyjs/" target="_blank"><img class="size-full wp-image-2754" title="Threesixty.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0002_48.jpg" alt="Threesixty.js" width="620" height="400" /></a><p class="wp-caption-text">Threesixty.js</p></div>
<h4>39. Swipe.js</h4>
<p><a href="http://swipejs.com/">Swipe.js</a> (<a href="https://github.com/bradbirdsall/Swipe">github</a>) is another responsive slider. What makes it stand apart is that it is specifically targeted at touch devices. This allows it to not only understand gestures, but to also react to touch similarly to a native application. It has resistant bounds and  scroll prevention and is compatible with browsers from IE7 onward.</p>
<div id="attachment_2803" class="wp-caption alignnone" style="width: 630px"><a href="http://swipejs.com/" target="_blank"><img class="size-full wp-image-2803" title="Swipe.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/swipe.jpg" alt="Swipe.js" width="620" height="400" /></a><p class="wp-caption-text">Swipe.js</p></div>
<h4>40. CamanJS</h4>
<p><a href="http://camanjs.com/">CamanJS</a> (<a href="https://github.com/meltingice/CamanJS/">github</a>) is a powerful image manipulation library, built on top of the canvas element. With it, you can manipulate the pixels of an image and achieve an almost Photoshop-like control. If you can remember, this is the library we used a few months ago to build a <a href="http://tutorialzine.com/2013/02/instagram-filter-app/" target="_blank">web app with filters similar to Instagram</a>.</p>
<div id="attachment_2753" class="wp-caption alignnone" style="width: 630px"><a href="http://camanjs.com/" target="_blank"><img class="size-full wp-image-2753" title="CamanJS" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0001_49.jpg" alt="CamanJS" width="620" height="400" /></a><p class="wp-caption-text">CamanJS</p></div>
<h4>41. SpectragramJS</h4>
<p><a href="http://lab.adrianquevedo.com/jquery-spectragram/">Spectragram</a> (<a href="https://github.com/adrianengine/jquery-spectragram">github</a>) is a jQuery plugin that aims to make working with the Instagram API easier. It can fetch user feeds, popular photos, photos with specific tags and more.</p>
<div id="attachment_2752" class="wp-caption alignnone" style="width: 630px"><a href="http://lab.adrianquevedo.com/jquery-spectragram/" target="_blank"><img class="size-full wp-image-2752" title="SpectragramJS" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0000_50.jpg" alt="SpectragramJS" width="620" height="400" /></a><p class="wp-caption-text">SpectragramJS</p></div>
<h3>Misc</h3>
<p>This section holds plugins and libraries that don&#8217;t belong in the other categories but are worth the look.</p>
<h4>42. jQuery Countdown</h4>
<p><a title="Making a jQuery Countdown Timer" href="http://tutorialzine.com/2011/12/countdown-jquery/">jQuery Countdown</a> (<a href="http://demo.tutorialzine.com/2011/12/countdown-jquery/">demo</a>) is a jQuery plugin that shows the remaining days, hours, minutes and seconds to an event, and updates the remaining time with an animation every second. It is easy to use &#8211; include the plugin JS and CSS files, and trigger it on document ready:</p>
<pre class="brush:js">$('#countdown').countdown({
    timestamp   : new Date(2015, 0, 3) // January 3rd, 2015
}</pre>
<p>The countdown will be presented in the <strong>#countdown</strong> div.</p>
<div id="attachment_2780" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2011/12/countdown-jquery/" target="_blank"><img class="size-full wp-image-2780 " title="jQuery Countdown" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0028_22.jpg" alt="jQuery Countdown" width="620" height="400" /></a><p class="wp-caption-text">jQuery Countdown</p></div>
<h4>43. List.js</h4>
<p><a href="http://listjs.com/">List.js</a> (<a href="https://github.com/javve/list/">github</a>) is a library that enhances a plain HTML list with features for searching, sorting and filtering the items inside it. You can add, edit and remove items dynamically. List.js is standalone and doesn&#8217;t depend on jQuery or other libraries to work.</p>
<div id="attachment_2767" class="wp-caption alignnone" style="width: 630px"><a href="http://listjs.com/" target="_blank"><img class="size-full wp-image-2767 " title="List.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0015_35.jpg" alt="List.js" width="620" height="400" /></a><p class="wp-caption-text">List.js</p></div>
<h4>44. jQuery PointPoint</h4>
<p><a href="http://tutorialzine.com/2011/09/jquery-pointpoint-plugin/">jQuery PointPoint</a> (<a href="http://demo.tutorialzine.com/2011/09/jquery-pointpoint-plugin/">demo</a>) is a plugin that helps you draw users’ attention to a specific part of the page. It presents a small arrow next to the mouse cursor. This can be useful for pointing to missed form fields, buttons that need to be pressed, or validation errors that need to be scrolled into view.</p>
<div id="attachment_2770" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2011/09/jquery-pointpoint-plugin/" target="_blank"><img class="size-full wp-image-2770" title="jQuery PointPoint" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0018_32.jpg" alt="jQuery PointPoint" width="620" height="400" /></a><p class="wp-caption-text">jQuery PointPoint</p></div>
<h4>45. Social Feed</h4>
<p><a href="http://gitbox.ru/Social-feed/">Social Feed</a> (<a href="https://github.com/pavelk2/social-feed">github</a>) is a jQuery plugin that presents a feed of the latest public updates on your social accounts. It has a clean design that is built using a template, which you can easily customize.</p>
<div id="attachment_2766" class="wp-caption alignnone" style="width: 630px"><a href="http://gitbox.ru/Social-feed/" target="_blank"><img class="size-full wp-image-2766" title="Social Feed" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0014_36.jpg" alt="Social Feed" width="620" height="400" /></a><p class="wp-caption-text">Social Feed</p></div>
<h4>46. Hook.js</h4>
<p><a href="http://usehook.com/">Hook.js</a> (<a href="https://github.com/jordansinger/Hook.js">github</a>) is an interesting experiment that brings the &#8220;pull to refresh&#8221; feature you often see in mobile apps, to the web. You can use this to update your mobile site with new content, fetch new posts and more.</p>
<div id="attachment_2765" class="wp-caption alignnone" style="width: 630px"><a href="http://usehook.com/" target="_blank"><img class="size-full wp-image-2765" title="Hook.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0013_37.jpg" alt="Hook.js" width="620" height="400" /></a><p class="wp-caption-text">Hook.js</p></div>
<h4>47. jQuery PercentageLoader</h4>
<p><a href="http://widgets.better2web.com/loader/">PercentageLoader</a> (<a href="https://bitbucket.org/Better2Web/jquery.percentageloader" target="_blank">bitbucket</a>) is a jQuery plugin for displaying a progress widget in more visually striking way than the ubiquitous horizontal progress bar / textual counter. It makes use of HTML5 canvas for a rich graphical appearance with only a 10kb (minified) javascript file necessary, using vectors rather than images so can be easily deployed at various sizes.</p>
<div id="attachment_2764" class="wp-caption alignnone" style="width: 630px"><a href="http://widgets.better2web.com/loader/" target="_blank"><img class="size-full wp-image-2764 " title="Loader.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0012_38.jpg" alt="Loader.js" width="620" height="400" /></a><p class="wp-caption-text">Loader.js</p></div>
<h4>48. Chart.js</h4>
<p><a href="http://www.chartjs.org/">Chart.js</a> (<a href="https://github.com/nnnick/Chart.js">github</a>) is a new charting library that uses the HTML5 canvas element and provides fallbacks for IE7/8. The library supports 6 chart types that are animated and fully customizable. Chart.js doesn&#8217;t have any dependencies and is less than 5kb in size. Say goodbye to flash!</p>
<div id="attachment_2763" class="wp-caption alignnone" style="width: 630px"><a href="http://www.chartjs.org/" target="_blank"><img class="size-full wp-image-2763" title="Chart.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0011_39.jpg" alt="Chart.js" width="620" height="400" /></a><p class="wp-caption-text">Chart.js</p></div>
<h4>49. Tooltipster</h4>
<p><a href="http://calebjacob.com/tooltipster/">Tooltipster</a> (<a href="https://github.com/iamceege/tooltipster">github</a>) is a powerful jQuery plugin for displaying tooltips. It works on desktop and mobile browsers, gives you full control over the contents of the tooltips and supports a number of callback functions so you can hook it into your application. If you need something even more lightweght that doesn&#8217;t use JS at all, you can give a try to <a href="http://kushagragour.in/lab/hint/">hint.css</a>.</p>
<div id="attachment_2762" class="wp-caption alignnone" style="width: 630px"><a href="http://calebjacob.com/tooltipster/" target="_blank"><img class="size-full wp-image-2762" title="Tooltipster" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0010_40.jpg" alt="Tooltipster" width="620" height="400" /></a><p class="wp-caption-text">Tooltipster</p></div>
<h4>50. Toolbar.js</h4>
<p><a href="http://paulkinzett.github.com/toolbar/">Toolbar.js</a> (<a href="https://github.com/paulkinzett/toolbar">github</a>) is a jQuery plugin that lets you display a neat pop-up menu. You can choose the actions and icons that are presented in the menu and listen for events. This is perfect for making more of the limited space of a mobile web app interface.</p>
<div id="attachment_2761" class="wp-caption alignnone" style="width: 630px"><a href="http://paulkinzett.github.com/toolbar/" target="_blank"><img class="size-full wp-image-2761" title="Toolbar.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0009_41.jpg" alt="Toolbar.js" width="620" height="400" /></a><p class="wp-caption-text">Toolbar.js</p></div>
<h4>51. gmaps.js</h4>
<p><a href="http://hpneo.github.com/gmaps/">gmaps.js</a> (<a href="https://github.com/hpneo/gmaps">github</a>) is such a useful library that I decided to include it in addition to the 50 plugins above. Gmaps is a powerful library that makes working with Google Maps a great deal easier. You can place markers, listen for events, set the coordinates, zoom level and more, all with a fluid jQuery-like syntax. This is like a breath of fresh air compared to the regular maps JS API, and I highly recommend it.</p>
<div id="attachment_2760" class="wp-caption alignnone" style="width: 630px"><a href="http://hpneo.github.com/gmaps/" target="_blank"><img class="size-full wp-image-2760" title="Gmaps.js" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/i_0008_42.jpg" alt="Gmaps.js" width="620" height="400" /></a><p class="wp-caption-text">Gmaps.js</p></div>
<h3>It&#8217;s a wrap!</h3>
<p>You know of a cool plugin that deserves to be in this list? Share it in the comment section!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=12uGNJlfDc4:812qZXvP7yg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=12uGNJlfDc4:812qZXvP7yg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=12uGNJlfDc4:812qZXvP7yg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=12uGNJlfDc4:812qZXvP7yg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=12uGNJlfDc4:812qZXvP7yg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=12uGNJlfDc4:812qZXvP7yg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=12uGNJlfDc4:812qZXvP7yg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=12uGNJlfDc4:812qZXvP7yg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=12uGNJlfDc4:812qZXvP7yg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=12uGNJlfDc4:812qZXvP7yg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/12uGNJlfDc4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/04/50-amazing-jquery-plugins/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/04/50-amazing-jquery-plugins/</feedburner:origLink></item>
		<item>
		<title>Tutorial: Let’s Build a Lightweight Blog System (part 2)</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/68Gv-iyVuwE/</link>
		<comments>http://tutorialzine.com/2013/03/simple-php-blogging-system-part-2/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 12:55:06 +0000</pubDate>
		<dc:creator>Martin Angelov</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=2738</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/03/simple-php-blogging-system-part-2/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/2738-620x340.jpg" class="attachment-tzmedium" alt="Tutorial: Let&#039;s Build a Lightweight Blog System (part 2)" /></a></div> In the second part of the tutorial, we are creating the views and writing the CSS that will make our lightweight blog responsive on mobile devices.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/03/simple-php-blogging-system-part-2/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/2738-620x340.jpg" class="attachment-tzmedium" alt="Tutorial: Let&#039;s Build a Lightweight Blog System (part 2)" /></a></div> <p>As you remember from <a title="Tutorial: Let’s Build a Lightweight Blog System (part 1)" href="http://tutorialzine.com/2013/03/simple-php-blogging-system/" target="_blank">part 1</a>, in this tutorial we are creating a lightweight blog system that stores posts as markdown files. It uses a number of libraries: for <a href="https://github.com/dflydev/dflydev-markdown" target="_blank">parsing markdown</a>, for <a href="https://github.com/suin/php-rss-writer" target="_blank">creating the RSS feed</a>, and most importantly the <a href="http://noodlehaus.github.com/dispatch/" target="_blank">Dispatch micro framework</a> for giving the application structure.</p>
<p>In this part, we will create the views and the CSS that will make the site responsive on mobile devices.</p>
<h3>The Views</h3>
<p>As you remember from <a title="Tutorial: Let’s Build a Lightweight Blog System (part 1)" href="http://tutorialzine.com/2013/03/simple-php-blogging-system/" target="_blank">the first part</a>, we used a configuration file &#8211; <strong>config.ini</strong> &#8211; to write down the configuration settings of the blog. The last two lines of the file hold the name of the file that holds the layout, and the path to the views:</p>
<h4>app/config.ini (lines 12-14)</h4>
<pre class="brush:plain">views.root = app/views
views.layout = layout</pre>
<p>These settings are used internally by the Dispatch framework. The first line tells it where to find the views for the site (so that you only need to specify a name when rendering them) and the second is the layout. This is an HTML template that is included with every view that you render. This is a standard HTML5 document with a few additional meta tags to make it mobile-friendly:</p>
<h4>app/views/layout.html.php</h4>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;?php echo isset($title) ? _h($title) : config('blog.title') ?&gt;&lt;/title&gt;

	&lt;meta charset="utf-8" /&gt;
	&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
	&lt;meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" user-scalable="no" /&gt;
	&lt;meta name="description" content="&lt;?php echo config('blog.description')?&gt;" /&gt;

	&lt;link rel="alternate" type="application/rss+xml" title="&lt;?php echo config('blog.title')?&gt;  Feed" href="&lt;?php echo site_url()?&gt;rss" /&gt;

	&lt;link href="&lt;?php echo site_url() ?&gt;assets/css/style.css" rel="stylesheet" /&gt;
	&lt;link href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700&amp;subset=latin,cyrillic-ext" rel="stylesheet" /&gt;

	&lt;!--[if lt IE 9]&gt;
		&lt;script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"&gt;&lt;/script&gt;
	&lt;![endif]--&gt;

&lt;/head&gt;
&lt;body&gt;

	&lt;aside&gt;

		&lt;h1&gt;&lt;a href="&lt;?php echo site_url() ?&gt;"&gt;&lt;?php echo config('blog.title') ?&gt;&lt;/a&gt;&lt;/h1&gt;

		&lt;p class="description"&gt;&lt;?php echo config('blog.description')?&gt;&lt;/p&gt;

		&lt;ul&gt;
			&lt;li&gt;&lt;a href="&lt;?php echo site_url() ?&gt;"&gt;Home&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="http://tutorialzine.com/members/"&gt;Members area&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="http://tutorialzine.com/contact/"&gt;Contact Us&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;

		&lt;p class="author"&gt;&lt;?php echo config('blog.authorbio') ?&gt;&lt;/p&gt;

	&lt;/aside&gt;

	&lt;section id="content"&gt;

		&lt;?php echo content()?&gt;

	&lt;/section&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>In the head section I am also including a font from Google Web Fonts, and a HTML5 shim that will make it work on browsers as old as IE8. Throughout this view, I am printing the settings we put in config.ini, by using the <strong>config()</strong> function provided by Dispatch. This will let you customize the blog solely from the config file. Another function provided by dispatch is <strong>site_url()</strong> which gives you the absolute URL of your blog, so that you can include stylesheets, images or use it as the base for links.</p>
<p>Notice the call to the <strong>content()</strong> function. What this does, is print the HTML generated by one of the other views. This allows for other views to be &#8220;nested&#8221; inside it. For example running this code:</p>
<h4>index.php (lines 29-33)</h4>
<pre class="brush:php">	render('main',array(
		'page' =&gt; $page,
		'posts' =&gt; $posts,
		'has_pagination' =&gt; has_pagination($page)
	));</pre>
<p>Will embed the main.html.php template you see below in the view. The <strong>page</strong>, <strong>posts</strong> and <strong>has_pagination</strong> members of the array will be available as variables:</p>
<h4>app/views/main.html.php</h4>
<pre class="brush:html">&lt;?php foreach($posts as $p):?&gt;
	&lt;div class="post"&gt;
		&lt;h2&gt;&lt;a href="&lt;?php echo $p-&gt;url?&gt;"&gt;&lt;?php echo $p-&gt;title ?&gt;&lt;/a&gt;&lt;/h2&gt;

		&lt;div class="date"&gt;&lt;?php echo date('d F Y', $p-&gt;date)?&gt;&lt;/div&gt;

		&lt;?php echo $p-&gt;body?&gt;
	&lt;/div&gt;
&lt;?php endforeach;?&gt;

&lt;?php if ($has_pagination['prev']):?&gt;
	&lt;a href="?page=&lt;?php echo $page-1?&gt;" class="pagination-arrow newer"&gt;Newer&lt;/a&gt;
&lt;?php endif;?&gt;

&lt;?php if ($has_pagination['next']):?&gt;
	&lt;a href="?page=&lt;?php echo $page+1?&gt;" class="pagination-arrow older"&gt;Older&lt;/a&gt;
&lt;?php endif;?&gt;</pre>
<p>This will present a list of posts on the screen, with optional back/forward arrows. The other template that also operates with posts, is post.html.php, which shows a single post:</p>
<h4>app/views/post.html.php</h4>
<pre class="brush:html">&lt;div class="post"&gt;

	&lt;h2&gt;&lt;?php echo $p-&gt;title ?&gt;&lt;/h2&gt;

	&lt;div class="date"&gt;&lt;?php echo date('d F Y', $p-&gt;date)?&gt;&lt;/div&gt;

	&lt;?php echo $p-&gt;body?&gt;

&lt;/div&gt;</pre>
<p>This is the view that you would need to edit if you want to add social sharing buttons or comment widgets from Facebook or Disqus.</p>
<p>And lastly, here is the 404 page:</p>
<h4>app/views/404.html.php</h4>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta charset="utf-8" /&gt;

	&lt;title&gt;404 Not Found | &lt;?php echo config('blog.title') ?&gt;&lt;/title&gt;
	&lt;link href="&lt;?php echo site_url() ?&gt;assets/css/style.css" rel="stylesheet" /&gt;

	&lt;!-- Include the Open Sans font --&gt;
	&lt;link href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700&amp;subset=latin,cyrillic-ext" rel="stylesheet" /&gt;

&lt;/head&gt;
&lt;body&gt;

	&lt;div class="center message"&gt;
		&lt;h1&gt;This page doesn't exist!&lt;/h1&gt;
		&lt;p&gt;Would you like to try our &lt;a href="&lt;?php echo site_url() ?&gt;"&gt;homepage&lt;/a&gt; instead?&lt;/p&gt;
	&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Note that this view is a complete HTML5 document. This is because it doesn&#8217;t follow the same layout as the rest of the blog. In the Dispatch framework, you can render a view that does not get embedded in the site layout, by passing <strong>false</strong> as the last argument to render:</p>
<h4>app/includes/functions.php (lines 95-97)</h4>
<pre class="brush:php">function not_found(){
	error(404, render('404', null, false));
}</pre>
<p>Now that we have all the fancy HTML printed to the screen, let&#8217;s style it!</p>
<h3>The CSS</h3>
<p>In this part of the tutorial, we will write the CSS that will make the blog pretty and responsive. All these styles are located in the file <strong>assets/css/styles.css</strong> that you can edit to your liking. One of the reason this blog is so fast to load is because the design is entirely CSS-based, and I haven&#8217;t used any images (thanks to a data url trick that you will see in a moment).</p>
<p>Let&#8217;s start with the headings:</p>
<pre class="brush:css">h1{
	font: 14px 'Open Sans Condensed', sans-serif;
	text-transform:uppercase;
	margin-bottom: 24px;
}

h2{
	font: 48px 'Open Sans Condensed', sans-serif;
}

h1 a, h2 a{
	color:#4f4f4f !important;
	text-decoration: none !important;
}</pre>
<p>Next is the content and posts. Notice the background image to <code>.post .date:before</code>.</p>
<pre class="brush:css">#content{
	position: absolute;
	font: 16px/1.5 'PT Serif', Times, Cambria, serif;
	width: 580px;
	left: 50%;
	margin-left: -100px;
}

#content p,
#content ul{
	margin-bottom:25px;
}

#content ul{
	padding-left:20px;
}

#content li{
	margin-bottom:5px;
}

/* The actual post styles */

.post{
	padding: 50px 0 15px 0;
	border-bottom: 1px solid #dfdfdf;
}

.post .date{
	font: bold 12px 'Open Sans Condensed', sans-serif;
	text-transform: uppercase;
	color: #a7a7a7;
	margin: 24px 0 30px 20px;
	position: relative;
}

/* The calendar icon is set as a data url */

.post .date:before{
	width:18px;
	height:18px;
	position:absolute;
	content:'';
	left: -22px;
	top: -1px;
	background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA..')
}</pre>
<p>This is the <a href="http://en.wikipedia.org/wiki/Data_URI_scheme" target="_blank">Data URI scheme</a>, which allows for data which would normally be a separate file to to be presented inline. So by encoding the icon in base64 and placing it directly in the background property, I am saving a request to the server.</p>
<p>Next, we have the left static bar, which always takes up the full height of the page:</p>
<pre class="brush:css">aside{
	position: fixed;
	width: 250px;
	height: auto;
	top: 0;
	left: 50%;
	bottom: 0;
	margin-left: -460px;
	padding-top: 65px;
}

aside p.description{
	font-size: 13px;
	line-height: 1.8;
	margin-bottom: 40px;
	color:#787878;
}

/* The main navigation links */
aside ul{
	font: bold 18px 'Open Sans Condensed', sans-serif;
	text-transform: uppercase;
	list-style:none;
}

aside ul li a{
	text-decoration:none !important;
	display:inline-block;
	padding:0 3px;
	margin:2px 0 2px 10px;
}

aside ul li a:hover{
	background-color:#389dc1;
	color:#fff;
}

aside p.author{
	position: absolute;
	bottom: 20px;
	height: 30px;
	font-size: 12px;
	color: #888;
}</pre>
<div id="attachment_2729" class="wp-caption alignnone" style="width: 630px"><a href="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/simple-php-blogging-system.png"><img class="size-full wp-image-2729 " title="Lightweight PHP Blog System" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/simple-php-blogging-system.png" alt="Lightweight PHP Blog System" width="620" height="400" /></a><p class="wp-caption-text">The Main Bar</p></div>
<p>After this, we will style the pagination arrows:</p>
<pre class="brush:css">.pagination-arrow{
	display: inline-block;
	font: bold 16px/1 'Open Sans Condensed', sans-serif;
	border: 1px solid #ccc;
	border-radius: 3px;
	margin: 20px 15px;
	color: #555 !important;
	padding: 8px 12px;
	text-decoration: none !important;
	text-transform: uppercase;
	position: relative;
}

.pagination-arrow.newer{
	padding-left: 20px;
}

.pagination-arrow.older{
	padding-right: 20px;
	float:right;
}

.pagination-arrow.newer:before,
.pagination-arrow.older:before{
	content: '';
	border: 5px solid #555;
	border-color: transparent #555 transparent transparent;
	width: 0;
	height: 0;
	position: absolute;
	left: 3px;
	top: 12px;
}

.pagination-arrow.older:before{
	left:auto;
	right:3px;
	border-color: transparent transparent transparent #555;
}</pre>
<p>I am using an old border trick to create triangular arrows with CSS. Next are the styles, specific to the 404 page:</p>
<pre class="brush:css">.message{
	padding-top:50px;
}

.message h1{
	font-size:36px;
	margin-bottom: 18px;
}

.message p{
	font-size:13px;
}

.center{
	text-align:center;
}</pre>
<p>And lastly, we have the media queries, that will tweak the layout depending on the resolution of the device:</p>
<pre class="brush:css">/* Small tablets */

@media all and (max-width: 1024px) {
	aside{
		left: 5%;
		margin-left: 0;
		width: 25%;
	}

	#content{
		left: 35%;
		margin-left: 0;
		width: 60%;
	}
}

/* Smartphones */

@media all and (max-width: 840px) {

	h2{
		font-size:36px;
	}

	aside{
		margin-left: 0;
		position: static;
		width: 90%;
		padding: 5% 5% 0 5%;
		text-align: center;
	}

	aside .description{
		margin-bottom: 25px;
	}

	aside li {
		display: inline-block;
	}

	aside ul{
		text-align: center;
	}

	aside .author{
		display: none;
	}

	#content{
		position: static;
		padding: 5%;
		padding-top: 0;
		width: 90%;
	}
}</pre>
<p><strong>With this our lightweight flat-file blog is ready!</strong></p>
<h3>Done!</h3>
<p>One benefit of using a flat file system is that it is much simpler to set up and deploy. Thanks to the markdown format, it is also incredibly easy to write blog posts. As everything is a file in the blog folder, you can use git to manage your blog&#8217;s revisions and to deploy it. The system is also highly customizable and with some CSS you can adapt it to your existing website.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=68Gv-iyVuwE:AEtYbNN47G4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=68Gv-iyVuwE:AEtYbNN47G4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=68Gv-iyVuwE:AEtYbNN47G4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=68Gv-iyVuwE:AEtYbNN47G4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=68Gv-iyVuwE:AEtYbNN47G4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=68Gv-iyVuwE:AEtYbNN47G4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=68Gv-iyVuwE:AEtYbNN47G4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=68Gv-iyVuwE:AEtYbNN47G4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=68Gv-iyVuwE:AEtYbNN47G4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=68Gv-iyVuwE:AEtYbNN47G4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/68Gv-iyVuwE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/03/simple-php-blogging-system-part-2/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/03/simple-php-blogging-system-part-2/</feedburner:origLink></item>
		<item>
		<title>Tutorial: Let’s Build a Lightweight Blog System (part 1)</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/Hfvxbc7PeGA/</link>
		<comments>http://tutorialzine.com/2013/03/simple-php-blogging-system/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 20:17:22 +0000</pubDate>
		<dc:creator>Martin Angelov</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=2716</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/03/simple-php-blogging-system/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/2716-620x340.jpg" class="attachment-tzmedium" alt="Tutorial: Let&#039;s Build a Lightweight Blog System (part 1)" /></a></div> In this tutorial, we will be making a lightweight blog system with PHP and CSS3. It won't require a database and it will feature a responsive design that adapts to the screen size of the device.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/03/simple-php-blogging-system/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/2716-620x340.jpg" class="attachment-tzmedium" alt="Tutorial: Let&#039;s Build a Lightweight Blog System (part 1)" /></a></div> <p>In this tutorial, we will be making a lightweight blog system with PHP and CSS3. The blog posts will be stored in a folder as files (in the markdown format). The system will not use a database and will not have an admin panel, which makes it perfect for small blogs with only one author. It will have an RSS feed and a JSON read-only API, and will feature a completely responsive design that adapts to the screen size of the device.</p>
<p>In this first part, we are going to write the PHP backend, and in <a title="Tutorial: Let’s Build a Lightweight Blog System (part 2)" href="http://tutorialzine.com/2013/03/simple-php-blogging-system-part-2/">part 2</a>, we will code the HTML and CSS. Let&#8217;s begin!</p>
<h3>The posts</h3>
<p>Posts will be named in the following pattern: <strong>2013-03-14_url-of-the-post.md</strong> and they will be stored in the <strong>posts/</strong> folder. The first part is the date of the post (you can optionally include a time as well if you have more than one post for that day), followed by an underscore, and the title of the post. The underscore is used by the system to separate the title from the date. This convention also has the benefit that posts can easily be sorted by publication date. When displayed on your blog, this post will have an URL like <strong>http://example.com/2013/03/url-of-the-post</strong></p>
<p>Each post will be in the markdown format (hence the extension). The only requirement is that the first line of the markdown document is formatted as a H1 heading. For example:</p>
<pre class="brush:plain"># The title of the blog post

Body of the blog post.</pre>
<p>This will make the first line a H1 heading. If this is the first time you&#8217;ve seen markdown, the next section is for you.</p>
<h3>What is markdown</h3>
<p><a href="http://en.wikipedia.org/wiki/Markdown">Markdown</a> is a lightweight format for writing text. It has a minimal and intuitive syntax, which is transformed into HTML. This makes it perfect for our simple blog system, as it won&#8217;t have an admin panel nor database &#8211; all the posts will be stored in a folder as files.</p>
<p>We can&#8217;t simply display the raw markdown directly, first we have to transform it into HTML. There are a number of libraries that can do this (in every major language), but for this tutorial I chose the <a href="https://github.com/dflydev/dflydev-markdown" target="_blank">PHP Markdown library</a>, as it integrates nicely with composer.</p>
<h3>Composer</h3>
<p><a href="http://getcomposer.org/doc/00-intro.md" target="_blank">Composer</a> is a dependency manager for PHP. With it, you can declare what libraries your project depends on, and they will be downloaded automatically for you. We will use it to include two libraries in this project:</p>
<ul>
<li><a href="https://github.com/dflydev/dflydev-markdown" target="_blank">PHP Markdown</a>, which I mentioned above;</li>
<li><a href="https://github.com/suin/php-rss-writer" target="_blank">RSS Writer</a>, which will output the RSS feed for the blog.</li>
</ul>
<p>You could simply download these libraries and use them straight away, but let&#8217;s see how we can do the same with composer (note that you need to follow these steps only if you are starting from scratch; the zip accompanying the tutorial already includes all the necessary files).</p>
<p>First we have to declare which packages the current project depends on, in a file named <strong>composer.json</strong>:</p>
<pre class="brush:js">{
    "require": {
	"dflydev/markdown": "v1.0.2",
	"suin/php-rss-writer": "&gt;=1.0"
    }
}</pre>
<p>You can obtain the specific identifiers for the libraries and their versions from the <a href="https://packagist.org/" target="_blank">composer package repository</a>, or by following the instructions that each library included on its github repo.</p>
<p>The next steps are to install composer into your project (follow <a href="https://packagist.org/" target="_blank">these instructions</a>), and to run the install command. This will download all the appropriate libraries and place them in the <strong>vendor/ </strong>folder. All that is left is to include the composer autoloader in your php scripts:</p>
<pre class="brush:php">require 'vendor/autoload.php';</pre>
<p>This will let you create instances of the libraries without having to include their PHP files individually.</p>
<div id="attachment_2729" class="wp-caption alignnone" style="width: 630px"><a href="http://demo.tutorialzine.com/2013/03/simple-php-blogging-system/"><img class="size-full wp-image-2729" title="Lightweight PHP Blog System" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/simple-php-blogging-system.png" alt="Lightweight PHP Blog System" width="620" height="400" /></a><p class="wp-caption-text">Lightweight PHP Blog System</p></div>
<h3>The configuration file</h3>
<p>I am using one additional PHP library - <a href="http://noodlehaus.github.com/dispatch/" target="_blank">Dispatch</a>. This is a tiny routing framework that <a title="24 Cool PHP Libraries You Should Know About" href="http://tutorialzine.com/2013/02/24-cool-php-libraries-you-should-know-about/">I&#8217;ve mentioned before</a>. It will let us listen for requests on specific URLs and render views. Unfortunately it doesn&#8217;t have Composer support at the moment, so we have to download it separately and include it into the project.</p>
<p>A neat feature of this framework is that it lets you write configuration settings in an INI file, which you can access with the <strong>config()</strong> function call. There are a number of settings you need to fill in for your blog to work:</p>
<h4>app/config.ini</h4>
<pre class="brush:plain">; The URL of your blog
site.url = http://demo.tutorialzine.com/2013/03/simple-php-blogging-system/

; Blog info

blog.title = "Tutorialzine Demo Blog"
blog.description = "This is a lightweight and responsive blogging system.."
blog.authorbio = "Created by ..."

posts.perpage = 5

; Framework config. No need to edit.
views.root = app/views
views.layout = layout</pre>
<p>These settings are used throughout the views, so when you are setting up a new blog you won&#8217;t need to edit anything else.</p>
<h3>The PHP code</h3>
<p>Here is our main PHP file:</p>
<h4>index.php</h4>
<pre class="brush:php">// This is the composer autoloader. Used by
// the markdown parser and RSS feed builder.
require 'vendor/autoload.php';

// Explicitly including the dispatch framework,
// and our functions.php file
require 'app/includes/dispatch.php';
require 'app/includes/functions.php';

// Load the configuration file
config('source', 'app/config.ini');

// The front page of the blog.
// This will match the root url
get('/index', function () {

	$page = from($_GET, 'page');
	$page = $page ? (int)$page : 1;

	$posts = get_posts($page);

	if(empty($posts) || $page &lt; 1){
 		// a non-existing page
 		not_found();
 	}

     render('main',array(
     	'page' =&gt; $page,
		'posts' =&gt; $posts,
		'has_pagination' =&gt; has_pagination($page)
	));
});

// The post page
get('/:year/:month/:name',function($year, $month, $name){

	$post = find_post($year, $month, $name);

	if(!$post){
		not_found();
	}

	render('post', array(
		'title' =&gt; $post-&gt;title .' ⋅ ' . config('blog.title'),
		'p' =&gt; $post
	));
});

// The JSON API
get('/api/json',function(){

	header('Content-type: application/json');

	// Print the 10 latest posts as JSON
	echo generate_json(get_posts(1, 10));
});

// Show the RSS feed
get('/rss',function(){

	header('Content-Type: application/rss+xml');

	// Show an RSS feed with the 30 latest posts
	echo generate_rss(get_posts(1, 30));
});

// If we get here, it means that
// nothing has been matched above

get('.*',function(){
	not_found();
});

// Serve the blog
dispatch();</pre>
<p>The <strong>get()</strong> function of Dispatch creates a pattern that is matched against the currently visited URL. If they match, the callback function is executed and no more patterns are matched. The last <strong>get()</strong> call sets up a pattern that matches every URL in which case we show a 404 error.</p>
<p>Some of the functions you see above are not part of the Dispatch framework. They are specific to the blog and are defined in the <em>functions.php</em> file:</p>
<ul>
<li><strong>get_post_names()</strong> uses the glob function to find all the posts and to sort them in alphabetical order (as the date is the first part of the file name, this effectively sorts them by their publishing date);</li>
<li><strong>get_posts()</strong> takes the list of names returned by get_post_names() and parses the files. It uses the Markdown library to convert them to HTML;</li>
<li><strong>find_post()</strong> searches for a post by month, day and name;</li>
<li><strong>has_pagination()</strong> is a helper function that is used in the views (we will look at them in the next part);</li>
<li><strong>not_found()</strong> is a wrapper around Dispatch&#8217;s error function but renders a view as the message;</li>
<li><strong>generate_rss()</strong> uses the RSS Library we mentioned above, and turns an array of posts into a valid RSS feed;</li>
<li><strong>generate_json()</strong> is only a wrapper around json_encode, but I included it for consistency with the generate_rss function.</li>
</ul>
<p>And here is the source:</p>
<h4>app/includes/functions.php</h4>
<pre class="brush:php">use dflydev\markdown\MarkdownParser;
use \Suin\RSSWriter\Feed;
use \Suin\RSSWriter\Channel;
use \Suin\RSSWriter\Item;

/* General Blog Functions */

function get_post_names(){

	static $_cache = array();

	if(empty($_cache)){

		// Get the names of all the
		// posts (newest first):

		$_cache = array_reverse(glob('posts/*.md'));
	}

	return $_cache;
}

// Return an array of posts.
// Can return a subset of the results
function get_posts($page = 1, $perpage = 0){

	if($perpage == 0){
		$perpage = config('posts.perpage');
	}

	$posts = get_post_names();

	// Extract a specific page with results
	$posts = array_slice($posts, ($page-1) * $perpage, $perpage);

	$tmp = array();

	// Create a new instance of the markdown parser
	$md = new MarkdownParser();

	foreach($posts as $k=&gt;$v){

		$post = new stdClass;

		// Extract the date
		$arr = explode('_', $v);
		$post-&gt;date = strtotime(str_replace('posts/','',$arr[0]));

		// The post URL
		$post-&gt;url = site_url().date('Y/m', $post-&gt;date).'/'.str_replace('.md','',$arr[1]);

		// Get the contents and convert it to HTML
		$content = $md-&gt;transformMarkdown(file_get_contents($v));

		// Extract the title and body
		$arr = explode('&lt;/h1&gt;', $content);
		$post-&gt;title = str_replace('&lt;h1&gt;','',$arr[0]);
		$post-&gt;body = $arr[1];

		$tmp[] = $post;
	}

	return $tmp;
}

// Find post by year, month and name
function find_post($year, $month, $name){

	foreach(get_post_names() as $index =&gt; $v){
		if( strpos($v, "$year-$month") !== false &amp;&amp; strpos($v, $name.'.md') !== false){

			// Use the get_posts method to return
			// a properly parsed object

			$arr = get_posts($index+1,1);
			return $arr[0];
		}
	}

	return false;
}

// Helper function to determine whether
// to show the pagination buttons
function has_pagination($page = 1){
	$total = count(get_post_names());

	return array(
		'prev'=&gt; $page &gt; 1,
		'next'=&gt; $total &gt; $page*config('posts.perpage')
	);
}

// The not found error
function not_found(){
	error(404, render('404', null, false));
}

// Turn an array of posts into an RSS feed
function generate_rss($posts){

	$feed = new Feed();
	$channel = new Channel();

	$channel
		-&gt;title(config('blog.title'))
		-&gt;description(config('blog.description'))
		-&gt;url(site_url())
		-&gt;appendTo($feed);

	foreach($posts as $p){

		$item = new Item();
		$item
			-&gt;title($p-&gt;title)
			-&gt;description($p-&gt;body)
			-&gt;url($p-&gt;url)
			-&gt;appendTo($channel);
	}

	echo $feed;
}

// Turn an array of posts into a JSON
function generate_json($posts){
	return json_encode($posts);
}</pre>
<p>At the top of the file, we have a number of <strong>use</strong> statements, which import the necessary namespaces (read <a href="http://php.net/manual/en/language.namespaces.importing.php" target="_blank">more about PHP&#8217;s namespaces</a>).</p>
<p>The last thing we need to do, is to rewrite all requests so they hit index.php. Otherwise our fancy routes wouldn&#8217;t work. We can do this with an .htaccess file:</p>
<pre class="brush:plain">RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php/$1 [L]</pre>
<p>If a file or folder does not exist, the request will be redirected to index.php.</p>
<h3>It&#8217;s a wrap!</h3>
<p><a title="Tutorial: Let’s Build a Lightweight Blog System (part 2)" href="http://tutorialzine.com/2013/03/simple-php-blogging-system-part-2/">Continue with the second part</a>, where we are creating the views and the responsive CSS design.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Hfvxbc7PeGA:TvjEmgg77DA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Hfvxbc7PeGA:TvjEmgg77DA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Hfvxbc7PeGA:TvjEmgg77DA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Hfvxbc7PeGA:TvjEmgg77DA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Hfvxbc7PeGA:TvjEmgg77DA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Hfvxbc7PeGA:TvjEmgg77DA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Hfvxbc7PeGA:TvjEmgg77DA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Hfvxbc7PeGA:TvjEmgg77DA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=Hfvxbc7PeGA:TvjEmgg77DA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=Hfvxbc7PeGA:TvjEmgg77DA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/Hfvxbc7PeGA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/03/simple-php-blogging-system/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/03/simple-php-blogging-system/</feedburner:origLink></item>
		<item>
		<title>Design Tips For Developers</title>
		<link>http://feedproxy.google.com/~r/Tutorialzine/~3/g8UBNwvGLa8/</link>
		<comments>http://tutorialzine.com/2013/03/design-tips-for-developers/#comments</comments>
		<pubDate>Tue, 05 Mar 2013 20:35:38 +0000</pubDate>
		<dc:creator>Luke Clum</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://tutorialzine.com/?p=2701</guid>
		<description><![CDATA[<div><a href="http://tutorialzine.com/2013/03/design-tips-for-developers/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/2701-620x340.jpg" class="attachment-tzmedium" alt="Design Tips For Developers" /></a></div> Developers shouldn't feel like they need to get an arts degree to have a working understanding of design. Here are a few basic tips to get you started.]]></description>
				<content:encoded><![CDATA[<div><a href="http://tutorialzine.com/2013/03/design-tips-for-developers/"><img width="620" height="340" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/2701-620x340.jpg" class="attachment-tzmedium" alt="Design Tips For Developers" /></a></div> <p>Professionals in both fields seem to have realized of late that it helps for designers to have an understanding of web development, and for developers to know about good design practices. And yet, this awareness doesn&#8217;t often get carried very far in practice. It feels so much safer to stay within your sphere of comfort, where arcane design terms don’t get tossed around with bewildering frequency. But a lot of headaches and misunderstandings can be evaded by understanding just a few of the basic principles that underlie good design.</p>
<h3>1. Space</h3>
<p>The hallowed concept that designers call white space (otherwise known as negative space) is one of the most essential components of web design. It’s the margins, the padding, the <a href="http://www.smashingmagazine.com/2009/08/20/typographic-design-survey-best-practices-from-the-best-blogs/" target="_blank">letter spacing and line height</a> within text; it’s every part of the site that isn&#8217;t filled with some eye-catching object (meaning that patterns and images can sometimes be a part of white space, as long as they recede from focus, rather than grab at it).</p>
<div id="attachment_2702" class="wp-caption alignnone" style="width: 660px"><img class="size-full wp-image-2702" title="White Space" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/DT-01-e1362497217258.png" alt="White Space" width="650" height="320" /><p class="wp-caption-text">White Space</p></div>
<p>For example, <a href="http://www.loveandlemons.com/" target="_blank">this blog</a> has plenty of white space, although you might at first think that the patterns on the top and sides don’t count. But they do, because they’re low-contrast and restful to look at. That’s the point of white space; it rests the eye, creating pauses in content intake that stops users from getting overwhelmed by an excess of information. Notice how all the sections in the sidebar take up so much space to say very little; this makes the text more readable and sections more distinguishable. All these spaces are what makes this site feel so clean, well-organized, and welcoming.</p>
<p><strong>Tips on White Space</strong>:</p>
<ul>
<li>Make sure blocks of text are always broken up with shorter paragraphs, lists, or images.</li>
<li>Soft textures, patterns, and images can be used as white space, but don’t overdo them. Too many conflicting elements become confusing, no matter how low-contrast they are.</li>
</ul>
<h3>2. Contrast</h3>
<p>There are a lot of ways to achieve contrast in design, but at least a few of them must be employed to make a website look good. There’s contrast in color; people unconsciously respond to this whenever they see a brightly-colored button against a neutral background. There are also ways to use contrasting sizes and shapes. In all its forms, contrast is used to call out important sections, and add a sense of movement and interest to elements that would look static and plain if they were too similar.</p>
<div id="attachment_2703" class="wp-caption alignnone" style="width: 660px"><img class="size-full wp-image-2703" title="Bold Contrast" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/DT-02-e1362497343219.png" alt="Bold Contrast" width="650" height="314" /><p class="wp-caption-text">Bold Contrast</p></div>
<p><a href="http://everlovinpress.com/" target="_blank">This website</a> uses all three types of contrast mentioned above: the bright, flat blocks of color pop out against the light, textured background. The organic shape of the logo on the left contrasts with the rest of the type, which are all blocky and architectural. Furthermore, the title typeface stands out because it’s so much larger than the others.</p>
<p><strong>Tips on Contrast</strong>:</p>
<ul>
<li>Refer to common <a href="http://webdesign.tutsplus.com/articles/design-theory/an-introduction-to-color-theory-for-web-designers/" target="_blank">color rules</a>, using a color wheel to determine which hues look most striking when put together.</li>
<li>Typefaces don’t always need to be very different in scale and in shape, but at least one of these contrasts will always help a design.</li>
</ul>
<h3>3. Balance</h3>
<p>The last major concept to conquer is one that deals with the arrangement of the page. If a layout is too lopsided, it won’t look right. On the other hand, if it’s completely centered, it risks looking stale and boring. Balance is struck when the visual weight on one side of a page is countered by elements on the other side.</p>
<div id="attachment_2704" class="wp-caption alignnone" style="width: 659px"><img class="size-full wp-image-2704" title="Visual Balance" src="http://cdn.tutorialzine.com/wp-content/uploads/2013/03/DT-03-e1362497504631.png" alt="Visual Balance" width="649" height="321" /><p class="wp-caption-text">Visual Balance</p></div>
<p>For example, you might at first identify <a href="http://boarshead.com/" target="_blank">this site</a> as being off-balance because the banner and the logo are both on the left-hand side. However, the visual weight they give to that side of the page are met on the other side with the navigation bar and a striking photo.</p>
<p><strong>Tips on Balance</strong>:</p>
<ul>
<li>Half close your eyes when you check a page for its balance. The elemental block shapes will be easier to identify, and distracting details will be less apparent.</li>
<li>Balance doesn&#8217;t mean exactly equal. A large block of orange on one side of a page can be balanced by an orange button on the other side.</li>
<li>Check out some <a href="http://www.shutterstock.com/blog/2013/01/design_tips_infographic_pro/" target="_blank">infographic design tips</a> to get a better sense of balance; layout is one of the most important considerations in this field.</li>
</ul>
<p>Developers shouldn&#8217;t feel like they need to get an arts degree to have a working understanding that gives designers a leg up with their work. All it takes is a general understanding to be able to cooperate in creating great web design. An understanding of these few principles will add immeasurably to your interaction with designers, and the visual aspects any project.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=g8UBNwvGLa8:xsn-YttubAg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=g8UBNwvGLa8:xsn-YttubAg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=g8UBNwvGLa8:xsn-YttubAg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=g8UBNwvGLa8:xsn-YttubAg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=g8UBNwvGLa8:xsn-YttubAg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=g8UBNwvGLa8:xsn-YttubAg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=g8UBNwvGLa8:xsn-YttubAg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=g8UBNwvGLa8:xsn-YttubAg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?i=g8UBNwvGLa8:xsn-YttubAg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Tutorialzine?a=g8UBNwvGLa8:xsn-YttubAg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Tutorialzine?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Tutorialzine/~4/g8UBNwvGLa8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tutorialzine.com/2013/03/design-tips-for-developers/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://tutorialzine.com/2013/03/design-tips-for-developers/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc
Page Caching using apc
Object Caching 1494/1529 objects using apc
Content Delivery Network via cdn.tutorialzine.com

 Served from: tutorialzine.com @ 2013-05-16 08:25:55 by W3 Total Cache -->
