<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel> 
 <title>Medianic Web Design</title>
  <link>http://www.medianic.co.uk</link>
  <description>Medianic Web Design</description>
  <language>en-uk</language>
  <copyright>Copyright 2012 Medianic Web Design</copyright>
  <lastBuildDate>Sat, 19 May 2012 19:57:01 +0100</lastBuildDate>

			  <item>
			  <title><![CDATA[Ticksy: A Support Story]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=875</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=875</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25073&c=226674713  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25073&c=226674713  border= 0  alt=   /></a><p>When I started designing and developing themes and templates for the <a href= http://themeforest.net >ThemeForest</a> marketplace five years ago, customer support was easy. I€™d get an email or two a day, answer them, and move on.</p>
<p>But as sales picked up, things became complicated. One or two emails turned into five, which turned into ten, which turned into twenty! I€™d respond to a question, and get another question in response. Emails were lost. Customers were frustrated. It was all a big mess.<br />
<span id= more-25073 ></span></p>
<blockquote class= pullquote ><p>Email was no longer a tenable support solution.</p></blockquote>
<p>Two years ago, I decided that enough was enough. Email was no longer a tenable support solution. I needed to find a better way. </p>
<p>So I did some digging around for a support solution. And believe me, there are plenty out there. Some are free &#8212; mostly poorly designed, buggy DIY scripts to install and run on your own server. Some aren€™t &#8212; prettier, feature-rich €¦ and expensive. Fifty bucks a month? For a guy like me, forget it.</p>
<p>Simply put, there was nothing out there that appealed to someone doing well &#8212; but not getting rich &#8212; selling online. So I decided to build one. Something simple. Something with the features I needed, and nothing else. And something that played nice with the <a href= http://marketplace.envato.com/api/documentation >Envato API</a>.</p>
<p>Two years later, I finished <a href= https://www.ticksy.com/ >Ticksy</a> &#8212; and I love it. It€™s sleek, easy to use and getting some great reviews. </p>
<blockquote><p>Most importantly, it€™s doing a great job handling my support requests &#8212; the reason I built it in the first place!</p></blockquote>
<hr />
<h2>Designing Ticksy</h2>
<p>As any developer knows, simple on the outside invariably means complicated on the inside. And, while <a href= http://ticksy.com >Ticksy</a> was a labor of love, building it was anything but easy.</p>
<blockquote><p>Naming it? That€™s a different story. Support ticket system. €śTick.€ť €śSy.€ť Ticksy. Get it?</p></blockquote>
<p>I spent roughly three months designing the UI &#8211; buttons and form fields on the login screen, tabs and dropdowns in the app and more. Product management had to be spot-on, too. The initial Envato integration made it possible for me to tie every ticket directly into one of my products in the marketplace. Eventually, I worked product verification into the mix &#8212; only actual owners (not pirates) of my themes could submit tickets.</p>
<blockquote class= pullquote ><p>They liked it. No more email!</p></blockquote>
<p>I developed the first, basic version of Ticksy using PHP and MySQL in about five months &#8212; continuing to support customers via email in the meantime (yuck). Finally, by the end of 2010, I was able to deploy the system for my own business. Customers started using it. They liked it. No more email! I felt great; a huge load was off my shoulders.</p>
<div class= tutorial_image  style= clear: both; ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2041_ticksy/ticksy_original_design.jpg  alt= Original Ticksy ></p>
<div><em>The original Ticksy dashboard, circa 2010</em></div>
</div>
<p>Then, something unexpected &#8212; and pleasant &#8212; happened. People started asking me about the system. The customers actually enjoyed using it as much as I did and wanted to know how they could use it in their businesses. I had no answer at the time. This was my system. I built it for me. Were there other people like me that would use something so simple?</p>
<p>Turns out there were. People wanted Ticksy. So I was back to the drawing board.</p>
<hr />
<h2>Ticksy For All</h2>
<p>Two partners and I redesigned the UI and backend to allow for multiple systems, added social sign-in buttons (Facebook and Twitter), got feedback from friends and family and added a few other features. I essentially redesigned/developed the entire Ticksy system, and launched a beta build in early 2011.</p>
<p>I had around ten beta users using it full-time, and they loved it. Months went by, bugs were squashed, the UI was refined and I let it get some good use for a long time. If I was going to release this to the public and expect people to pay for it, it had to work well. I let it go for a year before deciding to release it to the public. My product was polished. Ticksy was ready for the limelight.</p>
<p>After many months of testing, developing a marketing site (powered by <a href= http://wordpress.org/ >WordPress</a>), creating a marketing video (with the help of <a href= http://videohive.net/ >VideoHive€™s</a> own <a href= http://videohive.net/user/bryandrake >Bryan Drake</a>) and planning everything to the last detail, we launched Ticksy to the public in March.</p>
<div class= tutorial_image ><a href= http://ticksy.com ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2041_ticksy/ticksy-launch.jpg  alt= Ticksy ></a></div>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2041_ticksy/ticksy_today_design.jpg  alt= The Ticksy Dashboard, 2012 ></p>
<div>The Ticksy dashboard, 2012</em></div>
</div>
<p>If you€™re a designer, you know the feeling of taking a product live. It€™s amazing. But it€™s also a bit scary. What if people don€™t like it? What if it doesn€™t sell? </p>
<p>Thankfully, with Ticksy, my fears were quickly assuaged. The initial group of users loved it, talking up its simplicity, its reliability and even its price point. Like me, they were freed from the headaches of email-based support &#8212; without having to turn to a cheaply built free solution or an expensive, bloated €śdo-it-all€ť app. </p>
<blockquote><p>As a designer, it was supremely validating. And it was a reminder to keep working.</p></blockquote>
<hr />
<h2>More to Come</h2>
<p>A developer€™s work is never done. And despite the project€™s success, that€™s certainly been true for Ticksy. </p>
<p>As initially released, Ticksy was an intuitive, bloat-free, web-based customer support solution that could be customized to match any existing brand. After months of work, it€™s still that &#8212; and more. Now, end users can label their tickets €śpublic€ť or €śprivate,€ť bringing an element of the traditional community forum to support. Search functionality for customers is enabled. And enhanced FAQs, notification systems and better Envato integration are on the way soon. (You can check out our <a href= http://www.ticksy.com/roadmap >roadmap here</a>.)</p>
<hr />
<h2>Summing it Up</h2>
<blockquote class= pullquote ><p>Ticksy has been a two-year journey of discovery and hard work.</p></blockquote>
<p>For me, Ticksy has been a two-year journey of discovery and hard work. But it€™s been worth it.</p>
<p>What started as a project to simplify my own work has taken on a life of its own. I never expected Ticksy to see the light of day outside my office. But it€™s incredibly vindicating to check the growing list of users and read their feedback. Really, it€™s every developer€™s dream. Ticksy has truly arrived. And, with each user, it€™s making web-based customer support just a little bit simpler.</p>
<p><strong>The process of taking an idea from sketch to launch is a significant achievement. If you have any, more specific, questions about the process (such as the tools we used for reporting bugs, version control, etc.), let me know in the comments, and we&#8217;ll talk!</strong></p>
<p><a href= http://feedads.g.doubleclick.net/~a/7mzXsyx3R3Q40E2AzJRu36p6tWc/0/da ><img src= http://feedads.g.doubleclick.net/~a/7mzXsyx3R3Q40E2AzJRu36p6tWc/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/7mzXsyx3R3Q40E2AzJRu36p6tWc/1/da ><img src= http://feedads.g.doubleclick.net/~a/7mzXsyx3R3Q40E2AzJRu36p6tWc/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=btY1tHMUIUA:rs9hxhYh17g:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=btY1tHMUIUA:rs9hxhYh17g:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=btY1tHMUIUA:rs9hxhYh17g:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=btY1tHMUIUA:rs9hxhYh17g:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=btY1tHMUIUA:rs9hxhYh17g:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=btY1tHMUIUA:rs9hxhYh17g:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=btY1tHMUIUA:rs9hxhYh17g:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=btY1tHMUIUA:rs9hxhYh17g:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/btY1tHMUIUA  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-18 22:52:09</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[28 Admin Panel User Interfaces from Dribbble Artists]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=873</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=873</guid>
			  <description><![CDATA[<p><a href= http://rss.buysellads.com/click.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12180&c=56620716  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12180&c=56620716  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264758  target= _blank >Advertise here with BSA</a></p><br /><p class= bigger >Websites are made up of many different views and pages. One of the most important views is your administration panel &#8211; these are often coupled with custom web applications. The backend system is almost vital to managing users and editing page content.</p>
<p>But you have to get just the right look &amp; feel for things to work out well. In this gallery I have gone through Dribbble and collected the most pristine examples of web dashboards. These are all designed for varying functions and you&#8217;ll pinpoint many discrepancies. Feel free to peruse the collection of user interfaces, and let us know your thoughts in the post discussion area.</p>
<h3><a href= http://dribbble.com/shots/477735-Web-App-Header >Web App Header</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/477735-Web-App-Header ><img src= http://spyrestudios.com/wp-content/uploads/01-web-admin-panel.png  class= frame  /></a></p>
<p><span id= more-12180 ></span></p>
<h3><a href= http://dribbble.com/shots/200316-Web-Application >Web Application</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/200316-Web-Application ><img src= http://spyrestudios.com/wp-content/uploads/02-ux-web-application.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/136920-Admin-Panel-Redesign >Admin Panel Redesign</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/136920-Admin-Panel-Redesign ><img src= http://spyrestudios.com/wp-content/uploads/03-admin-panel-redesign.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/227958-Admin-Panel >Admin Menu</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/227958-Admin-Panel ><img src= http://spyrestudios.com/wp-content/uploads/04-gradient-web-app-admin.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/342888-Dashboard >Dashboard with Tabs</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/342888-Dashboard ><img src= http://spyrestudios.com/wp-content/uploads/05-dashboard-cms-tabs.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/526771-BTOA-Wordpress-Custom-Admin-Panel >WordPress Custom Admin Panel</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/526771-BTOA-Wordpress-Custom-Admin-Panel ><img src= http://spyrestudios.com/wp-content/uploads/06-btoa-wordpress-custom-admin-panel.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/506754-Admin-UI >Admin UI</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/506754-Admin-UI ><img src= http://spyrestudios.com/wp-content/uploads/07-pictos-admin-ui.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/210793-UI-Dashboard >UI Dashboard Zoomed</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/210793-UI-Dashboard ><img src= http://spyrestudios.com/wp-content/uploads/08-html5-css3-dashboard-user-interface.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/218087-Dashboard >Dashboard Analytics</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/218087-Dashboard ><img src= http://spyrestudios.com/wp-content/uploads/09-dashboard-stats-analytics.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/494568-Admin-Panel >Web Admin Panel</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/494568-Admin-Panel ><img src= http://spyrestudios.com/wp-content/uploads/10-web-ui-admin-panel.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/10085-Bespoke-CMS-admin-interface >Bespoke CMS Admin</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/10085-Bespoke-CMS-admin-interface ><img src= http://spyrestudios.com/wp-content/uploads/11-bespoke-admin-interface-dashboard.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/498573-Admin-header >Admin Header</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/498573-Admin-header ><img src= http://spyrestudios.com/wp-content/uploads/12-admin-web-app-header.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/340758-Admin-Edit-Users >Edit Users</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/340758-Admin-Edit-Users ><img src= http://spyrestudios.com/wp-content/uploads/13-admin-edit-users-application.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/199719-Fluid-Admin >Fluid Admin</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/199719-Fluid-Admin ><img src= http://spyrestudios.com/wp-content/uploads/14-fluid-admin-interface.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/473917-Botify >Botify</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/473917-Botify ><img src= http://spyrestudios.com/wp-content/uploads/15-botify-admin-graphs.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/427405-Dashboard >Approve/Decline Widget</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/427405-Dashboard ><img src= http://spyrestudios.com/wp-content/uploads/16-dashboard-news-panel-admin.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/333499-Admin >Administrator Links</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/333499-Admin ><img src= http://spyrestudios.com/wp-content/uploads/17-administrator-cms-panel-sidebar-links.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/486282-Admin-Template-Navigation >Navigation Template</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/486282-Admin-Template-Navigation ><img src= http://spyrestudios.com/wp-content/uploads/18-admin-template-navigation.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/493675-Admin-Template-Grape >Admin Template Grape</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/493675-Admin-Template-Grape ><img src= http://spyrestudios.com/wp-content/uploads/19-grape-ux-admin-panel.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/239693-Control-Panel >Control Panel Stats</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/239693-Control-Panel ><img src= http://spyrestudios.com/wp-content/uploads/20-admin-stats-control-panel.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/413149-Custom-WordPress-UI >Custom WordPress UI</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/413149-Custom-WordPress-UI ><img src= http://spyrestudios.com/wp-content/uploads/21-custom-wordpress-admin-ui.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/158045-Uploading-file >Uploading File Interface</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/158045-Uploading-file ><img src= http://spyrestudios.com/wp-content/uploads/22-admin-interface-uploading-file.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/521001-Admin-Interface >Dashboard Table</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/521001-Admin-Interface ><img src= http://spyrestudios.com/wp-content/uploads/23-admin-dashboard-table.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/502324-Dribble >Web Admin UI</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/502324-Dribble ><img src= http://spyrestudios.com/wp-content/uploads/24-backend-web-admin-ui.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/151443-Admin-Panel >Admin GUI Icons</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/151443-Admin-Panel ><img src= http://spyrestudios.com/wp-content/uploads/25-gui-admin-panel-icons.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/143196-Proto-Admin >Proto Admin</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/143196-Proto-Admin ><img src= http://spyrestudios.com/wp-content/uploads/26-proto-admin-user-interface.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/420390-Please-log-in-below >Admin Login Form</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/420390-Please-log-in-below ><img src= http://spyrestudios.com/wp-content/uploads/27-admin-login-input-form.png  class= frame  /></a></p>
<h3><a href= http://dribbble.com/shots/409700-Left-panel >Left Panel Application</a></h3>
<p class= nobrdr ><a href= http://dribbble.com/shots/409700-Left-panel ><img src= http://spyrestudios.com/wp-content/uploads/28-left-panel-application-interface.png  class= frame  /></a></p>
<br /><p><a href= http://rss.buysellads.com/click.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12180&c=100111798  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12180&c=100111798  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264756  target= _blank >Advertise here with BSA</a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=TzevzKxY174  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6VzTjY5Zcbo:q7L8j7fCa88:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:l6gmwiTKsz0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=l6gmwiTKsz0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:qj6IDK7rITs ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=qj6IDK7rITs  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6VzTjY5Zcbo:q7L8j7fCa88:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:7Q72WNTAKBA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=7Q72WNTAKBA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6VzTjY5Zcbo:q7L8j7fCa88:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:dnMXMwOfBR0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=dnMXMwOfBR0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:D7DqB2pKExk ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6VzTjY5Zcbo:q7L8j7fCa88:D7DqB2pKExk  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6VzTjY5Zcbo:q7L8j7fCa88:-BTjWOF_DHI ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6VzTjY5Zcbo:q7L8j7fCa88:-BTjWOF_DHI  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/SpyreStudios/~4/6VzTjY5Zcbo  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-17 22:52:07</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Diving Into CSS Regions]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=874</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=874</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25061&c=1376554453  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25061&c=1376554453  border= 0  alt=   /></a><p>This tutorial will cover the basics of CSS regions, which allow us to flow content within various sections of the page. Confused? You probably are; read on!</p>
<p><span id= more-25061 ></span></p>
<hr />
<div class= download_wrap >
<div class= big_btn  style= margin-left:120px; >
    	<a href= http://umaar.github.com/css-region-demo/  rel= external  target= _blank ><span>Demo</span> <small>View It Online</small></a>
  	</div>
</div>
<hr />
<h2>CSS Region Support</h2>
<p>At the time of this writing, the <a href= http://dev.w3.org/csswg/css3-regions/  rel= external  target= _blank >CSS Regions specification</a> is a working draft and <strong>things may change!</strong> Techniques mentioned in this tutorial might change in implementation. The aim of this tutorial is to give a basic understanding of CSS Regions and what might be coming to a browser near you.</p>
<p>
	Check out <a href= http://caniuse.com/css-regions  rel= external  target= _blank  title= Can I Use CSS Regions >caniuse.com</a> for a list of browsers which have some support for CSS Regions. This tutorial will only use webkit/non-vendor-prefixed examples for simplicities sake.
</p>
<p>If you find the demo is not working for you it may be because CSS Regions needs enabling, here are instructions for Chrome  (should work for <a href= https://www.google.com/chrome  rel= external  target= _blank  title= Google Chrome >Chrome</a>, <a href= https://tools.google.com/dlpage/chromesxs  rel= external  target= _blank  title= Google Chrome Canary >Chrome Canary</a> &amp; <a href= http://www.chromium.org/getting-involved/download-chromium  rel= external  target= _blank  title= Chromium >Chromium</a> )
</p>
<ol>
<li>Navigate to chrome://flags/ (or about:flags)</li>
<li>Find &#8220;Enable CSS Regions&#8221; and enable it.</li>
<li>Restart your browser and verify that the demo is working.</li>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2040_cssRegions/chrome-flags-screenshot.png  alt= Screenshot of the Chrome Flags page  border= 0  /></div>
</ol>
<hr />
<h2>A Simple Example</h2>
<p>Demonstrating CSS Regions in a simple manner actually requires very little code!</p>
<p>To get into the <strong>flow</strong> of things lets go through a quick example of how to use CSS Regions.</p>
<p>First, we need some dummy text which is contained within the paragraph tag, below that you&#8217;ll notice two empty divs each with a class of &#8220;regions&#8221;. Using CSS Regions we will allow our &#8220;example-text&#8221; to <strong>flow</strong> into the region divs.</p>
<pre class= brush: xml; title: ; notranslate >

&lt;p class=&quot;example-text&quot;&gt;&quot;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&quot;&lt;/p&gt;

&lt;div class=&quot;regions&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;regions&quot;&gt;&lt;/div&gt; 
</pre>
<pre class= brush: css; title: ; notranslate >
.example-text {
	-webkit-flow-into: example-text-flow;
	padding: 0;
	margin: 0;
}

.regions {
	-webkit-flow-from: example-text-flow;
	border: 1px solid black;
	padding: 2px;
	margin: 5px;
	width: 200px;
	height: 50px;
}
</pre>
<p>If you try <a href= http://jsbin.com/inaheh  rel= external  target= _blank >viewing the code</a> above in a Webkit browser that supports CSS Regions, you should see something like: </p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2040_cssRegions/basic-example.png  alt= Basic example of CSS Regions  border= 0  /></div>
<p>All styling (apart from -webkit-flow-from) which has been applied on the &#8220;regions&#8221; class is only there to make it evident where the regions are, the two lines of CSS that we really care about are:</p>
<pre class= brush: css; title: ; notranslate >
-webkit-flow-into: example-text-flow;

-webkit-flow-from: example-text-flow;
</pre>
<p>These will be discussed in more detail below</p>
<hr />
<h2>The <code>flow-into</code> Property and Named Flows</h2>
<p>The flow-into property accepts an identifier as its value, once we apply the flow-into property onto an element and pass it an identifier, that element then becomes part of a &#8220;named flow&#8221;. As soon as an element becomes part of a named flow it is taken out of its usual flow &#8211; this essentially means the element will not be rendered on the page, for example: </p>
<pre class= brush: xml; title: ; notranslate >
&lt;p class=&quot;example-text&quot;&gt;I will not be rendered on the page&lt;/p&gt;
</pre>
<pre class= brush: css; title: ; notranslate >
.example-text {
	-webkit-flow-into: example-text-flow;
}
</pre>
<p>There are some exceptions to this however, if the flow-into property is given the value &#8216;none&#8217; the element will not be part of a named flow and thus be subject to usual rendering on the page. As you might have guessed, another case where an element which is part of named flow will be displayed is when it has a valid region associated with it.</p>
<p>Multiple elements can be put into the same named flow:</p>
<pre class= brush: css; title: ; notranslate >
#example-1 {
	-webkit-flow-into: my-named-flow;
}

#example-2 {
	-webkit-flow-into: my-named-flow;
}
</pre>
<p>If there is an associated region for &#8220;my-named-flow&#8221;, an attempt will be made to flow the two elements (<code>#example-1</code> &amp; <code>#example-2</code>) into their corresponding region chain.</p>
<p>It&#8217;s not just simple bits of text which can be put into a named flow, we <a href= http://jsbin.com/apivan  rel= external  target= _blank >can put images</a> too! Having the ability to put all sorts of HTML elements into named flows is a powerful thing. For example, let&#8217;s say we had two individual lists but from a presentation point of view we wanted to show them together. One way to go about this is to use CSS selectors to target only the portions we need and put them into a named flow, example (extract of code): </p>
<pre class= brush: xml; title: ; notranslate >
&lt;article id=&quot;css3&quot;&gt;
  &lt;header&gt;&lt;h4&gt;CSS3&lt;/h4&gt;&lt;/header&gt;
  &lt;ul&gt;
    &lt;li&gt;Media Queries&lt;/li&gt;
    &lt;li&gt;Text Shadows&lt;/li&gt;
    &lt;li&gt;3D Transforms&lt;/li&gt;
  &lt;/ul&gt;
&lt;/article&gt;

&lt;article id=&quot;html5&quot;&gt;
  &lt;header&gt;&lt;h4&gt;HTML5&lt;/h4&gt;&lt;/header&gt;
  &lt;ul&gt;
    &lt;li&gt;Canvas&lt;/li&gt;
    &lt;li&gt;Drag-and-drop&lt;/li&gt;
    &lt;li&gt;Web Storage&lt;/li&gt;
  &lt;/ul&gt;
&lt;/article&gt;  

&lt;div id=&quot;buzzwords-region&quot;&gt;&lt;/div&gt;
</pre>
<pre class= brush: css; title: ; notranslate >
/* Only put the list within the article into a named flow */
#css3 &gt; ul {
-webkit-flow-into: buzzwords-flow;
}

#html5 &gt; ul {
-webkit-flow-into: buzzwords-flow;
}  

#buzzwords-region {
-webkit-flow-from: buzzwords-flow;
border: 1px solid green;
}
</pre>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2040_cssRegions/buzzword-list.png  alt= Result of combining two lists using CSS Regions  border= 0  /></div>
<p>(<a href= http://jsbin.com/ucunes  rel= external  target= _blank >Demo of the above.</a>) If you look at the source code you&#8217;ll notice that our HTML5 &amp; CSS3 lists have been merged into a new <del>buzzword</del> list. Take note of how the headers of those lists were not targeted in the CSS selectors and thus are not part of any named flow, they are therefore still rendered on the page and are not contained within a region.</p>
<hr />
<h2>The <code>flow-from</code> Property</h2>
<p>The flow-from property is able to take a container, for example an empty div and turn it into a region. For it to turn into a valid region it must have an associated named flow. As discussed, named flows are created by using the flow-into property and then using an identifier as its value.</p>
<pre class= brush: xml; title: ; notranslate >
&lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
</pre>
<pre class= brush: css; title: ; notranslate >
.region {
	-webkit-flow-from: my-named-flow;
}
</pre>
<p>Similar to flow-into property, we can assign the value of &#8216;none&#8217; to the flow-from property, this makes the corresponding element nothing more than a container e.g. it will not act as a region.</p>
<p>When applying the flow-from property on an element, it will not have a height or width which is why you&#8217;ll need to set these in order to view the contents of the region. Regions may only act as region chains for a single named flow, so multiple elements may flow-into a single named flow however a region can only flow-from a single named flow. A region will maintain the styles of its source element; this means if the source element has the colour value of red the text will continue to appear red when rendered as part of a region.</p>
<p>The CSS Region specification has been considering using @region rules for specific region styling. </p>
<blockquote>
<p>
&#8220;An <code>@region</code> rule contains style declarations specific to particular regions.&#8221;
</p>
</blockquote>
<p>This could allow for CSS syntax (similar to that of media queries) such as:</p>
<pre class= brush: css; title: ; notranslate >
/* A regular style on all paragraph tags */
p {
	font-weight: normal;
}

@region #my-region {
	/* When text from the p element is flowing into #my-region, use the styling below */
	p {
		font-weight: bold;
	}
}
</pre>
<p>Being able to do this would allow region specific styling to be applied on the source, currently, setting for example &#8220;font-weight: bold&#8221; on a region will not cause content displayed within it to be bold &#8211; the styling must be applied on the source element. </p>
<hr />
<h2>JavaScript API</h2>
<p>At the time of this writing, there is some support in Webkit-based browsers to access CSS Region information through JavaScript. Using JavaScript, we can pick out a flow according to its identifier and find out what regions are associated with it. We can even find out the status of a particular region, there may be a use case where empty regions need specific handling, using JavaScript we can accomplish this.</p>
<h3>Accessing a flow by name</h3>
<p>A named flow can be accessed in JavaScript using document.getFlowByName(&#8216;identifier&#8217;) (You can try these in the developer console in the demo.)</p>
<pre class= brush: jscript; title: ; notranslate >
var flow = document.webkitGetFlowByName( example-1-text );
</pre>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2040_cssRegions/WebkitNamedFlow.png  alt= The return object of getFlowByName  border= 0  /></div>
<p>The returned object is something called a WebkitNamedFlow. flow.contentNodes will contain an array of HTML Elements which are being used as the source for the flow being accessed.</p>
<h3>Discovering which regions belong to which content node</h3>
<p>The ability to detect which content belongs to which regions can prove useful in various situations.</p>
<pre class= brush: jscript; title: ; notranslate >
var flow = document.webkitGetFlowByName( example-4-text );
var main_content = document.querySelector( #example-4 .main_content );
flow.getRegionsByContentNode(main_content);
</pre>
<p>In the code above, we first find our flow on the page using the flow name, then using the <a href= http://www.w3.org/TR/selectors-api/ >Selectors API</a> we access a piece of content on the page and pass it as an argument to getRegionsByContentNode(), this returns a list of elements which are being used as regions for that particular piece of content.</p>
<h3>Finding out whether or not a piece of content fits inside a region</h3>
<p>We can very quickly determine the status of a region in regards to how content inside it fits.</p>
<pre class= brush: jscript; title: ; notranslate >
//This is not a very efficient selector, see https://developers.google.com/speed/docs/best-practices/rendering#UseEfficientCSSSelectors
var region7 = document.querySelector( #example-4 .regions &gt; div:nth-child(7)  );
region7.webkitRegionOverflow //&quot;fit&quot;
</pre>
<p><code>element.regionOverflow</code> will return different values depending on how it&#8217;s handling the source content. There are four possible values: &#8216;overflow&#8217;, &#8216;fit&#8217;, &#8216;empty&#8217; and &#8216;undefined&#8217;</p>
<ul>
<li><strong>overflow:</strong> The content does not fit in the specified region and will overflow to the next region if it&#8217;s available</li>
<li><strong>fit:</strong> The region has successfully contained the content and no overflow is necessary.</li>
<li><strong>empty:</strong> There is no content inside of the selected region and therefore it is empty  (as will normally be the case with a region whose previous region returns &#8216;fit&#8217; for regionOverflow)</li>
<li><strong>undefined:</strong> The element is not a valid region.</li>
</ul>
<p>You can try this out using developer tools in Chrome, on the demo page, right click on one of the blue boxes (a region) and select &#8216;Inspect Element&#8217;. You may find the source element is selected rather than the region div. Try to find the nearest div with the class of &#8216;regions&#8217; and select one of the child divs (they should appear empty). At this point you can hit the Escape key on your keyboard which should bring up the console; now as a handy shortcut you can type $0 into the console to access the selected element. Now try typing: </p>
<pre class= brush: jscript; title: ; notranslate >
$0.webkitRegionOverflow // overflow ,  fit ,  empty  or undefined 
</pre>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2040_cssRegions/developer-console-region-api.png  alt= Using the dollar zero shortcut in developer console to access the selected element  border= 0  /></div>
<hr />
<h2>A Few Notes and Opinions</h2>
<p>Hello! Thanks for reading this tutorial, here are some extra bits of information you may be interested in.</p>
<ul>
<li>Browser implementation for CSS Regions isn&#8217;t great right now and even when it does improve browser implementation may vary. For example Internet Explorer only allows flow-into to be set on an iframe. </li>
<li>CSS Regions can let developers and designers offer a more improved experience on the web, especially on mobile/tablet devices.</li>
<li><a href= http://modernizr.com/ >Modernizr</a> can <a href= https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css-regions.js >detect support</a> for CSS Regions, it&#8217;s what the <a href= http://umaar.github.com/css-region-demo/ >demo</a> uses.</li>
<li><a href= http://labs.adobe.com/ >Adobe</a> <a href= http://adobe.github.com/web-platform/samples/css-regions/ >have</a> <a href= http://labs.adobe.com/technologies/cssregions/ >taken</a> <a href= http://html.adobe.com/webstandards/cssregions/ >a</a> <a href= http://www.adobe.com/devnet/html5/articles/css3-regions.html >great</a> <a href= https://blogs.adobe.com/webplatform/2012/03/16/css-regions-one-year-in/ >initiative</a> on CSS Regions. Be sure to check out their <a href= http://labs.adobe.com/downloads/cssregions.html >demos</a>!  </li>
<li>Chris Coyier of <a href= http://css-tricks.com/ >CSS Tricks</a> has come up with a cool and <a href= http://css-tricks.com/content-folding/ >practical use for CSS Regions</a>.</li>
</ul>
<p><a href= http://feedads.g.doubleclick.net/~a/Ufsn1G6CtnvIMy9xXqW7HiyI8IM/0/da ><img src= http://feedads.g.doubleclick.net/~a/Ufsn1G6CtnvIMy9xXqW7HiyI8IM/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/Ufsn1G6CtnvIMy9xXqW7HiyI8IM/1/da ><img src= http://feedads.g.doubleclick.net/~a/Ufsn1G6CtnvIMy9xXqW7HiyI8IM/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=vUHrlXUe5DA:kkHUtjqJryo:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=vUHrlXUe5DA:kkHUtjqJryo:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=vUHrlXUe5DA:kkHUtjqJryo:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=vUHrlXUe5DA:kkHUtjqJryo:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=vUHrlXUe5DA:kkHUtjqJryo:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=vUHrlXUe5DA:kkHUtjqJryo:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=vUHrlXUe5DA:kkHUtjqJryo:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=vUHrlXUe5DA:kkHUtjqJryo:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/vUHrlXUe5DA  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-17 22:52:07</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Meet Crockfords JSCheck]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=872</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=872</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25044&c=1425535234  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25044&c=1425535234  border= 0  alt=   /></a><p>There are dozens of JavaScript testing frameworks, but most of them function in, more or less, the same way. However, Douglas Crockford&#8217;s <a href= http://www.jscheck.org/ >JSCheck</a> is considerably different from most. In this tutorial, I&#8217;ll show you how it&#8217;s different and why you should consider using it!</p>
<p><span id= more-25044 ></span></p>
<hr />
<blockquote class=pullquote><p>
Crockford describes <a href= http://www.jscheck.org/ >JSCheck</a> as a &#8220;specification-driven testing tool.
</p></blockquote>
<p>Crockford describes <a href= http://www.jscheck.org/ >JSCheck</a> as a &#8220;specification-driven testing tool.&#8221; When using the frameworks you&#8217;re used to, you would write a test for a given piece of functionality, and, if that test passes, declare that the given functionality is working correctly. However, it&#8217;s possible that you might miss some of edge cases or exceptions that your tests don&#8217;t cover.</p>
<p>While uncovering edge cases isn&#8217;t the express purpose of JSCheck, it is a nice side benefit. The main idea behind JSCheck is this: the specification you write will actually describe how the code you are testing should work. Then, JSCheck will take that specification (called a <strong>claim</strong> in JSCheck-lingo), and generate random tests to prove the claim. Finally, it will report the results to you.</p>
<p>Sounds interesting? Read on! Sounds familiar? You might have used the Haskell testing tool, <a href= http://www.haskell.org/haskellwiki/Introduction_to_QuickCheck >QuickCheck</a>, on which JSCheck was based.</p>
<hr />
<h2>Some Code to Test</h2>
<p>Of course, before actually writing our claim, we&#8217;ll want to have some code to test. Recently, I wrote a mini-password scorer, similar to the functionality on <a href= http://howsecureismypassword.net/ >HowSecureIsMyPassword.net</a>. It really isn&#8217;t fancy: you just pass the function a password and get a score back. Here&#8217;s the code:</p>
<h3>passwordScorer.js</h3>
<pre class= brush: jscript; title: ; notranslate >(function () {
    var PasswordScorer = {};

    PasswordScorer.score = function (password) {
        var len = password.length,
            lengthScore = 0,
            letterScore = 0,
            chars = {}

        if      (len &gt;= 21) { lengthScore = 7; }
        else if (len &gt;= 16) { lengthScore = 6; }
        else if (len &gt;= 13) { lengthScore = 5; }
        else if (len &gt;= 10) { lengthScore = 4; }
        else if (len &gt;=  8) { lengthScore = 3; }
        else if (len &gt;=  5) { lengthScore = 2; }

        var re = [ null, /[a-z]/g, /[A-Z]/g, /d/g, /[!@#$%^&amp;amp;*()=_+-]/g];

        for (var i = 1; i &lt; re.length; i++) {
            letterScore += (password.match(re[i]) || []).length * i;
        }

        return letterScore + lengthScore;
    };

    (typeof window !==  undefined  ? window : exports).PasswordScorer = PasswordScorer;
}());</pre>
<p>It&#8217;s pretty simple code, but here&#8217;s what&#8217;s going on: the score is made up of two sub-scores. There&#8217;s a starting score, that&#8217;s based on the length of the password, and then an additional score for each character, 1 point for each lowercase letter, 2 points for each uppercase letter, 3 points for each number, and 4 points for each symbol (from a limited set).</p>
<p>So, this is the code we&#8217;re going to test: we&#8217;ll randomly generate some passwords with JSCheck and make sure they get an appropriate score.</p>
<hr />
<h2>Writing our Claim</h2>
<p>Now we&#8217;re ready to write our claims. First, head over the <a href= https://github.com/douglascrockford/JSCheck >JSCheck Github page</a> and download the <code>jscheck.js</code> file. I like to run my tests in the terminal, via NodeJS, so add this single line to the very bottom of the file:</p>
<pre class= brush: jscript; title: ; notranslate >(typeof window !==  undefined  ? window : exports).JSC = JSC;</pre>
<p>This won&#8217;t affect the way the file behaves in the browser at all, but it will make it work as a module within Node. Notice that the <code>jscheck.js</code> file exposes <code>JSC</code> as the single global variable for the whole library. If we weren&#8217;t making this adjustment, that&#8217;s how we&#8217;d access it.</p>
<p>Let&#8217;s open <code>passwordScorerSpec.js</code> and start things:</p>
<pre class= brush: jscript; title: ; notranslate >JSC = require(&quot;./../vendor/jschec&quot;;).JSC;
PasswordScorer = require(&quot;./../lib/passwordScore&quot;;).PasswordScorer;</pre>
<p>Since I&#8217;m running these tests in NodeJS, we&#8217;ll have to require the modules we want. Of course, you&#8217;ll want to make sure that paths match your file locations.</p>
<p>Now, we&#8217;re ready to write our first claim. Of course, we use the <code>JSC.claim</code> method. This method accepts three parameters, with an optional fourth. The first parameter is just a string, a <strong>name</strong> for the claim. The second parameter is called the <strong>predicate</strong>: it&#8217;s the actual testing function. Very simply, this function should return <code>true</code> if the claim is true, and <code>false</code> if the claim is false. The random values that JSCheck will generate for the test will be passed as parameters to the predicate.</p>
<p>But how does JSCheck know what type of random values to hand the predicate? That&#8217;s where the third parameter, the <strong>specifier</strong> comes into play. This is an array, with an item for each parameter for predicate. The items in the array specify what types to give the predicate, using JSCheck&#8217;s specifier functions. Here are a few of them:</p>
<ul>
<li><code>JSC.boolean()</code> returns either true or false.</li>
<li><code>JSC.character()</code> takes a min and max character and returns a single character from that range. It can also take a single character code and return that character.</li>
<li><code>JSC.integer()</code> will return a prime number. Or, pass it a single parameter to get an integer (whole number) between 1 and the parameter, or two parameters for an integer in that range.</li>
</ul>
<p>You get the idea. There are other specifiers, and we&#8217;ll use some now as we write our first claim.</p>
<pre class= brush: jscript; title: ; notranslate >JSC.claim(&quot;All Lowercase Password&quot;;, function (password, maxScore) {
  return PasswordScorer.score(password) &lt;= maxScore;
}, [
  JSC.string(JSC.integer(10, 20), JSC.character( a ,  z )),
  JSC.literal(26)
]);</pre>
<p>Our first parameter is a name. The second is the testing function: it receives a password and a max score, and returns true if the score for that password is less than or equal to the max score. Then, we have our specifier array. Our first parameter (the password) should be a string, so we use the <code>JSC.string()</code> method: it can take two parameters, the number of characters in the string, and value for those characters. As you can see, we&#8217;re asking for a password between 10 and 20 characters. For the value, we&#8217;re using the <code>JSC.characters()</code> method to get random characters between &#8216;a&#8217; and &#8216;z&#8217;.</p>
<p>The next value is our <code>maxScore</code> parameter. Sometimes, we don&#8217;t want the randomness that JSCheck offers, and this is one of those times. That&#8217;s why there&#8217;s <code>JSC.literal</code>: to pass a literal value the predicate. In this case, we&#8217;re using 26, which should be the max score for any all-lowercase password between 10 and 20 characters.</p>
<p>Now we&#8217;re ready to run the test.</p>
<hr />
<h2>Running our Claim</h2>
<p>Before we actually run the claim and get the report, we have to setup the function that will receive the report. JSCheck passes the report to a callback function of <code>JSC.on_report</code>. Hence:</p>
<pre class= brush: jscript; title: ; notranslate >JSC.on_report(function (str) {
  console.log(str);
});</pre>
<p>Nothing fancy. Now, all that&#8217;s left is to call <code>JSC.check()</code>. Now, we can head to our terminal and run this:</p>
<pre class= brush: bash; title: ; notranslate >node path/to/passwordScorerSpec.js</pre>
<p>Behind the scenes, JSCheck runs the predicate 100 times, generating different random values each time. You should see your report printed out.</p>
<pre class= brush: bash; title: ; notranslate >All Lowercase Passwords 100 of 100
 pass 100</pre>
<p>They all passed, but that&#8217;s not much of a report, eh? Well, if any of our tests had failed, they would have been included in the report. However, you can adjust the level of output with the <code>JSC.detail</code> function: pass it a number between 0 and 4 (inclusive) to get anything for no output to all the test cases. The default value is 3.</p>
<hr />
<h2>Adding a Classifier</h2>
<p>Remember how I said that <code>JSC.claim</code> could take a fourth parameter? It&#8217;s called a <strong>classifier</strong>, and it receives the same parameters that the predicate receives. Then, it can returns a string to classify, or group, our test cases. I&#8217;ll admit I wasn&#8217;t really sure where this would be useful until I was creating the above example claim. See, I made a mistake in the predicate and compared the score to the <code>maxScore</code> with the <code><</code> operator instead of the <code><=</code> operator, so any passwords that scored 26 points were failing. I was seeing reports that looked something like this:</p>
<pre class= brush: bash; title: ; notranslate >All Lowercase Passwords 96 of 100
 FAIL [12] (&quot;vqfqkqqbwkdjrvplkrx&quot;;,26)
 FAIL [21] (&quot;nhgkznldvoenhqqlfza&quot;;,26)
 FAIL [62] (&quot;eclloekuqhvnsyyuekj&quot;;,26)
 FAIL [78] (&quot;rvrkfivwtdphrhjrjis&quot;;,26)
 pass 96 fail 4</pre>
<p>It&#8217;s still entirely obvious why some tests are failing. So I added a classifier function that grouped the test cases by score: like I said, the function takes the same parameters as the predicate, and it returns a string. Every test case that gets the same string back from the classifier will be grouped together in the report.</p>
<pre class= brush: jscript; title: ; notranslate >function (password, maxScore) {
	return PasswordScorer.score(password) + &quot; points&quot;;;
}</pre>
<p>This function should be the last parameter of our claim. Now, you&#8217;ll get a report that&#8217;s something like this:</p>
<pre class= brush: bash; title: ; notranslate >All Lowercase Passwords 96 of 100
 FAIL [4] 26 points:(&quot;illqbtiubsmrhxdwjfo&quot;;,26)
 FAIL [22] 26 points:(&quot;gruvmmqjzqlcyaozgfh&quot;;,26)
 FAIL [34] 26 points:(&quot;chhbevwtjvslprqczjg&quot;;,26)
 FAIL [65] 26 points:(&quot;kskqdjhtonybvfewdjm&quot;;,26)
14 points: pass 8
15 points: pass 5
16 points: pass 12
18 points: pass 10
19 points: pass 12
20 points: pass 11
22 points: pass 12
23 points: pass 8
24 points: pass 10
25 points: pass 8
26 points: pass 0 fail 4
</pre>
<p>You can see how the tests are grouped by how many points the passwords are worth. Now, it&#8217;s easy to see that the only passwords that fail the tests are the passwords that score 26 points. And while the problem here was with the test, and not the code, it still shows how it can be useful to add a classifier function to your claims.</p>
<hr />
<h2>Final Thoughts</h2>
<p>So, at the end of the day, it JSCheck worth using? Here&#8217;s what I think: it&#8217;s not something you&#8217;re necessarily going to use with every code base, but sometimes you&#8217;ll find it useful to be able to create random test cases that will rigorously test a given piece of code. When that&#8217;s what you want to do, I haven&#8217;t seen a tool better for that than JSCheck.</p>
<p>JSCheck has a few other options and a bunch of specifiers that we haven t reviewed in this tutorial; head over to <a href= http://www.jscheck.org/ >JSCheck.og</a> to read about those. Otherwise, I&#8217;d love to hear your thoughts about JSCheck in the comments!</p>
<p><a href= http://feedads.g.doubleclick.net/~a/-qanUQQyK854Kada9mckqwaOq-g/0/da ><img src= http://feedads.g.doubleclick.net/~a/-qanUQQyK854Kada9mckqwaOq-g/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/-qanUQQyK854Kada9mckqwaOq-g/1/da ><img src= http://feedads.g.doubleclick.net/~a/-qanUQQyK854Kada9mckqwaOq-g/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=elFnjAFtJ_Q:SrpB9skSgzk:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=elFnjAFtJ_Q:SrpB9skSgzk:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=elFnjAFtJ_Q:SrpB9skSgzk:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=elFnjAFtJ_Q:SrpB9skSgzk:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=elFnjAFtJ_Q:SrpB9skSgzk:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=elFnjAFtJ_Q:SrpB9skSgzk:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=elFnjAFtJ_Q:SrpB9skSgzk:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=elFnjAFtJ_Q:SrpB9skSgzk:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/elFnjAFtJ_Q  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-16 22:52:05</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[How to Super-Scale Magento in the Cloud]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=870</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=870</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25037&c=449973722  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25037&c=449973722  border= 0  alt=   /></a><p>This tutorial will help you prepare a <a href= http://www.magentocommerce.com/ >Magento</a> install for high traffic, better load times, and simpler ongoing site management. Ready?</p>
<p><span id= more-25037 ></span></p>
<hr />
<h2>Requirements</h2>
<p>You can <a target= _blank  href= https://github.com/pagodabox/magento-install-basic/tarball/tutorial >download the finished code</a> for this tutorial, or launch the &#8220;magento-basic&#8221; Quickstart from your Pagoda Box account to test a working site.</p>
<ul>
<li>A Pagoda Box Account (free)</li>
<li>A functional local <a target= _blank  href= http://www.magentocommerce.com/product/community-edition >Magento Install</a></li>
<li>Local Development Software (<a target= _blank  href= http://www.mamp.info >MAMP</a> or <a target= _blank  href= http://www.wampserver.com >WAMP</a>)</li>
<li><a target= _blank  href= http://git-scm.com/download >Git</a> Installed (Can use SFTP)</li>
<li>The Pagoda Terminal Client Installed</li>
</ul>
<blockquote><p>Fair Warning: This tutorial may change your life. <a href= http://pagodabox.com/ >Pagoda Box</a> is not traditional hosting. The teachings in this article will not only help scale Magento, but it alos lays the groundwork for a progressive development-to-production workflow. </p></blockquote>
<hr />
<h2> <span>Step 1:</span> Set Up Git Locally (SFTP will work as an alternate)</h2>
<blockquote><p>Note: If you already use Git, you can skip this section. If not, the guide <a target= _blank  href= http://help.pagodabox.com/customer/portal/articles/202225-setting-up-git > Setting Up Git</a> provides specific instructions for creating an SSH Key, as well as links for downloading and installing Git (also below).</p></blockquote>
<p>While it is possible to use just <a target= _blank  href= http://help.pagodabox.com/customer/portal/articles/401507 >SFTP</a> on Pagoda Box, the officially recommended (and most efficient) workflow integrates Git into your daily development. Git enables features like collaboration, uniform code distribution, deploys, deploy history and rolling back code. While most of these features are available to FTP users, using Git makes integration seamless.</p>
<p>If you want to fully take advantage of Pagoda Box, <a target= _blank  href= http://git-scm.com/download >download Git</a>, and <a target= _blank  href= http://git-scm.com/book/ch1-3.html >Learn the Basics</a>. Depending on your operating system, set up may vary slightly. Regardless of your OS, the commands are identical once Git is installed.</p>
<p>Using Git to manage collaboration and version control may involve a brief learning curve. However, there are generally only three commands we&#8217;ll use on an ongoing basis to commit changes locally, then deploy to Pagoda Box:</p>
<ul>
<li><code>git add . </code> &#8211; Adds local files to your repository</li>
<li><code>git commit -m  some message about what you ve done </code> &#8211; Commits your changes</li>
<li><code>git push pagoda --all</code> &#8211; Pushes changes to Pagoda Box Repository (auto-deployed by default)</li>
</ul>
<p>We&#8217;ll use these later.</p>
<hr />
<h2> <span>Step 2:</span> Install the Pagoda Box Terminal Client</h2>
<pre name= code  class= php >

                             *
                           /   
                         /       
                     +_/ / / |   \_+
                         ||*|||*||
                         |+||*||+|
                         /       
                     +_/ / / |   \_+
                         ||*|||*||
                         |+||*||+|
     ____   _    ____  ___  ____    _    ____   _____  __
    |  _  /   / ___|/ _ |  _   /   | __ ) / _  / /
    | |_) / _ | |  _| | | | | | |/ _  |  _ | | |   /
    |  __/ ___  |_| | |_| | |_| / ___ | |_) | |_| /  
    |_| /_/   \_\____|\___/|____/_/   \_\____/ \___/_/\_

       Welcome To Your Pagoda Box Terminal Client.
      -----------------------------------------------
          -----------------------------------------
             ---------------------------------
                          Enjoy.</pre>
<p>Pagoda Box provides a Terminal Client that lets you clone, create, deploy, destroy, rename and rollback an application from the command line. Later in this tutorial, we&#8217;ll use the client to create a secure tunnel to the live Magento database with Sequel Pro (the process is similar for other database managment tools like HeidiSQL).</p>
<p>The Pagoda Box Terminal Client is a rubygem, so installation is pretty simple. First off, Ruby needs to be installed. Installation is different for each operating system.</p>
<ul>
<li>Mac &#8211; Ruby and RubyGems come pre-installed on Mac OSX. As long as you are running v10.5 or later, you should be good to go.</li>
<li>Windows &#8211; There are a couple of different ways to install Ruby in Windows. We recommend this <a target= _blank  href= http://rubyinstaller.org/ >auto-installer</a>. If it doesn&#8217;t work for your set-up, a Google search will give you a pretty good list of installation walk-throughs.</li>
<li>Linux &#8211; Use your preferred package manager to download the Ruby package. For Ubuntu users, the gem is available through <a target= _blank  href= http://www.getdeb.net/software/Pagoda%20Terminal%20Client >getdeb.net.</a></li>
</ul>
<h3>Install and Verify Terminal Client</h3>
<p>Once Ruby is installed, simply run the following command to install the Pagoda RubyGem:</p>
<p> On Mac or Linux:</p>
<pre name= code  class= php >
$ sudo gem install pagoda
</pre>
<p> On Windows:</p>
<pre name= code  class= php >
$ gem install pagoda
</pre>
<p>Then, to verify you have the Pagoda Gem installed properly, run:</p>
<pre name= code  class= php >
$ pagoda list
</pre>
<p>If this is the first time you&#8217;ve used the Gem, it will ask for your Pagoda Box Username and Password. After you&#8217;ve entered those, expect to see a list of your Pagoda Box applications. If you haven&#8217;t created any applications, the list will be blank.</p>
<p>If you get an error, it&#8217;s most likely invalid credentials. You can verify or change which credentials the gem uses by editing the file located on your local computer at <code>~/.pagodarc</code>. Make sure to exactly match the credentials you use in your Pagoda Box account. (Note: this is a hidden file, so you&#8217;ll need to enable hidden files or open via the terminal. Also note that the file stores your credentials twice, so edit both if needed.)</p>
<hr />
<h2> <span>Step 3:</span> Install Magento Locally</h2>
<blockquote><p>Note: Skip this step if you already have a working local Magento install.</p></blockquote>
<p>If you don&#8217;t have it already, ensure you are using local webserver and database management software. There are several options available, depending on your operating system. A common option for Mac is <a target= _blank  href= http://www.mamp.info >MAMP</a>, or <a target= _blank  href= http://www.wampserver.com >WAMP</a> for Windows. Both are free and easily set up.</p>
<p>Once your local development environment is set up, go ahead and <a target= _blank  href= http://www.magentocommerce.com/download >download Magento,</a> then follow the <a target= _blank  href= http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/magento_installation_guide >official guide</a> to install Magento locally.</p>
<p>Feel free to use Magento&#8217;s auto install script to set up the application in your local environment. However, due to Pagoda Box&#8217;s distributed cloud architecture, the script will not install Magento directly in your production environment. The Pagoda Box workflow and architecture requires you to make code modifications locally, commit, then deploy to production. This workflow accommodates collaboration and development > staging > production best practices.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-magento-installation.jpg  border= 0  /></div>
<hr />
<h2> <span>Step 4:</span> Configure PHP Using a Boxfile</h2>
<blockquote><p>Note: On Pagoda Box, a YAML <a target= _blank  href= http://help.pagodabox.com/customer/portal/articles/175475-understanding-the-boxfile >Boxfile</a> can be included in the root of your code repository. While the Boxfile is optional, it does provide advanced features, like manipulating your hosted environment on each deploy. We&#8217;ll use the Boxfile extensively in this Tutorial to simplify tasks, and to make the respository reusable on Pagoda Box.</p></blockquote>
<p>Create a file named &#8220;Boxfile&#8221; in the root of your local Magento installation, then copy the following into your Boxfile (explanation below):</p>
<pre name= code  class= php >
web1:
  name: mag-app
  shared_writable_dirs:
    - media
    - var
  php_version: 5.3.8
  php_extensions:
    - pdo_mysql
    - mysql
    - simplexml
    - mcrypt
    - hash
    - gd
    - dom
    - iconv
    - curl
    - soap
</pre>
<h3>Create / Name the Web Cluster</h3>
<p>This Boxfile serves several purposes. First, it creates a <code>web1</code> component, then names it <code>mag-app</code>.</p>
<h3>Shared Writable Directories</h3>
<p>Second, the Boxfile identifies <code>media</code> and <code>var</code> as shared writable directories. This allows users to upload images, video, and other media to a distributed Magento cloud site without instances writing themselves out of sync.</p>
<p>When a directory is marked as writable, the contents are no longer deployed to Pagoda Box from your local repository. Any time local files need to be deployed to these directories, they must be manually copied via SSH or SFTP. You may also <a target= _blank  href= http://help.pagodabox.com/customer/portal/articles/175418-shared-writable-storage-management >use SSH/SFTP to transfer files</a> from Pagoda Box to your local machine as needed.</p>
<h3>PHP Version and Extensions</h3>
<p>The Boxfile also declares which PHP version and extensions will be included in your web instances as they deploy. This way, both the environment and the application are versioned together, so rolling back to a previous deploy includes the correct PHP version and extensions. The list of PHP extensions in this Boxfile was taken from Magento&#8217;s official system requirements.</p>
<blockquote><p>Tip: Once Git is installed in your local environment, use the <code>.gitignore</code> file to ignore the writable directories specified in your Boxfile. Identifying these directories inside the <code>.gitignore</code> file helps reduce the size of your repo, and your deploy time. In addition to the writable directories, you can also add the <code>downloader</code> directory to the <code>.gitignore</code> file, since it&#8217;s used locally, and not on Pagoda Box.</p></blockquote>
<p>Once you&#8217;ve installed Git and the Terminal Client, configured the Boxfile and finalized your local source code, you&#8217;re ready to launch on Pagoda Box.</p>
<hr />
<h2> <span>Step 5:</span> Create a Free Pagoda Box Account</h2>
<p>If you don&#8217;t already have one, create a free <a target= _blank  href= http://www.pagodabox.com/account/register >Pagoda Box account.</a> You will not need to enter a credit card to install Magento for testing.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-box-register.jpg  border= 0  /></div>
<p>If you have not already done so, follow this guide to <a target= _blank  href= http://help.pagodabox.com/customer/portal/articles/200927#add-ssh-pagoda >Add an SSH Key</a> in your Pagoda Box Admin panel. The guide will provide specific instructions for setting up an SSH Key on either Mac or Windows.</p>
<hr />
<h2> <span>Step 6:</span> Upload Magento to Pagoda Box</h2>
<p>Once you&#8217;ve created a Pagoda Box account and set up an SSH Key, go to the Home Page in your new account and click the &#8220;New Application&#8221; button to create a new application.</p>
<blockquote><p>Note: This tutorial names our sample application &#8220;magento&#8221;. The app name is also used for the Pagoda Box repository, the subdomain for the freshly deployed application (magento.pagodabox.com), and the username in SFTP mode. Replace &#8220;magento&#8221; with &#8220;your-app-name-here&#8221; where appropriate throughout the remainder of this tutorial.</p></blockquote>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-new-app-button.jpg  border= 0  /></div>
<h3>Upload to an Empty Repo (recommended for this tutorial)</h3>
<p>Next, choose from the 3 options to launch your Magento site. Since you already have a customized version of Magento locally, select &#8216;Empty Repo&#8217; to deploy using SFTP or Git, name your application, and click &#8220;Launch Application&#8221;.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-empty-repo.jpg  border= 0  /></div>
<p>You&#8217;ll be asked to select your preferred deployment method (Git or SFTP). Click on your preference, and follow the instrutions on-screen.</p>
<h3>Git Option</h3>
<p>You can copy and paste the on-screen instructions from the Pagoda Box dashboard to your terminal after using Terminal to change directory (cd) to the root of your project.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-choice.png  border= 0  /></div>
<p>The pasted commands do the following:</p>
<ul>
<li><code>git init </code> &#8211; Initialize your Magento project as a Git Repository</li>
<li><code>git add . </code> &#8211; Add all files from the project to the repo</li>
<li><code>git commit -m  your commit message  </code> &#8211; Commit files with a message that allows you to quickly scan deploy history in the future, in case you need to revert or modify changes</li>
<li><code>git remote add pagoda git@git.pagodabox.com:magento.git </code> &#8211; Add Pagoda Box as a remote (the specific git url for your application appears on both this screen, and in your app dashboard</li>
<li><code>git push pagoda --all </code> &#8211; Push your local code to the Pagoda Box remote repository. As long as you&#8217;re on the &#8220;master&#8221; branch (which is the default), Pagoda Box will automatically deploy your code, and carry out the instructions we set in the Boxfile. Auto-deploy can be turned off in the Admin dashboard, or configured to deploy automatically from a Git branch other than Master.</li>
</ul>
<h3>SFTP Option</h3>
<p>If you opted for SFTP, Pagoda Box will guide you through establishing credentials and a password. Connect via SFTP to Pagoda Box, and upload your Magento source code in the <code>code</code> directory.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-sftp.jpg  border= 0  /></div>
<hr />
<h2> <span>Step 7:</span> Create a Database</h2>
<p>There are two ways to create a database on Pagoda Box. Each has benefits, explained below:</p>
<h3>Create a DB in the Boxfile</h3>
<p>The Boxfile will automatically create a database component on deploy, as long as that component (<code>db1</code>, <code>db2</code>, etc.) doesn&#8217;t already exist. Declaring the database in the Boxfile saves a bit of time now, and makes deploying multiple Magento sites from a standardized code base much simpler in the future. (Note: Only cloud DBs can be deployed from the Boxfile. If you need a larger, dedicated or redundant database, see the Dashboard option later in this Step.) Add the following to your Boxfile: </p>
<pre name= code  class= php >
db1:
  name: mag-db
  type: mysql
  </pre>
<p>Your updated Boxfile should look like this:</p>
<pre name= code  class= php >
web1:
  name: mag-app
  shared_writable_dirs:
    - media
    - var
  php_version: 5.3.8
  php_extensions:
    - pdo_mysql
    - mysql
    - simplexml
    - mcrypt
    - hash
    - gd
    - dom
    - iconv
    - curl
    - soap
db1:
  name: mag-db
  type: mysql
  </pre>
<p>Then commit changes to the updated file and push changes to Pagoda Box:</p>
<pre name= code  class= php >
$ git commit -m  pagoda config 
$ git push pagoda --all
</pre>
<h3>Alternate: Create a DB in the Dashboard</h3>
<p>You can also create a database from the Pagoda Box Dashboard. This is where you add a larger, dedicated or redundant database.</p>
<p>First, click &#8220;Add Database&#8221; in the Dashboard.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-add-db.jpg  border= 0  /></div>
<p>Pagoda Box will step through a series of screens to configure your database, depending on your choices. If you&#8217;ve chosen the Dedicated option, you will be asked to size your database as follows:</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-dedicated-db.jpg  border= 0  /></div>
<p>Cloud databases usually deploy within minutes. If you chosen Dedicated, don&#8217;t get impatient. You may wait for up to 90 minutes for a big server to be provisioned to your specifications.</p>
<hr />
<h2> <span>Step 8:</span> Configure DB Credentials for Production</h2>
<p>Your database automatically generates credentials when it&#8217;s created on Pagoda Box. We&#8217;ll use those credentials to configure Magento in production.</p>
<p>However, since Magento will be used in both local environments and in production, we need to supply different database credentials for each. We&#8217;ll use Deploy Hooks in the Boxfile to simplify this process by executing scripts or commands during deploy.</p>
<p>In the case of Magento, we&#8217;ll swap the <code>local.xml</code> file upon deploy. That way, without manually switching credentials, the <code>app/etc/local.xml</code> file will automatically have local database credentials in development, but production database credentials on Pagoda Box.</p>
<h3>Create a local.xml for Production</h3>
<p>First, create a directory named <code>pagoda</code> in root, then copy Magento&#8217;s <code>app/etc/local.xml</code> to the new directory.</p>
<p>Next, edit <code>local.xml</code> to include Pagoda Box database credentials from your account dashboard. Note that Pagoda Box uses 3 levels of authentication, so that even if your credentials are compromised, other users cannot access your database.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-db-credentials.jpg  border= 0  /></div>
<h3>Swap local.xml Configs on Deploy</h3>
<p>Add the following into your Boxfile, under the <code>web1</code> section to create the Deploy Hook.</p>
<pre name= code  class= php >
after_build:
   mv pagoda/local.xml app/etc/local.xml 
</pre>
<p>Your updated Boxfile should look like this:</p>
<pre name= code  class= php >
web1:
  name: mag-app
  shared_writable_dirs:
    - media
    - var
  php_version: 5.3.8
  php_extensions:
    - pdo_mysql
    - mysql
    - simplexml
    - mcrypt
    - hash
    - gd
    - dom
    - iconv
    - curl
    - soap
  after_build:
  -  mv pagoda/local.xml app/etc/local.xml 
db1:
  name: mag-db
  type: mysql
  </pre>
<p>Then commit changes and push to Pagoda Box:</p>
<pre name= code  class= php >
$ git add .
$ git commit -m  pagoda config 
$ git push pagoda --all
</pre>
<hr />
<h2> <span>Step 9:</span> Migrate the Database</h2>
<blockquote><p>With the same tools you use to manage a local database, you can securely manage a live database on Pagoda Box. We&#8217;ll use Sequel Pro for this example, but the process is similar for tools like HeidiSQL.</p></blockquote>
<h3>Export Your Local DB</h3>
<p>When the Magento install script ran locally, it created several tables in the local database. Those tables need to be migrated to production.</p>
<p>First, export your local database using your database manager: File > Export.</p>
<p>Now choose a location, and Save the export.</p>
<h3>Establish a Secure DB Connection</h3>
<p>Now establish a database tunnel. Using the Pagoda Box Terminal Client, specify the app whose database you are trying to access, and the ID of the database component (e.g. db1), as in this example:</p>
<pre name= code  class= php >
$ pagoda -a magento tunnel -c db1
--OR--
$ pagoda --app=magento tunnel --component=db1
</pre>
<p>Once the tunnel is established, use Sequel Pro (or similar) to connect to the database using the Host and Port provided by the Pagoda Terminal Client&#8230;</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-host-port.png  border= 0  /></div>
<p>And the username and password in your Pagoda database credentials. These were automatically created with your database, and may be found in the Pagoda Box Dashboard under the database component (see example in Step 8).</p>
<h3>Import and Update the Production DB</h3>
<p>Next, import your database into production using Sequel Pro (or similar): File > Import. Now select the database export file, and Open.</p>
<p>Finally, since we ran the install script locally, it&#8217;s necessary to adjust the base url directly in the database before browsing the site. While you are still connected to the Pagoda Box database in Sequel Pro, navigate/filter to the <code>core_config_data</code> table and edit the value for the following paths:</p>
<pre name= code  class= php >
web/unsecure/base_url
web/secure/base_url
</pre>
</p>
<p>The values for each should look something like this:</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-sequel-pro.jpg  border= 0  /></div>
<hr />
<h2> <span>Step 10:</span> Configure Mail</h2>
<p>To protect your IPs from being flagged as spam, Pagoda Box uses the SMTP mail protocol to send email via third party mail provider SMTP credentials. In English, that means you need a company (like Gmail) that provides mail services.</p>
<p>Regardless of which mail provider you choose, enter account credentials from that provider in your Pagoda Box dashboard. It should look something like this:</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-mail-dash.jpg  border= 0  /></div>
<hr />
<h2> <span>Step 11:</span> Cron Jobs (Optional)</h2>
<p>A few recurring tasks in Magento (e.g. sending newsletters, log cleaning, customer notifications, etc.) need to happen periodically. The <code>cron.php</code> file located in Magento&#8217;s root will trigger these tasks. We&#8217;ll set up a Cron Job in the Pagoda Box admin panel to run <code>cron.php</code> every 15 minutes. (Note: To configure Magento specific tasks, see their <a target= _blank  href= http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job#unixbsdlinux >Official Guide.</a>)</p>
<h3>Cron Jobs in the Boxfile</h3>
<p>Cron Jobs can be added or updated via the Boxfile, then deployed to Pagoda Box. To schedule a task at 15 minute intervals, add the following to your Boxfile under the <code>web1:</code> component (change the &#8220;magento&#8221; to point to your own app name / subdomain):</p>
<pre name= code  class= php >
  cron:
    -  */15 * * * * :  curl -s -o /dev/null http://magento.pagodabox.com/cron.php 
    </pre>
<p>Your updated Boxfile should look like this:</p>
<pre name= code  class= php >
web1:
  name: mag-app
  shared_writable_dirs:
    - media
    - var
  php_version: 5.3.8
  php_extensions:
    - pdo_mysql
    - mysql
    - simplexml
    - mcrypt
    - hash
    - gd
    - dom
    - iconv
    - curl
    - soap
  after_build:
  -  mv pagoda/local.xml app/etc/local.xml 
cron:
    -  */15 * * * * :  curl -s -o /dev/null http://magento.pagodabox.com/cron.php 
db1:
  name: mag-db
  type: mysql
  </pre>
<h3>Alternate: Cron Jobs in the Dashboard</h3>
<p>In the Pagoda Box admin panel under the Cron tab, add the following (change the &#8220;magento&#8221; to point to your own app name):</p>
<p>Command: <code>curl -s -o /dev/null http://magento.pagodabox.com/cron.php</code></p>
<p>Schedule:  <code>*/15 * * * *</code></p>
<p>It should look like this:</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2038_magentoScale/pagoda-cron-dash.jpg  border= 0  /></div>
<hr />
<h2> <span>Part 2 &#8211; Optimization:</span> Redis, Scaling &#038; Benchmarking</h2>
<p>You&#8217;ve already gotten the heavy lifting out of the way. Your Magento application is scalable, and changes are easily deployed across all instances with <code>$ git push pagoda --all</code>.</p>
<p>In the follow-up article, we&#8217;ll optimize Magento, add a Redis cache, SSL and Domain aliases, then scale the application for benchmarking and production. See you soon!</p>
<p><a href= http://feedads.g.doubleclick.net/~a/Z3Vd1fWZuJZxcNaa19z5WleoV3E/0/da ><img src= http://feedads.g.doubleclick.net/~a/Z3Vd1fWZuJZxcNaa19z5WleoV3E/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/Z3Vd1fWZuJZxcNaa19z5WleoV3E/1/da ><img src= http://feedads.g.doubleclick.net/~a/Z3Vd1fWZuJZxcNaa19z5WleoV3E/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=gCVIO2Y0hy4:iklNFAMdN6o:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gCVIO2Y0hy4:iklNFAMdN6o:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=gCVIO2Y0hy4:iklNFAMdN6o:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gCVIO2Y0hy4:iklNFAMdN6o:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=gCVIO2Y0hy4:iklNFAMdN6o:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gCVIO2Y0hy4:iklNFAMdN6o:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=gCVIO2Y0hy4:iklNFAMdN6o:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gCVIO2Y0hy4:iklNFAMdN6o:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/gCVIO2Y0hy4  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-15 22:52:03</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Lots Of New Premium Content!]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=871</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=871</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25004&c=1987485556  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=25004&c=1987485556  border= 0  alt=   /></a><p>As <a href= http://tutsplus.com >Tuts+ Premium</a> continues to sky-rocket, our ability to post better, more frequent, content has improved dramatically as well. This week, we have a variety of fun new things available to members! </p>
<p><span id= more-25004 ></span></p>
<hr />
<h2><span>Course &#8211; </span><a href= http://tutsplus.com/course/how-to-be-a-terminal-pro/ >How To Be A Terminal Pro</a></h2>
<p><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2037_premiumPromo/Newsletter_Termpro.png  style= float: left; margin-right: 20px; margin-bottom: 40px; border: 1px solid #c5c5c5; ></p>
<p style= margin-top: -20px; >In this fifteen-episode course, you€™ll learn how to take advantage of that scary app you never touch: Terminal! We€™ll begin with the obligatory €śhello world€ť command, and work our way up to advanced usage.</p>
<hr />
<h2><span>Course &#8211; </span><a href= http://tutsplus.com/course/javascript-testing-with-jasmine-2/ >JavaScript Testing With Jasmine</a></h2>
<p><img src= http://d2o0t5hpnwv4c1.cloudfront.net/2037_premiumPromo/NewsletterJasmine.png  style= float: left; margin-right: 20px; border: 1px solid #c5c5c5; ></p>
<p style= margin-top: -20px; >Admit it: you say that you test your JavaScript, but, in reality, you€¦don€™t. That€™s okay; the idea of testing JavaScript is a relatively new thing. And unfortunately, there aren€™t too many €śhold your hand€ť resources for getting up and running. Well, that all changes with this course. We start from scratch, and slowly work our way up the testing chain.</p>
<p>
Along the way, we€™ll take advantage of the fantastic Jasmine BDD (Behavior-Driven Development) framework to make our tests as readable as possible. Upon completion of the course, you€™ll not only have a robust test suite at your fingertips, but your tests will also make for fantastic documentation!</p>
<hr />
<h2><span>eBook -</span> <a href= http://tutsplus.com/ebook/client-centric-web-design/  alt= Client Centric Web Design >Client Centric Web Design</a></h2>
<p><img src= http://tutsplus.com/wp-content/uploads/2012/05/clientcentric.png  style= float: left; padding-right: 20px; padding-bottom: 20px; ></p>
<p style= margin-top: -20px; >Other than Internet Explorer, what is the most challenging part of your job? Did you answer clients? If so, this eBook, by Paul Boag, is for you. Discover how to keep your clients happy, maintain your own sanity and produce the most effective websites you have ever built, resulting in happier clients, better websites, and improved job satisfaction.</p>
<hr />
<h2><span>eBook -</span> <a href= http://tutsplus.com/ebook/building-websites-for-return-on-investment/ >Building Websites for Return on Investment</a></h2>
<p><img src= http://tutsplus.com/wp-content/uploads/2012/05/websiteforreturninvest.png  style= float: left; padding-right: 20px; padding-bottom: 20px;  alt= Building Websites For Return on Investment ></p>
<p style= margin-top: -20px; >€Building Websites for Return on Investment€™ uncovers the secrets of sites that successfully generate real return on investment. This book will enable you to transform your website from an expense to a measurable source of income.</p>
<hr />
<h2><span>Article &#8211; </span><a href= http://tutsplus.com/tutorial/are-you-using-coffeescript/ >Are You Using CoffeeScript?</a></h2>
<p><img src= http://tutsplus.com/wp-content/uploads/2012/05/coffeescript-1-100x100.jpg  style= float: left; padding-right: 20px; padding-bottom: 20px; ></p>
<p style= margin-top: -20px; >For those who haven&#8217;t yet had the chance to dig into CoffeeScript, this article will get you up and running in no time!</p>
<hr />
<h2>Coming Soon to Tuts+ Premium</h2>
<p>Nothing above pique your interest? That&#8217;s okay; we have plenty of amazing new content on the near horizon, including the following courses: </p>
<ul>
<li>PHP Fundamentals
<li>What&#8217;s New in PHP 5.4?
<li>Cleaner Code With CoffeeScript
<li>Backbone.js Fundamentals
<li>The Sublime Text 2 Guide
<li>Test-Driven Development in Ruby
</ul>
<p>Already a member? What requests do you have? Haven&#8217;t signed up yet? Well now&#8217;s <a href= http://tutsplus.com/take-the-tour/ >the perfect time</a>! </p>
<p><a href= http://feedads.g.doubleclick.net/~a/UbpU1o2yutPUopYb5Py4xc_TNL0/0/da ><img src= http://feedads.g.doubleclick.net/~a/UbpU1o2yutPUopYb5Py4xc_TNL0/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/UbpU1o2yutPUopYb5Py4xc_TNL0/1/da ><img src= http://feedads.g.doubleclick.net/~a/UbpU1o2yutPUopYb5Py4xc_TNL0/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=FDs5xPovxac:9af7cCluTRA:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=FDs5xPovxac:9af7cCluTRA:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=FDs5xPovxac:9af7cCluTRA:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=FDs5xPovxac:9af7cCluTRA:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=FDs5xPovxac:9af7cCluTRA:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=FDs5xPovxac:9af7cCluTRA:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=FDs5xPovxac:9af7cCluTRA:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=FDs5xPovxac:9af7cCluTRA:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/FDs5xPovxac  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-15 22:52:03</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[33 Website Layouts Designed for Video Game Launches]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=869</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=869</guid>
			  <description><![CDATA[<p><a href= http://rss.buysellads.com/click.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12146&c=286434535  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12146&c=286434535  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264758  target= _blank >Advertise here with BSA</a></p><br /><p class= bigger >The subject of video game websites is not often a popular idea. But consider how rapidly video games have advanced since the days of Atari and Nintendo. We now have so many publishers between America and Japan it&#8217;s difficult to keep track.</p>
<p>I put together this gallery as a look into past and present design trends. This collection of video game websites includes new releases along with titles published back in early 2000. Notice how each game brings it&#8217;s own feelings and emotions into the site layout. This is the perfect showcase if you are building a small website for a game publication &#8211; even a product launching for mobile tablets or smartphones. Video games are ingrained into our culture and they&#8217;re sure to entertain kids(and adults) for generations to come.</p>
<h3><a href= http://www.ffx-europe.com/ >FFX Europe</a></h3>
<p class= nobrdr ><a href= http://www.ffx-europe.com/ ><img src= http://spyrestudios.com/wp-content/uploads/01-final-fantasy-ffx-europe.jpg  class= frame  /></a></p>
<p><span id= more-12146 ></span></p>
<h3><a href= http://na.square-enix.com/games/FFX/ >NA Final Fantasy X</a></h3>
<p class= nobrdr ><a href= http://na.square-enix.com/games/FFX/ ><img src= http://spyrestudios.com/wp-content/uploads/02-final-fantasy-10-ffx-north-american.jpg  class= frame  /></a></p>
<h3><a href= http://na.square-enix.com/khrecom/ >Kingdom Hearts Re: Chain of Memories</a></h3>
<p class= nobrdr ><a href= http://na.square-enix.com/khrecom/ ><img src= http://spyrestudios.com/wp-content/uploads/03-kingdom-hearts-re-chain-of-memories.jpg  class= frame  /></a></p>
<h3><a href= http://na.square-enix.com/ffxiii-2/ >Final Fantasy XIII-2</a></h3>
<p class= nobrdr ><a href= http://na.square-enix.com/ffxiii-2/ ><img src= http://spyrestudios.com/wp-content/uploads/04-final-fantasy-xiii2-13-game-website.jpg  class= frame  /></a></p>
<h3><a href= http://na.square-enix.com/kh3d/ >KH3D</a></h3>
<p class= nobrdr ><a href= http://na.square-enix.com/kh3d/ ><img src= http://spyrestudios.com/wp-content/uploads/05-kingdom-hearts-3ds-dream-drop-distance.jpg  class= frame  /></a></p>
<h3><a href= http://raymanorigins.uk.ubi.com/ >Rayman Origins</a></h3>
<p class= nobrdr ><a href= http://raymanorigins.uk.ubi.com/ ><img src= http://spyrestudios.com/wp-content/uploads/06-rayman-origins-video-game-website.jpg  class= frame  /></a></p>
<h3><a href= http://www.finalfantasyxiv.com/ >Final Fantasy XIV</a></h3>
<p class= nobrdr ><a href= http://www.finalfantasyxiv.com/ ><img src= http://spyrestudios.com/wp-content/uploads/07-final-fantasy-xiv-14-online.jpg  class= frame  /></a></p>
<h3><a href= http://www.littlebigplanet.com/ >Little Big Planet</a></h3>
<p class= nobrdr ><a href= http://www.littlebigplanet.com/ ><img src= http://spyrestudios.com/wp-content/uploads/08-little-big-planet-ps3.jpg  class= frame  /></a></p>
<h3><a href= http://animal-crossing.com/cityfolk/ >Animal Crossing: City Folk</a></h3>
<p class= nobrdr ><a href= http://animal-crossing.com/cityfolk/ ><img src= http://spyrestudios.com/wp-content/uploads/09-animal-crossing-city-folk.jpg  class= frame  /></a></p>
<h3><a href= http://katamaridamacy.jp/ >Katamari Damacy</a></h3>
<p class= nobrdr ><a href= http://katamaridamacy.jp/ ><img src= http://spyrestudios.com/wp-content/uploads/10-katamari-damacy-bandai-japan.jpg  class= frame  /></a></p>
<h3><a href= http://www.cookingmama.com/ >Cooking Mama</a></h3>
<p class= nobrdr ><a href= http://www.cookingmama.com/ ><img src= http://spyrestudios.com/wp-content/uploads/11-cooking-mama-world-games.jpg  class= frame  /></a></p>
<h3><a href= http://www.capcom.com/phoenixwright/ >Pheonix Wright Ace Attorney</a></h3>
<p class= nobrdr ><a href= http://www.capcom.com/phoenixwright/ ><img src= http://spyrestudios.com/wp-content/uploads/12-pheonix-wright-ace-attorney.jpg  class= frame  /></a></p>
<h3><a href= http://www.wildarms4.com/ >Wild ARMs 4</a></h3>
<p class= nobrdr ><a href= http://www.wildarms4.com/ ><img src= http://spyrestudios.com/wp-content/uploads/13-wild-arms-4-ps2-website.jpg  class= frame  /></a></p>
<h3><a href= http://www.finalfantasyxii.com/ >Final Fantasy XII</a></h3>
<p class= nobrdr ><a href= http://www.finalfantasyxii.com/ ><img src= http://spyrestudios.com/wp-content/uploads/14-final-fantasy-xii-12-square-enix-website.jpg  class= frame  /></a></p>
<h3><a href= http://www.natsume.com/current_game/games/3Dhmttott/index.html >Harvest Moon The Tale of Two Towns</a></h3>
<p class= nobrdr ><a href= http://www.natsume.com/current_game/games/3Dhmttott/index.html ><img src= http://spyrestudios.com/wp-content/uploads/15-harvest-moon-tale-two-towns-natsume.jpg  class= frame  /></a></p>
<h3><a href= http://professorlayton.nintendo.com/ >Professor Layton</a></h3>
<p class= nobrdr ><a href= http://professorlayton.nintendo.com/ ><img src= http://spyrestudios.com/wp-content/uploads/16-professor-layton-games.jpg  class= frame  /></a></p>
<h3><a href= http://donkeykong.nintendo.com/ >Donkey Kong Country</a></h3>
<p class= nobrdr ><a href= http://donkeykong.nintendo.com/ ><img src= http://spyrestudios.com/wp-content/uploads/17-donkey-kong-country-returns.jpg  class= frame  /></a></p>
<h3><a href= http://www.pokemon.com/us/ >Pokemon USA</a></h3>
<p class= nobrdr ><a href= http://www.pokemon.com/us/ ><img src= http://spyrestudios.com/wp-content/uploads/18-pokemon-north-america-usa.jpg  class= frame  /></a></p>
<h3><a href= http://xenosaga.becksite.com/ >Xenosaga</a></h3>
<p class= nobrdr ><a href= http://xenosaga.becksite.com/ ><img src= http://spyrestudios.com/wp-content/uploads/19-xenosaga-website-official.jpg  class= frame  /></a></p>
<h3><a href= http://www.residentevil.com/gold/ >Resident Evil Gold Edition</a></h3>
<p class= nobrdr ><a href= http://www.residentevil.com/gold/ ><img src= http://spyrestudios.com/wp-content/uploads/20-resident-evil-gold-edition.jpg  class= frame  /></a></p>
<h3><a href= http://www.ratchetandclank.com/en_US/index.htm >Ratchet and Clank</a></h3>
<p class= nobrdr ><a href= http://www.ratchetandclank.com/en_US/index.htm ><img src= http://spyrestudios.com/wp-content/uploads/21-official-ratchet-and-clank.jpg  class= frame  /></a></p>
<h3><a href= http://www.nintendo.com/sites/supermariogalaxy/ >Super Mario Galaxy</a></h3>
<p class= nobrdr ><a href= http://www.nintendo.com/sites/supermariogalaxy/ ><img src= http://spyrestudios.com/wp-content/uploads/22-super-mario-galaxy.jpg  class= frame  /></a></p>
<h3><a href= http://www.ea.com/sim-city >Sim City</a></h3>
<p class= nobrdr ><a href= http://www.ea.com/sim-city ><img src= http://spyrestudios.com/wp-content/uploads/23-electronic-arts-sim-city.jpg  class= frame  /></a></p>
<h3><a href= http://www.darkvoidgame.com/flash/index.html >Dark Void</a></h3>
<p class= nobrdr ><a href= http://www.darkvoidgame.com/flash/index.html ><img src= http://spyrestudios.com/wp-content/uploads/24-dark-void-video-game.jpg  class= frame  /></a></p>
<h3><a href= http://www.rockstargames.com/IV/ >Grand Theft Auto IV</a></h3>
<p class= nobrdr ><a href= http://www.rockstargames.com/IV/ ><img src= http://spyrestudios.com/wp-content/uploads/25-grand-theft-auto-iv-four.jpg  class= frame  /></a></p>
<h3><a href= http://www.pokemonplatinum.com/ >Pokemon Platinum</a></h3>
<p class= nobrdr ><a href= http://www.pokemonplatinum.com/ ><img src= http://spyrestudios.com/wp-content/uploads/26-pokemon-platinum-official-website.jpg  class= frame  /></a></p>
<h3><a href= http://www.pokemonblackwhite.com/en-us/ >Pokemon Black and White</a></h3>
<p class= nobrdr ><a href= http://www.pokemonblackwhite.com/en-us/ ><img src= http://spyrestudios.com/wp-content/uploads/27-pokemon-black-white-official-website.jpg  class= frame  /></a></p>
<h3><a href= http://na.square-enix.com/fftactics/ >Final Fantasy Tactics: War of the Lions</a></h3>
<p class= nobrdr ><a href= http://na.square-enix.com/fftactics/ ><img src= http://spyrestudios.com/wp-content/uploads/28-final-fantasy-tactics-war-lions-website.jpg  class= frame  /></a></p>
<h3><a href= http://na.square-enix.com/ffcceot/ >Final Fantasy Crystal Chronicles: Echoes of Time</a></h3>
<p class= nobrdr ><a href= http://na.square-enix.com/ffcceot/ ><img src= http://spyrestudios.com/wp-content/uploads/29-final-fantasy-crystal-chronicles-echoes-time.jpg  class= frame  /></a></p>
<h3><a href= http://www.bokumono.com/ >Bukumono Japan</a></h3>
<p class= nobrdr ><a href= http://www.bokumono.com/ ><img src= http://spyrestudios.com/wp-content/uploads/30-harvest-moon-bokumono-japan.jpg  class= frame  /></a></p>
<h3><a href= http://www.maql.co.jp/special/game/runeoceans/ >Rune Factory: Oceans of Destiny</a></h3>
<p class= nobrdr ><a href= http://www.maql.co.jp/special/game/runeoceans/ ><img src= http://spyrestudios.com/wp-content/uploads/31-rune-factory-oceans-tides-destiny.jpg  class= frame  /></a></p>
<h3><a href= http://www.maql.co.jp/special/game/ps2/innocent_life/ >Innocent Life</a></h3>
<p class= nobrdr ><a href= http://www.maql.co.jp/special/game/ps2/innocent_life/ ><img src= http://spyrestudios.com/wp-content/uploads/32-innocent-life-futuristic-harvest-moon-pure.jpg  class= frame  /></a></p>
<h3><a href= http://www.maql.co.jp/special/game/ds/runefactory2/ >Rune Factory 2 DS</a></h3>
<p class= nobrdr ><a href= http://www.maql.co.jp/special/game/ds/runefactory2/ ><img src= http://spyrestudios.com/wp-content/uploads/33-japanese-rune-factory-2-website.jpg  class= frame  /></a></p>
<br /><p><a href= http://rss.buysellads.com/click.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12146&c=1446010080  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12146&c=1446010080  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264756  target= _blank >Advertise here with BSA</a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=TzevzKxY174  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=kjorjBlSG-k:NimitTALQg8:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:l6gmwiTKsz0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=l6gmwiTKsz0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:qj6IDK7rITs ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=qj6IDK7rITs  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=kjorjBlSG-k:NimitTALQg8:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:7Q72WNTAKBA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=7Q72WNTAKBA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=kjorjBlSG-k:NimitTALQg8:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:dnMXMwOfBR0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=dnMXMwOfBR0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:D7DqB2pKExk ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=kjorjBlSG-k:NimitTALQg8:D7DqB2pKExk  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=kjorjBlSG-k:NimitTALQg8:-BTjWOF_DHI ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=kjorjBlSG-k:NimitTALQg8:-BTjWOF_DHI  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/SpyreStudios/~4/kjorjBlSG-k  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-14 22:52:00</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[How to Convert a Widget into a Joomla Module]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=868</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=868</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24993&c=30502358  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24993&c=30502358  border= 0  alt=   /></a><p>This tutorial will cover the process of creating a basic Joomla module from an existing widget. We&#8217;re going to take a widget from <a href= http://mixcloud.com >Mixcloud</a>, learn how to convert it into a Joomla module and, finally, distribute the extension to JED (Joomla Extension Directory).</p>
<p>If you&#8217;ve never created a Joomla module before, this article is the best place to start!</p>
<p><span id= more-24993 ></span></p>
<hr />
<h2> <span>Step 1:</span> Setting up Our Files</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/file_struc.jpg  border= 0  /></div>
<h3> Basic Files </h3>
<p>For every module created for Joomla, there are two files that absolutely need to be present. One file is a configuration XML file that will hold the module details and parameters and a PHP file that will control our module. For the purpose of this tutorial, we will create a folder called <code>mod_mixcloud_widget</code> and, within it, using your favorite code editor, create <code>mod_mixcloud_widget.php</code> and <code>mod_mixcloud_widget.xml</code>. Before we move on to the next step, create a single  HTML file named <code>index.html</code>.The <code>index.html</code> file that was created will be used to hide the contents of the module folder when viewing via a browser.</p>
<h3> Template Files </h3>
<p>
Now that you&#8217;ve added the core files, it&#8217;s time to add the template files. We do this by creating a folder called <code>tmpl</code>. Within that folder, we create <code>default.php</code> and <code>index.html</code>. The file <code>default.php</code> will be the module template that will take generated information and output them into clean HTML format on the page.
</p>
<h3> Language Files </h3>
<p>
Lastly, while inside our root module folder, we create a new folder called <code>language</code>. This folder will have two files: <code>en-GB.mod_mixcloud_widget.ini</code> and <code>en-GB.mod_mixcloud_widget.sys.ini</code> which will be used to make our module internationable with the option of having different languages.
</p>
<h3> Final File Structure </h3>
<p>
After following each step, you should have the following file structure</p>
<ul>
<li>language/en-GB.mod_mixcloud_widget.ini</li>
<li>language/en-GB.mod_mixcloud_widget.sys.ini</li>
<li>tmpl/default.php</li>
<li>tmpl/index.html</li>
<li>index.html</li>
<li>mod_mixcloud_widget.php</li>
<li>mod_mixcloud_widget.xml</li>
</ul>
<hr />
<h2> <span>Step 2:</span> Setting Up Our XML File</h2>
<p>Each Joomla Extension installed has an XML file, which is referred to as a <em>manifest</em> or <em>Install</em> file. This file contains metadata details, such as author, version, description etc. It is also used as a configuration file for module prameters. For the purpose of this tutorial, we will be creating a manifest file for a Joomla 2.5 module. Add the following snippet to your XML file.</p>
<pre class= brush: xml; title: ; notranslate >
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;extension 	type=&quot;module&quot;	version=&quot;2.5&quot;	client=&quot;site&quot;	method=&quot;upgrade&quot;&gt;
	&lt;name&gt;MOD_MIXCLOUD_WIDGET&lt;/name&gt;
	&lt;author&gt;B4ucode&lt;/author&gt;
	&lt;creationDate&gt;May 2012&lt;/creationDate&gt;
	&lt;copyright&gt;Copyright (C) 2011 - 2012. All rights reserved.&lt;/copyright&gt;
	&lt;license&gt;GNU General Public License version 2 or later;&lt;/license&gt;
	&lt;authorEmail&gt;info@b4ucode.com&lt;/authorEmail&gt;
	&lt;authorUrl&gt;www.b4ucode.com&lt;/authorUrl&gt;
	&lt;version&gt;1.0.0&lt;/version&gt;
	&lt;description&gt;MOD_MIXCLOUD_WIDGET_XML_DESCRIPTION&lt;/description&gt;
</pre>
<p>The primary tag <code>extension</code> has a few attributes:</p>
<ul>
<li>type: Tells Joomla what type of extension is being installed, in this case <code>module</code>.</li>
<li>version: Instructs the installer what version of Joomla we are creating the module for.</li>
<li>method: There are two options: <code>new</code> and <code>upgrade</code>. We will be using upgrade, in case of any future updates to the module, it will simply upgrade what is currently there.</li>
<li>client: Instructs whether the module is a front-end or back-end module.</li>
</ul>
<p>The other set of tags are metadata tags which hold information about the module which will be used during installation and the administration of the module.</p>
<h3> Module Files </h3>
<p>As mentioned before, the manifest file holds information about the files used in the module. During installation, Joomla checks the manifest file for all the files that should be added to the system. If any of the files are missing, then Joomla will give an error explaining the files that are missing. Any files found in the module, that aren&#8217;t listed in the XML file are not added to the system with the others. Add the following snippet to your manifest file.</p>
<pre class= brush: xml; title: ; notranslate >
	&lt;files&gt;
		&lt;filename module=&quot;mod_mixcloud_widget&quot;&gt;mod_mixcloud_widget.php&lt;/filename&gt;
		&lt;folder&gt;tmpl&lt;/folder&gt;
		&lt;filename&gt;index.html&lt;/filename&gt;
		&lt;filename&gt;mod_mixcloud_widget.xml&lt;/filename&gt;
	&lt;/files&gt;
</pre>
<blockquote>
<p>
Instead of writing a line for each file in a folder, we simply use the folder element. This element will instruct the installer to install all the files in this folder.
</p>
</blockquote>
<h3> Language Files </h3>
<p>This element holds the language files that are to be installed with the module. For the purpose of this tutorial, only one language will be used. When there are more languages, you can simply change the prefix of the files and the tag attribute to the exact language based on the Joomla framework.</p>
<pre class= brush: xml; title: ; notranslate >
	&lt;languages&gt;
		&lt;language tag=&quot;en-GB&quot;&gt;language/en-GB.mod_mixcloud_widget.ini&lt;/language&gt;
		&lt;language tag=&quot;en-GB&quot;&gt;language/en-GB.mod_mixcloud_widget.sys.ini&lt;/language&gt;
	&lt;/languages&gt;
</pre>
<h3> Adding Parameters </h3>
<p>Some extensions don&#8217;t work right out of the box, but need certain settings added: these settings are called, parameters, and are defined in the manifest file.</p>
<p>The first element is <code>config</code> which holds other elements that will be displayed in HTML format.  The element called <code>field</code> is the meat of our parameters where you can define what type of form data you wish to display. This element at its basic level is made up of some core attributes:
</p>
<ul>
<li><strong>type:</strong> Type of form field  like text, textarea, checkboxes, radio and calendar.</li>
<li><strong>name:</strong> The name element of the form field to displayed.</li>
<li><strong>default:</strong> Default value of the field.</li>
<li><strong>label:</strong> Text displayed at the beginning of our form field.</li>
<li><strong>description:</strong> Description that will be shown in a tooltip when hovering on our form field</li>
<p></u></p>
<p>There are different attributes as they vary per form field type like size, filter, exclude, directory and more.</p>
<pre class= brush: xml; title: ; notranslate >
	&lt;config&gt;
		&lt;fields name=&quot;params&quot;&gt;
			&lt;fieldset name=&quot;basic&quot;&gt;
				&lt;field type=&quot;text&quot; name=&quot;feed&quot; default=&quot;&quot; label=&quot;MOD_MIXCLOUD_WIDGET_FEED_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_FEED_DESC&quot; /&gt;
				&lt;field name=&quot;color&quot; type=&quot;color&quot; default=&quot;&quot; label=&quot;MOD_MIXCLOUD_WIDGET_COLOR_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_COLOR_DESC&quot; /&gt;
				&lt;field name=&quot;width&quot; type=&quot;text&quot; default=&quot;300&quot; size=&quot;40&quot; label=&quot;MOD_MIXCLOUD_WIDGET_WIDTH_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_WIDTH_DESCRIPTION&quot; /&gt;
				&lt;field name=&quot;height&quot; type=&quot;text&quot; default=&quot;300&quot; size=&quot;40&quot; label=&quot;MOD_MIXCLOUD_WIDGET_HEIGHT_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_HEIGHT_DESCRIPTION&quot; /&gt;
			&lt;/fieldset&gt;
			&lt;fieldset
				name=&quot;advanced&quot;&gt;
				&lt;field
					name=&quot;layout&quot;
					type=&quot;modulelayout&quot;
					label=&quot;JFIELD_ALT_LAYOUT_LABEL&quot;
					description=&quot;JFIELD_ALT_module_LAYOUT_DESC&quot; /&gt;
				&lt;field
					name=&quot;moduleclass_sfx&quot;
					type=&quot;text&quot;
					label=&quot;COM_moduleS_FIELD_moduleCLASS_SFX_LABEL&quot;
					description=&quot;COM_moduleS_FIELD_moduleCLASS_SFX_DESC&quot; /&gt;
				&lt;field
					name=&quot;owncache&quot;
					type=&quot;list&quot;
					default=&quot;1&quot;
					label=&quot;COM_moduleS_FIELD_CACHING_LABEL&quot;
					description=&quot;COM_moduleS_FIELD_CACHING_DESC&quot;&gt;
					&lt;option value=&quot;1&quot;&gt;JGLOBAL_USE_GLOBAL&lt;/option&gt;
					&lt;option	value=&quot;0&quot;&gt;COM_moduleS_FIELD_VALUE_NOCACHING&lt;/option&gt;
				&lt;/field&gt;
			&lt;/fieldset&gt;
		&lt;/fields&gt;
	&lt;/config&gt;
&lt;/extension&gt;
</pre>
<blockquote>
<p>
You may notice that we have written labels and description in some uppercase characters like <code>MOD_MIXCLOUD_WIDGET_FEED_TITLE</code>. These are strings that we will make translatable when creating our language files.
</p>
</blockquote>
<h3> Finished XML File </h3>
<p>If you&#8217;ve followed thus far, you should have a completed XML File like following
</p>
<pre class= brush: xml; title: ; notranslate >
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;extension 	type=&quot;module&quot;	version=&quot;2.5&quot;	client=&quot;site&quot;	method=&quot;upgrade&quot;&gt;
	&lt;name&gt;MOD_MIXCLOUD_WIDGET&lt;/name&gt;
	&lt;author&gt;B4ucode&lt;/author&gt;
	&lt;creationDate&gt;May 2012&lt;/creationDate&gt;
	&lt;copyright&gt;Copyright (C) 2011 - 2012 Open Source Matters. All rights reserved.&lt;/copyright&gt;
	&lt;license&gt;GNU General Public License version 2 or later;&lt;/license&gt;
	&lt;authorEmail&gt;info@b4ucode.com&lt;/authorEmail&gt;
	&lt;authorUrl&gt;www.b4ucode.com&lt;/authorUrl&gt;
	&lt;version&gt;1.0.0&lt;/version&gt;
	&lt;description&gt;MOD_MIXCLOUD_WIDGET_XML_DESCRIPTION&lt;/description&gt;
	&lt;files&gt;
		&lt;filename module=&quot;mod_mixcloud_widget&quot;&gt;mod_mixcloud_widget.php&lt;/filename&gt;
		&lt;folder&gt;tmpl&lt;/folder&gt;
		&lt;filename&gt;index.html&lt;/filename&gt;
		&lt;filename&gt;mod_mixcloud_widget.xml&lt;/filename&gt;
	&lt;/files&gt;
	&lt;languages&gt;
		&lt;language tag=&quot;en-GB&quot;&gt;language/en-GB.mod_mixcloud_widget.ini&lt;/language&gt;
		&lt;language tag=&quot;en-GB&quot;&gt;language/en-GB.mod_mixcloud_widget.sys.ini&lt;/language&gt;
	&lt;/languages&gt;
	&lt;config&gt;
		&lt;fields name=&quot;params&quot;&gt;
			&lt;fieldset name=&quot;basic&quot;&gt;
				&lt;field type=&quot;text&quot; name=&quot;feed&quot; default=&quot;&quot; label=&quot;MOD_MIXCLOUD_WIDGET_FEED_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_FEED_DESC&quot; /&gt;
				&lt;field name=&quot;color&quot; type=&quot;color&quot; default=&quot;&quot; label=&quot;MOD_MIXCLOUD_WIDGET_COLOR_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_COLOR_DESC&quot; /&gt;
				&lt;field name=&quot;width&quot; type=&quot;text&quot; default=&quot;300&quot; size=&quot;40&quot; label=&quot;MOD_MIXCLOUD_WIDGET_WIDTH_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_WIDTH_DESCRIPTION&quot; /&gt;
				&lt;field name=&quot;height&quot; type=&quot;text&quot; default=&quot;300&quot; size=&quot;40&quot; label=&quot;MOD_MIXCLOUD_WIDGET_HEIGHT_TITLE&quot; description=&quot;MOD_MIXCLOUD_WIDGET_HEIGHT_DESCRIPTION&quot; /&gt;
			&lt;/fieldset&gt;
			&lt;fieldset
				name=&quot;advanced&quot;&gt;
				&lt;field
					name=&quot;layout&quot;
					type=&quot;modulelayout&quot;
					label=&quot;JFIELD_ALT_LAYOUT_LABEL&quot;
					description=&quot;JFIELD_ALT_module_LAYOUT_DESC&quot; /&gt;
				&lt;field
					name=&quot;moduleclass_sfx&quot;
					type=&quot;text&quot;
					label=&quot;COM_moduleS_FIELD_moduleCLASS_SFX_LABEL&quot;
					description=&quot;COM_moduleS_FIELD_moduleCLASS_SFX_DESC&quot; /&gt;
				&lt;field
					name=&quot;owncache&quot;
					type=&quot;list&quot;
					default=&quot;1&quot;
					label=&quot;COM_moduleS_FIELD_CACHING_LABEL&quot;
					description=&quot;COM_moduleS_FIELD_CACHING_DESC&quot;&gt;
					&lt;option value=&quot;1&quot;&gt;JGLOBAL_USE_GLOBAL&lt;/option&gt;
					&lt;option	value=&quot;0&quot;&gt;COM_moduleS_FIELD_VALUE_NOCACHING&lt;/option&gt;
				&lt;/field&gt;
			&lt;/fieldset&gt;
		&lt;/fields&gt;
	&lt;/config&gt;
&lt;/extension&gt;
</pre>
<hr />
<h2> <span>Step 3:</span> Creating <code>mod_mixcloud_widget.php</code>  </h2>
<p>The first thing you want to with your module is to add your copyright notice. If you intend to submit your module to JED [Joomla Extension Directory], you should add some GPL license information.</p>
<p> This is one of the checks done before approving a module into the directory. Directly below this, I use the statement <code>defined( _JEXEC ) or die;</code> which is used in most PHP files to protect against hackers. This is also another requirement for approval on JED.</p>
<pre class= brush: php; title: ; notranslate >
&lt;?php
/**
 * @package		B4ucode
 * @subpackage	mod_mixcloud_widget
 * @copyright	Copyright (C) 2011 - 2012 B4ucode, Inc. All rights reserved.
 * @license		GNU General Public License version 2 or later;
 */
// no direct access
defined( _JEXEC ) or die;
</pre>
<p>Next, we define our paramaters as variables. Developers sometimes define their paramaters as variables in order to have cleaner template files. In order to call a paramaters we use the <code>$params->get()</code> function and get the param <code>name</code> defined in our manifest file. Finally, we call the module Helper function, <code>getLayoutPath</code>, which will render our module template. The first argument of the function takes the module name that we are trying to call, then the second argument looks for the template we intend to render for that module. In this case, we get the parameter <code>layout</code> and in the second argument we set the default layout to be <code>default</code>. This layout is the exact name of the file that we have in our <code>tmpl</code> folder.</p>
<pre class= brush: php; title: ; notranslate >
$width = $params-&gt;get( width ,300);
$height = $params-&gt;get( height ,300);
$feed = $params-&gt;get( feed );
$color = $params-&gt;get( color );
$moduleclass_sfx = htmlspecialchars($params-&gt;get( moduleclass_sfx ));
require JmoduleHelper::getLayoutPath( mod_mixcloud_widget , $params-&gt;get( layout ,  default ));
?&gt;
</pre>
<h3> Finished File </h3>
<pre class= brush: php; title: ; notranslate >
	&lt;?php
/**
 * @package		B4ucode
 * @subpackage	mod_mixcloud_widget
 * @copyright	Copyright (C) 2011 - 2012 B4ucode, Inc. All rights reserved.
 * @license		GNU General Public License version 2 or later;
 */
// no direct access
defined( _JEXEC ) or die;
    $width = $params-&gt;get( width ,300);
    $height = $params-&gt;get( height ,300);
    $feed = $params-&gt;get( feed );
    $color = $params-&gt;get( color );
    $moduleclass_sfx = htmlspecialchars($params-&gt;get( moduleclass_sfx ));
    require JmoduleHelper::getLayoutPath( mod_mixcloud_widget , $params-&gt;get( layout ,  default ));
?&gt;
</pre>
<hr />
<h2> <span>Step 4:</span> Creating <code>default.php</code>  </h2>
<p>At this point, we have created our manifest file with paramaters, took those same parameters and turned them into variables. In this step, we are going to use those variables in our template file. The template file will render all of our HTML for the module. Edit <code>default.php</code> from your <code>tmpl</code> folder and add the following snippets:</p>
<h3>Copyright Notice and Restricted Access Script</h3>
<pre class= brush: php; title: ; notranslate >
&lt;?php
  /**
 * @package		B4ucode
 * @subpackage	mod_mixcloud_widget
 * @copyright	Copyright (C) 2011 - 2012 B4ucode, Inc. All rights reserved.
 * @license		GNU General Public License version 2 or later;
 */
 // no direct access
defined(  _JEXEC  ) or die(  Restricted access  );
</pre>
<blockquote>
<p>
It is recommended that you add the Copyright Notice and Restricted Access line to your PHP files.
</p>
</blockquote>
<h3>Adding our HTML</h3>
<p>For this tutorial, we will need the embed code from Mixcloud. <a href= http://www.mixcloud.com/widgets/  target= _blank >Here </a> is an example on getting the code . Our module&#8217;s purpose is to make the code reusable without having to get the embed each  time we want to create or modify a Mixcloud Widget on our site. The default embed code comes with some extra information about the widget content which we don&#8217;t need. So for this tutorial, I have stripped it down to just the embed script. Paste this embed code to your <code>default.php</code> file.</p>
<pre class= brush: xml; title: ; notranslate >
&lt;div&gt;&lt;object width=&quot;480&quot; height=&quot;480&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.mixcloud.com/media/swf/player/mixcloudLoader.swf?feed=http%3A%2F%2Fwww.mixcloud.com%2FMaryAnneHobbs%2Fthom-yorke-moneyback-mix-xfm-music-response-150911%2F&amp;amp;embed_uuid=5d6c18a4-a837-409e-8cec-23ab44372842&amp;amp;stylecolor=&amp;amp;embed_type=widget_standard&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;opaque&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.mixcloud.com/media/swf/player/mixcloudLoader.swf?feed=http%3A%2F%2Fwww.mixcloud.com%2FMaryAnneHobbs%2Fthom-yorke-moneyback-mix-xfm-music-response-150911%2F&amp;amp;embed_uuid=5d6c18a4-a837-409e-8cec-23ab44372842&amp;amp;stylecolor=&amp;amp;embed_type=widget_standard&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;opaque&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;480&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
</pre>
<h3>Making the Script Configurable</h3>
<p>If we wanted to embed one widget permanently, we could just zip up the module right now. However we don&#8217;t, so we are going to replace some of the attributes with our module params . We&#8217;re going to change the <code>width</code>, <code>height</code>, <code>color</code> and <code>feed</code>. Paste the following snippet over your embed script.</p>
<pre class= brush: php; title: ; notranslate >
	&lt;div&gt;&lt;object width=&quot;&lt;?php echo $width; ?&gt;&quot; height=&quot;&lt;?php echo $height; ?&gt;&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://www.mixcloud.com/media/swf/player/mixcloudLoader.swf?feed=&lt;?php echo $feed; ?&gt;&amp;amp;embed_uuid=&amp;amp;stylecolor=&lt;?php echo $color; ?&gt;&amp;amp;embed_type=widget_standard&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;opaque&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.mixcloud.com/media/swf/player/mixcloudLoader.swf?feed=&lt;?php echo $feed; ?&gt;&amp;amp;embed_uuid=&amp;amp;stylecolor=&lt;?php echo $color; ?&gt;&amp;amp;embed_type=widget_standard&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;opaque&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;&lt;?php echo $width; ?&gt;&quot; height=&quot;&lt;?php echo $height; ?&gt;&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
</pre>
<blockquote>
<p>
Take note of how we are just calling the variables from our controller file.
</p>
</blockquote>
<hr />
<h2> <span>Step 5:</span> Creating Language Files </h2>
<p>In step one, you might have noticed that we created a folder, called language, with two files. Then, in step two, we added some translatable text. In this section, we are going to translate that text to English. Insert the following snippet to the ini files, <code>en-GB.mod_mixcloud_widget.sys.ini</code> and <code>en-GB.mod_mixcloud_widget.ini</code>. </p>
<pre class= brush: php; title: ; notranslate >
; B4ucode
; Copyright (C) 2011 - 2012 B4ucode. All rights reserved.
; License GNU General Public License version 2 or later;
; Note : All ini files need to be saved as UTF-8 - No BOM

MOD_MIXCLOUD_WIDGET=&quot;Mixcloud Widget&quot;
MOD_MIXCLOUD_WIDGET_XML_DESCRIPTION=&quot;This module displays the Mixcloud Widget using feed and other paramaters&quot;
MOD_MIXCLOUD_WIDGET_ITEMS_LAYOUT_DEFAULT=&quot;Default&quot;
MOD_MIXCLOUD_WIDGET_FEED_TITLE=&quot;Feed Url&quot;
MOD_MIXCLOUD_WIDGET_FEED_DESC=&quot;Add the link to single/cloudcast&quot;
MOD_MIXCLOUD_WIDGET_COLOR_TITLE=&quot;Color&quot;
MOD_MIXCLOUD_WIDGET_COLOR_DESC=&quot;Add Style color&quot;
MOD_MIXCLOUD_WIDGET_WIDTH_TITLE=&quot;Width&quot;
MOD_MIXCLOUD_WIDGET_WIDTH_DESCRIPTION=&quot;Width of Widget&quot;
MOD_MIXCLOUD_WIDGET_HEIGHT_TITLE=&quot;Height&quot;
MOD_MIXCLOUD_WIDGET_HEIGHT_DESCRIPTION=&quot;Height of Widget&quot;
</pre>
<p>If you look closely, you will notice that the text I used for the parameters now have an English translation. You can add other files and create translations in other languages!</p>
<hr />
<h2> <span>Step 6:</span> Packaging the Module </h2>
<p>After following all the steps thoroughly, your module is now installable, but we&#8217;d like to make a checklist of things to do before installation and distribution.</p>
<h3>Add <code>index.html</code> to Folders</h3>
<p>It is recommended that you add a <code>index.html</code> file to each folder. This file, as mentioned previously, stops users from viewing the contents of a module folder directly in a browser. Add the following snippet to your files:</p>
<pre class= brush: xml; title: ; notranslate >
	&lt;html&gt;&lt;body bgcolor=&quot;#FFFFFF&quot;&gt;&lt;/body&gt;&lt;/html&gt;
</pre>
<h3>Comparing our File Structure to the Manifest File</h3>
<p>At this stage, it is recommended that you look  at the files and folder defined in your manifest file, and make sure they exist in your module folder. Any file that does not exist can stop the installer from installing files, or, it may throw an error.</p>
<h3>Packaging</h3>
<p>After our little checklist, we can package the module into a zip file, and install it.</p>
<p>By navigating to the modules manager, and selecting the module, you can modify the paramaters with your desired width, height, color and song feed.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/mod-params1.jpg  border= 0  /></div>
<p> Enable the module and check to see if it operates the way that it should.</p>
<hr />
<h2> <span>Step 7:</span> Submitting to JED </h2>
<h3>Locating the Category</h3>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/jdistrib-1.jpg  border= 0  /></div>
<p>After registering to JED, one of the main things to note is that you cannot add an extension to multiple sections. So, choosing the appropriate section is very important. Find a suitable section by browsing the site then looking at the top left cornder you will see Submit Extension</p>
<h3>Filling Out the Details</h3>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/jdistrib-2.jpg  border= 0  /></div>
<p>Once you&#8217;ve chosen to submit an extension, there will be a form to fill in all the details about your submission. Review the screenshots below to see the different fields to be filled out, and read the instructions carefully.</p>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/jdistrib-3.jpg  border= 0  /></div>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/jdistrib-4.jpg  border= 0  /></div>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/jdistrib-5.jpg  border= 0  /></div>
<h3>Success Image</h3>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/1157_joomla/jdistrib-6.jpg  border= 0  /></div>
<p>Once all the appropriate fields and files have been submitted, you will see a message like the screenshot above; it will explain how many submissions are in the queue to be checked prior to yours.</p>
<hr />
<h2>Conclusion</h2>
<p>Now that you&#8217;ve learned how to create a Joomla module from a widget, go forth and code. With the basics of this tutorial, the same idea can be applied to <a href= http://developers.facebook.com/docs/plugins/  target= _blank >Facebook plugins</a>, <a href= http://twitter.com/about/resources/widgets  target= _blank >Twitter widgets</a>, Social bookmarkers, Youtube video embeds, and so much more.  Happy Coding!</p>
<p><a href= http://feedads.g.doubleclick.net/~a/V7oe5wFyq3ntXFYJWBVtYPEZdJ4/0/da ><img src= http://feedads.g.doubleclick.net/~a/V7oe5wFyq3ntXFYJWBVtYPEZdJ4/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/V7oe5wFyq3ntXFYJWBVtYPEZdJ4/1/da ><img src= http://feedads.g.doubleclick.net/~a/V7oe5wFyq3ntXFYJWBVtYPEZdJ4/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=14W81V-2kSo:MV-8Qcb4ATw:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=14W81V-2kSo:MV-8Qcb4ATw:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=14W81V-2kSo:MV-8Qcb4ATw:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=14W81V-2kSo:MV-8Qcb4ATw:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=14W81V-2kSo:MV-8Qcb4ATw:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=14W81V-2kSo:MV-8Qcb4ATw:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=14W81V-2kSo:MV-8Qcb4ATw:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=14W81V-2kSo:MV-8Qcb4ATw:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/14W81V-2kSo  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-11 22:51:53</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Keep Scammers & Bad Clients Out of Your Freelancing Business]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=867</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=867</guid>
			  <description><![CDATA[<p><a href= http://rss.buysellads.com/click.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12216&c=1230363293  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12216&c=1230363293  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264758  target= _blank >Advertise here with BSA</a></p><br /><p><a href= http://spyrestudios.com/keep-scammers-bad-clients-out-of-your-freelancing-business/scammers-out/  rel= attachment wp-att-12217 ><img src= http://spyrestudios.com/wp-content/uploads/Scammers-out.jpg  alt=   width= 590  height= 348  class= frame  /></a></p>
<p>You&#8217;ve probably heard about them. Clients who won&#8217;t pay. Clients who treat freelancers poorly. Clients who pile on more work than the freelancer agreed to.</p>
<p>You may have even had the misfortune of working for one yourself. It&#8217;s not uncommon for freelance designers to wind up working for a scammer or a bad client. </p>
<p>Some freelance designers view this as an inevitable part of freelancing, but I say that you can keep many scammers and bad clients out of your freelancing business if you take the proper precautions. </p>
<p>In this post, I&#8217;ll share a checklist to help you identify scammers and bad clients. If you enjoyed this post, you may also like <a href= http://freelancefolder.com/is-that-client-legit-or-just-a-tire-kicker/ >Is That Client Legit or Just a Tire Kicker?</a><br />
<span id= more-12216 ></span></p>
<h3>Checkpoint #1: Reputation</h3>
<p>Just like you have an online reputation, most potential clients also have an online reputation. Before accepting work, be sure to check your prospect&#8217;s reputation using the following steps:</p>
<ul>
<li>Type their name and variations of their name into a search engine.</li>
<li>Look for their accounts on social media.</li>
<li>Find their web page and examine it carefully to see if it looks legit.</li>
<li>See if they are rated by the Better Business Bureau or mentioned by scam-busting sites. </li>
</ul>
<p>You may be surprised how much you can learn about a company online. Many scammers have a continuing pattern of scamming freelancers. A little homework on your part can keep you from being their next victim. </p>
<p>Remember, while a legit client could have a few of these traits; be extra cautious about any prospect who looks bad in all of these areas.</p>
<h3>Checkpoint #2: Too Many Meetings</h3>
<p>Meetings take your time. Unpaid meeting time reduces your income.</p>
<p>While it&#8217;s okay to offer to meet a client who seems serious about hiring you, be careful not to allocate too much of your time to such meetings.</p>
<p>It&#8217;s not unusual for a so-called client to ask a freelance designer to meet them about a &#8220;project&#8221;&#8211;only to pick the freelancer&#8217;s brain for several hours or even longer. </p>
<p>This is often a scam to get free consulting work from the freelancer. The so-called client never intends to hire the designer. When they&#8217;ve got what they need from you, they&#8217;ll implement your ideas using in-house staff.</p>
<p>You can weed out many of these scam artists by placing strict limits on free meetings and by making sure that the meeting is dedicated to them describing their project to you. Many freelancers charge a meeting fee for any meeting time that exceeds an hour.</p>
<h3>Checkpoint #3: Prepayment</h3>
<p>You should be requesting that initial clients pay a partial deposit up front. Do not start, I repeat, DO NOT start work until you have that initial deposit.</p>
<p>The amount of the initial deposit varies, but most freelance designers charge anywhere from 1/3 of the total project amount to 1/2 of the total project amount.</p>
<p>The initial deposit shows good faith on the client&#8217;s part and demonstrates that they are serious about hiring you for the job. They are now invested in your success.</p>
<p>Keep in mind that if you have trouble getting the initial deposit from a client, chances are that you&#8217;ll also have trouble collecting the final payment. Why take an unnecessary chance?</p>
<h3>Checkpoint #4: The Freelancing Agreement</h3>
<p>You should have a freelancing agreement for all larger projects. Ideally, this would be a contract between you and the client, but at the very least it should be a written description of the project terms that both of you agreed to.</p>
<p>A good agreement describes the scope of the work, the project deadline, and the payment terms. You should even get a freelancing agreement from trusted clients. It&#8217;s just too easy to forget the terms of an oral agreement.  </p>
<p>Having such an agreement protects both you and the client. If your prospective client is honest, there&#8217;s no excuse for them not signing the agreement. If they&#8217;re not honest, well&#8230;in that case you don&#8217;t want to work for them anyway, do you? </p>
<h3>Checkpoint #5: The Great Rate Debate</h3>
<p>One of the first ways to weed out scammers and bad clients is to ask what their budget for the project is. If it&#8217;s way too low for the amount of work they are asking for, this is a good sign that they will not be a good client.</p>
<p>When confronted with an extremely low rate, too many web designers try to convince the prospect to pay more. This is a bad idea. Even if you win the rate debate and convince the prospect to pay more, they are already unhappy because they&#8217;ve gone over their anticipated budget.</p>
<p>If there&#8217;s a huge gap between what the client expects to pay and what you need to charge, your best option may be to walk away before they become a bad client. </p>
<p>Many freelancers would also tell you that lower paying clients are often more picky (and more unreasonable) than higher paying clients. In my own experience, I&#8217;ve also found this to be true.  </p>
<h3>Checkpoint #6: Not Knowing What They Want</h3>
<p>The last checkpoint is very important for freelance designers. More than any other freelancer, you are likely to be greeted with the words, &#8220;I don&#8217;t know what I want, but I&#8217;ll know it when I see it.&#8221;</p>
<p>Such a &#8220;client&#8221; can&#8217;t even begin to describe what they expect from you, yet somehow they want you to tackle their project. </p>
<p>It&#8217;s nearly impossible to get a clear scope of work from such a client. Don&#8217;t even try. You may find yourself caught in an endless loop of revisions and rework until the client sees what he or she likes (which could be never).</p>
<p>If you show them a few samples of your work and maybe a few other designs online and they still can&#8217;t give you enough to go on, it&#8217;s time to move on. They aren&#8217;t a good client for you.</p>
<h3>Your Turn</h3>
<p>It isn&#8217;t inevitable that you get saddled with bad clients and scammers. You can keep them out of your freelancing design business. In this post I hope that I&#8217;ve shown you how.</p>
<p>What checkpoints would you add to help freelance designers avoid bad clients and scammers? Share your insights in the comments.</p>
<p>Image by <a rel= nofollow cc:attributionURL  href= http://www.flickr.com/photos/leehaywood/ >Lee J Haywood</a></p>
<br /><p><a href= http://rss.buysellads.com/click.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12216&c=1480192869  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12216&c=1480192869  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264756  target= _blank >Advertise here with BSA</a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=TzevzKxY174  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=aPsGhjVl9ws:kOMMU7NI5yg:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:l6gmwiTKsz0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=l6gmwiTKsz0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:qj6IDK7rITs ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=qj6IDK7rITs  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=aPsGhjVl9ws:kOMMU7NI5yg:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:7Q72WNTAKBA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=7Q72WNTAKBA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=aPsGhjVl9ws:kOMMU7NI5yg:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:dnMXMwOfBR0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=dnMXMwOfBR0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:D7DqB2pKExk ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=aPsGhjVl9ws:kOMMU7NI5yg:D7DqB2pKExk  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=aPsGhjVl9ws:kOMMU7NI5yg:-BTjWOF_DHI ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=aPsGhjVl9ws:kOMMU7NI5yg:-BTjWOF_DHI  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/SpyreStudios/~4/aPsGhjVl9ws  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-11 22:51:52</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Aspect-Oriented Programming in PHP]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=866</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=866</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24974&c=246118281  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24974&c=246118281  border= 0  alt=   /></a><p>There&#8217;s a new player in town, and he brought new toys: The PHP World welcomes <a href= http://flow3.typo3.org/ >FLOW3</a>, an enterprise application framework written and backed by the community of the <a href= http://typo3.org/ >TYPO3 CMS</a>. FLOW3 can be used as standalone full-stack framework for your applications. It&#8217;s interesting, because it introduces some concepts of software development that haven&#8217;t been adapted to PHP before.</p>
<p><span id= more-24974 ></span></p>
<p>
 Among these new concepts is &#8220;Aspect Oriented Programming&#8221;. We will have a look on the theory of the pattern, and will set up a basic FLOW3 Application and weave in our own aspect!</p>
<hr />
<h2>Why Should I Care?</h2>
<p>If a new framework hits stable, an excellent question to rise might be: What can it do that the tools that I love can&#8217;t?</p>
<blockquote>
<p>
      PHP already has an armada of excellent frameworks and most of them claim to be written with separation of concerns in mind. So does FLOW3.
  </p>
</blockquote>
<p>In terms of software development this means, that the classes that are implementing the logic of your application should only care about one thing. For example, a mailer class should send mails. It should not retrieve potential receivers from a database.</p>
<p>
All modern frameworks (including FLOW3) push a lot of patterns into the software stack that do a great job at separating the concerns of your business logic;  among them the famous MVC that is separating your logic into different layers.</p>
<p> However, an application is not only built on business logic alone. As it grows, you may want to implement additional services, features, plugins or plugins of plugins. You surely don&#8217;t want this stuff in your business logic! But what are your options?</p>
<p>
Let&#8217;s say you want to implement a logging service that writes some stuff to a text file every time a specific set is deleted from the database. Naturally, the logging service is not part of your database layer. But in order to make it work, you have to place some code right there, like this:
</p>
<pre class= brush: php; title: ; notranslate >
/**
 * Delete a user
 * @param UserModel $user
 * @return void
 */
public function deleteUser(UserModel $user) {
$this-&gt;loggingService-&gt;log( removing user   . $user-&gt;getName());
$this-&gt;users-&gt;remove($user);
}
</pre>
<p>Horrible, isn&#8217;t it? Let&#8217;s face it: The logging service adds dirt to your code. You have to touch the original code in order to implement it and you add an additional dependency, in this case an instance of the LoggingService.</p>
<p>
Hence, you&#8217;re adding complexity. And you likely will have to add it all over your app (depending on what else you want to log).
</p>
<p>
You may come up with an pattern like an event dispatcher or a hook system like it&#8217;s implemented in Drupal and WordPress and then have your logger listen for events:</p>
<pre class= brush: php; title: ; notranslate >
/**
 * Delete a user
 * @param UserModel $user
 * @return void
 */
public function deleteUser(UserModel $user) {
$this-&gt;eventDispatcher-&gt;dispatch(self::USER_DELETED);
$this-&gt;users-&gt;remove($user);
}
</pre>
<p>
This is better, but it&#8217;s still not cool. You&#8217;re code is still dependency aware: it has some code with the sole purpose of informing other parties that something happens.</p>
<p>This has some bad side-effects: What if you want to log something, but there&#8217;s not an event dispatched at that time? What if you haven&#8217;t written that code because you are writing a plugin? You&#8217;d have to change the original code € not once, but every time an update is available.
</p>
<p>Let&#8217;s call the logging service an aspect and see how FLOW3 takes care of the problem.</p>
<hr />
<h2>Aspect Weaving</h2>
<p>
Our logging service is only interested in one thing regarding the existing code: It wants to intercept it in some classes at various points (e .g. when something is deleted). With the implementation discussed above, the existing code controls the points of execution. </p>
<blockquote>
<p>
      Wouldn&#8217;t it be nice if the service could define a set of rules at which point it would want to inject itself into the class?
  </p>
</blockquote>
<p>This is a software development concept named Inversion of control. It decouples classes from another, because there&#8217;s no need to change existing code when you&#8217;re changing the service. The service takes care of this itself.</p>
<p>Let&#8217;s say we simply want to execute logging on every method in every class that starts with delete, like <code>deleteUser()</code>, <code>deleteEntry()</code> or whatever. A convenient way would be to write a rule into the logging service and let the framework take care of the correct execution of the code. This is remarkably easy in FLOW3:</p>
<pre class= brush: php; title: ; notranslate >
/**
 * An aspect that is executed on all methods that start with &quot;delete&quot;.
 *
 * @FLOW3Before(&quot;method(.*-&gt;delete.*())&quot;)
 */
 public function logginMethod() {
// Do some logging here.
 }
</pre>
<blockquote class= pullquote >
<p>
FLOW3 performs some really advanced PHP techniques under the hood.
</p>
</blockquote>
<p>The rule is named pointcut in AOP and there are some easy-to-learn ways to define them. The one above tells FLOW3 to inject the logging code in every class before every method that starts with delete.</p>
<p>It does so by using the method keyword and by adding wildcards (*) for the class and for parts of the method name. If you&#8217;re adding this code in an Aspect Class (as we do later), you&#8217;re good to go. You will be able to access properties of the class that you are targeting as well. The targeted class itself remains untouched. It may not yet be written € if it&#8217;s added to your app in the future, the rule will then match and the code will be injected.</p>
<p>Maybe you have read the above paragraph twice and are asking yourself: Is this magic? What&#8217;s the damn trick? &#8211; I sure did, when I was first introduced to AOP!</p>
<p>Well, AOP has been around for some time in the Java world. FLOW3 is heavily inspired by the AOP implementation of Spring, a Java Framework. The word was on the street, that the pattern can&#8217;t be transferred to interpreted languages, because it requires compilation.</p>
<p>The trick is, that the framework € or some tools like JAspect € intercepts the compilation process (from Java code to bytecode, that can be executed by the Java runtime) and do an analysis of the defined aspects. Whenever a set of rules (aka the pointcut) matches a method, it is weaved directly into the compiled code. Hence, the framework takes care of merging the code parts together:</p>
<div class= tutorial_image >
   <img src= http://d2o0t5hpnwv4c1.cloudfront.net/2036_aspectOrientedProgramming/1-3.jpg >
</div>
<p>FLOW3 did adapt that concept to the world of PHP by introducing an advanced cache. While most frameworks offer caching to increase performance, FLOW3 additionally uses the cache to weave aspects into the original classes. </p>
<p>If you are running your app, FLOW3 delivers the cached classes instead the ones you&#8217;ve written. Hence, your original code remains untouched.</p>
<p>This sounds complex € and it is: FLOW3 performs some really advanced PHP techniques under the hood, that are well worth to be explored! But: To you as an application developer, it&#8217;s not complicated at all. You don&#8217;t have to care, if you don&#8217;t want to: FLOW3 monitors your files for changes and if you make some, FLOW3 auto-commits them to the cache upon your next request. If an aspect matches to a method, it&#8217;s automatically weaved in € no further configuration needed.</p>
<p>It&#8217;s a complex pattern conveniently at your service!</p>
<hr />
<h2>A Few Words About the Cache</h2>
<p>Every cool feature comes with a downside € so does FLOW3. At the moment, we just scratched the surface of what FLOW3&#8242;s caching-mechanism is capable of, but I want to give you an idea.</p>
<p>Take a look at the following code:</p>
<pre class= brush: php; title: ; notranslate >
/**
 * @FLOW3Inject
 * @var YourAppMailerServiceInterface
 */
 protected $mailer;
/**
 * Sends a mail.
 *
 * @param YourAppModelUser $user
 * @param string $message
 */
 protected function sendMail(YourAppModelUser $user, $message) {
     // Sends a mail.
 }
</pre>
<blockquote class= pullquote >
<p>
The consequence is that PHP is to some degree no longer an interpreted language.
</p>
</blockquote>
<p>This may look like some code that is just well documented. But it&#8217;s much more. </p>
<p>The first property annotation (FLOW3Inject) tells FLOW3 to look for some class in your app that implements the MailerServiceInterface and injects it here (and maybe configure it before). This pattern is known as <em>Dependency Injection</em>.</p>
<p>The second class defines some type definitions in its comment&#8217;s annotations &#8211; and FLOW3 uses them. If you&#8217;re giving the method some data that can be used to build a User object of your model  (for example an array with pure strings from a HTML form), FLOW3 auto-transforms the data safely to a User object and applies some security and validation rules to the second parameter (in this case a string).</p>
<p>This is (among some other tricks) done by weaving in some code into the cache.</p>
<p>The consequence is that PHP is to some degree no longer an interpreted language. The process of caching is somewhat similar to compiling and it has the same downsides: You can&#8217;t just save &#038; refresh your browser, you have to wait for the cache to be warmed up during development. If you are committing code to your production environment, you have to flush the cache in order to see the changes. </p>
<p>On top of that, FLOW3 adds some kind of type-validation at runtime: You can&#8217;t pass an integer as second argument in the example above € it&#8217;ll throw an error. I really like this, because I have a background in strictly typed languages like Java and ActionScript. It also adds a lot of security to your application. But if you&#8217;re a PHP purist, this may be something that you don&#8217;t want.</p>
<hr />
<h2>Setting Up Flow3</h2>
<p>Alright, enough with theory. Let&#8217;s get our hands dirty.</p>
<p>Setting up FLOW3 is pretty straightforward, if you already have a PHP-capable server like XAMP or MAMP installed. Just grab a copy of the framework from <a href= http://flow3.typo3.org/download.html >FLOW3&#8242;s download site</a> (or clone from <a href= http://git.typo3.org/FLOW3/Distributions/Base.git >git</a>) and unpack it into your htdocs directory.</p>
<p>You should already be done now on Windows machines. Unix-based systems like MAC or Linux need to grant the required rights for building the cache. FLOW3 ships with a powerful command line tool, that packs this task into a one-liner:</p>
<pre class= brush: bash; title: ; notranslate >
# On linux:
./flow3 core:setfilepermissions chris www-data www-data
# On Mac:
./flow3 core:setfilepermissions chris _www _www
</pre>
<p>Please replace <em>chris</em> with your username! This should be enough. However, I&#8217;ve installed FLOW3 on<br />
various machines and have run into some problems. The most common ones are:</p>
<ul>
<li>If you&#8217;re on MAC and FLOW3 complains €śindex.php not found €ś, open the .htaccess in the webdir and add a # before the line Rewrite Base /€ś€
<li>If you&#8217;re on Windows and the command line tool does not work, open Settings.yaml.example in FLOW3&#8242;s configuration directory, uncomment and adjust the phpBinaryPathAndFilename variable to the correct path (e.g. C:xamppphpphp.exe) and save the file as Settings.yaml</p>
<li>On some machines, if FLOW3 is very slow, you have to increase the memory limit of PHP in the php.ini
</ul>
<p>If you run into problems, that are not listed here, please post them in the comments!</p>
<p>Now fire up your favorite browser and navigate to http://localhost/flow3/Web! FLOW3 should welcome you with an introduction screen: </p>
<div class= tutorial_image >
   <img src= http://d2o0t5hpnwv4c1.cloudfront.net/2036_aspectOrientedProgramming/2-3.jpg  alt= The first run may take a while, as FLOW3 has to index your code and build all caches.  />
</div>
<p>This is the Welcome Package. Every application in FLOW3 (and FLOW3 itself) is a package and packages can share code with each other. For example, once the new TYPO3 Version is finished, you can add it as a package and your application will then have an enterprise-ready CMS on top! </p>
<p>Let&#8217;s start our own package. It&#8217;s an easy task, because FLOW3&#8242;s command line tool will handle most of the work! Type in the following command:</p>
<pre class= brush: bash; title: ; notranslate >
# On linux / MAC
./flow3 kickstart:package Nettuts.AspectDemo
# On Windows
flow3 kickstart:package Nettuts.AspectDemo
</pre>
<p>This will create a ready-to-go package named <code>Nettuts.AspectDemo</code> in FLOW3&#8242;s Packages/Application folder. If you review the file structure, you will find many folders that do follow a specific convention. </p>
<p>The important ones are:</p>
<ul>
<li><strong>Classes:</strong> The home of your PHP Code,  a first Controller is already created in the Classes/Controller Folder: the StandardController!
<li><strong>Resources/Private:</strong> The home of all templates that are fired into Fluid, FLOW3&#8242;s powerful Templating Engine. It hosts some other stuff like localization files as well.
<li><strong>Resources/Public:</strong> This has not been created yet, but every file in the Resources/Public folder will be directly accessible from the web. This is a good place for images, CSS, Javascript etc.
</ul>
<p>Building a full-featured app is beyond the scope of this tutorial, so we&#8217;ll go with the defaults. Please open the following URL: <code>http://localhost/flow3/Web/index.php/Nettuts.AspectDemo</code></p>
<div class= tutorial_image >
   <img src= http://d2o0t5hpnwv4c1.cloudfront.net/2036_aspectOrientedProgramming/3-3.jpg  alt=   />
</div>
<p>This is not much, but it&#8217;s a start. We want to write something to a logfile, every time this site is called. We do this by weaving in an aspect into the StandardController!</p>
<hr />
<h2>Writing a First Aspect</h2>
<p>Take a look at the StandardController in theClasses/Controller Folder in your <code>Nettuts.AspectDemo</code> Package.</p>
<p>It implements a method, named <code>indexAction()</code>. FLOW3 has automatically configured our app in a way, that this method inside the StandardController gets called when we enter the URL above. </p>
<p>For the moment, we see that this method assigns some strings to the view:</p>
<pre class= brush: php; title: ; notranslate >
/**
 * Index action
 *
 * @return void
 */
public function indexAction() {
$this-&gt;view-&gt;assign( foos , array(
 bar ,  baz 
));
}
</pre>
<p>If you open the file index.html of this view in  Resources/Private/Templates/Standard inside our package, you&#8217;ll see how these strings are processed by the templating engine. </p>
<p>However, our goal is to intercept the code execution before this method gets called.</p>
<p>At first, create an empty file named Access.log in FLOW3&#8242;s Log folder at flow3/Data/Logs. You may save this file wherever you want, but this is a nice place for log files.</p>
<p>Next, create a folder named Service in your Nettuts.AspectDemo/Classes Folder and inside of it, create another folder, and name it Logging. Then create a PHP file named LoggingAspect.php inside of it. It should have the following content:</p>
<pre class= brush: php; title: ; notranslate >
&lt;?php
namespace NettutsAspectDemoServiceLogging;
use TYPO3FLOW3Annotations as FLOW3;
/**
 * @FLOW3Aspect
 */
class LoggingAspect {
   /**
    * Log a message if this site is called.
    *
    * @param TYPO3FLOW3AOPJoinPointInterface $joinPoint
    * @FLOW3Before(&quot;method(NettutsAspectDemoControllerStandardController-&gt;indexAction())&quot;)
    * @return void
    */
   public function logSiteAccess(TYPO3FLOW3AOPJoinPointInterface $joinPoint) {
           $filePath =  /home/chris/www/flow3/Data/Logs/Access.log ;
     $message =  The site has been accessed at   . time() .  .  . PHP_EOL;
     file_put_contents($filePath, $message, FILE_APPEND);
   }
}
?&gt;
</pre>
<p>This is a very basic class, and if you&#8217;d like to have an advanced logger, you may want to separate the logging from the intercepting aspect.</p>
<p>What&#8217;s going on here? At first, we define a namespace, which is your package name and the path to the actual class (without the class folder itself). Next, we import FLOW3&#8242;s annotation namespace. Thus, we can use FLOW3&#8242;s powerful annotation parser to configure our class. </p>
<p>That&#8217;s exactly what we do in the class comments. We define the class as aspect with the following annotation:</p>
<pre class= brush: php; title: ; notranslate >
/**
 * @FLOW3Aspect
 */
</pre>
<p>From now on, FLOW3 is aware that this class may define rules for the interception of the code flow and watches our codebase for matches.</p>
<p>This is the rule:</p>
<pre class= brush: php; title: ; notranslate >
@FLOW3Before(&quot;method(NettutsAspectDemoControllerStandardController-&gt;indexAction())&quot;)
</pre>
<p>We could use regular expressions or <a href= http://flow3.typo3.org/documentation/guide/partiii/aspectorientedprogramming.html#pointcut-expressions >some other techniques</a> to match multiple methods or classes, but we know exactly where we want to go: Before the <code>indexAction()</code> Method in the StandardController € and that&#8217;s exactly what we&#8217;re telling FLOW3. </p>
<p>Note the <code>$jointInterface</code> Parameter of the <code>logSiteAccess()</code> Method, that is provided to us by FLOW3. We don&#8217;t use it here, but it contains some useful data about the actual context. For example, if the intercepted method would have arguments, that we may want to use, we could access them like this:</p>
<pre class= brush: php; title: ; notranslate >
$argument = $joinPoint-&gt;getMethodArgument( argumentName );
</pre>
<p>The code in our <code>logSiteAccess()</code> method, itself, is fairly simple. Just adjust the path to the Access.log to your environment and you&#8217;re good to go!</p>
<p>Now, again, open <code>http://localhost/flow3/Web/index.php/Nettuts.AspectDemo</code> € nothing should have changed. But when you open the Access.log file, you should see the following entry:</p>
<pre class= brush: php; title: ; notranslate >
The site has been accessed at 1335715244.
</pre>
<p>If you can read this, the aspect has been weaved into the cache. Let&#8217;s have a look at the magic!</p>
<p>FLOW3 stores the cache at <code>flow3/Data/Temporary/Development/Cache/Code/FLOW3_Object_Classes</code>.</p>
<p>You will find a class named <code>Nettuts_AspectDemo_Controller_StandardController_Original.php</code>. This is the original class from our codebase. </p>
<p>But there is another class:  <code>Nettuts_AspectDemo_Controller_StandardController.php</code>. This class extends our original class and it is build up purely by generated code. Among the many lines you&#8217;ll find something like this:</p>
<pre class= brush: php; title: ; notranslate >
$this-&gt;FLOW3_Aop_Proxy_targetMethodsAndGroupedAdvices = array(
    indexAction  =&gt; array(
       TYPO3FLOW3AopAdviceBeforeAdvice  =&gt; array(
         new TYPO3FLOW3AopAdviceBeforeAdvice(
          NettutsAspectDemoServiceLoggingLoggingAspect ,  logSiteAccess 
         $objectManager, NULL),
         ),
      ),
);
</pre>
<p>This is were FLOW3 initiates the aspect and it&#8217;s weaved in directly into your class. The aspect gets executed right where we want it € without touching the original controller.</p>
<p>The code snippet  initiates an instance of the <code>BeforeAdvice</code> class, with our aspect, the respective method and the <code>$objectManager</code> as arguments. The object manager contains the needed information to build the <code>jointInterface</code>, that is passed to the aspect.</p>
<p>If you&#8217;re interested in the details, have a look at the AOP Folder in the FLOW3 package!</p>
<hr />
<h2>Conclusion</h2>
<blockquote class= pullquote >
<p>
The aspect oriented approach has many advantages waiting to be discovered.
</p>
</blockquote>
<p>The aspect oriented approach has many advantages waiting to be discovered. For example, FLOW3 uses AOP to intercept its own bootstrap to build up a firewall if you choose to use FLOW3&#8242;s security framework. Apart from that, we haven&#8217;t yet discussed the specific terminology that is commonly used in AOP.</p>
<p>However, FLOW3 ships with some other unique concepts like Domain-Driven-Design. It has a powerful Doctrine integration and a smart Templating Engine. We have only seen the tip of the iceberg!</p>
<p>What&#8217;s your opinion? Are you eager to learn more about the philosophy behind FLOW3? What&#8217;s your impression of AOP? Are you excited to have a robust port for the PHP world or do you think it&#8217;s too much overhead for an interpreted language?</p>
<p><a href= http://feedads.g.doubleclick.net/~a/KFjF0CxGpIkhLgQbT8A88Yj6VXo/0/da ><img src= http://feedads.g.doubleclick.net/~a/KFjF0CxGpIkhLgQbT8A88Yj6VXo/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/KFjF0CxGpIkhLgQbT8A88Yj6VXo/1/da ><img src= http://feedads.g.doubleclick.net/~a/KFjF0CxGpIkhLgQbT8A88Yj6VXo/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=PaOT5KlRv10:Z9zPRLFyxHY:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=PaOT5KlRv10:Z9zPRLFyxHY:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=PaOT5KlRv10:Z9zPRLFyxHY:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=PaOT5KlRv10:Z9zPRLFyxHY:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=PaOT5KlRv10:Z9zPRLFyxHY:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=PaOT5KlRv10:Z9zPRLFyxHY:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=PaOT5KlRv10:Z9zPRLFyxHY:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=PaOT5KlRv10:Z9zPRLFyxHY:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/PaOT5KlRv10  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-10 22:51:50</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Which Tuts+ Site Should We Launch Next?]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=864</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=864</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24962&c=901536440  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24962&c=901536440  border= 0  alt=   /></a><p>We&#8217;re planning our next few Tuts+ sites, and would love your opinion and advice on which topics you think we should cover next! We&#8217;d be really grateful if you could take a minute to answer our quick poll and share your thoughts&#8230;</p>
<p><span id= more-24962 ></span></p>
<hr />
<h2>Have Your Say</h2>
<div style= float:right; margin:0 0 0 20px; ><script type= text/javascript  charset= utf-8  src= http://static.polldaddy.com/p/6211900.js ></script><br />
<noscript><a href= http://polldaddy.com/poll/6211900/ >Nettuts+ Readers: Which Tuts+ Site Should We Launch Next?</a></noscript></div>
<p>We&#8217;ve been considering lots of different ideas for our next Tuts+ sites over the past few weeks, and wanted to also ask the opinion of our awesome community!</p>
<p>A selection of different concepts are included in the poll to the right, along with the option for you to submit your own ideas as well.</p>
<p>The important thing to note is that these are just ideas. Some of these are close to making our final cut, and others aren&#8217;t&#8230; We&#8217;d love to hear what you think, to help guide our decision.</p>
<p>Thanks for taking the time to offer your suggestion €” I can&#8217;t wait to see what you have to say!</p>
<h3>Win a 6-Month Tuts+ Premium Membership</h3>
<p>Our poll will be running for the next couple of weeks, and we&#8217;ll be choosing one respondent at random to receive a six-month Tuts+ Premium membership!</p>
<p>To be entered into the giveaway, just leave a comment on this post to go into a bit more detail about your site suggestion. We&#8217;ll choose one comment at random to win the Tuts+ Premium membership when the poll ends.</p>
<p><strong>Best of luck!</strong></p>
<p><a href= http://feedads.g.doubleclick.net/~a/xKSBaoDXH7T0O5DoBr9uyMmBREE/0/da ><img src= http://feedads.g.doubleclick.net/~a/xKSBaoDXH7T0O5DoBr9uyMmBREE/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/xKSBaoDXH7T0O5DoBr9uyMmBREE/1/da ><img src= http://feedads.g.doubleclick.net/~a/xKSBaoDXH7T0O5DoBr9uyMmBREE/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=GFTCdYIsnCg:oNwB1w8cFJI:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=GFTCdYIsnCg:oNwB1w8cFJI:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=GFTCdYIsnCg:oNwB1w8cFJI:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=GFTCdYIsnCg:oNwB1w8cFJI:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=GFTCdYIsnCg:oNwB1w8cFJI:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=GFTCdYIsnCg:oNwB1w8cFJI:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=GFTCdYIsnCg:oNwB1w8cFJI:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=GFTCdYIsnCg:oNwB1w8cFJI:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/GFTCdYIsnCg  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-09 22:51:48</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Prototypes in JavaScript]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=865</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=865</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24949&c=503307982  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24949&c=503307982  border= 0  alt=   /></a><p>When you define a function within JavaScript, it comes with a few pre-defined properties; one of these is the illusive prototype. In this article, I&#8217;ll detail what it is, and why you should use it in your projects.</p>
<p><span id= more-24949 ></span></p>
<hr />
<h2>What is Prototype?</h2>
<p>The prototype property is initially an empty object, and can have members added to it &#8211; as you would any other object.</p>
<pre class= brush: jscript; title: ; notranslate >var myObject = function(name){
    this.name = name;
    return this;
};

console.log(typeof myObject.prototype); // object

myObject.prototype.getName = function(){
    return this.name;
};
</pre>
<p>In the snippet above, we€™ve created a function, but if we call <code>myObject()</code>, it will simply return the <code>window</code> object, because it was defined within the global scope. <code>this</code> will therefore return the global object, as it has not yet been instantiated (more on this later).</p>
<pre class= brush: jscript; title: ; notranslate >console.log(myObject() === window); // true</pre>
<hr />
<h2>The Secret Link</h2>
<blockquote class= pullquote >
<p>
Every object within JavaScript has a €śsecret€ť property.
</p>
</blockquote>
<p>Before we continue, I&#8217;d like to discuss the €śsecret€ť link that makes prototype work the way it does.</p>
<p>Every object within JavaScript has a €śsecret€ť property added to it when it is defined or instantiated, named <code>__proto__</code>; this is how the prototype chain is accessed. However, it is not a good idea to access <code>__proto__</code> within your application, as it is not available in all browsers. </p>
<p>The <code>__proto__</code> property shouldn€™t be confused with an object&#8217;s prototype, as they are two separate properties; that said, they do go hand in hand. It&#8217;s important to make this distinction, as it can be quite confusing at first! What does this mean exactly? Let me explain. When we created the <code>myObject</code> function, we were defining an object of type <code>Function</code>.</p>
<pre class= brush: jscript; title: ; notranslate >console.log(typeof myObject); // function</pre>
<p>For those unaware, <code>Function</code> is a predefined object in JavaScript, and, as a result, has its own properties (e.g. <code>length</code> and <code>arguments</code>) and methods (e.g. <code>call</code> and <code>apply</code>). And yes, it, too, has its own prototype object, as well as the secret <code>__proto__</code> link. This means that, somewhere within the JavaScript engine, there is a bit of code that could be similar to the following:</p>
<pre class= brush: jscript; title: ; notranslate >
Function.prototype = {
    arguments: null,
    length: 0,
    call: function(){
        // secret code
    },
    apply: function(){
        // secret code
    }
    ...
}
</pre>
<p>In truth, it probably wouldn€™t be quite so simplistic; this is merely to illustrate how the prototype chain works.</p>
<p>So we have defined <code>myObject</code> as a function and given it one argument, <code>name</code>; but we never set any properties, such as <code>length</code> or methods, such as <code>call</code>. So why does the following work?</p>
<pre class= brush: jscript; title: ; notranslate >console.log(myObject.length); // 1 (being the amount of available arguments)</pre>
<p>This is because, when we defined <code>myObject</code>, it created a <code>__proto__</code> property and set its value to <code>Function.prototype</code> (illustrated in the code above). So, when we access <code>myObject.length</code>, it looks for a property of <code>myObject</code> called <code>length</code> and doesn€™t find one; it then travels up the chain, via the <code>__proto__ link</code>, finds the property and returns it.</p>
<p>You might be wondering why <code>length</code> is set to <code>1</code> and not <code>0</code> &#8211; or any other number for that fact. This is because <code>myObject</code> is in fact an instance of <code>Function</code>.</p>
<pre class= brush: jscript; title: ; notranslate >console.log(myObject instanceof Function); // true
console.log(myObject === Function); // false</pre>
<p>When an instance of an object is created, the <code>__proto__</code> property is updated to point to the constructor€™s prototype, which, in this case, is <code>Function</code>.</p>
<pre class= brush: jscript; title: ; notranslate >console.log(myObject.__proto__ === Function.prototype) // true</pre>
<p>Additionally, when you create a new <code>Function</code> object, the native code inside the <code>Function</code> constructor will count the number of arguments and update <code>this.length</code> accordingly, which, in this case, is <code>1</code>.</p>
<p>If, however, we create a new instance of <code>myObject</code> using the <code>new</code> keyword, <code>__proto__</code> will point to <code>myObject.prototype</code> as <code>myObject</code> is the constructor of our new instance.</p>
<pre class= brush: jscript; title: ; notranslate >
var myInstance = new myObject(€śfoo€ť);
console.log(myInstance.__proto__ === myObject.prototype); // true</pre>
<p>In addition to having access to the native methods within the <code>Function</code>.prototype, such as <code>call</code> and <code>apply</code>, we now have access to <code>myObject</code>€™s method, <code>getName</code>.</p>
<pre class= brush: jscript; title: ; notranslate >
console.log(myInstance.getName()); // foo

var mySecondInstance = new myObject(€śbar€ť);

console.log(mySecondInstance.getName()); // bar
console.log(myInstance.getName()); // foo
</pre>
<p>As you can imagine, this is quite handy, as it can be used to blueprint an object, and create as many instances as needed &#8211; which leads me onto the next topic!</p>
<hr />
<h2>Why is Using Prototype Better?</h2>
<p>Say, for instance, that we are developing a canvas game and need several (possibly hundreds of) objects on the screen at once. Each object requires its own properties, such as <code>x</code> and <code>y</code> coordinates, <code>width</code>,<code>height</code>, and many others.</p>
<p>We might do it as follows:</p>
<pre class= brush: jscript; title: ; notranslate >
var GameObject1 = {
    x: Math.floor((Math.random() * myCanvasWidth) + 1),
    y: Math.floor((Math.random() * myCanvasHeight) + 1),
    width: 10,
    height: 10,
    draw: function(){
        myCanvasContext.fillRect(this.x, this.y, this.width, this.height);
    }
   ...
};

var GameObject2 = {
    x: Math.floor((Math.random() * myCanvasWidth) + 1),
    y: Math.floor((Math.random() * myCanvasHeight) + 1),
    width: 10,
    height: 10,
    draw: function(){
        myCanvasContext.fillRect(this.x, this.y, this.width, this.height);
    }
    ...
};
</pre>
<p>&#8230; do this 98 more times &#8230;</p>
<p>What this will do is create all these objects within memory &#8211; all with separate definitions for methods, such as <code>draw</code> and whatever other methods may be required. This is certainly not ideal, as the game will bloat the browsers allocated JavaScript memory, and make it run very slowly&#8230; or even stop responding. </p>
<p>While this probably wouldn€™t happen with only 100 objects, it still can serve to be quite a performance hit, as it will need to look up one hundred different objects, rather than just the single <code>prototype</code> object.</p>
<hr />
<h2>How to Use Prototype</h2>
<p>To make the application run faster (and follow best practices), we can (re)define the prototype property of the <code>GameObject</code>; every instance of <code>GameObject</code> will then reference the methods within <code>GameObject.prototype</code> as if they were their own methods.</p>
<pre class= brush: jscript; title: ; notranslate >
// define the GameObject constructor function
var GameObject = function(width, height) {
    this.x = Math.floor((Math.random() * myCanvasWidth) + 1);
    this.y = Math.floor((Math.random() * myCanvasHeight) + 1);
    this.width = width;
    this.height = height;
    return this;
};

// (re)define the GameObject prototype object
GameObject.prototype = {
    x: 0,
    y: 0,
    width: 5,
    width: 5,
    draw: function() {
        myCanvasContext.fillRect(this.x, this.y, this.width, this.height);
    }
};
</pre>
<p>We can then instantiate the GameObject 100 times.</p>
<pre class= brush: jscript; title: ; notranslate >
var x = 100,
arrayOfGameObjects = [];

do {
    arrayOfGameObjects.push(new GameObject(10, 10));
} while(x--);
</pre>
<p>Now we have an array of 100 GameObjects, which all share the same prototype and definition of the <code>draw</code> method, which drastically saves memory within the application. </p>
<p>When we call the <code>draw</code> method, it will reference the exact same function.</p>
<pre class= brush: jscript; title: ; notranslate >
var GameLoop = function() {
    for(gameObject in arrayOfGameObjects) {
        gameObject.draw();
    }
};
</pre>
<hr />
<h2>Prototype is a Live Object</h2>
<p>An object&#8217;s prototype is a live object, so to speak. This simply means that, if, after we create all our GameObject instances, we decide that, instead of drawing a rectangle, we want to draw a circle, we can update our <code>GameObject.prototype.draw</code> method accordingly.</p>
<pre class= brush: jscript; title: ; notranslate >
GameObject.prototype.draw = function() {
    myCanvasContext.arc(this.x, this.y, this.width, 0, Math.PI*2, true);
}
</pre>
<p>And now, all the previous instances of <code>GameObject</code> and any future instances will draw a circle.</p>
<hr />
<h2>Updating Native Objects Prototypes</h2>
<p>Yes, this is possible. You may be familiar with JavaScript libraries, such as <a href= http://www.prototypejs.org/ >Prototype</a>, which take advantage of this method.</p>
<p>Let€™s use a simple example:</p>
<pre class= brush: jscript; title: ; notranslate >
String.prototype.trim = function() {
    return this.replace(/^s+|s+$/g, €€™);
};
</pre>
<p>We can now access this as a method of any string:</p>
<pre class= brush: jscript; title: ; notranslate >€ś foo bar   €ś.trim(); // €śfoo bar€ť</pre>
<p>There is a minor downside to this, however. For example, you may use this in your application; but a year or two down the road, a browser may implement an updated version of JavaScript that includes a native <code>trim</code> method within the <code>String</code>&#8216;s prototype. This means that your definition of <code>trim</code> will override the native version! Yikes! To overcome this, we can add a simple check before defining the function.</p>
<pre class= brush: jscript; title: ; notranslate >
if(!String.prototype.trim) {
    String.prototype.trim = function() {
        return this.replace(/^s+|s+$/g, €€™);
    };
}
</pre>
<p>Now, if it exists, it will use the native version of the <code>trim</code> method.</p>
<blockquote>
<p>
      As a rule of thumb, it&#8217;s generally considered a best practice to avoid extending native objects. But, as with anything, rules can be broken, if needed.
  </p>
</blockquote>
<hr />
<h2>Conclusion</h2>
<p>Hopefully, this article has shed some light on the backbone of JavaScript that is prototype. You should now be on your way to creating more efficient applications. </p>
<p>If you have any questions regarding prototype, let me know in the comments, and I&#8217;ll do my best to answer them.</p>
<p><a href= http://feedads.g.doubleclick.net/~a/lWt0y98zK9Cym20KX3CicBsCJ1s/0/da ><img src= http://feedads.g.doubleclick.net/~a/lWt0y98zK9Cym20KX3CicBsCJ1s/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/lWt0y98zK9Cym20KX3CicBsCJ1s/1/da ><img src= http://feedads.g.doubleclick.net/~a/lWt0y98zK9Cym20KX3CicBsCJ1s/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=JMdjcqupCZ0:buyzJCRF90c:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=JMdjcqupCZ0:buyzJCRF90c:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=JMdjcqupCZ0:buyzJCRF90c:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=JMdjcqupCZ0:buyzJCRF90c:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=JMdjcqupCZ0:buyzJCRF90c:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=JMdjcqupCZ0:buyzJCRF90c:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=JMdjcqupCZ0:buyzJCRF90c:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=JMdjcqupCZ0:buyzJCRF90c:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/JMdjcqupCZ0  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-09 22:51:48</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[35 Fresh Internet Startups Featuring Brilliant UI Design]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=861</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=861</guid>
			  <description><![CDATA[<p><a href= http://rss.buysellads.com/click.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12110&c=122485301  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12110&c=122485301  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264758  target= _blank >Advertise here with BSA</a></p><br /><p class= bigger >Just back a decade ago everybody was talking about web 2.0 trends. The Internet was bustling with hundreds of new startup ideas following MySpace, Friendster, Facebook, Twitter, and now even things like Foursquare and Pinterest. The advancing world of tech startups has proven there is no shortage of new ideas.</p>
<p>And when it comes to web design the scenario is very similar. I have put together 35 examples of new startups which feature brilliant layout designs. Some are web applications, others are social networks, and even a few sites are built around mobile apps. But all of these startups bring new ideas into an otherwise stagnant digital market.</p>
<h3><a href= http://saaspose.com/ >Saas Pose</a></h3>
<p class= nobrdr ><a href= http://saaspose.com/ ><img src= http://spyrestudios.com/wp-content/uploads/01-saas-pose-startup-website.jpg  class= frame  /></a></p>
<p><span id= more-12110 ></span></p>
<h3><a href= http://allmyapps.com/ >All My Apps</a></h3>
<p class= nobrdr ><a href= http://allmyapps.com/ ><img src= http://spyrestudios.com/wp-content/uploads/02-allmyapps-website.jpg  class= frame  /></a></p>
<h3><a href= https://medigram.com/ >Medigram</a></h3>
<p class= nobrdr ><a href= https://medigram.com/ ><img src= http://spyrestudios.com/wp-content/uploads/03-medigram-social-network.jpg  class= frame  /></a></p>
<h3><a href= http://www.collba.com/ >Collba</a></h3>
<p class= nobrdr ><a href= http://www.collba.com/ ><img src= http://spyrestudios.com/wp-content/uploads/04-collba-request-invite.jpg  class= frame  /></a></p>
<h3><a href= https://path.com/ >Path</a></h3>
<p class= nobrdr ><a href= https://path.com/ ><img src= http://spyrestudios.com/wp-content/uploads/05-path-ios-app.jpg  class= frame  /></a></p>
<h3><a href= http://popset.com/ >Popset</a></h3>
<p class= nobrdr ><a href= http://popset.com/ ><img src= http://spyrestudios.com/wp-content/uploads/06-popset-green-website-layout.jpg  class= frame  /></a></p>
<h3><a href= https://www.sendhub.com/ >SendHub</a></h3>
<p class= nobrdr ><a href= https://www.sendhub.com/ ><img src= http://spyrestudios.com/wp-content/uploads/07-sendhub-sms-messaging-networkl.jpg  class= frame  /></a></p>
<h3><a href= http://www.localmind.com/ >Localmind</a></h3>
<p class= nobrdr ><a href= http://www.localmind.com/ ><img src= http://spyrestudios.com/wp-content/uploads/08-localmind-ios-app.jpg  class= frame  /></a></p>
<h3><a href= http://pinterest.com/ >Pinterest</a></h3>
<p class= nobrdr ><a href= http://pinterest.com/ ><img src= http://spyrestudios.com/wp-content/uploads/09-pinterest-photo-wall.jpg  class= frame  /></a></p>
<h3><a href= http://punchfork.com/ >Punchfork</a></h3>
<p class= nobrdr ><a href= http://punchfork.com/ ><img src= http://spyrestudios.com/wp-content/uploads/10-punchfork-website-rating.jpg  class= frame  /></a></p>
<h3><a href= http://www.brandmymail.com/ >BrandMyMail</a></h3>
<p class= nobrdr ><a href= http://www.brandmymail.com/ ><img src= http://spyrestudios.com/wp-content/uploads/11-brand-my-mail-website.jpg  class= frame  /></a></p>
<h3><a href= https://hall.com/ >Hall.com</a></h3>
<p class= nobrdr ><a href= https://hall.com/ ><img src= http://spyrestudios.com/wp-content/uploads/12-hall-socialnetwork-website.jpg  class= frame  /></a></p>
<h3><a href= https://bugrocket.com/ >Bugrocket</a></h3>
<p class= nobrdr ><a href= https://bugrocket.com/ ><img src= http://spyrestudios.com/wp-content/uploads/13-bugrocket-startup-website.jpg  class= frame  /></a></p>
<h3><a href= http://www.picfull.com/ >Picfull</a></h3>
<p class= nobrdr ><a href= http://www.picfull.com/ ><img src= http://spyrestudios.com/wp-content/uploads/14-picfull-photo-editing-online.jpg  class= frame  /></a></p>
<h3><a href= http://www.trippy.com/ >Trippy</a></h3>
<p class= nobrdr ><a href= http://www.trippy.com/ ><img src= http://spyrestudios.com/wp-content/uploads/15-trippy-web-app.jpg  class= frame  /></a></p>
<h3><a href= http://www.farmigo.com/ >Farmigo</a></h3>
<p class= nobrdr ><a href= http://www.farmigo.com/ ><img src= http://spyrestudios.com/wp-content/uploads/16-farmigo-network-farming.jpg  class= frame  /></a></p>
<h3><a href= http://fab.com/ >Fab.</a></h3>
<p class= nobrdr ><a href= http://fab.com/ ><img src= http://spyrestudios.com/wp-content/uploads/17-fab-website-layout.jpg  class= frame  /></a></p>
<h3><a href= http://bre.ad/ >bre.ad</a></h3>
<p class= nobrdr ><a href= http://bre.ad/ ><img src= http://spyrestudios.com/wp-content/uploads/18-bread-website-web20-layout.jpg  class= frame  /></a></p>
<h3><a href= http://weheartit.com/ >we heart it</a></h3>
<p class= nobrdr ><a href= http://weheartit.com/ ><img src= http://spyrestudios.com/wp-content/uploads/19-we-heart-it-photos-network.jpg  class= frame  /></a></p>
<h3><a href= http://www.sparked.com/ >Sparked</a></h3>
<p class= nobrdr ><a href= http://www.sparked.com/ ><img src= http://spyrestudios.com/wp-content/uploads/20-sparked-micro-volunteering-website.jpg  class= frame  /></a></p>
<h3><a href= http://www.jobspice.com/home >JobSpice</a></h3>
<p class= nobrdr ><a href= http://www.jobspice.com/home ><img src= http://spyrestudios.com/wp-content/uploads/21-jobspice-searching-careers.jpg  class= frame  /></a></p>
<h3><a href= http://www.onswipe.com/ >Onswipe</a></h3>
<p class= nobrdr ><a href= http://www.onswipe.com/ ><img src= http://spyrestudios.com/wp-content/uploads/22-onswpie-tablet-design.jpg  class= frame  /></a></p>
<h3><a href= http://www.papyrs.com/ >Papyrs</a></h3>
<p class= nobrdr ><a href= http://www.papyrs.com/ ><img src= http://spyrestudios.com/wp-content/uploads/23-papyrs-social-network-website.jpg  class= frame  /></a></p>
<h3><a href= http://www.meetin.gs/ >meetin.gs</a></h3>
<p class= nobrdr ><a href= http://www.meetin.gs/ ><img src= http://spyrestudios.com/wp-content/uploads/24-meetings-business-collaboration.jpg  class= frame  /></a></p>
<h3><a href= http://www.magisto.com/ >Magisto</a></h3>
<p class= nobrdr ><a href= http://www.magisto.com/ ><img src= http://spyrestudios.com/wp-content/uploads/25-magisto-app-iphone.jpg  class= frame  /></a></p>
<h3><a href= http://www.vayable.com/ >Vayable</a></h3>
<p class= nobrdr ><a href= http://www.vayable.com/ ><img src= http://spyrestudios.com/wp-content/uploads/26-vayable.jpg  class= frame  /></a></p>
<h3><a href= http://star.me/ >Star.me</a></h3>
<p class= nobrdr ><a href= http://star.me/ ><img src= http://spyrestudios.com/wp-content/uploads/27-star-me-beta-webapp.jpg  class= frame  /></a></p>
<h3><a href= http://slidebomb.com/sbo_home.php >Slidebomb</a></h3>
<p class= nobrdr ><a href= http://slidebomb.com/sbo_home.php ><img src= http://spyrestudios.com/wp-content/uploads/28-slidebomb-slideshow-presentations-powerpoint.jpg  class= frame  /></a></p>
<h3><a href= http://like.fm/ >like.fm</a></h3>
<p class= nobrdr ><a href= http://like.fm/ ><img src= http://spyrestudios.com/wp-content/uploads/29-music-likefm-online.jpg  class= frame  /></a></p>
<h3><a href= http://chewsy.com/ >Chewsy</a></h3>
<p class= nobrdr ><a href= http://chewsy.com/ ><img src= http://spyrestudios.com/wp-content/uploads/30-chewsy-mobile-app.jpg  class= frame  /></a></p>
<h3><a href= https://www.keepio.com/ >Keepio</a></h3>
<p class= nobrdr ><a href= https://www.keepio.com/ ><img src= http://spyrestudios.com/wp-content/uploads/31-keepio-webapp-website-design.jpg  class= frame  /></a></p>
<h3><a href= http://miimr.com/ >Miimr</a></h3>
<p class= nobrdr ><a href= http://miimr.com/ ><img src= http://spyrestudios.com/wp-content/uploads/32-miimr-website-web2-0.jpg  class= frame  /></a></p>
<h3><a href= http://gridulator.com/ >Gridulator</a></h3>
<p class= nobrdr ><a href= http://gridulator.com/ ><img src= http://spyrestudios.com/wp-content/uploads/33-gridulator-online.jpg  class= frame  /></a></p>
<h3><a href= http://www.ffflourish.com/ >ffflourish</a></h3>
<p class= nobrdr ><a href= http://www.ffflourish.com/ ><img src= http://spyrestudios.com/wp-content/uploads/34-ffflourish-sharing-network.jpg  class= frame  /></a></p>
<h3><a href= http://www.clueapp.com/ >Clueapp</a></h3>
<p class= nobrdr ><a href= http://www.clueapp.com/ ><img src= http://spyrestudios.com/wp-content/uploads/35-clueapp-iphone-web-design.jpg  class= frame  /></a></p>
<br /><p><a href= http://rss.buysellads.com/click.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12110&c=1657510058  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12110&c=1657510058  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264756  target= _blank >Advertise here with BSA</a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=TzevzKxY174  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=FtmNpWXweuo:abw58FCB6Pc:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:l6gmwiTKsz0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=l6gmwiTKsz0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:qj6IDK7rITs ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=qj6IDK7rITs  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=FtmNpWXweuo:abw58FCB6Pc:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:7Q72WNTAKBA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=7Q72WNTAKBA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=FtmNpWXweuo:abw58FCB6Pc:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:dnMXMwOfBR0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=dnMXMwOfBR0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:D7DqB2pKExk ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=FtmNpWXweuo:abw58FCB6Pc:D7DqB2pKExk  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=FtmNpWXweuo:abw58FCB6Pc:-BTjWOF_DHI ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=FtmNpWXweuo:abw58FCB6Pc:-BTjWOF_DHI  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/SpyreStudios/~4/FtmNpWXweuo  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-07 22:51:44</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[14 Reasons Why Nobody Used Your jQuery Plugin]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=862</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=862</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24932&c=558597738  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24932&c=558597738  border= 0  alt=   /></a><p>With so many folks developing jQuery plugins, it&#8217;s not uncommon to come across one that just plain &#8211; for lack of better words &#8211; sucks. There&#8217;s no examples or documentation, the plugin doesn&#8217;t follow best practices, etc. But you&#8217;re one of the lucky ones: this article will detail the pitfalls that you must avoid.</p>
<p><span id= more-24932 ></span></p>
<p>jQuery is no stranger to those of you frequent Nettuts+. Jeffrey Way&#8217;s awesome <a href= http://learnjquery.tutsplus.com >30 Days to Learn jQuery</a> (and various other tutorials here and elsewhere) have led us all down the path to Sizzle-powered awesomesauce. In all the hype (and a lot of leaps in JavaScript adoption by developers and browser vendors), plenty of plugins have come onto the scene. This is partially why jQuery has become the most popular JavaScript library available! The only problem is that many of them aren&#8217;t too great.</p>
<p>In this article, we&#8217;ll focus less on the JavaScript specifically, and more on best practices for plugin delivery.</p>
<hr />
<h2> <span>1 &#8211; </span> You Aren&#8217;t Making a jQuery Plugin</h2>
<p>There are some patterns that are, more or less, universally accepted as &#8220;The Right Way&#8221; to create jQuery plugins. If you aren&#8217;t following these conventions, your plugin may&#8230; suck! Consider one of the most common patterns:</p>
<pre class= brush: jscript; title: ; notranslate >
(function($, window, undefined){
$.fn.myPlugin = function(opts) {
	var defaults = {
		// setting your default values for options
	}

  // extend the options from defaults with user s options
  var options = $.extend(defaults, opts || {});

	return this.each(function(){ // jQuery chainability
	  // do plugin stuff
	});
})(jQuery, window);
</pre>
<p>First, we are creating a self-invoking anonymous function to shield ourselves from using global variables. We pass in <code>$</code>, <code>window</code>, and <code>undefined</code>. The arguments the self invoking function is called with are <code>jQuery</code> and <code>window</code>; nothing is passed in for undefined, so that if we decide to use the undefined keyword within the plugin, &#8220;undefined&#8221; actually will be undefined. </p>
<blockquote>
<p>
      This shields from other scripts potentially assigning a malicious value to <code>undefined</code>, such as <code>true</code>!
  </p>
</blockquote>
<p> <code>$</code> is passed as jQuery; we do it this way to ensure that, outside of the anonymous function, <code>$</code> can still refer to something else entirely, such as Prototype.</p>
<p>Passing the variable for the globally accessible <code>window</code> object allows for more compressed code through the minification processes (which you should be doing, as well).</p>
<p>Next, we are using the jQuery plugin pattern, <code>$.fn.PluginName</code>. This is a way of registering your plugin to be used with the <code>$(selector).method()</code> format. It simply extends jQuery&#8217;s prototype with your new method. If you want to instead create a plugin that defines a function on the jQuery object, add it directly, like so:</p>
<pre class= brush: jscript; title: ; notranslate >
$.PluginName = function(options){
	// extend options, do plugin stuff
}
</pre>
<p>This type of plugin won&#8217;t be chainable, as functions that are defined as properties of the jQuery object typically don&#8217;t return the jQuery object. For instance, consider the following code:</p>
<pre class= brush: jscript; title: ; notranslate >
$.splitInHalf = function(stringToSplit){
	var length = stringToSplit.length;
	var stringArray = stringToSplit.split(stringToSplit[Math.floor(length/2)]);
	return stringArray;
}
</pre>
<p>Here, we are returning an array of strings. It makes sense to simply return this as an array, as this is likely what users will want to use (and they can easily wrap it in the jQuery object if they wish). In contrast, consider the following contrived example:</p>
<pre class= brush: jscript; title: ; notranslate >
$.getOddEls = function(jQcollection){ //
	return jQcollection.filter(function(index){
		var i = index+1;
		return (index % 2 != 0);
	});
}
</pre>
<p>In this case, the user is probably expecting the jQuery object to return from <code>$.getOddEls</code>; so, we return the <a href= http://api.jquery.com/filter >filter</a> method, which returns the jQuery collection defined by the function that is passed. A good rule of thumb is to wrap returned elements in the jQuery function, especially if they can be chained; if you are returning arrays, strings, numbers, functions, or other data types, leave them unwrapped.</p>
<hr />
<h2> <span>2 -</span> You Aren&#8217;t Documenting Your Code (Correctly)</h2>
<p>Arguably, the most important thing you can do when publishing your code is add the necessary documentation. The gap between what you explain to developers and what the code actually does or can do is the time that users don&#8217;t want to waste figuring out the ins and outs of your code.</p>
<p>Documentation is a practice that doesn&#8217;t have any hard-fast rules; however, it is generally accepted that the more (well organized) documentation you have, the better.</p>
<p>This process should be both an internal practice (within/interspersed throughout your code) as well as an external practice (explaining every public method, option, and multiple use cases thoroughly in a wiki or readme).</p>
<hr />
<h2> <span>3 &#8211; </span> You Aren&#8217;t Providing Enough Flexibility or Customizability</h2>
<p>The most popular plugins offer full access to variables (what most plugins refer to as &#8220;options&#8221; objects) that a user may want to control. They also may offer many different configurations of the plugin so that it is reusable in many different contexts. For instance, let&#8217;s consider a simple slider plugin. Options that the user might wish to control include the speed, type, and delay of the animation.</p>
<p>It&#8217;s good practice to also give the user access to classnames/ID names which are added to the DOM elements inserted or manipulated by the plugin. But beyond this, they may also want to have access to a callback function every time the slide transitions, or perhaps when the slide transitions back to the beginning (one full &#8220;cycle&#8221;). </p>
<blockquote>
<p>
      It&#8217;s your job to think of all possible uses and needs for the plugin.
  </p>
</blockquote>
<p>Let&#8217;s consider another example: a plugin that makes a call to an API should provide access to the API&#8217;s returned object. Take the following example of a simple plugin concep:.</p>
<pre class= brush: jscript; title: ; notranslate >
$.fn.getFlickr = function(opts) {
	return this.each(function(){ // jQuery chainability
		var defaults = { // setting your default options
			cb : function(data){},
			flickrUrl : // some default value for an API call
		}
	    // extend the options from defaults with user s options
	    var options = $.extend(defaults, opts || {});

	    // call the async function and then call the callback
	    // passing in the api object that was returned
	    $.ajax(flickrUrl, function(dataReturned){
			options.cb.call(this, dataReturned);
		});
	});
}
</pre>
<p>This allows us to do something along the lines of:</p>
<pre class= brush: jscript; title: ; notranslate >
	$(selector).getFlickr(function(fdata){ // flickr data is in the fdata object });
</pre>
<p>Another way of publicizing this is to offer &#8220;hooks&#8221; as options. As of jQuery 1.7.1 and up, we can use <code>.on(eventName, function(){})</code> after our plugin call to separate the behaviors into their own functions. For instance, with the plugin above, we could change the code to look like this:</p>
<pre class= brush: jscript; title: ; notranslate >
$.fn.getFlickr = function(opts) {
	return this.each(function(i,el){
		var $this = el;
		var defaults = { // setting your default options
			flickrUrl : &quot;http://someurl.com&quot; // some default value for an API call
		}
	    var options = $.extend(defaults, opts || {});

	    // call the async function and then call the callback
	    // passing in the api object that was returned
	    $.ajax(flickrUrl, function(dataReturned){
	    	// do some stuff
			$this.trigger(&quot;callback&quot;, dataReturned);
		}).error(function(){
				$this.trigger(&quot;error&quot;, dataReturned);
			});
	});
}
</pre>
<p>This allows us to call the <code>getFlickr</code> plugin and chain other behavior handlers.</p>
<pre class= brush: jscript; title: ; notranslate >
$(selector).getFlickr(opts).on(&quot;callback&quot;, function(data){ // do stuff }).on(&quot;error&quot;, function(){ // handle an error });
</pre>
<p>You can see that offering this kind of flexibility is absolutely important; the more complex actions your plugins have, the more complex the control that should be available.</p>
<hr />
<h2> <span>4 &#8211; </span> You&#8217;re Requiring Too Much Configuration</h2>
<p>Ok, so tip number three suggested that the more complex actions your plugins have, the more complex control that should be <em>available</em>. A big mistake, however, is making too many options required for plugin functionality. For instance, it is ideal for UI based plugins to have a no-arguments default behavior.</p>
<pre class= brush: jscript; title: ; notranslate >
$(selector).myPlugin();
</pre>
<p>Certainly, sometimes this isn&#8217;t realistic (as users may be fetching a specific feed, for instance). In this case, you should do some of the heavy lifting for them. Have multiple ways of passing options to the plugin. For instance, let&#8217;s say we have a simple Tweet fetcher plugin. There should be a default behavior of that Tweet fetcher with a single required option (the username you want to fetch from).</p>
<pre class= brush: jscript; title: ; notranslate >
$(selector).fetchTweets(&quot;jcutrell&quot;);
</pre>
<p>The default may, for instance, grab a single tweet, wrap it in a paragraph tag, and fill the selector element with that html. This is the kind of behavior that most developers expect and appreciate. The granular options should be just that: options.</p>
<hr />
<h2> <span>5 &#8211; </span> You&#8217;re Mixing External CSS Rules and Inline CSS Rules</h2>
<p>It&#8217;s inevitable, depending upon the type of plugin, of course, that you will have to include a CSS file if it is highly based on UI manipulations. This is an acceptable solution to the problem, generally speaking; most plugins come bundled with images and CSS. But don&#8217;t forget tip number two &#8211; documentation should also include how to use/reference the stylesheet(s) and images. Developers won&#8217;t want to waste time looking through your source code to figure these things out.</p>
<blockquote>
<p>
Things should just&#8230;work.  </p>
</blockquote>
<p>With that said, it is definitely a best practice to use either injected styles (that are highly accessible via plugin options) or class/ID based styling. These IDs and classes should also be accessible, via options as previously mentioned. Inline styles override external CSS rules, however; the mixing of the two is discouraged, as it may take a developer a long time to figure out why their CSS rules aren&#8217;t being respected by elements created by your plugin. Use your best judgment in these cases.</p>
<blockquote>
<p>
As a rule of thumb, inline CSS is bad &#8211; unless it&#8217;s so minimal to the point that it doesn&#8217;t warrant its own external stylesheet.  </p>
</blockquote>
<hr />
<h2> <span>6 &#8211; </span> You Don&#8217;t Offer Examples</h2>
<p>The proof is in the pudding: if you can&#8217;t provide a practical example of what your plugin does with accompanying code, people will quickly be turned off to using your plugin. Simple as that. Don&#8217;t be lazy.</p>
<p><strong>A good template for examples:</strong></p>
<ul>
<li>A &#8220;hello world&#8221; example &#8211; usually the plugin call with the minimum configuration/options passed, and it&#8217;s accompanying html/css</li>
<li>A few more involved examples &#8211; usually with examples of full functionality of multiple options</li>
<li>An integration example &#8211; if someone might use another plugin with your plugin, here is where you can show how to do that. (This gets you bonus points in the open-source development world, too. Kudos.)</li>
</ul>
<hr />
<h2> <span>7 &#8211; </span> Your Code Doesn&#8217;t Match Their jQuery Version</h2>
<p>jQuery, like any good code library, grows with every release. Most methods are kept even after support is deprecated. However, new methods are added on; a perfect example of this is the <code>.on()</code> method, which is jQuery&#8217;s new all-in-one solution for event delegation. If you write a plugin that uses <code>.on()</code>, people using jQuery 1.6 or earlier will be out of luck. Now I&#8217;m not suggesting that you code for the lowest common denominator, but, in your documentation, be sure to explain which version of jQuery your plugin supports. If you introduce a plugin with support for jQuery 1.7, you should strongly consider maintaining support for 1.7 even once 1.8 comes out. You should also consider taking advantage of new/better/faster features in jQuery as they come out. </p>
<blockquote>
<p>
      Encourage developers to upgrade, but don&#8217;t break your plugin too often! One option is to offer a &#8220;legacy&#8221; deprecated, non-supported versions of your plugin.
  </p>
</blockquote>
<hr />
<h2> <span>8 -</span> Where&#8217;s the Changelog?</h2>
<blockquote class= pullquote >
<p>
 It&#8217;s time to bite the bullet if you haven&#8217;t learned how to use version control yet.
</p>
</blockquote>
<p>Along with keeping your jQuery version support/compatibility a part of your documentation, you should also be working in version control. Version control (specifically, via <a href= http://github.com >GitHub</a>) is largely the home of social coding. If you are developing a plugin for jQuery that you want to eventually publish in the official repository, it must be stored in a GitHub repository anyway; it&#8217;s time to bite the bullet if you haven&#8217;t learned how to use version control. There are countless benefits to version control, all of which are beyond the scope of this article. But one of the core benefits is that it allows people to view the changes, improvements, and compatibility fixes you make, and when you make them. This also opens the floor for contribution and customization/extension of the plugins you write.</p>
<h3>Additional Resources</h3>
<ul>
<li><a href= http://git-scm.com/book >The Git Book</a>
<li><a href- http://net.tutsplus.com/tutorials/other/easy-version-control-with-git/ >Easy Version Control With Git</a>
<li><a href= http://net.tutsplus.com/tutorials/other/the-perfect-workflow-with-git-github-and-ssh/ >The Perfect Workflow With Git, GitHub, and SSH</a>
<li><a href= http://tutsplus.com/ebook/getting-good-with-git/ >Getting Good With Git ($19)</a>
<li><a href= http://gitcasts.com/ >GitCasts</a>
</ul>
<hr />
<h2> <span>9 &#8211; </span>Nobody Needs Your Plugin</h2>
<blockquote class= pullquote >
<p>
The world doesn&#8217;t need another slider plugin.
</p>
</blockquote>
<p>Ok, we&#8217;ve ignored it long enough here: some &#8220;plugins&#8221; are useless or too shallow to warrant being called a plugin. The world doesn&#8217;t need another slider plugin! It should be noted, however, that internal teams may develop their own plugins for their own uses, which is perfectly fine. However, if you&#8217;re hoping to push your plugin into the social coding sphere, find a reason to write more code. As the saying goes, there&#8217;s no reason to reinvent the wheel. Instead, take someone else&#8217;s wheel, and build a racecar. Of course, sometimes there are new and better ways of doing the same things that have already been done. For instance, you very well might write a new slider plugin if you are using faster or new technology.</p>
<hr />
<h2> <span>10 &#8211; </span> You Aren&#8217;t Providing a Minified Version</h2>
<p>This one is fairly simple: offer a minified version of your code. This makes it smaller and faster. It also ensures that your Javascript is error free when compiled. When you minify your code, don&#8217;t forget to offer the uncompressed version as well, so that your peers can review the underlying code. Free and cheap tools exist for front-end developers of all levels of experience.</p>
<blockquote>
<p>
      Refer to tip number thirteen for an automated solution.
  </p>
</blockquote>
<hr />
<h2> <span>11 &#8211; </span> Your Code is Too Clever</h2>
<p>When you write a plugin, it is meant to be used by others, right? For this reason, the most effective source code is highly readable. If you&#8217;re writing countless clever one-liner lambda style functions, or your variable names aren&#8217;t semantic, it will be difficult to debug errors when they inevitably occur. Instead of writing short variable names to save space, follow the advice in tip number nine (minify!). This is another part of good documentation; decent developers should be able to review your code and understand what it does without having to expend too much energy.</p>
<blockquote>
<p>
      If you find yourself calling variables &#8220;<code>a</code>&#8221; or &#8220;<code>x</code>&#8220;, you&#8217;re doing it wrong.
  </p>
</blockquote>
<p>Additionally, if you find yourself consulting documentation to remember what <em>your own</em> strange looking code is doing, you also likely need to be less concise and more explanatory. Restrict the number of lines in each function to as few as possible; if they stretch for thirty or more lines, there might be a code smell.</p>
<hr />
<h2> <span>11.</span>You Don&#8217;t Need jQuery</h2>
<p>As much as we all love using jQuery, it is important to understand that it is a library, and that comes with a small cost. In general, you don&#8217;t need to worry too much about things like jQuery selector performance. Don&#8217;t be obnoxious, and you&#8217;ll be just fine. jQuery is highly optimized. That said, if the sole reason why you need jQuery (or a plugin) is to perform a few queries on the DOM, you might consider removing the abstraction entirely, and, instead, sticking with vanilla JavaScript, or Zepto.</p>
<blockquote>
<p>
<strong>Note: </strong>if you decide to stick with vanilla JavaScript, <a href= http://caniuse.com >ensure</a> that you&#8217;re using methods that are cross-browser. You might potentially need a small polyfill for the newer APIs.
  </p>
</blockquote>
<hr />
<h2> <span>13 &#8211; </span> You&#8217;re Not Automating the Process</h2>
<blockquote class= pullquote pqRight >
<p>
Use Grunt. Period.</p>
</blockquote>
<p><a href= http://gruntjs.com/ >Grunt</a> is a &#8220;task-based command line build tool for JavaScript projects&#8221;, which was covered in detail recently <a href= http://net.tutsplus.com/tutorials/javascript-ajax/meeting-grunt-the-build-tool-for-javascript/ >here on Nettuts+</a>. It allows you to do things like this:</p>
<pre class= brush: plain; title: ; notranslate >
grunt init:jquery
</pre>
<p>This line (executed in the command line) will prompt you with a set of questions, such as the title, description, version, git repository, licenses, etcetera. These pieces of information help to automate the process of setting up your documentation, licensing, etc. </p>
<p>Grunt does far more than just make some customized boilerplate code for you; it also offers built in tools, like the code linter <a href= http://www.jshint.com/ >JSHint</a>, and it can automate <a href= http://docs.jquery.com/QUnit >QUnit</a> tests for you as long as you have <a href= http://phantomjs.org/ >PhantomJS</a> installed (which Grunt takes care of). This way, you can streamline your workflow, as tests run instantly in the terminal on save. </p>
<hr />
<h2><span>14 &#8211; </span>You&#8217;re Not Testing</h2>
<p>Oh, by the way &#8211; you <em>do</em> test your code, right? If not, how can you ensure/declare that your code works as expected? Manual testing has its place, but, if you find yourself refreshing the browser countless times every hour, you&#8217;re doing it wrong. Consider using tools, such as <a href= http://docs.jquery.com/QUnit >QUnit</a>, <a href= http://pivotal.github.com/jasmine/ >Jasmine</a>, or even <a href= http://visionmedia.github.com/mocha/ >Mocha</a>. </p>
<p>Testing is particularly useful when merging in pull requests on GitHub. You can require that all requests provide tests to ensure that the new/modified code does not break your existing plugin.</p>
<blockquote>
<p>
      If the concept of testing jQuery plugins is brand new to you, consider watching our Premium-exclusive screencast, <a href= http://tutsplus.com/tutorial/techniques-for-test-driving-jquery-plugins/ >Techniques For Test-Driving jQuery Plugins</a>. Additionally, we&#8217;re launching a new &#8220;JavaScript Testing With Jasmine&#8221; course later this week on <a href= http://tutsplus.com/courses >the site</a>!
  </p>
</blockquote>
<hr />
<h2>Some Helpful Resources</h2>
<p>We wouldn&#8217;t be doing you any favors by just telling you what you&#8217;re doing wrong. Here are some links that will help get you back on the right path!</p>
<ul>
<li><a href= http://learnjquery.tutsplus.com >30 Days To Learn jQuery</a>
<li><a href= http://coding.smashingmagazine.com/2011/10/11/essential-jquery-plugin-patterns/ >Essential jQuery Plugin Patterns &#8211; Smashing Magazine</a></li>
<li><a href= http://alexsexton.com/blog/2010/02/using-inheritance-patterns-to-organize-large-jquery-applications/ >Using Inheritance Patterns to Organize Large jQuery Applications</a></li>
<li><a target= _blank href= http://docs.jquery.com/Plugins/Authoring >Official jQuery Documentation for Plugin Authoring</a></li>
<li><a target= _blank href= http://jqueryboilerplate.com/ >jQuery Boilerplate</a></li>
<li><a target= _blank href= http://stefangabos.ro/jquery/jquery-plugin-boilerplate-oop/ >OOP jQuery Plugin Boilerplate</a></li>
<li><a target= _blank href= http://www.websanova.com/tutorials/jquery/10-coding-tips-to-write-superior-jquery-plugins >10 Coding Tips to Write Superior jQuery Plugins</a></li>
</ul>
<hr />
<h2>Closing Thoughts</h2>
<p>If you are writing a jQuery plugin, it is vital that you stray away from the pitfalls listed above. Did I miss any key signs of a poorly executed plugin?</p>
<p><a href= http://feedads.g.doubleclick.net/~a/TV1kzRbLHc5M8Xn46o0v8cuRcWY/0/da ><img src= http://feedads.g.doubleclick.net/~a/TV1kzRbLHc5M8Xn46o0v8cuRcWY/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/TV1kzRbLHc5M8Xn46o0v8cuRcWY/1/da ><img src= http://feedads.g.doubleclick.net/~a/TV1kzRbLHc5M8Xn46o0v8cuRcWY/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=utCsWyPhaNI:3iP1K3gXAIg:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=utCsWyPhaNI:3iP1K3gXAIg:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=utCsWyPhaNI:3iP1K3gXAIg:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=utCsWyPhaNI:3iP1K3gXAIg:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=utCsWyPhaNI:3iP1K3gXAIg:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=utCsWyPhaNI:3iP1K3gXAIg:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=utCsWyPhaNI:3iP1K3gXAIg:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=utCsWyPhaNI:3iP1K3gXAIg:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/utCsWyPhaNI  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-07 22:51:44</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Best of Tuts+ in April 2012]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=863</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=863</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24898&c=1896873264  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24898&c=1896873264  border= 0  alt=   /></a><p>Each month, we bring together a selection of the best tutorials and articles from across the whole <a href= http://tutsplus.com/ >Tuts+ network</a>. Whether you&#8217;d like to read the top posts from your favourite site, or would like to start learning something completely new, this is the best place to start!</p>
<p><span id= more-24898 ></span></p>
<hr />
<h2>We&#8217;ve Been in Kuala Lumpur!</h2>
<p>This month we&#8217;ve been attending an Envato company meet-up in Malaysia. We&#8217;ve had a fun time working together as a team, made lots of exciting plans for the future of Tuts+, and also had the chance to meet up with lots of our readers! Thanks to everyone who took the time to attend our community meet-up and, if you&#8217;re interested, you can <a href= http://webdesign.tutsplus.com/articles/news/envatos-kuala-lumpur-conference/ >find out a bit more about our trip here</a> (and see a few photos!)</p>
<div class= tutorial_image ><img src= http://aetuts.s3.amazonaws.com/735_malay/malay_work.jpg  /></div>
<hr />
<h2>Psdtuts+ €” Photoshop Tutorials</h2>
<ul class= webroundup >
<li class= clear >
<div>
		<img src= http://d2f8dzk2mhcqts.cloudfront.net/0683_Micro/preview.jpg  alt= Use Photoshop CS6 to Create a Micro Machines Inspired Scene  width= 200  height= 200  />
	</div>
<h4><a href= http://psd.tutsplus.com/tutorials/photo-effects-tutorials/micro-machines-inspired-scene/ >Use Photoshop CS6 to Create a Micro Machines Inspired Scene</a></h4>
<p>Photoshop CS6 is packed with new features and effects that you can use in your work. In this tutorial we will utilize Photoshop&#8217;s new 3D capabilities as well as its new content aware features to create a Micro Machines inspired composition. Let&#8217;s get started!</p>
<p><a href= http://psd.tutsplus.com/tutorials/photo-effects-tutorials/micro-machines-inspired-scene/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2f8dzk2mhcqts.cloudfront.net/Premium_159_Snow/preview.jpg  alt= Create a Snowy Landscape From Desert Photography in Photoshop &#8211; Tuts+ Premium Tutorial  width= 200  height= 200  />
	</div>
<h4><a href= http://psd.tutsplus.com/tutorials/photo-effects-tutorials/snowy-landscape-using-desert-photography/ >Create a Snowy Landscape From Desert Photography in Photoshop &#8211; Tuts+ Premium Tutorial</a></h4>
<p>Photoshop is a great tool because it allows us to be creative and produce imagery that would be impossible to create otherwise. In this <a href= http://tutsplus.com/?WT.mc_id=premium_psdtuts_ed  >Tuts+ Premium</a> tutorial, author Tony Aub&eacute; will create a snowy landscape from desert photography and photos of sand. This tutorial is available exclusively to Tuts+ Premium Members. If you are looking to take your photo manipulation skills to the next level then <a href= http://tutsplus.com/?WT.mc_id=premium_psdtuts_ed  >Log in</a> or <a href= http://tutsplus.com/join/?WT.mc_id=premium_psdtuts_ed  >Join Now</a> to get started!</p>
<p><a href= http://psd.tutsplus.com/tutorials/photo-effects-tutorials/snowy-landscape-using-desert-photography/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2f8dzk2mhcqts.cloudfront.net/0866_Light_Bulb/preview.jpg  alt= Create a Light Bulb Inspired Text Effect in Photoshop  width= 200  height= 200  />
	</div>
<h4><a href= http://psd.tutsplus.com/tutorials/text-effects-tutorials/light-bulb-text-effect/ >Create a Light Bulb Inspired Text Effect in Photoshop</a></h4>
<p>Layer styles are a powerful and time saving feature that can help you apply amazing effects to your designs. In this tutorial we will use layer styles to create a light bulb inspired text effect in Photoshop. Let&#8217;s get started!</p>
<p><a href= http://psd.tutsplus.com/tutorials/text-effects-tutorials/light-bulb-text-effect/ >Visit Article</a></p>
</li>
<hr />
<h2>Nettuts+ €” Web Development Tutorials</h2>
<li class= clear >
<div>
		<img src= http://d2o0t5hpnwv4c1.cloudfront.net/1155_grunt/preview.jpg  alt= Meet Grunt: The Build Tool for JavaScript  width= 200  height= 200  />
	</div>
<h4><a href= http://net.tutsplus.com/tutorials/javascript-ajax/meeting-grunt-the-build-tool-for-javascript/ >Meet Grunt: The Build Tool for JavaScript</a></h4>
<p>If you&#8217;re working on a large project, you&#8217;ll no doubt have a build script or a bunch of task scripts to help with some of the repetitive parts of the process. You might use Ant or Rake, depending on the language the project is written in.</p>
<p><a href= http://net.tutsplus.com/tutorials/javascript-ajax/meeting-grunt-the-build-tool-for-javascript/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2o0t5hpnwv4c1.cloudfront.net/2027_borders/images/css-borders-preview.jpg  alt= CSS Refreshers: Borders  width= 200  height= 200  />
	</div>
<h4><a href= http://net.tutsplus.com/tutorials/html-css-techniques/css-refreshers-borders/ >CSS Refreshers: Borders</a></h4>
<p>Sure, we&rsquo;re all familiar with borders. Is there anything new that could possibly be introduced? Well, I bet there&rsquo;s quite a few things in this article that you never knew about!</p>
<p><a href= http://net.tutsplus.com/tutorials/html-css-techniques/css-refreshers-borders/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2o0t5hpnwv4c1.cloudfront.net/2031_stFileCreation/lightning_file_creation_in_sublime_text_2.jpg  alt= Lightning Fast Folder and File Creation in Sublime Text 2  width= 200  height= 200  />
	</div>
<h4><a href= http://net.tutsplus.com/tutorials/tools-and-tips/lightning-fast-folder-and-file-creation-in-sublime-text-2/ >Lightning Fast Folder and File Creation in Sublime Text 2</a></h4>
<p>I&#8217;m frequently asked about how I&#8217;m able to create new directory structures and files so quickly in Sublime Text 2. Well the answer is that this functionality is not offered natively; instead, I use a helpful <a href= https://github.com/xobb1t/Sublime-AdvancedNewFile  onclick= javascript:_gaq.push([ _trackEvent , outbound-article , github.com ]); >plugin</a>. I&#8217;ll demonstrate it in this video.<br />
<span id= more-24774 ></span></p>
<p><a href= http://net.tutsplus.com/tutorials/tools-and-tips/lightning-fast-folder-and-file-creation-in-sublime-text-2/ >Visit Article</a></p>
</li>
<hr />
<h2>Vectortuts+ €” Illustrator Tutorials</h2>
<li class= clear >
<div>
		<img src= http://dsmy2muqb7t4m.cloudfront.net/qt/2012_QT/qt_49_character_poses/preview.jpg  alt= Quick Tip: The Line of Action, Make Your Character Poses More Dynamic!  width= 200  height= 200  />
	</div>
<h4><a href= http://vector.tutsplus.com/tutorials/illustration/quick-tip-the-line-of-action-make-your-character-poses-more-dynamic/ >Quick Tip: The Line of Action, Make Your Character Poses More Dynamic!</a></h4>
<p>The line of action is a key ingredient to making your character&#8217;s poses look more dynamic. In this guide, we will explore what the line of action is and how it can be used to make your character poses come alive.</p>
<p><a href= http://vector.tutsplus.com/tutorials/illustration/quick-tip-the-line-of-action-make-your-character-poses-more-dynamic/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://dsmy2muqb7t4m.cloudfront.net/articles/2012/article-free-vector-grunge/preview.jpg  alt= 200+ Free Vector Grunge Graphics for Designers and Illustrators  width= 200  height= 200  />
	</div>
<h4><a href= http://vector.tutsplus.com/articles/web-roundups/free-vector-grunge-graphics/ >Free Vector Grunge Graphics for Designers and Illustrators</a></h4>
<p>If you&#8217;re looking for free vector grunge graphics, such as distressed backgrounds, worn textures, dirty paint splatter, and more, then you&#8217;ve found a compilation worth downloading. We&#8217;ve collected an assortment of vector grunge illustrations, free vector grunge textures, and wickedly worn graphics available for free download. Jump in and grab these free grunge vectors now and start making grunge vector art for your next project.<span id= more-5541 ></span></p>
<p><a href= http://vector.tutsplus.com/articles/web-roundups/free-vector-grunge-graphics/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://dsmy2muqb7t4m.cloudfront.net/tuts/000-2012/504-retro-flyer/preview.jpg  alt= Vintage Vector Design Workflow: Creating a Retro Flyer Design  width= 200  height= 200  />
	</div>
<h4><a href= http://vector.tutsplus.com/tutorials/designing/retro-flyer-design/ >Vintage Vector Design Workflow: Creating a Retro Flyer Design</a></h4>
<p>This tutorial will cover the process of creating a vintage inspired retro flyer design. There are four main areas of concentration to achieve this look and feel: color, type, character and texture. We&#8217;ll review a complete vintage vector design workflow to create this retro flyer design. Let&#8217;s get started.</p>
<p><a href= http://vector.tutsplus.com/tutorials/designing/retro-flyer-design/ >Visit Article</a></p>
</li>
<hr />
<h2>Webdesigntuts+ €” Web Design Tutorials</h2>
<li class= clear >
<div>
		<img src= http://d3pr5r64n04s3o.cloudfront.net/tuts/318_adi_QT/preview_actions.png  alt= Quick Tip: Speed Up Your Workflow With Photoshop Actions  width= 200  height= 200  />
	</div>
<h4><a href= http://webdesign.tutsplus.com/tutorials/workflow-tutorials/quick-tip-speed-up-your-workflow-with-photoshop-actions/ >Quick Tip: Speed Up Your Workflow With Photoshop Actions</a></h4>
<p>Avoiding repetitive tasks is always going to speed up your workflow. In today&#8217;s Quick Tip we&#8217;ll do just that, by utilizing Photoshop&#8217;s actions panel and combining it with hotkeys. Watch this quick screencast and I <em>guarantee</em> you&#8217;ll save tons of time next time you&#8217;re designing!</p>
<p><a href= http://webdesign.tutsplus.com/tutorials/workflow-tutorials/quick-tip-speed-up-your-workflow-with-photoshop-actions/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d3pr5r64n04s3o.cloudfront.net/tuts/320_skeleton/preview.png  alt= Building a Responsive Layout With Skeleton: Finishing Off  width= 200  height= 200  />
	</div>
<h4><a href= http://webdesign.tutsplus.com/tutorials/complete-websites/building-a-responsive-layout-with-skeleton-finishing-off/ >Building a Responsive Layout With Skeleton: Finishing Off</a></h4>
<p>During previous screencasts in this series we&#8217;ve covered a lot of ground, building our responsive (or adaptive) layout with the Skeleton boilerplate. It&#8217;s now time to finish all the final details; arguably the most time-consuming part of any website build!</p>
<p><a href= http://webdesign.tutsplus.com/tutorials/complete-websites/building-a-responsive-layout-with-skeleton-finishing-off/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d3pr5r64n04s3o.cloudfront.net/articles/074_ps_cs6/preview.png  alt= Adobe Photoshop CS6: Improvements for Web and UI Designers  width= 200  height= 200  />
	</div>
<h4><a href= http://webdesign.tutsplus.com/articles/workflow/adobe-photoshop-cs6-improvements-for-web-and-ui-designers/ >Adobe Photoshop CS6: Improvements for Web and UI Designers</a></h4>
<p>Photoshop CS6 has been hailed as a huge improvement for web and UI designers. Im going to share with you some of the features that Photoshop CS6 Beta has to offer and demonstrate how they can help you in your web or UI design workflow.</p>
<p><a href= http://webdesign.tutsplus.com/articles/workflow/adobe-photoshop-cs6-improvements-for-web-and-ui-designers/ >Visit Article</a></p>
</li>
<hr />
<h2>Phototuts+ €” Photography Tutorials</h2>
<li class= clear >
<div>
		<img src= http://d2f29brjr0xbt3.cloudfront.net/868_realestatephoto/preview.jpg  alt= A How-To Guide to Getting Started in Real Estate Photography  width= 200  height= 200  />
	</div>
<h4><a href= http://photo.tutsplus.com/articles/shooting-articles/a-how-to-guide-to-getting-started-in-real-estate-photography/ >A How-To Guide to Getting Started in Real Estate Photography</a></h4>
<p>Real estate is one of the world&#8217;s most competitive industries. Dominated by ambitious agents looking for the next big sale, selling real estate is all about setting yourself apart from the competition. What better way to catch a buyer&#8217;s eye than the perfect photo of the perfect home? In today&#8217;s article, we&#8217;re taking a look at the exciting world of real estate photography.<span id= more-8947 ></span></p>
<p><a href= http://photo.tutsplus.com/articles/shooting-articles/a-how-to-guide-to-getting-started-in-real-estate-photography/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2f29brjr0xbt3.cloudfront.net/878_graycard/preview.jpg  alt= A Simple Solution to White Balance and Exposure: The 18% Gray Card  width= 200  height= 200  />
	</div>
<h4><a href= http://photo.tutsplus.com/articles/hardware/a-simple-solution-to-white-balance-and-exposure-the-18-gray-card/ >A Simple Solution to White Balance and Exposure: The 18% Gray Card</a></h4>
<p>An 18% gray card is a handy accessory that every serious photographer should keep in their bag. It doesn&#8217;t cost much and it barely takes up any space. If you encounter a situation where you have mixed lights, this unassuming piece of plastic helps you determine the white balance. It can also be used to determine the correct exposure.<span id= more-9019 ></span></p>
<p><a href= http://photo.tutsplus.com/articles/hardware/a-simple-solution-to-white-balance-and-exposure-the-18-gray-card/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2f29brjr0xbt3.cloudfront.net/875_framematte/preview.jpg  alt= An Expert Guide to Matting and Framing a Photo  width= 200  height= 200  />
	</div>
<h4><a href= http://photo.tutsplus.com/tutorials/post-processing/an-expert-guide-to-matting-and-framing-a-photo/ >An Expert Guide to Matting and Framing a Photo</a></h4>
<p>The final printed image is the culmination of my journey in creating a piece of artwork that represents my view of the world around me. As photographers in the digital age we spend far too much time staring at our photographs on our computer screens and very little time holding them in our hands. I still take great pride in every print I produce. There are a myriad of options for printing your work today, from canvas wraps to Metal prints, however for me there is something timeless and classic about a finely Matted and Framed print.<span id= more-9001 ></span></p>
<p><a href= http://photo.tutsplus.com/tutorials/post-processing/an-expert-guide-to-matting-and-framing-a-photo/ >Visit Article</a></p>
</li>
<hr />
<h2>Cgtuts+ €” Computer Graphics Tutorials</h2>
<li class= clear >
<div>
		<img src= http://d2d04grx5ahzvh.cloudfront.net/381_Maya_Voodoo_Doll_Rigging_Pt1/Thumb.jpg  alt= Rigging A Voodoo Doll Character In Maya Using Setup Machine &#038; Face Machine  width= 200  height= 200  />
	</div>
<h4><a href= http://cg.tutsplus.com/tutorials/autodesk-maya/rigging-a-voodoo-doll-character-in-maya-using-setup-machine-face-machine/ >Rigging A Voodoo Doll Character In Maya Using Setup Machine &#038; Face Machine</a></h4>
<p>In this tutorial you€™ll learn how to create a complete character rig for a voodoo doll character in Maya using the Setup Machine and Face Machine plugins from Anzovin studios. You€™ll learn how these plugins can save you valuable time during rigging by allowing you to utilize pre-built body and face rigs which can then be customized to fit you and your character€™s specific needs.</p>
<p><a href= http://cg.tutsplus.com/tutorials/autodesk-maya/rigging-a-voodoo-doll-character-in-maya-using-setup-machine-face-machine/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2d04grx5ahzvh.cloudfront.net/375_C4D_Stylish_Countdown/Thumb.jpg  alt= Creating A Stylish 3D Countdown Animation In Cinema 4D  width= 200  height= 200  />
	</div>
<h4><a href= http://cg.tutsplus.com/tutorials/maxon-cinema-4d/creating-a-stylish-3d-coundown-animation-in-cinema-4d/ >Creating A Stylish 3D Countdown Animation In Cinema 4D</a></h4>
<p>In this tutorial we€™re going to create a smooth, stylish countdown animation. You can use words, letters, logos or whatever you want to make this type of animation. As you can see it€™s easy to set up and looks very stylish and attractive.</p>
<p><a href= http://cg.tutsplus.com/tutorials/maxon-cinema-4d/creating-a-stylish-3d-coundown-animation-in-cinema-4d/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2d04grx5ahzvh.cloudfront.net/374_ZBrush_MicroBionic_War/Thumb.jpg  alt= Create a 3D Micro Robotic Insect in ZBrush  width= 200  height= 200  />
	</div>
<h4><a href= http://cg.tutsplus.com/tutorials/pixologic-zbrush/create-a-3d-micro-robotic-insect-in-zbrush/ >Create a 3D Micro Robotic Insect in ZBrush</a></h4>
<p>This week, Cgtuts+ has teamed up with our sister site <a href= http://psd.tutsplus.com/  >Psdtuts+</a> to bring you this amazing two part, in-depth tutorial from Nacho Riesco. In this tutorial we are going to sculpt a Micro Bionic Insect with chemical war purposes using simple hard-surface modelling techniques with the Clipping Brush, Masking and much more. Head over to <a href= http://psd.tutsplus.com/?p=16555  >Psdtuts+</a> for the conclusion of this project where we&#8217;ll composite our render passes from Zbrush, and create the final image in Photoshop!<span id= more-14543 ></span></p>
<p><a href= http://cg.tutsplus.com/tutorials/pixologic-zbrush/create-a-3d-micro-robotic-insect-in-zbrush/ >Visit Article</a></p>
</li>
<hr />
<h2>Aetuts+ €” After Effects Tutorials</h2>
<li class= clear >
<div>
		<img src= http://ae.tutsplus.com/wp-content/uploads/2012/04/dimmerthumb1.jpg  alt= Make Your Own Durable Light Dimmers For Less Than $30  width= 200  height= 200  />
	</div>
<h4><a href= http://ae.tutsplus.com/tutorials/production/make-your-own-durable-light-dimmers-for-less-than-30/ >Make Your Own Durable Light Dimmers For Less Than $30</a></h4>
<p>In today&#8217;s tutorial we&#8217;re going to take you step by step through everything you need to know to build your own rugged light dimmers. We use these exact dimmers on all our studio and on location shoots. Besides being extremely durable, these little devices provide a wider range of lighting options and are surprisingly valuable when you have to light a scene in a tight location.</p>
<p><a href= http://ae.tutsplus.com/tutorials/production/make-your-own-durable-light-dimmers-for-less-than-30/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d3gphd0pfuxn95.cloudfront.net/725_psdae/preview.png  alt= Is Working On Stills Easier in After Effects or Photoshop?  width= 200  height= 200  />
	</div>
<h4><a href= http://ae.tutsplus.com/articles/in-depth/is-working-on-stills-easier-in-after-effects-or-photoshop/ >Is Working On Stills Easier in After Effects or Photoshop?</a></h4>
<p>We always tend to go to Photoshop for working with still images, but today I&#8217;d like to bring up a few thoughts about why working in After Effects might be a better solution for your next project.</p>
<p><a href= http://ae.tutsplus.com/articles/in-depth/is-working-on-stills-easier-in-after-effects-or-photoshop/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d3gphd0pfuxn95.cloudfront.net/734_skate/200x200.png  alt= Show A Motion Path With The StroMotion Effect  width= 200  height= 200  />
	</div>
<h4><a href= http://ae.tutsplus.com/tutorials/vfx/show-a-motion-path-with-the-stromotion-effect/ >Show A Motion Path With The StroMotion Effect</a></h4>
<p>In this tutorial we will track freeze frames into a hand-held scene utilizing The Foundry&#8217;s CameraTracker to achieve an effect that is often referred to as &#8220;StroMotion&#8221;. We&#8217;ll be talking about different methods of how to remove the subject from the background and how to line everything up. Enjoy! <img src= http://ae.tutsplus.com/wp-includes/images/smilies/icon_smile.gif  alt= :)  class= wp-smiley  /> </p>
<p><a href= http://ae.tutsplus.com/tutorials/vfx/show-a-motion-path-with-the-stromotion-effect/ >Visit Article</a></p>
</li>
<hr />
<h2>Audiotuts+ €” Audio &#038; Production Tutorials</h2>
<li class= clear >
<div>
		<img src= http://d3vvl31cy8gagb.cloudfront.net/740_loops/preview.jpg  alt= 30+ Sites That Serve Up Great Loops and Samples  width= 200  height= 200  />
	</div>
<h4><a href= http://audio.tutsplus.com/articles/general/30-sites-that-serve-up-great-loops-and-samples/ >Sites That Serve Up Great Loops and Samples</a></h4>
<p>Loops can form the foundation of a track, and are useful for quickly putting some ideas together when sketching out an arrangement. Samples provide us with sounds and colors to create our music with. But where can you download great loops and samples? Here are 30+ great places to start.<br />
<span id= more-13963 ></span><br />Every music producer worth his salt is in the process of building up a useful collection of useable sounds.</p>
<p><a href= http://audio.tutsplus.com/articles/general/30-sites-that-serve-up-great-loops-and-samples/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d3vvl31cy8gagb.cloudfront.net/qt_178_morphing/preview.jpg  alt= Morphing in Pro Tools  width= 200  height= 200  />
	</div>
<h4><a href= http://audio.tutsplus.com/tutorials/production/morphing-in-pro-tools/ >Morphing in Pro Tools</a></h4>
<p>We&#8217;ve all seen how you can morph one face into another in the graphical world. In this screencast Rishabh Rajan shows us how to achieve the same thing with audio using Pro Tools.</p>
<p><a href= http://audio.tutsplus.com/tutorials/production/morphing-in-pro-tools/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d3vvl31cy8gagb.cloudfront.net/528_3drouting/preview.jpg  alt= 3D Mixing Part 7: Mastering, The Final Chapter (Part 1)  width= 200  height= 200  />
	</div>
<h4><a href= http://audio.tutsplus.com/tutorials/mixing-mastering/3d-mixing-part-7-mastering-the-final-chapter-part-1/ >D Mixing Part 7: Mastering, The Final Chapter (Part 1)</a></h4>
<p>Although this is a series on mixing, it feels incomplete not to get into at least a brief discussion on master bus options and to discuss what exactly goes on when you print all your hard work to a single and final stereo file.  Due to the depth of this topic, I am splitting it into two parts.</p>
<p><a href= http://audio.tutsplus.com/tutorials/mixing-mastering/3d-mixing-part-7-mastering-the-final-chapter-part-1/ >Visit Article</a></p>
</li>
<hr />
<h2>Activetuts+ €” Flash, Flex &#038; ActionScript Tutorials</h2>
<li class= clear >
<div>
		<img src= http://d2fhka9tf2vaj2.cloudfront.net/articles/093_introToDart/Intro_to_Dart.png  alt= What Is Dart, and Why Should You Care?  width= 200  height= 200  />
	</div>
<h4><a href= http://active.tutsplus.com/articles/explanatory/what-is-dart-and-why-should-you-care/ >What Is Dart, and Why Should You Care?</a></h4>
<p>In this tutorial, I&#8217;ll introduce you to Google&#8217;s new web programming language, Dart, and explain why you should like it and what you need to know about it.  Learn about this new language and form some opinions about it &#8211; will it really replace JavaScript?</p>
<p><a href= http://active.tutsplus.com/articles/explanatory/what-is-dart-and-why-should-you-care/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2fhka9tf2vaj2.cloudfront.net/tuts/430_externalInterface/FlashJSHTML5.png  alt= Accessing the Same Saved Data With Separate Flash and JavaScript Apps  width= 200  height= 200  />
	</div>
<h4><a href= http://active.tutsplus.com/tutorials/actionscript/accessing-the-same-saved-data-with-separate-flash-and-javascript-apps/ >Accessing the Same Saved Data With Separate Flash and JavaScript Apps</a></h4>
<p>In this tutorial I will show you how to access the same saved data in separate Flash and JavaScript apps, by storing it in HTML5 LocalStorage and using ExternalInterface to reach it with AS3. We will create the same app in both JavaScript and Flash to demonstrate that it is platform agnostic.</p>
<p><a href= http://active.tutsplus.com/tutorials/actionscript/accessing-the-same-saved-data-with-separate-flash-and-javascript-apps/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://d2fhka9tf2vaj2.cloudfront.net/tuts/435_impactJS/ImpactJS-JesseFreman-Series.png  alt= An ImpactJS Overview: Introduction  width= 200  height= 200  />
	</div>
<h4><a href= http://active.tutsplus.com/tutorials/games/an-impactjs-overview-introduction/ >An ImpactJS Overview: Introduction</a></h4>
<p>Impact is an incredibly powerful HTML5 game framework which takes advantage of modern browser&#8217;s canvas element and can also run on mobile or be compile into a native iOS app. In this video I will go over the framework, how to set up a project, some background into how to create classes in it and finally go over the core classes that make up the framework. This is a high level overview which will give you a general sense for how things work.</p>
<p><a href= http://active.tutsplus.com/tutorials/games/an-impactjs-overview-introduction/ >Visit Article</a></p>
</li>
<hr />
<h2>Wptuts+ €” WordPress Tutorials</h2>
<li class= clear >
<div>
		<img src= http://wptutsplus.s3.amazonaws.com/241_Mini_Guide_to_Contact_Form_7/preview-image.jpg  alt= Mini Guide to Contact Form 7  width= 200  height= 200  />
	</div>
<h4><a href= http://wp.tutsplus.com/tutorials/plugins/mini-guide-to-contact-form-7/ >Mini Guide to Contact Form 7</a></h4>
<p>Usually a website needs a contact form to communicate with the site owner. One of our favorites is Contact Form 7. Let&#8217;s see what it can do!<span id= more-25086 ></span></p>
<p><a href= http://wp.tutsplus.com/tutorials/plugins/mini-guide-to-contact-form-7/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://wptutsplus.s3.amazonaws.com/243_Custom_Post_Type_Helper_Class/thumbnail.jpg  alt= Custom Post Type Helper Class  width= 200  height= 200  />
	</div>
<h4><a href= http://wp.tutsplus.com/tutorials/creative-coding/custom-post-type-helper-class/ >Custom Post Type Helper Class</a></h4>
<p>For a lot of WordPress projects these days we use custom post types. The WordPress development team created some handy methods to integrate them into your projects. But when you use custom post types, taxonomies and meta boxes frequently, it&#8217;s quite probable that you&#8217;re going to repeat yourself. That&#8217;s why we are going to use the power of these WordPress functions to build a more powerful class, which we can use to quickly register post types, taxonomies and meta boxes.<span id= more-25104 ></span></p>
<p><a href= http://wp.tutsplus.com/tutorials/creative-coding/custom-post-type-helper-class/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= http://wptutsplus.s3.amazonaws.com/258_Using_WordPress_as_an_Intranet/WPasIntranet.jpg  alt= Using WordPress as an Intranet  width= 200  height= 200  />
	</div>
<h4><a href= http://wp.tutsplus.com/tutorials/business/using-wordpress-as-an-intranet/ >Using WordPress as an Intranet</a></h4>
<p>When we talk about WordPress we usually associate it with either being a blogging platform or just another content management system, but what about as an Intranet? This tutorial will show you how you can turn your basic installation of WordPress into a robust Intranet for your business.<span id= more-25260 ></span></p>
<p><a href= http://wp.tutsplus.com/tutorials/business/using-wordpress-as-an-intranet/ >Visit Article</a></p>
</li>
<hr />
<h2>Mobiletuts+ €” Mobile Development Tutorials</h2>
<li class= clear >
<div>
		<img src= http://d339vfjsz5zott.cloudfront.net/iOS-SDK_Creating-A-Carousel/carousel.jpg  alt= Create an Awesome Carousel, Version 2.0  width= 200  height= 200  />
	</div>
<h4><a href= http://mobile.tutsplus.com/tutorials/iphone/create-an-awesome-carousel-version-2-0/ >Create an Awesome Carousel, Version 2.0</a></h4>
<p>Engage your users with stunning carousels!  We&#8217;ll look at how easy and clean it can be to implement scrollable, interactive carousels in your iOS applications. With high configurability, you can have 3D, flat, rotating, and endless scrolling arrays for data, images, and buttons.<br />
<span id= more-10476 ></span></p>
<p><a href= http://mobile.tutsplus.com/tutorials/iphone/create-an-awesome-carousel-version-2-0/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= https://d339vfjsz5zott.cloudfront.net/Corona-SDK_Alphabet/preview.png  alt= Corona SDK: Create an Alphabet Soup Game  width= 200  height= 200  />
	</div>
<h4><a href= http://mobile.tutsplus.com/tutorials/corona/corona-sdk-create-an-alphabet-soup-game/ >Corona SDK: Create an Alphabet Soup Game</a></h4>
<p>In this tutorial series, you will learn how to create a minimalistic Alphabet Soup game. The goal of this game is to allow the player to pick words out from a jumbled set of letters. Read on!</p>
<p><a href= http://mobile.tutsplus.com/tutorials/corona/corona-sdk-create-an-alphabet-soup-game/ >Visit Article</a></p>
</li>
<li class= clear >
<div>
		<img src= https://d339vfjsz5zott.cloudfront.net/iOS-Web-Services/web-services.png  alt= iOS Quick Tip: Interacting with Web Services  width= 200  height= 200  />
	</div>
<h4><a href= http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-interacting-with-web-services/ >iOS Quick Tip: Interacting with Web Services</a></h4>
<p>At some point in your iOS development career, you will have the need to interact with a web service from within your app. You may need to access remote data, parse a social network feed, or even download some assets into your application. This quick tip will teach you to do so without using third party libraries!<br />
<span id= more-10278 ></span></p>
<p><a href= http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-interacting-with-web-services/ >Visit Article</a></p>
</li>
</ul>
<p><a href= http://feedads.g.doubleclick.net/~a/5u6XODjG-B4_fGJP0dJFhGm_0b4/0/da ><img src= http://feedads.g.doubleclick.net/~a/5u6XODjG-B4_fGJP0dJFhGm_0b4/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/5u6XODjG-B4_fGJP0dJFhGm_0b4/1/da ><img src= http://feedads.g.doubleclick.net/~a/5u6XODjG-B4_fGJP0dJFhGm_0b4/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=5cFGV4E7a_U:gVAp0RQoFlU:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=5cFGV4E7a_U:gVAp0RQoFlU:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=5cFGV4E7a_U:gVAp0RQoFlU:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=5cFGV4E7a_U:gVAp0RQoFlU:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=5cFGV4E7a_U:gVAp0RQoFlU:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=5cFGV4E7a_U:gVAp0RQoFlU:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=5cFGV4E7a_U:gVAp0RQoFlU:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=5cFGV4E7a_U:gVAp0RQoFlU:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/5cFGV4E7a_U  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-07 22:51:44</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Reshaping Our Perception of Success]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=860</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=860</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24908&c=2119696100  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24908&c=2119696100  border= 0  alt=   /></a><p>Over the course of these last two weeks, I had the pleasure of attending an Envato meetup/conference in Malaysia. As you might expect, Envato is composed of ridiculously smart and talented folks€¦folks so smart that it quickly becomes intimidating!</p>
<p>But I&rsquo;m not here to talk about the conference specifically; instead, I&rsquo;d prefer to ramble a bit on one of my largest takeaways from the event.</p>
<p><span id= more-24908 ></span></p>
<hr />
<h2>The Old-Fashioned &#8220;Path&#8221;</h2>
<div class= tutorial_image >
   <img src= http://d2o0t5hpnwv4c1.cloudfront.net/2034_success/advancement-1.jpg  alt= The Path  />
</div>
<p>One day during the conference, I had a chat with Envato&rsquo;s current (temporary) lead development manager, Pete, about the traditional concept of advancement in a company. In many ways, we&rsquo;re designed/brainwashed from an early age to follow a very specific path:</p>
<ul>
<li>Begin at the bottom.</li>
<li>Slowly work your way up to your target position (meaning the job in which you are most content and fullfilled).</li>
<li>Finally, despite your instincts advising you otherwise, you disregard your current contentment, and instead continue once again up the stairs€¦ to management.</li>
</ul>
<p>That&rsquo;s a good thing, right? Well, in our industry, specifically, maybe not. </p>
<blockquote><p>Management can be a bit of a scary word. It indicates Excel, not code. It indicates&#8230; management, not development.</p>
</blockquote>
<blockquote class= pullquote >
<p>
Our life-long training tells us that this is what&rsquo;s supposed to happen.
</p>
</blockquote>
<p>But, nonetheless, it&rsquo;s still a higher level (hopefully higher paying) job. Our life-long training tells us that this is what&rsquo;s supposed to happen, if we desire to be successful. You&rsquo;ve worked hard; now you get to manage others (and maybe drink scotch). This is the path.</p>
<p>For creatives, though, does this sort of role make us happy?</p>
<ul>
<li> Is this what kept us up late at night learning how to code?
<li>Are we selling our souls (to be dramatic) for slightly more money?
<li>Are we addicted to some silly notion of control or power or respect?
</ul>
<p>Sure, we may have a bit more input into the direction of the business, but does it make us happier? For the last year or so, I&rsquo;ve struggled with this very thing. I adore my current job: I&rsquo;m able to help shape the future of education in the creative fields (more on that later this year), and spend all of my spare/free time learning how to be a more efficient developer. What could be better than that?</p>
<p>Still, though, that lingering feeling always rested in the back of my mind: I&rsquo;m only &ldquo;advancing&rdquo; in the world if my job title/rank increases sporadically. I had (and have) no desire to change my current involvement/role in the company (Envato), but, nevertheless, felt that I <em>should</em> reach for these more traditional managerial roles.</p>
<blockquote class= pullquote >
<p>
This old-fashioned notion of advancement is a silly metric for success.
</p>
</blockquote>
<h3>The Lesson</h3>
<p>Pete taught me that this old-fashioned notion of advancement is a silly metric for success. Instead, we have to reshape our perception of what both success and fulfillment are. Remember when I noted that Pete was the development manager at Envato? Well, technically, at his own choosing, he&rsquo;s the <em>temporary</em> manager, while we search for a new development manager. Despite the fact that he&rsquo;s certainly qualified for the job, he doesn&rsquo;t want it &#8211; which I find incredibly admirable. Instead, his skills/desires rest firmly in things like software architecture. In his own words, that is where he is able to contribute most effectively to the company. So, a bit oddly, perhaps, he is currently in the position of finding and hiring his future manager. </p>
<hr />
<h2>Closing Thoughts</h2>
<p>It&rsquo;s interesting how the older I get, the more and more I come back to this one word: &ldquo;contentment.&rdquo; It&rsquo;s not about job titles, or vanity, or even money (to some extent); it&rsquo;s simply about contentment. Do what you love, and forget those old-fashioned job titles and notions of success. Or&#8230; </p>
<blockquote>
<p>
       Figure out where you&#8217;re most effective in your company, and do&#8230;that. Period.
  </p>
</blockquote>
<p><a href= http://feedads.g.doubleclick.net/~a/AyYE5cy09WJ8vNihS1huQpJP6Vc/0/da ><img src= http://feedads.g.doubleclick.net/~a/AyYE5cy09WJ8vNihS1huQpJP6Vc/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/AyYE5cy09WJ8vNihS1huQpJP6Vc/1/da ><img src= http://feedads.g.doubleclick.net/~a/AyYE5cy09WJ8vNihS1huQpJP6Vc/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=gUx_DWfrzvk:QIbKa9Euslc:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gUx_DWfrzvk:QIbKa9Euslc:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=gUx_DWfrzvk:QIbKa9Euslc:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gUx_DWfrzvk:QIbKa9Euslc:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=gUx_DWfrzvk:QIbKa9Euslc:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gUx_DWfrzvk:QIbKa9Euslc:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=gUx_DWfrzvk:QIbKa9Euslc:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=gUx_DWfrzvk:QIbKa9Euslc:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/gUx_DWfrzvk  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-05 22:51:39</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[How to Track Your Time and Increase Your Web Design Income]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=859</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=859</guid>
			  <description><![CDATA[<p><a href= http://rss.buysellads.com/click.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12106&c=1543549637  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12106&c=1543549637  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264758  target= _blank >Advertise here with BSA</a></p><br /><p>By Conrad Feagin</p>
<p>Let&#8217;s say you&#8217;re getting to the point where you&#8217;re a whiz at quickly building quality websites. That€™s the fun part of web design.</p>
<p>However, if you want to increase your income, you have to look at web design as a business. And, pricing is an important part of that business.</p>
<p>There&#8217;s no easy answer for how much you should charge for web design projects, but the first factor you have to consider is how long it usually takes you to complete a website.</p>
<p>Do you even know?</p>
<p>Unless you actually log your time, you€™re simply guessing.</p>
<p>When you sit down to work on a project, look at the clock and mark down the time. Log out when you break for lunch. Don&#8217;t forget to log back in when you begin work again. That sounds pretty simple, right?</p>
<p>Of course, you&#8217;re probably juggling more than one project at a time.</p>
<p>You may work on one project for a short while, then realize you need the client&#8217;s logo and other information to continue. You send a reminder e-mail to that client, then turn your attention to another project.</p>
<p>Then, you&#8217;re interrupted by a call from yet another client and spend some time answering his questions.</p>
<p>Writing down that you worked three hours before lunch isn&#8217;t helpful.</p>
<p>You must keep track of how much time you spent on each of the various projects. Yes, that makes it a little trickier.</p>
<p>If you&#8217;re getting a lot done, you don&#8217;t want to break your creative flow to log transitions from one project to another. If you&#8217;re on a tight deadline, the last thing you want to do is add another task to your day.</p>
<p>Why bother?</p>
<p>Well, check this out:</p>
<p>Getting $500 for one web design project may sound like good money. If it took you 5 hours to complete the project, you grossed $100 per hour, but&#8230;</p>
<p>If it took you 10 hours, you made $50 per hour&#8230;</p>
<p>If it took you 20 hours, you made $25 per hour&#8230;</p>
<p>If you misjudged how complicated a project would be, how much time you&#8217;d have to spend on the phone with the client or if they wanted to make more changes than you planned for, you might end up putting 70 hours into the project &#8211; and you wouldn&#8217;t have even made minimum wage.</p>
<p>Now that $500 doesn&#8217;t seem so sweet. That&#8217;s why you must keep track of your time.</p>
<p>Once you have completed a time log for your web design project, you&#8217;ll be able to see how much time it really took you to complete the project and how much you&#8217;re making per hour.</p>
<p>Then, you can use the data to decide how much to charge on your next web design project.</p>
<p>Right now, take the first step to having a profitable business as a web designer: keep track of your time.</p>
<h3>Here are 3 free tools you can use to start tracking your time now:</h3>
<p>1. <a href=€ťhttps://www.toggl.com/€ť>Toggl</a> is time tracking software you can use anywhere &#8211; on your computer or phone. They have a free plan and it takes less than a minute to sign up and start using it.</p>
<p>2. <a href=€ťhttp://www.getharvest.com/€ť>Harvest</a> is very similar to Toggl. It also has a quick signup, mobile version and a free plan. Although, their free plan limits the projects and clients you can track.</p>
<p>3. <a href=€ťhttp://colorhat.com€ť>Colorhat</a> also has a free option and it allows you to track your time, manage projects and send invoices.</p>
<p>Of course, you could always use something as simple as a pen and paper. The point is that you know how much time you€™re spending so you can price your projects correctly.</p>
<p style= margin-bottom:-50px; >To learn more about setting up and running a profitable web design business, like pricing your services, managing your time and getting top-notch clients, sign up here:</p>
<form name= form1  method= post  action= https://www.mcssl.com/app/contactsave.asp >
<input name= merchantid  type= hidden  id= merchantid  value= 57694 >
<input name= ARThankyouURL  type= hidden  id= ARThankyouURL  value= http://www.learnwebdevelopment.com/cmd.php?af=1454287 >
<input name= copyarresponse  type= hidden  id= copyarresponse  value= 0 >
<input name= defaultar  type= hidden  id= defaultar  value= 671493 >
<input name= allowmulti  type= hidden  id= allowmulti  value= 0 >
<input name= visiblefields  type= hidden  id= visiblefields  value= Name,Email1 >
<input name= requiredfields  type= hidden  id= requiredfields  value= Name,Email1 >
<table>
<tr>Â 
<td>Name</td>
<td>
<input name= Name  type= text  size= 40 ></td>
</tr>
<tr>
<td>Email</td>
<td>
<input name= Email1  type= text  size= 40 ></td>
</tr>
<tr align= center >
<td colspan= 2 >Â <br />
<input type= Submit  name= cmdSubmit  value= Submit > </td>
</tr>
<p>Â </table>
</form>
<br /><p><a href= http://rss.buysellads.com/click.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12106&c=531636727  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12106&c=531636727  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264756  target= _blank >Advertise here with BSA</a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=TzevzKxY174  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6ZaPKfC0lQg:mPIEs3ZEGYU:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:l6gmwiTKsz0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=l6gmwiTKsz0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:qj6IDK7rITs ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=qj6IDK7rITs  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6ZaPKfC0lQg:mPIEs3ZEGYU:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:7Q72WNTAKBA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=7Q72WNTAKBA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6ZaPKfC0lQg:mPIEs3ZEGYU:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:dnMXMwOfBR0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=dnMXMwOfBR0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:D7DqB2pKExk ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6ZaPKfC0lQg:mPIEs3ZEGYU:D7DqB2pKExk  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=6ZaPKfC0lQg:mPIEs3ZEGYU:-BTjWOF_DHI ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=6ZaPKfC0lQg:mPIEs3ZEGYU:-BTjWOF_DHI  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/SpyreStudios/~4/6ZaPKfC0lQg  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-03 22:51:33</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Why Wine and Macbooks Dont Mix¦and How to Handle the Aftermath]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=858</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=858</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=12860&c=207075093  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=12860&c=207075093  border= 0  alt=   /></a><p>
Ready for a revelation? A concept that you&#8217;ve never considered before? Well here it is: never ever, ever pour a glass of wine into your Macbook keyboard. Or, more practically put, be extremely careful when there&#8217;s a drink of any kind near your laptop. If a spill occurs, and you don&#8217;t act quickly enough, you&#8217;ll find yourself staring at a massive bill for a new logic board, hard-drive, battery, and anything in between.
</p>
<p>
Accidents do happen &#8212; so plan on it. What&#8217;s more important is that you learn exactly what to do when these spills inevitably occur.
</p>
<p><span id= more-12860 ></span></p>
July, 2010
<hr />
<h2> <span>Step 1. </span>Don&#8217;t Freeze. Unplug!</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/keyboard.jpg  alt= Macbook Wine Spill  /></div>
<p>Ahhhh! The wife (meaning, you) accidentally spilled wine all over your keyboard. From personal experience, I can assure you that, for some odd reason, your first instinct with a massive computer spill is to freeze for five seconds or so, in shock. Don&#8217;t do this! Luckily Apple laptops are pretty helpful about automatically shutting down to prevent as many issues as possible before they happen. The more recent laptops even have liquid detection&#8230;though I&#8217;m certain that Apple is more interested in voiding your warranty than protecting you. For those uninformed, most laptop warranties do not cover spills. </p>
<p>Nonetheless, don&#8217;t waste a single second. Quickly unplug the computer, and shut it down. </p>
<blockquote>
<p>The walls and carpet may have liquid on them as well, but ignore that. The computer is far more important right now. </p>
</blockquote>
<hr />
<h2><span>Step 2. </span>Flip that Sucka </h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/macBook_spill_turn_over.jpg  alt= Turn the laptop over to let the liquid drain  /></div>
<p>The next step, which should occur within seconds of beginning <em>Step 1</em>, is to flip the laptop upside down, into an L-shape. Gravity will then force as much liquid to drain out of the keyboard as possible. Make sure that you lay it on a towel so that it can soak up the liquid.</p>
<blockquote>
<p>Let gravity do its job. Immediately flip the laptop into an L-shape.</p>
</blockquote>
<hr />
<h2><span>Step 3. </span>Open the Back</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/unscrew.jpg  alt= Unscrew the laptop to reveal the insides  /></div>
<p>Using a tiny screw driver, unscrew the back-side of your laptop. This will, of course, vary, depending upon which model you&#8217;re using. I&#8217;m sure you can figure it out. </p>
<blockquote>
<p>Particularly on Macs, not all of the screws are the same size. Make a note of which screw goes where.</p>
</blockquote>
<hr />
<h2><span>Step 4. </span>Remove the Battery and Hard Drive</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/takeOutBattery.jpg  alt= Remove the Macbook Pro battery  /></div>
<p>Before progressing, ensure your livelihood and touch some metal objects nearby to remove any potential static electricity from your body. </p>
<p>
Needless to say, batteries and liquids &#8212; especially sugary, acidic liquids &#8212; don&#8217;t play nice together. Wherever yours is located on your laptop, remove it as quickly as possible. Next, get the hard drive out as well. We don&#8217;t want to risk any liquid seeping in, and corrupting your file system!
</p>
<blockquote><p>And now that you know how easy it is to remove a hard drive, don&#8217;t ever again pay a person to upgrade your hard drive. It only takes a moment to do yourself. ;)</p>
</blockquote>
<hr />
<h2><span>Step 5. </span>Dry the Insides</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/board.jpg  alt= Clean the insides of the computer after a drink spill  /></div>
<p>
With a paper towel of some sort, begin cleaning the insides of your computer. Depending upon how much liquid was spilled, this may either be a quick or lengthy process. For yours truly, it took around ten minutes to clean everything. </p>
<blockquote>
<p>Some people prefer to use a hair dryer to clean the insides. This one is up to you; however, I&#8217;d encourage you to not do so. Play it safe and use a towel. We don&#8217;t want to risk frying the insides. </p>
</blockquote>
<hr />
<h2><span>Step 6. </span>Rubbing Alcohol and Cotton</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/cotton.jpg  alt= Clean the insides with a cotton swab  /></div>
<p>Next, we need to continue removing as much sugar and acid as possible from the logic board. Otherwise, over time, it can begin to corrode the wiring. Yeah, this isn&#8217;t good! </p>
<p>Using rubbing alcohol and a cotton swab, begin dabbing any stained areas &#8212; but be gentle. If you have access to the backside of your keyboard, clean that area as well. Unfortunately, on the newer Macbook Pro models, it&#8217;s extremely difficult to access this section. With past models, it was quite easy to remove the keyboard entirely, for cleaning purposes. Unfortunately, that&#8217;s no longer the case.  </p>
<blockquote>
<p>Rubbing alcohol will help dissolve any remaining acid or sugar on the logic board.
</p>
</blockquote>
<hr />
<h2><span>Step 7. </span>Leave it Alone</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/battery.jpg  alt= Leave the computer off for 3-5 days after a spill  /></div>
<p>
Anxiety is a dangerous thing. Resist the urge to determine whether or not you&#8217;ve destroyed your laptop, and keep it off for a minimum of 72-120 hours (3-5 days). This will allow any remaining liquid to dry/evaporate first. Make sure that, while its drying, you keep the battery outside of the computer. This is mostly a precaution.  </p>
<blockquote>
<p>Keep the computer off for 3-5 days &#8212; no questions asked. Do not turn it on during this window. </p>
</p>
</blockquote>
<hr />
<h2><span>Step 8. </span>Cross Your Fingers</h2>
<div class= tutorial_image ><img src= http://d2o0t5hpnwv4c1.cloudfront.net/736_wine/crossYourFingers.jpg  alt= Cross your fingers  /></div>
<p>After 72-120 hours, reconnect the battery, screw everything back in, cross your fingers, say a prayer, and turn on the computer. Particularly if you&#8217;re using a newer Macbook Pro (2010+ models), you&#8217;ve done everything you can do. With hope, and more often than not, it&#8217;ll chime, and start-up like a charm. However, if the battery is dead, or the hard drive is corrupted, you&#8217;re next best option is to take it in for official repair. Of course, this will somewhat depend upon how skilled you are, when working under the hood. </p>
<hr />
<h2>About the Author </h2>
<p>Jeffrey Way &#8212; me&#8230;yes, I&#8217;m speaking in third person &#8212; once committed a Cardinal Sin, and caused a massive wine spill into his Macbook Pro. Had he not followed these exact steps, he&#8217;d be forking over another life savings for a new Mac. Luckily, that was not the case. </p>
<p>Thanks for reading. Should the same ever happen to you, I hope this guide will help a bit! </p>
<p><a href= http://feedads.g.doubleclick.net/~a/ljRvNJ-k9lftv5wEFog0SCxYxU8/0/da ><img src= http://feedads.g.doubleclick.net/~a/ljRvNJ-k9lftv5wEFog0SCxYxU8/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/ljRvNJ-k9lftv5wEFog0SCxYxU8/1/da ><img src= http://feedads.g.doubleclick.net/~a/ljRvNJ-k9lftv5wEFog0SCxYxU8/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=2aChkTlJDsA:Nnnp_Zrw68M:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=2aChkTlJDsA:Nnnp_Zrw68M:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=2aChkTlJDsA:Nnnp_Zrw68M:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=2aChkTlJDsA:Nnnp_Zrw68M:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=2aChkTlJDsA:Nnnp_Zrw68M:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=2aChkTlJDsA:Nnnp_Zrw68M:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=2aChkTlJDsA:Nnnp_Zrw68M:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=2aChkTlJDsA:Nnnp_Zrw68M:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/2aChkTlJDsA  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-02 22:51:31</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[Recently in Web Development (April 12 Edition)]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=857</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=857</guid>
			  <description><![CDATA[<a href= http://rss.buysellads.com/click.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24890&c=622864371  target= _blank ><img src= http://rss.buysellads.com/img.php?z=1260013&k=d754f1e9ba63a736ba8ff5ece958f7dd&a=24890&c=622864371  border= 0  alt=   /></a><p>Web development is an industry that&#8217;s in a state of constant flux with technologies and jargon changing and mutating in an endless cycle. Not to mention the sheer deluge of information one has to process everyday.</p>
<p>In this series, published monthly, we&#8217;ll seek to rectify this by bringing you all the important news, announcements, releases and interesting discussions within the web development industry in a concise package. Join me after the jump!</p>
<p><span id= more-24890 ></span></p>
<hr />
<h2 style= clear: both; >News and Releases</h2>
<p>All of the important news in a single place: releases, announcements, companies bickering, security issues and all related hoopla.</p>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1141_riwd9/duel.jpg  width= 250  /></div>
<h3>The Infamous Semi-Colon Debate</h3>
<p>Ahh, JavaScript. I think it has caused more conflict than <em>that</em>Helen. This time around there&#8217;s been a flurry of activity around a single, missing comma. I don&#8217;t want to take you away from the drama so check out the Github discussion below, after grabbing some popcorn.</p>
<p>Personally, if you&#8217;re not CoffeeScript-ing, just add that darn semi-colon and call it a day.</p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/twitter/bootstrap/issues/3057 >Click here for internet drama </a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1141_riwd9/dj.jpg  width= 250  /></div>
<h3>Django Moves to Github, Finally</h3>
<p>Most Pythonistas know Django. For those of you who don&#8217;t, Django is a high level Python framework that helps you out with web development. While Django has had a repo on Github for a long time now, it was in a state of desolation. You&#8217;d often see that the repo only held versions that were a lot behind the curve.</p>
<p>Well, no more of that. Django has finally moved to Github and the repo seems to be active. If you&#8217;re interested, Subversion was what was used to manage Django earlier, since 2005. </p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/django/django >Github repo </a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1130_riwd8/st2.png  width= 250  /></div>
<h3>Meteor, a New Way to Build Apps</h3>
<p>Tired of the current frameworks and technologies, a group of devs has created a full stack, JavaScript only framework.</p>
<p>Meteor is a set of new technologies for building top-quality web apps in a fraction of the time, whether you&#8217;re an expert developer or just getting started. I&#8217;m sure people are already tired of reading about JavaScript and the sheer number of frameworks sprouting out each day but this is really worth a look.</p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= http://www.meteor.com/ >Read more</a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1037_riwd3/cloud.jpg  width= 250  /></div>
<h3>SPDY Gains More Traction With Firefox Beta</h3>
<p>SPDY, developed by Google, is a networking protocol aimed at improving web page load times as well as web security. </p>
<p>As with anything web related, it takes eons to get anything standardized and browsers have already started implementing experimental versions of the technology. The latest Firefox beta adds support for the protocol, switching it on by default. It&#8217;s not the only browser to do &#8212; Chrome already includes support for SPDY while Opera does the same with its preview of version 12.</p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= http://www.mozilla.org/en-US/firefox/13.0beta/releasenotes/ >Release Notes </a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1002_riwd1/msgl.jpg  width= 250  /></div>
<h3>Microsoft Announces the Metro jQuery Mobile Theme</h3>
<p>Microsoft, in order to increase awareness of its spectacularly clean Metro interface, has open sourced a Metro themed design for jQuery mobile. The theme includes a large number of Metro themed widgets and interactions and seems to work really well.</p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= http://blogs.msdn.com/b/interoperability/archive/2012/04/26/more-news-from-ms-open-tech-announcing-the-open-source-metro-style-theme.aspx >Read more</a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1037_riwd3/ff.jpg  width= 250  /></div>
<h3>Firefox is Now At Version 12</h3>
<p>Another month, another Firefox update. To be fair, the updates are now rather substantial this time around though.</p>
<p>This version introduces a ton of developer tools and improvements along with a far more streamlined update process. The list of developer related updates, the ones we really care about, makes for a rather interesting read so make sure to hit the link below.</p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= http://hacks.mozilla.org/2012/02/aurora-12-is-out-improvements-and-updated-developer-tools/ >Read more </a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1096_riwd6/cf.png  width= 250  /></div>
<h3>CoffeeScript, Now With JavaScript&#8217;s Strict Mode, Updates to Version 1.3</h3>
<p>Developers either love or hate CoffeeScript. I personally love it which is why you&#8217;re seeing this here. The latest version enforces the strict more at compile time helping you weed out those annoying, niggling issues.</p>
<p>Version 1.3 also brings you improvements to the REPL as well as a bunch of tweaks and improvements.</p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= http://coffeescript.org/#changelog >Change log </a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1002_riwd1/rails.png  width= 250  /></div>
<h3>Rails Updates in Light of Recent Security Issues</h3>
<p>With the havoc caused by the mass assignment issue last month, the Rails team has reconsidered their stance on this issue and has pushed out version 3.2.3 which changes the value of <code>config.active_record.whitelist_attributes </code>. There are also various, assorted fixes and improvements bundled into this version. </p>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= http://weblog.rubyonrails.org/2012/3/30/ann-rails-3-2-3-has-been-released/ >Release Notes </a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<hr />
<h2 style= clear: both; >New Kids on the Block</h2>
<p>As web developers, the sheer amount of resources we can tap into increases exponentially with time. Here is just a quick look at some recently created resources that deserve your attention &#8212; everything from new books to scripts and frameworks.</p>
<hr />
<h3>Smooth.js</h3>
<blockquote><p>Smooth.js takes an array of numbers or vectors and returns a parametric function that continuously interpolates that array. Smooth.js supports several interpolation methods, and flexible options for boundary behavior. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/osuushi/Smooth.js  >Github Repo</a></p>
<hr />
<h3>Scroll Path</h3>
<blockquote><p>jQuery Scroll Path is a plugin that lets you define your own custom scroll path. What this means exactly is best understood by checking out the demo. The plugin uses canvas flavored syntax for drawing paths, using the methods moveTo, lineTo and arc. To help with getting the path right, a canvas overlay with the path can be enabled when initializing the plugin. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/JoelBesada/scrollpath  >Github Repo</a></p>
<hr />
<h3>keymaster.js</h3>
<blockquote><p>Keymaster is a simple (100 LoC or so) micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/madrobby/keymaster#readme  >Github Repo</a></p>
<hr />
<h3>Ham</h3>
<blockquote><p>PHP Microframework for use with whatever you like. Basically just a fast router with nice syntax, and a cache singleton. Will add more things as I go, like perhaps an extension system, autoloader and some other stuff to make developing in PHP less irritating than it currently is. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/radiosilence/Ham  >Github Repo</a></p>
<hr />
<h3>mailcheck.js</h3>
<blockquote><p>The jQuery plugin that suggests a right domain when your users misspell it in an email address. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/Kicksend/mailcheck  >Github Repo</a></p>
<hr />
<h3>Hammer.js</h3>
<blockquote><p>Hammer.js is a javascript library that can be used to control gestures on touch devices. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/eightmedia/hammer.js  >Github Repo</a></p>
<hr />
<h3>Monorail.js</h3>
<blockquote><p>Monorail.js will never force you, and uses only what you need. Monorail.js will never force you to install anything not needed for your project. The goal is to use what you need. Anything other than creating a project will always be optional.  </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/runexec/monoRail.js  >Github Repo</a></p>
<hr />
<h3>Rainbow</h3>
<blockquote><p>Rainbow is a code syntax highlighting library written in Javascript. It was designed to be lightweight (1.4kb), easy to use, and extendable. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/ccampbell/rainbow  >Github Repo</a></p>
<hr />
<h3>Timeline</h3>
<blockquote><p>There are lots of timeline tools on the web but they are almost all either hard on the eyes or hard to use. Create timelines that are at the same time beautiful and intuitive for users. Timeline is great for pulling in media from different sources. Just throw in a link from Twitter, YouTube, Flickr, Vimeo, Google Maps or SoundCloud and Timeline will format it to fit perfectly. More media types will be supported in the future. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/VeriteCo/Timeline  >Github Repo</a></p>
<hr />
<h3>FakeS3</h3>
<blockquote><p>FakeS3 is a lightweight server that responds to the same calls Amazon S3 responds to.<br />
It is extremely useful for testing of S3 in a sandbox environment without actually making calls to Amazon, which not only require network, but also cost you precious dollars.  </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/jubos/fake-s3  >Github Repo</a></p>
<hr />
<h3>retina.js</h3>
<blockquote><p>retina.js makes it easy to serve high-resolution images to devices with retina displays. When your users load a page, retina.js checks each image on the page to see if there is a high-resolution version of that image on your server. If a high-resolution variant exists, the script will swap in that image in-place. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/imulus/retinajs  >Github Repo</a></p>
<hr />
<h3>Rucksack</h3>
<blockquote><p>Rucksack is a jquery plugin to arrange elements that can fit in the given width. It relies on the knapsack algorithm. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/heroic/Rucksack  >Github Repo</a></p>
<hr />
<h3>jQuery PopBox</h3>
<blockquote><p>jQuery PopBox is a simple balloon UI element inspired by 37Signals Highrise CRM. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/gristmill/jquery-popbox  >Github Repo</a></p>
<hr />
<h3>html2canvas</h3>
<blockquote><p>This script allows you to take &#8220;screenshots&#8221; of webpages or parts of it, directly on the users browser. The screenshot is based on the DOM and as such may not be 100% accurate to the real representation as it does not make an actual screenshot, but builds the screenshot based on the information available on the page. </p></blockquote>
<p><a style= display: block; text-align: right; display: block; text-align: right  href= https://github.com/niklasvh/html2canvas  >Github Repo</a></p>
<hr />
<h2 style= clear: both; >Best of the Internet</h2>
<p>Often, you&#8217;re not really looking for a tutorial as much as you&#8217;re looking for a rant, an opinion or the musings of a tired developer or just something cool with absolutely zero real world use. This sections contains links to precisely those &#8212; interesting and cool stuff from the developer community. </p>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/503_regex/200x200.png  width= 250  /></div>
<h3>PHP: a fractal of bad design</h3>
<p>A detailed look at why most people, when given a gun with two bullets and asked to shoot Hitler or PHP, want to shoot PHP twice. As much of a PHP lover I am, I can&#8217;t help but agree with a lot of this article.</p>
<p> <a style= display: block; text-align: right; display: block; text-align: right  href= http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/  >Read more</a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/734_oop/200x200.jpg  width= 250  /></div>
<h3>PHP Sucks! But I Like It! </h3>
<p>A really well written counter point to the earlier article, backed by a lot of reasoned thinking. </p>
<p> <a style= display: block; text-align: right; display: block; text-align: right  href= http://blog.ircmaxell.com/2012/04/php-sucks-but-i-like-it.html  >Read more</a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1019_riwd2/js.jpg  width= 250  /></div>
<h3>The infernal semicolon</h3>
<p>Brendan Eich chimes in with his stance on the entire JavaScript semi-colon issue.</p>
<p> <a style= display: block; text-align: right; display: block; text-align: right  href= http://brendaneich.com/2012/04/the-infernal-semicolon/  >Read more</a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1077_riwd5/jstest_1.png  width= 250  /></div>
<h3>How to be a successful programmer without a CS degree</h3>
<p>A wonderfully detailed answer on StackOverflow that outlines how to be a kickass programmer without an expensive CS degree.</p>
<p> <a style= display: block; text-align: right; display: block; text-align: right  href= http://programmers.stackexchange.com/questions/145784/how-to-be-a-successful-programmer-without-a-cs-degree  >Read more</a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1002_riwd1/ror.png  width= 250  /></div>
<h3>Zero downtime deploys for Rails apps</h3>
<p>A very informative presentation that outlines how you should go on about running and upgrading your Rails apps.</p>
<p> <a style= display: block; text-align: right; display: block; text-align: right  href= http://www.slideshare.net/pedrobelo/zero-downtime-deploys-for-rails-apps  >Read more</a></p>
<div style= clear: both; ></div>
<div style= clear: both; ></div>
<div style= float:left; margin-right:20px; margin-top: 25px; padding: 5px; border: 1px solid #E8E8E8;  ><img alt= Nettuts image  src= http://d2o0t5hpnwv4c1.cloudfront.net/1096_riwd6/glados.jpg  width= 250  /></div>
<h3>On being &#8220;Senior&#8221; </h3>
<p>A nice little read about the software industry and the rat race around titles.</p>
<p> <a style= display: block; text-align: right; display: block; text-align: right  href= http://www.galaktor.net/2012/04/on-being-senior.html  >Read more</a></p>
<div style= clear: both; ></div>
<hr />
<h2 style= clear: both; >Wrapping Up</h2>
<p>Well, that&#8217;s about all the major changes that happened in our industry lately. </p>
<p>Do you want us to cover more standard news? A focus on upcoming scripts maybe? Or just more interesting posts and discussions from the community? Let us know in the comments and thank you so much for reading! </p>
<p><a href= http://feedads.g.doubleclick.net/~a/Mtm3atHgoCtTK56Vigw77wf3Vyw/0/da ><img src= http://feedads.g.doubleclick.net/~a/Mtm3atHgoCtTK56Vigw77wf3Vyw/0/di  border= 0  ismap= true ></img></a><br/>
<a href= http://feedads.g.doubleclick.net/~a/Mtm3atHgoCtTK56Vigw77wf3Vyw/1/da ><img src= http://feedads.g.doubleclick.net/~a/Mtm3atHgoCtTK56Vigw77wf3Vyw/1/di  border= 0  ismap= true ></img></a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/nettuts?a=yCPMaXMEAv4:73j4JzaqiDE:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/nettuts?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=yCPMaXMEAv4:73j4JzaqiDE:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/nettuts?i=yCPMaXMEAv4:73j4JzaqiDE:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=yCPMaXMEAv4:73j4JzaqiDE:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/nettuts?i=yCPMaXMEAv4:73j4JzaqiDE:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=yCPMaXMEAv4:73j4JzaqiDE:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/nettuts?i=yCPMaXMEAv4:73j4JzaqiDE:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/nettuts?a=yCPMaXMEAv4:73j4JzaqiDE:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/nettuts?d=TzevzKxY174  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/nettuts/~4/yCPMaXMEAv4  height= 1  width= 1 />]]></description>
			  <pubDate>2012-05-01 22:51:29</pubDate>
			 </item>
			 
			  <item>
			  <title><![CDATA[36 Brilliant Icon Shots From Dribbble]]></title>
			  <link>http://medianic.co.uk/articleitem.php?id=856</link>
			  <guid>http://medianic.co.uk/articleitem.php?id=856</guid>
			  <description><![CDATA[<p><a href= http://rss.buysellads.com/click.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12068&c=773439667  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264758&k=c38bfe5dd65007d851bd7a21a37d911e&a=12068&c=773439667  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264758  target= _blank >Advertise here with BSA</a></p><br /><p>TodayÂ we have 36 brilliant icon shots from dribbble. If you like this post you might also enjoy our previous posts below.</p>
<p><a href= http://dzineblog.com/2012/02/40-dribbble-shots-of-iphone-applications.html  rel= bookmark >40 Dribbble Shots of iPhone Applications</a></p>
<p><a href= http://designm.ag/inspiration/40-useful-psds-from-dribbble/ >40 Useful PSDs From Dribbble</a></p>
<p><a href= http://spyrestudios.com/showcase-of-44-creative-illustrations-from-dribbble-artists/ >Showcase of 44 Creative Illustrations from Dribbble Artists</a></p>
<h4>Get Moving Icon</h4>
<p><a href= http://dribbble.com/shots/491836-Get-Moving-Icon ><img class= alignnone size-full wp-image-12069  src= http://spyrestudios.com/wp-content/uploads/1138.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title2 >Smart Cookie icon</h4>
<p><a href= http://dribbble.com/shots/508447-Smart-Cookie-icon ><img class= alignnone size-full wp-image-12070  src= http://spyrestudios.com/wp-content/uploads/2135.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title3 >Einstein :)</h4>
<p><a href= http://dribbble.com/shots/503627-Einstein- ><img class= alignnone size-full wp-image-12071  src= http://spyrestudios.com/wp-content/uploads/395.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title4 >Jam Jar</h4>
<p><a href= http://dribbble.com/shots/353124-Jam-Jar ><img class= alignnone size-full wp-image-12072  src= http://spyrestudios.com/wp-content/uploads/444.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title5 >The Boot</h4>
<p><a href= http://dribbble.com/shots/301583-The-Boot ><img class= alignnone size-full wp-image-12073  src= http://spyrestudios.com/wp-content/uploads/529.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title6 >Beer</h4>
<p><a href= http://dribbble.com/shots/292035-Beer ><img class= alignnone size-full wp-image-12074  src= http://spyrestudios.com/wp-content/uploads/629.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title7 >Drink Me</h4>
<p><a href= http://dribbble.com/shots/275957-Drink-Me ><img class= alignnone size-full wp-image-12075  src= http://spyrestudios.com/wp-content/uploads/729.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title8 >Gun Icon</h4>
<p><a href= http://dribbble.com/shots/480306-Gun-Icon ><img class= alignnone size-full wp-image-12076  src= http://spyrestudios.com/wp-content/uploads/829.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title9 >Some custom icons</h4>
<p><a href= http://dribbble.com/shots/480139-Some-custom-icons ><img class= alignnone size-full wp-image-12077  src= http://spyrestudios.com/wp-content/uploads/928.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title10 >Vector Tomato web icon</h4>
<p><a href= http://dribbble.com/shots/330184-Vector-Tomato-web-icon-illustration ><img class= alignnone size-full wp-image-12078  src= http://spyrestudios.com/wp-content/uploads/1029.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title11 >Stone Owl</h4>
<p><a href= http://dribbble.com/shots/237420-Stone-Owl ><img class= alignnone size-full wp-image-12079  src= http://spyrestudios.com/wp-content/uploads/1139.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title12 >Corporate Style Pack Icon</h4>
<p><a href= http://dribbble.com/shots/337642-Corporate-Style-Pack-Icon ><img class= alignnone size-full wp-image-12080  src= http://spyrestudios.com/wp-content/uploads/1231.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title13 >Sparrow 1.0 icon</h4>
<p><a href= http://dribbble.com/shots/104155-Sparrow-1-0-icon ><img class= alignnone size-full wp-image-12081  src= http://spyrestudios.com/wp-content/uploads/1330.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title14 >Clipboard Icon</h4>
<p><a href= http://dribbble.com/shots/326691-Clipboard-Icon ><img class= alignnone size-full wp-image-12082  src= http://spyrestudios.com/wp-content/uploads/1429.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title15 >Birdhouse</h4>
<p><a href= http://dribbble.com/shots/436367-Birdhouse ><img class= alignnone size-full wp-image-12083  src= http://spyrestudios.com/wp-content/uploads/1529.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title16 >Cloud upload icon</h4>
<p><a href= http://dribbble.com/shots/217481-Cloud-upload-icon ><img class= alignnone size-full wp-image-12084  src= http://spyrestudios.com/wp-content/uploads/1629.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title17 >CourseStorm web icon</h4>
<p><a href= http://dribbble.com/shots/379731-CourseStorm-web-icon ><img class= alignnone size-full wp-image-12085  src= http://spyrestudios.com/wp-content/uploads/1729.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title18 >SimpleGeo tools icon</h4>
<p><a href= http://dribbble.com/shots/153153-SimpleGeo-tools-icon ><img class= alignnone size-full wp-image-12086  src= http://spyrestudios.com/wp-content/uploads/1829.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title19 >Photo Camera Icon</h4>
<p><a href= http://dribbble.com/shots/406920-Photo-Camera-Icon ><img class= alignnone size-full wp-image-12087  src= http://spyrestudios.com/wp-content/uploads/1929.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title20 >Briefcase</h4>
<p><a href= http://dribbble.com/shots/508073-Briefcase ><img class= alignnone size-full wp-image-12088  src= http://spyrestudios.com/wp-content/uploads/2029.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title21 >Logistics icon</h4>
<p><a href= http://dribbble.com/shots/157431-Logistics-icon ><img class= alignnone size-full wp-image-12089  src= http://spyrestudios.com/wp-content/uploads/2136.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title22 >Radio Icon</h4>
<p><a href= http://dribbble.com/shots/379393-Radio-Icon ><img class= alignnone size-full wp-image-12090  src= http://spyrestudios.com/wp-content/uploads/2228.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title23 >CMS Icon</h4>
<p><a href= http://dribbble.com/shots/435095-CMS-Icon ><img class= alignnone size-full wp-image-12091  src= http://spyrestudios.com/wp-content/uploads/2326.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title24 >Hedgehog icon</h4>
<p><a href= http://dribbble.com/shots/516774-Hedgehog-icon ><img class= alignnone size-full wp-image-12092  src= http://spyrestudios.com/wp-content/uploads/2425.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title25 >Free St. Valentine€™s icon set</h4>
<p><a href= http://dribbble.com/shots/413907-Free-St-Valentine-s-icon-set ><img class= alignnone size-full wp-image-12093  src= http://spyrestudios.com/wp-content/uploads/2525.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title26 >Storybuilder Icon</h4>
<p><a href= http://dribbble.com/shots/508709-Storybuilder-Icon ><img class= alignnone size-full wp-image-12094  src= http://spyrestudios.com/wp-content/uploads/2624.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title27 >School boy icon</h4>
<p><a href= http://dribbble.com/shots/144169-School-boy-icon ><img class= alignnone size-full wp-image-12095  src= http://spyrestudios.com/wp-content/uploads/2724.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title28 >Valentine&#8217;s Day Coffee</h4>
<p><a href= http://dribbble.com/shots/114752-Valentine-s-Day-Coffee ><img class= alignnone size-full wp-image-12096  src= http://spyrestudios.com/wp-content/uploads/2824.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title29 >Calendar Icon</h4>
<p><a href= http://dribbble.com/shots/462220-Calendar-Icon ><img class= alignnone size-full wp-image-12097  src= http://spyrestudios.com/wp-content/uploads/2923.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title30 >Sofa icon</h4>
<p><a href= http://dribbble.com/shots/433276-Sofa-icon ><img class= alignnone size-full wp-image-12098  src= http://spyrestudios.com/wp-content/uploads/3022.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title31 >New logo for Doit.im</h4>
<p><a href= http://dribbble.com/shots/209953-New-logo-for-Doit-im ><img class= alignnone size-full wp-image-12099  src= http://spyrestudios.com/wp-content/uploads/3125.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title32 >Librarian</h4>
<p><a href= http://dribbble.com/shots/271458-Librarian ><img class= alignnone size-full wp-image-12100  src= http://spyrestudios.com/wp-content/uploads/3222.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title33 >Flower</h4>
<p><a href= http://dribbble.com/shots/477345-Flower ><img class= alignnone size-full wp-image-12101  src= http://spyrestudios.com/wp-content/uploads/3320.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title34 >Insect (hi-tech)</h4>
<p><a href= http://dribbble.com/shots/151726-Insect-hi-tech- ><img class= alignnone size-full wp-image-12102  src= http://spyrestudios.com/wp-content/uploads/3418.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title35 >Message icon</h4>
<p><a href= http://dribbble.com/shots/452980-Message-icon ><img class= alignnone size-full wp-image-12103  src= http://spyrestudios.com/wp-content/uploads/3516.jpg  alt=   width= 400  height= 300  /></a></p>
<h4 id= screenshot-title36 >Icons.fm</h4>
<p><a href= http://dribbble.com/shots/510711-Icons-fm ><img class= alignnone size-full wp-image-12104  src= http://spyrestudios.com/wp-content/uploads/3612.jpg  alt=   width= 400  height= 300  /></a></p>
<br /><p><a href= http://rss.buysellads.com/click.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12068&c=1478244657  target= _blank  rel= nofollow >
				<img src= http://rss.buysellads.com/img.php?z=1264756&k=c38bfe5dd65007d851bd7a21a37d911e&a=12068&c=1478244657  border= 0  alt=   /></a></p><p><a href= http://buysellads.com/buy/sitedetails/pubkey/c38bfe5dd65007d851bd7a21a37d911e/zone/1264756  target= _blank >Advertise here with BSA</a></p><div class= feedflare >
<a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:yIl2AUoC8zA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=yIl2AUoC8zA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:TzevzKxY174 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=TzevzKxY174  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:gIN9vFwOqvQ ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=Ew1Ldy3Od18:ZgDtgpPzxrI:gIN9vFwOqvQ  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:l6gmwiTKsz0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=l6gmwiTKsz0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:qj6IDK7rITs ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=qj6IDK7rITs  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:V_sGLiPBpWU ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=Ew1Ldy3Od18:ZgDtgpPzxrI:V_sGLiPBpWU  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:7Q72WNTAKBA ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=7Q72WNTAKBA  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:F7zBnMyn0Lo ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=Ew1Ldy3Od18:ZgDtgpPzxrI:F7zBnMyn0Lo  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:dnMXMwOfBR0 ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?d=dnMXMwOfBR0  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:D7DqB2pKExk ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=Ew1Ldy3Od18:ZgDtgpPzxrI:D7DqB2pKExk  border= 0 ></img></a> <a href= http://feeds.feedburner.com/~ff/SpyreStudios?a=Ew1Ldy3Od18:ZgDtgpPzxrI:-BTjWOF_DHI ><img src= http://feeds.feedburner.com/~ff/SpyreStudios?i=Ew1Ldy3Od18:ZgDtgpPzxrI:-BTjWOF_DHI  border= 0 ></img></a>
</div><img src= http://feeds.feedburner.com/~r/SpyreStudios/~4/Ew1Ldy3Od18  height= 1  width= 1 />]]></description>
			  <pubDate>2012-04-30 22:51:27</pubDate>
			 </item>
			 </channel></rss>
