<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Terry Dunham is a graphic designer, web designer and illustrator for hire</title>
	<atom:link href="http://terrytoledo.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://terrytoledo.com</link>
	<description>Free Estimates for Graphic Design, Web Design, Illustration and Designing a Marketing Plan</description>
	<lastBuildDate>Thu, 17 May 2012 04:00:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Weapons of Mass Creation Fest 3 – Ask A Pro</title>
		<link>http://terrytoledo.com/2012/05/weapons-of-mass-creation-fest-3-%e2%80%93-ask-a-pro/</link>
		<comments>http://terrytoledo.com/2012/05/weapons-of-mass-creation-fest-3-%e2%80%93-ask-a-pro/#comments</comments>
		<pubDate>Thu, 17 May 2012 04:00:10 +0000</pubDate>
		<dc:creator>GoMediaZine</dc:creator>
				<category><![CDATA[Go Media Zine]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/weapons-of-mass-creation-fest-3-%e2%80%93-ask-a-pro/</guid>
		<description><![CDATA[Ask A Pro at the 2012 WMC Fest This year’s WMC Fest will feature an “Ask A Pro” table where students, young designers and freelancers can have their design industry questions answered. The table will feature a number of local creative leaders that have years of experience and insights to share with you. So, bring [...]]]></description>
			<content:encoded><![CDATA[<h2><a href="http://www.gomediazine.com/wp-content/images/2012/05/Ask-The-Pros-Header-art.jpg"><img class="alignnone size-large wp-image-18765" src="http://www.gomediazine.com/wp-content/images/2012/05/Ask-The-Pros-Header-art-540x227.jpg" alt="" width="540" height="227" /></a></h2>
<h2>Ask A Pro at the 2012 WMC Fest</h2>
<p>This year’s <a title="WMC FEST 2012" href="http://wmcfest.com/">WMC Fest</a> will feature an “Ask A Pro” table where students, young designers and freelancers can have their design industry questions answered. The table will feature a number of local creative leaders that have years of experience and insights to share with you. So, bring your portfolios, bring your questions and most importantly – bring your passion!</p>
<p><strong>What:</strong> Ask A Pro: Portfolio Review and Industry Insights</p>
<p><strong>Where:</strong> Saigon Plaza, 5400 Detroit Ave., Cleveland, Ohio 44102</p>
<p><strong>When:</strong> Saturday and Sunday June 9th &amp; 10th</p>
<p><strong>Time:</strong> Noon – 2pm. *Only 2 hours each day!*</p>
<p><strong>Subjects covered:</strong> Portfolio Reviews, Design Tips, Illustration Instruction, Tips for Getting Hired, Legal/Accounting questions, Freelancer Business Questions, Layout tips, Art Direction,</p>
<h2>The Pros</h2>
<h3>William A. Beachy, President of Go Media Inc.</h3>
<p><a href="http://www.gomediazine.com/wp-content/images/2012/05/william_beachy_2_headshot.jpg"><img class="alignnone size-full wp-image-18757" src="http://www.gomediazine.com/wp-content/images/2012/05/william_beachy_2_headshot.jpg" alt="" width="120" height="120" /></a></p>
<p>William is a lifelong illustrator, professionally trained graphic designer and serial entrepreneur. William earned a Bachelor’s of Science in Industrial Design from the Ohio State University. Upon graduation he started Graphic Odysseys, an illustration studio. After two years, he took a job with Cleveland Coin, where he worked as lead designer, webmaster and assistant to the marketing director. In 2000 William re-launched his company with a focus on design services. In 2002 Graphic Odysseys merged with Next Level Multimedia to become Go Media. Over the last 10 years, as president, William has grown Go Media to 13 employees and purchased a warehouse office in Cleveland’s historic Ohio City neighborhood. Their web properties include a successful design blog, a project management system, a design mock-up application and a store of digital products which boasts over 75,000 customers. Go Media’s design clients include American Greetings, Adobe, Progressive, Jim Beam and Ubisoft.</p>
<p>Bill&#8217;s areas of expertise: Illustration, Branding, Adobe Illustrator, Print Design, UI/UX Design, Ergonomics, Web Design, Business Strategy, Business Management, Entrepreneurship, New Business Development, Brand Strategy, Social Media Marketing.</p>
<h3>Connie Ozan,</h3>
<p><a href="http://www.gomediazine.com/wp-content/images/2012/05/2e21113.jpg"><img class="alignnone size-full wp-image-18753" src="http://www.gomediazine.com/wp-content/images/2012/05/2e21113.jpg" alt="" width="120" height="120" /></a></p>
<p>Connie is the founder &amp; creative director of <a href="http://www.twist-creative.com/">Twist Creative Inc</a>.</p>
<h3>Todd Saperstein</h3>
<p><a><img class="alignnone size-full wp-image-18754" src="http://www.gomediazine.com/wp-content/images/2012/05/20a991b.jpg" alt="" width="120" height="120" /></a></p>
<p>Todd is the Graphic Design Department Chair, Digital Media Department Chair <a href="http://www.vmcad.edu/graphic-design/faculty/">Virginia Marti College of Art and Design</a>.</p>
<blockquote><p>[He] is a graduate of the Cleveland Institute of Art with a Bachelor of Fine Arts Degree in Illustration. He recently completed his Master of Arts Degree at Full Sail University in the Education Media Design and Technology program, which focused on new media and technology for use in education and business communication. He specialized in virtual learning environments and social networks, both personal and professional.<br />
<strong></strong></p>
</blockquote>
<h3>Charity D&#8217;amato</h3>
<p><a href="http://www.gomediazine.com/wp-content/images/2012/05/about_charity-damato_pic.jpg"><img class="alignnone size-full wp-image-18755" src="http://www.gomediazine.com/wp-content/images/2012/05/about_charity-damato_pic.jpg" alt="" width="120" height="118" /></a><br />
<strong></strong><br />
A graduate of Syracuse University with a BA in Communication Design and Art Education, Charity is the founder of <a href="http://www.chartreuseinc.com/">Chartreuse</a> and works alongside each and every client to ensure the best experience and design outcome. &#8220;I really adore the fact that I get to come to work everyday and be creative.&#8221; If she had to pick her favorite typeface is would be Mrs. Eaves and the more glitter in a project the better. Charity is a Cleveland Bridge Builders graduate as well as the 2010 Inside Business Athena Young Professional Award Winner.</p>
<p><a href="http://www.gomediazine.com/design-articles/weapons-of-mass-creation-fest-3-ask-a-pro/">Weapons of Mass Creation Fest 3 &#8211; Ask A Pro</a> is a post from: <a href="http://www.gomediazine.com">GoMediaZine</a></p>
<p><em>Go Media is a creative agency based in Cleveland, Ohio. Besides the GoMediaZine, we also <a href="http://www.gomedia.us" title="see what we can do for you">work for clients</a> and sell <a href="http://arsenal.gomedia.us">stock artwork and design files</a> on the Arsenal.</em></p>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/9eRpYpBjVyj5Nrr-2dcRVQ9eQao/0/da"><img src="http://feedads.g.doubleclick.net/~a/9eRpYpBjVyj5Nrr-2dcRVQ9eQao/0/di" border="0"></img></a><br />
<a href="http://feedads.g.doubleclick.net/~a/9eRpYpBjVyj5Nrr-2dcRVQ9eQao/1/da"><img src="http://feedads.g.doubleclick.net/~a/9eRpYpBjVyj5Nrr-2dcRVQ9eQao/1/di" border="0"></img></a></p>
<div>
<a href="http://feeds.feedburner.com/~ff/gomediazine?a=0QahcWH6oAk:J0-Zap_yGw8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/gomediazine?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gomediazine?a=0QahcWH6oAk:J0-Zap_yGw8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/gomediazine?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gomediazine?a=0QahcWH6oAk:J0-Zap_yGw8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/gomediazine?i=0QahcWH6oAk:J0-Zap_yGw8:D7DqB2pKExk" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/gomediazine/~4/0QahcWH6oAk" height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/weapons-of-mass-creation-fest-3-%e2%80%93-ask-a-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meet Crockford’s JSCheck</title>
		<link>http://terrytoledo.com/2012/05/meet-crockford%e2%80%99s-jscheck/</link>
		<comments>http://terrytoledo.com/2012/05/meet-crockford%e2%80%99s-jscheck/#comments</comments>
		<pubDate>Thu, 17 May 2012 04:00:09 +0000</pubDate>
		<dc:creator>Nettuts</dc:creator>
				<category><![CDATA[Nettuts]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/meet-crockford%e2%80%99s-jscheck/</guid>
		<description><![CDATA[There are dozens of JavaScript testing frameworks, but most of them function in, more or less, the same way. However, Douglas Crockford&#8217;s JSCheck 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! Crockford describes JSCheck as a &#8220;specification-driven testing tool. Crockford describes JSCheck [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=25044&amp;c=676605538" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=25044&amp;c=676605538" 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></span></p>
<hr />
<blockquote><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>(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;=  <img src='http://terrytoledo.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> { 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>(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>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>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>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>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>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>&lt;</code> operator instead of the <code>&lt;=</code> operator, so any passwords that scored 26 points were failing. I was seeing reports that looked something like this:</p>
<pre>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>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>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&#8217;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/SuJzdBVTM5Z2O5V_4UqBWrrT-90/0/da"><img src="http://feedads.g.doubleclick.net/~a/SuJzdBVTM5Z2O5V_4UqBWrrT-90/0/di" border="0"></img></a><br />
<a href="http://feedads.g.doubleclick.net/~a/SuJzdBVTM5Z2O5V_4UqBWrrT-90/1/da"><img src="http://feedads.g.doubleclick.net/~a/SuJzdBVTM5Z2O5V_4UqBWrrT-90/1/di" border="0"></img></a></p>
<div>
<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>
<p><img src="http://feeds.feedburner.com/~r/nettuts/~4/elFnjAFtJ_Q" height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/meet-crockford%e2%80%99s-jscheck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>17 Tools For Making Awesome Client Presentations</title>
		<link>http://terrytoledo.com/2012/05/17-tools-for-making-awesome-client-presentations/</link>
		<comments>http://terrytoledo.com/2012/05/17-tools-for-making-awesome-client-presentations/#comments</comments>
		<pubDate>Thu, 17 May 2012 04:00:09 +0000</pubDate>
		<dc:creator>Vandelay</dc:creator>
				<category><![CDATA[Vandelay Website Design]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/17-tools-for-making-awesome-client-presentations/</guid>
		<description><![CDATA[Ask five designers how they handle client design presentations and you’ll get five different answers. Some like to do their presentations in person, accompanying their designs with printouts detailing specific highlights. Others prefer utilizing an online screen sharing experience and talking their clients through their design in real time. And then there are those who [...]]]></description>
			<content:encoded><![CDATA[<p>Ask five designers how they handle client design presentations and you’ll get five different answers. Some like to do their presentations in person, accompanying their designs with printouts detailing specific highlights. Others prefer utilizing an online screen sharing experience and talking their clients through their design in real time. And then there are those who simply ship off the jpgs in an email outlining the design’s main points. No matter what your method is for revealing your design, it is important to use tools and resources that can make your presentation successful. Without further ado, here’s a list of some of the best apps and tools for delivering the perfect client presentation.</p>
<h2>Calls and Screen Sharing</h2>
<p><strong><a href="https://join.me/">Join.me</a></strong><br />
It’s simple, easy, and free. Either join someone’s screen share or share your own. You can invite up to 250 viewers into your screen share and can even let them take control of your computer. Join.me has a great list of features, such as internet calling, chat, and file sharing, which makes it a great all-in-one solution for screen sharing presentations.</p>
<p><a href="https://join.me/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-1.jpg" alt="Join.me" width="600" height="299" /></a></p>
<p><strong><a href="http://www.skype.com/intl/en-us/home">Skype</a></strong><br />
Skype has over 600 million users, so chances are high that even your client will have an account that he/she can hop on to at any time. Skype is a great way to have face-to-face conversations with clients when the option of meeting them in person is unavailable. In addition, if you need to chat with more than one person in a single call, Skype comes with conference call support so you can include as many people as you want in your presentation. Most importantly, Skype has a built-in screen sharing ability that allows you to switch from video to design comp with ease.</p>
<p><a href="http://www.skype.com/intl/en-us/home"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-2.jpg" alt="Skype" width="600" height="299" /></a></p>
<p><strong><a href="http://www.gotomeeting.com/">GotoMeeting</a></strong><br />
GotoMeeting is a familiar business go-to for conference calls and screen shares. You can attend meetings from your phone or your computer and utilize its convenient scheduling features to help better organize your meetings and presentations.</p>
<p><a href="http://www.gotomeeting.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-3.jpg" alt="GotoMeeting" width="600" height="299" /></a></p>
<p><strong><a href="http://www.google.com/chat/video">Google Video Chat</a></strong><br />
You probably already have your Gmail inbox open, so why not hop on a video or audio call with your clients within the same workspace? If you live in your Gmail inbox archives and frequently reference email exchanges and attachments in your workflow, Google Video is the perfect solution for communicating with your clients.</p>
<p><a href="http://www.google.com/chat/video"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-4.jpg" alt="Google Video Chat" width="600" height="299" /></a></p>
<p><strong><a href="https://www.google.com/voice">Google Voice</a></strong><br />
This is a frequently underrated communication tool that makes living our work lives on computers that much easier. Free up your hands by using your computer as your phone. Even if you miss a call, you can easily access it via Google voicemail or email transcription!</p>
<p><a href="https://www.google.com/voice"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-5.jpg" alt="Google Voice" width="600" height="299" /></a></p>
<h2>Presenting: Information Architecture and Prototypes</h2>
<p><strong><a href="http://www.axure.com/">Axure</a></strong><br />
Axure is a powerful and robust flowcharting, wireframing, and prototyping tool for all of your IA and prototyping needs. Axure is easy to use and is packed with every sort of web tool imaginable for creating the web wireframe or prototype of your dreams. You can even utilize its dynamic panels and widgets (including user-created widgets) to make your prototypes interactive. And if you want to get even more complex with your prototypes, you can integrate APIs and data to make your prototypes work with remote data!</p>
<p><a href="http://www.axure.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-6.jpg" alt="Axure" width="600" height="299" /></a></p>
<p><strong><a href="https://gomockingbird.com/">Mockingbird</a></strong><br />
If you’re looking for an inexpensive, browser-based solution, Mockingbird is the way to go. If you’re working with a team, everyone can access and work on your wireframes together. Previewing and sharing your wireframes is easy, and since everything is online, you’ll avoid having to deal with more file organization and clutter. To make things even easier, Mockingbird has an intuitive UI, with simple drag-and-drop interactions, smart text resizing, and interactive page linking.</p>
<p><a href="https://gomockingbird.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-7.jpg" alt="Mockingbird" width="600" height="299" /></a></p>
<p><strong><a href="http://www.omnigroup.com/products/omnigraffle/">Omnigraffle</a></strong><br />
Omnigraffle is a great Mac solution for creating and presenting flowcharts, sitemaps, and wireframes. While it comes with a great span of tools to create your IA needs, it really shines with its “stencils” feature. For a fully customizable and personalized look, you can utilize Omnigraffle’s stencil or user-created libraries.</p>
<p><a href="http://www.omnigroup.com/products/omnigraffle/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-8.jpg" alt="Omnigraffle" width="600" height="299" /></a></p>
<p><strong><a href="http://www.invisionapp.com/">InVision</a></strong><br />
Want to create beautiful wireframes and prototypes? InVision is a simple and intuitive web application that allows you to take your design jpgs, pngs, or gifs and turn them into interactive prototypes within minutes. You’ll be amazed at how easy it is to turn your flattened PSD images into dazzling working prototypes.</p>
<p><a href="http://www.invisionapp.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-9.jpg" alt="InVision" width="600" height="299" /></a></p>
<h2>Presenting: Designs</h2>
<p><strong>Photoshop full view mode and layer comps</strong><br />
Did you know you can utilize the different screen modes in Photoshop to view your PSD file? Photoshop’s Full Screen view hides everything but whatever is on your canvas and allows for easy toggling access back to the PSD in case you want to edit some nitty gritty elements of your file. Another great way to present designs is to use Photoshop layer comps. Layer comps allow you to save specific visibility, position, and layer styles for different versions or parts of your design. These layer comps are saved to your PSD so you can come back to them at any time.</p>
<p><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-10.jpg" alt="Photoshop full view mode and layer comps" width="600" height="299" /></p>
<p><strong>Preview for Mac</strong><br />
If you’re using a Mac, Preview is a powerful default image viewer that allows for easy viewing of your jpgs, pngs, and pdfs. If you have Lion OS X installed, you can take preview one step further by taking advantage of the revamped Slideshow or Full Screen modes. These two modes have the same functions as Preview normally does, but they’re now packed with beautiful isolated presentation screens that allow you to swipe between multiple images in a subtle but showy sliding interaction.</p>
<p><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-11.jpg" alt="Preview for Mac" width="600" height="299" /></p>
<p><strong>Picasa Photo Viewer for PC</strong><br />
While Windows Picture and Fax viewer has some merit to its usability, a great image viewing app that you might want to consider installing on your PC is the Picasa Photo Viewer. It’s got a great interface for navigating through files, and its black overlay background makes viewing a single design (PSD or image file) both clean and easy.</p>
<p><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-12.jpg" alt="Picasa Photo Viewer for PC" width="600" height="299" /></p>
<p><strong>Browser Viewing</strong><br />
For web-based projects, another interesting way to present a design is to drag your image file straight into your internet browser. This gives your clients the experience of seeing your design in its natural environment and helps capture a better overall impression of how the design will feel. Also, if you&#8217;re HTML/CSS savvy, you can make edits with the browser&#8217;s &#8220;Inspect element&#8221; screen to center and throw a background color behind your image. You&#8217;ll hardly be able to tell that the design isn&#8217;t live!</p>
<p><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-13.jpg" alt="Browser Viewing" width="600" height="299" /></p>
<h2>Feedback and Collaboration Tools</h2>
<p><strong><a href="http://www.notableapp.com/">Notable</a></strong><br />
Notable app allows your clients to give feedback straight onto the designs themselves (image files only). What’s especially nice about Notable is that feedback is displayed as an overlayed highlight area that clearly indicates what parts of the design are being discussed. You can then have a threaded conversation on that feedback or even create your own notes on your design.</p>
<p><a href="http://www.notableapp.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-14.jpg" alt="Notable" width="600" height="299" /></a></p>
<p><strong><a href="http://www.invisionapp.com/">InVision</a></strong><br />
InVision was mentioned earlier for its wireframing and prototyping capabilities, but it also allows for collaborative feedback on these projects. So not only will you have beautiful IA and designs to show your client, you can also ask them make comments right on your InVision mockups.</p>
<p><a href="http://www.invisionapp.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-15.jpg" alt="InVision" width="600" height="299" /></a></p>
<p><strong><a href="http://basecamp.com/">Basecamp</a></strong><br />
Basecamp is one of the most popular project management systems on the web. Apart from its project management system, however, is its feedback environment for designs and PSDs. Since many of your clients will probably be familiar with Basecamp, having them provide their feedback within the app itself will be beneficial for both of you. This helps you keep your project organized, recorded, and easily accessible. If you’re looking for free alternatives that yield similar results, take a look at Freedcamp and Podio.</p>
<p><a href="http://basecamp.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-16.jpg" alt="Basecamp" width="600" height="299" /></a></p>
<p><strong><a href="https://docs.google.com/">Google Docs</a></strong><br />
Free and popular, Google Docs is a great area for storing feedback on Word docs, Excel sheets, and many other document types. Google Docs has a particularly useful commenting system which allows for easy comment threading and discussion. Especially if your clients enjoy giving written feedback, consider taking advantage of this online resource.</p>
<p><a href="https://docs.google.com/"><img class="alignnone" src="http://vanimg.s3.amazonaws.com/client-pres-17.jpg" alt="Google Docs" width="600" height="299" /></a></p>
<h3>About the Author:</h3>
<p>Jessica Moon is both the blog editor and a UX/UI designer at <a href="http://dtelepathy.com/">digital-telepathy</a>, a user experience design studio that specializes in creating products like <a href="http://www.slidedeck.com/">SlideDeck</a>, <a href="http://www.hellobar.com/">Hello Bar</a>, and <a href="http://impress.dtelepathy.com/">Impress</a>. She has a passion for illustration and design, and enjoys <a href="http://moonspired.com/">blogging</a> and sharing what she’s learned via <a href="http://twitter.com/#!/moonspired">Twitter</a> and <a href="https://plus.google.com/u/0/106361872828214580035/">Google+</a>.</p>
<p><a href="http://vandelaypremier.com/premium-quality-design-resources/"><img src="http://vanimg.s3.amazonaws.com/vp-300.jpg" alt="Royalty-Free Graphics" width="300" height="250" border="0" /></a></p>
<div>
<a href="http://feeds.feedburner.com/~ff/Vandelay?a=hdoKkMbq2JY:0LzDIaCtLrM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Vandelay?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Vandelay?a=hdoKkMbq2JY:0LzDIaCtLrM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Vandelay?i=hdoKkMbq2JY:0LzDIaCtLrM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Vandelay?a=hdoKkMbq2JY:0LzDIaCtLrM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Vandelay?i=hdoKkMbq2JY:0LzDIaCtLrM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Vandelay?a=hdoKkMbq2JY:0LzDIaCtLrM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Vandelay?i=hdoKkMbq2JY:0LzDIaCtLrM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Vandelay?a=hdoKkMbq2JY:0LzDIaCtLrM:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Vandelay?d=I9og5sOYxJI" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/Vandelay/~4/hdoKkMbq2JY" height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/17-tools-for-making-awesome-client-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Responsive Images and Web Standards at the Turning Point</title>
		<link>http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point-2/</link>
		<comments>http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point-2/#comments</comments>
		<pubDate>Thu, 17 May 2012 04:00:08 +0000</pubDate>
		<dc:creator>csstricks</dc:creator>
				<category><![CDATA[CSS Tricks]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point-2/</guid>
		<description><![CDATA[Mat Marquis keeping us up to date on the responsive images hot drama. Good reminder at the end about not picking sides. Direct Link to Article &#8212; Permalink Responsive Images and Web Standards at the Turning Point is a post from CSS-Tricks]]></description>
			<content:encoded><![CDATA[<p>Mat Marquis keeping us up to date on the responsive images hot drama. Good reminder at the end about not picking sides. </p>
<p><a href="http://www.alistapart.com/articles/responsive-images-and-web-standards-at-the-turning-point/" title="Direct link to featured article">Direct Link to Article</a> &#8212; <a href="http://css-tricks.com/responsive-images-and-web-standards-at-the-turning-point/">Permalink</a></p>
<p><a href="http://css-tricks.com/responsive-images-and-web-standards-at-the-turning-point/">Responsive Images and Web Standards at the Turning Point</a> is a post from <a href="http://css-tricks.com">CSS-Tricks</a></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Useful String Manipulation Extension for JavaScript</title>
		<link>http://terrytoledo.com/2012/05/a-useful-string-manipulation-extension-for-javascript/</link>
		<comments>http://terrytoledo.com/2012/05/a-useful-string-manipulation-extension-for-javascript/#comments</comments>
		<pubDate>Thu, 17 May 2012 04:00:04 +0000</pubDate>
		<dc:creator>Web Appers</dc:creator>
				<category><![CDATA[Web Appers]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/a-useful-string-manipulation-extension-for-javascript/</guid>
		<description><![CDATA[Advertise here via BSA Javascript lacks complete string manipulation operations. Underscore.string attempts to fill that gap. Underscore.string is JavaScript library for comfortable manipulation with strings, extension for Underscore.js inspired by Prototype.js, Right.js, Underscore and beautiful Ruby language. Underscore.string provides you several useful functions: capitalize, clean, includes, count, escapeHTML, unescapeHTML, insert, splice, startsWith, endsWith, titleize, trim, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1270742&amp;k=f0f765a4a2b8013472eb1ae2074fd0ed&amp;a=1337223428&amp;c=436334932" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1270742&amp;k=f0f765a4a2b8013472eb1ae2074fd0ed&amp;a=1337223428&amp;c=1593607720" border="0" alt="" /></a></p>
<p><a href="http://buysellads.com/buy/sitedetails/pubkey/f0f765a4a2b8013472eb1ae2074fd0ed/zone/1270742" target="_blank">Advertise here via BSA</a></p>
<p>Javascript lacks complete string manipulation operations. Underscore.string attempts to fill that gap. <a title="Underscore.strings" href="http://epeli.github.com/underscore.string/" target="_blank">Underscore.string</a> is JavaScript library for comfortable manipulation with strings, extension for Underscore.js inspired by Prototype.js, Right.js, Underscore and beautiful Ruby language.</p>
<p>Underscore.string provides you several useful functions: <strong>capitalize, clean, includes, count, escapeHTML, unescapeHTML, insert, splice, startsWith, endsWith, titleize, trim, truncate and so on</strong>. It is released under MIT License.</p>
<p><a title="Underscore.strings" href="http://epeli.github.com/underscore.string/" target="_blank"><img class="size-full wp-image-6041 aligncenter" src="http://maxcdn.webappers.com/img/2012/05/underscore-string.jpg" alt="underscore-string" width="580" height="384" /></a></p>
<blockquote><p>Requirements: JavaScript Framework<br />
Demo: <a title="demo" rel="nofollow" href="http://epeli.github.com/underscore.string/" target="_blank">http://epeli.github.com/underscore.string/</a><br />
License: MIT License</p>
</blockquote>
<p><!-- Similar Posts took 0.176 ms --><br />
<h3>Sponsors</h3>
<p><a href="http://www.webiconset.com/?utm_source=WebAppers&amp;utm_medium=cpc&amp;utm_campaign=WebAppers%2BRSS">Professional Web Icons for Your Websites and Applications</a></p>
<div>
<a href="http://feeds.feedburner.com/~ff/Webappers?a=lhII8SQkKJ0:pwK4OHvQUMw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Webappers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lhII8SQkKJ0:pwK4OHvQUMw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lhII8SQkKJ0:pwK4OHvQUMw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lhII8SQkKJ0:pwK4OHvQUMw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lhII8SQkKJ0:pwK4OHvQUMw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lhII8SQkKJ0:pwK4OHvQUMw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lhII8SQkKJ0:pwK4OHvQUMw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lhII8SQkKJ0:pwK4OHvQUMw:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Webappers?i=lhII8SQkKJ0:pwK4OHvQUMw:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Webappers?a=lhII8SQkKJ0:pwK4OHvQUMw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Webappers?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/Webappers/~4/lhII8SQkKJ0" height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/a-useful-string-manipulation-extension-for-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zazzle Design Contest Winners Announced</title>
		<link>http://terrytoledo.com/2012/05/zazzle-design-contest-winners-announced/</link>
		<comments>http://terrytoledo.com/2012/05/zazzle-design-contest-winners-announced/#comments</comments>
		<pubDate>Thu, 17 May 2012 04:00:02 +0000</pubDate>
		<dc:creator>Color Lovers</dc:creator>
				<category><![CDATA[Color Lovers]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/zazzle-design-contest-winners-announced/</guid>
		<description><![CDATA[Zazzle is one of those totally awesome online brands that has just about everything you could wish for on one website. Aside from offering so many different products, Zazzle also gives you the chance to customize your own. Make sure you check out their selection of goods. Did you all enjoy creating iPad cases for [...]]]></description>
			<content:encoded><![CDATA[<p>Zazzle is one of those totally awesome online brands that has just about everything you could wish for on one website. Aside from offering so many different products, Zazzle also gives you the chance to customize your own. Make sure you check out their selection of goods.</p>
<p><!--cl-share-this--></p>
<p>Did you all enjoy creating iPad cases for our Zazzle contest? I hope so. There were so many fabulous entries, you guys are great at creating some inspiring pieces. So thank you for entering.</p>
<p><img class="aligncenter wp-image-42433" src="http://static.colourlovers.com/uploads/2012/05/designcontestipadsleevebanner-560x144.jpg" alt="" width="555" height="140" /></p>
<p>Today we are here to announce the winners of the Zazzle contest.</p>
<ul>
<li>
</li>
<li>Grand prize winner will receive $500 + a copy of their winning iPad Sleeve</li>
<li>
</li>
<li>1 Runner-up will receive $100 Zazzle gift certificate + copy of their iPad Sleeve</li>
<li>
</li>
<li>2 Honorable mentions will receive $50 Zazzle gift certificates + copies of their iPad Sleeves</li>
<li>
</li>
</ul>
<div>So let&#8217;s get to it. The Grand Prize winner of our iPad Zazzle Design Contest is: <a href="http://www.zazzle.com/egg_me_on_ipad_sleeve-205219286844167486">Egg Me On iPad Sleeve</a> by&nbsp;<a href="http://www.zazzle.com/gifts?ch=Praxically">Praxically</a>!</div>
<p><img class="aligncenter size-full wp-image-42430" src="http://static.colourlovers.com/uploads/2012/05/ZAZZLE-WINNER.jpg" alt="" width="555" height="351" /></p>
<p>The runner-up who will be receiving a $100 Zazzle gift certificate + copy of their iPad Sleeve is: <a href="http://www.zazzle.com/vintage_flowers_ipad_sleeve-205541223829541321">Vintage Flowers iPad Sleeve</a> by&nbsp;<a href="http://www.zazzle.com/gifts?ch=HazelAgnes">HazelAgnes</a>.</p>
<p><img class="aligncenter size-full wp-image-42431" src="http://static.colourlovers.com/uploads/2012/05/ZAZZLE-RUNNER-UP1.jpg" alt="" width="555" height="300" /></p>
<p>The 2 Honorable mentions who will be receiving a $50 Zazzle gift certificates + copies of their iPad Sleeves: <a href="http://www.zazzle.com/pattern_chevron_011_ipad_sleeves-205724093379412045">PATTERN {chevron 011}</a> by&nbsp;<a href="http://www.zazzle.com/gifts?ch=Schatzibrown">Schatzibrown</a></p>
<p>&nbsp;</p>
<p><img class="aligncenter size-full wp-image-42432" src="http://static.colourlovers.com/uploads/2012/05/ZAZZLE-RUNNER-UP2.jpg" alt="" width="555" height="300" /></p>
<p>And finally,&nbsp;<a href="http://www.zazzle.com/vintage_floral_design_ipad_sleeve-205520231114576394">Vintage Floral</a> by&nbsp;<a href="http://www.zazzle.com/gifts?ch=pinkinkstudio">pinkinkstudio</a></p>
<p><img class="aligncenter size-full wp-image-42434" src="http://static.colourlovers.com/uploads/2012/05/ZAZZLE-RUNNER-UP3.jpg" alt="" width="555" height="300" /></p>
<p>Congrats to all the winners! Thank you so much to everyone who entered the Zazzle contest. I hope you had a lot of fun with this contest and we are excited to keep bringing you more.</p>
<p><img src="http://feeds.feedburner.com/~r/Colourlovers/~4/SeRMTQ1Hnu0" height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/zazzle-design-contest-winners-announced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SASS vs. LESS</title>
		<link>http://terrytoledo.com/2012/05/sass-vs-less/</link>
		<comments>http://terrytoledo.com/2012/05/sass-vs-less/#comments</comments>
		<pubDate>Thu, 17 May 2012 03:23:52 +0000</pubDate>
		<dc:creator>csstricks</dc:creator>
				<category><![CDATA[CSS Tricks]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/sass-vs-less/</guid>
		<description><![CDATA[&#8220;Which CSS preprocessor language should I choose?&#8221; is a hot topic lately. I&#8217;ve been asked in person several times and an online debate has been popping up every few days it seems. It&#8217;s nice that the conversation has largely turned from whether or not preprocessing is a good idea to which one language is best. [...]]]></description>
			<content:encoded><![CDATA[<p><em>&#8220;Which CSS preprocessor language should I choose?&#8221;</em> is a hot topic lately. I&#8217;ve been asked in person several times and an online debate has been popping up every few days it seems. It&#8217;s nice that the conversation has largely turned from whether or not preprocessing is a good idea to which one language is best. Let&#8217;s do this thing.</p>
<p>Really short answer: SASS</p>
<p>Slightly longer answer: SASS is better on a whole bunch of different fronts, but if you are already happy in LESS, that&#8217;s cool, at least you are doing yourself a favor by preprocessing.</p>
<p>Much longer answer: Read on.</p>
<p><span></span></p>
<h3>The Much Longer Answer</h3>
<h4>The Learning Curve with Ruby and Command Line and Whatever</h4>
<p>The only learning curve is the syntax. You should use an app like <a href="http://incident57.com/codekit/">CodeKit</a> to watch and compile your authored files. You need to know jack squat about Ruby or the Command Line or whatever else. Maybe you should, but you don&#8217;t have to, so it&#8217;s not a factor here. </p>
<p>Winner: Nobody</p>
<h4>Helping with CSS3</h4>
<p>With either language, you can write your own mixins to help with vendor prefixes. No winner there. But you know how you don&#8217;t go back and update the prefixes you use on all your projects? (You don&#8217;t.) You also won&#8217;t update your handcrafted mixins file. (Probably.) In SASS you can use <a href="http://compass-style.org/">Compass</a>, and Compass <strong>will</strong> keep itself updated, and thus the prefix situation is handled for you. Yes you&#8217;ll have to keep your local preprocessor software updated and compile/push once in a while, but that&#8217;s trivial and thinking-free.</p>
<p>So what this comes down to is: <strong>SASS has Compass and LESS does not.</strong> But it goes deeper than that. The attempts at creating a real robust project like Compass for LESS haven&#8217;t succeeded because the LESS language isn&#8217;t robust enough to do it properly. More on that next.</p>
<p>Winner: SASS</p>
<h4>Language Ability: Logic / Loops</h4>
<p>LESS has an ability to do &#8220;guarded mixins.&#8221; These are mixins that only take affect <code>when</code> a certain condition is true. Perhaps you want to set a background color based on the current text color in a module. If the text color is &#8220;pretty light&#8221; you&#8217;ll probably want a dark background. If it&#8217;s &#8220;pretty dark&#8221; you&#8217;ll want a light background. So you have a single mixin broke into two parts with these guards that ensure that only one of them takes effect.</p>
<pre><code>.set-bg-color (@text-color) when (lightness(@text-color) &gt;= 50%) {
  background: black;
}
.set-bg-color (@text-color) when (lightness(@text-color) &lt; 50%) {
  background: #ccc;
}</code></pre>
<p>So then when you use it, you&#8217;ll get the correct background:</p>
<pre><code>.box-1 {
  color: #BADA55;
  .set-bg-color(#BADA55);
}</code></pre>
<p>That is overly simplified, but you likely get the idea. You can do some fancy stuff with it. LESS can also do self-referencing recursion where a mixin can call itself with an updated value creating a loop. </p>
<pre><code>.loop (@index) when (@index &gt; 0) {
  .myclass {
    z-index: @index;
  }
  // Call itself
  .loopingClass(@index - 1);
}
// Stop loop
.loopingClass (0) {}

// Outputs stuff
.loopingClass (10);</code></pre>
<p>But thats where the logic/looping abilities of LESS end. SASS has actual logical and looping operators in the language. if/then/else statements, for loops, while loops, and each loops. No tricks, just proper programming. While guarded mixins are a pretty cool, natural concept, language robustness goes to SASS. This language robustness is what makes Compass possible. </p>
<p>For example, Compass has a mixin called <code>background</code>. It&#8217;s so robust, that you can pass just about whatever you want to that thing that it will output what you need. Images, gradients, and any combination of them comma-separated, and you&#8217;ll get what you need (vendor prefixes and all). </p>
<p>This succinct and intelligible code:</p>
<pre><code>.bam {
  @include background(
    image-url("foo.png"),
    linear-gradient(top left, #333, #0c0),
    radial-gradient(#c00, #fff 100px)
  );
}</code></pre>
<p>Turns into this monster (which is unfortunately what we need for it to work with as good of browser support as we can get):</p>
<pre><code>.bam {
  background: url('/foo.png'), -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #333333), color-stop(100%, #00cc00)), -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(0%, #cc0000), color-stop(100%, #ffffff));
  background: url('/foo.png'), -webkit-linear-gradient(top left, #333333, #00cc00), -webkit-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), -moz-linear-gradient(top left, #333333, #00cc00), -moz-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), -o-linear-gradient(top left, #333333, #00cc00), -o-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), -ms-linear-gradient(top left, #333333, #00cc00), -ms-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), linear-gradient(top left, #333333, #00cc00), radial-gradient(#cc0000, #ffffff 100px);
}</code></pre>
<p>Winner: SASS</p>
<h4>Website Niceitude</h4>
<p>LESS has a nicer, <a href="http://lesscss.org/">more usable website</a>. The <a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html">SASS documentation</a> isn&#8217;t awful. It&#8217;s complete and you can find what you need. But when competing for attention from front end people, LESS has the edge. I don&#8217;t doubt this plays a large role in LESS currently winning the popularity race. <a href="http://twitter.com/TeamSassDesign">Things may be changing though.</a></p>
<p>Winner: LESS</p>
<h4>The @extend Concept</h4>
<p>Say you declare a class which has a bit of styling. Then you want another class which you want to do just about the same thing, only a few additional things. In LESS you&#8217;d likely:</p>
<pre><code>.module-b {
   .module-a(); /* Copies everything from .module-a down here */
   border: 1px solid red;
}</code></pre>
<p>That&#8217;s an &#8220;include&#8221; essentially. A mixin, in both languages. You could use an include to do that SASS as well, but you&#8217;re better off using <code>@extend</code>. With <code>@extend</code>, the styles from <code>.module-a</code> aren&#8217;t just duplicated down in .mobule-b (what could be considered bloat), the selector for .module-a is altered to <code>.module-a, .module-b</code> in the compiled CSS (which is more efficient).</p>
<pre><code>.module-a {
   /* A bunch of stuff */
}
.module-b {
   /* Some unique styling */
   @extend .module-a;
}</code></pre>
<p>Compiles into</p>
<pre><code>.module-a, .module-b {
  /* A bunch of stuff */
}
.module-b {
  /* Some unique styling */
}</code></pre>
<p>See that? It rewrites selectors, which is way more efficient.</p>
<p>Winner: SASS</p>
<h4>Variable Handling</h4>
<p>LESS uses @, SASS uses $. The dollar sign has no inherit meaning in CSS, while the @ sign does. It&#8217;s for things like declaring @keyframes or blocks of @media queries. You could chalk this one up to personal preference and not a big deal, but I think the edge here is for SASS which doesn&#8217;t confuse standing concepts.</p>
<p>SASS has some weirdness with scope in variables though. If you overwrite a &#8220;global&#8221; variable &#8220;locally&#8221;, the global variable takes on the local value. This just feels kind of weird.</p>
<pre><code>$color: black;
.scoped {
  $color: white;
  color: $color;
}
.unscoped {
  // LESS = black (global)
  // SASS = white (overwritten by local)
  color: $color;
}</code></pre>
<p>I&#8217;ve heard it can be useful but it&#8217;s not intuitive, especially if you write JavaScript.</p>
<p>Winner: Tossup</p>
<h4>Working with Media Queries</h4>
<p>The way most of us started working with <code>@media</code> queries was adding blocks of them at the bottom of your main stylesheet. That works, but it leads to mental disconnect between the original styling and the responsive styles. Like:</p>
<pre><code>.some-class {
   /* Default styling */
}

/* Hundreds of lines of CSS */

@media (max-width: 800px) {
  .some-class {
    /* Responsive styles */
  }
}</code></pre>
<p>With SASS or LESS, we can bring those styles together through nesting.</p>
<pre><code>.some-class {
  /* Default styling */
  @media (max-width: 800px) {
    /* Responsive styles */
  }
}</code></pre>
<p>You can get even sexier with SASS. There is a really cool &#8220;respond-to&#8221; technique (see code by <a href="https://gist.github.com/1215856">Chris Eppstein</a>, <a href="http://theint.ro/blogs/outro/4686992-responsive-design-with-sass">Ben Schwarz</a>, and <a href="http://jeffcroft.com/blog/2012/mar/02/implementing-responsive-design/">Jeff Croft</a>) for naming/using breakpoints.</p>
<pre><code>=respond-to($name)

  @if $name == small-screen
    @media only screen and (min-width: 320px)
      @content

  @if $name == large-screen
    @media only screen and (min-width: 800px)
      @content</code></pre>
<p>The you can use them succinctly and semantically:</p>
<pre><code>.column
    width: 25%
    +respond-to(small-screen)
      width: 100%</code></pre>
<p>Note: requires SASS 3.2, which is in alpha, which you can install with <code>gem install sass --pre</code>. I don&#8217;t think there is any doubt this is a very nice way to work.</p>
<p>Winner: SASS</p>
<h4>Math</h4>
<p>For the most part, the math is similar, but there are some weirdnesses with how units are handled. For instance, LESS will assume the first unit you use is what you want out, ignoring further units.</p>
<pre><code>div {
   width: 100px + 2em; // == 102px (weird)
}</code></pre>
<p>In SASS, you get a clear error: Incompatible units: &#8216;em&#8217; and &#8216;px&#8217;. I guess it&#8217;s debatable if it&#8217;s better to error or be wrong, but I&#8217;d personally rather have the error. Especially if you&#8217;re dealing with variables rather than straight units and it&#8217;s harder to track down.</p>
<p>SASS will also let you perform math on &#8220;unknown&#8221; units, making it a bit more futureproof should some new unit come along before they are able to update. LESS does not. There is some more weird differences like how SASS handles multiplying values that both have units, but it&#8217;s esoteric enough to not be worth mentioning.</p>
<p>Winner: Narrowly SASS</p>
<h4>Active Development</h4>
<p>At the time of this writing&#8230;</p>
<p><a href="https://github.com/cloudhead/less.js/issues">Number of open issues</a> on LESS: 392<br />
<a href="https://github.com/nex3/sass/issues">Number of open issues</a> on SASS: 84</p>
<p><a href="https://github.com/cloudhead/less.js/pulls">Pending pull requests</a> on LESS: 86<br />
<a href="https://github.com/nex3/sass/pulls">Pending pull requests</a> on SASS: 3</p>
<p><a href="https://github.com/cloudhead/less.js/commits/master/">Number of commits</a> in the last month in LESS: 11<br />
<a href="https://github.com/nex3/sass/commits/stable/">Number of commits</a> in the last month in SASS: 35</p>
<p>None of that stuff is any definitive proof that one project is more active than the other, but the numbers do seem to always leans toward SASS. As I understand it, both of the leads work on the languages in whatever little free time they have, as they both have other major new projects they are working on. </p>
<p>Winner: Probably SASS</p>
<h3>More Reading</h3>
<ul>
<li>Chris Eppstein: <a href="https://gist.github.com/674726">SASS/LESS Comparison</a></li>
<li>Jeremy Hixon: <a href="http://coding.smashingmagazine.com/2011/09/09/an-introduction-to-less-and-comparison-to-sass/">An Introduction To LESS, And Comparison To Sass</a></li>
<li>Ken Collins: <a href="http://metaskills.net/2012/02/27/too-less-should-you-be-using-sass/">Too LESS? Should You Be Using Sass?</a></li>
<li>Johnathan Croom: <a href="http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout/">Sass vs. LESS vs. Stylus: Preprocessor Shootout</a></li>
</ul>
<p><a href="http://css-tricks.com/sass-vs-less/">SASS vs. LESS</a> is a post from <a href="http://css-tricks.com">CSS-Tricks</a></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/sass-vs-less/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 adaptive images: end of round one</title>
		<link>http://terrytoledo.com/2012/05/html5-adaptive-images-end-of-round-one/</link>
		<comments>http://terrytoledo.com/2012/05/html5-adaptive-images-end-of-round-one/#comments</comments>
		<pubDate>Wed, 16 May 2012 10:36:45 +0000</pubDate>
		<dc:creator>htmldoc</dc:creator>
				<category><![CDATA[HTML5 Doctor]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/html5-adaptive-images-end-of-round-one/</guid>
		<description><![CDATA[After The Great Vendor Prefix Hullaballoo of April 2012 comes The Great Responsive Images Brouhaha of May 2012. Adaptive images are the next unsolved mystery of Responsive Web Design. Do you send large high-res images suitable for retina dispays, which are scaled down on smaller, lower res devices and which therefore waste bandwidth? Or do [...]]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://dev.opera.com/articles/view/opera-mobile-emulator-experimental-webkit-prefix-support/">The Great Vendor Prefix Hullaballoo of April 2012</a> comes The Great Responsive Images Brouhaha of May 2012. </p>
<p>Adaptive images are the next unsolved mystery of Responsive Web Design. Do you send large high-res images suitable for retina dispays, which are scaled down on smaller, lower res devices and which therefore waste bandwidth? Or do you send low-res images, whch look grotty when scaled up to large screens or high-res displays? Authors have had to rely on <a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">elaborate hacks</a> to send different content images (that is <code>&lt;img&gt;</code> in HTML rather than CSS background images) to different types of devices.</p>
<p>By November 2011, I was so frustrated that no specification body was considering the problem that <a href="http://www.brucelawson.co.uk/2011/notes-on-adaptive-images-yet-again/">I proposed a strawman &lt;picture&gt; element</a> that re-used the mechanism of HTML5 &lt;video&gt; with its media queries to swap in different source files:</p>
<pre><code>
&lt;picture alt=&quot;angry pirate&quot;&gt;
   &lt;source src=hires.png media=&quot;min-width:800px&quot;&gt;
   &lt;source src=midres.png media=&quot;min-width:480px&quot;&gt;
   &lt;source src=lores.png&gt;
      &lt;!-- fallback for browsers without support --&gt;
      &lt;img src=midres.png alt=&quot;angry pirate&quot;&gt;
&lt;/picture&gt;</code>
</pre>
<p>Around the same time, others <a href="http://www.w3.org/community/respimg/2012/02/23/picture-for-existing-browsers/">independently came to the same idea</a> and were advised to set up a <a href="http://www.w3.org/community/respimg/">W3C community group</a> to discuss it which they did. However, in January, the HTML5 editor, <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-January/034490.html">Ian Hickson, had said</a></p>
<blockquote><p>What&#8217;s the use case for doing it for images in &lt;img&gt; elements? Typically &lt;img&gt; elements are for content images, where you don&#8217;t usually want to adapt anything.</p></blockquote>
<p>Those web authors in the W3C Resposive Images Community Group  soldiered on in frustration that they were they being ignored  because the problem itself wasn&#8217;t seen as a problem. Then this week, Edward O&#8217;Connor of Apple suggested another method, using a <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/035746.html">new <code>srcset</code> attribute</a> on the &lt;img&gt; element. This complemented a similar suggestion of his from February for <a href="http://lists.w3.org/Archives/Public/www-style/2012Feb/1103.html">img-set in CSS</a> that is already being added to WebKit:</p>
<pre><code>&lt;img src="foo-lores.jpg"
     srcset="foo-hires.jpg 2x, foo-superduperhires.jpg 6.5x"
     alt="decent alt text for foo."&gt;</code></pre>
<p>The numbers &#8220;2&#8243; and &#8220;6.5x&#8221; tell the browser the relative resolutions; foo-hires.jpg is 2x the resolution of foo-lores.jpg.</p>
<p>Only a few days later, a variant of Apple&#8217;s suggestion was <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/035855.html">added to the spec</a>.</p>
<p>There are two major differences between &lt;picture&gt; and srcset. The most obvious is that srcset uses the &lt;img&gt; element, which is great because that&#8217;s the natural place for images, adaptive or not. (You can&#8217;t re-use the &lt;video&gt; + &lt;source&gt; pattern with &lt;img&gt; because it is an empty element so can&#8217;t have child elements. O&#8217;Connor&#8217;s solution uses attributes, which are fine.)</p>
<p>The other major difference is that it doesn&#8217;t use Media Queries. With Media Queries, the author is reponsible for thinking up every permuations of viewport size, orientation, dpi, colour depth, aspect ratio and the like, deciding how to cater for them (if at all), identifing the breakpoints and coding them up. This requires a lot of consideration by the author, and makes for verbose code; a page with 20 pictures, each with 5 Media Queries on 5 &lt;source&gt; elements quickly becomes a lot of code.</p>
<p>O&#8217;Connor wrote</p>
<blockquote>
<p>Why provide a scale factor and not a media query? Well, media queries are claims about UA state, whereas here we&#8217;re asserting something about the relationship between the image assets. Also, User Agents should be free to use whichever asset they deem best suited to their current situation, taking into account not just &#8220;media-queriable things&#8221; like device resolution but also any scaling applied to the &lt;img&gt; with CSS, its width=&#8221;&#8221; and height=&#8221;&#8221; attributes, or even things like the current page zoom level.</p>
</blockquote>
<p>I have a lot of sympathy with allowing the browser to make decisions about what it knows of the environment (network speed, latency, pixel density, orientation) to choose the best image for the job. The idea is that the author shouldn&#8217;t be expected to anticipate and cater for all those variables. What she can do is describe the things she knows about -the images, their size and pixel density- and the browser will make its choice.</p>
<p>That way, when we&#8217;re all living in space and looking a 3D holograms, the proximity to a black hole can be detected by the iDroid3000 device (black holes notoriously cause Web hologram negative timespace inversions) and the right image chosen; we don&#8217;t need to invent new media queries for event horizon proximity and retrospectively add it to our websites.</p>
<p>There are two problems with the srcset suggestion. The first is highly subjective, but many feel the same: as it exists in the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-srcset">current, first draft of the spec</a>, the syntax is revolting:</p>
<pre><code>&lt;img src="face-600-200-at-1.jpeg" alt=""
srcset="face-600-200-at-1.jpeg 600w 200h 1x,
face-600-200-at-2.jpeg 600w 200h 2x,
face-icon.png 200w 200h"&gt;</code></pre>
<p>Of course, this can be improved, and must be. This isn&#8217;t just about aesthetics. If the syntax is too weird, it will be used wrongly. As <a href="https://twitter.com/#!/rem/status/202306584880234496">Dr Remy wrote</a>, &#8220;Good to see authors have <em>another</em> microsyntax to learn. It&#8217;s not like they had any trouble with vendor-prefixes.&#8221;</p>
<p>The second problem is that authors don&#8217;t want to relinquish control. There are questions of art direction (see the section headed <a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">Do I care about art direction?</a>), and many remain unconvinced that the Apple suggestion addresses that; proponents of srcset are convinced that <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/035907.html">it does address those use cases</a>. </p>
<p>Debate continues, with a <a href="http://www.cartoonstock.com/directory/e/exchange_of_views.asp">full and frank exchange of views</a>. There are understandably <a href="http://timkadlec.com/2012/05/wtfwg/">hurt feelings</a>, too, because some of those who laboured in the Community Group feel that <a href="http://www.alistapart.com/articles/responsive-images-and-web-standards-at-the-turning-point/">their wishes and work have been ignored</a>.</p>
<p>As one of those who proposed &lt;picture&gt;, I have a degree of attachment to it. That&#8217;s ego. (In fact, I&#8217;d be delighted if it were called the &lt;yayBruce&gt; element, but I&#8217;m resigned to the unfairness of life.) But I don&#8217;t really care which syntax makes the spec, as long as it addresses the majority of use cases and it is usable by authors. I&#8217;m just glad we&#8217;re discussing the adaptive image problem at all.</p>
<p>So, get involved. Read the discussions and say your piece. And once the dust has settled and the specification is looking stable, we Doctors will write up our diagnosis.</p>
<div>
<h3>Related Posts:</h3>
<ul>
<li><a href="http://html5doctor.com/html5-briefing-notes-journalists-analysts/" rel="bookmark">HTML5: briefing notes for journalists and analysts</a></li>
<li><a href="http://html5doctor.com/html5-simplequiz-6-zeldmans-fat-footer/" rel="bookmark">HTML5 Simplequiz 6: Zeldman&#8217;s fat footer</a></li>
<li><a href="http://html5doctor.com/getusermedia/" rel="bookmark">It&#8217;s Curtains for Marital Strife Thanks to getUserMedia</a></li>
<li><a href="http://html5doctor.com/why-designers-should-care-about-html5/" rel="bookmark">Why designers should care about HTML5</a></li>
<li><a href="http://html5doctor.com/html5-simplequiz-4-figures-captions-and-alt-text/" rel="bookmark">HTML5 Simplequiz #4: figures, captions and alt text</a></li>
</ul>
</div>
<p><a href="http://html5doctor.com/html5-adaptive-images-end-of-round-one/" rel="bookmark">HTML5 adaptive images: end of round one</a> originally appeared on <a href="http://html5doctor.com">HTML5 Doctor</a> on May 16, 2012.</p>
<p><img src="http://feeds.feedburner.com/~r/html5doctor/~4/vIMJLtrvU7I" height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/html5-adaptive-images-end-of-round-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Responsive Images and Web Standards at the Turning Point</title>
		<link>http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point/</link>
		<comments>http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point/#comments</comments>
		<pubDate>Wed, 16 May 2012 04:00:22 +0000</pubDate>
		<dc:creator>Terry</dc:creator>
				<category><![CDATA[A List Apart]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point/</guid>
		<description><![CDATA[Responsible responsive design demands responsive images—images whose dimensions and file size suit the viewport and bandwidth of the receiving device. As HTML provides no standard element to achieve this purpose, serving responsive images has meant using JavaScript trickery, and accepting that your solution will fail for some users. Then a few months ago, in response [...]]]></description>
			<content:encoded><![CDATA[<p>Responsible responsive design demands responsive images—images whose dimensions and file size suit the viewport and bandwidth of the receiving device. As HTML provides no standard element to achieve this purpose, serving responsive images has meant using JavaScript trickery, and accepting that your solution will fail for some users.</p>
<p>Then a few months ago, in response to an article here, a W3C Responsive Images Community Group formed—and proposed a simple-to-understand HTML picture element capable of serving responsive images. The group even delivered picture functionality to older browsers via two polyfills: namely, Scott Jehl’s Picturefill and Abban Dunne’s jQuery Picture. The WHATWG has responded by ignoring the community’s work on the picture element, and proposing a more complicated img set element.</p>
<p>Which proposed standard is better, and for whom? Which will win? And what can you do to help avert an “us versus them” crisis that could hurt end-users and turn developers off to the standards process? ALA’s own Mat Marquis explains the ins and outs of responsive images and web standards at the turning point.</p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/responsive-images-and-web-standards-at-the-turning-point/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Super-Scale Magento in the Cloud</title>
		<link>http://terrytoledo.com/2012/05/how-to-super-scale-magento-in-the-cloud/</link>
		<comments>http://terrytoledo.com/2012/05/how-to-super-scale-magento-in-the-cloud/#comments</comments>
		<pubDate>Wed, 16 May 2012 04:00:19 +0000</pubDate>
		<dc:creator>Nettuts</dc:creator>
				<category><![CDATA[Nettuts]]></category>

		<guid isPermaLink="false">http://terrytoledo.com/2012/05/how-to-super-scale-magento-in-the-cloud/</guid>
		<description><![CDATA[This tutorial will help you prepare a Magento install for high traffic, better load times, and simpler ongoing site management. Ready? Requirements You can download the finished code for this tutorial, or launch the &#8220;magento-basic&#8221; Quickstart from your Pagoda Box account to test a working site. A Pagoda Box Account (free) A functional local Magento [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=25037&amp;c=2143301145" target="_blank"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=25037&amp;c=2143301145" 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></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>

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

       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>
$ sudo gem install pagoda
</pre>
<p> On Windows:</p>
<pre>
$ gem install pagoda
</pre>
<p>Then, to verify you have the Pagoda Gem installed properly, run:</p>
<pre>
$ 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 &gt; staging &gt; production best practices.</p>
<div><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>
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><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><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><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><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><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>
db1:
  name: mag-db
  type: mysql
  </pre>
<p>Your updated Boxfile should look like this:</p>
<pre>
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>
$ 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><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><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><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>
after_build:
  "mv pagoda/local.xml app/etc/local.xml"
</pre>
<p>Your updated Boxfile should look like this:</p>
<pre>
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>
$ 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 &gt; 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>
$ 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><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 &gt; 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>
web/unsecure/base_url
web/secure/base_url
</pre>
</p>
<p>The values for each should look something like this:</p>
<div><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><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>
  cron:
    - "*/15 * * * *": "curl -s -o /dev/null http://magento.pagodabox.com/cron.php"
    </pre>
<p>Your updated Boxfile should look like this:</p>
<pre>
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><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/U4GGxc_8ZAv-kTsjFQz3Fow7oJI/0/da"><img src="http://feedads.g.doubleclick.net/~a/U4GGxc_8ZAv-kTsjFQz3Fow7oJI/0/di" border="0"></img></a><br />
<a href="http://feedads.g.doubleclick.net/~a/U4GGxc_8ZAv-kTsjFQz3Fow7oJI/1/da"><img src="http://feedads.g.doubleclick.net/~a/U4GGxc_8ZAv-kTsjFQz3Fow7oJI/1/di" border="0"></img></a></p>
<div>
<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>
<p><img src="http://feeds.feedburner.com/~r/nettuts/~4/gCVIO2Y0hy4" height="1" width="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://terrytoledo.com/2012/05/how-to-super-scale-magento-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

