<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
	
	<title type="text" xml:lang="en">PaulStamatiou.com - Tech News, Reviews and Guides</title>
	
 	<link type="text" href="http://paulstamatiou.com" rel="alternate" />
	<updated>2013-05-12T18:07:25-07:00</updated>
	<id>http://paulstamatiou.com</id>
	<author>
		<name>Paul Stamatiou</name>
	</author>
	<rights>Copyright (c) 2005-2013, Paul Stamatiou; all rights reserved.</rights>
	
	
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/paulstamatiou" /><feedburner:info uri="paulstamatiou" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><logo>http://feeds.feedburner.com/~fc/paulstamatiou?bg=e4e4dc&amp;fg=666666&amp;anim=0</logo><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/paulstamatiou" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://my.feedlounge.com/external/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://static.feedlounge.com/buttons/subscribe_0.gif">Subscribe with FeedLounge</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fpaulstamatiou" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry>
		<title>Simplify.</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/Hv_q1ANEdV8/simplify" />
		<updated>2013-04-30T09:00:00-07:00</updated>
		<id>http://paulstamatiou.com/simplify</id>
		<content type="html">&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I have been thinking a lot about simplifying my life recently. I started a &lt;a href="http://paulstamatiou.com/joining-twitter"&gt;stellar new job four months ago&lt;/a&gt; and it felt like a great time to change other parts of my life.&lt;/p&gt;

&lt;p&gt;I used to be a slave to my startups. If I wasn't working, I had a perpetual feeling of guilt that I should be working. 
That lead to many all-nighters and eventually landed me in the hospital last year after fainting twice from fever and dehydration.
That reads more like an accolade to the workaholic culture of Silicon Valley, which joyously consumes posts like how Marissa Mayer &lt;a href="http://www.entrepreneur.com/blog/223723"&gt;worked &lt;em&gt;130 hours&lt;/em&gt; per week&lt;/a&gt;. It was most definitely no accolade for me. My last five years have been stressful as fuck.&lt;/p&gt;

&lt;p&gt;Whenever my mind would wander it would toss around a big to-do list. All the damn time. It's hard to relax when you keep thinking about things you need to be doing instead of relaxing. I even prided myself on my unwavering workaholic tendencies, notably in this TechCrunch guest post I penned, &lt;a href="http://techcrunch.com/2012/08/05/first-time-startup-entrepreneurs-stop-fucking-around/"&gt;First-Time Startup Entrepreneurs: Stop Fucking Around&lt;/a&gt;. Consider this the sequel.&lt;/p&gt;

&lt;hr class="article"/&gt;


&lt;p&gt;I was a digital hoarder. I &lt;em&gt;had&lt;/em&gt; to check Hacker News and its ilk hourly. I &lt;em&gt;had&lt;/em&gt; to open 10 tabs of articles to read or stash them away for later. Yet another task to complete. I had a revelation one day when I realized I didn't have to read everything I found on the Internet. And you know what? My life didn't end because I missed that TechCrunch article. It's all just fleeting information.&lt;/p&gt;

&lt;blockquote class="huge"&gt;&lt;p&gt;I had a revelation one day when I realized I didn't have to read everything I found on the Internet.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;I learned that I don't need to reply to every email. I've always been a yes guy and that lead me to being &lt;a href="http://opinionator.blogs.nytimes.com/2012/06/30/the-busy-trap/" title="The Busy Trap"&gt;meaninglessly busy&lt;/a&gt; with things I didn't actually care about.&lt;/p&gt;

&lt;p&gt;I say no more often and now I actually have weekends to myself to do things I &lt;em&gt;want&lt;/em&gt; to do, like &lt;a href="https://twitter.com/Stammy/status/321071272631099393"&gt;hiking in the Marin Headlands&lt;/a&gt;, &lt;a href="https://twitter.com/Stammy/status/326199896971546625"&gt;running 16.6 miles&lt;/a&gt; to catch sunset on the beach, getting brunch on Sundays and &lt;a href="https://twitter.com/Stammy/status/328613425636847616"&gt;running into Sir Jony Ive&lt;/a&gt;, &lt;a href="https://twitter.com/Stammy/status/329114181053861888"&gt;taking photos&lt;/a&gt; or just relaxing. It's pretty neat.&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;The end (or half-way point, havent decided yet) to a perfect 7.77mi sunset run. :) &lt;a href="http://t.co/OXC2FnZO61" title="http://twitter.com/Stammy/status/326167818905198592/photo/1"&gt;twitter.com/Stammy/status/…&lt;/a&gt;&lt;/p&gt;&amp;mdash; Paul Stamatiou (@Stammy) &lt;a href="https://twitter.com/Stammy/status/326167818905198592"&gt;April 22, 2013&lt;/a&gt;&lt;/blockquote&gt;


&lt;script async src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;


&lt;br/&gt;


&lt;p&gt;I got rid of my car. I rarely used it and the monthly insurance payments were a constant reminder I had another thing to check on. Every so often I'd catch myself thinking something like this: "Oh I probably need to have the brakes checked soon", "I think I saw a nail in the tire, I should get that looked at", "tread seems low.. I should probably save up for new tires."&lt;/p&gt;

&lt;p&gt;I sold or tossed a &lt;em&gt;ton&lt;/em&gt; of stuff I didn't need, use or wear. I stopped wearing all those free startup shirts I gathered over the years and moved on to button-ups. I use Laundry Locker to deal with ironing them so I don't spend my Sundays doing &lt;a href="https://twitter.com/Stammy/status/295686095692242945"&gt;this&lt;/a&gt;. I buy toothpaste, shampoo and the like in bulk on Amazon so I don't have to remember to make monthly errands. I moved to a slimmer wallet and carry less stuff with me everywhere. I cancelled unnecessary monthly billed services so there's less to think about when I see my statements.&lt;/p&gt;

&lt;p&gt;I removed apps I didn't use daily from my phone's home screen and deleted ones I didn't use at least once a week. I &lt;a href="https://twitter.com/Stammy/status/328255897828720641"&gt;stopped checking into places on foursquare&lt;/a&gt; 10 times a day. I got into a regular workout routine and ran 102 miles &lt;em&gt;this month alone&lt;/em&gt;... I would have never had the time or patience to do that if I felt guilty I wasn't working.&lt;/p&gt;

&lt;p&gt;I've pushed everything else out of the way so I can focus on what I'm doing right now, living life.
&lt;/section&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/simplify" title="Simplify."&gt;Simplify.&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Hv_q1ANEdV8:jYNdCzSryAQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Hv_q1ANEdV8:jYNdCzSryAQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Hv_q1ANEdV8:jYNdCzSryAQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Hv_q1ANEdV8:jYNdCzSryAQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Hv_q1ANEdV8:jYNdCzSryAQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Hv_q1ANEdV8:jYNdCzSryAQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Hv_q1ANEdV8:jYNdCzSryAQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Hv_q1ANEdV8:jYNdCzSryAQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/Hv_q1ANEdV8" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/simplify</feedburner:origLink></entry>
	
	<entry>
		<title>Developing a responsive, Retina-friendly site (Part 2)</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/EnoJDeUwd8k/responsive-retina-blog-development-part-2" />
		<updated>2013-03-13T10:00:00-07:00</updated>
		<id>http://paulstamatiou.com/responsive-retina-blog-development-part-2</id>
		<content type="html">&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;This is the last part in my three-part series about the &lt;a href="http://paulstamatiou.com/responsive-retina-blog-design" title="Designing a responsive, Retina-friendly site"&gt;design&lt;/a&gt; and &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-1" title="Developing a responsive, Retina-friendly site (Part 1)"&gt;development&lt;/a&gt; of a responsive and so-called Retina-friendly website. While I have covered my development process, media queries for responsive development, and various JS libraries I use, I'm going to talk about images in much more depth in this article. In particular, I'll show how to use HiDPI image assets as well as cover responsive &lt;em&gt;images&lt;/em&gt; and some history around that.&lt;/p&gt;






&lt;h2&gt;Going HiDPI&lt;/h2&gt;


&lt;p&gt;So you want to do the easiest possible thing to get your website's header logo to look good on HiDPI devices and computers? Doing this in CSS is similar to loading an &lt;code class="inline"&gt;img&lt;/code&gt; twice as large as the height and width attributes of that tag.&lt;/p&gt;

&lt;p class="notice"&gt;From here on out I refer to all "retina" displays &amp; related ilk with the device-agnostic &lt;strong&gt;HiDPI&lt;/strong&gt; moniker. Oh and a fun tidbit: the iPhone 4/5 is no longer the highest DPI mobile device. The &lt;a href="http://www.theverge.com/2013/3/11/4086390/htc-one-review"&gt;HTC One's 1920x1080 4.7-inch display&lt;/a&gt; gives it a lusty 468ppi.&lt;/p&gt;


&lt;p&gt;I wanted icons and my large header avatar to be HiDPI display friendly. Load a background image that is twice as large as you want to display it and use &lt;code class="inline"&gt;background-size&lt;/code&gt; to constrain it to half of the image's width and height. Easy. &lt;strong&gt;But we don't want to load the HiDPI image all the time.&lt;/strong&gt; There's no need to waste bandwidth for regular displays.&lt;sup&gt;&lt;a href="#footnote-1" id="r1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;That's where media queries come in again. Below is a Sass mixin to do just that, based on &lt;a href="http://37signals.com/svn/posts/3271-easy-retina-ready-images-using-scss" title="easy retina ready images using scss"&gt;this post by 37signals&lt;/a&gt;, but modified to remove &lt;code class="inline"&gt;min--moz-device-pixel-ratio&lt;/code&gt; in favor of resolution as recommended by Mozilla. The W3C folks say the same thing about &lt;a href="http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/" title="How to unprefix -webkit-device-pixel-ratio"&gt;&lt;code class="inline"&gt;-webkit-device-pixel-ratio&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="c1"&gt;// 1.3 ratio because devices like Nexus 7, might as well give them @2x assets too&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; image-2x&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$width&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;-webkit-min-device-pixel-ratio&lt;/span&gt;&lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="nc"&gt;.3&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
         &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;-o-min-device-pixel-ratio&lt;/span&gt;&lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;13&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;10&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
         &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-resolution&lt;/span&gt;&lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;120dpi&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url($image)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;@if&lt;/span&gt; &lt;span class="nv"&gt;$width&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;auto&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="c1"&gt;// bg-size() is a mixin I use for properly prefixing background-size&lt;/span&gt;
      &lt;span class="c1"&gt;// for webkit, moz, o, ms&lt;/span&gt;
      &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; bg-size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$width&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage. stammy.png is 133px x 133px. stammy@2x.png is 266px x 266px&lt;/span&gt;
&lt;span class="c1"&gt;// background: url(&amp;#39;http://turbo.paulstamatiou.com/assets/stammy.png&amp;#39;) no-repeat 0 0;&lt;/span&gt;
&lt;span class="c1"&gt;// @include image-2x(&amp;#39;http://turbo.paulstamatiou.com/assets/stammy@2x.png&amp;#39;, 133px, 133px);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;h6&gt;What about icons?&lt;/h6&gt;


&lt;p&gt;That mixin only works for individual images so if you have more than a few items to show you'll probably want to avoid that many HTTP requests. For example, the 18 icons I use throughout the site. I could have created my own icon webfont with a nice tool like &lt;a href="http://fontcustom.com/" title="Font Custom Generate custom icon webfonts from the comfort of the command line."&gt;Font Custom&lt;/a&gt;, but decided against it for a few reasons.&lt;/p&gt;

&lt;p&gt;While an icon webfont would be retina-friendly right out of the gate,  &lt;strong&gt;browsers render fonts differently&lt;/strong&gt; and it may not look the same everywhere. Notably, icons from webfonts may appear blurry or have color fringing. And if you wanted a gradient on that icon (but why?!), you will need to resort to the typical &lt;code class="inline"&gt;gradient()&lt;/code&gt;, &lt;code class="inline"&gt;background-clip:text;&lt;/code&gt;, and &lt;code class="inline"&gt;text-fill-color: transparent;&lt;/code&gt; mayhem.&lt;sup&gt;&lt;a href="#footnote-2" id="r2"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;However, if you are really interested in getting icon fonts working and don't mind the labor of hinting them for the sizes you'll be using them at, then &lt;a href="http://blog.fogcreek.com/trello-uses-an-icon-font-and-so-can-you/" title="Trello uses an icon font and so can you!"&gt;you can get some pretty impressive results like this&lt;/a&gt;.&lt;sup&gt;&lt;a href="#footnote-3" id="r3"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;But I already know how to make PNG sprites so I went that route. Here's how I hooked up two of them:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="nc"&gt;.home&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.rss&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url(&amp;#39;icon-sprite.png&amp;#39;)&lt;/span&gt; &lt;span class="no"&gt;no-repeat&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Instead of saving multiple versions of the icon for different states, &lt;/span&gt;
  &lt;span class="c1"&gt;// I like just having a darker icon and restoring opacity on hover&lt;/span&gt;
  &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// constrain background-size by half. actual sprite width is 120px&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; bg-size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="no"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; transition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;opacity&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.2&lt;/span&gt;&lt;span class="kt"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.home&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;margin-right&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.5&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.rss&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;-38&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;-23&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I'm not actually using any media queries here to conditionally load a different sprite. I'm always loading the double-sized icon sprite. I wouldn't normally do this but the icons were small enough for bandwidth to not be a concern and the HiDPI version looked good enough on non-HiDPI displays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At least that's what I thought.&lt;/strong&gt; Even with the correct background-size halving and only using &lt;a href="http://dcurt.is/pixel-fitting" title="pixel fitting"&gt;pixel-fitted&lt;/a&gt; 2x icons were sized in even numbers (ie 48px by 48px should result in a 24px x 24px 1x icon), it still resulted in blurry icons. I could seemingly get around this by adjusting the background-size 1px smaller than it should need, but that felt wrong and that would make some icons crisp and turn others blurry.&lt;sup&gt;&lt;a href="#footnote-4" id="r4"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/03/pstam_2x_sprite_issues.png" alt="2x sprite issues"/&gt;
  &lt;figcaption&gt;Why you shouldn't &lt;em&gt;always&lt;/em&gt; load the retina version of your icons for regular displays; they can look blurry without triple checking that your icons are properly pixel-fitted and that they play nicely with being downsized (ie, with not only even numbers but with multiples of 4). Basically, they will look bad if you don't spend a good bit of time in Photoshop, so you're better off only using 2x assets for HiDPI displays.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;So back to Photoshop to &lt;strong&gt;create two separate sprites&lt;/strong&gt;: a 2x version and a 1x version. Working with sprites is usually a pain in the ass and working with two would prove to be a nightmare if you don't have a system for keeping it organized. Fortunately, Twitter Spritemaster™ &lt;a href="https://twitter.com/dbedingfield"&gt;Dave Bedingfield&lt;/a&gt; shared a few tips with me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a set of dividing lines for each icon and group related icons and icons of the same size/utility.&lt;/li&gt;
&lt;li&gt;Both the @2x HiDPI version and 1x version will live in the same cell and be aligned how you will end up using them in CSS (most likely top left, unless you use something like background-position: 50% 50%; in which case they should be centered). Proximity doesn't matter if you end up accessing each icon in it's own individual element (for example, an &lt;code class="inline"&gt;i&lt;/code&gt; with a width and height).&lt;/li&gt;
&lt;li&gt;The maximum width and height of the cell depends on the size of the larger @2x version.&lt;/li&gt;
&lt;li&gt;Even numbers are you friend. In my example below, icon coordinates are even numbers and icon widths and heights are as well.&lt;/li&gt;
&lt;li&gt;When saving both sprites, hide everything and only show 1x icons, save and then 2x icons.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I do it a bit differently from Twitter, they always load the @2x sprite. If you poke around on Twitter's mobile website you'll see there are different sprites for mobile and tablet. The main benefit of this approach is that every icon uses the exact same coordinates!&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/03/pstam_sprite_psd_howto.png" alt="PSTAM @2x and 1x retina how to"/&gt;
  &lt;figcaption&gt;I set the opacity of the 2x icons to 50% just for display. The sprites themselves are transparent with only one of the icons in each cell.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/03/pstam_imgoptim_sprites.png" alt="Imgoptim sprites"/&gt;
  &lt;figcaption&gt;You run every production PNG through &lt;a href="http://imageoptim.com/"&gt;ImageOptim&lt;/a&gt; right?&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;After saving and optimizing the sprites, it came time for the chore of writing the CSS and identifying all the icon coordinates. Fortunately a little website called &lt;a href="http://www.spritecow.com/"&gt;Sprite Cow&lt;/a&gt; makes this a bit easier than going around measuring things in Photoshop. Just upload the sprite, select each icon (no need to be accurate, it auto-selects) and it outputs the CSS.&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/03/pstam_spritecow.png" alt="Spritecow"/&gt;
  &lt;figcaption&gt;I'm only interested in the coordinates and width/heights, but Sprite Cow was often a pixel off in calculating the size so keep that in mind.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;And now for some Sass mixins of course.. here's a simple one to just identify high-DPI devices. You'll see it's similar to the image-2x() mixin from earlier but doesn't concern itself with the background image.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; retina&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;-webkit-min-device-pixel-ratio&lt;/span&gt;&lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="nc"&gt;.3&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; 
  &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;-o-min-device-pixel-ratio&lt;/span&gt;&lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;13&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;10&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; 
  &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-resolution&lt;/span&gt;&lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;120dpi&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Then I created a two Sass variables to keep track of the sprite URLs so I didn't have to keep pasting that around for every icon.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="nv"&gt;$sprite_url_2x&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://turbo.paulstamatiou.com/assets/pstam-sprite-v2-@2x.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$sprite_url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://turbo.paulstamatiou.com/assets/pstam-sprite-v2.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; retina-sprite&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url($sprite_url_2x)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; bg-size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;225&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// my sprite dimensions, halved&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// silly function to divide the width and height to save me 2 seconds&lt;/span&gt;
&lt;span class="c1"&gt;// whenever I need to calculate the halved retina background position&lt;/span&gt;
&lt;span class="k"&gt;@function&lt;/span&gt; &lt;span class="nt"&gt;half-pos&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;w&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;h&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;@return&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;w&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;h&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Finally, here's how this all ties together to display some of the icons in my header:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="nc"&gt;.photos&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.posts&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.about&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.search&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url($sprite_url)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;background-repeat&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;no-repeat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; retina&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; retina-sprite&lt;/span&gt;&lt;span class="p"&gt;;}&lt;/span&gt;
  &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;inline&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="no"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.about&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;-100&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; retina&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;half-pos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;-100&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.posts&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;-150&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; retina&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;half-pos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;-150&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.photos&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;-200&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; retina&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;half-pos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;-200&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.search&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;-256&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; retina&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;half-pos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;-256&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;That's it! HiDPI devices will load the @2x sprite and accordingly set the proper background-position to load the right icon. Regular devices will load the 1x sprite and respective icons.&lt;/p&gt;

&lt;p&gt;As you read in &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-1"&gt;Developing a responsive, Retina-friendly site (Part 1)&lt;/a&gt;, the side effect of using Sass @media bubbling and @content blocks like this retina mixin is you get compiled CSS with lots of extra media queries. The snippet above will end up compiling to five of the same retina media query. I'll leave it as an exercise to the reader about how to rewrite it to save bandwidth.&lt;/p&gt;

&lt;h6&gt;Don't forget the Retina favicon!&lt;/h6&gt;


&lt;p&gt;And of course, we can make a HiDPI favicon.ico. Create both a 16x16 and a 32x32 png and import the into &lt;a href="http://xiconeditor.com/"&gt;x-icon editor&lt;/a&gt;. It will let you export a single .ico with all size variants baked in.&lt;/p&gt;

&lt;p&gt;&lt;figure class="center auto"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/retina-favicon-pstam.png" alt="Retina favicon pstam"/&gt;
  &lt;figcaption&gt;For comparison the YouTube favicon is not Retina and noticeably pixelated&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;There's a lot more to cover with HiDPI image assets, but I'd rather point you to &lt;a href="http://retinafy.me/" title="Retinafy your web sites &amp; apps"&gt;Thomas Fuchs' excellent Retinafy ebook&lt;/a&gt; than trying to summarize it here.&lt;/p&gt;

&lt;hr class="article"/&gt;


&lt;h2&gt;Responsive Images&lt;/h2&gt;


&lt;p&gt;Responsive design doesn't just stop at adjusting layout. It also applies to dealing with images. Up until now most web developers would add &lt;code class="inline"&gt;max-width: 100%;&lt;/code&gt; to their images and call it a day (so-called "fluid/flexible images"). But now with more devices with higher PPIs in use, we can do better.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam-responsive-image-iphone.jpg" alt="Responsive Images on PaulStamatiou.com Photo pages"/&gt;&lt;/div&gt;


&lt;p&gt;My interest in responsive images began when I was reading through Medium.com's source, as &lt;a href="http://blog.jazzychad.net/2011/03/27/hacking-twitters-javascript.html" title="Hacking Twitter's Javascript"&gt;some nerds&lt;/a&gt; are wont to do when bored. Despite the fact that they use &lt;code class="inline"&gt;font-smoothing: antialiased;&lt;/code&gt; (&lt;a href="http://www.usabilitypost.com/2012/11/05/stop-fixing-font-smoothing/" title="Please stop fixing font smoothing"&gt;read this&lt;/a&gt;) and &lt;code class="inline"&gt;text-rendering: optimizeLegibility;&lt;/code&gt; (&lt;a href="http://www.marco.org/2012/11/15/text-rendering-optimize-legibility" title="fatal performance problems on mobile devices optimizeLegibility"&gt;a performance pitfall on mobile&lt;/a&gt;; only use for headers), I kept poking around&lt;sup&gt;&lt;a href="#footnote-5" id="r5"&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_medium_trueman_src.jpg" alt="Medium.com Website"/&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I noticed their header image had a unique URL that changed when I resized my browser and reloaded the page. Looking at the image response headers showed nginx as the server and a &lt;code class="inline"&gt;Via&lt;/code&gt; of Amazon Cloudfront. Looks like they're using nginx's image filter module to do the on-the-fly resizing and utilizing it as an origin for Cloudfront, but I digress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why should mobile visitors still waste bandwidth loading the same 1000px image you display for desktop visitors?&lt;/strong&gt; What about desktop visitors tethered to a slow connection? They shouldn't have to wait for the 2x HiDPI version of that large image to load. As you can imagine there are other edge cases mixed in here too. We should loading HiDPI assets for mobile devices that support it and everything in between (depending on the breakpoints) to provide properly sized images and forgoing the old manner of simply downsizing images with CSS.&lt;/p&gt;

&lt;p&gt;Technically this is simply &lt;em&gt;adaptive images&lt;/em&gt; and that's what you'll find most often when researching this &amp;mdash; providing several versions (for example 4 sizes) of the same image and then having the browser select the proper one to load depending on conditions like media query breakpoints&lt;sup&gt;&lt;a href="#footnote-6" id="r6"&gt;6&lt;/a&gt;&lt;/sup&gt;. A true responsive images solution would serve up the exact size needed with the help of server-side image resizing and caching. More on that later.&lt;/p&gt;

&lt;p&gt;I want photos on my photos pages to be crisp all the time &amp;mdash; something that should be possible given the user's bandwidth, browser width/screen resolution and device pixel ratio. If we know they are on a slow connection, we can load a lower quality version.&lt;/p&gt;

&lt;h4&gt;&lt;del&gt;Brief&lt;/del&gt; History of Responsive Images&lt;/h4&gt;


&lt;p&gt;So I read pretty much everything the Internet has to offer about responsive images, including &lt;a href="http://usecases.responsiveimages.org/pub/WD_15Jan2013.html"&gt;W3C drafts&lt;/a&gt;, &lt;a href="http://www.w3.org/community/respimg/2012/06/18/florians-compromise/" title="w3c respimg Responsive Images... Florian’s Compromise"&gt;W3C respimg Community Group discussions&lt;/a&gt; et cetera. There are several ways to get it working right now but there is &lt;strong&gt;no great solution&lt;/strong&gt;. The &lt;code class="inline"&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag wasn't built with this in mind.&lt;/p&gt;

&lt;p&gt;It all started with folks in 2010 using HTML5 data attributes like &lt;code class="inline"&gt;data-fullsrc&lt;/code&gt; in &lt;code class="inline"&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags to provide an alternate, high-resolution version of the same image. Some JavaScript would loop through the images and swap in the fullsrc for src if certain conditions like browser width were met. However, clients destined to load the larger image ended up making a request for the first image before the JavaScript kicked in, resulting in additional HTTP requests and bandwidth usage. To counteract this people started using server-side rewrite rules to catch issues like that and load tiny spacer gifs instead so there wouldn't be much of a penalty for the first request. For that to work, it depended on a cookie checked by the server with the client's resolution. It was a mess, but it worked.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mobile-version.jpeg&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;data-fullsrc=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;desktop-version.jpeg&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Then browser advancements introduced the lookahead pre-parser that helped browsers load pages more quickly by fetching all page assets before the HTML finished loading and before JavaScript can run. The browser's image prefetching would break that aforementioned server-side redirect created to reduce the penalties associated with making two requests.&lt;/p&gt;

&lt;p&gt;There-in lies the entire problem with getting responsive images to work today:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;How do we reconcile a pre-parser that wants to know what size image to download ahead of time with an image technique that wants to respond to its environment once the page layout has been calculated?&lt;/p&gt; &lt;a href="http://blog.cloudfour.com/the-real-conflict-behind-picture-and-srcset/" title="The real conflict behind &lt;picture&gt; and @srcset"&gt;Jason Grigsby&lt;/a&gt;&lt;/blockquote&gt;




&lt;h4&gt;Where are we now?&lt;/h4&gt;


&lt;p&gt;Based on those trials and tribulations, developers started coming up with other ways to solve this with the &lt;code class="inline"&gt;img&lt;/code&gt; tag. Some folks thought about not even setting a src so there was no prefetching penalty, having JavaScript load in the appropriate image from data attributes, and setting another image tag inside a &lt;code class="inline"&gt;noscript&lt;/code&gt; as a fallback for visitors with JavaScript disabled.&lt;/p&gt;

&lt;p&gt;Unfortunately that has SEO implications on its own (no src), can cause ugly page reflowing as the images begin loading,  and results in a slower page load from lack of prefetching. Matt Cutts has said that Google tends not to look at content inside of noscript tags due to noscript abuse from spammers.&lt;/p&gt;

&lt;p&gt;Then &lt;a href="http://lists.w3.org/Archives/Public/public-html/2011May/0386.html" title="w3c mailing list Adaptive images by Dominique Hazael-Massieux"&gt;developers started thinking&lt;/a&gt;, well what if we extend &lt;code class="inline"&gt;img&lt;/code&gt; to support a &lt;code class="inline"&gt;sourcelist&lt;/code&gt; of &lt;code class="inline"&gt;source&lt;/code&gt;s to choose from? It would be more semantic and utilize media queries to determine the version of the image to load instead of depending on JavaScript.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;default.jpg&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;srclist=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;alternativeSizes&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Picture of Unicorn&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;sourcelist&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;alternativeSizes&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;big.jpg&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;min-width: 600px&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;600&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;small.jpg&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;max-width: 600px&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;320&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;320&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/sourcelist&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;That seems to have evolved into the W3C-proposed &lt;code class="inline"&gt;srcset&lt;/code&gt; attribute for &lt;code class="inline"&gt;img&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;banner.jpeg&amp;quot;&lt;/span&gt;
     &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;banner-HD.jpeg 2x, banner-phone.jpeg 100w, banner-phone-HD.jpeg 100w 2x&amp;quot;&lt;/span&gt; 
     &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;The &lt;code class="inline"&gt;srcset&lt;/code&gt; attribute contains up to three optional URLs and accompanying descriptors for different versions of the image to load. In this example, the 2x descriptor denotes a "maximum pixel density of 2 device pixels per CSS pixel" and 100w means "maximum viewport width of 100 CSS pixels."&lt;/p&gt;

&lt;p&gt;Another suggestion around this time was creating a new image format entirely; one that points to alternative resolutions. Googler Ilya Grigorik recently &lt;a href="http://www.igvita.com/2012/12/18/deploying-new-image-formats-on-the-web/" title="Deploying New Image Formats on the Web"&gt;wrote about this kind of solution (content negotiation)&lt;/a&gt; at length&lt;/a&gt;. It turns out this is also something the W3C seems to be okay with in their recently updated &lt;a href="http://usecases.responsiveimages.org/pub/WD_15Jan2013.html" title="Use Cases and Requirements for Standardizing Responsive Images"&gt;Use Cases and Requirements for Standardizing Responsive Images&lt;/a&gt; draft:&lt;/p&gt;

&lt;blockquote&gt;The solution MUST NOT require server-side processing to work. However, if required, server-side adaptation can still occur through content negotiation or similar techniques&lt;/blockquote&gt;


&lt;p&gt;If all this wasn't confusing enough, Apple decided that people were having too much fun without them and decided to put their hat in the ring with &lt;a href="http://lists.w3.org/Archives/Public/www-style/2012Feb/1103.html" title="[css4-images] The image-set() function (for responsive images)"&gt;a proposal for CSS4 &lt;code class="inline"&gt;image-set&lt;/code&gt;&lt;/a&gt;. It's pretty much the same concept as &lt;code class="inline"&gt;srcset&lt;/code&gt; but in CSS. The problem there is that folks will just start converting their &lt;code class="inline"&gt;img&lt;/code&gt; tags to &lt;code class="inline"&gt;div&lt;/code&gt;s utilizing &lt;code class="inline"&gt;image-set&lt;/code&gt; for background images in CSS, thereby removing &lt;code class="inline"&gt;alt&lt;/code&gt; text (&lt;code class="inline"&gt;div&lt;/code&gt;s can't have &lt;code class="inline"&gt;alt&lt;/code&gt; text) and throwing all accessibility out the window.&lt;/p&gt;

&lt;h4&gt;&lt;code class="inline"&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; the future of responsive images&lt;/h4&gt;


&lt;p&gt;It seems like developers on the W3C and W3C Responsive Images Community Group are leaning towards the proposed &lt;code class="inline"&gt;picture&lt;/code&gt; element. In a &lt;a href="http://picture.responsiveimages.org/pub/WD_15Jan2013.html#example-of-usage"&gt;W3C Working Draft for the picture element&lt;/a&gt;, syntax utilizes a simplified &lt;code class="inline"&gt;srcset&lt;/code&gt; tag restricted to only carrying information about images for devices with different pixel densities per &lt;code class="inline"&gt;source&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;picture&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;500&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;500&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;(min-width: 45em)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;large-1.jpg 1x, large-2.jpg 2x&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;(min-width: 18em)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;med-1.jpg 1x, med-2.jpg 2x&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;small-1.jpg 1x, small-2.jpg 2x&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- img is the fallback --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;small-1.jpg&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Accessible text&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;This seems to be the current state of responsive images&lt;/strong&gt;. I probably got the order of some of these thing wrong, so don't hold me to it exactly. The &lt;code class="inline"&gt;picture&lt;/code&gt; element looks promising but has a few limitations in my eyes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's rather verbose and will be rather confusing for new developers.&lt;/li&gt;
&lt;li&gt;Media queries have no sense for bandwidth available to the browser so this will hypothetically still load a large 2x image on a HiDPI-capable device even if it's on a slow connection.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Media queries can bring some interesting affordances including device pixel ratios and the &lt;a href="http://dev.w3.org/csswg/mediaqueries4/#luminosity"&gt;upcoming luminosity media feature&lt;/a&gt;, but bandwidth is not one of them. Aside from a manual bandwidth test, the only hope is either waiting for browsers to get smarter about picking the right image source given what it knows about the available bandwidth or letting sites access something like &lt;a href="https://developer.mozilla.org/en-US/docs/DOM/window.navigator.connection" title="window.navigator.connection in the DOM"&gt;navigator.connection&lt;/a&gt;&lt;sup&gt;&lt;a href="#footnote-7" id="r7"&gt;7&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;h4&gt;I'm using foresight.js for now&lt;/h4&gt;


&lt;p&gt;While I'm waiting for &lt;code class="inline"&gt;picture&lt;/code&gt; to get implemented in all major browsers &lt;sup&gt;&lt;a href="#footnote-8" id="r8"&gt;8&lt;/a&gt;&lt;/sup&gt;, I decided to use one of the more popular responsive image solutions:&lt;/p&gt;

&lt;blockquote&gt;&lt;a href="https://github.com/adamdbradley/foresight.js" title="Foresight.js"&gt;Foresight.js&lt;/a&gt; gives webpages the ability to tell if the user's device is capable of viewing high-resolution images (such as the 3rd generation iPad) before the image has been requested from the server. Additionally, it runs a bandwidth test to see if the user's device should load high-resolution images. Depending on the display and network connectivity, foresight will request the appropriate image for the webpage.&lt;/blockquote&gt;


&lt;p&gt;Foresight can be configured for a number of different responsive image setups ranging from simply swapping out an image with a higher resolution version all the way to requesting an image the exact width of the client's browser. I went with the latter.&lt;/p&gt;

&lt;p&gt;Here's the markup for the image itself. Notice how the &lt;code class="inline"&gt;img&lt;/code&gt; tag doesn't have a &lt;code class="inline"&gt;src&lt;/code&gt; specified. It gets added after foresight evaluates the environment and decides what image version to load. (The curly braces are just my Jekyll liquid tags.)&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;figure&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;feature-image loading&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fs-img&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.cdn}}{{page.image_lg}}?w=1400&amp;quot;&lt;/span&gt; 
       &lt;span class="na"&gt;data-width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{page.photo_width}}&amp;quot;&lt;/span&gt; 
       &lt;span class="na"&gt;data-height=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{page.photo_height}}&amp;quot;&lt;/span&gt; 
       &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{page.title}}&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;figcaption&amp;gt;&lt;/span&gt;Example caption goes here&lt;span class="nt"&gt;&amp;lt;/figcaption&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;noscript&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.cdn}}{{page.image_lg}}?w=1400&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{page.title}}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/noscript&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/figure&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now here's where it gets a little hacky. All foresight images are assigned a CSS class that uses &lt;code class="inline"&gt;font-family&lt;/code&gt; to store an &lt;code class="inline"&gt;image-set&lt;/code&gt; value. As Foresight developer &lt;a href="http://twitter.com/adamdbradley" title="Adam Bradley"&gt;Adam Bradley&lt;/a&gt; states, "font-family is one of the few CSS properties which lets you enter free-text in the value and the browsers still consider it valid, which makes the value viewable by the DOM and javascript (yup, even IE doesn't care)."&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="css"&gt;&lt;span class="nc"&gt;.fs-img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;max-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1400px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;font-family&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;image-set( url(w=1400|w={requestWidth}) )&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;The value I have for &lt;code class="inline"&gt;image-set()&lt;/code&gt; is a little cryptic on its own too. It makes use of foresight's URI Find/Replace functionality. It looks for the string "w=1400" in my image &lt;code class="inline"&gt;data-src&lt;/code&gt; and replaces that with the actual width of the client (this also takes into account HiDPI resolutions).&lt;/p&gt;

&lt;p&gt;But what is that query string param in my image URL? Well here's the other hacky part &amp;mdash; &lt;strong&gt;I'm using a service to on-the-fly resize and cache the image for &lt;em&gt;exactly&lt;/em&gt; the request.&lt;/strong&gt; For example, if your browser is 837px wide, it will change that width param in the URL to 837. If you're on a Retina MacBook Pro, that request will be for a 1674px wide image. I just dump a fairly large image on the service and it does the rest for me. And if I make my browser wider, foresight will automatically request a larger version of the image to swap in!&lt;sup&gt;&lt;a href="#footnote-9" id="r9"&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;On the photos index page, I use foresight differently and only have it swap in 2x high-res images for HiDPI devices. I'll discuss the query string parameters at the end of all those image urls below.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;{% for photo in site.photos offset: 1 %}
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;figure&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;in-photo-list&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;photo_item&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.base_url}}{{photo.url}}&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{photo.title}}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- the fs-thumb class is simply display: none; --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{photo.title}}&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fs-thumb&amp;quot;&lt;/span&gt;
             &lt;span class="na"&gt;data-high-resolution-src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.cdn}}{{photo.image_lg}}?w=333&amp;amp;h=333&amp;amp;fit=crop&amp;amp;q=75&amp;amp;dpr=2&amp;quot;&lt;/span&gt; 
             &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.cdn}}{{photo.image_lg}}?w=333&amp;amp;h=333&amp;amp;fit=crop&amp;amp;q=75&amp;quot;&lt;/span&gt; 
             &lt;span class="na"&gt;data-width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;333&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;data-height=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;333&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;noscript&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.cdn}}{{photo.image_lg}}?w=333&amp;amp;h=333&amp;amp;fit=crop&amp;amp;q=75&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{photo.title}}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/noscript&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;figcaption&amp;gt;&lt;/span&gt;{{ photo.title }}&lt;span class="nt"&gt;&amp;lt;/figcaption&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/figure&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
{% endfor %}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I do feel a bit guilty about this solution, especially as having any server-side processing is one of the no no's mentioned in the W3C &lt;code class="inline"&gt;picture&lt;/code&gt; proposal. It's just introducing another point of failure. It works pretty well right now and it's not like I can use &lt;code class="inline"&gt;picture&lt;/code&gt; yet.&lt;/p&gt;

&lt;p&gt;I'm not using it in blog post articles just yet. As an FYI, if you do decide to use a similar solution for your jekyll posts, you'll need to write a filter for your RSS feed otherwise the images won't load for RSS readers since there's no &lt;code class="inline"&gt;src&lt;/code&gt; and no foresight JavaScript to run.&lt;/p&gt;

&lt;h4&gt;On-the-fly image resizing and caching with imgix&lt;/h4&gt;


&lt;p&gt;After I poked around and found out how Medium started doing some of this, I started brainstorming about how I could do it. A number of solutions surfaced from the same nginx image filter setup with Cloudfront to something utilizing the dragonfly gem but at the end of the day I don't want to manage yet another thing.&lt;/p&gt;

&lt;p&gt;I'm using &lt;a href="http://www.imgix.com/" title="imgix on the fly image resizing"&gt;imgix&lt;/a&gt;, a service from a fellow Y Combinator batchmate. Setup was ridiculously easy. I just had to create AWS IAM user credentials with read-only access for the Amazon S3 bucket where I store my images. Something like this:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="json"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;quot;Statement&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;quot;Effect&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Allow&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;quot;Action&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;s3:GetBucketAcl&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;s3:GetObject&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;s3:GetObjectAcl&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;s3:ListBucket&amp;quot;&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;quot;Resource&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
        &lt;span class="s2"&gt;&amp;quot;arn:aws:s3:::YOURBUCKETNAMEHERE&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;arn:aws:s3:::YOURBUCKETNAMEHERE/*&amp;quot;&lt;/span&gt; 
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I gave that and its accompanying AWS access key and secret to imgix. Then all I had to do was replace the host for my images to my newly created &lt;code class="inline"&gt;stammy.imgix.net&lt;/code&gt;. The rest of the path remains the same.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="c1"&gt;# old URL, with Cloudfront CNAME&lt;/span&gt;
&lt;span class="ss"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="n"&gt;turbo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;paulstamatiou&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;uploads&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2012&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;santa_cruz_beach&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jpg&lt;/span&gt;

&lt;span class="c1"&gt;# new imgix url&lt;/span&gt;
&lt;span class="ss"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sr"&gt;//s&lt;/span&gt;&lt;span class="n"&gt;tammy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imgix&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;uploads&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2012&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;santa_cruz_beach&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jpg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;With imgix setup, I can now easily manipulate the image by adding various query string params for their image URL API like w for width, q for quality, dpr for device pixel ratio &lt;a href="http://www.imgix.com/docs/urlapi" title="imgix image url api"&gt;and so on&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Speeding up my photo posting flow&lt;/h4&gt;


&lt;p&gt;One asterisk when it comes to using foresight is that it needs to know the image aspect ratio for each photo so you must provide it with &lt;code class="inline"&gt;data-width&lt;/code&gt; and &lt;code class="inline"&gt;data-height&lt;/code&gt; attributes in the markup. This can be rather annoying to manually add every time I post a new photograph with Jekyll. I was already manually adding several other attributes for my photo layout, like camera type and post processing software used.&lt;/p&gt;

&lt;p&gt;I decided to write up a quick rake task to automate the creation of each new photo post &amp;mdash; upload the image to S3, grab any relevant EXIF data, fetch an address if the EXIF has GPS coordinates and finally create the file and open it up in Sublime Text 2 for me to begin writing.&lt;sup&gt;&lt;a href="#footnote-10" id="r10"&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="c1"&gt;# usage: rake s3p title=&amp;quot;My Photo&amp;quot; slug=&amp;quot;my-photo-seo-keywords&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;upload photo in _new_photo dir and create new photo post with image URL as image_lg attribute&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:s3p&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;exifr&amp;#39;&lt;/span&gt;
  &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;open-uri&amp;#39;&lt;/span&gt;
  &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;json&amp;#39;&lt;/span&gt;

  &lt;span class="n"&gt;photo_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/Users/Stammy/Documents/_new_photo/&amp;quot;&lt;/span&gt;
  &lt;span class="n"&gt;month&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;%m&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;%Y&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;# upload image(s) to S3 via http://s3tools.org/s3cmd&lt;/span&gt;
  &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;s3cmd put --acl-public --guess-mime-type &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;photo_dir&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;* s3://my-s3-cloudfront-bucket/uploads/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&amp;quot;&lt;/span&gt;
  
  &lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;photo_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;# glob goes by alpha&lt;/span&gt;
  &lt;span class="n"&gt;images&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*.{jpg}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;# in case I&amp;#39;m uploading multiple images for a single photo post, only pull exif from first&lt;/span&gt;
  &lt;span class="n"&gt;main_img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ss"&gt;EXIFR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:JPEG&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main_img&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exif?&lt;/span&gt;
    &lt;span class="c1"&gt;# used to set data-width/data-height as needed for foresight.js&lt;/span&gt;
    &lt;span class="n"&gt;exif&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;EXIFR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:JPEG&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main_img&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;camera_model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;EOS &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;photo_w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;
    &lt;span class="n"&gt;photo_h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;
    &lt;span class="n"&gt;is_portrait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;photo_h&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;photo_w&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
    &lt;span class="n"&gt;is_mobile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Apple&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
    &lt;span class="n"&gt;photo_e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exposure_time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt;
    &lt;span class="n"&gt;photo_f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;f_number&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_f&lt;/span&gt;
    &lt;span class="n"&gt;photo_mm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;focal_length&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_i&lt;/span&gt;
    &lt;span class="n"&gt;photo_iso&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iso_speed_ratings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt;
    &lt;span class="n"&gt;photo_pp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;software&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot; (Macintosh)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Photoshop &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nil?&lt;/span&gt;
      &lt;span class="c1"&gt;# turn gps coords into address&lt;/span&gt;
      &lt;span class="n"&gt;coords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latitude&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;exif&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;longitude&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt;
      &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://maps.google.com/maps/api/geocode/json?latlng=&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;coords&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;sensor=false&amp;quot;&lt;/span&gt;
      &lt;span class="n"&gt;photo_gps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;results&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;formatted_address&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="n"&gt;photo_gps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="n"&gt;post_process&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;photo_pp&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Adobe Lightroom 4&amp;quot;&lt;/span&gt;
  &lt;span class="n"&gt;photo_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;uploads/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;main_img&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

  &lt;span class="c1"&gt;# and create the photo file &lt;/span&gt;
  &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;New Title&amp;quot;&lt;/span&gt;
  &lt;span class="n"&gt;tstamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt;
  &lt;span class="n"&gt;slug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;slug&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;downcase&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;downcase&lt;/span&gt;
  &lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/Users/Stammy/code/pstam-blog/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;_photos&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%Y-%m-%d&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;slug&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.markdown&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;-&lt;/span&gt;&lt;span class="no"&gt;HTML&lt;/span&gt;
&lt;span class="sh"&gt;--- &lt;/span&gt;
&lt;span class="sh"&gt;layout: photo&lt;/span&gt;
&lt;span class="sh"&gt;type: photo&lt;/span&gt;
&lt;span class="sh"&gt;title: &amp;quot;#{title}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;date: #{tstamp}&lt;/span&gt;
&lt;span class="sh"&gt;description: &amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;image_lg: &amp;quot;#{photo_url}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;photo_width: &amp;quot;#{photo_w}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;photo_height: &amp;quot;#{photo_h}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;camera: &amp;quot;#{camera_model}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;photo_exposure: &amp;quot;#{photo_e}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;photo_iso: &amp;quot;#{photo_iso}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;photo_mm: &amp;quot;#{photo_mm}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;photo_focal: &amp;quot;#{photo_f}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;photo_gps: &amp;quot;#{photo_gps}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;post: &amp;quot;#{post_process}&amp;quot;&lt;/span&gt;
&lt;span class="sh"&gt;mobile: #{is_mobile}&lt;/span&gt;
&lt;span class="sh"&gt;portrait: #{is_portrait}&lt;/span&gt;
&lt;span class="sh"&gt;---&lt;/span&gt;

&lt;span class="no"&gt;HTML&lt;/span&gt;
  &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;new file generated in &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="nb"&gt;system&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;sublime &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam-photo-gps-silhouette.jpg" alt="photo with extra metadata"/&gt;
  &lt;figcaption&gt;Photo page with extra metadata shown on hover &amp;ndash; location, aperture, exposure, ISO, etc&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;h4&gt;What's next with images?&lt;/h4&gt;


&lt;p&gt;As I mentioned above, I'm only using responsive images on my photos pages for now. I'd rather not end up with hundreds of blog posts to change when a particular solution to responsive images becomes a standard. That being said, I do use &lt;a href="https://github.com/adamdbradley/focal-point" title="focal point"&gt;focal-point CSS&lt;/a&gt; in some of my blog posts and pages. Focal Point lets you add classes to your images that crop the image when triggered by a media query breakpoint.&lt;/p&gt;

&lt;p&gt;This is an attempt to address "art direction" outlined by the W3C in responsive images:&lt;/p&gt;

&lt;blockquote&gt;In a responsive design, it is typical to change an image so it can be targeted towards the features of a particular display (or set of displays). Sometimes this means cropping an image.&lt;/blockquote&gt;


&lt;p&gt;&lt;figure class="center focal-point"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/w3c_resp_img_art_direction.jpg" alt="W3C responsive images art direction"/&gt;
  &lt;figcaption&gt;If the full size of that image was simply scaled down on mobile, Bo would be tiny. Art direction suggests smart cropping of the subject for various devices.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;It's just CSS that hides part of the image so that as it gets smaller, it crops in on the area you specify as being the focal point (get it?) of the image. One side effect of this particular implementation is that it hides captions below the image when the media query gets triggered. Focal point is only an aesthetic solution, a true one would address bandwidth concerns as well and load a different, cropped image for smaller displays. Now you can see much more there is to go with this whole "responsive" thing huh? It's just getting interesting.&lt;/p&gt;

&lt;h6&gt;Let me know what you think!&lt;/h6&gt;


&lt;p&gt;Comments and feedback keep me going and writing articles like this. Drop me a comment below, &lt;strong&gt;&lt;a href="https://twitter.com/intent/tweet?original_referer=http%3A%2F%2Fpaulstamatiou.com%2Fresponsive-retina-blog-development-part-2&amp;text=Developing%20a%20responsive%2C%20Retina-friendly%20site%20(Part%202)%20%E2%80%94%20PaulStamatiou.com&amp;tw_p=tweetbutton&amp;url=http%3A%2F%2Fpaulstamatiou.com%2Fresponsive-retina-blog-development-part-2&amp;via=Stammy" target="_blank"&gt;share this post&lt;/a&gt;&lt;/strong&gt; if you enjoyed it and &lt;a href="http://twitter.com/stammy"&gt;shoot me a tweet&lt;/a&gt;. I'd love to hear from you.&lt;/p&gt;

&lt;p class="notice"&gt;&lt;strong&gt;Note:&lt;/strong&gt; Be sure to check out &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-1" title="Developing a responsive, Retina-friendly site Part 1"&gt;part 1 of the development track of this series&lt;/a&gt; and the &lt;a href="http://paulstamatiou.com/responsive-retina-blog-design"&gt;initial design post that started it all&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;section name="footnotes" id="footnotes"&gt;
  &lt;p id="footnote-1"&gt;&lt;a href="#r1"&gt;1&lt;/a&gt; This works because browsers only load images referenced in a CSS file when the appropriate class/id is used in markup on that page. In other words, there's no harm (aside from extra request/latency/etc) in having multiple versions of an image referenced in CSS.&lt;/p&gt;
  &lt;p id="footnote-2"&gt;&lt;a href="#r2"&gt;2&lt;/a&gt; Or &lt;a href="http://blogs.adobe.com/webplatform/2013/02/19/improving-css-text-decorations/" title="Improving CSS text decorations"&gt;if SVG is your thing&lt;/a&gt;... &lt;/p&gt;
  &lt;p id="footnote-3"&gt;&lt;a href="#r3"&gt;3&lt;/a&gt; Related: An interested A List Apart read, &lt;a href="http://alistapart.com/article/the-era-of-symbol-fonts"&gt;The Era of Symbol Fonts&lt;/a&gt; with some interesting ways to use ligatures to your advantage when thinking about icon webfonts.&lt;/p&gt;
  &lt;p id="footnote-4"&gt;&lt;a href="#r4"&gt;4&lt;/a&gt; Though in hindsight I didn't really investigate the cause of the 2x being blurry on a regular display &lt;em&gt;too&lt;/em&gt; much because I knew I wanted to do it the proper two sprite, media query way regardless. I'd say that I probably could have tweaked the icons a bit more and fidget with the insides to make them work at the sizes I wanted -- the equivalent of font hinting I guess you could say.&lt;/p&gt;
  &lt;p id="footnote-5"&gt;&lt;a href="#r5"&gt;5&lt;/a&gt; I'm a total hypocrite and use antialiased font-smoothing on this site for the time being.&lt;/p&gt;
  &lt;p id="footnote-6"&gt;&lt;a href="#r6"&gt;6&lt;/a&gt; Though quite confusingly there is a responsive images solution named Adaptive Images.&lt;/p&gt;
  &lt;p id="footnote-7"&gt;&lt;a href="#r7"&gt;7&lt;/a&gt; which some Android mobile browsers have&lt;/p&gt;
  &lt;p id="footnote-8"&gt;&lt;a href="#r8"&gt;8&lt;/a&gt; without the need for a polyfill like &lt;a href="https://github.com/scottjehl/picturefill" title="responsive images via picture tag - polyfill"&gt;picturefill&lt;/a&gt;, which isn't quite seamless as it requires different markup conventions.. that you'd have to end up fixing in a few years when picture is fully supported.&lt;/p&gt;
  &lt;p id="footnote-9"&gt;&lt;a href="#r9"&gt;9&lt;/a&gt; Definitely overkill and a more reasonable solution would be to round up to the nearest 100px and request that size, increasing likelihood that size has already been requested by other visitors before and is cached by the resizer. This is what Medium.com does.&lt;/p&gt;
  &lt;p id="footnote-10"&gt;&lt;a href="#r10"&gt;10&lt;/a&gt; Though in hindsight I might need to edit this to take the EXIF data and then use something like pngcrush to optimize the image for posting to the web (even though I use imgix for resizing, it'll save me storage costs in the longrun). &lt;/p&gt;
&lt;/section&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-2" title="Developing a responsive, Retina-friendly site (Part 2)"&gt;Developing a responsive, Retina-friendly site (Part 2)&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=EnoJDeUwd8k:7VTy1jJ7jIk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=EnoJDeUwd8k:7VTy1jJ7jIk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=EnoJDeUwd8k:7VTy1jJ7jIk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=EnoJDeUwd8k:7VTy1jJ7jIk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=EnoJDeUwd8k:7VTy1jJ7jIk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=EnoJDeUwd8k:7VTy1jJ7jIk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=EnoJDeUwd8k:7VTy1jJ7jIk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=EnoJDeUwd8k:7VTy1jJ7jIk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/EnoJDeUwd8k" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/responsive-retina-blog-development-part-2</feedburner:origLink></entry>
	
	<entry>
		<title>My Setup</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/7taCMEmXA_k/my-setup" />
		<updated>2013-02-18T00:10:01-08:00</updated>
		<id>http://paulstamatiou.com/my-setup</id>
		<content type="html">&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I have always been a fan of &lt;a href="http://usesthis.com/"&gt;The Setup&lt;/a&gt; and have been maintaining my own &lt;a href="http://paulstamatiou.com/stuff-i-use"&gt;Stuff I Use&lt;/a&gt; page for some years now so it only made sense that I would eventually write my own such article. &lt;strong&gt;This is how I work and what I use to do it.&lt;/strong&gt; If you have any questions please leave a comment below or reach out to me on &lt;a href="http://twitter.com/stammy"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;






&lt;h2&gt;Who are you, and what do you do?&lt;/h2&gt;


&lt;p&gt;Hi, I'm Paul Stamatiou and I am designer and front-end developer in San Francisco. I enjoy photography, writing and running. I love clean and simple things, from products to workspaces. I am an experience designer focusing on growth at Twitter.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/02/pstam_mt_diablo.jpg" alt="Paul Stamatiou on Mt diablo"/&gt;&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;h2&gt;What hardware do you use?&lt;/h2&gt;


&lt;p&gt;My main machine is a mid-2012 15" MacBook Pro with 16GB of RAM, a 2.7GHz i7 and the matte 1680x1050 display. I was close to buying a Retina MacBook Pro but after a few friends had countless issues with their displays I decided to wait for the next version. I have a &lt;a href="http://paulstamatiou.com/hackintosh-computer"&gt;quad-core hackintosh&lt;/a&gt; in a lovely Lian Li PC-V700 case with an SSD for the OS and a few terabytes of storage for my DSLR RAWs. It doesn't get much use anymore except for storage. I'm a big fan of the now-discontinued Apple Wired Compact keyboard and the &lt;a href="http://www.amazon.com/gp/product/B002J9GDXI/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002J9GDXI&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Logitech G500 Programmable Gaming"&gt;corded Logitech G500 mouse&lt;/a&gt;. My secondary machine is a 16GB iPad Mini.&lt;/p&gt;

&lt;p&gt;At work I have a 27-inch Thunderbolt Display and at home I have the &lt;a href="http://paulstamatiou.com/review-apple-27-inch-led-cinema-display" title="Review: Apple 27-inch LED Cinema Display"&gt;previous generation 27-inch Cinema display&lt;/a&gt;. They're beautiful displays but the glare can get intense during the afternoon sun. If I had to do it again, I'd opt for the matte Dell 27-inch. It's not LED-backlit but the Dell's CCFL is better at color reproduction than Apple WLED backlight; you can't find many RGB LED backlit displays these days.&lt;/p&gt;

&lt;p&gt;On the way to work I use Apple EarPods with my iPhone 5 and at work I use &lt;a href="http://www.amazon.com/gp/product/B0006NL5SM/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0006NL5SM&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Beyerdynamic DT 770 PRO, 250 ohms"&gt;Beyerdynamic DT 770 Pro&lt;/a&gt; circumaural headphones mated to a &lt;a href="http://www.amazon.com/gp/product/B005VO7LG6/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B005VO7LG6&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="FiiO E10 USB DAC Headphone Amplifier"&gt;FiiO E10 USB DAC&lt;/a&gt;. While running I use &lt;a href="http://www.amazon.com/gp/product/B008X8HZZO/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B008X8HZZO&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Klipsch Image S4i - II Black In-Ear Headphones"&gt;Klipsch S4i earbuds&lt;/a&gt; with soft &lt;a href="http://www.amazon.com/gp/product/B004HKIA9M/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004HKIA9M&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Comply T-100 Isolation Earphone Tips"&gt;Comply Foam tips&lt;/a&gt; (anything else falls out while running). I use &lt;a href="http://www.amazon.com/gp/product/B005OA3BSY/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B005OA3BSY&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Audioengine A5+ Premium Powered Speakers"&gt;Audioengine A5 powered speakers&lt;/a&gt; at home when I don't feel like plugging in my &lt;a href="http://www.amazon.com/gp/product/B00018MSNI/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B00018MSNI&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Sennheiser HD 650 Headphones"&gt;Sennheiser HD 650's&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Throughout the workday I can be found scribbling meeting notes or small interface ideas in my &lt;a href="http://lifehacker.com/5962196/the-evernote-smart-notebook-by-moleskine-digitizes-and-automatically-tags-your-handwritten-notes"&gt;Evernote-edition Moleskine&lt;/a&gt; with a &lt;a href="http://www.amazon.com/gp/product/B0008G8G8Y/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0008G8G8Y&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Sakura 30062 6-Piece Pigma Micron Clam Ink Pen Set, Black"&gt;Pigma Micron pen&lt;/a&gt;. When it comes to larger interface sketches, I take a stack of legal paper from the printer and some of the &lt;a href="http://www.amazon.com/gp/product/B000MRWH5M/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B000MRWH5M&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="neutral gray Copic markers"&gt;neutral gray Copic markers&lt;/a&gt; lying around the &lt;a href="http://twitter.com/design"&gt;@design&lt;/a&gt; studio.&lt;/p&gt;

&lt;p&gt;I &lt;a href="http://paulstamatiou.com/photos"&gt;shoot&lt;/a&gt; with a &lt;a href="http://www.amazon.com/gp/product/B007FGYZFI/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B007FGYZFI&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Canon EOS 5D Mark III 22.3 MP Full Frame CMOS with 1080p Full-HD Video Mode Digital SLR Camera"&gt;Canon 5D Mark III&lt;/a&gt;. It's the best camera I have ever owned: fast, tough and feature-packed. Sure it's big, heavy, very expensive and lacks GPS logging, but it can practically see in the dark. I only own a few, fast prime lenses: &lt;a href="http://www.amazon.com/gp/product/B001GNCWCE/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001GNCWCE&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Canon EF 24mm f/1.4L II USM Wide Angle Lens"&gt;24mm f/1.4L&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/B00894YP00/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B00894YP00&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Canon EF 40mm f/2.8 STM Lens"&gt;40mm f/2.8 pancake&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/B00009XVCZ/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B00009XVCZ&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Canon EF 50mm f/1.4 USM Standard &amp; Medium Telephoto Lens for Canon SLR Cameras"&gt;50mm f/1.4&lt;/a&gt;. I shoot &lt;a href="http://paulstamatiou.com/beach-sunset-santa-cruz"&gt;landscapes&lt;/a&gt;, &lt;a href="http://paulstamatiou.com/bay-bridge-lights"&gt;architecture&lt;/a&gt; and low-light scenes with the 24mm. Several of my friends are DJs, so I'm also often shooting in dark clubs where the f/1.4 shines. I have a Speedlite 580EX II flash as well but prefer shooting without it when possible.&lt;/p&gt;

&lt;p&gt;During weekend writing, photo editing, designing or coding sessions, I am parked in my orange Herman Miller Embody chair. I loathe the Aeron but the Embody fits my body perfectly. My only nitpick is that it's a heavy chair and even with the larger wheels made for carpet it requires a lot of force to move.&lt;/p&gt;

&lt;h2&gt;And what software?&lt;/h2&gt;


&lt;p&gt;1Password. No explanation necessary.&lt;/p&gt;

&lt;p&gt;I use Sublime Text 2 for any kind of development with the &lt;a href="https://github.com/buymeasoda/soda-theme/"&gt;Soda Dark theme&lt;/a&gt; and Blackboard color scheme. iTerm2 serves as my Terminal replacement, with a must-have system-wide show/hide hotkey so I can summon it wherever I am. I use iStat Menus to keep an eye on CPU and network usage.&lt;/p&gt;

&lt;p&gt;Sublime Text 2 is also where I do most of my article writing but I have recently been experimenting with iA Writer. After years of trying to become an Evernote user, I &lt;a href="https://twitter.com/Stammy/status/279005177992851456"&gt;finally got hooked with their latest version&lt;/a&gt;. Most of my articles now begin as notes or outlines in Evernote. It also stores everything from random notes all the way to a list of &lt;a href="http://www.quora.com/Travel/What-are-the-most-surreal-places-one-can-ever-visit"&gt;places I want to visit&lt;/a&gt;. I often find myself using Evernote on my iPhone to write in ideas throughout the day. I also use the OS X/iOS Reminders app for quick reminders and to-dos that I'll access soon.&lt;/p&gt;

&lt;p&gt;I spend most of my time in Photoshop CS6 and make heavy use of Layer Comps when designing UI flows or interactions. The "Layer Comps to Files" default script makes my life easier, as does &lt;a href="http://photoshopsecrets.tumblr.com/"&gt;Photoshop Secrets&lt;/a&gt;. I meticulously measure everything with &lt;a href="http://iconfactory.com/software/xscope" title="xScope"&gt;xScope&lt;/a&gt;, a tool I've been using for almost 4 years. I &lt;a href="https://twitter.com/Stammy/status/294533740728823808"&gt;not-so-secretly wish&lt;/a&gt; there was a way to link Layer Styles. I use a few Photoshop extensions from time to time: &lt;a href="http://dmonzon.com/freebies/12-photoshop-tools/"&gt;dmonzon Trevor Morris Scripts&lt;/a&gt;, &lt;a href="http://csshat.com/"&gt;CSS Hat&lt;/a&gt; and &lt;a href="http://devrocket.uiparade.com/" title="The photoshop plugin for ios developers"&gt;DevRocket&lt;/a&gt;. I also use a silly corner resizer jsx script so I don't have to switch tools, select corners and all that jazz just to resize a roundrect. Yeah, you can't be a designer unless you call them &lt;a href="http://www.folklore.org/StoryView.py?story=Round_Rects_Are_Everywhere.txt" title="Round Rects Are Everywhere!"&gt;roundrects as a QuickDraw throwback&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Whenever a particular website or UI element catches my eye, I catalog it in &lt;a href="http://www.realmacsoftware.com/littlesnapper/"&gt;LittleSnapper&lt;/a&gt;. It has a bookmarklet that captures the screenshot in the background. I also use &lt;a href="http://grabbox.devsoft.no/" title="GrabBox"&gt;GrabBox&lt;/a&gt; to easily upload and share screenshots.&lt;/p&gt;

&lt;p&gt;Google Chrome is my browser of choice for everything. I use the following extensions: &lt;a href="https://chrome.google.com/webstore/detail/currently/ojhmphdkpgbibohbnpbfiefkgieacjmh" title="Currently chrome weather extension"&gt;Currently&lt;/a&gt;, &lt;a href="https://chrome.google.com/webstore/detail/whatfont/jabopobgcpjmedljpbcaablpmlmfcogm?hl=en"&gt;WhatFont&lt;/a&gt;, Google Dictionary, &lt;a href="https://chrome.google.com/webstore/detail/image-properties-context/khagclindddokccfbmfmckaflngbmpon?hl=en"&gt;Image Properties Context Menu&lt;/a&gt;, JSONView, Google RSS Subscription Extension and Kippt.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://paulstamatiou.com/google-chrome-for-ios-thoughts"&gt;Google Chrome Sync&lt;/a&gt; is the best part of my phone, tablet, and desktop setup. I have a bookmarks folder simply named &lt;em&gt;tmp&lt;/em&gt; that serves as my own kind of Instapaper. I read everything in there every Sunday and clear it out. Whenever I have a spare minute I can open any of those saved articles from any device thanks to Google Chrome Sync.&lt;/p&gt;

&lt;p&gt;I post-process my photos in &lt;a href="http://www.dpreview.com/articles/7481161037/lightroom-4-review" title="Lightroom 4 Review"&gt;Adobe Lightroom 4&lt;/a&gt; but have been increasingly curious about DxO Optics Pro 8 as it's better with lens correction. If I'm in a rush I'll use some &lt;a href="http://www.ononesoftware.com/products/lightroom-presets/" title="Lightroom presets"&gt;presets from onOne&lt;/a&gt;. I use Snapseed on my iPhone to tweak photos before I post them to Instagram or Twitter. It has a great gesture-based interface and several modes that make it very powerful.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/02/pstam-mendoza-LR.jpg" alt="Ryan Mendoza playing Project One SF - adobe lightroom"/&gt;
  &lt;figcaption&gt;Post-processing photos I took at a &lt;a href="http://paulstamatiou.com/ryan-mendoza-adrenalin-room-launch"&gt;friend's label launch party&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I love using &lt;a href="http://runkeeper.com"&gt;Runkeeper&lt;/a&gt; on my iPhone. It's such a simple concept &amp;mdash; a datalogger at heart &amp;mdash; but it keeps me coming back to log runs and share the results with friends. I am using it to track my 2013 goal of running 1,000 miles.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/02/pstam_runkeeper.jpg" alt="Runkeeper"/&gt;&lt;/div&gt;


&lt;p&gt;Other apps that live on my home screen include Instacast for streaming podcasts and &lt;a href="http://getprismatic.com/"&gt;Prismatic&lt;/a&gt; for news. I've tried apps like Circa, Feedly and Summly but always find myself opening up Prismatic. It just &lt;em&gt;knows&lt;/em&gt; what I like to read.&lt;/p&gt;

&lt;p&gt;My iPad Mini is the first thing I grab in the morning to check Twitter and email. I find myself catching up on email and news over breakfast or in the evening after work. It's also where I read Kindle books quite often. Honestly, I'm rather shocked by the iPad Mini. I had an iPad 2 that I did not use &lt;em&gt;at all&lt;/em&gt; and ended up giving to my parents. The Mini is the perfect size.&lt;/p&gt;

&lt;p&gt;A good chunk of my work and workout music listening involves one of these: Above &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Beyond: Group Therapy, Air Up There with Tritonal, Eric Prydz Epic Radio, Tiësto's club life, Armin's A State of Trance, &lt;a href="http://hypem.com/popular" title="Hype Machine music"&gt;HypeM.com Popular&lt;/a&gt;. Between that and occasional Spotify/Rdio usage, I don't really manage an iTunes library anymore and I like that.&lt;/p&gt;

&lt;p&gt;Every once in a while I play a few rounds of &lt;a href="http://en.wikipedia.org/wiki/Counter-Strike:_Global_Offensive"&gt;Counter-Strike: Global Offensive&lt;/a&gt; on Steam. It's a game you can play for just 10 minutes at a time and be done with it. Not something you get sucked in for hours, like anything made by Blizzard.&lt;/p&gt;

&lt;h2&gt;What would be your dream setup?&lt;/h2&gt;


&lt;p&gt;I think we're past the desktop tower age but it's a shame we're stuck with measly dual-core Macbook Airs. My dream setup would have tower-like horsepower (think 16-core, 128GB RAM and something as powerful as RAIDed Fusion ioFX PCIe cards.. we did say &lt;em&gt;dream&lt;/em&gt; didn't we?) in a 14-inch Macbook Air-like body. Yes, 14-inches. I think that would be a nice size.&lt;/p&gt;

&lt;p&gt;It would have built-in cellular data from whatever gets invented after LTE. The display would be HiDPI but resolution would be something sane like 3360x2100 instead of the current 13" retina Macbook Pro's sub-par 2560x1600. And while we're dreaming, a 30-inch HiDPI display as well.&lt;/p&gt;

&lt;p&gt;Until then, I'm pretty happy with my current setup. The only thing that would be nice is a &lt;a href="http://www.amazon.com/gp/product/B008MH1KHA/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B008MH1KHA&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Drobo Mini 4-bay Storage Array, Thunderbolt/USB 3.0"&gt;Drobo Mini&lt;/a&gt; filled with SSDs and connected via thunderbolt for storing my active Lightroom catalog.&lt;/p&gt;

&lt;p&gt;For my camera setup, I'd like my DSLR to be able to instantly focus in the dark with no AF light from a disabled Speedlite. That's my only nitpick. And maybe if it could be lighter. Not smaller &amp;mdash; I love how it fits in your hand and doesn't feel like you're going to drop it &lt;em&gt;cough&lt;/em&gt; Sony RX1 &lt;em&gt;cough&lt;/em&gt; &amp;mdash; just lighter.&lt;/p&gt;

&lt;h2&gt;Thoughts?&lt;/h2&gt;


&lt;p&gt;How does your setup differ? &lt;a href="http://twitter.com/stammy"&gt;Follow me on Twitter&lt;/a&gt; and share your setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I've since started using &lt;a href="http://jumpzero.com/frank/"&gt;Frank DeLoupe&lt;/a&gt;, a hotkey-initiated color picker that syncs your selected color with Photoshop (even when you are outside of Photoshop). Super handy!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; Some links use an affiliate code (still paying tuition!).
&lt;/section&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/my-setup" title="My Setup"&gt;My Setup&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=7taCMEmXA_k:lQ6Su5EYJCY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=7taCMEmXA_k:lQ6Su5EYJCY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=7taCMEmXA_k:lQ6Su5EYJCY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=7taCMEmXA_k:lQ6Su5EYJCY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=7taCMEmXA_k:lQ6Su5EYJCY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=7taCMEmXA_k:lQ6Su5EYJCY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=7taCMEmXA_k:lQ6Su5EYJCY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=7taCMEmXA_k:lQ6Su5EYJCY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/7taCMEmXA_k" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/my-setup</feedburner:origLink></entry>
	
	<entry>
		<title>Developing a responsive, Retina-friendly site (Part 1)</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/O-4FzUGmTng/responsive-retina-blog-development-part-1" />
		<updated>2013-01-23T08:00:00-08:00</updated>
		<id>http://paulstamatiou.com/responsive-retina-blog-development-part-1</id>
		<content type="html">&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;In my last post, &lt;a href="http://paulstamatiou.com/responsive-retina-blog-design" title="Designing a responsive, Retina-friendly site"&gt;Designing a responsive, Retina-friendly site&lt;/a&gt;, I covered my design process and thoughts behind redesigning this site. I did not cover any aspects of actual development or any Jekyll specifics. This post will mainly cover coding up &lt;strong&gt;responsive design&lt;/strong&gt; and the third and final post will cover retina media queries, &lt;strong&gt;responsive images&lt;/strong&gt; and more.&lt;/p&gt;






&lt;p class="notice"&gt;&lt;strong&gt;Note:&lt;/strong&gt; The final part to this series is now published: &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-2"&gt;Developing a responsive, Retina-friendly site (Part 2)&lt;/a&gt;.&lt;/p&gt;




&lt;h4&gt;Jekyll + Rack on Heroku&lt;/h4&gt;


&lt;p&gt;I last redesigned my blog in 2010 when I &lt;a href="http://paulstamatiou.com/how-to-wordpress-to-jekyll" title="How To: WordPress to Jekyll"&gt;migrated from WordPress to Jekyll&lt;/a&gt;. I eventually forked &lt;a href="https://github.com/mojombo/jekyll"&gt;jekyll&lt;/a&gt; to support a separate photos post type outside of the main site.posts. I then wrapped it in Rack::Rewrite with Rack::TryStatic so I could host it on Heroku and 301 some old permalinks. I won't cover the details of that too much, but I recall reading &lt;a href="http://mwmanning.com/2011/12/04/Jekyll-on-Heroku-Part-2.html" title="Jekyll on Heroku Part 2"&gt;this post by Matt Manning&lt;/a&gt; when I made the switch.&lt;/p&gt;

&lt;p&gt;Most of the configuration is in the &lt;code class="inline"&gt;config.ru&lt;/code&gt; file. I loathe URLs that end in .html so my jekyll fork is based on &lt;a href="https://github.com/henrik/jekyll/commit/1d42b39f70415fc69f80e6736649bc570ff4e2cb"&gt;this gist&lt;/a&gt; for Apache-inspired "multiviews" support &amp;mdash; basically it writes links without the file extension and then I get Rack to do the same.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rubygems&amp;#39;&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bundler/setup&amp;#39;&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rack/request&amp;#39;&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rack/rewrite&amp;#39;&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rack/contrib/try_static&amp;#39;&lt;/span&gt;

&lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="ss"&gt;Rack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:Deflater&lt;/span&gt;
&lt;span class="c1"&gt;# also, look into Rack::ETag&lt;/span&gt;

&lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="ss"&gt;Rack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:Rewrite&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="c1"&gt;# rewriting old WordPress permalinks I had&lt;/span&gt;
  &lt;span class="c1"&gt;# Do not show .html file extensions&lt;/span&gt;

  &lt;span class="c1"&gt;# I largely gave up /year/month/day style permalinks for the ridiculous &lt;/span&gt;
  &lt;span class="c1"&gt;# extra page generation time in jekyll (ie if /2013 loaded its own archives page)&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/[0-9]{4}/[0-9]{2}/[0-9]{2}/([a-z0-9\-/]+)}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/$1&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/categories/(.*)}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="s1"&gt;&amp;#39;/posts&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/tags/(.*)}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;             &lt;span class="s1"&gt;&amp;#39;/posts&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/people/(.*)}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="s1"&gt;&amp;#39;/posts&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/([0-9]{4})/([0-9]{2})}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/posts&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/([0-9]{4})}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            &lt;span class="s1"&gt;&amp;#39;/posts&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/index.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;              &lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/index&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                   &lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/archives&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                &lt;span class="s1"&gt;&amp;#39;/posts&amp;#39;&lt;/span&gt;
  &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/(.*).html$}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;             &lt;span class="s1"&gt;&amp;#39;/$1&amp;#39;&lt;/span&gt;
  
  &lt;span class="c1"&gt;# I set USER=Stammy in .env -- you use foreman right?? -- to ignore these in dev locally&lt;/span&gt;
  &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;USER&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Stammy&amp;quot;&lt;/span&gt;
    &lt;span class="c1"&gt;# remove all trailing slashes.. probably a better way to do this&lt;/span&gt;
    &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{/(.*)/}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/$1&amp;#39;&lt;/span&gt; 

    &lt;span class="c1"&gt;# i have a few domains that point here like pstam.com&lt;/span&gt;
    &lt;span class="c1"&gt;# rewrite them to only use paulstamatiou.com&lt;/span&gt;
    &lt;span class="n"&gt;r301&lt;/span&gt; &lt;span class="sr"&gt;%r{.*}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;http://paulstamatiou.com$&amp;amp;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:if&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Proc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;rack_env&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;rack_env&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SERVER_NAME&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;paulstamatiou.com&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# serve up some static goodness&lt;/span&gt;
&lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="ss"&gt;Rack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:TryStatic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:root&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;_site&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:urls&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="sx"&gt;%w[/]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:try&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;index.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/index.html&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Serve the 404 error page&lt;/span&gt;
&lt;span class="n"&gt;error_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;_site/404.html&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="nb"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="s1"&gt;&amp;#39;Last-Modified&amp;#39;&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;httpdate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="s1"&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;   &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;&amp;#39;Content-Length&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;To ensure deflater is properly compressing markup run this and you should see &lt;code class="inline"&gt;Content-Encoding: gzip&lt;/code&gt; returned:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="bash"&gt;&lt;span class="c"&gt;# change 5000 to whatever port you run locally&lt;/span&gt;
curl -i -H &lt;span class="s2"&gt;&amp;quot;Accept-Encoding: gzip,deflate&amp;quot;&lt;/span&gt; http://localhost:5000 2&amp;gt;&amp;amp;1 | grep &lt;span class="s2"&gt;&amp;quot;gzip&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;h4 id="grunt"&gt;&lt;code class="inline"&gt;grunt&lt;/code&gt; watches over&lt;/h4&gt;


&lt;p&gt;When I started developing the new site I wanted to automate some of my workflow. Things like Coffeescript, JavaScript and Sass compilation to production-ready assets whenever any of the source files changed.&lt;/p&gt;

&lt;p&gt;I took a look at the &lt;a href="http://gruntjs.com/" title="Grunt is a task-based command line build tool for JavaScript projects"&gt;grunt build tool&lt;/a&gt; to help me with these issues. If you use jekyll, you probably have a Rakefile&lt;sup&gt;&lt;a href="#footnote-1" id="r1"&gt;1&lt;/a&gt;&lt;/sup&gt; where you have specified several tasks to aid in create new posts and so on. In layman's terms, grunt is very similar but based on node.&lt;/p&gt;

&lt;p&gt;Installation is an npm command away: &lt;code class="inline"&gt;npm install -g grunt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I setup the main &lt;code class="inline"&gt;grunt.js&lt;/code&gt; file in my project directory root to do a few things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Monitor all files in my &lt;code class="inline"&gt;style&lt;/code&gt; directory and compile &lt;code class="inline"&gt;screen.scss&lt;/code&gt; if any of them changed, like imported scss files.&lt;/li&gt;
  &lt;li&gt;Watch and compile the Coffeescript file &lt;code class="inline"&gt;app.coffee&lt;/code&gt; into JS and put it in the &lt;code class="inline"&gt;js&lt;/code&gt; directory.&lt;/li&gt;
  &lt;li&gt;Watch all specified js files in the &lt;code class="inline"&gt;_jslibs&lt;/code&gt; directory and minify them along with the compiled coffee file, app.js, into a single file.&lt;/li&gt;
  &lt;li&gt;Gzip then upload assets to Cloudfront as necessary.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I installed &lt;code class="inline"&gt;grunt-coffee&lt;/code&gt; and &lt;code class="inline"&gt;grunt-compass&lt;/code&gt; plugins to be able to work with Coffeescript and Compass for Sass. And then &lt;code class="inline"&gt;grunt-s3&lt;/code&gt; to upload some assets to my S3 Cloudfront bucket. Finally, I installed &lt;code class="inline"&gt;grunt-smushit&lt;/code&gt; to be able to optimize images from the command line (or you can use &lt;a href="http://imageoptim.com/" title="ImageOptim"&gt;ImageOptim&lt;/a&gt; if you like).&lt;/p&gt;

&lt;pre class="clean"&gt;
  cd ~/code/your-blog
  npm install grunt-coffee
  npm install grunt-compass
  npm install grunt-s3
  npm install grunt-smushit
&lt;/pre&gt;


&lt;p&gt;In the root of the directory I created a simple &lt;code class="inline"&gt;package.json&lt;/code&gt; file. I really only use it to add a banner to the top of my js file builds but it also keeps track of dependencies so you can easily re-setup grunt on a new machine with npm install.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;pstam-blog&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;jekyll &amp;#39;n shit.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;version&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;homepage&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;http://paulstamatiou.com&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;author&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Paul Stamatiou&amp;quot;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;repository&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;git&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;https://github.com/stammy/pstam-blog&amp;quot;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;devDependencies&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;grunt&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;latest&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;grunt-coffee&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;gt;= 0.0.6&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;grunt-compass&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;gt;= 0.3.7&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;grunt-s3&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;gt;= 0.0.9&amp;quot;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Then I created the &lt;code class="inline"&gt;grunt.js&lt;/code&gt; gruntfile&lt;sup&gt;&lt;a href="#footnote-2" id="r2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
  &lt;span class="c1"&gt;// https://github.com/avalade/grunt-coffee&lt;/span&gt;
  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loadNpmTasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;grunt-coffee&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// https://github.com/kahlil/grunt-compass&lt;/span&gt;
  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loadNpmTasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;grunt-compass&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// https://github.com/pifantastic/grunt-s3&lt;/span&gt;
  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loadNpmTasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;grunt-s3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// https://github.com/heldr/grunt-smushit&lt;/span&gt;
  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loadNpmTasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;grunt-smushit&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;pkg&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;json:package.json&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;// fetch AWS S3 credentials in another json file&lt;/span&gt;
    &lt;span class="c1"&gt;// name with underscore prefix or exclude in jekyll&amp;#39;s config.yml &lt;/span&gt;
    &lt;span class="c1"&gt;// otherwise this will end up being public!!!&lt;/span&gt;
    &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;json:_grunt-aws.json&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;%= aws.key %&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;%= aws.secret %&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;%= aws.bucket %&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;access&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;public-read&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;gzip&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;upload&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="c1"&gt;// upload search assets - get src filename from the min block below&lt;/span&gt;
          &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;config:min.search.dest&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;assets/pstamsearch.js&amp;#39;&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="c1"&gt;// upload main js assets&lt;/span&gt;
          &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;config:min.main.dest&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;assets/pstambuild.js&amp;#39;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; 
        &lt;span class="c1"&gt;// etc&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;banner&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/*! &amp;lt;%= pkg.name %&amp;gt; - v&amp;lt;%= pkg.version %&amp;gt; - &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;%= grunt.template.today(&amp;quot;yyyy-mm-dd&amp;quot;) %&amp;gt; */&amp;#39;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;smushit&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// recursively run through *.png, *.jpg in img/ dir and optimize&lt;/span&gt;
      &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;img&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// minify and bundle several js files together &lt;/span&gt;
        &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
          &lt;span class="s1"&gt;&amp;#39;&amp;lt;banner:meta.banner&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s1"&gt;&amp;#39;_jslibs/head.load.min.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s1"&gt;&amp;#39;_jslibs/foresight.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s1"&gt;&amp;#39;js/app.js&amp;#39;&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="nx"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;js/pstambuild.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;separator&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;;&amp;#39;&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// separately, put search-related js files together&lt;/span&gt;
        &lt;span class="c1"&gt;// to be async loaded only when search is used&lt;/span&gt;
        &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
          &lt;span class="s1"&gt;&amp;#39;_jslibs/jquery.ba-hashchange.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s1"&gt;&amp;#39;_jslibs/jquery.swiftype.search.js&amp;#39;&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="nx"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;js/pstamsearch.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;separator&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;;&amp;#39;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;coffee&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// compile one coffeescript file to js&lt;/span&gt;
      &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;coffee/app.coffee&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="nx"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;js/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;bare&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;compass&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// compile Sass&lt;/span&gt;
      &lt;span class="nx"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;specify&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;style/screen.scss&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;assets/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;linecomments&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;forcecompile&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;outputstyle&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;compressed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
        &lt;span class="nx"&gt;debugsass&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/img&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;relativeassets&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;watch&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// setup watch tasks. anytime a file is changed, run respective task&lt;/span&gt;
      &lt;span class="nx"&gt;coffee&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;config:coffee.app.src&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="nx"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;js&amp;#39;&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nx"&gt;jslibs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;_jslibs/*.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="nx"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;js&amp;#39;&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nx"&gt;sass&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;style/*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; 
        &lt;span class="nx"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;compass&amp;#39;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  
  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registerTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;default&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;compass js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registerTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;coffee min&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;grunt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registerTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;uploadjs&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;js s3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Grunt has several built-in tasks, such as &lt;code class="inline"&gt;min&lt;/code&gt;. It accepts a directory or a bunch of specific JavaScript files and a single destination. One of those source files is from a compiled Coffeescript file, so it's important I only run &lt;code class="inline"&gt;min&lt;/code&gt; after the &lt;code class="inline"&gt;coffee&lt;/code&gt; task. To do that, I registered a &lt;code class="inline"&gt;js&lt;/code&gt; task that runs &lt;code class="inline"&gt;coffee&lt;/code&gt; first, then &lt;code class="inline"&gt;min&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I've also registered a default task (runs when grunt is called by itself) to call the compass task to compile Sass and then run the &lt;code class="inline"&gt;js&lt;/code&gt; task.&lt;/p&gt;

&lt;p&gt;Setting up watch is the last and most important step. I configured it to run the coffee task anytime my coffee file changes, run compass anytime any file in the style directory changes, et cetera. I'm only working with a few files so it's instant.&lt;/p&gt;

&lt;p&gt;That's it. I just run &lt;code class="inline"&gt;grunt watch&lt;/code&gt; and get back to work.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_grunt_working.jpg" alt="Grunt Build Tool"/&gt;
  &lt;figcaption&gt;Grunt watching and compiling Coffeescript and Sass&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;section&gt;
This was a very basic overview of how I use grunt. It can do &lt;em&gt;a lot more&lt;/em&gt; so it's worth exploring for other uses. I don't update the CSS or javascript on my site often so digestification &lt;sup&gt;&lt;a href="#footnote-2" id="r2"&gt;2&lt;/a&gt;&lt;/sup&gt; of the compiled assets wasn't important for this, but it's something I want to look into.&lt;/p&gt;

&lt;p&gt;Currently I manually run that last task (uploadjs) to build the js and upload it to S3. I'll have to spend some time reading the grunt-s3 source but at first glance it looks like it didn't support upload subtasks, so I couldn't abstract out only css uploading, search-related js uploading, and so on. It just uploads all specified files at the same time right now.&lt;/p&gt;

&lt;p&gt;Matt Hodan's &lt;a href="https://github.com/matthodan/jekyll-asset-pipeline"&gt;Jekyll Asset Pipeline&lt;/a&gt; is an alternative to using grunt entirely.&lt;/p&gt;

&lt;h4&gt;Search&lt;/h4&gt;


&lt;p&gt;I decided to ditch Google CSE and try out &lt;a href="https://swiftype.com/" title="Swiftype search"&gt;Swiftype&lt;/a&gt;, a Y Combinator search startup that has been dubbed the Stripe for site search. I have to agree, it's pretty slick. The best thing is that &lt;strong&gt;Swiftype lets me control the search results&lt;/strong&gt;. I can find popular searches and pin certain results to the top.&lt;/p&gt;

&lt;p&gt;There are a few install methods for Swiftype but I chose their &lt;a href="https://github.com/swiftype/swiftype-search-jquery" title="Swiftype search jQuery"&gt;self-hosted jQuery plugin&lt;/a&gt;. I ended up modifying it to provide pagination controls on the top and bottom of the results, add a no-results-found state and some extra markup to help me style it.&lt;/p&gt;

&lt;p&gt;The plugin operates by listening to hash changes that include search params. I may end up refactoring it to remove that. Ideally I don't want to have to load an additional jQuery plugin to watch for hash changes and would like to forgo jQuery in favor of the smaller &lt;a href="http://zeptojs.com/" title="Zepto javascript library"&gt;zepto&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's what the completed search interaction looks like, thanks to Photoshop CS6's new Timeline feature that helps me create annoying gifs:&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam-swiftype-search.gif" alt="Swiftype search integration on PaulStamatiou.com"/&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;A snippet of the header markup with the search bar:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;javascript:void(0)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;search&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;search ir&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Search&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Search&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;searchbar&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;st-search-input&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;st-search-input&amp;quot;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;javascript:void(0)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;st-cancel&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cancel_search ir&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Cancel&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;javascript:void(0)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;st-close&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;close_search&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Close&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I only load the Swiftype libraries when the user clicks on the search icon. No need to load all that extra JS for everyone when only a few people will end up searching. Below is the coffeescript that hooks up all of the interactions, downloads the swiftype libraries concatenated and uploaded by grunt, and runs it.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="coffeescript"&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="s"&gt;search&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="c1"&gt;# cache some frequently used elements&lt;/span&gt;
  &lt;span class="nv"&gt;search_input_el = &lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="s"&gt;st-search-input&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;# create the wrapper for the results and prepend it to the main site div&lt;/span&gt;
  &lt;span class="nv"&gt;search_results_el = &lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;lt;div/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;id: &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;st-results-container&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nx"&gt;prependTo&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;#site&amp;#39;&lt;/span&gt;
  &lt;span class="nv"&gt;search_bar_el = &lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="s"&gt;searchbar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;fadeIn&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="nv"&gt;nav_li_el = &lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="s"&gt;headernav li&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;hide&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="c1"&gt;# load swiftype search libraries&lt;/span&gt;
  &lt;span class="nx"&gt;head&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://turbo.paulstamatiou.com/assets/pstamsearch.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt; 
    &lt;span class="nx"&gt;search_input_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;swiftypeSearch&lt;/span&gt;
      &lt;span class="nv"&gt;resultContainingElement: &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="s"&gt;st-results-container&amp;quot;&lt;/span&gt;
      &lt;span class="nv"&gt;engineKey: &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;YOUR_API_KEY&amp;quot;&lt;/span&gt;
      &lt;span class="nv"&gt;top_pagination: &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="nv"&gt;perPage: &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="nx"&gt;search_input_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nx"&gt;search_results_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fadeIn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="s"&gt;st-close&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;click&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;# and/or bind to ESC key (event.keyCode 27)&lt;/span&gt;
    &lt;span class="nx"&gt;search_bar_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hide&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nx"&gt;nav_li_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fadeIn&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;
    &lt;span class="nx"&gt;search_results_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slideUp&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;
    &lt;span class="c1"&gt;# this line clears hash fragments from the URL, not necessary but I prefer to clean up the URL&lt;/span&gt;
    &lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pushState&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;

  &lt;span class="nx"&gt;search_input_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keypress&lt;/span&gt; &lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;# since it&amp;#39;s a link, jQuery wants to display: inline; with show()&lt;/span&gt;
    &lt;span class="c1"&gt;# so I manually set inline-block instead&lt;/span&gt;
    &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="s"&gt;st-cancel&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;display&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;inline-block&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;@&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;hide&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nx"&gt;search_input_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nx"&gt;search_results_el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pushState&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Take it for a spin and &lt;a href="#"&gt;try searching above&lt;/a&gt;!&lt;/p&gt;

&lt;hr class="article"/&gt;




&lt;h2 id="getting_responsive"&gt;Getting Responsive&lt;/h2&gt;


&lt;p&gt;&lt;/section&gt;
&lt;figure&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_responsive_devices.jpg" alt="Responsive devices"/&gt;
  &lt;figcaption&gt;The new responsive &amp;amp; retina-friendly PaulStamatiou.com.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I'm sure you already know what RWD design is, but to dive a bit deeper &lt;strong&gt;responsive design&lt;/strong&gt; is usually defined as multiple fluid grid layouts while &lt;strong&gt;adaptive design&lt;/strong&gt; is multiple fixed breakpoints / fixed width layouts. However, most of the time you see a mixture of both: fixed width for larger layouts and fluid layouts for smaller viewports.&lt;/p&gt;

&lt;p&gt;That's what I do here. Content is &lt;code class="inline"&gt;37.62136em&lt;/code&gt; wide (multiply that with 16px browser default and the 103% font-size I have on content = 620px) until the smaller viewports when it expands to &lt;code class="inline"&gt;100%&lt;/code&gt; width.&lt;/p&gt;

&lt;p&gt;Right about here I would start talking about how I adapted my site to be responsive on mobile. Except I didn't. I began thinking mobile first and as such it was designed with only a few elements that would need to change between viewports. There was really very little to plan for; I coded it up instead of designing responsive pixel perfects first.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="no-top-margin focal-point up-3 center"&gt;
  &lt;div&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_iphone5_bokeh.jpg" alt="PaulStamatiou.com iPhone 5 responsive web design"/&gt;&lt;/div&gt;
  &lt;figcaption&gt;Responsive pstam.com at 50mm @ &lt;span class="focal"&gt;f&lt;/span&gt;/1.8. I &lt;a href="http://paulstamatiou.com/google-chrome-for-ios-thoughts" title="Browser sync is the killer app"&gt;love Chrome for iOS&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;Only a few elements elements needed fiddling:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Header:&lt;/strong&gt; Show some extra subtitle text and increase font-size for larger viewports in addition to moving the avatar to the left size. Also, showing navigation button text for larger screens ("About" next to about icon, etc)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Footer:&lt;/strong&gt; Increase font-size considerably on smaller viewports to make links easier to tap. Apple HIG suggests at least 44pt x 44pt for tappable UI elements&lt;sup&gt;&lt;a href="#footnote-4" id="r4"&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content:&lt;/strong&gt; Overall, making buttons larger and full-width where necessary. Adjusting font-size.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center auto"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam-resp-footer-and-post-content-btns.png" alt="Pstam-resp-footer-nav"/&gt;
  &lt;figcaption&gt;Simplified footer (left) and full-width post-content buttons (right) for smaller viewports.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;For larger sites, you'll usually hear people buzzing about content choreography &amp;mdash; adjusting layouts and moving elements around as content reflows with smaller viewports &amp;mdash; and &lt;a href="http://bradfrostweb.com/blog/web/responsive-nav-patterns/" title="Responsive Nav Patterns"&gt;responsive navigation patterns&lt;/a&gt;, things like collapsing larger menus into the header. You can also get a good idea for how others work with layouts by scrolling through screenshots &lt;a href="http://mediaqueri.es/" title="mediaqueries"&gt;mediaqueri.es&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Responsive Setup&lt;/h4&gt;


&lt;p&gt;To get started we need to tell the browser to &lt;strong&gt;set the viewport width&lt;/strong&gt; by using the device's native width in CSS pixels (different than device pixels, CSS pixels take into account ppi). We also need to disable the browser's default zoom level, called initial-scale. Setting maximum-scale to 1 ensures this zoom remains consistent when the device orientation changes. This is necessary as most smartphones set the viewport width to around 1,000 pixels wide, thus bypassing any media queries you have for smaller screens.&lt;/p&gt;

&lt;p&gt;Apple created this viewport tag to be placed in the head:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;viewport&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;width=device-width, initial-scale=1, maximum-scale=1&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; While setting maximum-scale to 1 fixes the iOS orientation change bug it also limits users from manually zooming into your site. I have since &lt;strong&gt;removed &lt;code class="inline"&gt;, maximum-scale=1&lt;/code&gt;&lt;/strong&gt; from the viewport line above and updated my website to use this accelerometer-based javascript solution: &lt;a href="https://github.com/scottjehl/iOS-Orientationchange-Fix" title="iOS-Orientationchange-Fix"&gt;iOS-Orientationchange-Fix&lt;/a&gt;. It's very tiny when minified and works like so:&lt;/p&gt;

&lt;blockquote&gt;How it works: This fix works by listening to the device's accelerometer to predict when an orientation change is about to occur. When it deems an orientation change imminent, the script disables user zooming, allowing the orientation change to occur properly, with zooming disabled. The script restores zoom again once the device is either oriented close to upright, or after its orientation has changed. This way, user zooming is never disabled while the page is in use.&lt;/blockquote&gt;


&lt;p&gt;I'm also taking a suggestion from normalize.css to set &lt;code class="inline"&gt;text-size-adjust: 100%&lt;/code&gt; to prevent iOS from changing text size after orientation changes and without having to set &lt;code class="inline"&gt;user-scalable=0&lt;/code&gt; on the viewport&lt;sup&gt;&lt;a href="#footnote-5" id="r5"&gt;5&lt;/a&gt;&lt;/sup&gt;. Just be sure to &lt;strong&gt;never, ever&lt;/strong&gt; set &lt;code class="inline"&gt;text-size-adjust&lt;/code&gt; to &lt;code class="inline"&gt;none&lt;/code&gt; &amp;mdash; it has the nasty effect of messing up accessibility by preventing visitors from using browser zoom to increase text size.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="css"&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;text&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;adjust&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;text&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;adjust&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Then we want to &lt;strong&gt;make sure less capable browsers like Internet Explorer 8 can make use of media queries&lt;/strong&gt;. There are a myriad of ways to &lt;a href="http://coding.smashingmagazine.com/2011/08/10/techniques-for-gracefully-degrading-media-queries/" title="techniques for gracefully degrading media queries"&gt;polyfill or gracefully degrade media queries&lt;/a&gt; on such browsers. I've decided to go with &lt;a href="http://code.google.com/p/css3-mediaqueries-js/" title="css3 mediaqueries js"&gt;css3-mediaqueries.js&lt;/a&gt; as it supports &lt;code class="inline"&gt;em&lt;/code&gt; units.&lt;/p&gt;

&lt;p&gt;Similarly to how you conditionally load JavaScript like &lt;a href="http://code.google.com/p/html5shiv/"&gt;html5shiv&lt;/a&gt; in your &lt;code class="inline"&gt;head&lt;/code&gt;, we load css3-mediaqueries.js in the same way:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="c"&gt;&amp;lt;!-- Ideally you should minify + gzip and host this yourself like a boss --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!--[if lt IE 9]&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;script src=&amp;quot;http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;h4&gt;WTF are Media Queries!?&lt;/h4&gt;


&lt;p&gt;Media queries are the lifeblood of any responsive website. They are used to conditionally&lt;sup&gt;&lt;a href="#footnote-6" id="r6"&gt;6&lt;/a&gt;&lt;/sup&gt; load CSS for a media type (like screen, tv, print) based on at least one media feature expression. Well to be technically correct, the browser loads all of them regardless of whether they will be used. More on how to fix that later.&lt;/p&gt;

&lt;p&gt;You're probably already familiar with them being used for screen width and resolution, but it can also be used to respond to other device characteristics like orientation, monochrome, pointer (presence and accuracy of a pointing device; i.e. use larger buttons/input fields for devices with inaccurate pointing devices to combat Fitts's law), hover and luminosity (soon).&lt;/p&gt;

&lt;p&gt;For example, the media query below targets devices with viewport widths of at least 481px, which is pretty much the portrait width of most tablets and above. That's where the extra 1px comes into play so it doesn't overlap with another media query you may have of say 480px and below, or between 320px to 480px. This can all be a bit confusing at first.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="css"&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;481px&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;your&lt;/span&gt; &lt;span class="nt"&gt;css&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;h4&gt;Breakpoints 101&lt;/h4&gt;


&lt;p&gt;Those "ranges" of widths which you want to target differently are called &lt;strong&gt;breakpoints&lt;/strong&gt;. But how do you know where to set those viewport ranges? Do you just set them up for a few devices?&lt;/p&gt;

&lt;p&gt;This has been a rather large topic of discussion in the web development community. Typically you would make breakpoints for the iPhone and iPad and have your design conform to those viewports. The current trend is the opposite&amp;mdash;&lt;strong&gt;your content and design should determine your breakpoints&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I started with the "regular" breakpoints. You know the ones: 320px (iPhone portrait), 480px (iPhone landscape), 768px (iPad portrait), 1024px (iPad portrait), and a desktop one for anything larger.&lt;/p&gt;

&lt;p&gt;However, the max width of my primary content (I like to keep the measure&lt;sup&gt;&lt;a href="#footnote-7" id="r7"&gt;7&lt;/a&gt;&lt;/sup&gt; under 75 characters) was awkwardly right in between 480px and 768px. It looked odd to display a condensed mobile header for browsers wide enough to show the full version. I changed the 768px breakpoint to 640px as a result.&lt;/p&gt;

&lt;p&gt;As web developers like to say...&lt;/p&gt;

&lt;blockquote class="huge"&gt;&lt;p&gt;Start with the small screen first, then expand until it looks like shit. Time to insert a breakpoint!&lt;/p&gt;&lt;/blockquote&gt;




&lt;h4&gt;Working with Media Queries&lt;/h4&gt;


&lt;p&gt;Generally speaking, with media queries you'll have a big ugly section on the bottom of your CSS where you set your breakpoints and manually define styles you want to override. If only someone slapped me when I first did this in 2010. &lt;strong&gt;This was wrong for a few reasons.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For one, in an ideal world you should not be overriding styles, only augmenting them. One code smell is if you see yourself "canceling" out or undoing styles you defined elsewhere. I must admit it's something I always forget to do when I start a new project and want to get to &lt;em&gt;"it works!"&lt;/em&gt; as fast as possible. Bookmark this article and read it sometime: &lt;a href="http://csswizardry.com/2012/11/code-smells-in-css/" title="Code smells in CSS"&gt;Code smells in CSS&lt;/a&gt;. Then spread the gospel with me.&lt;/p&gt;

&lt;blockquote&gt;Any CSS that unsets styles (apart from in a reset) should start ringing alarm bells right away.&lt;/blockquote&gt;


&lt;p&gt;What I really wanted to point out is the &lt;em&gt;placement&lt;/em&gt; of all your media queries. Placing them at the bottom of your CSS breaks when you end up changing the original value and forget to change the appropriate media query style if necessary. &lt;strong&gt;That's where Sass saves the day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Thanks to Sass 3.2&lt;sup&gt;&lt;a href="#footnote-8" id="r8"&gt;8&lt;/a&gt;&lt;/sup&gt;  &lt;code class="inline"&gt;@media&lt;/code&gt; bubbling and &lt;code class="inline"&gt;@content&lt;/code&gt; blocks, you can write ridiculously easy to use media query mixins. Yes, you can nest &lt;code class="inline"&gt;@media&lt;/code&gt; directives just like regular selectors and they will bubble up to the top level! Toss in a pinch of &lt;code class="inline"&gt;@content&lt;/code&gt; and that means you can write mixins like the ones below, &lt;a href="https://gist.github.com/2028061" title="_media-queries.scss"&gt;as written by Anthony Short&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="nv"&gt;$mq-mobile-portrait&lt;/span&gt;&lt;span class="o"&gt;   :&lt;/span&gt; &lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$mq-mobile-landscape&lt;/span&gt;&lt;span class="o"&gt;  :&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$mq-tablet-portrait&lt;/span&gt;&lt;span class="o"&gt;   :&lt;/span&gt; &lt;span class="mi"&gt;768&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$mq-tablet-landscape&lt;/span&gt;&lt;span class="o"&gt;  :&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$mq-desktop&lt;/span&gt;&lt;span class="o"&gt;           :&lt;/span&gt; &lt;span class="mi"&gt;1382&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Both portrait and landscape&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; mobile-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-landscape&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything up to and including the portrait width of the phone&lt;/span&gt;
&lt;span class="c1"&gt;// Since it&amp;#39;s the smallest query it doesn&amp;#39;t need a min&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; mobile-portrait-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-portrait&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything up to and including the mobile portrait&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; mobile-portrait-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-portrait&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything above and including the mobile portrait&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; mobile-portrait-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-portrait&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everthing larger than a portrait mobile up until mobile landscape&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; mobile-landscape-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-portrait&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-landscape&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything up to and including the mobile landscape width&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; mobile-landscape-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-landscape&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything above and including the mobile landscape width&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; mobile-landscape-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-portrait&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Both the portrait and landscape width of the tablet&lt;/span&gt;
&lt;span class="c1"&gt;// Larger than a landscape mobile but less than or equal to a landscape tablet&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; tablet-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-landscape&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-landscape&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything larger than mobile landscape up until the portrait width of the tablet&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; tablet-portrait-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-landscape&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-portrait&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything below and including the portrait width of the tablet&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; tablet-portrait-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-portrait&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything above and including the portrait width of the tablet&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; tablet-portrait-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-mobile-landscape&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Larger than portrait but less than or equal to the landscape width&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; tablet-landscape-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-portrait&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-landscape&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Up to and including the tablet landscape&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; tablet-landscape-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-landscape&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything larger than portrait tablet&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; tablet-landscape-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-portrait&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything larger than a landscape tablet&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; desktop-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-landscape&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything below and including the desktop &lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; desktop-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-desktop&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Everything larger than a landscape tablet but less than or equal to the desktop&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; desktop-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt; &lt;span class="nt"&gt;screen&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;min-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-tablet-landscape&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt; &lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;mq-desktop&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now all of your media queries can be nested in the same place as the CSS, instead of at the end of the file or in another one entirely.&lt;/p&gt;

&lt;p&gt;Skim through this tiny example of how I use these mixins for my header scss:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="nn"&gt;#masthead&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="no"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$main_content_width&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; tablet-portrait-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;text-align&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// circle avatar&lt;/span&gt;
  &lt;span class="nc"&gt;.stammy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;133&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;133&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url(&amp;#39;http://turbo.paulstamatiou.com/assets/stammy.png&amp;#39;)&lt;/span&gt; &lt;span class="no"&gt;no-repeat&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// HiDPI media query mixin, I describe it a bit later&lt;/span&gt;
    &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; image-2x&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s2"&gt;http://turbo.paulstamatiou.com/assets/stammy@2x.png&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;133&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;133&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;back-n-forth-anim&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:active&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; tablet-portrait-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;float&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; tablet-portrait-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="no"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nt"&gt;hgroup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt; &lt;span class="no"&gt;auto&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.6&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; mobile-landscape-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="na"&gt;margin-bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nc"&gt;.twttr&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; tablet-portrait-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="na"&gt;float&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="na"&gt;margin-top&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.95&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.95&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="c1"&gt;// using exact font-size #s here to get h1 and h2s to line up perfectly on both ends&lt;/span&gt;
      &lt;span class="c1"&gt;// yeah this is probably a code smell.. but it works :)&lt;/span&gt;
      &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; tablet-portrait-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="mf"&gt;.42718446601942&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// equal to 40px @ 16px baseline * 103% font-size I use in main content areas&lt;/span&gt;
      &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; mobile-landscape-and-up&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="mf"&gt;.25&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; mobile-landscape-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="mf"&gt;.1&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    
    &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;font-weight&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.29&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
      
      &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; mobile-landscape-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.45&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;.amp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;.amp&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Notice how &lt;strong&gt;I'm only using media queries to add or change properties&lt;/strong&gt;, not remove them? Each selector only has CSS that is shared amongst every breakpoint and then I add whatever is necessary. This goes back to the CSS code smell thing I mentioned earlier. For all intents and purposes, you can call this mobile first CSS. I started with the narrow mobile-friendly design and hooked up media queries to get it to respond to larger viewports instead of starting with the desktop design coded up.&lt;/p&gt;

&lt;p&gt;I actually had this backwards at first and &lt;strong&gt;here was the code I was able to remove after refactoring&lt;/strong&gt; to mobile-first.. err, sorry I'll try to stop using these buzzwords.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="c1"&gt;// don&amp;#39;t use -- merely an example of bad MQ coding&lt;/span&gt;
&lt;span class="nn"&gt;#masthead&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; mobile-portrait-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.intro&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.45&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nc"&gt;.amp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; tablet-portrait-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.intro&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="mf"&gt;.1&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; tablet-portrait-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;.stammy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;float&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="na"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="no"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nc"&gt;.intro&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="na"&gt;float&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="na"&gt;text-align&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="na"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="no"&gt;auto&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; mobile-landscape-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.intro&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.8&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nc"&gt;.twttr&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;.amp&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; mobile-portrait-and-below&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.intro&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;margin-bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;}&lt;/span&gt;
    &lt;span class="nc"&gt;.intro&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="mf"&gt;.2&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;hgroup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nc"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.stammy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nc"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;That looked pretty hacky right?&lt;/p&gt;

&lt;h4&gt;It's all relative (why you should use &lt;code class="inline"&gt;em&lt;/code&gt;s for breakpoints)&lt;/h4&gt;


&lt;p&gt;There's one thing I did to modify those media query mixins. I converted them to use &lt;code class="inline"&gt;em&lt;/code&gt;s instead of pixels for the breakpoints (the min/max-width values in the conditionals).&lt;/p&gt;

&lt;p&gt;Why? Take a look at the two screenshots below. Each was taken in a roughly 750px wide browser. They are also both at a &lt;strong&gt;browser zoom&lt;/strong&gt; level of 3. Yeah, I know you probably never use browser zoom but many, many folks do and it doesn't work well with fixed units. On the left you'll see what happens to a site using pixels for media queries, and on the right I'm using ems for media queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As the zoom level increases, the active media queries change!&lt;/strong&gt; Mind-blowing right?!! Instead of being stuck on my 640px-equivalent breakpoint which starts getting cramped as zoom increases, the em-based media queries trigger the next breakpoint down, in this case my mobile landscape media query. Much, much better!&lt;/p&gt;

&lt;p&gt;However, I've learned that when you test your media queries you will need to &lt;strong&gt;reload the page each time you change the zoom level&lt;/strong&gt;. It's just a nitpick where media queries won't get affected by zoom level adjustments after the page load unlike browser resizes.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_use_ems_for_mqs.jpg" alt="Use ems for mqs"/&gt;
  &lt;figcaption&gt;&lt;strong&gt;Left:&lt;/strong&gt; media queries using &lt;code class="inline"&gt;px&lt;/code&gt;, &lt;strong&gt;Right:&lt;/strong&gt; media queries using &lt;code class="inline"&gt;em&lt;/code&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;Doing so was easy; just a bit of pixel math. For example, take the 320px breakpoint and divide by the 16px browser baseline to get em, assuming you are using font-size 100%. &lt;a href="https://gist.github.com/4442615"&gt;Here's a gist&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="scss"&gt;&lt;span class="nv"&gt;$mq-mobile-portrait&lt;/span&gt;&lt;span class="o"&gt;   :&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$mq-mobile-landscape&lt;/span&gt;&lt;span class="o"&gt;  :&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$mq-tablet-portrait&lt;/span&gt;&lt;span class="o"&gt;   :&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="nv"&gt;$mq-tablet-landscape&lt;/span&gt;&lt;span class="o"&gt;  :&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="kt"&gt;em&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// and then changing the &amp;quot;+ 1&amp;quot; in each MQ conditional to a smaller unit like .001&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;h4&gt;Optimizing your media queries&lt;/h4&gt;


&lt;p&gt;By now you should have a pretty good idea of how to start using media queries to get your responsive designs off the ground. But like almost everything in technology these days, &lt;strong&gt;there are some compromises&lt;/strong&gt; with the easy to use Sass &lt;code class="inline"&gt;@media&lt;/code&gt; bubbling route we took. The compiled CSS file gets &lt;strong&gt;fat&lt;/strong&gt; since Sass is generating all these scattered media queries.&lt;/p&gt;

&lt;p&gt;The Sass folks are &lt;a href="https://github.com/nex3/sass/issues/116" title="Sass [feature request] More intelligent compression"&gt;definitely aware of this&lt;/a&gt; but don't expect it to be solved soon. What should you do? I chose not to worry about it right now. I don't have &lt;em&gt;that&lt;/em&gt; many media queries for the size difference to be a huge deal given the convenience of working with Sass.&lt;/p&gt;

&lt;p&gt;The other option is to create separate files for each of your breakpoints and handcrafting it yourself. Definitely more annoying to code this way but the benefit of having each breakpoint's CSS stored in individual files is that you can conditionally load them!&lt;/p&gt;

&lt;p&gt;If you go that separate file route, &lt;strong&gt;don't load them in your &lt;code class="inline"&gt;head&lt;/code&gt; like this&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;base-styles.css&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;screen and (max-width: 40em)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mobile-portrait.css&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;screen and (min-width: 40.01em) and (max-width: 70em)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tablet-portrait.css&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;screen and (min-width: 70.01em)&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;desktop.css&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Even if your browser is only wide enough to use the mobile portrait stylesheet, &lt;strong&gt;it will still download all of them&lt;/strong&gt;! No reason to penalize mobile devices on slower connections by making them load all this useless CSS they'll never use. Though in WebKit's defense, it is smart enough to make &lt;code class="inline"&gt;link&lt;/code&gt;s with &lt;a href="http://www.igvita.com/2012/06/14/debunking-responsive-css-performance-myths/"&gt;media attributes non-blocking and low download priority&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/filamentgroup/eCSSential" title="An experiment in optimized loading of mobile-first responsive CSS"&gt;eCSSential&lt;/a&gt; was made to get around this but &lt;a href="http://christianheilmann.com/2012/12/19/conditional-loading-of-resources-with-mediaqueries/" title="Conditional loading of resources with media queries"&gt;I find Christian Heilmann's matchMedia() suggestion&lt;/a&gt; more intriguing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is all super nitpicky and you should ignore this section unless you get ridiculous traffic.&lt;/p&gt;

&lt;h4&gt;How do I execute JavaScript for certain media query breakpoints?&lt;/h4&gt;


&lt;p&gt;I don't have this need with my blog, but you may find yourself looking to run certain bits of code, such as collapsed menu logic for mobile devices. Fortunately, it is 2013 and this has been solved with &lt;code class="inline"&gt;window.matchMedia()&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; is supported in Chrome (10+), Firefox (6+) and Safari (5.1+). But you may want to grab Paul Irish's &lt;a href="https://github.com/paulirish/matchMedia.js/"&gt;matchMedia() polyfill&lt;/a&gt; for more support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Give an example Stammy!"&lt;/strong&gt; you exclaim. Alright, you could use this to only load Disqus comments on larger devices and gracefully degrade to showing a "load comments" button. Why should mobile users have to load their extra 100kB+ of assets?&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;only screen and (max-width: 30em)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// don&amp;#39;t run disqus loading code, instead show load button instead&lt;/span&gt;
  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#disqus_btn&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt; 
      &lt;span class="c1"&gt;// load disqus code &lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;only screen and (min-width: 30.01em)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// tablet or larger, load disqus code here&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I must say that matchMedia() is a much cleaner solution to the hacks of yesteryear where people would use media queries to store identifiers for use in JavaScript. Such as a hidden &lt;code class="inline"&gt;:after&lt;/code&gt; pseudo-element with a content value of something like 'mobile-portrait' and then use JavaScript to pull that value for use in a conditional. Yuck!&lt;/p&gt;

&lt;p&gt;In some ways I'm glad I didn't bother with responsive design much until now. It was just an ugly and hack-filled development scene in 2010-2011. Then again I used to know &lt;a href="http://paulirish.com/2009/browser-specific-css-hacks/"&gt;these CSS hacks by heart&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Responsive Design Testing&lt;/h4&gt;


&lt;p&gt;By now you've been tinkering with your media queries and want to test them out efficiently. Sure you can just manually resize your browser constantly but let's face it, that gets old pretty fast. You should be able to tell what breakpoint is active at a glance, without having to open up the inspector.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href="http://johanbrook.com/design/css/debugging-css-media-queries/" title="debugging CSS media queries"&gt;Johan Brook&lt;/a&gt; suggests  having each media query set a &lt;code class="inline"&gt;:before&lt;/code&gt; pseudo-element on the &lt;code class="inline"&gt;body&lt;/code&gt; to display a &lt;code class="inline"&gt;content&lt;/code&gt; value like "tablet media query" as a site header.
  &lt;/li&gt;
  &lt;li&gt;By itself Chrome can't go narrower than 400px wide (unless you have right-docked dev tools and expand accordingly), so you will need to look into Chrome's Device Metrics feature to test smaller viewports. Firefox has an equivalent tool as well.&lt;/li&gt;
  &lt;li&gt;Various responsive design testing sites like &lt;a href="http://screenqueri.es/" title="screenqueries"&gt;screenqueri.es&lt;/a&gt; and &lt;a href="http://responsive.is/" title="responsive.is"&gt;responsive.is&lt;/a&gt; as well as bookmarklets like &lt;a href="http://lab.maltewassermann.com/viewport-resizer/" title="Viewport Resizer Responsive Design Bookmarklet"&gt;Viewport Resizer&lt;/a&gt; have become all the rage.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;/section&gt;
&lt;figure class="center focal-point left-6"&gt;
  &lt;div&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_chrome_firefox_resp_test_view.jpg" alt="Firefox Responsive Design View"/&gt;&lt;/div&gt;
  &lt;figcaption&gt;Firefox has a little known &lt;a href="https://developer.mozilla.org/en-US/docs/Tools/Responsive_Design_View" title="Firefox Responsive Design View"&gt;Responsive Design View&lt;/a&gt; and Chrome has Device Metrics&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;h4&gt;Testing with Adobe Edge Inspect&lt;/h4&gt;


&lt;p&gt;But at the end of the day you only really care about what it looks and performs like on a &lt;strong&gt;real device&lt;/strong&gt;. That's why I checked out &lt;a href="http://html.adobe.com/edge/inspect/" title="Adobe Edge Inspect"&gt;Adobe Edge Inspect&lt;/a&gt;. Frankly, I was blown away. It is not your typical behemoth Adobe application. It's a combination menubar app, Chrome extension and iPhone/Android app. Here's Adobe's &lt;a href="http://www.adobe.com/inspire/2012/12/web-designs-edge-inspect.html" title="Adobe Edge Inspect -- Preview and inspect web designs on devices with Adobe Edge Inspect"&gt;guide about Edge Inspect&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Edge Inspects helps you remotely inspect sites on your mobile device (even locally hosted ones) and remotely grab device screenshots. Then I started actually trying to put Edge Inspect into my dev workflow. &lt;strong&gt;I found a few annoying issues&lt;/strong&gt;. For example, you can't actually see your media queries in the remote inspector. That's kind of a big deal. To get around this, Adobe suggests you manually put each of your media queries in separately linked files, not as &lt;code class="inline"&gt;@media&lt;/code&gt; blocks in your CSS. No thanks.&lt;/p&gt;

&lt;p&gt;Edge Inspect is definitely promising, but it has a few showstoppers at the moment.&lt;/p&gt;

&lt;h4&gt;Responsive Text with viewport-percentage length units&lt;/h4&gt;


&lt;p&gt;Want text to get larger as the viewport increases so you can keep your measure the same while keeping the layout fluid, all without resorting to tons of breakpoints to constantly adjust the font-size? You can use &lt;a href="http://dev.w3.org/csswg/css3-values/#viewport-relative-lengths"&gt;viewport-percentage lengths&lt;/a&gt;: &lt;code class="inline"&gt;vw&lt;/code&gt;, &lt;code class="inline"&gt;vh&lt;/code&gt;, &lt;code class="inline"&gt;vmin&lt;/code&gt;, &lt;code class="inline"&gt;vmax&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I'm not currently using them due to lackluster browser support, but I find it worth mentioning. Until we get better support or a performant polyfill for these units the next best thing is &lt;a href="https://github.com/davatron5000/FitText.js" title="FitText"&gt;FitText.js&lt;/a&gt; (only use it for headers, not body content). That's the same reason I haven't been using &lt;code class="inline"&gt;rem&lt;/code&gt;s as much as I'd like. &lt;strong&gt;EDIT:&lt;/strong&gt; Paul Irish pointed me to &lt;a href="https://github.com/saabi/vminpoly" title="A polyfill for CSS units vw, vh and vmin."&gt;a new polyfill, vminpoly,&lt;/a&gt; for this.&lt;/p&gt;

&lt;hr class="article"/&gt;




&lt;h4&gt;&lt;code class="inline"&gt;300ms&lt;/code&gt; of doom&lt;/h4&gt;


&lt;p&gt;Mobile Safari and other iOS and Android browsers have a feature which introduces a slight &lt;code class="inline"&gt;300ms&lt;/code&gt; delay between a tap and actually becoming active. This delay is actually rather noticeable. Google talked about this in January 2011 in their now popular guide &lt;a href="https://developers.google.com/mobile/articles/fast_buttons" title="Creating Fast Buttons for Mobile Web Applications"&gt;Creating Fast Buttons for Mobile Web Applications&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;The problem with this approach is that mobile browsers will wait approximately 300ms from the time that you tap the button to fire the click event. The reason for this is that the browser is waiting to see if you are actually performing a double tap.&lt;/blockquote&gt;


&lt;p&gt;Fortunately, we can remove it and make the site seem faster and more responsive with a &lt;a href="http://addyosmani.com/blog/writing-polyfills/" title="Polyfill"&gt;browser polyfill&lt;/a&gt; called &lt;a href="https://github.com/ftlabs/fastclick" title=""&gt;FastClick&lt;/a&gt;; an adaptation of Google's concept.&lt;/p&gt;

&lt;p&gt;In this example below, I load FastClick asynchronously only for iOS devices; I've heard there are some Android issues but haven't tested myself yet. I use the tiny JavaScript loader &lt;a href="http://headjs.com/" title="javascript loader and organizer"&gt;head.js&lt;/a&gt; for this since the majority of my visitors won't need to load FastClick. If you already use RequireJS, FastClick is an AMD module so it should just work when you &lt;code class="inline"&gt;require&lt;/code&gt; it.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="coffeescript"&gt;&lt;span class="c1"&gt;# load fastclick if mobile safari&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/(iPhone|iPod|iPad)/i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nx"&gt;head&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;js/fastclick.min.js&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;load&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt;
      &lt;span class="c1"&gt;# ideally you would call it directly on the links/btns rather than the body..&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;FastClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;h4&gt;Enable &lt;code class="inline"&gt;:active&lt;/code&gt; link states&lt;/h4&gt;


&lt;p&gt;While we're talking about mobile, we can enable CSS active states on links by adding a touchstart event listener. This is only necessary if you have defined your own custom link active states that you want to use instead of Mobile Safari's default gray tap–highlight color. For example, I have a simple active style of orange links and then a subtle "pressed in" inner shadow style for my buttons.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="css"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;remove&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="nt"&gt;default&lt;/span&gt; &lt;span class="nt"&gt;gray&lt;/span&gt; &lt;span class="nt"&gt;highlight&lt;/span&gt;
&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;tap&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;highlight&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="coffeescript"&gt;&lt;span class="c1"&gt;# enable :active pseudo in mobile safari&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;touchstart&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;




&lt;h4&gt;Twitter Cards in yo' &lt;code class="inline"&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;/h4&gt;


&lt;p&gt;Before I was ready to push everything live I added support for &lt;strong&gt;&lt;a href="https://dev.twitter.com/docs/cards" title="Twitter Cards"&gt;Twitter Cards&lt;/a&gt;&lt;/strong&gt;. You might not know the name for it, but you've certainly seen tweets that have certain snippets of content and metadata attached to them. Twitter wants to keep the experience consistent across devices and giving them some data helps them do that for you.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="auto center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/twitter_cards_stammy.jpeg" alt="Stammy Twitter Cards"/&gt;
  &lt;figcaption&gt;Twitter Cards as seen in their mobile app and on the web.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;Setup is just a few lines of meta tags. I added their tags for photo and summary cards. To do that, I used Jekyll liquid syntax to determine whether it was a regular post or a photo post. (Unrelated but do you know how hard it is to post escaped liquid syntax with pygments?.. &lt;a href="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_escape_liquid.png" target="_blank"&gt;all of the hacks&lt;/a&gt;)&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="html"&gt;{% if page.layout == &amp;#39;photo_layout&amp;#39; %}
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:card&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;photo&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  {% if page.image_lg %}
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:image&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.cdn}}{{page.image_lg}}?w=560&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:image:width&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{page.photo_width}}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:image:height&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{page.photo_height}}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  {% endif %}
{% else %}
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:card&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;summary&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  {% if page.image_lg %}
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:image&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{site.cdn}}{{page.image_lg}}?w=120&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  {% endif %}
{% endif %}
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:site&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@stammy&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:creator&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;@stammy&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:url&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://paulstamatiou.com{{page.url}}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:title&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{ page.title }}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;twitter:description&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{ page.content | strip_html | xml_escape | truncate: 200 }}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Much of those page properties (image_lg, photo_width, photo_height) are YAML front matter attributes unique to my layout. Chances are you'll only need the  meta tags for the summary card which doesn't require an image. As I'll explain later, the image size params are resized on the fly to the maximum width allowed by Twitter &amp;ndash; 560px for photo cards and 120px thumbnail for summary cards.&lt;/p&gt;

&lt;p&gt;Then I added some &lt;a href="http://ogp.me/" title="Open Graph Protocol"&gt;Open Graph tags&lt;/a&gt;, which are also pretty self-explanatory.&lt;/p&gt;

&lt;h4&gt;&lt;a href="https://twitter.com/intent/tweet?original_referer=http%3A%2F%2Fpaulstamatiou.com%2Fresponsive-retina-blog-development-part-1&amp;text=Developing%20a%20responsive%2C%20Retina-friendly%20site%20(Part%201)%20%E2%80%94%20PaulStamatiou.com&amp;tw_p=tweetbutton&amp;url=http%3A%2F%2Fpaulstamatiou.com%2Fresponsive-retina-blog-development-part-1&amp;via=Stammy" target="_blank"&gt;Share this post :)&lt;/a&gt; Part 3 coming soon&lt;/h4&gt;


&lt;p&gt;What's your mobile web development process like? Have you worked on a mobile first or responsive site yet? Let me know in the comments below or &lt;a href="http://twitter.com/stammy"&gt;shoot me a tweet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you'd like to learn more about media queries and responsive development, take a look at &lt;a href="http://blog.teamtreehouse.com/responsive-design-of-the-future-with-flexbox"&gt;this article about responsive design with flexbox&lt;/a&gt; or &lt;a href="http://learn.shayhowe.com/advanced-html-css/responsive-web-design"&gt;this RWD guide&lt;/a&gt;. I haven't read either of them but they look legit.&lt;/p&gt;

&lt;p class="notice"&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post is part of a series documenting the design and development of this blog. The first part was &lt;a href="http://paulstamatiou.com/responsive-retina-blog-design" title="Designing a responsive, Retina-friendly site"&gt;Designing a responsive, Retina-friendly site&lt;/a&gt;. The third post will be published next week. Stay tuned!&lt;/p&gt;


&lt;p&gt;&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;section name="footnotes" id="footnotes"&gt;&lt;/p&gt;

&lt;p id="footnote-1"&gt;&lt;a href="#r1"&gt;1&lt;/a&gt; Take a look at the &lt;a href="https://github.com/imathis/octopress/blob/master/Rakefile"&gt;Rakefile from Octopress&lt;/a&gt; for example.&lt;/p&gt;




&lt;p id="footnote-2"&gt;&lt;a href="#r2"&gt;2&lt;/a&gt; It is likely that grunt v0.4 will be out by the time you read this and that &lt;a href="https://github.com/gruntjs/grunt/wiki/Upgrading-from-0.3-to-0.4" title="Upgrading from 0.3 to 0.4 gruntjs"&gt;introduces some new syntax&lt;/a&gt;, so keep that in mind.&lt;/p&gt;




&lt;p id="footnote-3"&gt;&lt;a href="#r3"&gt;3&lt;/a&gt; Digestification basically means append the md5 hash to the filename so that every file is unique and there are no cache issues when pushing new files. For example, screen-201e33eaffa31ab1a1fde5564bb30631.css.&lt;/p&gt;




&lt;p id="footnote-4"&gt;&lt;a href="#r4"&gt;4&lt;/a&gt; That translates to 6.875mm on the iPhone and 8.536mm on the iPad and ~7mm on the iPad Mini. Though Nielsen Norman Group in their 2nd edition iPad Usability study suggest that 1cm by 1cm with adequate spacing in between performs best.&lt;/p&gt;




&lt;p id="footnote-5"&gt;&lt;a href="#r5"&gt;5&lt;/a&gt; That would entirely disable users from manually pinching and zooming, which I think is a usability concern regardless of how much you mobile optimize your site.&lt;/p&gt;




&lt;p id="footnote-6"&gt;&lt;a href="#r6"&gt;6&lt;/a&gt; Notice how I've used the word "conditionally" several times.. responsive design is really about various conditions to which your site &amp;mdash; from JavaScript and CSS to images and videos &amp;mdash; must react.&lt;/p&gt;




&lt;p id="footnote-7"&gt;&lt;a href="#r7"&gt;7&lt;/a&gt; Measure is the length of a line of text. Word of thumb is 40-75 characters per line for good readability.&lt;/p&gt;




&lt;p id="footnote-8"&gt;&lt;a href="#r8"&gt;8&lt;/a&gt; Not currently out as of this writing, but you can install via &lt;code class="inline"&gt;gem install sass --pre&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;&lt;/section&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-1" title="Developing a responsive, Retina-friendly site (Part 1)"&gt;Developing a responsive, Retina-friendly site (Part 1)&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=O-4FzUGmTng:L081fRIsYFo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=O-4FzUGmTng:L081fRIsYFo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=O-4FzUGmTng:L081fRIsYFo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=O-4FzUGmTng:L081fRIsYFo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=O-4FzUGmTng:L081fRIsYFo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=O-4FzUGmTng:L081fRIsYFo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=O-4FzUGmTng:L081fRIsYFo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=O-4FzUGmTng:L081fRIsYFo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/O-4FzUGmTng" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/responsive-retina-blog-development-part-1</feedburner:origLink></entry>
	
	<entry>
		<title>Joining Twitter</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/lhTQ4EJHLoM/joining-twitter" />
		<updated>2013-01-14T08:00:00-08:00</updated>
		<id>http://paulstamatiou.com/joining-twitter</id>
		<content type="html">&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I have always wanted to work at Twitter but never actually thought about it until &lt;a href="https://twitter.com/akashgarg" title="Akash Garg"&gt;Akash Garg&lt;/a&gt; reached out a few months ago&lt;sup&gt;&lt;a href="#footnote-1" id="r1"&gt;1&lt;/a&gt;&lt;/sup&gt;. Yes, this is a post announcing that &lt;strong&gt;I have joined the flock at Twitter&lt;/strong&gt;. I signed up for Twitter exactly six years ago in January 2007 as user #624,683&lt;sup&gt;&lt;a href="#footnote-2" id="r2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;




&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_dickc_twitter.jpg" alt="Paul Stamatiou and Dick Costolo at Twitter"/&gt;
  &lt;figcaption&gt;With @dickc, Twitter CEO Dick Costolo, after a company "tea time"&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;Almost 25,000 tweets later, it's obvious to me that Twitter is &lt;a href="http://twitter.com/stammy"&gt;my online identity&lt;/a&gt;. It's the only online property where you can really get a sense of who I am and my personality.&lt;/p&gt;

&lt;p&gt;I remember when Twitter was gaining steam in 2008. I was invited to speak at a &lt;a href="http://paulstamatiou.com/recap-ttivanguard-generation-techs-conference" title="Recap: TTI/Vanguard Generation Techs Conference"&gt;TTI/Vanguard conference in Rome&lt;/a&gt;&lt;sup&gt;&lt;a href="#footnote-3" id="r3"&gt;3&lt;/a&gt;&lt;/sup&gt;. It was my first speaking gig ever and they had booked me for a 45 minute speech. I only had 15 minutes prepared. Fortunately my talk evolved into a discussion about Twitter &amp;mdash; everyone kept asking what it was and how they could use it.&lt;/p&gt;

&lt;p&gt;Since then it has permeated the daily lives of over 200 million active users. It was even the topic of a &lt;a href="http://paulstamatiou.com/versatility-made-twitter-what-it-is-today" title="Versatility Made Twitter What It Is Today"&gt;30 page paper&lt;/a&gt; for a course I took at Georgia Tech.&lt;/p&gt;

&lt;hr class="article"/&gt;


&lt;p&gt;I work as an Experience Designer on the Growth Team, lead by &lt;a href="https://twitter.com/nancybroden"&gt;Nancy Broden&lt;/a&gt;. It's rather surreal to work just feet away from design leaders I have been following online for years like &lt;a href="http://twitter.com/stop" title="Doug Bowman"&gt;Doug Bowman&lt;/a&gt;, &lt;a href="https://twitter.com/mikeindustries"&gt;Mike Davidson&lt;/a&gt; and &lt;a href="https://twitter.com/jbrewer"&gt;Josh Brewer&lt;/a&gt;. I'm a designer but I also have a dev environment setup to help with implementation. That's the perfect mixture in my eyes.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/twdesign_studio.jpg" alt="Twdesign studio"/&gt;&lt;figcaption&gt;This is the most ridiculously complex animated logo, done in After Effects by &lt;a href="https://twitter.com/thisguy"&gt;@ThisGuy&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;Why this role? Well, after 5 years of startups (yes, this is my first &lt;em&gt;real&lt;/em&gt; job) there's one thing I want to get better at &amp;mdash; growing products. Being informed about knowing why things failed or worked well and running a myriad of experiments or usability studies to find the best performing design.&lt;/p&gt;

&lt;p&gt;My mind was blown last week when I was shown how many experiments the growth team frequently runs and pushes out to a percentage of the userbase. Whenever an experiment is completed, owners write up the results for all to learn from. No more design via hunches.&lt;/p&gt;

&lt;p&gt;Twitter is becoming a big company but I feel like I know everyone from following them on Twitter. Read more about working at Twitter from &lt;a href="http://www.mikeindustries.com/blog/archive/2012/12/we-are-expanding-the-design-team-at-twitter" title="We Are Expanding the Design Team at Twitter"&gt;Mike Davidson&lt;/a&gt; and &lt;a href="http://stopdesign.com/archive/2012/12/18/growing-twitter-design.html" title="Growing Twitter Design"&gt;Doug Bowman&lt;/a&gt;. I'd like to give a big thanks to everyone I bugged for advice during this process: &lt;a href="https://twitter.com/gabor"&gt;Gabor Cselle&lt;/a&gt;, &lt;a href="https://twitter.com/georgezachary"&gt;George Zachary&lt;/a&gt;, &lt;a href="https://twitter.com/ericflo"&gt;Eric Florenzano&lt;/a&gt;, &lt;a href="https://twitter.com/etmaguire"&gt;Eric Maguire&lt;/a&gt;, &lt;a href="https://twitter.com/eoghanmccabe"&gt;Eoghan McCabe&lt;/a&gt;, &lt;a href="https://twitter.com/sanjay"&gt;Sanjay Parekh&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;We're hiring&lt;/h4&gt;


&lt;p&gt;What would a new job announcement be without me getting you to come join?! The design studio &lt;a href="https://twitter.com/jobs/design_ux"&gt;has several openings&lt;/a&gt; as does the Growth Engineering team where &lt;a href="mailto:akash@twitter.com" rel="nofollow"&gt;Akash is the guy to ping&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;What about Picplum?&lt;/h4&gt;


&lt;p&gt;Akshay and I have both moved on to full-time jobs, with &lt;a href="http://twitter.com/dodeja"&gt;Akshay&lt;/a&gt; joining the new &lt;a href="http://www.livenationlabs.com/who"&gt;Live Nation Labs&lt;/a&gt;, but Akshay will still be actively maintaining and developing &lt;a href="https://www.picplum.com"&gt;Picplum&lt;/a&gt; in his spare time. I will remain onboard in an advisory role. We're looking for folks to help run Picplum &amp;mdash; from marketing to customer support. Drop us a line if you'd like to hear more.&lt;/p&gt;

&lt;h4&gt;The Office&lt;/h4&gt;


&lt;p&gt;In the spirit of my old &lt;a href="http://paulstamatiou.com/california-hq-pics" title="California HQ Pics"&gt;startup HQ posts&lt;/a&gt;, I brought my &lt;a href="http://paulstamatiou.com/photos"&gt;5D&lt;/a&gt; along to share a few shots of the new Twitter office at 1355 Market St, San Francisco.
&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/design_studio.jpg" alt="Design studio"/&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/hackweek_lunch.jpg" alt="Hackweek lunch"/&gt;
  &lt;figcaption&gt;Folks chowing down during Hack Week&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/josh_project.jpg" alt="Josh project"/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/larrys_lounge_tw.jpg" alt="Larrys lounge tw"/&gt;
  &lt;figcaption&gt;One of the game rooms.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_tw_desk.jpg" alt="stammy desk"/&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/timt_design_lense.jpg" alt="Tim trueman design lense"/&gt;
  &lt;figcaption&gt;&lt;a href="https://twitter.com/timtrueman"&gt;@timtrueman&lt;/a&gt; playing with a new 70-200 lens for his D600&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/twoffice_espresso.jpg" alt="Twoffice espresso"/&gt;
  &lt;figcaption&gt;&lt;a href="http://twitter.com/JFSIII"&gt;@JFSIII&lt;/a&gt; showing me how to use the espresso machine in one of the kitchenettes&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/twoffice_lobby.jpg" alt="Twoffice lobby"/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/tw_design_hot_sauce.jpg" alt="Tw design hot sauce"/&gt;&lt;figcaption&gt;&lt;a href="https://twitter.com/sm"&gt;Sara Mauskopf&lt;/a&gt; accepting Mike Davidson's hot sauce challenge.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/twoffice_rooftop.jpg" alt="Twoffice rooftop"/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_twitter_8th_kitchenette.jpg" alt="Twitter 8th kitchenette"/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;section name="footnotes" id="footnotes"&gt;&lt;/p&gt;

&lt;p id="footnote-1"&gt;&lt;a href="#r1"&gt;1&lt;/a&gt; after reading my popular post &lt;a href="http://paulstamatiou.com/startup-user-retention-lifecycle-email" title="Startup Idea: User Retention as a Service"&gt;Startup Idea: User Retention as a Service&lt;/a&gt;&lt;/p&gt;


&lt;p id="footnote-2"&gt;&lt;a href="#r2"&gt;2&lt;/a&gt;  I was an Odeo user and remember first hearing about twttr but initially avoided signing up then as as I didn't have a robust SMS cell plan and twttr was initially very SMS-oriented. I even &lt;a href="http://paulstamatiou.com/odeo-launches-twttr-hellodeo" title="twttr"&gt;blogged about the launch of twttr&lt;/a&gt;.&lt;/p&gt;


&lt;p id="footnote-3"&gt;&lt;a href="#r3"&gt;3&lt;/a&gt; The first day I got there I ended up meeting and having lunch with Aaron Swartz and Nicholas Negroponte.&lt;/p&gt;


&lt;p&gt;&lt;/section&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/joining-twitter" title="Joining Twitter"&gt;Joining Twitter&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=lhTQ4EJHLoM:Ursi_DjV5GU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=lhTQ4EJHLoM:Ursi_DjV5GU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=lhTQ4EJHLoM:Ursi_DjV5GU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=lhTQ4EJHLoM:Ursi_DjV5GU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=lhTQ4EJHLoM:Ursi_DjV5GU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=lhTQ4EJHLoM:Ursi_DjV5GU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=lhTQ4EJHLoM:Ursi_DjV5GU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=lhTQ4EJHLoM:Ursi_DjV5GU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/lhTQ4EJHLoM" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/joining-twitter</feedburner:origLink></entry>
	
	<entry>
		<title>Designing a responsive, Retina-friendly site</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/BPeG4LEzohA/responsive-retina-blog-design" />
		<updated>2013-01-05T17:20:00-08:00</updated>
		<id>http://paulstamatiou.com/responsive-retina-blog-design</id>
		<content type="html">&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;It's hard to believe I have been blogging for more than 7 years. Michael Wozniak, my hallmate during my freshman year at Georgia Tech, had gotten me into Gentoo Linux the year prior and told me he was playing with WordPress 1.2. Compared to the MediaWiki site I was running at the time that piqued my curiosity and I began blogging on WordPress on my G4 Mac Mini that summer. I immediately fell in love with it and began learning CSS and PHP to tweak the theme&lt;sup&gt;&lt;a href="#footnote-1" id="r1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;




&lt;p&gt;Eventually I found my &lt;em&gt;thing&lt;/em&gt; &amp;ndash; writing technical guides, product reviews and tech editorials. I still remember the feeling when I noticed one of my articles got picked up by Lifehacker. Then digg. Then 5 other sites. 20,000 uniques in 4 hours. I wrote a follow up to that article. Same thing. And another follow up. I received enough traffic that month in 2005 to kill the hard drive in my dorm-hosted Mac.&lt;/p&gt;

&lt;hr class="article"/&gt;


&lt;p&gt;Unfortunately, I haven't blogged as much in recent past; my waking hours spent worrying about startup issues than crafting new content. Things I would have blogged about in the past are now published as &lt;a href="http://twitter.com/stammy"&gt;tweets&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When the time arises, I &lt;strong&gt;thoroughly enjoy writing long-form articles&lt;/strong&gt; and with that in mind I wanted to design a better experience for consuming them.&lt;/p&gt;

&lt;p class="notice"&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article got rather long (15,000 words), so I split it up into a few posts. This one is about design. &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-1" title="Developing a responsive, Retina-friendly site Part 1"&gt;Developing a responsive, Retina-friendly site (Part 1)&lt;/a&gt; covers responsive development while the third part will cover responsive images.&lt;/p&gt;




&lt;h4&gt;Mobile&lt;/h4&gt;


&lt;p&gt;My last redesign in 2010 was not built with mobile in mind. It was more of a lets-get-this-new-Jekyll-thing-working project than a planned website overhaul. Visiting on an iPhone meant the typical double-tap-to-zoom fiasco.&lt;/p&gt;

&lt;p&gt;Having seen my traffic breakdown go from &lt;strong&gt;3%&lt;/strong&gt; iPhone and &lt;strong&gt;2%&lt;/strong&gt; iPad in 2011 to &lt;strong&gt;7%&lt;/strong&gt; iPhone and &lt;strong&gt;4%&lt;/strong&gt; iPad in 2012 I knew it was time to &lt;del&gt;focus on the mobile experience&lt;/del&gt; throw mobile visitors a proverbial bone. iPad visitors in particular spent more time on site than desktop or iPhone visitors. Approximately 132,000 people read this site on a mobile device in 2012. &lt;strong&gt;Damn&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2013/01/pstam_responsive_devices.jpg" alt="Responsive devices"/&gt;
  &lt;figcaption&gt;The new responsive &amp;amp; retina-friendly PaulStamatiou.com.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;These numbers are only going to grow. It helps that proliferation of LTE networks and devices means the fastest Internet connection people have will likely be on their smartphone, not their home connection. That's crazy.&lt;/p&gt;

&lt;h4&gt;Picture Perfect&lt;/h4&gt;


&lt;p&gt;Many of my posts and &lt;a href="http://paulstamatiou.com/review-2011-ford-fiesta-and-the-fiesta-movement" title="Review: 2011 Ford Fiesta and the Fiesta Movement"&gt;reviews are filled with my own photos&lt;/a&gt;. My blog actually got me into photography. I first purchased a DSLR to take better pictures for articles and product reviews. In the last 3 years I have fallen in love photography. But most of my shots were getting published on Instagram. It made me feel a bit bad that I don't often share many of my photos on my blog.
&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="mw1000 center"&gt;
  &lt;div&gt;&lt;a href="http://instagram.com/pstamatiou" title="Paul Stamatiou Instagram"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_insta_collage.jpg" alt="Paul Stamatiou Instagram"/&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;figcaption&gt;Some of my Instagrams&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;section&gt;
I was in that exact mindset when I was flying back from New York after hanging out with the &lt;a href="http://rapgenius.com"&gt;Rap Genius&lt;/a&gt; guys. They don't have an office, instead they have a few baller (to use their vernacular) penthouses in Brooklyn. I took this panorama on their deck with my iPhone which I then post-processed with Snapseed.
&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;figure class="focal-point mw1000 center"&gt;
  &lt;div&gt;&lt;a href="http://paulstamatiou.com/brooklyn-rapgenius" title="Rapgenius Brooklyn" target="_blank"&gt;&lt;img src="http://stammy.imgix.net/uploads/2012/11/brooklyn-rg-hq.jpg?w=1000" alt="Rapgenius HQ Brooklyn, New York"/&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;figcaption&gt;Click see my new photo page&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I liked this photo so much that I was vexed I couldn't share it with my Instagram followers. I began pondering about a clean way of sharing it on my blog.&lt;/p&gt;

&lt;hr class="article"/&gt;




&lt;h4&gt;The Retina Revolution&lt;/h4&gt;


&lt;p&gt;If I was going to touch my site, it would need to be Retina friendly. I'll be referring to Retina as the device agnostic term HiDPI from here on out. What does that mean? Every icon, background or image used should look crisp on HiDPI displays. The most pressing area for that is on mobile devices as there aren't yet that many HiDPI desktops and laptops out. As much as people love the Retina MacBook Pros, that's not even a single percentage of anyone's web traffic yet.&lt;/p&gt;

&lt;p&gt;Don't expect to have a HiDPI 27-inch display just yet. The &lt;a href="http://www.engadget.com/2012/11/27/sharp-pn-k321-4k-igzo-lcd-monitor/" title="Sharp's first 4K 32-inch IGZO LCD is destined for Japanese workstations "&gt;first 4K (3,840 x 2,160) big displays are shipping&lt;/a&gt; and they are &lt;em&gt;expensive&lt;/em&gt;.. around $5,500. But in 2-3 years? That'll be another story entirely; HiDPI displays will be standard on most high-end desktops&lt;sup&gt;&lt;a href="#footnote-2" id="r2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;If responsive web design was the fad of the web design/development community for the last few years, the next one is going to be HiDPI support. With &lt;a href="http://www.igvita.com/2011/04/07/life-beyond-http-11-googles-spdy/" title="Life beyond HTTP 1.1: Google's SPDY"&gt;HTTP 2.0 (with SPDY forming the starting point)&lt;/a&gt; slated to drop in 2014&lt;sup&gt;&lt;a href="#footnote-3" id="r3"&gt;3&lt;/a&gt;&lt;/sup&gt; it will be perfect timing to combat the larger filesizes needed for HiDPI image assets. As I'll discuss in the second part of this post, there are some development challenges associated with this.&lt;/p&gt;

&lt;h2 id="design"&gt;Design&lt;/h2&gt;


&lt;p&gt;&lt;/section&gt;
&lt;figure class="focal-point center"&gt;
  &lt;div&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_photoshopping_desk.jpg" alt="Photoshopping desk"/&gt;&lt;/div&gt;
  &lt;figcaption&gt;Late night Photoshopping &amp;amp; trance. Very similar to &lt;a href="http://paulstamatiou.com/coding-zone" title="The Coding Zone"&gt;The Coding Zone&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I wanted to &lt;strong&gt;completely rethink my site&lt;/strong&gt;, not just a add &lt;a href="http://www.youtube.com/watch?v=0yfArN-e2OU" title="ICE CREAM PAINT JOB!"&gt;new coat of candy paint&lt;/a&gt;. I planned to rewrite copy on all static pages, reorganize content as necessary and generally simplify things. This would also give me a good excuse to start using &lt;a href="http://paulstamatiou.com/review-html5-for-web-designers" title="Review: HTML5 for web designers book"&gt;more semantic HTML5 tags&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My design process was a little different from how I mentioned it in my ridiculously popular &lt;a href="http://paulstamatiou.com/startup-web-design-ux-crash-course" title="Crash Course: Design for Startups"&gt;Crash Course: Design for Startups&lt;/a&gt;. I usually start with some inspiration-wrangling, a few ideas about direction and lots of sketching before any Photoshop or code. I couldn't exactly whip out a big sketch pad in lovely last-minute seat &lt;abbr&gt;37B&lt;/abbr&gt; so I worked in Photoshop for most of my 6 hour flight back to SF (until they started playing How I Met Your Mother).&lt;/p&gt;

&lt;blockquote class="pull-right"&gt;If you need to use something like Readability or Safari Reader to read my articles, I've failed as a designer.&lt;/blockquote&gt;


&lt;p&gt;I began thinking single column. The &lt;strong&gt;content should be the star of the show&lt;/strong&gt;. No sidebars or extraneous post metadata that gets in the way of reading. If you need to use something like Readability or Safari Reader to read my articles, I've failed as a designer. And lets not forget the impetus behind this rethinking; I wanted to be able to &lt;strong&gt;publish large photos&lt;/strong&gt; &amp;ndash; within posts that extend beyond the narrow copy and also on &lt;a href="http://paulstamatiou.com/photos" title="Photos"&gt;individual photo pages&lt;/a&gt;. &lt;a href="http://www.igvita.com/2012/07/19/latency-the-new-web-performance-bottleneck/" title="Latency: The New Web Performance Bottleneck"&gt;Bandwidth and latency&lt;/a&gt; be damned, I want to show dozens of 1000px+ wide photos at a time.&lt;/p&gt;

&lt;h4&gt;Planning Mobile First RWD&lt;/h4&gt;


&lt;p&gt;The premise behind Mobile First Responsive Web Design&lt;sup&gt;&lt;a href="#footnote-4" id="r4"&gt;4&lt;/a&gt;&lt;/sup&gt; is that you should trim your site to only the essentials, establish the priority or question the necessity of all elements and focus on mobile before adding complexity for larger/desktop versions of the site. This is going to sound ridicu-cheesy, but this is a way of thinking and it applies to every aspect of your site planning. Even down to writing mobile first CSS to keep things lightweight and simple and conditionally load extra stylesheets and content for larger devices (that are also likely to have faster connections) as necessary.&lt;/p&gt;

&lt;p&gt;Categorizing your site into pieces and setting priority before even pondering aesthetics stems from &lt;a href="http://boxesandarrows.com/where-the-wireframes-are-special-deliverable-3/" title="http://boxesandarrows.com/where-the-wireframes-are-special-deliverable-3/"&gt;Dan Brown's page description diagrams&lt;/a&gt; back in the early 2000s.&lt;/p&gt;

&lt;blockquote&gt;The page description diagram, by demonstrating priorities and providing a context for the content and functionality, gives visual designers the information they need to create an effective layout.&lt;/blockquote&gt;


&lt;p&gt;It's a great little exercise when embarking on a redesign. Given that this site only has a few pages and then blog posts, it wasn't really needed. For the sake of teaching, I'll elaborate a bit. You generally start with three columns from high to low priority page elements. You list out each element and you can optionally provide a description of it and a simple wireframe of that element.&lt;/p&gt;

&lt;table style="margin-bottom:0.5em" border="1" bordercolor=#D3DDE7 style="background-color:#FFF" width="99%" cellpadding="5" cellspacing="0"&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Archives/Posts&lt;/td&gt;
        &lt;td&gt;RSS/Subscribe&lt;/td&gt;
        &lt;td&gt;Contact&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Photos&lt;/td&gt;
        &lt;td&gt;"Bits" (asides) posts&lt;/td&gt;
        &lt;td&gt;Search&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;About&lt;/td&gt;
        &lt;td&gt;Comments&lt;/td&gt;
        &lt;td&gt;"Stuff I Use" page&lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
        &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;@Stammy&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;FB/Twitter share&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;Post metadata, date&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;


&lt;p&gt;Some of this organization was by personal preference and some was metrics-driven. Take the &lt;strong&gt;post date&lt;/strong&gt; for example. I have some articles dating back 7 years and I don't want to advertise that the content may be outdated&lt;sup&gt;&lt;a href="#footnote-5" id="r5"&gt;5&lt;/a&gt;&lt;/sup&gt;, so I place less importance on that and display the publish date after the post. For the most part my articles are evergreen and more of my content is becoming less product reviews and more editorial.&lt;/p&gt;

&lt;p&gt;I've also found that time on site increases when users don't see the post date immediately. The majority of my visitors come from Google SERPs and they'll leave without reading if the first thing they see is that the content is more than a year or two old. Increasing time on site also tends to decrease bounce rate for these Googlers. After reading the post they are likely to open up a few other articles I link to or just browse around for another pageview. It's important that I do whatever I can to capture that first time visitor.&lt;/p&gt;

&lt;blockquote class="pull-right"&gt;If someone won't share a post because I don't have a Twitter button in 10 places on the page, then I'm writing pretty crappy content.&lt;/blockquote&gt;


&lt;p&gt; An example of priority based on personal preference is my decision to place &lt;strong&gt;low importance on Facebook and Twitter sharing functionality&lt;/strong&gt;. I like to believe that if the content is good enough, people will share it on their own accord. I also didn't want to load Facebook and Twitter javascript. This gives me a mental test before publishing.. &lt;strong&gt;is this content really good enough to publish?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I could simplified things more by merging my &lt;strong&gt;"bits" (smaller posts)&lt;/strong&gt; into the main posts section. Bits had their own RSS feed and index page. It was another navigation element; another forced decision upon visitors to visit another page. Bits now appear styled differently inline with the rest of the posts.&lt;/p&gt;

&lt;p&gt;But I messed up. When I first did this page description diagram I prioritized &lt;strong&gt;search functionality&lt;/strong&gt; as high. My first header designs as I'll show below had a huge search bar next to the main navigation as if it was one of the most important elements on the site. I looked into my Google CSE analytics &amp;dash; search was rarely used; less than 10 queries a day on average. Only 8,500 on-site searches in the last 3 years. I since relegated search to low priority on this diagram.&lt;/p&gt;

&lt;h4&gt;Where to begin with visual design?&lt;/h4&gt;


&lt;p&gt;After that basic IA and planning was out of the way, I had a good idea of what to include in the header.  I was going to distill it down to the essentials. There would be such little difference between the mobile version and larger responsive versions that I wouldn't really need to plan the responsive designs. The focus is on the content at all times, not just on mobile, so there's no need for me to do any content choreography and adjust layouts between responsive designs. No sidebars to hide or move, et cetera.&lt;/p&gt;

&lt;p&gt;Some designers start with a blank slate of copy and begin with typography and layout, while others begin with the site header and navigation. I began with the header. I tend to &lt;strong&gt;start my designs on an extreme&lt;/strong&gt; with the intention of toning it down later as necessary. As a tiny example of that, I made the avatar and header text much larger than I was comfortable with. If you only ever design within your comfort zone, you won't come across unexpected ideas that you may end up loving. That's how the folks at Lamborghini design &lt;sup&gt;&lt;a href="#footnote-2" id="r2"&gt;2&lt;/a&gt;&lt;/sup&gt; too &amp;mdash; starting with the most absurd and extreme lines that come to mind.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam-aventador.jpg" alt="Lamborghini Aventador LP 700-4"/&gt;
  &lt;figcaption&gt;I've ridden in a Ferrari 458 and thought that was insane. The Aventador hits 60 quicker, in just 2.8s.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I previously had a terse Twitter-like bio on the top of my homepage and decided to further reduce that into a subtitle. As for having my avatar there, I wanted to put a face to the content, much like people have become accustomed to seeing a face next to every tweet.&lt;/p&gt;

&lt;p&gt;Below you can see some early versions of the header that I was left with by the time the flight was ready to land. The one on the left was the first stab. It felt like there were too many menu items and the search just didn't line up. The middle version was my attempt to &lt;strong&gt;distill navigation into the most important elements&lt;/strong&gt;, posts and photos. I wasn't happy with the visual hierarchy there either and it made search look too important. In the third iteration I began playing with icons to minimize space used by navigation. I was trying to line it up under the avatar, but I had too many menu items and it just looked weird.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam-blog-nav-3up-photoshop.jpg" alt="PaulStamatiou blog header and navigation iterations"/&gt;
  &lt;figcaption&gt;Some early iterations of the blog header and navigation.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;Around this point that I dug into my metrics to find out that search wasn't used much. I initially opted for icon-only navigation with &lt;a href="http://onehackoranother.com/projects/jquery/tipsy/" title="Tipsy Tooltips"&gt;tipsy-style tooltips&lt;/a&gt;, but felt it violated &lt;a href="https://www.vitsoe.com/rw/about/good-design"&gt;Rams' "as little design as possible" principle&lt;/a&gt;, in addition to being cumbersome (having to hover over each icon first to see what they meant).&lt;/p&gt;

&lt;p&gt;Some hours of tinkering later I ended up with my current design with only three main navigation elements. In between Photoshop iterations, I would constantly sketch UI on paper to refine my ideas. Just drawing any tangentially-related solution that came to mind helps organize my thoughts.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="focal-point center"&gt;
  &lt;div&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_design_sketching.jpg" alt="Design sketching"/&gt;&lt;/div&gt;
  &lt;figcaption&gt;All I need is a &lt;a href="http://www.utrechtart.com/Utrecht-Tapebound-Sketch-Pad--50-lbs---Acid-Free--100-Sheets-MP19172-i1008199.utrecht"&gt;simple sketchbook&lt;/a&gt; and a &lt;a href="http://www.amazon.com/gp/product/B000XAL0O2/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B000XAL0O2&amp;linkCode=as2&amp;tag=paulstamatiou-20" title="Sakura 30181 Pigma Micron Blister Card 01 Ink Pen, 0.25-mm, Black"&gt;Micron 01 pen&lt;/a&gt; to sketch out concepts.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;h4&gt;Keeping track of iterations&lt;/h4&gt;


&lt;p&gt;I've made it a habit over the past year to &lt;strong&gt;constantly take screenshots&lt;/strong&gt; of my designs in progress. Either of Photoshop work or in-browser tweaks with Chrome dev tools. Over the course of this blog design I ended up with 67 screenshots. It's nice to be able to go back and trace your thought process over again. Danny Hertz from Twitter had an interesting idea about how to &lt;a href="https://twitter.com/dannyhertz/status/264499196948791296" data-datetime="2012-11-02T22:48:17+00:00"&gt;automate this with Selenium&lt;/a&gt;, but I digress.&lt;/p&gt;

&lt;p&gt;I've started using &lt;a href="http://layervault.com" title="LayerVault"&gt;LayerVault&lt;/a&gt; to help me with this. It's like GitHub for PSDs and you can visually flip through your PSD revisions.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_blog_header_design_layervault.jpg" alt="Paul Stamatiou blog - LayerVault"/&gt;
  &lt;figcaption&gt;LayerVault showing a revision. I keep my palette in big blocks on the top of the PSD for easy picking.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;h4&gt;The Sandboxed Cover Photo&lt;/h4&gt;


&lt;p&gt;Going along with my wanton lust for big photos, I also designed a second header to be displayed for particular posts and pages that have a cover photo defined in Jekyll's YAML front matter. I built it (and incorporated some slick parallax scrolling) but decided not to use it. I'm not quite sold on it yet. Back to the sketch pad.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_cover_photo_header.jpg" alt="Cover photo header"/&gt;
  &lt;figcaption&gt;Example of a page with a cover photo. Still a work in progress.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;h4&gt;I've got the blues&lt;/h4&gt;


&lt;p&gt;At this point, the design was coming together and needed to focus on typography, make a simple footer and some button styles.I created a muted blue shade button style to use throughout the site.&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam-blog-share-ui2.gif" alt="Paulstamatiou.com after content links"/&gt;
  &lt;figcaption&gt;Article publish date, share UI and related links&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;As we all know you should &lt;a href="http://ianstormtaylor.com/design-tip-never-use-black/" title="Design Tip: Never Use Black"&gt;never use black&lt;/a&gt; so I chose a fairly muted color palette of desaturated blue shades. For one, blue is awesome and two cooler colors recede and since the content is the centerpiece here I want it to stand out. My main copy is a subtle warm gray, as warmer colors come to the foreground.&lt;/p&gt;

&lt;h4&gt;Not all displays are alike&lt;/h4&gt;


&lt;p&gt;I wanted to get some feedback on a PSD so I showed it to my friend Anand on my MacBook Air. I quickly realized that &lt;strong&gt;I could barely see parts of the design&lt;/strong&gt;! The colors were way too light. I had been designing the whole time on a 27-inch Apple display and a 24-inch Dell display that made them seem like they had adequate contrast. Not so on any Apple laptop I tested it with.&lt;/p&gt;

&lt;p&gt;Enter WCAG 2.0. Yes, another W3C acronym! The &lt;strong&gt;W&lt;/strong&gt;eb &lt;strong&gt;C&lt;/strong&gt;ontent &lt;strong&gt;A&lt;/strong&gt;ccessibility &lt;strong&gt;G&lt;/strong&gt;uidelines cover various aspects of website accessibility, including contrast minimums. &lt;strong&gt;There is actually a rating system for contrast!&lt;/strong&gt; It takes text size, color and background color into account to come up with an AA or AAA level.&lt;/p&gt;

&lt;p&gt;No need to worry, Lea Verou came up with a handy tool called &lt;a href="http://leaverou.github.com/contrast-ratio/" title="Contrast Ratio - easily calculate color contrast ratios"&gt;contrast ratio&lt;/a&gt;. Punch in your color and background color to see if it has adequate contrast. But if you have to ask yourself if there's enough contrast, there probably isn't. I still need to darken the color of my footer links, they're a bit light.&lt;/p&gt;

&lt;h4&gt;Serifs.. on the web?!?&lt;/h4&gt;


&lt;p&gt;I decided to go with the lovely serif &lt;strong&gt;Adelle&lt;/strong&gt; for article headings and text. It's the first time I've really used a serif on the web.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_blog_design_typography_6up.jpg" alt="Blog design typography"/&gt;
  &lt;figcaption&gt;Trying to decide between 6 different Typekit typefaces. Chrome extension: &lt;a href="https://chrome.google.com/webstore/detail/whatfont/jabopobgcpjmedljpbcaablpmlmfcogm?hl=en" title="Whatfont chrome extension"&gt;WhatFont&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I've grown up being told that you shouldn't use serif typefaces on the web&amp;mdash;the serifs themselves&lt;sup&gt;&lt;a href="#footnote-6" id="r6"&gt;6&lt;/a&gt;&lt;/sup&gt; on certain curvy typefaces don't lend well to being displayed with a grid of pixels unless the particular font has been properly &lt;a href="http://www.typotheque.com/articles/hinting" title="Font Hinting"&gt;hinted&lt;/a&gt; (unlikely). Well, my official stance is this all matters less when you're dealing with HiDPI displays so I'm going for it.&lt;/p&gt;

&lt;blockquote class="huge"&gt;&lt;p&gt;If you want good type on Retina displays, stop discussing hinting et al. Just search for faces that happen to look good. Like the old days.&lt;/p&gt; &lt;a class="author" href="https://twitter.com/espiekermann/status/180877084426637313" title="Erik Spiekermann on Twitter"&gt;Erik Spiekermann&lt;/a&gt;&lt;/blockquote&gt;


&lt;p&gt;You can learn more about web typography with &lt;a href="http://www.kaikkonendesign.fi/typography/" title="Interactive Guide to blog typography"&gt;this interactive guide&lt;/a&gt; or &lt;a href="http://webtypography.net/toc/" title="The Elements of Typographic Style Applied to the Web"&gt;The Elements of Typographic Style Applied to the Web&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Photo Layout Ideation&lt;/h4&gt;


&lt;p&gt;Up until this point, the homepage mockup in Photoshop just had an article excerpt, a list of recent posts and then a few photos. I thought it would be interesting to show more information about the photos on hover.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_aston_image_hover.jpg" alt="Original image metadata hover design"&gt;
  &lt;figcaption&gt;First idea was to display photo title and camera metadata on hover. (&lt;a href="http://paulstamatiou.com/aston-martin-washington-dc-lightroom" title="Aston Martin"&gt;Aston&lt;/a&gt;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;&lt;img align="right" width="220" style="padding-left: 25px;padding-top:10px;" src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_blog_homepage_v5_iteration.png" alt="Blog homepage v5 iteration"/&gt;
After I was satiated with hover style, I quickly coded it up ghetto-style directly in Chrome dev tools to see how the interaction felt. I'm glad I made a prototype first because I quickly realized that hovering over each photo and then displaying a full-width overlay was jarring and abrupt to the user.&lt;/p&gt;

&lt;p&gt;It could also be inadvertantly triggered while scrolling down the page and it was unexpected. It taking up too much space and you couldn't see the photo while reading the title. Not to mention how would I make this mobile web friendly? I wanted to have it always display on mobile but that wouldn't work if it hid the image.&lt;/p&gt;

&lt;p&gt;Then I thought about having it only appear on the bottom section of the image on hover.&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_lytro_image_hover.jpg" alt="Design: Image hover metadata"/&gt;
  &lt;figcaption&gt;Second iteration for photo hover metadata&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;That almost worked but then there was the case of longer photo titles wrapping and looking unpleasant. I decided to forget the image hover stuff and instead vertically stack the photo metadata and put it below the image in its own photo layout. Again, I quickly marked it up to see what the experience was like in the browser. It worked, but I had another problem now.&lt;/p&gt;

&lt;p&gt;Having the same large site header and navigation took too much attention away from the photo itself.&lt;/p&gt;

&lt;p&gt;&lt;/section&gt;
&lt;figure class="center"&gt;
  &lt;img src="http://turbo.paulstamatiou.com/uploads/2012/12/pstam_photo_layout_ideation.jpg" alt="Photo layouts 3up"/&gt;
  &lt;figcaption&gt;A few photo layout iterations.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;section&gt;&lt;/p&gt;

&lt;p&gt;I &lt;strong&gt;kept removing and de-emphasizing elements&lt;/strong&gt; until it was clear the focus was on the photo. This brings up a tradeoff with usability though. This breaks the user's expectation of a consistent and familiar header navigation that they are familiar with on all other pages of this blog. I decided that was an acceptable tradeoff when the user is moving into a photo viewing mode. I added left/right arrows that display on the image on hover, and bind the left/right cursor keys so visitors can browse other photos easily. Since photo pages are not long, there was a simplified footer with all the necessary navigation to get back to the homepage.&lt;/p&gt;

&lt;h4&gt;&amp;lt;/design&amp;gt;&lt;/h4&gt;


&lt;p&gt;It was a bit challenging for me to explain how I approached the design of this blog. It's one thing to explain the finished product but it's another to explain all the iterations in between and how you got from one to the next. It's a lot of fiddling, having a few rules of thumb and &lt;a href="http://37signals.com/svn/posts/3024-questions-i-ask-when-reviewing-a-design" title="questions to ask when reviewing a design"&gt;constantly questioning yourself&lt;/a&gt; about those designs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subtletly&lt;/strong&gt;, something I also mentioned in &lt;a href="http://paulstamatiou.com/startup-web-design-ux-crash-course" title="Crash Course: Design for Startups"&gt;my design crash course&lt;/a&gt;, is one of those rules of thumb for me. I very, very often find myself thinking "can I make that lighter?", "can I remove this line?" and so on.&lt;/p&gt;

&lt;p&gt;If there are any visual garnishings, such as a button block sheen or inner white glow on a menu bar background, that don't serve a functional purpose (like grouping sets of elements together for Gestalt Law of Proximity), it can and likely should be de-emphasized by changing color, reducing opacity or removing it altogether.&lt;/p&gt;

&lt;p&gt;I spent a few hours per day over the course of about a week and 19 PSDs coming up with this before doing any real coding aside from prototypes to test certain design decisions. The design of this blog is &lt;strong&gt;still a work in progress&lt;/strong&gt; and I'm sure I'll be changing things in the near future.&lt;/p&gt;

&lt;h6&gt;Share this post :) Part 2 coming soon&lt;/h6&gt;


&lt;p&gt;What's your design process like? Have you worked on a mobile first or responsive site yet? Let me know in the comments below or &lt;a href="http://twitter.com/stammy"&gt;shoot me a tweet&lt;/a&gt;.&lt;/p&gt;

&lt;p class="notice"&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post is part of a series documenting the design and development of this blog. &lt;del&gt;The next part(s) covering development in great detail will be posted this coming week.&lt;/del&gt; &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-1" title="Developing a responsive, Retina-friendly site Part 1"&gt;Developing a responsive, Retina-friendly site (Part 1)&lt;/a&gt; covers responsive development while the third part covers HiDPI and responsive images: &lt;a href="http://paulstamatiou.com/responsive-retina-blog-development-part-2"&gt;Developing a responsive, Retina-friendly site (Part 2)&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;/section&gt;&lt;/p&gt;

&lt;p&gt;&lt;section name="footnotes" id="footnotes"&gt;&lt;/p&gt;

&lt;p id="footnote-1"&gt;&lt;a href="#r1"&gt;1&lt;/a&gt; Several redesigns later I ended up making and releasing my own theme, 281, that ended up becoming an option on WordPress.com.&lt;/p&gt;




&lt;p id="footnote-2"&gt;&lt;a href="#r2"&gt;2&lt;/a&gt; I remember paying more than &lt;a href="http://paulstamatiou.com/how-to-apple-macbook-pro-raid-0-array-with-2-intel-x25-m-ssds" title="How To: Apple MacBook Pro Raid 0 Array"&gt;$700 for my first 80GB SSD (and then another for RAID)&lt;/a&gt; in late 2008. Now they're affordable and ubiquitious on any decent computer.&lt;/p&gt;




&lt;p id="footnote-3"&gt;&lt;a href="#r3"&gt;3&lt;/a&gt; HTTP/2.0 to be submitted to IESG for consideration as a Proposed Standard in November 2014.&lt;/p&gt;




&lt;p id="footnote-4"&gt;&lt;a href="#r4"&gt;4&lt;/a&gt; You can read more about Mobile First in &lt;a href="http://www.lukew.com/resources/mobile_first.asp" title="Mobile First Design"&gt;Luke Wroblewski's excellent book&lt;/a&gt;.&lt;/p&gt;




&lt;p id="footnote-5"&gt;&lt;a href="#r5"&gt;5&lt;/a&gt; I know this is a controversial issue. Some people despise sites that don't list publish date adjacent to the title. But as a site owner, it benefits me to put it after the post.&lt;/p&gt;




&lt;p id="footnote-6"&gt;&lt;a href="#r6"&gt;6&lt;/a&gt; By my use of "serif" here I don't mean the typeface but the small lines shooting off the edges of letters. &lt;/p&gt;


&lt;p&gt;&lt;/section&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/responsive-retina-blog-design" title="Designing a responsive, Retina-friendly site"&gt;Designing a responsive, Retina-friendly site&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=BPeG4LEzohA:t1c5B20PXsY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=BPeG4LEzohA:t1c5B20PXsY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=BPeG4LEzohA:t1c5B20PXsY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=BPeG4LEzohA:t1c5B20PXsY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=BPeG4LEzohA:t1c5B20PXsY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=BPeG4LEzohA:t1c5B20PXsY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=BPeG4LEzohA:t1c5B20PXsY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=BPeG4LEzohA:t1c5B20PXsY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/BPeG4LEzohA" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/responsive-retina-blog-design</feedburner:origLink></entry>
	
	<entry>
		<title>Twitter Review: New Gmail iPhone app</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/PR1TTodA3w8/twitter-review-new-gmail-iphone-app" />
		<updated>2012-12-06T13:28:38-08:00</updated>
		<id>http://paulstamatiou.com/twitter-review-new-gmail-iphone-app</id>
		<content type="html">&lt;p&gt;Google recently released a new iPhone app for Gmail this week to much fanfare. After the third blog post citing how "slick" it was, I gave it a go myself. I currently use Sparrow for email on my iPhone. After having it installed for 5 minutes, I &lt;a href="https://twitter.com/Stammy/status/276797250594828288" title="Paul Stamatiou on the new GMail for iPhone app"&gt;asked the Twitterverse what they think&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;New Gmail iPhone app: discuss. I think the font-weight is too light. I want to read my email, not frame it and put it in an art gallery.&lt;/blockquote&gt;





&lt;p&gt;&lt;strong&gt;Aside:&lt;/strong&gt; I just redesigned my blog (take a look! responsive &amp;amp; retina friendly -- more on that later) and moved all posts from my "bits" feed into the main feed, so your RSS reader may have surfaced a bunch of old posts recently. I'm going to be moving off feedburner in the near future. In the meantime you can subscribe to the new feed: &lt;strong&gt;&lt;a href="http://paulstamatiou.com/posts.xml"&gt;paulstamatiou.com/posts.xml&lt;/a&gt;&lt;/strong&gt; but I'll try to redirect the feedburner feed too.&lt;/p&gt;

&lt;p&gt;&lt;figure class="center"&gt;
  &lt;img src="http://stammy.imgix.net/uploads/2012/12/gmail_iphone_app.png" width="320" height="332" alt="Gmail iphone app"/&gt;
  &lt;figcaption&gt;Gmail for iOS (Some email entries photoshopped out for obvious reasons)&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;h4&gt;The Verdict&lt;/h4&gt;


&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; It is hard to distinguish what is a read/unread message. Thats my biggest complaint,
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/sdenike"&gt;@sdenike&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; I agree with you on font-weight. Overall I like the UX. Easy to get around quickly.
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/JamesStaubes"&gt;@JamesStaubes&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; Indeed. I ended up switching back to mail.app because it lagged way too many times. Oh, its a web app too.
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/ohhmaar"&gt;@ohhmaar&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; Too many loading screens (not sure if/when it caches content), too many clicks to switch accounts. Looks pretty but didn't last.
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/sriramk"&gt;@sriramk&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; Feels like a non-native app. Not fluid at all. Not cool.
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/saverio"&gt;@saverio&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; agreed, too artsy! I don't like that I can't get to "all mail" quickly with all my labels.
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/dougaitken"&gt;@dougaitken&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt;  One of the only few problems I have with it. Love it for the most part, though..
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/ryanashcraft"&gt;@ryanashcraft&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; yeah - looks good, but too many alerts for my 6 email accounts constantly checking for mail - i've uninstalled
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/mstafford"&gt;@mstafford&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; too metro for me. not having unified inbox was the killer.
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/connor"&gt;@connor&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; I personally like the new Gmail iOS app. The font is a little hard to read, but it doesn't hinder my experience
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/ATLChris"&gt;@ATLChris&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
  &lt;a href="http://twitter.com/stammy"&gt;@Stammy&lt;/a&gt; it’s pretty good overall
  &lt;br/&gt;&lt;strong&gt;&lt;a href="http://twitter.com/semil"&gt;@semil&lt;/a&gt;&lt;/strong&gt;
&lt;/blockquote&gt;


&lt;p&gt;&lt;strong&gt;What do you think? What's your main mobile email client of choice?&lt;/strong&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/twitter-review-new-gmail-iphone-app" title="Twitter Review: New Gmail iPhone app"&gt;Twitter Review: New Gmail iPhone app&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=PR1TTodA3w8:4eb6Z9ILmPo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=PR1TTodA3w8:4eb6Z9ILmPo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=PR1TTodA3w8:4eb6Z9ILmPo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=PR1TTodA3w8:4eb6Z9ILmPo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=PR1TTodA3w8:4eb6Z9ILmPo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=PR1TTodA3w8:4eb6Z9ILmPo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=PR1TTodA3w8:4eb6Z9ILmPo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=PR1TTodA3w8:4eb6Z9ILmPo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/PR1TTodA3w8" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/twitter-review-new-gmail-iphone-app</feedburner:origLink></entry>
	
	<entry>
		<title>Culture</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/bIlc2vihzuM/startup-culture" />
		<updated>2012-09-05T15:00:09-07:00</updated>
		<id>http://paulstamatiou.com/startup-culture</id>
		<content type="html">&lt;p&gt;I recently read Alex MacCaw's article, &lt;a href="http://blog.alexmaccaw.com/stripes-culture" title="What it's like to work for Stripe"&gt;What it’s like to work for Stripe&lt;/a&gt;, while on a &lt;a href="http://paulstamatiou.com/twin-falls-maui-hawaii"&gt;much needed vacation&lt;/a&gt;. Alex, whom I first discovered via his post on &lt;a href="http://alexmaccaw.com/posts/async_ui" title="Asynchronous UIs"&gt;asynchronous UIs&lt;/a&gt; and then &lt;a href="http://alexmaccaw.com/posts/how_to_travel_around_the_world"&gt;traveling the world&lt;/a&gt;, does a great job discussing how Stripe operates. I have gotten to know the Stripes over the last year and am impressed at how well they execute. As he states, culture can be hard to define so I'd like to share a bit about what it means to me. &lt;/p&gt;

&lt;p&gt;This summer &lt;a href="https://www.picplum.com/instagram" title="Picplum prints Instagrams"&gt;Picplum&lt;/a&gt; had two excellent interns from Carnegie Mellon. It was my first time working with anyone other than a cofounder and it was rather enlightening. As someone who is admittedly a bit of a perfectionist at times, I initially had a hard time even wanting to split work up.&lt;/p&gt;

&lt;p&gt;That quickly changed. Everyone had their own feature to build, worked on everything from design to back-end to get it working and then ship it. We got so much done.&lt;/p&gt;

&lt;p&gt;Our interns have since gone back to college, and I have been left pondering about growing the &lt;a href="https://www.picplum.com" title="Picplum Prints"&gt;Picplum&lt;/a&gt; team. I have been fortunate to find a &lt;a href="http://twitter.com/dodeja" title="Akshay Dodeja"&gt;cofounder&lt;/a&gt; (and roommate) that I learn from, enjoy being around and have much respect for.&lt;/p&gt;

&lt;h4&gt;How do you attract those &lt;a href="http://www.quora.com/What-is-an-A-Player/answer/Handowo-Dipo" title="What is an A player -- Steve Jobs"&gt;Jobsian A-players&lt;/a&gt;?&lt;/h4&gt;


&lt;p&gt;It's with a culture where people can thrive and tackle problems &lt;em&gt;they&lt;/em&gt; find interesting.  It's not with offering standing desks and beefy computers; every Silicon Valley startup offers that. It's not with showing off office pictures of employees playing around with nerf guns. Those are gimmicks. Culture is not defined by a fancy workplace. It's all about the people.&lt;/p&gt;

&lt;p&gt;Company culture is often something a potential hire can't easily find out until they're at the company (or until &lt;a href="http://www.quora.com/Square-Inc-1/Is-Square-an-unpleasant-place-to-work" title="Is Square an unpleasant place to work?"&gt;it's too late&lt;/a&gt;). Except for larger startups that have found interesting ways of evangelizing their culture. Stripe and Quora have hackathons and GitHub has drinkups. GitHub even custom labeled their &lt;a href="http://dribbble.com/shots/693909-GitHub-Bourbon-Slow-Merge"&gt;own batch of "Slow Merge" bourbon&lt;/a&gt; and used to have contests where &lt;a href="https://github.com/blog/466-the-2009-github-contest"&gt;the prize was expensive bourbon&lt;/a&gt;. That kind of goes with their culture, they tend to hire friends and folks they get to know at their drinkups. They rent out local clubs (Mighty) and have their employees play great techno when all of their remote employees are in town.&lt;/p&gt;

&lt;h4&gt;What about small startups?&lt;/h4&gt;


&lt;p&gt;But when you're a much smaller team you can't exactly do those things. So you focus on the people. Early on with tiny startups culture is more about the &lt;strong&gt;people and their personalities rather than work processes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For whatever reason, their sense of humor is the first thing that comes to mind; perhaps because that's also what I look for in friends. ENTP, INTJ...? How do they handle criticism of their work? Do they &lt;a href="http://blog.asmartbear.com/startup-hiring-advice.html" title="Hiring Employee #1"&gt;communicate well&lt;/a&gt;? These aren't things you can readily discover during a technical interview. So you focus on hiring those that align most with your startup's work ethic and how you build things.. and &lt;strong&gt;let the culture naturally build itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I recall flipping through &lt;a href="http://www.slideshare.net/reed2001/culture-1798664" title="Culture"&gt;Reed Hastings' slides on Netflix culture&lt;/a&gt; some years ago, where he detailed their culture like I've never seen any company do before. This one line stuck with me:&lt;/p&gt;

&lt;blockquote&gt;Actual company values are the behaviors and skills that are valued in fellow employees.&lt;/blockquote&gt;


&lt;p&gt;All I can think about is growing our team. Learn more about &lt;a href="https://angel.co/picplum" title="Picplum AngelList"&gt;Picplum on AngelList&lt;/a&gt;.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/startup-culture" title="Culture"&gt;Culture&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=bIlc2vihzuM:_1hJizfy8co:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=bIlc2vihzuM:_1hJizfy8co:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=bIlc2vihzuM:_1hJizfy8co:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=bIlc2vihzuM:_1hJizfy8co:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=bIlc2vihzuM:_1hJizfy8co:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=bIlc2vihzuM:_1hJizfy8co:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=bIlc2vihzuM:_1hJizfy8co:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=bIlc2vihzuM:_1hJizfy8co:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/bIlc2vihzuM" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/startup-culture</feedburner:origLink></entry>
	
	<entry>
		<title>My TechCrunch Post for First-time Startup Entrepreneurs</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/oAj3mezf6EQ/first-time-startup-entrepreneurs-stop-fucking-around" />
		<updated>2012-08-16T10:49:03-07:00</updated>
		<id>http://paulstamatiou.com/first-time-startup-entrepreneurs-stop-fucking-around</id>
		<content type="html">&lt;p&gt;In case you didn't catch it, I wrote my first TechCrunch guest post earlier this month. It's aptly named &lt;a href="http://techcrunch.com/2012/08/05/first-time-startup-entrepreneurs-stop-fucking-around/" title="First-Time Startup Entrepreneurs: Stop Fucking Around"&gt;First-Time Startup Entrepreneurs: Stop Fucking Around&lt;/a&gt; and it's my take on how first-time startuppers should work and get things done. Take a look at it and let me know what you think! &lt;/p&gt;

&lt;blockquote&gt;We are in an amazing time right now — perhaps the perfect time to build companies. And it pains me to see first-time entrepreneurs flush away this huge opportunity getting caught in the hype of how cool it is to do a startup, going to endless meetups and spending entirely too much time on Maserati problems when they’re not busy cargo cult coding. Startups are a grind. It may end with having to get a job, or it may end with a big smile and a Section 280G, but either way you’ll have learned a ton.&lt;/blockquote&gt;


&lt;p&gt;&lt;a href="http://techcrunch.com/2012/08/05/first-time-startup-entrepreneurs-stop-fucking-around/" title="First-Time Startup Entrepreneurs: Stop Fucking Around"&gt;Read the rest &amp;raquo;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was a bit overwhelmed by the immensely positive reactions to this post. Many emails, 500+ new Twitter followers, lots of new &lt;a href="https://www.picplum.com/instagram" title="Picplum Prints Instagram photos"&gt;Picplum customers&lt;/a&gt; and more. Just goes to show that I should blog more!&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/first-time-startup-entrepreneurs-stop-fucking-around" title="My TechCrunch Post for First-time Startup Entrepreneurs"&gt;My TechCrunch Post for First-time Startup Entrepreneurs&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=oAj3mezf6EQ:Bciat1IMUTo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=oAj3mezf6EQ:Bciat1IMUTo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=oAj3mezf6EQ:Bciat1IMUTo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=oAj3mezf6EQ:Bciat1IMUTo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=oAj3mezf6EQ:Bciat1IMUTo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=oAj3mezf6EQ:Bciat1IMUTo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=oAj3mezf6EQ:Bciat1IMUTo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=oAj3mezf6EQ:Bciat1IMUTo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/oAj3mezf6EQ" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/first-time-startup-entrepreneurs-stop-fucking-around</feedburner:origLink></entry>
	
	<entry>
		<title>Browser sync is the killer app</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/HoCs4p7GAek/google-chrome-for-ios-thoughts" />
		<updated>2012-06-29T00:00:00-07:00</updated>
		<id>http://paulstamatiou.com/google-chrome-for-ios-thoughts</id>
		<content type="html">&lt;p&gt;"Slow. Doesn't use the V8 engine. Second-class citizen on the iPhone. 3x slower than Mobile Safari because it uses WebViews. No full screen, no gestures. Horrible."&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/06/pstam_chrome_ios_620.jpg" alt="Google Chrome browser for iOS"/&gt;&lt;br/&gt;&lt;small&gt;Taken by a &lt;a href="http://paulstamatiou.com/photos" title="Photos by Paul Stamatiou"&gt;lovely Canon 5D Mark III&lt;/a&gt; (thoughts coming soon)&lt;/small&gt;&lt;/div&gt;





&lt;p&gt;All of these have been used to describe the new Chrome app for Apple iOS. But you know what? It's not all about speed. Browser sync is the killer feature for me.&lt;/p&gt;

&lt;p&gt;I remember when &lt;a href="http://blog.mozilla.org/labs/2007/12/introducing-weave/"&gt;Mozilla's Weave initiative&lt;/a&gt; was announced back in 2007. It was a way for you to sync bookmarks, settings, et cetera amongst your Firefox browsers &amp;mdash; and I thought that was going to be amazingly huge. In particular because you could use your own server for it. I remember even setting up my own WebDAV server solely for syncing Firefox. But times have changed and I would rather let trusted others manage my data and servers for me (Heroku, Google, Amazon, Dropbox)&lt;small&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/small&gt;.&lt;/p&gt;

&lt;p&gt;I had even pitched a hosting company on creating a hosted Weave service for users. I had just come back from &lt;a href="http://paulstamatiou.com/recap-ttivanguard-generation-techs-conference" title="Recap: TTI/Vanguard Generation Techs Conference"&gt;speaking at a conference in Rome&lt;/a&gt; where I happened to run into &lt;a href="http://en.wikipedia.org/wiki/Aza_Raskin" title="Aza Raskin"&gt;Aza Raskin&lt;/a&gt;&lt;small&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/small&gt;, who blew my mind about the future of the cloud.&lt;/p&gt;

&lt;p&gt;Years later browser sync became the norm in desktop browsers.. now it's finally come full-circle to mobile. I &lt;strong&gt;love&lt;/strong&gt; it. Here's to never having the "oh I have that tab open on my other computer/device" issue again.&lt;/p&gt;

&lt;p&gt;I can't believe Chrome is just a few years old. I still remember when Phoenix was the coolest program on the block.&lt;/p&gt;

&lt;p&gt;Chrome for iOS is damn good &amp;mdash; even if I can't set it as default.
&lt;strong&gt;What do you think?&lt;/strong&gt;&lt;/p&gt;

&lt;br&gt;


&lt;p&gt;&lt;strong&gt;Footnotes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;small&gt;&lt;sup&gt;1&lt;/sup&gt; I can't believe I actually gave &lt;a href="http://paulstamatiou.com/thoughts-on-dropbox" title="Thoughts on Dropbox"&gt;Dropbox a negative review in 2008&lt;/a&gt;. Sorry about that Drew. I wanted them to be a layer on top of my own storage (just use my Amazon keys). I liked feeling that I "owned" whatever my data was on. Well times have changed and I could not care less as long as my data is in multiple places that I don't have to manage.&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; That was quite the trip for a college student. Also got to chat with &lt;a href="http://en.wikipedia.org/wiki/Leonard_Kleinrock"&gt;Leonard Kleinrock&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Nicholas_Negroponte"&gt;Nicholas Negroponte&lt;/a&gt; and other Wikipedia-page-bearing tech folk. All thanks to a CS professor at Georgia Tech that recommended this conference invite me to speak about 'being a digital native' (a talk that largely got sidetracked when people asked me to explain what Twitter was).&lt;/small&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/google-chrome-for-ios-thoughts" title="Browser sync is the killer app"&gt;Browser sync is the killer app&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=HoCs4p7GAek:0EYfPD2wvo0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=HoCs4p7GAek:0EYfPD2wvo0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=HoCs4p7GAek:0EYfPD2wvo0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=HoCs4p7GAek:0EYfPD2wvo0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=HoCs4p7GAek:0EYfPD2wvo0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=HoCs4p7GAek:0EYfPD2wvo0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=HoCs4p7GAek:0EYfPD2wvo0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=HoCs4p7GAek:0EYfPD2wvo0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/HoCs4p7GAek" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/google-chrome-for-ios-thoughts</feedburner:origLink></entry>
	
	<entry>
		<title>My First Hackintosh</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/KOIMF7pCrik/hackintosh-computer" />
		<updated>2012-05-27T19:05:00-07:00</updated>
		<id>http://paulstamatiou.com/hackintosh-computer</id>
		<content type="html">&lt;p&gt;A year ago I wrote about how I wanted to &lt;a href="http://paulstamatiou.com/hackintosh" title="Hackintosh computer"&gt;build a Hackintosh&lt;/a&gt;. Oddly enough, exactly a year later, I ended up getting around to it.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/05/pstam_hackintosh.jpg" alt="Hackintosh"/&gt;&lt;/div&gt;


&lt;p&gt;My roommate/cofounder Akshay had a Gigabyte GA-EP35-DS3R motherboard and Core 2 Quad CPU lying around from his last hackintosh (he's since upgrade to Sandy Bridge). I ended up putting getting a display, graphics card, case, SSD and PSU to put it to use. I plan on upgrading to the new Ivy Bridge chipset and 22nm CPU but will wait until Apple releases an Ivy Bridge computer so that no patched kernel hacks are necessary to get it working as is currently the case.&lt;/p&gt;

&lt;p&gt;So far I'm very happy with my current setup. Even though it's an old LGA775 setup it feels way faster than my Core i7 1.8GHz MacBook Air. The Hackintosh has a 2.4GHz Core 2 Quad that I overclocked a bit to 3GHz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current Specs:&lt;/strong&gt; Intel Q6600 2.4GHz Core 2 Quad @ 3GHz, 4GB DDR2 800, Gigabyte GA-EP35-DS3R motherboard, Gigabyte Radeon HD6670 graphics card, Antec 520W modular PSU, Lian Li PC-V700 case, Kingston HyperX 3K 120GB SSD, 2 x  2TB hard drives, Lite-on SATA DVD drive.&lt;/p&gt;

&lt;p&gt;I'm the most pleased with the Lian Li case. It's their smallest ATX offering and comes with lots of rubber standoffs to ensure quiet operation. The doors don't need any screws and they just snap on and off. The most interesting part is that the PSU is located in the front of the computer, so as to reduce the height of the case. It reminds me of when people were talking about the BTX form factor back in ~2004 and all the BTX cases relocated power to the bottom.&lt;/p&gt;

&lt;h4&gt;Process&lt;/h4&gt;


&lt;p&gt;I'll go into more depth about how the whole Hackintosh installation process works when I upgrade this box to Ivy Bridge later in the summer, but here's the gist:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Create a bootable USB stick with a copy of OS X Lion you have purchased from the Mac App Store or from Apple's USB stick. Read: &lt;a href="http://tonymacx86.blogspot.com/2011/10/unibeast-install-mac-os-x-lion-using.html" title="UniBeast: Install Mac OS X Lion Using an All-In-One Bootable USB Drive"&gt;UniBeast: Install Mac OS X Lion Using an All-In-One Bootable USB Drive&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The guide linked to above covers everything, but essentially you install OS X then run a program called MultiBeast to install all the kernel extensions required to make your hardware work (things like network and audio drivers) as well as install a bootloader. I went the route of using "EasyBeast" which doesn't require a DSDT (which I'll explain in my next hackintosh post).&lt;/li&gt;
  &lt;li&gt;After the OS X install I then &lt;a href="http://tonymacx86.blogspot.com/2012/05/mac-os-x-1074-update.html" title="Mac OS X 10.7.4"&gt;downloaded OS X 10.7.4 combo update&lt;/a&gt;, ran it, then ran MultiBeast again (in general you run this app after every large system update).&lt;/li&gt;
  &lt;li&gt;I couldn't get App Store working and got an account not verified working, so I had to download an application called EFI Studio and &lt;a href="http://www.osx86.net/10-7-lion/11315-app-store-your-device-computer-could-not-verified.html#post76269"&gt;follow these instructions&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;I could not get audio working on this motherboard but fortunately I have been using a &lt;a href="http://paulstamatiou.com/sennheiser-hd-650-headphones" title="Sennheiser HD 650... Wow"&gt;USB DAC for my headphones&lt;/a&gt; so I just plugged that in.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The best part? Using &lt;a href="http://paulstamatiou.com/photos"&gt;Adobe Lightroom 4&lt;/a&gt; is no longer painfully slow.&lt;/p&gt;

&lt;h4&gt;Thoughts?&lt;/h4&gt;

&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/hackintosh-computer" title="My First Hackintosh"&gt;My First Hackintosh&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=KOIMF7pCrik:st-maVtyIWI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=KOIMF7pCrik:st-maVtyIWI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=KOIMF7pCrik:st-maVtyIWI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=KOIMF7pCrik:st-maVtyIWI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=KOIMF7pCrik:st-maVtyIWI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=KOIMF7pCrik:st-maVtyIWI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=KOIMF7pCrik:st-maVtyIWI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=KOIMF7pCrik:st-maVtyIWI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/KOIMF7pCrik" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/hackintosh-computer</feedburner:origLink></entry>
	
	<entry>
		<title>The Life of a Startup in Commits</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/Xflh23xk2BI/skribit-life-startup-commits-graph" />
		<updated>2012-04-13T17:49:52-07:00</updated>
		<id>http://paulstamatiou.com/skribit-life-startup-commits-graph</id>
		<content type="html">&lt;p&gt;Here's a GitHub impact graph of every Skribit code commit. Starting from November 2007 during Startup Weekend (hence all the contributors initially), progressing through to when I &lt;a href="http://paulstamatiou.com/full-time-startup-skribit-week-30-coding-coding-coding" title="Full-time Startup: Skribit Week 30 (Coding, Coding, Coding)"&gt;began working full-time on Skribit in 2009&lt;/a&gt;, when we slowed things down in mid-2010 and then &lt;a href="http://paulstamatiou.com/skribit-shutting-down" title="Skribit Shutting Down"&gt;pulled it offline in April 2011&lt;/a&gt;. It was a great ride!&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/04/skribit_commits_full_res.png" title="Skribit git commit logs"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/04/skribit_commits_07_to_11.png" alt="Skribit git commit logs"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Click for full-res. I believe I had two computers at the time so a few of those colors are mine.&lt;/small&gt;&lt;/div&gt;

&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/skribit-life-startup-commits-graph" title="The Life of a Startup in Commits"&gt;The Life of a Startup in Commits&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Xflh23xk2BI:zoJtcuead9Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Xflh23xk2BI:zoJtcuead9Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Xflh23xk2BI:zoJtcuead9Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Xflh23xk2BI:zoJtcuead9Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Xflh23xk2BI:zoJtcuead9Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Xflh23xk2BI:zoJtcuead9Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Xflh23xk2BI:zoJtcuead9Y:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Xflh23xk2BI:zoJtcuead9Y:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/Xflh23xk2BI" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/skribit-life-startup-commits-graph</feedburner:origLink></entry>
	
	<entry>
		<title>Inside Votizen</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/TVLghzTQM-w/inside-votizen" />
		<updated>2012-04-12T11:00:00-07:00</updated>
		<id>http://paulstamatiou.com/inside-votizen</id>
		<content type="html">&lt;p&gt;It's no surprise that I'm enthralled by startups of all types. I am particularly interested in how startups work, their internal processes and culture, rather than their external pitch and product features. It was this interest that lead me to catch up with &lt;a href="http://semilshah.wordpress.com/" title="Semil Shah"&gt;Semil Shah&lt;/a&gt; and &lt;a href="http://twitter.com/putorti" title"Jason Putorti"&gt;Jason Putorti&lt;/a&gt; from &lt;a href="http://votizen.com" title="Votizen"&gt;Votizen&lt;/a&gt; one sunny afternoon in in Mountain View, just a block or two from 500 Startups and a mile from Y Combinator.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_semil_jason_desk_1200.jpg" title="Semil Shah and Jason Putorti working at Votizen HQ"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_semil_jason_desk_620.jpg" alt="Semil Shah and Jason Putorti working at Votizen HQ"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Semil and Jason at Votizen HQ&lt;/small&gt;&lt;/div&gt;





&lt;p&gt;I became acquainted with Jason when I briefly worked with him on some marketing stuff for &lt;a href="http://paulstamatiou.com/mymint-blog-goes-live-interviews-me" title="MyMint blog goes live, Interviews Me"&gt;Mint&lt;/a&gt;. He has since become a renowned visual and web designer, starting projects like &lt;a href="http://elegant.ly/" title="Elegant.ly"&gt;Elegant.ly&lt;/a&gt; along the way.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_scoble_1000.jpg" title="Robert Scoble's Votizen Voter Network"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_scoble.jpg" alt="Robert Scoble's Votizen Voter Network"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Showing off a Votizen Voter Network (&lt;a href="https://www.votizen.com/robert-scoble/network/" title="Robert Scoble on Votizen"&gt;Scoble&lt;/a&gt;'s in particular. And &lt;a href="https://www.votizen.com/paul-stamatiou/network/" title="Paul Stamatiou's Votizen Voter Network"&gt;mine&lt;/a&gt;)&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I met Semil at Red Rock Coffee just across the street from their office. Red Rock has the kind of atmosphere that might make you seem languid by comparison. It's bustling with folks pitching startups, hacking with the help of free Wi-Fi and looking around to make sure no competitors are within earshot&lt;sup&gt;1&lt;/sup&gt; before they speak about their startup. Heading to Red Rock before going to Y Combinator office hours or dinners over the summer had be come a ritual for me (and many other Y Combros&lt;sup&gt;2&lt;/sup&gt; alike) &lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;I knew what Votizen was up to externally &amp;mdash; Votizen recently had quite a bit of press surrounding their &lt;a href="http://allthingsd.com/20120223/votizen-gets-a-celebrity-round-of-funding-to-connect-social-media-and-politics/" title="Votizen Gets a Celebrity Round of Funding to Connect Social Media and Politics"&gt;recent funding round&lt;/a&gt; from the likes of Sean Parker. I told Semil I wanted to dive deeper and &lt;strong&gt;expose stuff to which other hackers and startup founders could relate&lt;/strong&gt;. Almost like a startup version of &lt;a href="http://usesthis.com/" title="The Setup - What do people use to get stuff done?"&gt;The Setup&lt;/a&gt;. I wanted to know how Jason's design process has grown inside the company and how things actually got done.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; Be sure to read all the way to the end &amp;mdash; lots of interesting Q&amp;amp;A down there.&lt;/p&gt;

&lt;h4&gt;Votizen Specs&lt;/h4&gt;


&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_vert_acd_800t.jpg" title=""&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_vert_acd.jpg" alt=""/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;The Post-it note culture continues at Emily Leather's desk. Click to see uncropped vertical photo.&lt;/small&gt;&lt;/div&gt;


&lt;ul class="no-circles"&gt;
&lt;li&gt;&lt;strong&gt;11&lt;/strong&gt; Employees (6 engineers, 2 UX designers, 2 non-technical operations, 1 CEO)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;16&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/review-apple-27-inch-led-cinema-display" title="Review: Apple 27-inch LED Cinema Display"&gt;27-inch Apple Cinema Displays&lt;/a&gt;, most setup with &lt;a href="http://bretford.com/category/mounts/flat-panel-mounts-small/" title="Bretford VESA arm"&gt;Bretford VESA arms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;10&lt;/strong&gt; Macs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; custom PC &amp;mdash; "our ops guy J that I just call SkyNet. It has a 1200W power supply, liquid cooling, 64GB of RAM, 4TB of storage, etc."&lt;/li&gt;
&lt;li&gt;Favorite company lunch spot: Formerly &lt;strong&gt;zpizza&lt;/strong&gt;, now &lt;strong&gt;Posh Bagel&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;Votizen 101&lt;/h4&gt;


&lt;p&gt;Before proceeding, I'll delve into &lt;strong&gt;what Votizen actually does&lt;/strong&gt; and their vision.&lt;/p&gt;

&lt;blockquote&gt;Votizen is a web service that allows you to discover how your friends on social networks are registered to vote, and campaign with them to elect candidates that share your values.&lt;/blockquote&gt;


&lt;p&gt;Currently, campaigns spend hundreds of millions of dollars to run negative TV commercials all the way to annoy voters with robocalls. But we're now at the start of where social media is taking over. Take a look at this CNBC broadcast called &lt;em&gt;&lt;a href="http://video.cnbc.com/gallery/?video=1752879649" title="The Facebook Obsession on CNBC"&gt;The Facebook Obsession&lt;/a&gt;&lt;/em&gt; (scroll to the 30 minute mark) to see how much of a role Facebook played with the 2008 Obama campaign. The trend is looking to be that voters are paying more and more attention to their own networks rather than television and traditional media.&lt;/p&gt;

&lt;p&gt;Votizen sees this trend and is stepping in the middle. For politicians and their teams, Votizen helps them use social networks for outreach more efficiently. Votizen will make money by letting the campaigns reach out to registered voters in the locations that matter to them, rather than spending tons of money on traditional advertising to attempt to reach those voters; a spray-and-pray tactic which can cost campaigns $500 per voter. In addition, Votizen will help campaigners see which Votizens are the most influential. Think of their business model like LinkedIn Pro.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_votizen_profile.jpg" alt="Paul's Votizen profile"/&gt;&lt;br/&gt;&lt;small&gt;Sorry, no Ron Paul for me. Dude has been messing up my Google rankings for "Paul" since 2008.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Votizen does this by adding a political "layer" on top of your social networks. When you create an account you link up your Facebook, Twitter and LinkedIn accounts. Votizen cross-references user accounts with their massive database of ~200 million registered voters which they have pain-stakingly collected (more on that challenge later). This means Votizens can see who in their own network is a registered voter, where they are registered and what district.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_voter_network.jpg" alt="Paul's Voter Network"/&gt;&lt;/div&gt;


&lt;p&gt;Officials will now have a direct connection to voters that matter to them as well as their verified constituents. And Votizens will know exactly which officials represent them, what candidates are running in what elections and how they have voted in the past. This will become key not only during elections but also with public policy and issues sections that Votizen will be adding to the site.&lt;/p&gt;

&lt;p&gt;My main question &amp;mdash; what is a regular Votizen user supposed to do on the site? Act as an influencer and activate your network to accomplish a purpose. But what exactly does that mean? That might be contacting your friends you know are registered voters and their political party affiliation to inform them that the incumbent they are going to vote for has previously not held up his promises, or contact their friends in swing states and urge them to vote.&lt;/p&gt;

&lt;p&gt;Votizen enables this by helping you identify these friends and then letting you directly message them or share on Facebook or Twitter. It shows you people you have invited to endorse a particular official (for example, here's an &lt;a href="https://www.votizen.com/m/6b02xk/" title="Paul Stamatiou endorsement for Obama"&gt;endorsement URL of mine&lt;/a&gt;) and then marks them as recruited if they end up engaging as intended.&lt;/p&gt;

&lt;blockquote&gt;We believe that in a connected election 30-second attack ads are powerless. We believe that connected voters represent the future of democracy. Votizen wants to foster, create, and empower those connections, giving real people the tools to have a real impact on the challenges facing our communities, our country, and our world.&lt;/blockquote&gt;


&lt;p&gt;As for the even bigger vision, Putorti says he sees presidential candidates in 2016 using Votizen as a platform to manage their entire campaigns.&lt;/p&gt;

&lt;h4&gt;The Office&lt;/h4&gt;


&lt;p&gt;Votizen is currently situated in a small office just above a Chinese restaurant on Castro Street in Downtown Mountain View. We walked down an alley then upstairs past another startup before arriving at the glass door which exposed co-founder David Binetti's standing desk and a visibly overused ideapainted wall with everything from flow charts and method calls to a massive calendar.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_ideapaint_wall.jpg" alt="Ideapainted wall at Votizen"/&gt;&lt;/div&gt;


&lt;p&gt;A glance to the right puts me in a state of disbelief. They must be funded by 3M. I have never seen so many Post-it Notes in one place before. The first swarm of Post-it notes is split up into two categories: product and engineering. I asked if this was their kind of physical Trello board, minus the columns. Miche and Semil said it was more along the lines of just their to-do and wish list. Tasks from here get prioritized on the wall in the back of the office entitled "The Next 4 Weeks (of your lives)."&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_trifecta_1000.jpg" title="Votizen Office"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_trifecta.jpg" alt="Votizen Office"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Semil, Jason and Miche&lt;/small&gt;&lt;/div&gt;




&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_4week_tasks.jpg" alt="The Next 4 weeks - Votizen"/&gt;&lt;/div&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;There is a traffic light in the back of the office. What determines what color it is? Arduino + hudson/jenkins status?&lt;/span&gt;
&lt;b&gt;David Binetti (CEO):&lt;/b&gt; There's a SBC running linux with wifi that listens to Cruise Control, which controls &lt;a href="http://www.phidgets.com/" title="Phidgets"&gt;Phidgets relays&lt;/a&gt;.  It's actually pretty easy to set up, and Phidgets provide Python libraries for accessing the sensors/relays.&lt;br&gt;
&lt;b&gt;Jason:&lt;/b&gt; Green means the latest build passed, yellow means a build is 'building', red means the build is broken. We also have an audible "shit is broken" when the latter happens.&lt;/p&gt;




&lt;h4&gt;Q&amp;A &amp;mdash; Design and Challenges&lt;/h4&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;What is a board meeting with Sean Parker like?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Use your imagination. It won't be too far off.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Talk about the design process at Votizen&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Idea could come from any source, we have a broad long-term roadmap which is fuzzier the farther out it goes, and crystallizes for the next 4 weeks. David Binetti provides business imperatives which often supersede or reorient our roadmap, otherwise it's usually me and Miche Capone our product manager coming up with the larger 'uses' of Votizen. It's rare or perhaps never that a random idea finds its way in that doesn't relate to the long-term vision.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;What tools are used in the aforementioned flow?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Keynote with &lt;a href="http://keynotekungfu.com/" title="Wireframe Toolkit For Keynote"&gt;Kung-Fu&lt;/a&gt; (&lt;small&gt;Wireframe Toolkit For Keynote &lt;/small&gt;)&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Votizen has top-notch investors. How have your investors added value so far / have you asked for help with any kinds of things so far?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Everyone is always willing to help when we want to talk. Our different investors have different focus areas which we take advantage of accordingly. For example, Gina Bianchini and Sean Parker are the two investors I look to most often for product design advise. Keith Rabois is strong on operations and business development. Peter Thiel is a big picture thinker who gave us crucial advice early on that led to us being able to have 11 employees today instead of the 3 we started with. Ron Conway and everyone at SV Angel will break through brick walls for you on anything you need from a strategic perspective.&lt;/p&gt;




&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_lowdesk_1000.jpg" title="Miche Capone"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_lowdesk.jpg" alt="Miche Capone"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Miche posing with his custom sawhorse desk. Notice the "That Shit Cray (Computer)" poster on the wall.&lt;/small&gt;&lt;/div&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;What has been Votizen's biggest challenge?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Hiring was difficult early on, but we learned our strengths and doubled down on them, most notably what we're trying to accomplish long term. There are few startups in this Valley doing something truly transformative, and we're one of them. Otherwise the challenge right now is to both solve our enormous technical and big data challenges, and build a product that's engaging to people today, to get us to the ultimate long term vision. Reconciling the realities of resource scarcity on our side, along with how politics in this country has so thoroughly frustrated people to the point of giving up, are our biggest challenges at present. The latter problem is something that Mint, and a lot of other startups don't have to face– it's the downside of building a startup predicated on changing attitudes and behaviors. Most entrepreneurs will tell you this is at worst impossible, and at best not recommended. We're doing it anyway.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Is there any need for Votizen on mobile?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; There definitely is, mobile is clearly the future, and there's an obvious huge opportunity to take advantage of that computing power and spare time that's available when people are out and about, waiting in line at Starbucks, etc. It's always about prioritization and focus. We want to be very deliberate in finding a use for our product that makes sense, and fits into people's lives.  Like Mint, we didn't start with mobile but we'll get there.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Did Votizen used to be based in SF? The domain is registered to an address in San Francisco.&lt;/span&gt;
&lt;b&gt;David:&lt;/b&gt; That address is actually a virtual mailing address through &lt;a href="http://www.earthclassmail.com/" title="http://www.earthclassmail.com/" rel="nofollow"&gt;Earth Class Mail&lt;/a&gt;.  Startups move around a bit and having one stable address is a great convenience.  So we receive mail in San Francisco but we've always been in Mountain View.&lt;/p&gt;




&lt;h4&gt;Q&amp;A &amp;mdash; The Stack&lt;/h4&gt;


&lt;p class="qa"&gt;&lt;span class="question"&gt;Any interesting technical &lt;em&gt;oh shit&lt;/em&gt; moments?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; &lt;a href="http://techcrunch.com/2011/10/07/spam-stone/" title="Biz Stone Votizen"&gt;Biz Stone pressed the invite all button once&lt;/a&gt;. He took down his own account and our API key. We've definitely had traffic spikes knock us out on several occasions. Our sign up process involves finding which of your friends are voters, so back when that was a slower process, and we had a lot of those verifications queued up, things got gummed up very quickly.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;What is the (entire) tech stack of Votizen?&lt;/span&gt;
&lt;b&gt;Matt Snider:&lt;/b&gt;&lt;/p&gt;


&lt;ul class="no-circles"&gt;
  &lt;li&gt;
    &lt;ul&gt;&lt;strong&gt;Amazon Web Services&lt;/strong&gt;
      &lt;li&gt;webservers - 2 large instances running Apache, Django, Python&lt;/li&gt;
      &lt;li&gt;load balancer - 1 large instance running HAProxy and Stunnel&lt;/li&gt;
      &lt;li&gt;asynchronous workers - 3 x-large instances running several hundred Celery workers each&lt;/li&gt;
      &lt;li&gt;reverse geocoding &amp; districts - 3 x-large instances running what we call politicoder&lt;/li&gt;
      &lt;li&gt;elastic search for voters - 2 High-Memory Quadruple Extra Large instance running elastic search with entire corpus of voters loaded into memory (verify 50-75 people/second)&lt;/li&gt;
      &lt;li&gt;error reporting - 1 large instance running a sentry server&lt;/li&gt;
      &lt;li&gt;utility server - 1 large instance used for various opsy operations&lt;/li&gt;
      &lt;li&gt;db-misc server - 1 large instance running redis, memcached, and RabbitMQ&lt;/li&gt;
      &lt;li&gt;admin server - 1 large instance used for managing deployment and monitoring site, runs CruiseControl (for deployment) and Nagios (for monitoring)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Puppet&lt;/strong&gt; - We were previously using Puppet to manage server configurations in our admin repository, but are in the process of moving to Chef, as our new ops person prefers Chef. Both are Ruby-based tools, but are more mature than any comparable Python solution&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt; - We write almost all our code in Python 2.6, because Python gives you wings&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Django&lt;/strong&gt; - This is one of the most fully-baked Python web frameworks and we have 2 core contributors on our team. Version 1.4 was just released, but we are still running on 1.3&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Redis&lt;/strong&gt; - We use redis mostly to handle caching of large lists of ids, because it has really good set/list operations built into it.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Celery&lt;/strong&gt; - We have to do a log of user processing after they sign up and even when they sign in: fetch contacts on your social network, find your contacts districts and see if they are voters, find your districts and see if you are a voter&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt; - The default message queue used by Celery, and also just a good queuing system. We only use it for celery.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Memcached&lt;/strong&gt; - Cache whatever you can, whenever you can. Django has good memcached support and we try to take advantage of it as much as possible.&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_back_1200.jpg" title="Erik Rose working with this dual vertical Apple Cinema Displays"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_back_620.jpg" alt="Erik Rose working with this dual vertical Apple Cinema Displays"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Erik Rose working with this dual vertical Apple Cinema Displays&lt;/small&gt;&lt;/div&gt;




&lt;p class="qa"&gt;
&lt;span class="question"&gt;Has the stack always been Python based, and how was that initial decision made?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; David Binetti built the predecessor to Votizen in Django, and we stuck with it. We dabbled in Node.js for a while because it was appealing both because our founding engineer Matt Snider is a Javascript expert, and because it seemed to be attracting a lot of talent. We ultimately moved away from Node.js because it was attracting too many front-end developers who weren't grounded in server side software engineering. Everything is Python now.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt; Unit testing/CI?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; We have unit testing and continuous integration, there's no staging environment, everything goes straight to production. We have feature flagging now to limit development features to staff.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;When coding, do developers run the entire stack on their local machine?&lt;/span&gt;
&lt;b&gt;Jason&lt;/b&gt; Yes, though the development environment isn't quite the same right now, we're looking to move to Vagrant so the environments can be nearly identical.&lt;br&gt;
&lt;b&gt;Matt:&lt;/b&gt; The biggest differences being that locally developers do not have the entire voter corpus and we run celery synchronously, instead of asynchronously.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;When getting a just-hired engineer to setup this local environment on their machine, do you have that all pre-setup somehow? Any magical shovel scripts or a page of commands to manually run on your git readme?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; We have onboarding instructions for getting everything set up, but Vagrant will make this much easier very soon.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;I see Votizen uses Github. Do you do code reviews via pull requests?&lt;/span&gt;
&lt;b&gt;Matt:&lt;/b&gt; We do not have a formal review process, instead we rely on strong test coverage. However, informally developers are encouraged to have changes they make of other developer's code reviewed, or code that may be highly disruptive.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Talk a bit about your version control strategy. Does everyone have their own personal feature/fix branch then merge back or do you do any thing crazy like &lt;a href="http://nvie.com/posts/a-successful-git-branching-model/" title="git-flow"&gt;git-flow&lt;/a&gt;?&lt;/span&gt;
&lt;b&gt;Matt:&lt;/b&gt; Developers work on local branches, and merge into master. For the most part we avoid doing remote branches, as they tend to be more trouble than they are worth and try to keep everything push in master with feature flagging. Our continuous deployment environment only uses master.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Do you pay for products from other startups?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; KISSmetrics, Github, Chart.io, Sendgrid, Pivotal Tracker&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;We're also big users of &lt;a href="http://kissmetrics.com/" title="kissmetrics"&gt;KISSmetrics&lt;/a&gt; at Picplum. How do you use it at Votizen?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; We use weekly cohorts to determine virality. For example, users that signed up in week 1 of 2012 have a viral coefficient of X, the week 2 cohort has Y, etc. Right now our important metrics are around conversion from visitor to signed up user, and invitations/shares sent. The engagement of Votizen right now is just focused on campaigning, so those are the areas we look at closely.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Talk about some of the technical challenges that went into acquiring all the voter registration records?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt;  There are 50 states and D.C., and they all store their voter data differently. In Massachusetts, there is no state voter file, the individual towns have them, compounding this issue further.&lt;br&gt;
&lt;b&gt;David:&lt;/b&gt; One state had its voter file arrive on a &lt;a href="http://en.wikipedia.org/wiki/Magnetic_tape_data_storage" title="Magnetic tape data storage"&gt;magnetic tape format&lt;/a&gt; called 128 CPI &amp;mdash; characters per inch of magnetic tape (same format that was used by UNIVAC in 1951) &amp;mdash; which is probably how Auric Goldfinger stored his data. Converting it to something useable was more expensive than acquiring the tape itself.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;Were there any issues matching up records with everyone's social profiles?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; One of the key algorithms in Votizen is matching up a Facebook, Twitter, or LinkedIn profile to a voter record. We had to normalize all those state / town voter files and historical voting data (200 million records times on average 10 years of voting history) and get it ready for comparison to a social network profile.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;So how large is this voter database?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Over 2B rows in MySQL right now, and this is only the voting data, not including the "graph" of how they're connected to each other.&lt;/p&gt;




&lt;p class="qa"&gt;&lt;span class="question"&gt;What are your bottlenecks &amp;mdash; voter record database scaling?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; It used to, which is definitely a problem when the average person has a few hundred connections per network, but the engineering team has gotten this down to &lt; 1 second, which when you think about it is pretty remarkable when you're dealing with 200 million voter records in the United States.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;Does every engineer have access to deploy?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Deployment happens automatically via &lt;a href="http://cruisecontrol.sourceforge.net/" title="CruiseControl CI"&gt;Cruise Control&lt;/a&gt;, so yes.&lt;/p&gt;


&lt;h4&gt;The Culture&lt;/h4&gt;
&lt;p class="qa"&gt;&lt;span class="question"&gt;Describe Votizen culture. Anything you guys all do as a company?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Margarita Wednesday to celebrate the end of every sprint. New employees get a relatively expensive shot of tequila that is not on the books. Some of us play Starcraft in the office, we have a Kinect now, &lt;a href="https://www.destroyallsoftware.com/talks/wat" title="Ruby wat button"&gt;an actual 'wat' button&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We talk politics a lot in the office, our ideology is across the board. The debates get a little crazier at happy hour, but otherwise we don't press each other too much on our respective ideologies, we're all united in our belief that more democracy is much better than what we have today: domination by moneyed special interests and big media.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;Someone has passed all the technical interviews, how do you then evaluate if they would be a good culture fit?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Passion for fixing democracy is a big part of it, but a personality fit is important too. We've passed on people that may be talented, but without the communication skills, we can't collaborate as a team. We all spend more time with each other than our friends, families, and significant others, so we should definitely all get along at this stage and enjoy each others' company.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;How do you onboard new hires and get them on the same page as you in regards to vision. IE, &lt;a href="http://www.quora.com/Twitter-Inc-company/What-is-the-on-boarding-process-for-new-employees-at-Twitter" title="Twitter onboarding process"&gt;Twitter's onboarding process&lt;/a&gt;&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; Our interview process is rigourous. We filter on vision at the very beginning, and after a few mistakes chasing engineers who wanted to work at a startup because they thought it was glamourous like &lt;em&gt;The Social Network&lt;/em&gt;, or because they wanted to earn a lot of money, we realized we needed vision to be our top line filter. Our engineer's first day is getting his or her equipment set up, wading into the codebase with some warm up issues, a team lunch, and a welcome shot of Don Julio 1942 at &lt;a href="http://www.yelp.com/biz/fiesta-del-mar-too-mountain-view" title="Fiesta del Mar Too" rel="nofollow"&gt;Fiesta del Mar&lt;/a&gt; at the end of the day.&lt;br&gt;
&lt;b&gt;David:&lt;/b&gt; The best way to see our hiring process is to &lt;a href="https://github.com/votizen/careers" title="Votizen Careers"&gt;fork it on Github&lt;/a&gt;. We are very transparent about the process and lay it out step by step, including all the legal documents the person would eventually have to sign.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;You have many Post-It notes for things that need to be done or fixed. How are people assigned specific tasks?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; We use Pivotal Tracker for the micro-level task assignments. Post-its and our walls are for broad strokes and ideas that both Engineering wants to do (technical debt, performance improvements) and product/marketing come up with but don't fit in the immediate roadmap.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;Do you have regular meetings?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; All-hands standup every day at 9:58, usually 10 minutes, just to set the agenda for the day. We go around and talk about progress the previous day, goals for the day, and progress towards sprint goal. That same meeting is longer to kickoff the sprint on Wednesday, and there's a scope review to decide what goes into the sprint on Monday. Essentially Product requesting a set of features, and Engineering figuring out what can be done in a week's time.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;What are typical working hours? Can engineers work from home?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; 8-10 hours in office, more from home / weekends. Yes if needed but we prefer to collaborate in the office.  Since we run continuous deployment speed matters, and that means you need high intra-office bandwidth.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;Do you have any remote employees? If so, any challenges with getting that up and running?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; We have some contractors that work remote, each managed by someone here.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;span class="question"&gt;Any other random facts?&lt;/span&gt;
&lt;b&gt;Jason:&lt;/b&gt; We're fans of NutsOnline.com, and consume an unhealthy amount of Jamba Juice energy drinks, and microbrewed bottled beers every week.&lt;/p&gt;

&lt;p class="qa"&gt;&lt;b&gt;Paul:&lt;/b&gt; Jason, Semil, Miche, David, Matt et al &amp;mdash; Thanks for letting me take a look inside Votizen!&lt;/p&gt;

&lt;strong&gt;Disclosure:&lt;/strong&gt; I received no compensation for this post aside from one Red Rock cappuccino and a sweet Votizen t-shirt. 

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/votizen_office_putorti_stammy.jpg" alt="Jason Putorti, Paul Stamatiou and Miche Capone"/&gt;&lt;br/&gt;&lt;small&gt;Jason, @Stammy (before I &lt;a href="http://instagr.am/p/IdJDDstB2T/" title="Paul Stamatiou and Paula Abdul in Miami"&gt;gave myself a buzz cut&lt;/a&gt;), Miche&lt;/small&gt;&lt;/div&gt;

&lt;h4&gt;If you liked this..&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt; Please drop me a comment below&lt;/strong&gt;. I'd love to hear what you thought! You might enjoy some of these other Stammy Originals™:&lt;br&gt;

&lt;strong&gt;&lt;a href="http://paulstamatiou.com/startup-web-design-ux-crash-course" title="Crash Course: Design for Startups"&gt;Crash Course: Design for Startups&lt;/a&gt;&lt;br&gt;
&lt;a href="http://paulstamatiou.com/startup-fundraising-time-sink" title="Startup Fundraising is a Time Sink"&gt;Startup Fundraising is a Time Sink&lt;/a&gt;&lt;br&gt;
&lt;a href="http://paulstamatiou.com/startup-user-retention-lifecycle-email" title="Startup Idea: User Retention as a Service"&gt;Startup Idea: User Retention as a Service&lt;/a&gt;&lt;br&gt;
&lt;a href="http://paulstamatiou.com/coding-zone" title="The Coding Zone"&gt;The Coding Zone&lt;/a&gt;&lt;br&gt;
&lt;a href="http://paulstamatiou.com/picplum-bbc-news" title="Talking Startups and Picplum on BBC News"&gt;Talking Startups and Picplum on BBC News&lt;/a&gt;&lt;br&gt;
&lt;a href="http://paulstamatiou.com/stuff-i-use" title="Stuff I Use"&gt;Stuff I Use&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;h4&gt;Footnotes&lt;/h4&gt;
&lt;small&gt;
&lt;sup&gt;1&lt;/sup&gt; &lt;a href="http://paulstamatiou.com/california-hq-pics" title="California HQ Pics"&gt;Back in 2007&lt;/a&gt; you could find Noah Kagan here asking random people to complete a survey about the then-unlaunched Mint.&lt;br/&gt;
&lt;sup&gt;2&lt;/sup&gt; Y Combros is a term coined during the S11 batch of YC. I would mention who came up with it but their startup is currently stealth.&lt;br/&gt;
&lt;sup&gt;3&lt;/sup&gt; If you're a caffiend like me, you must get the Red Eye (black coffee with a shot or two of espresso).&lt;br/&gt;
&lt;/small&gt;

&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/inside-votizen" title="Inside Votizen"&gt;Inside Votizen&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=TVLghzTQM-w:opmJz7L3SLI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=TVLghzTQM-w:opmJz7L3SLI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=TVLghzTQM-w:opmJz7L3SLI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=TVLghzTQM-w:opmJz7L3SLI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=TVLghzTQM-w:opmJz7L3SLI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=TVLghzTQM-w:opmJz7L3SLI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=TVLghzTQM-w:opmJz7L3SLI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=TVLghzTQM-w:opmJz7L3SLI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/TVLghzTQM-w" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/inside-votizen</feedburner:origLink></entry>
	
	<entry>
		<title>On Keeping Busy and Staying Sane</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/L-wS69FPPTE/keeping-busy-staying-sane-startup-life" />
		<updated>2012-03-06T21:46:31-08:00</updated>
		<id>http://paulstamatiou.com/keeping-busy-staying-sane-startup-life</id>
		<content type="html">&lt;p&gt;This was originally going to be a blog post about Venmo and the difficulty of growing such payments services, but I decided that didn't really have much content (&lt;a href="http://paulstamatiou.com/venmo-payments-startups" title="On Venmo and Payments"&gt;here's the draft&lt;/a&gt; &amp;mdash; 100% boring and not proofread). So here I am on a 6.5 hour flight from JFK to OAK, connected to a lovely &lt;a href="http://paulstamatiou.com/airplane-collaboration-adhoc-wifi" title="adhoc wifi in the sky"&gt;ad-hoc wifi network&lt;/a&gt; my cofounder created so we can collaborate over Bonjour on this &lt;a href="http://paulstamatiou.com/gogo-inflight-internet-my-first-wi-fi-flight" title="Gogo Inflight Internet: My First Wi-Fi Flight"&gt;Gogo-less flight&lt;/a&gt;. We both ended up with middle seats on the same row and failed to get adjacent seats despite our best efforts at persuading each of the other four folks in this row to swap with us.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/phd2_nyc_pstam.jpg" alt="Photo Hack Day 2 NYC"/&gt;&lt;br/&gt;&lt;small&gt;Photo Hack Day 2 NYC &amp;mdash; Alexis Ohanian of Reddit/Y Combinator and David Karp of Tumblr to the right&lt;/small&gt;&lt;/div&gt;





&lt;p&gt;We're heading back from a 2 day stint in New York City where we attended the awesome Photo Hack Day 2 (that I just wrote about for &lt;strong&gt;&lt;a href="http://blog.picplum.com/photo-hack-day-nyc/" title="Picplum blog - photo hack day 2 new york city"&gt;the Picplum blog&lt;/a&gt;&lt;/strong&gt;). I was in Atlanta the week before courtesy of my alma mater Georgia Tech where I participated on an entrepreneurship panel at career week and spoke in an experimental NSF-funded engineering and design class. It turned out to be big week for the Atlanta tech scene and I got to swing by Startup Riot for a bit&lt;sup&gt;1&lt;/sup&gt;.  For the record, the &lt;a href="http://paulstamatiou.com/review-jawbone-jambox-bluetooth-wireless-speaker-traveling" title="Mini Review: Jawbone Jambox Bluetooth Speaker"&gt;Jawbone Jambox&lt;/a&gt; is quite possibly the best travel companion.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_gatech_cloughulc_1200.jpg" title="New Clough Undergraduate Learning Center building on campus"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_gatech_cloughulc.jpg" alt="New Clough Undergraduate Learning Center building on campus"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Georgia Tech added a few new buildings since I last visited.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;(&lt;strong&gt;Nerd Note:&lt;/strong&gt; This is my first blog post after moving &lt;a href="http://paulstamatiou.com/how-to-wordpress-to-jekyll" title="How To: WordPress to Jekyll"&gt;my old Apache + Jekyll setup&lt;/a&gt; to Heroku with Rack (rewrite, deflater, trystatic) with Unicorn. Fast. Also, &lt;a href="http://livereload.com/" title="LiveReload"&gt;LiveReload&lt;/a&gt; + single-post live regeneration is a nifty update for writing and previewing my blog posts.)&lt;/p&gt;

&lt;p&gt;Now that I look back at my last two startups, I really don't recall ever being as focused or in the zone as Akshay and I are right now. New ideas are becoming fleshed out roadmaps and we have laid out what our company's big vision is all about in just the last few months. I think the next step will be finalizing what our company values are &amp;mdash; an exercise suggested to us by &lt;a href="http://www.danmartell.com/" title="Dan Martell"&gt;Dan Martell&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Keeping Busy&lt;/h4&gt;


&lt;p&gt;Akshay and I are both roommates and cofounders so we often get asked how that arrangement works for us. Regardless of whether Akshay or I reply, the answer is usually the same&lt;sup&gt;2&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We are on complete lockdown about 6 days of the week&lt;/strong&gt;. This is something we picked up during Y Combinator, where Paul Graham said something along the lines of "use YC as an excuse to not get distracted with other events/meetings/people.. tell them you're busy for these three months." We're usually awake from 11am - 3am and working about 90% of that. We try to &lt;strong&gt;decline most meetings&lt;/strong&gt;. I'm very bad at saying no but slowly getting better. My excuse is that we're in a &lt;strong&gt;code sprint&lt;/strong&gt; for another week (apologies if I've used this line on you). Any essential meetings that persist get scheduled into one late evening so as to not interact with our &lt;a href="http://paulstamatiou.com/coding-zone" title="The Coding Zone"&gt;zone&lt;/a&gt; in the middle of the day.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_coding_bokeh_1200.jpg" title="Coding bokeh"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_coding_bokeh.jpg" alt="Coding bokeh"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Because f/1.4 bokeh makes coffeescript beautiful. &lt;a href="http://paulstamatiou.com/photos" title="Paul Stamatiou's Photos"&gt;View more of my photos here &amp;raquo;&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;We're both full-stack generalists and tend to work on our own projects or features. We each take an item off our "big vision" board (which is more and more less a Trello board and more of an item from &lt;a href="http://hackpad.com/" title="Hackpad"&gt;Hackpad&lt;/a&gt;, create a new branch or repo as necessary, then go to town on that until it's done and deployable. But we always &lt;strong&gt;start with the user experience and interaction&lt;/strong&gt;, something I also found to be true at &lt;a href="http://votizen.com/" title="Votizen"&gt;Votizen&lt;/a&gt; when I stopped by last week.&lt;/p&gt;

&lt;p&gt;For example, I'm finishing up a "send now" page redesign for Picplum after many users told us they wanted an easier way to switch between recipients in every batch. We brainstormed and sketched out some ideas for an hour late one night. (I touched up a bit on this process in my &lt;a href="http://paulstamatiou.com/startup-web-design-ux-crash-course" title="Crash Course: Design for Startups"&gt;Crash Course: Design for Startups&lt;/a&gt; blog post.) I got it all functioning via Backbone the next day and then began the visual and interaction design.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_picplum_sketches_1200.jpg" title="Picplum sketches"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_picplum_sketches.jpg" alt="Picplum sketches"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;For good sketch books check out &lt;a href="http://www.uistencils.com/" title="UI Stencils"&gt;UI Stencils&lt;/a&gt;, &lt;a href="http://www.gridbooks.ca/products/web_book/" title="GridBooks for UI Sketching"&gt;GridBooks&lt;/a&gt; and of course &lt;a href="http://www.muji.us/store/stationery/notebooks.html" title="Muji"&gt;Muji&lt;/a&gt; (they have a JFK store at the JetBlue terminal!). Muji also has good 0.3 and 0.4mm pens, as does Jetpens.com&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I realized the experience did not seem to flow smoothly anymore. We hit the whiteboard this time and came up with 2 more interaction sketches that took into account both the average user (3-5 recipients) and the super active users (20-30 recipients). For most of what we do at Picplum, getting a feature &lt;em&gt;functioning&lt;/em&gt; is the easy part. It's the design and interaction that takes the longest. I recently had to remove a toggle button on the recipients page because some users were inclined to drag it instead of just click it. Back to checkboxes.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_picplum_sendnow_page_1200.jpg" title="Picplum Send Now page redesign in progress"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_picplum_sendnow_page.jpg" alt="Picplum Send Now page redesign in progress"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Picplum Send Now page redesign in progress. &lt;strong&gt;&lt;a href="https://www.picplum.com/i/a06576" title="Picplum"&gt;Give Picplum a try &amp;raquo;&lt;/a&gt;&lt;/strong&gt;&lt;/small&gt;&lt;/div&gt;




&lt;h4&gt;Staying Sane&lt;/h4&gt;


&lt;p&gt;For us, the key to staying sane at a startup is &lt;strong&gt;hanging out with a different social circle often&lt;/strong&gt;; ones outside of the tech/startup world.  We work with startup folks during the week and it's refreshing to get outside of that world to reset. I have seen one too many close friends dive into deep startup depression from becoming encompassed by their work way too much.&lt;/p&gt;

&lt;p&gt;Every other week we attend electronic dance music (EDM) shows with a group of non-startup, working professionals. They have a wide variety of backgrounds from patent litigators and marketing directors to music producers and Yelp elites. It helps us keep in touch with reality and get a different perspective on what we're building as we can get kind of stuck in our own startup world during the week. And you can burn several hundred calories after a few hours of dancing&lt;sup&gt;3&lt;/sup&gt;. Though if you attend such shows with any regularity, a set of earplugs is a must. I'm a fan of the &lt;a href="http://www.amazon.com/gp/product/B0044DEESS/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0044DEESS&amp;tag=paulstamatiou-20" title="Etymotic Research ER20 ETYPlug Hearing Protection Earplugs"&gt;Etymotic etyplugs&lt;/a&gt;.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/deadmau5_sf_hw_pstam.jpg" alt="Deadmau5 sf hw pstam"/&gt;&lt;br/&gt;&lt;small&gt;deadmau5 playing in San Francisco last year.. his visuals are amazing. We actually named our company (Strobeo, Inc.) after &lt;a href="http://www.youtube.com/watch?v=Vaw59VJKoAk" title="deadmau5 strobe" rel="nofollow"&gt;this song&lt;/a&gt;.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I can't remember exactly what he said but in Tony Hsieh's book &lt;a href="http://www.amazon.com/gp/product/0446563048/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0446563048&amp;tag=paulstamatiou-20" title="Delivering Happiness: A Path to Profits, Passion, and Purpose"&gt;Delivering Happiness&lt;/a&gt; he has quite possibly the best description of why he loves electronic music too. I personally find that it helps me clear my mind and stay focused while coding or even while trying to get away from coding for an evening. Judging by the number of investors and startup folks I happen to run into at various EDM shows, staying sane this way seems to be popular.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are some of your tips for staying sane while working a lot?&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;Picplum is Hiring&lt;/h4&gt;


&lt;p&gt;I believe it was Mike Moritz of Sequoia (correct me if I'm mistaken) who said most startups are not aggressive enough and try to hire too late. Well, we're kicking it up to high gear at Picplum and are looking for our &lt;strong&gt;first engineering hire&lt;/strong&gt; as well as looking to fill some intern positions. Drop us a line at &lt;strong&gt;founders at picplum.com&lt;/strong&gt; if you want to learn more.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="https://www.picplum.com/i/a06576" title="Picplum Prints"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/picplum_620.png" alt="Picplum Prints" title="Picplum Prints"&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Things you will most likely work on&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Work with the founders on designing and implementing Picplum features and products.&lt;/li&gt;
&lt;li&gt;Write and test new/existing code, push it live.&lt;/li&gt;
&lt;li&gt;Wire-framing, prototyping and testing UI of new features.&lt;/li&gt;
&lt;li&gt;Write on the Picplum blog about features that you build.&lt;/li&gt;
&lt;li&gt;Chat with customers, learn how they use the product. Make it better.&lt;/li&gt;
&lt;li&gt;Hack on fun ideas and experiments using Picplum and 3rd Party APIs.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Picplum.com Stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heroku, AWS, Git, Rails 3.2, Sinatra, Padrino, Postgres/mysql, Mongo, Redis&lt;/li&gt;
&lt;li&gt;Javascript / Coffeescript, jQuery, Backbone.js, Handlebars.js, Raphaël.js&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/backbonejshackers_sf.jpg" alt="Backbonejs Hackers Meetup SF"/&gt;&lt;br/&gt;&lt;small&gt;If you're in SF check out the &lt;a href="http://www.meetup.com/Backbone-js-Hackers/" title="Backbone.js Hackers"&gt;Backbone.js Hackers&lt;/a&gt; meetup, we just presented Picplum there last month. It's held in the offices of Caterina Fake's new &lt;a href="https://pinwheel.com/" title="Find and leave notes around the world."&gt;Pinwheel.com&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Enjoy this post?&lt;/strong&gt; Subscribe below. You should &lt;a href="http://twitter.com/stammy" title="Paul Stamatiou on Twitter"&gt;follow me on Twitter&lt;/a&gt; for nerd banter and ranting throughout the week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Footnotes&lt;/strong&gt;&lt;br/&gt;
&lt;small&gt;&lt;sup&gt;1&lt;/sup&gt; I presented my first startup, Skribit, at &lt;a href="http://paulstamatiou.com/startup-riot-recap" title="Atlanta Startup Riot Recap"&gt;the first Startup Riot in 2008&lt;/a&gt;.&lt;br/&gt;
&lt;sup&gt;2&lt;/sup&gt; This blog post is essentially a sequel to my popular &lt;a href="http://paulstamatiou.com/coding-zone" title="The Coding Zone"&gt;The Coding Zone&lt;/a&gt; post&lt;br/&gt;
&lt;sup&gt;3&lt;/sup&gt; Working out regularly is also vital but you knew that and everyone talks about so I'm not going to dwell on it. We try to do about an hour at least 3 times a week, followed by cooking something at home (always guaranteed to be something very spicy at Picplum HQ.. we grow our own Bhut Jolokia peppers). Akshay is into weight lifting and I thoroughly enjoy running to clear my mind &amp;mdash; usually 5 miles from the Bay Bridge to Fisherman's Wharf and back.
&lt;/small&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/keeping-busy-staying-sane-startup-life" title="On Keeping Busy and Staying Sane"&gt;On Keeping Busy and Staying Sane&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=L-wS69FPPTE:DjhnCXdXUbU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=L-wS69FPPTE:DjhnCXdXUbU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=L-wS69FPPTE:DjhnCXdXUbU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=L-wS69FPPTE:DjhnCXdXUbU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=L-wS69FPPTE:DjhnCXdXUbU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=L-wS69FPPTE:DjhnCXdXUbU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=L-wS69FPPTE:DjhnCXdXUbU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=L-wS69FPPTE:DjhnCXdXUbU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/L-wS69FPPTE" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/keeping-busy-staying-sane-startup-life</feedburner:origLink></entry>
	
	<entry>
		<title>Mini Review: Jawbone Jambox Bluetooth Speaker</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/e7C5qXgF2Jk/review-jawbone-jambox-bluetooth-wireless-speaker-traveling" />
		<updated>2012-03-02T00:27:49-08:00</updated>
		<id>http://paulstamatiou.com/review-jawbone-jambox-bluetooth-wireless-speaker-traveling</id>
		<content type="html">&lt;p&gt;Over the past two weeks of traveling I have been using the &lt;a href="http://paulstamatiou.com/jawbone-jambox" title="Jawbone Jambox wireless bluetooth"&gt;Jawbone Jambox wireless bluetooth&lt;/a&gt; speaker extensively. I have concluded that it is quite possible the best thing ever created for frequent travelers&lt;sup&gt;1&lt;/sup&gt;. Great for filling up your hotel room with sound&lt;sup&gt;2&lt;/sup&gt; or your playing your favorite beats while showering before that big meeting.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_jambox_hotel.jpg" alt="Jawbone Jambox wireless bluetooth speaker at a hotel"/&gt;&lt;br/&gt;&lt;small&gt;The Jambox playing music via bluetooth from my MacBook Air at the Downtown Atlanta Marriott (3/10 Stammys) &amp;mdash; though I usually have it play from my iPhone.&lt;/small&gt;&lt;/div&gt;





&lt;p&gt;It's small enough to be easily portable yet still packs a punch. So much of a punch in fact that it keeps vibrating on whatever surface it's on and has fallen off various surfaces/desks/what-have-you several times. Much like if you leave your phone on the edge of the table and it starts ringing, it will try to slide off. The bottom of the Jambox really needs some kind of non-slip rubber strip.&lt;/p&gt;

&lt;p&gt;With volume maxed out, the Jambox will play your favorite trance sets for about 4-5 hours from a full charge. Not amazing but I didn't really have any expectations coming into this so I don't see it as a negative.&lt;/p&gt;

&lt;div class="center"&gt;&lt;iframe width="620" height="350" src="http://www.youtube.com/embed/pFrmrpGqlxw?rel=0&amp;hd=1" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;small&gt;Brief clip of me turning it on/off et cetera... hard to manually focus a DSLR and control the iPhone at the same time so pardon this bad (yet bokehlicious) video.&lt;/small&gt;&lt;/div&gt;




&lt;h4&gt;Would I recommend it?&lt;/h4&gt;


&lt;p&gt;The Jambox is one of those things &lt;strong&gt;I would not buy &lt;em&gt;myself&lt;/em&gt;&lt;/strong&gt;. For a bluetooth speaker, it's very pricey at $199 (though &lt;a href="http://www.amazon.com/gp/product/B004E10KGU/ref=as_li_ss_tl?ie=UTF8&amp;tag=paulstamatiou-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004E10KGU" title="Jawbone Jambox"&gt;currently $179 on Amazon&lt;/a&gt;). I can readily justify spending that much or more on a pair of &lt;a href="http://paulstamatiou.com/sennheiser-hd-650-headphones" title="Sennheiser HD 650... Wow"&gt;good quality headphones&lt;/a&gt; I'll use everyday, but not so much a novelty wireless speaker.&lt;/p&gt;

&lt;p&gt;However, I was gifted the Jambox by &lt;a href="http://paulstamatiou.com/ycombinator-startup-summer-2011-batch" title="Y Combinator Startup Summer 2011 Batch Picplum"&gt;Y Combinator&lt;/a&gt; and after being more than surprised by this little device I'm torn on whether I could have personally justified the price tag. Probably not. I give the &lt;a href="http://www.amazon.com/gp/product/B004E10KGU/ref=as_li_ss_tl?ie=UTF8&amp;tag=paulstamatiou-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004E10KGU" title="Jawbone Jambox"&gt;Jawbone JAMBOX&lt;/a&gt; &lt;strong&gt;9/10 Stammys&lt;/strong&gt; for product build quality and performance but &lt;strong&gt;6/10 Stammys&lt;/strong&gt; for value&lt;sup&gt;3&lt;/sup&gt;. If you travel a lot that may be a different story but I rarely travel these days.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/pstam_jambox_hotel_desk.jpg" alt="Jawbone Jambox wireless bluetooth speaker at a hotel"/&gt;&lt;br/&gt;&lt;small&gt;With the flash in this iPhone photo you can see what's inside of the Jambox &amp;mdash; two deceptively small speakers. &lt;strong&gt;&lt;a href="http://paulstamatiou.com/jawbone-jambox" title="Jawbone Jambox wireless bluetooth"&gt;Click here&lt;/a&gt; for a much better picture&lt;/strong&gt;.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I have not yet put the Jambox through its paces though, which explains the &lt;em&gt;mini&lt;/em&gt; moniker attached to this review. Given Jawbone's prowess in &lt;a href="http://paulstamatiou.com/review-jawbone-2-bluetooth-earpiece" title="Review: Jawbone 2 Bluetooth Earpiece"&gt;noise-cancellation and bluetooth earpieces&lt;/a&gt;, the Jambox can also be used as a wireless speakerphone paired to your mobile device of choice. When I was &lt;a href="http://paulstamatiou.com/startup-fundraising-time-sink" title="Startup Fundraising is a Time Sink"&gt;fundraising for Notifo&lt;/a&gt; I found myself having to purchase a bluetooth speakerphone for that exact purpose, so if I was on the phone a lot I could definitely justify the Jambox for that alone&lt;sup&gt;4&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Otherwise, you may want to consider something like the &lt;a href="http://www.amazon.com/gp/product/B001DQU27Q/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001DQU27Q&amp;tag=paulstamatiou-20" title="Motorola MOTOROKR EQ7 Bluetooth Portable Speaker"&gt;Motorola MOTOROKR EQ7 bluetooth speaker&lt;/a&gt;. It's larger, not nearly as sleek, takes 4 AA's but does much of the same for half the cost. I purchased that about a year ago to make it easier to do conference calls over bluetooth but ended up using it more for music in the hot tub or bathroom while brushing my teeth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thoughts?&lt;/strong&gt; Do you regularly use any such small portable speaker?&lt;/p&gt;

&lt;h4&gt;Stammynotes&lt;/h4&gt;


&lt;p&gt;&lt;small&gt;&lt;sup&gt;1&lt;/sup&gt; After the &lt;a href="http://paulstamatiou.com/apple-ipad-2-tablet-thoughts" title="Apple iPad 2 tablet thoughts"&gt;iPad&lt;/a&gt; of course&lt;/small&gt;&lt;br/&gt;
&lt;small&gt;&lt;sup&gt;2&lt;/sup&gt; As long as it's pointed in your general direction.. it's very directional speaker. I found myself trying to prop it up jusssst right so it was pointed right at me. And to be expected with any speaker where both channels are so close together, there's little stereo separation to be experienced.
I found this to be the case even with much larger single-unit speakers like the &lt;a href="http://paulstamatiou.com/review-sonos-zoneplayer-s5-all-in-one-wireless-music-system" title="Review: Sonos ZonePlayer S5 All-In-One Wireless Music System"&gt;Sonos ZonePlayer S5 I reviewed&lt;/a&gt;.&lt;/small&gt;&lt;br/&gt;
&lt;small&gt;&lt;sup&gt;3&lt;/sup&gt; Though I haven't had a chance to play with the MyTalk feature, which Jawbone bills as being a platform for having apps on your Jambox. Right now the only "apps" I have installed include a different voice for the dialogs and "Voice Control" to control my iPhone 4S Siri with the multifunction (circle) button.&lt;/small&gt;&lt;br/&gt;&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/03/jawbone_jambox_updater_pstam.jpg" alt="Jawbone jambox updater"/&gt;&lt;br/&gt;&lt;small&gt;The Jambox can be updated via the web.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;&lt;small&gt;&lt;sup&gt;4&lt;/sup&gt; Which if I had to give a Stammy rating given my limited usage it would receive 7/10 Stammys for speakerphone quality. I had some issues getting people to understand me.. this goes back to footnote #2.&lt;/small&gt;&lt;br/&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/review-jawbone-jambox-bluetooth-wireless-speaker-traveling" title="Mini Review: Jawbone Jambox Bluetooth Speaker"&gt;Mini Review: Jawbone Jambox Bluetooth Speaker&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=e7C5qXgF2Jk:zSECwSqt9eY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=e7C5qXgF2Jk:zSECwSqt9eY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=e7C5qXgF2Jk:zSECwSqt9eY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=e7C5qXgF2Jk:zSECwSqt9eY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=e7C5qXgF2Jk:zSECwSqt9eY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=e7C5qXgF2Jk:zSECwSqt9eY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=e7C5qXgF2Jk:zSECwSqt9eY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=e7C5qXgF2Jk:zSECwSqt9eY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/e7C5qXgF2Jk" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/review-jawbone-jambox-bluetooth-wireless-speaker-traveling</feedburner:origLink></entry>
	
	<entry>
		<title>Ad-hoc Wifi in the Sky</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/pnUds9hS9Oo/airplane-collaboration-adhoc-wifi" />
		<updated>2012-02-27T17:08:17-08:00</updated>
		<id>http://paulstamatiou.com/airplane-collaboration-adhoc-wifi</id>
		<content type="html">&lt;p&gt;How do you collaborate on work when you and your cofounder are on a 6.5 hour wifi-less flight and couldn't get adjacent seats? Create an ad-hoc wifi network and use bonjour messaging in iChat. I'm pretty sure we annoyed some people next to us...&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/02/picplum-adhoc-wifi-plane.jpg" alt="Picplum-adhoc-wifi-plane"/&gt;&lt;/div&gt;

&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/airplane-collaboration-adhoc-wifi" title="Ad-hoc Wifi in the Sky"&gt;Ad-hoc Wifi in the Sky&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pnUds9hS9Oo:MTgv-hQFT4w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=pnUds9hS9Oo:MTgv-hQFT4w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pnUds9hS9Oo:MTgv-hQFT4w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=pnUds9hS9Oo:MTgv-hQFT4w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pnUds9hS9Oo:MTgv-hQFT4w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pnUds9hS9Oo:MTgv-hQFT4w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pnUds9hS9Oo:MTgv-hQFT4w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=pnUds9hS9Oo:MTgv-hQFT4w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/pnUds9hS9Oo" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/airplane-collaboration-adhoc-wifi</feedburner:origLink></entry>
	
	<entry>
		<title>On Venmo and Payments</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/0fH2qN-sYdw/venmo-payments-startups" />
		<updated>2012-02-26T17:32:28-08:00</updated>
		<id>http://paulstamatiou.com/venmo-payments-startups</id>
		<content type="html">&lt;p&gt;When was the last time you were so enthused about a product you actually wanted to pay your friends to get on it with you? Venmo is that magical service for me. It's a fantastic product (consider me a brand ambassador if you will, I tell everyone about it) but over the last few months I have become intimately aware at how hard it must be for them to acquire and onboard new users. Let me backtrack a bit. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Reader beware. This was supposed to be a full-fledged blog post but after skimming it I didn't think it was terribly interesting or thought provoking so I just posted this unedited draft as a bit.&lt;/p&gt;

&lt;p&gt;Almost a year ago I read an article on Hacker News about how easy Venmo makes it to split payments amongst friends. For whatever reason I had enough motivation to sign up for it when I had no friends on Venmo, not to mention going through the lengthy process of adding my bank and card info (having to look up ACH info is the biggest PITA).&lt;/p&gt;

&lt;p&gt;Venmo isn't the only company in this space. &lt;a href="http://clover.com" title="Clover Payments"&gt;Clover&lt;/a&gt; is another &amp;mdash; similar to Venmo but no payment sharing (a 'feature' of Venmo which I don't really use anyways) and Clover is focused on speed of payment (not just for person to person payments; they're doing some &lt;a href="https://www.clover.com/docs/merchant-introduction"&gt;merchant stuff&lt;/a&gt; too). But I got started on Venmo first and they are clearly in "user acquisition mode" so there are currently no transaction fees.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2012/02/pstam_friends_venmo.jpg" alt="Getting friends on Venmo"/&gt;&lt;br/&gt;&lt;small&gt;Trying to get friends on Venmo..&lt;/small&gt;&lt;/div&gt;




&lt;h4&gt;Why I Use Venmo&lt;/h4&gt;


&lt;p&gt;I don't want to make this whole post about Venmo &amp;mdash; more about the difficulty in onboarding users to payment services that require bank account info and open a discussion around that.. but Venmo is an example of a great product providing value that externally appears to be struggling with adoption.&lt;/p&gt;

&lt;p&gt;My Venmo usage often falls into one of two categories: &lt;strong&gt;a)&lt;/strong&gt; frequent small transactions with Akshay like splitting the power bill or charging him for Chipotle (much easier/faster to just have one person pay and then Venmo later.. and I can reap more AmEx points) and &lt;strong&gt;b)&lt;/strong&gt; splitting charges with larger groups of people at events like cash-only concerts (who bought drinks, etc) or splitting hotel/car rental expenses related to a Tahoe snowboarding trip amongst more than a few people.&lt;/p&gt;

&lt;p&gt;The utility is stellar and it's an example of a product that has succeeded in changing my behavior and that of some friends. Whenever a lunch check comes, one person will get it and the others will get their phone out and Venmo the purchaser.&lt;/p&gt;

&lt;p&gt;It was a recent (my first trip and my first time snowboarding) Tahoe trip that made me think about writing this post. It didn't matter how hard Akshay or I tried, we just could not convince two of our tripmates to join Venmo. That's just the most recent example. There have been many friends that I could not persuade. Reasons ranged from "but this is just a one time thing I won't use it with you again" to "I have to setup my payment info? That sounds like a lot of work." It was usually the latter.&lt;/p&gt;

&lt;h4&gt;I don't have an answer&lt;/h4&gt;


&lt;p&gt;It doesn't matter how good your product is when your users still have to endure the inconvenience of adding their payment info. &lt;strong&gt;What do you think can be done?&lt;/strong&gt; Will banks or other ecommerce companies you already trust with your payment information let you auth your favorite payment startups in the future? Something with a better UX than Paypal.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/venmo-payments-startups" title="On Venmo and Payments"&gt;On Venmo and Payments&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=0fH2qN-sYdw:2UwonZ4i7EI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=0fH2qN-sYdw:2UwonZ4i7EI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=0fH2qN-sYdw:2UwonZ4i7EI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=0fH2qN-sYdw:2UwonZ4i7EI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=0fH2qN-sYdw:2UwonZ4i7EI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=0fH2qN-sYdw:2UwonZ4i7EI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=0fH2qN-sYdw:2UwonZ4i7EI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=0fH2qN-sYdw:2UwonZ4i7EI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/0fH2qN-sYdw" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/venmo-payments-startups</feedburner:origLink></entry>
	
	<entry>
		<title>iPhone Picture Stats</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/ImvBNETIGjk/iphone-camera-picture-stats" />
		<updated>2012-01-15T20:27:14-08:00</updated>
		<id>http://paulstamatiou.com/iphone-camera-picture-stats</id>
		<content type="html">&lt;p&gt;I recently ran out of space on my iPhone 4S and did my yearly ritual of moving last year's photos off of my phone. Here's what my iPhone-taken photo and video stats look like:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;2007 -   431 photos - 160MB&lt;/li&gt;
    &lt;li&gt;2008 - 1,764 photos - 650MB&lt;/li&gt;
    &lt;li&gt;2009 - 1,470 photos - 1.27GB&lt;/li&gt;
    &lt;li&gt;2010 - 3,270 photos - 7.11GB&lt;/li&gt;
    &lt;li&gt;2011 - 3,185 photos - 6.14GB&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;What does your iPhone camera usage look like?&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/iphone-camera-picture-stats" title="iPhone Picture Stats"&gt;iPhone Picture Stats&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=ImvBNETIGjk:D54zf-6ttVw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=ImvBNETIGjk:D54zf-6ttVw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=ImvBNETIGjk:D54zf-6ttVw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=ImvBNETIGjk:D54zf-6ttVw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=ImvBNETIGjk:D54zf-6ttVw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=ImvBNETIGjk:D54zf-6ttVw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=ImvBNETIGjk:D54zf-6ttVw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=ImvBNETIGjk:D54zf-6ttVw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/ImvBNETIGjk" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/iphone-camera-picture-stats</feedburner:origLink></entry>
	
	<entry>
		<title>R.I.P. 1920x1200</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/xzmffS2JczI/rest-in-peace-1920x1200-monitors" />
		<updated>2011-12-29T23:05:30-08:00</updated>
		<id>http://paulstamatiou.com/rest-in-peace-1920x1200-monitors</id>
		<content type="html">&lt;p&gt;I'm at home in Houston for the holidays and of course working on Picplum stuff when I'm not chasing my 18-month old nephew around. I'm used to working on my 27-inch Apple display so hacking away on the Air's native resolution took was not quite for me. Most importantly after a few days of working my back started hurting from hunching over the laptop screen. Purchasing a 20-something-inch display to keep at home would be a worthy sub-$200 investment.&lt;/p&gt;

&lt;p&gt;Off to Best Buy I went. Nope, no monitors with 1920x1200 resolution. Only widescreen 1080 vertical res ones. No biggie I thought, Best Buy only caters to people chasing buzzwords like widescreen. I headed off to nerd mecca: MicroCenter (okay, not quite Fry's but it was closer).&lt;/p&gt;

&lt;p&gt;I went racing up and down their aisles of monitors. Argh, the same thing; they only had 1920x1080 resolution monitors. The salesman asked why I would ever need 1200 vertical res when 1080 was the "widescreen standard." I must have been the only person to ever walk in there with the intention of programming and not gaming or watching movies. He asked why I don't just use the monitor vertically. I asked him to show me the monitors they had that swiveled. They didn't carry any.&lt;/p&gt;

&lt;p&gt;I came home with a $150 23-inch, 1920x1080 &lt;a href="http://www.amazon.com/gp/product/B004QNHNPW/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B004QNHNPW&amp;tag=paulstamatiou-20" title="Samsung SyncMaster SA300"&gt;Samsung SyncMaster SA300&lt;/a&gt; LED-backlit display (aside: damn these things are cheap nowadays!).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why don't they make 1920x1200 monitors anymore?&lt;/strong&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/rest-in-peace-1920x1200-monitors" title="R.I.P. 1920x1200"&gt;R.I.P. 1920x1200&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=xzmffS2JczI:NXzIMgHBNhg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=xzmffS2JczI:NXzIMgHBNhg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=xzmffS2JczI:NXzIMgHBNhg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=xzmffS2JczI:NXzIMgHBNhg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=xzmffS2JczI:NXzIMgHBNhg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=xzmffS2JczI:NXzIMgHBNhg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=xzmffS2JczI:NXzIMgHBNhg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=xzmffS2JczI:NXzIMgHBNhg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/xzmffS2JczI" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/rest-in-peace-1920x1200-monitors</feedburner:origLink></entry>
	
	<entry>
		<title>CoffeeScript</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/eQwjf6Luzdg/moving-to-coffeescript" />
		<updated>2011-12-27T14:35:47-08:00</updated>
		<id>http://paulstamatiou.com/moving-to-coffeescript</id>
		<content type="html">&lt;p&gt;After months of hearing about &lt;strong&gt;&lt;a href="http://coffeescript.org/" title="CoffeeScript"&gt;CoffeeScript&lt;/a&gt;&lt;/strong&gt; and having it on my to-do list week after week, I finally got around to really reading up on it during my flight from SFO to IAH. I tweeted that I was in the middle of moving Picplum over to CoffeeScript and got no less than 10 people asking me why. &lt;/p&gt;

&lt;p&gt;CoffeeScript is much like Sass and Haml. It compiles into JavaScript, much like Sass becomes CSS and Haml becomes HTML. It's now included in Rails 3.1 if you're using the asset pipeline (we are), so there was nothing for me to setup. I just created a few &lt;code class="inline"&gt;.coffee&lt;/code&gt; files and it Rails generated them automatically when I was developing locally. When I go to deploy, that'll be done with asset precompilation.&lt;/p&gt;

&lt;p&gt;CoffeeScript syntax is a joy to work with. It takes up less space, is easier to see what is going on in the code at a glance and helps you write better code by using good JavaScript structure behind the scenes. The CoffeeScript compiles wraps each file in an anonymous function so you don't automatically pollute the global namespace. That new scoping was the first thing I ran into when moving Picplum over. I had to prepend &lt;code class="inline"&gt;this&lt;/code&gt; to our global "namespace" object (the way we internally designed Picplum's Backbone app &amp;mdash; mentioned in &lt;a href="http://recipeswithbackbone.com/" title="Recipes with Backbone book"&gt;Ch 3.2.1 in the book Recipes with Backbone&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A lot of the CoffeeScript syntax just feels right. No parens, no semicolons. Working with object literals is a breeze, just make sure your indentation is all good to go (&lt;em&gt;Show Invisibles&lt;/em&gt; in TextMate is now my best friend). No more having to keep up with curly braces for every anonymous function you write (oh so many with a JS-heavy app); just this thin rocket &lt;strong&gt;-&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In a nutshell, CoffeeScript helps you write better code. Need I point you to the &lt;a href="http://bonsaiden.github.com/JavaScript-Garden/" title="JavaScript Garden - JS quirks"&gt;JavaScript Garden&lt;/a&gt; to remind you of how broken JavaScript really is? Probably the first real thing I learned about JavaScript way back when was how messed up typing can be to a newcomer. In short, read The Good Parts and only ever use the strict equality operator. CoffeeScript builds upons this with some smart aliases.&lt;/p&gt;

&lt;blockquote&gt;Because the == operator frequently causes undesirable coercion, is intransitive, and has a different meaning than in other languages, CoffeeScript compiles == into ===, and != into  !==. In addition, is compiles into ===, and isnt into !==.&lt;/blockquote&gt;


&lt;p&gt;But I digress. I'm not trying to write a guide here, there are tons out there already. I'll just point you to them below.&lt;/p&gt;

&lt;p&gt;As for my general workflow to migrating a large JavaScript app over to CoffeeScript? Begin by running each file through &lt;a href="https://github.com/rstacruz/js2coffee" title="js2coffee"&gt;js2coffee&lt;/a&gt;. Manually comb through the new code and keep an eye out for any odd issues. The converter isn't perfect yet. I ran into an issue where it broke on a block with a return and completely ignored one half of the conditional, which had me debugging why our templating wasn't working for a bit. All the while I was testing everything locally and finding the inevitable indentation errors that sprang up.&lt;/p&gt;

&lt;p&gt;The next thing I did was further optimize. For example, there were a few places where js2coffee didn't swap out &lt;code class="inline"&gt;this&lt;/code&gt; for &lt;code class="inline"&gt;@&lt;/code&gt;, or didn't do the new string interpolation (ruby-style #{} inside double quotes). I also made sure to have Chrome dev tools open and peak at the generated JS in the resources tab from time to time to see what was actually loading.&lt;/p&gt;

&lt;p&gt;Then I started skimming through the CoffeeScript to find sections that were hard to read at first glance. The biggest offender was jQuery code with lots of chaining (backbone not so much as it has callbacks in its options hash); chaining that had inline callbacks. For example:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/some_url/&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;with_string_concat&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/inside&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){...}).&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){...});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;And imagine what it would look like if each callback was multiple lines long and the entire code block was just part of another conditional. I ended up changing it to use an &lt;a href="http://stackoverflow.com/questions/5144191/coffeescript-method-chaining-with-function-arguments/5144544#5144544" title="a style that Jeremy Ashkenas (the creator of CoffeeScript) generally favors"&gt;"outline" style for inline functions&lt;/a&gt; wherein you just breakout the callbacks into locally-scoped functions. Though this is now more of a JS-design tip than a CoffeeScript one.&lt;/p&gt;

&lt;p&gt;The next step for me will be to get a bit more comfortable with how CoffeeScript does &lt;code class="inline"&gt;class&lt;/code&gt;. There are many places in backbone where this is immediately applicable. For example, something like this:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="nx"&gt;YourNameSpace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;YourView&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Backbone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extend&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Can now morth into this much sexier version:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="javascript"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;YourNameSpace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;YourView&lt;/span&gt; &lt;span class="kr"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Backbone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;View&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Yup, just pinched myself. This is not a dream. That is real CoffeeScript magic action right there! Though if you are just starting out you may want to avoid this. It makes use of much native prototypal stuff so the generated JavaScript may not be as readable to you.&lt;/p&gt;

&lt;h4&gt;Resources&lt;/h4&gt;


&lt;p&gt;As you can tell this was a bit of a mindless ramble that I just typed up in the last 15 minutes.  More and more hiring startups are looking for CoffeeScript experience (Picplum included) so if you are looking for a job, it might be a good idea to skim through these links in addition to the main CoffeeScript site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://arcturo.github.com/library/coffeescript/index.html" title="The Little Book on CoffeeScript"&gt;The Little Book on CoffeeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://coffeescriptcookbook.com/" title="CoffeeScript Cookbook"&gt;CoffeeScript Cookbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://peepcode.com/products/coffeescript"&gt;PeepCode - CoffeeScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;But most importantly, just start writing CoffeeScript, experience some issues, fix them and you'll quickly learn how it all comes together.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/moving-to-coffeescript" title="CoffeeScript"&gt;CoffeeScript&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQwjf6Luzdg:90FlOZo2GnA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=eQwjf6Luzdg:90FlOZo2GnA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQwjf6Luzdg:90FlOZo2GnA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=eQwjf6Luzdg:90FlOZo2GnA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQwjf6Luzdg:90FlOZo2GnA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQwjf6Luzdg:90FlOZo2GnA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQwjf6Luzdg:90FlOZo2GnA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=eQwjf6Luzdg:90FlOZo2GnA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/eQwjf6Luzdg" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/moving-to-coffeescript</feedburner:origLink></entry>
	
	<entry>
		<title>Startup Idea: User Retention as a Service</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/4oOCsJ3RecI/startup-user-retention-lifecycle-email" />
		<updated>2011-12-21T10:00:00-08:00</updated>
		<id>http://paulstamatiou.com/startup-user-retention-lifecycle-email</id>
		<content type="html">&lt;p&gt;It was the middle of our Y Combinator batch this summer. Akshay and I had a decently functioning version of Picplum that we were continuing to test and polish up. At the end of our office hours that day, Paul Graham said our product was good enough and that we should &lt;strong&gt;stop coding and start selling &amp;amp; marketing&lt;/strong&gt;. I think about this quite often.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/pstam-yc-officehours.jpg" alt="Office Hours with Paul Graham, Aaron Iba and Picplum at Y Combinator" title="Office Hours with Paul Graham, Aaron Iba and Picplum at Y Combinator"/&gt;&lt;br/&gt;&lt;small&gt;Picplum at YC office hours in July. Photo Credit: Garry Tan&lt;/small&gt;&lt;/div&gt;





&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; Trying to draw attention to the importance of lifecycle marketing. I build up the case, talk about where lifecycle marketing makes sense, show an amateur first attempt at it, then proceed to layout a grand idea for a lifecycle email marketing service I want to see someone build. Please share this post.&lt;/p&gt;

&lt;p&gt;I was in that mindset when I decided to sit down a few weeks ago and hammer out some code that would help with that (typical engineer approach.. get code to do it for you).  One of my perpetual to-do items in the few months following our launch was converting users that signed up but never did anything into users that sent out their first batch of prints. The latter is more or less our definition of an activated user. You can find more info about Picplum in my lengthy post-launch article, &lt;strong&gt;&lt;a href="http://paulstamatiou.com/picplum-automatic-photo-prints-parents" title="Thoughts on Picplum Automatic Photo Prints"&gt;Thoughts on Picplum Automatic Photo Prints&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;New users see a simplified onboarding UI; a simple 3-step flow for adding photos, recipients and then sending their first batch. &lt;strong&gt;But how many people signed up and never got around to adding photos?&lt;/strong&gt; Maybe they just didn't have any photos at the moment and wanted to wait until after the holidays to add them.. and then they forgot. The same might be the case for people that have used Picplum in the past but haven't engaged recently.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_drag_1100.jpg" title="Dragging and dropping photos from iPhoto into Picplum"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_drag.jpg" alt="Dragging and dropping photos from iPhoto into Picplum"&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;somewhat unrelated but here's our onboarding UI&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Enter lifecycle or drip email marketing.&lt;/strong&gt; This is not the same as your traditional newsletter blast that goes to every registered user, nor a transactional/trigger email (such as instantly emailing individual users a welcome email when they signup or sending a notification that their package has shipped). Lifecycle email marketing depends on various factors that describe the state of their account. Let's say you have a complex web app involving a hairy 10 step onboarding process. You would write several different emails for each possible place a user could stop engaging. Say they fell out at step 4 of 10. You would send an email after some amount of time that is indicative of where they left off and what they did in the last steps. Not just a "finish setting up your account" email.&lt;/p&gt;

&lt;p&gt;That's just one use case that happens to deal with getting a user onboarded. There are many more. I go a bit more in-depth down below.&lt;/p&gt;

&lt;h4&gt;Why lifecycle email marketing?&lt;/h4&gt;


&lt;p&gt;You're probably familiar with &lt;a href="http://www.slideshare.net/dmc500hats/startup-metrics-for-pirates-long-version" title="Startup Metrics for Pirates"&gt;Dave McClure's Startup Metrics for Pirates&lt;/a&gt;:
&lt;strong&gt;AARRR&lt;/strong&gt; &amp;mdash; Acquisition, Activation, Retention, Referral, Revenue&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;Startups spend &lt;strong&gt;gobs of time and money on user acquisition&lt;/strong&gt; and then they just let those hard-earned new users slip through the cracks by failing to engage them and carry on with proper retention tactics. &lt;strong&gt;You might have happier users&lt;/strong&gt; if you spent nearly as much time on user retention as you spent on that fancy user invite module that comes up before the user has even tried out your service.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/pstam_mcclure_pirate_lifecycle.jpg" alt="Mcclure pirate lifecycle"/&gt;&lt;br/&gt;&lt;small&gt;This blog post is all about step 3!&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Startups en masse are failing at this. I'm a curious person. I signup for new startups all the time, even if it's not exactly interesting to me. I want to see how they approach email marketing, what kind of design and UX choices they make (if you've read my &lt;a href="http://paulstamatiou.com/startup-web-design-ux-crash-course" title="Crash Course: Design for Startups"&gt;design post&lt;/a&gt;, you know I take lots of LittleSnapper screenshots), et cetera. But guess what? I &lt;strong&gt;rarely hear back&lt;/strong&gt; from any of these startups. At best I receive some generic "we have a new feature" newsletter that is a copy and paste of their company blog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Startups, PLEASE EMAIL ME MORE.&lt;/strong&gt;
It's not a biggie. If I don't like your emails or service, I'll simply unsubscribe. No harm done.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/pstams_lifecycle_marketing.jpg" alt="lifecycle email marketing infographic"/&gt;&lt;br/&gt;&lt;small&gt;Which are you?&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;So who's doing it right? I'm having a hard time coming up with examples of companies that do a great job of such lifecycle marketing but if you think of any please mention in the comments. AppSumo emails me a ton and I haven't unsubscribed yet. While their emails aren't indicative of lifecycle marketing and are more along the lines of daily deal updates, they are way up there there in terms of copywriting. Their emails do a great job of getting my attention and keeping it as I open the emails.&lt;/p&gt;

&lt;p&gt;For the most part the startups that &lt;em&gt;do&lt;/em&gt; email me a lot don't seem personal. The copy doesn't address whether I've been a long-time user well versed in everything about their offering, if I just signed up or if I'm somewhere in the middle. Lifecycle email marketing fills in these gaps by being informed about each user before reaching out. &lt;strong&gt;While it's outside the scope of this article, great copywriting for emails is just as important.&lt;/strong&gt; I'm not an expert on that so I can't comment, but I'm looking to learn more if you can suggest any great web/email-targeted copywriting blogs or resources.&lt;/p&gt;

&lt;p&gt;Lifecycle email marketing is for helping your users engage with your product or service in the intended manner. It's not simply sending reminder emails. It's offering useful help when you notice they haven't done a certain task yet. Maybe it was too hard? Offer them help and tips. Reward them on their last successful actions and offer positive reinforcement for continuining.&lt;/p&gt;

&lt;h4&gt;The Numbers&lt;/h4&gt;


&lt;p&gt;Alright, time for napkin numbers. You work hard all day and put up a Show HN post. You get 2,000 visitors to your startup's homepage. You get a decent signup conversion rate. Let's say 10%. You have 200 new users! Another 10% of those end up activating. Your definition of activating will vary, but let's say this startup is Greplin. They want people to link up data sources they can begin to index. Only 20 people activate right on the spot. That leaves a lot of unactivated people. I'll stop the numbers there but you can imagine that while some will come back when they remember or when Greplin sends out a regular newsletter, there's a lot being left on the table.&lt;/p&gt;

&lt;p&gt;Now imagine if you were in a different business and you paid a lot to AdWords to acquire all of those users. You just lost a lot of money on paid users that did nothing.&lt;/p&gt;

&lt;p&gt;Now here's the great thing about lifecycle email marketing: &lt;strong&gt;set it up once and it keeps on giving&lt;/strong&gt;. The effects just keep on compounding forever and ever (until you change your product and your outdated email copy doesn't quite correlate anymore).&lt;/p&gt;

&lt;h4&gt;Fisher Price: My First Lifecycle Mailers&lt;/h4&gt;


&lt;p&gt;Now that you're sold on lifecycle marketing, back to my story.&lt;/p&gt;

&lt;p&gt;I wrote three different mailers with varying copy. Then there's some logic that is informed about the following:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;number of photo batches user has sent&lt;/li&gt;
    &lt;li&gt;time since last batch shipped&lt;/li&gt;
    &lt;li&gt;time since account registration&lt;/li&gt;
    &lt;li&gt;time since last retention mailer sent&lt;/li&gt;
    &lt;li&gt;what retention mailer was last sent&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;And it's all hooked up on a cron'd resque job, delivered by Mailgun with send events also tracked by Kissmetrics. This is done so we can see in Kissmetrics any flurry of activity following a retention email delivery.&lt;/p&gt;

&lt;p&gt;For example, if a user signed up just over 2 weeks ago and hasn't done anything, they'll get a simple "We've missed you" email with some tips for getting started. If another user has sent one batch but it has been 40 days since, they will receive a different email. Users that have not done anything at all and already received that first email, we'll send them different retention email. As for users that have sent several batches with Picplum, I mark them as activated and don't send them any more retention emails (though I will be changing this shortly to add another mailer for such active users, maybe even prompting them to invite others -- going onto the second R in AARRR).&lt;/p&gt;

&lt;p&gt;After I committed this first stab at user retention, Akshay offered up some scenarios. What about users that have recently logged in? This logic doesn't take into account those events. Should those users still get the retention email? What about new users that have added photos, but not recipients? Should we make the email more personal and send a different mailer with "add some recipients" helper copy?&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/akshay_india_animals.jpg" alt="Akshay Dodeja telling animals about Picplum"/&gt;&lt;br/&gt;&lt;small&gt;Co-founder @Dodeja in Jabalpur for the holidays, converting farm animals into paying Picplum users.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Ah, a logic nightmare! &lt;strong&gt;Keep going down this rabbit hole and it's easy to see that a good lifecycle email marketing strategy will have lots of different email types for specific user lifecycles. Lifecycle email marketing is a bitch to do right&lt;/strong&gt;. That's where the impetus for this blog post comes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I want a startup to do this for other startups.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;The Startup Idea (BUILD THIS)&lt;/h4&gt;


&lt;p&gt;While lifecycle email marketing is a part of many enterprise marketing automation products such as Pardot, SilverPop, eTrigue, StrongMail, Marketo, Eloqua and HubSpot (née Performable), I have yet to see any such products that directly address my startup needs. By that I mean that I don't want to use a complete marketing automation SaaS offering. I don't care about integrating with Salesforce right now. I want something that simply takes care of the lifecycle email mayhem I started talking about above and I'm sure I am not the only one.&lt;/p&gt;

&lt;h4&gt;How it would work&lt;/h4&gt;


&lt;p&gt;I would setup &lt;strong&gt;the service ('RETENTIONIZER')&lt;/strong&gt; to track lots of events about each user. It could even piggyback onto our Kissmetrics reports and 85 different events we already have in place through their &lt;a href="http://help.kissmetrics.com/customer/portal/articles/223504-data-export" title="Kissmetrics Data API"&gt;data export feature&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The RETENTIONIZER would then allow me to wire up a bunch of triggers, not unlike setting up a GMail filter or Kissmetrics report. They could simply be per-user based purely on events with some delay, or even per-cohort. It would even have it's own events &amp;mdash; how the user responded to a past retention mailer. Only send this if they didn't open the last email, et cetera.&lt;/p&gt;

&lt;p&gt;I would supply the marketing copy for as many mailers as I want and it would hook into my email service provider API and set the proper campaign tags when delivering. It would integrate closely with Mailgun/SendGrid/SES/Postmark so that it could receive all tracking data. The RETENTIONIZER would report back on whether or not the user engaged with the email in the desired manner for which you had set the success conditions. This would make it easy to correlate on-site user activity with retention mailers.&lt;/p&gt;

&lt;p&gt;For example, if the RETENTIONIZER sent a relatively new, unactivated user an email about TASK X, it would know if the user opened the email, clicked through and then actually did the specified task on the site, or if the user just logged in but then unexpectedly clicked some button for unrelated TASK Y. The RETENTIONIZER would inform you if your marketing copy was failing to achieve the desired result (and let you A/B test different copy for the same mailer of course), or if something else on-site diverted users. It would use this data to automatically adjust delays for best engagement as well.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/pstam_acquired_user_victory_baby.jpg" alt="Acquired user, User Stuck Around" align="right" style="padding-left:20px;padding-bottom:5px;"/&gt;
Can you tell this stuff is getting me really excited? I could go on for tons of use cases but the idea is simple. Keep users engaged by uniquely offering them a gentle reminder or tip that is exactly relevant to them. Nothing is more annoying than a retention email telling me to buy or do TASK X when I just did it the day before. Mailers need to be data-informed too.&lt;/p&gt;

&lt;p&gt;&lt;del&gt;This stuff really gets interesting if you have everything setup to automagically create cohorts for paid advertising campaigns. Say you run a Reddit promoted ad, Stumbleupon Paid Discover campaign, Facebook Ad, AdWords campaign and/or Kiip campaign.&lt;/del&gt; I'll leave that for another blog post..&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.silverpop.com/newsletters/digitalmarketer/simplifiedapproach_lifecycle_mktg_12_06.html" title="A Simplified Approach to Lifecycle Marketing"&gt;Email marketers will tell you&lt;/a&gt; about some common segments for users: &lt;strong&gt;interested recipients&lt;/strong&gt;, &lt;strong&gt;engaged customers&lt;/strong&gt;, &lt;strong&gt;lapsed customers&lt;/strong&gt;. But the product idea described above would make it easier to dive even deeper. Cohorts are magical. &lt;a href="http://500.co/2011/07/14/cohort-metrics-for-startups-revealed-part-ii-aged-groups/" title="Cohort metrics for startups revealed part ii"&gt;Dan Martell agrees&lt;/a&gt;.&lt;/p&gt;

&lt;!--As for the interface, think old school Lego Mindstorms drag and drop blocks. Complete with space background. Or just a bunch of dropdowns you string together. That works too.

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/mindstorms_block_drag_ui.jpg" alt="Lego Mindstorms drag and drop block ui"/&gt;&lt;/div&gt;--&gt;




&lt;h4&gt;In a nutshell&lt;/h4&gt;


&lt;p&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/pstam_retentionizer.jpg" alt="the RETENTIONIZER (mini) in action" align="left" style="padding-right: 20px;padding-bottom:5px;"/&gt; I send the RETENTIONIZER user events and tell it under which conditions it should send out one of the mailers I provide, and then it delivers the respective user retention email when appropriate. The service begins with smart defaults for delays and then learns as it sends out more and more and tracks user engagement with each.&lt;/p&gt;

&lt;p&gt;Such an offering wouldn't be for everyone. At some point in a company's growth, they'll end up building this in-house or find themselves needing a miscellany of other features that those enterprise companies listed earlier are all about. I'm convinced that this will be a no-brainer for many, many startups. What do you think? Drop me a comment below.&lt;/p&gt;

&lt;h4&gt;Isn't there an easier option Stammy??&lt;/h4&gt;


&lt;p&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/pstam-invalid-argument-unicorn.jpg" alt="Your argument is invalid" align="right" style="padding-left: 20px;padding-bottom: 5px;"/&gt;
Or you can continue cutting into your customer's LTV and blow that cash on user acquisition with Google AdWords all day only to have those users forget about your service the next week. Getting user retention right is no easy task. It may not be your priority at the moment; finding product/market fit should come first. But then again, having more (retained) users to help you find that fit is good too. Chicken &amp;amp; egg.&lt;/p&gt;

&lt;p&gt;This is a full-time job and not many startups can afford to do that. But they really need to get smarter with their email marketing. Which is why I want some startup to build this product! Take this blog post as a glorified letter of intent for me paying for this product when it emerges.&lt;/p&gt;

&lt;h4&gt;Email Template Dev Workflow&lt;/h4&gt;


&lt;p&gt;After being asked about how we did our emails by &lt;a href="http://ridejoy.com/" title="Ridejoy - Share rides with friendly people."&gt;Ridejoy&lt;/a&gt;, &lt;a href="http://parse.com" title="Parse"&gt;Parse&lt;/a&gt;, and &lt;a href="http://www.hackernewsletter.com/"&gt;Hacker Newsletter&lt;/a&gt;, I wanted to share a bit about our process.&lt;/p&gt;

&lt;p&gt;We got started with one of &lt;a href="https://github.com/mailchimp/Email-Blueprints" title="Mailchimp Email Blueprints"&gt;MailChimp's free Email Blueprints&lt;/a&gt; &amp;mdash; a great, well-tested starting point that just needs your design. As the name implies they are really for use with MailChimp and we're going to be using them for every email including our transactional and retention emails sent by Mailgun. So we're going to need to strip out the merge tags and included &amp;lt;style&amp;gt; block.&lt;/p&gt;

&lt;p&gt;MailChimp has a great article that provides some &lt;a href="http://kb.mailchimp.com/article/how-to-code-html-emails/" title="How To Code HTML Emails"&gt;rules of thumb for working with HTML emails&lt;/a&gt;. Skim through it and come back. If you've really got some time to kill, MailChimp even has a massive &lt;a href="http://mailchimp.com/resources/guides/html/email-marketing-field-guide/" title="Field Guide To Email Marketing"&gt;Field Guide To Email Marketing&lt;/a&gt;. I'm just going to &lt;a href="http://paulstamatiou.com/nespresso-lattissima-plus" title="Nespresso"&gt;make a cappuccino over here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Okay so the main things you need to know: you need to inline your CSS, tables are your friend, don't use too many images and don't expect any fancy CSS3 to work. For the latter, checkout this guide that shows what &lt;a href="http://www.campaignmonitor.com/css/" title="Guide to CSS Support in Email"&gt;CSS each email client doesn't support&lt;/a&gt;, which should just be renamed "Why Outlook Sucks." If you avoid CSS3 and pseudo-selectors you're mostly there.&lt;/p&gt;

&lt;p&gt;The hard part is working with an HTML email template where all the styles must be inlined. Fortunately there's &lt;a href="https://github.com/alexdunae/premailer" title="Premailer - Preflight for HTML email"&gt;Premailer&lt;/a&gt; (and &lt;a href="https://github.com/stammy/premailer-rails3"&gt;the Rails wrapper&lt;/a&gt; of it). Premailer does a few things, but of note it'll &lt;strong&gt;automatically inline CSS styles from an email.css&lt;/strong&gt; file you create and &lt;strong&gt;generate nicely formatted plaintext version&lt;/strong&gt; of emails on the fly. Though there are a few cases where I still write my own plaintext emails. For example, an issue with premailer where it ignores alt/title tags on linked images, which we use for certain large call to action buttons.&lt;/p&gt;

&lt;p&gt;As an aside, premailer hasn't been updated in a while, most likely as the author is working on the next major version. Be sure to stray away from &lt;a href="https://github.com/alexdunae/premailer/pull/94" title="Premailer encoding"&gt;the premailer default of ASCII-8BIT&lt;/a&gt; or you'll be subject to emails from some of your users saying they didn't like all the odd characters in their name. Premailer also has issues with certain CSS shorthands such as the following.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="css"&gt;&lt;span class="nt"&gt;border&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;1px&lt;/span&gt; &lt;span class="nt"&gt;solid&lt;/span&gt; &lt;span class="nf"&gt;#d4d6d7&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;border-left-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;#c9cccd&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;border-right-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;#c9cccd&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;border-bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;2px&lt;/span&gt; &lt;span class="nt"&gt;solid&lt;/span&gt; &lt;span class="nf"&gt;#b1b7b9&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Akshay found a slick gem called &lt;a href="https://github.com/ryanb/letter_opener" title="Letter Opener Ruby Gem"&gt;letter opener&lt;/a&gt; that lets you preview emails locally instead of delivering them. I used to use &lt;a href="http://mocksmtpapp.com/" title="MockSMTP app for email testing"&gt;MockSMTP.app&lt;/a&gt; for this but find letter opener easier. It opens up email previews in a browser tab and lets you toggle between plain text and HTML versions. But it's purely for basic testing; it might look great in there and still be horribly broken in GMail. When it's time to do some real testing, turn off letter opener and send emails to yourself in Gmail and a few other clients. Tweak as necessary.&lt;/p&gt;

&lt;p&gt;Getting email templates right is still a pain in the ass. But if you have a pinch of patience and a nice beverage by your side you can get it done. The last thing to do is hook up &lt;strong&gt;the all important unsubscribe link&lt;/strong&gt;. Make it easy for people to unsubscribe if they want to people are less inclined to report as spam.&lt;/p&gt;

&lt;p&gt;You can either just link to your user settings page or take advantage of Mailgun's unsubscribe feature. Just include %tag_unsubscribe_url% (if you use campaign tags and only want them to unsubscribe from that kind of campaign) and Mailgun will replace that with their own unsubscribe URL and never let an email get sent to that person again, even if you accidentally do it on your end. However, I'm a bit paranoid and want those unsubscribe settings synced on our end too. (And I once ran into an issue where the incorrect email address was unsubscribed &amp;mdash; I only use one email account in Google Apps, with about 7 other accounts either getting forwarded or imported in).&lt;/p&gt;

&lt;p&gt;Time for webhooks! Little bit o' this&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;  &lt;span class="c1"&gt;# in the webhooks controller. please sign your webhooks&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# from http://documentation.mailgun.net/user_manual.html&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="ss"&gt;OpenSSL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:HMAC&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;OpenSSL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="ss"&gt;:Digest&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Digest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sha256&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%s%s&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;  
  
  &lt;span class="c1"&gt;# email_type provided in X-Mailgun-Variables header; if you have various types of things to unsub&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;unsubscribe&lt;/span&gt;
    &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;email_unsubscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;email_type&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;APP_CONFIG&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mailgun_key&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;token&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;signature&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      
    &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;nothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Little bit o' that&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;  &lt;span class="c1"&gt;# from mailer&lt;/span&gt;
  &lt;span class="c1"&gt;# notice the X-Mailgun-Variables header where we provide some JSON&lt;/span&gt;
  &lt;span class="c1"&gt;# user id to verify correct user, avoids wrong email unsub issue explained above&lt;/span&gt;
  &lt;span class="c1"&gt;# be careful with JSON spacing or it wont work&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retention_second_batch_reminder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;
    &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Retention: Second batch, first reminder&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="ss"&gt;:to&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:subject&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;We&amp;#39;ve missed you! Send some Picplum Prints today&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s1"&gt;&amp;#39;X-Mailgun-Variables&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;{&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;user_id&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, &lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;email_type&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;retention&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;}&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;campaign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;# helps with setting campaign tags&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;X-Mailgun-Tag&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;X-Campaign-Id&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;campaign&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;And there's a lot more you can do for tracking other Mailgun events. Of course Mailgun has their new HTTP sending API (faster than SMTP + no more MIME!), so I'll need to migrate to that in the near future.&lt;/p&gt;

&lt;p&gt;Here's an example of one of our &lt;a href="https://www.picplum.com/gift" title="Picplum gifts"&gt;Picplum gift&lt;/a&gt; emails (though this trigger email doesn't have an unsubscribe link):&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/pstam_picplum_gift_template_example.jpg" alt="Picplum gift template email"/&gt;&lt;/div&gt;


&lt;p&gt;This particular HTML layout has the nice benefit of being &lt;strong&gt;Mailgun Approved&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;Hey guys, very nicely done with design of your emails.&lt;br/&gt;

Not only they look great and don't abuse images, they're also very friendly on spam filters as well. Will take a screenshot and keep sharing with our users if you don't mind.&lt;br/&gt;
--&lt;br/&gt;
Ev Kontsevoy&lt;/blockquote&gt;


&lt;p&gt;If you read this far, you've won a Picplum account! Click below to signup.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="https://www.picplum.com/signup?utm_source=Bloggers&amp;utm_campaign=stammy_retention_post&amp;utm_medium=web" title="Picplum Prints"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/picplum_620.png" alt="Picplum Prints" title="Picplum Prints"/&gt;&lt;/a&gt;&lt;/div&gt;




&lt;h4&gt;We're hiring at Picplum!&lt;/h4&gt;


&lt;p&gt;&lt;strong&gt;We're hiring our first engineer!&lt;/strong&gt; Want to work on a product that actually puts smiles on people's faces?  We are a design-minded and data-informed team based in San Francisco working on problems that really affect people. Read more &lt;a href="https://www.picplum.com/about" title="Picplum"&gt;about Picplum and the team&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to hear more? Send us an email at &lt;strong&gt;founders@picplum.com&lt;/strong&gt;. Be sure to link us to something funny on reddit too. Then we can tell you about our buzzwords like backbone, coffeescript and rails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Special Thanks&lt;/strong&gt; to &lt;a href="http://appsumo.com" title="Noah Kagan"&gt;Noah Kagan of AppSumo&lt;/a&gt; for reading a draft of this post. This post made possible by &lt;a href="http://paulstamatiou.com/coding-zone" title="The Coding Zone"&gt;several seemingly endless blocks of time&lt;/a&gt;, &lt;a href="http://paulstamatiou.com/sennheiser-hd-650-headphones" title="Sennheiser HD 650s... Wow"&gt;Sennheiser HD 650 headphones&lt;/a&gt;, many Above &amp;amp; Beyond Trance Around the World sets and level 32 in &lt;a href="http://www.amazon.com/gp/product/B00503E8S2/ref=as_li_ss_tl?ie=UTF8&amp;tag=paulstamatiou-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B00503E8S2"&gt;Modern Warfare 3&lt;/a&gt; (gamertag StammyHD). Follow &lt;a href="http://twitter.com/stammy" title="Paul Stamatiou on Twitter"&gt;@Stammy&lt;/a&gt; and &lt;a href="http://twitter.com/picplum"&gt;@picplum&lt;/a&gt; on Twitter.&lt;/p&gt;

&lt;p&gt;This was a long blog post and I no doubt made some errors in here. Please drop me a comment below for any you spot. Thank you and happy holidays.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/startup-user-retention-lifecycle-email" title="Startup Idea: User Retention as a Service"&gt;Startup Idea: User Retention as a Service&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=4oOCsJ3RecI:853qpI7drNc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=4oOCsJ3RecI:853qpI7drNc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=4oOCsJ3RecI:853qpI7drNc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=4oOCsJ3RecI:853qpI7drNc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=4oOCsJ3RecI:853qpI7drNc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=4oOCsJ3RecI:853qpI7drNc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=4oOCsJ3RecI:853qpI7drNc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=4oOCsJ3RecI:853qpI7drNc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/4oOCsJ3RecI" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/startup-user-retention-lifecycle-email</feedburner:origLink></entry>
	
	<entry>
		<title>Talking Startups and Picplum on BBC News</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/CPneny1lxS8/picplum-bbc-news" />
		<updated>2011-12-14T18:19:47-08:00</updated>
		<id>http://paulstamatiou.com/picplum-bbc-news</id>
		<content type="html">&lt;p&gt;After a gracious introduction to the BBC by Mr &lt;a href="http://amitguptaneedsyou.com/" title="Amit Gupta Needs You"&gt;Amit Gupta&lt;/a&gt;, I appeared in a short &lt;a href="http://www.bbc.co.uk/news/magazine-16153167" title="New York vs San Francisco in fight for tech start-ups" target="_blank"&gt;BBC News segment&lt;/a&gt; about the Silicon Valley startup scene as compared to the NYC startup community. Click the screenshot below to watch the video!&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://www.bbc.co.uk/news/magazine-16153167" title="New York vs San Francisco in fight for tech start-ups" target="_blank"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/picplum-bbc-pstam.jpg" alt="Paul Stamatiou talking about Picplum and startups on BBC"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;On BBC News talking about Silicon Valley, startups and Picplum&lt;/small&gt;&lt;/div&gt;







&lt;p&gt;While it's only a 3 minute segment with half that with me, there were quite a few things I mentioned on tape that did not get included. Definitely a more pleasant experience than &lt;a href="http://www.youtube.com/watch?v=08KtqhR0bf0" title="Paul Stamatiou Nike+ ad"&gt;my Nike commercial&lt;/a&gt; where a film crew of 16 people taped for 14 hours to create a 30 second ad, but I digress. I'd like to expand on my thoughts a bit here.&lt;/p&gt;

&lt;p&gt;First off, I'm am super happy with the video (aside from my ever-present fast talking) and it was just in time for &lt;strong&gt;&lt;a href="https://www.picplum.com" title="Picplum Prints"&gt;Picplum&lt;/a&gt;&lt;/strong&gt; as Akshay and I begin switching gears from coding, coding, coding to focusing more effort on PR and marketing. I had to flip on a few more instances on Heroku in the morning when it was also mentioned on &lt;a href="http://www.huffingtonpost.com/2011/12/13/san-francisco-versus-new-york_n_1146183.html" title="San Francisco Versus New York: BBC Explores The Technology Industries In Two Cities (VIDEO)"&gt;Huffington Post&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Silicon Valley is not SF&lt;/h4&gt;


&lt;p&gt;Some folks on &lt;a href="http://news.ycombinator.com/item?id=3346194"&gt;Hacker News&lt;/a&gt; were clamoring about how the video appeared to use Silicon Valley and SF interchangeably. While I often said and referred to the "Bay Area" as a whole in the taping, as far as I'm concerned they are pretty much the same. There are tons of startups in SV and SF. That's all that really matters to me. Lots of startups that &lt;a href="http://www.7x7.com/tech-gadgets/y-combinator-partner-harj-taggar-san-francisco-becoming-silicon-valley" title="Y Combinator Partner Harj Taggar: San Francisco is Becoming Silicon Valley"&gt;begin in SV move up to the city&lt;/a&gt; to attract young engineers that are lured by the SF lifestyle. And startups like &lt;a href="http://aerofs.com" title="AeroFS"&gt;AeroFS&lt;/a&gt; love it in SV (my assumption) as they tend to hire folks, such as senior systems engineers, that happen to be older, have families and want to raise them in SV. Both ways work well. And of course there's the &lt;a href="http://flotype.com/" title="Flotype"&gt;Berkeley startup scene&lt;/a&gt; as well.&lt;/p&gt;

&lt;h4&gt;Chance Encounters &amp; Paying It Forward&lt;/h4&gt;


&lt;p&gt;Call this the "echo chamber" if you want, but everyone in my vicinity in SF works on their own startup or for a startup. I can't walk to get lunch without running into founders. This is a good thing. It's these chance encounters (that &lt;a href="http://www.paulgraham.com/hubs.html" title="Why Startup Hubs Work"&gt;Paul Graham so raves about&lt;/a&gt;) with people that are in a position to help you out in some way and &lt;em&gt;want&lt;/em&gt; to help you that make this a great startup environment.&lt;/p&gt;

&lt;p&gt;In the video I mentioned a few people that unfortunately did not get edited in: &lt;a href="https://twitter.com/#!/hnshah" title="Hiten Shah"&gt;Hiten Shah&lt;/a&gt;, &lt;a href="https://twitter.com/#!/danmartell" title="Dan Martell"&gt;Dan Martell&lt;/a&gt; and &lt;a href="http://twitter.com" title="Noah Kagan"&gt;Noah Kagan&lt;/a&gt; (though Noah has since moved to Austin he was instrumental in helping me get on my feet when I moved here).&lt;/p&gt;

&lt;p&gt;These folks &amp;mdash; and many others like them in SV &amp;mdash; are the essence of the startup scene in my opinion. I can't run into them for 15 seconds without them asking "How can I help? What's the hardest thing for you now?" And it's not like they're paying me back for something, they are driven to help fellow entrepreneurs. I'm sure you can find some facet of that in New York, but not as much. Technology is just a tiny part of NYC's vibrant fashion, finance, advertising and PR industries.&lt;/p&gt;

&lt;p&gt;When I was growing up I always heard the phrase "surround yourself with people smarter than you," a variation of an early David Ogilvy quote. Well that's what I'm doing in the Bay Area.&lt;/p&gt;

&lt;h4&gt;Soft Landings&lt;/h4&gt;


&lt;p&gt;Of course there's a plethora of funds investing in startups of all sorts, so I won't spend any time on that. But the thing that doesn't get mentioned much is the number of talent acquisition offers that get made. It happens a lot more than you hear about on TechCrunch. This is a byproduct of the &lt;a href="http://startupboy.com/2011/12/13/why-you-cant-hire/" title="Why You Can't Hire"&gt;surplus of founders&lt;/a&gt;, where startups are in a hiring crunch. It's almost too easy for talented individuals to start their own company and raise some capital to get started. Sean Parker has gone on record recently saying that small startups are ridiculously overfunded.&lt;/p&gt;

&lt;p&gt;What does that mean? If you're talented and your startup isn't working out, or even if it is too early too tell, chances you will receive an email or call from another founder asking if you'd be open to a talent acquisition. These have come up for me a few times in the past and it almost seems like it's the norm in the Bay Area. In New York? Not so much (completely blind assumption added for effect, please dispute in the comments!).&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/12/akshay_bbc_picplum.jpg" alt="Akshay Dodeja working on Picplum"/&gt;&lt;br/&gt;&lt;small&gt;Akshay and I in the office&lt;/small&gt;&lt;/div&gt;




&lt;h4&gt;Bias much?&lt;/h4&gt;


&lt;p&gt;I might seem like I'm being a bit &lt;em&gt;overly&lt;/em&gt; pro-Bay Area and boasty in this post. I realize there are other places to run startups, but I love it here and wouldn't have it any other way. Come and visit for a few days, tour a few startups.. hopefully you'll be able to grok what I'm trying to portray.&lt;/p&gt;

&lt;p&gt;I can see myself living in NYC at least for a year just to check it out (and find a Greek wife in &lt;a href="http://en.wikipedia.org/wiki/Astoria,_Queens"&gt;Astoria&lt;/a&gt;) but as long as I'm doing a startup, I'll be in the Bay Area. Anyways, I felt like I need to write at least some sort of brain dump on my blog so you guys don't think I've abandoned it! Just been working a bunch. I have one other large post coming when I can get a chance to write again. It's about a startup idea that I'm not going to pursue but that someone definitely needs to build.&lt;/p&gt;

&lt;h4&gt;Send some prints!&lt;/h4&gt;


&lt;p&gt;Why not share the love this holiday season and &lt;strong&gt;&lt;a href="https://www.picplum.com/gift" title="Picplum Gifts"&gt;buy a Picplum gift&lt;/a&gt;&lt;/strong&gt; for someone in your family or send them prints of your own?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I need your help&lt;/strong&gt; spreading the word about Picplum. Please do me a huge favor and &lt;a href="http://twitter.com/picplum"&gt;tweet&lt;/a&gt;, &lt;a href="http://facebook.com/picplum" title="Picplum on Facebook"&gt;Facebook&lt;/a&gt;, &lt;a href="https://plus.google.com/115924020941809822231/posts" title="Picplum on Google+"&gt;Google+&lt;/a&gt;, blog or whatever it is you do best, about &lt;a href="https://www.picplum.com" title="Picplum Prints"&gt;Picplum&lt;/a&gt;. I would really appreciate it. Thank you for reading my blog.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/picplum-bbc-news" title="Talking Startups and Picplum on BBC News"&gt;Talking Startups and Picplum on BBC News&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=CPneny1lxS8:TttV0_YXPIQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=CPneny1lxS8:TttV0_YXPIQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=CPneny1lxS8:TttV0_YXPIQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=CPneny1lxS8:TttV0_YXPIQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=CPneny1lxS8:TttV0_YXPIQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=CPneny1lxS8:TttV0_YXPIQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=CPneny1lxS8:TttV0_YXPIQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=CPneny1lxS8:TttV0_YXPIQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/CPneny1lxS8" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/picplum-bbc-news</feedburner:origLink></entry>
	
	<entry>
		<title>DNSCrypt</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/yh5K1XPFxio/dnscrypt-from-opendns" />
		<updated>2011-12-07T12:28:36-08:00</updated>
		<id>http://paulstamatiou.com/dnscrypt-from-opendns</id>
		<content type="html">&lt;p&gt;Head over to OpenDNS and &lt;a href="http://www.opendns.com/technology/dnscrypt/" title="DNSCrypt from OpenDNS"&gt;install DNSCrypt for Mac&lt;/a&gt;. DNSCrypt, in a nutshell, encrypts all DNS traffic between you and OpenDNS. If you've been reading my blog since the early days, you've already been up to date on what their primary product does (kickass faster and smarter DNS). DNSCrypt is the next logical progression for DNS infrastructure.&lt;/p&gt;

&lt;p&gt;More details on the above linked page. And if you're technical, I'm sure they would love a few extra coders forking &lt;a href="https://github.com/opendns" title="OpenDNS on Github"&gt;their DNSCrypt repos&lt;/a&gt;. I &lt;a href="https://github.com/opendns/dnscrypt-osx-client/pull/1"&gt;made a quick pull request&lt;/a&gt; from my fork to change the menu bar icon a bit.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/dnscrypt-from-opendns" title="DNSCrypt"&gt;DNSCrypt&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=yh5K1XPFxio:ekwpQUxaOmw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=yh5K1XPFxio:ekwpQUxaOmw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=yh5K1XPFxio:ekwpQUxaOmw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=yh5K1XPFxio:ekwpQUxaOmw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=yh5K1XPFxio:ekwpQUxaOmw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=yh5K1XPFxio:ekwpQUxaOmw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=yh5K1XPFxio:ekwpQUxaOmw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=yh5K1XPFxio:ekwpQUxaOmw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/yh5K1XPFxio" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/dnscrypt-from-opendns</feedburner:origLink></entry>
	
	<entry>
		<title>Give the gift of Picplum</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/s-ZcR9ULSmc/picplum-gift-credits" />
		<updated>2011-11-11T16:32:22-08:00</updated>
		<id>http://paulstamatiou.com/picplum-gift-credits</id>
		<content type="html">&lt;p&gt;Akshay and I just rolled out our &lt;strong&gt;&lt;a href="http://picplum.com/gift" title="Picplum Gift Credits"&gt;Picplum gift page&lt;/a&gt;&lt;/strong&gt; after receiving countless emails from people asking how they could buy gift Picplum to friends and family. Powered by &lt;a href="https://stripe.com/" title="Stripe"&gt;Stripe&lt;/a&gt;, of course. &lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/11/picplum_toula_credits.jpg" alt="Picplum toula credits"/&gt;&lt;/div&gt;


&lt;p&gt;For more on what Picplum is all about be sure to checkout our revamped &lt;strong&gt;&lt;a href="https://www.picplum.com/tour" title="Picplum Tour"&gt;Tour page&lt;/a&gt;&lt;/strong&gt;. Also, take a look at &lt;a href="http://blog.picplum.com/" title="Picplum blog"&gt;our blog&lt;/a&gt; where we talk about Picplum's new photo uploader and UI tweaks. There's definitely more where that came from. Stay tuned.&lt;/p&gt;

&lt;p&gt;/shameless startup plug&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/picplum-gift-credits" title="Give the gift of Picplum"&gt;Give the gift of Picplum&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=s-ZcR9ULSmc:bGJEuq5xE-E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=s-ZcR9ULSmc:bGJEuq5xE-E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=s-ZcR9ULSmc:bGJEuq5xE-E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=s-ZcR9ULSmc:bGJEuq5xE-E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=s-ZcR9ULSmc:bGJEuq5xE-E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=s-ZcR9ULSmc:bGJEuq5xE-E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=s-ZcR9ULSmc:bGJEuq5xE-E:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=s-ZcR9ULSmc:bGJEuq5xE-E:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/s-ZcR9ULSmc" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/picplum-gift-credits</feedburner:origLink></entry>
	
	<entry>
		<title>Sennheiser HD 650... Wow</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/jb_X36EoH-8/sennheiser-hd-650-headphones" />
		<updated>2011-10-28T16:14:44-07:00</updated>
		<id>http://paulstamatiou.com/sennheiser-hd-650-headphones</id>
		<content type="html">&lt;p&gt;After I mentioned that I was no longer happy with my &lt;a href="http://paulstamatiou.com/review-beats-studio-by-dr-dre-and-monster-noise-canceling-headphones" title="Dr Dre Beats Studio Headphones"&gt;Dr Dre Beats Studio headphones&lt;/a&gt; in a recent blog post, &lt;a href="http://paulstamatiou.com/coding-zone" title="The Coding Zone"&gt;The Coding Zone&lt;/a&gt;, a mysterious package arrived from Amazon. It was a pair of pristine &lt;a href="http://www.amazon.com/gp/product/B00018MSNI/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=B00018MSNI&amp;tag=paulstamatiou-20" title="Sennheiser HD 650 Lightweight Open-Air Dynamic Audiophile Headphones"&gt;Sennheiser HD 650&lt;/a&gt; headphones; a kickass gift from my friend Noah Kagan of &lt;a href="http://appsumo.com/" title="AppSumo"&gt;AppSumo&lt;/a&gt;.  Thanks Noah!&lt;/p&gt;

&lt;p&gt;I'll expand on this later but I think it's not that the Beats are horrible headphones -- I once reviewed and loved them -- but that my taste in music has changed in the last 2 years and I now prefer a flat sound rather than overly emphasized bass. In other words, I like listening to my music now, not &lt;em&gt;only&lt;/em&gt; feeling it, which is the bread and butter of those battery-powered bass monsters.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://pstam-cloud.s3.amazonaws.com/uploads/2011/10/sen650gift.jpeg" title="Sennheiser HD 650 headphones"/&gt;&lt;/div&gt;


&lt;p&gt;I have only had the Sennheisers for a few days, and it supposedly takes anywhere from 40 to 200 hours to properly break them in (high-end headphones require some time for the cones to loosen up. A properly broken-in pair of headphones is described as having 'warm' and 'clean' sound), but I am pretty close to being blown away. It's my first pair of open air, reference headphones so I have a lot to learn. I just ordered a USB DAC/headphone amp and these are 300 ohm headphones that require a bit more power than my MacBook Air wants to pump out. They work just fine with the Air, of course, but max volume definitely lacks a punch. After a bit of searching I ordered the ~$70 &lt;a href="http://www.headfonia.com/the-latest-must-have-the-fiio-e10-usb-dacamp/" title="Fiio E10"&gt;Fiio E10&lt;/a&gt;. The E10 also has a better DAC than my laptop so that should help clean up the sound.&lt;/p&gt;

&lt;p&gt;More on what these headphones are capable of after I break them in and the Fiio arrives!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thoughts?&lt;/strong&gt; What's your headphone situation like?&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/sennheiser-hd-650-headphones" title="Sennheiser HD 650... Wow"&gt;Sennheiser HD 650... Wow&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=jb_X36EoH-8:TH3mSyXkPSM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=jb_X36EoH-8:TH3mSyXkPSM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=jb_X36EoH-8:TH3mSyXkPSM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=jb_X36EoH-8:TH3mSyXkPSM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=jb_X36EoH-8:TH3mSyXkPSM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=jb_X36EoH-8:TH3mSyXkPSM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=jb_X36EoH-8:TH3mSyXkPSM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=jb_X36EoH-8:TH3mSyXkPSM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/jb_X36EoH-8" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/sennheiser-hd-650-headphones</feedburner:origLink></entry>
	
	<entry>
		<title>The Coding Zone</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/pbO7STMpXgw/coding-zone" />
		<updated>2011-10-23T01:27:52-07:00</updated>
		<id>http://paulstamatiou.com/coding-zone</id>
		<content type="html">&lt;p&gt;I've learned there are three main things that set me up for a productive programming session.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/10/coding_zone.jpg" alt="Coding zone"/&gt;&lt;br/&gt;&lt;small&gt;My current coding wonderland.&lt;/small&gt;&lt;/div&gt;







&lt;h4&gt;Good Music&lt;/h4&gt;


&lt;p&gt;
An endless supply of new beats works wonders. &lt;strong&gt;This is the absolute most important thing for me.&lt;/strong&gt; If I have to context switch every 3 minutes to find a better song to play, not much is going to get done. Sometimes I'll loop through a Deadmau5 album on Spotify, or listen to a set like &lt;a href="http://www.trancearoundtheworld.com/" title="Trance Around the World"&gt;Trance Around the World&lt;/a&gt;. While I really enjoy leaks and mashups on &lt;a href="http://hypem.com/stammy" title="Stammy on Hype Machine"&gt;Hype Machine&lt;/a&gt;, it is so hit or miss that I end up having to change the track often.&lt;/p&gt;

&lt;p&gt;Getting in the coding zone starts by isolating myself from the rest of the world with my headphones. That's also a sign to &lt;a href="http://twitter.com/dodeja" title="Akshay"&gt;Akshay&lt;/a&gt;, who works a few feet in front of me, that I'm in get-shit-done mode but have Campfire open if he needs anything.&lt;/p&gt;

&lt;h4&gt;No Chance of Interruption&lt;/h4&gt;


&lt;p&gt;
I must have a seemingly endless block of time at my disposal. If I have a meeting in one hour that severely limits how much of a zone I can get into. My most productive work tends to happen at odd hours where there is no possible way that I will get a text about going out for lunch, an IM from Olark or a bunch of emails filling my inbox.&lt;/p&gt;

&lt;p&gt;For example, it's early on Sunday morning, my cofounder is sleeping (I've slumped into a nocturnal phase.. we're in a no-meetings-until-we-ship-some-new-stuff mode) and I will probably be up until 7am in a blissful coding rage. Everything is perfect right now.&lt;/p&gt;

&lt;h4&gt;Organization&lt;/h4&gt;


&lt;p&gt;I'm never far away from our &lt;a href="https://trello.com/" title="Trello"&gt;Trello&lt;/a&gt; board, my own personal Trello "scratch" board, my trusty Pilot Hi-Tec C Cavalier 0.3mm pen and &lt;a href="http://www.uistencils.com/collections/frontpage/products/browser-sketch-pad" title="UI Stencils browser sketch pad"&gt;browser sketch pad&lt;/a&gt; on my desk. Anything that crosses my mind worth doing now goes on my sketch pad and anything worth doing later goes on our Trello. I used to hate Trello because I thought it was fugly, but the simplicity has grown on me.&lt;/p&gt;

&lt;p&gt;For some reason I can't seem to shake the "to do.txt" file on my desktop. Nowadays it has evolved into more of a scratch pad as well &amp;mdash; random snippets of code or copy that I don't need this moment but don't feel like having to browse through github to find later should I need it again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honorable mentions:&lt;/strong&gt;
A &lt;a href="http://en.wikipedia.org/wiki/Depth_Charge_(coffee)" title="Depth Charge Coffee"&gt;depth charge&lt;/a&gt; or &lt;a href="http://paulstamatiou.com/nespresso-lattissima-plus" title="Cappuccino"&gt;cappuccino&lt;/a&gt; on my desk, being &lt;strong&gt;motivated&lt;/strong&gt; about what I'm actually building (that's the easy part for me and why I have only ever worked on my startups), and having a &lt;strong&gt;clean workspace&lt;/strong&gt;, both in my physical living area and on my computer's desktop and Picplum Dropbox folder.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://pstam-cloud.s3.amazonaws.com/uploads/2011/10/coding_zone_desk.jpeg"/&gt;&lt;br/&gt;&lt;small&gt;In hindsight I would have rather purchased an external USB DAC and some quality &lt;a href="http://www.amazon.com/gp/product/B00018MSNI/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=B00018MSNI&amp;tag=paulstamatiou-20" title="Sennheiser HD 650 Lightweight Open-Air Dynamic Audiophile Headphone"&gt;Sennheiser headphones&lt;/a&gt;.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Organization as mentioned above also means mental clarity; knowing that both Akshay and I are on the same page about what we're building at all times and sharing our progress with each other as we execute each task. It makes for a smoother product roadmap when the bigger picture has been thought out and every deliverable builds up to it and is not a random wouldn't-it-be-cool-if.&lt;/p&gt;

&lt;p&gt;The best thing we have done for Picplum? Purchased this &lt;a href="http://www.officemax.com/office-supplies/boards/dry-erase-boards/product-prod570118?csId=2-69-3839-56-3-25687-25677-56-3839-989-56-3839-7535-0-2" title="Dry erase board"&gt;6 foot by 4 foot whiteboard&lt;/a&gt; (better than shower board and Whiteyboards in my opinion -- they become hard to erase after a while). We've got the next three months planned out on it and are constantly updating it with tasks, deadlines, who's doing what or explaining various new user flows or UIs to each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thoughts? How do you dive your coding zone?&lt;/strong&gt; Have you signed up for &lt;a href="http://picplum.com" title="Picplum"&gt;Picplum yet&lt;/a&gt;? We'll be pushing some cool stuff soon so be sure to sign up now so you don't miss out. :)&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/coding-zone" title="The Coding Zone"&gt;The Coding Zone&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pbO7STMpXgw:X5r3jZSMO1c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=pbO7STMpXgw:X5r3jZSMO1c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pbO7STMpXgw:X5r3jZSMO1c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=pbO7STMpXgw:X5r3jZSMO1c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pbO7STMpXgw:X5r3jZSMO1c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pbO7STMpXgw:X5r3jZSMO1c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=pbO7STMpXgw:X5r3jZSMO1c:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=pbO7STMpXgw:X5r3jZSMO1c:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/pbO7STMpXgw" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/coding-zone</feedburner:origLink></entry>
	
	<entry>
		<title>R.I.P. Steve Jobs</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/Ig-m7SoUT8c/steve-jobs" />
		<updated>2011-10-05T17:06:19-07:00</updated>
		<id>http://paulstamatiou.com/steve-jobs</id>
		<content type="html">&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/10/steve.png" alt="R.I.P. Steve Jobs"/&gt;&lt;/div&gt;

&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/steve-jobs" title="R.I.P. Steve Jobs"&gt;R.I.P. Steve Jobs&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Ig-m7SoUT8c:K_-I8JJxBvQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Ig-m7SoUT8c:K_-I8JJxBvQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Ig-m7SoUT8c:K_-I8JJxBvQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Ig-m7SoUT8c:K_-I8JJxBvQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Ig-m7SoUT8c:K_-I8JJxBvQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Ig-m7SoUT8c:K_-I8JJxBvQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Ig-m7SoUT8c:K_-I8JJxBvQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Ig-m7SoUT8c:K_-I8JJxBvQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/Ig-m7SoUT8c" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/steve-jobs</feedburner:origLink></entry>
	
	<entry>
		<title>Thoughts on the Amazon Kindle Fire</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/713IESAa_zM/amazon-kindle-fire" />
		<updated>2011-09-28T08:39:24-07:00</updated>
		<id>http://paulstamatiou.com/amazon-kindle-fire</id>
		<content type="html">&lt;p&gt;It was exactly one year ago that I &lt;a href="http://paulstamatiou.com/review-amazon-kindle-3-wi-fi-reading-device" title="Review: Amazon Kindle 3 Wi-Fi Reading Device"&gt;received my first Kindle&lt;/a&gt; and fell in love with it. Why? They distilled the essence of a simple, superb reading experience into a lightweight, affordable and hassle-free device (as in WhisperSync and stellar battery life). While the affordability is definitely still there with the new Kindle devices announced today, I'm a bit wary of where Amazon is headed. &lt;/p&gt;

&lt;p&gt;Amazon just released some new Kindles today: the 199 Kindle Fire Tablet, 149 Kindle Touch 3G, 99 Kindle Touch, and new 79 basic, no touch screen Kindle.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/kindles_and_kindle_fire.png" alt="Kindles and kindle fire"/&gt;&lt;br/&gt;&lt;small&gt;Amazon's New Kindle Touch, Kindle and Kindle Fire&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;For one, props to bringing the basic Kindle price down to 79. Aside from that Kindle, it appears that every other Kindle model is now touch screen. Of course, everyone's focusing on the new Android-based, color screen Kindle Fire tablet. It's being touted as a solid iPad competitor. Am I the only one thinking this is messing up the flawless Kindle brand? I think it should have been given a different moniker entirely.&lt;/p&gt;

&lt;blockquote&gt;The tablet features apps for Amazon’s Android Appstore, Kindle store, Amazon MP3, and Prime Instant Video. Nearly all of Amazon’s recent news,  Amazon Cloud Player, Amazon Cloud Drive, Kindle Cloud Reader, the streaming deals with Fox and NBC Universal, were in preparation for the Fire. With these cloud services in place, the Kindle Fire is a legitimate iPad competitor.

But it’s more than just Amazon apps. Users are free to load apps from Amazon’s Android Appstore including Pandora, Twitter, Facebook, and, most notably, Netflix.&lt;br/&gt;&lt;br/&gt;TC: &lt;a href="http://techcrunch.com/2011/09/28/amazon-kindle-fir/" title="" rel="nofollow"&gt;Amazon Fires 199, 7-Inch Tablet At Apple&lt;/a&gt;&lt;/blockquote&gt;


&lt;p&gt;Blah. Sounds like a lot of clutter to me. &lt;strong&gt;The original Kindle was purpose-built: create an amazing digital reading experience. The Kindle Fire's MO seems to be create an okay experience for apps, the web, books, movies, music and of course Angry Birds.&lt;/strong&gt; I really liked Amazon's laser focus on the regular Kindle and that's why I travel with both my iPad and my Kindle. One is great for movies with a larger screen (and that is just about the only thing my iPad gets used for &amp;mdash; my Air is not much bigger so I just take that for any real work that I need to do) and the other is super lightweight and makes it easy to read anything.&lt;/p&gt;

&lt;p&gt;At first glance the Fire looks like a hybrid between the failed Barnes &amp;amp; Noble Nook and the also 7-inch screen Samsung Galaxy Tab. It sports a dual-core processor and a nifty 'cloud-accelerated web browser' called &lt;a href="http://thisismynext.com/2011/09/28/amazon-tablet-silk-web-browser/" title="Amazon Silk"&gt;Amazon Silk&lt;/a&gt;.. it's clear that the Fire is being marketed as much, much more of a media device than the pure reading experience the Kindle came to be known for. Especially with all of the Kindle Fire screenshots showing Angry Birds on the home screen.&lt;/p&gt;

&lt;p&gt;I was talking about the rumored Kindle Fire tablet with my cofounder the other day. My point was that &lt;strong&gt;for it to really work, Amazon would have to deliver on both the tablet/media aspect while simultaneously maintaining the solid reading experience&lt;/strong&gt; &amp;mdash; most likely through a hybrid screen that can easily switch to e-Ink when you are outside or wish to read in a glare-free,  black and white mode. Such displays have been in the works since 2009 (search for Pixel Qi e-Ink / LCD hybrid), and it would be great to see Amazon pull a home-run with such tech in their latest device.&lt;/p&gt;

&lt;p&gt;I am however most interested in a new Kindle feature that got slighted by all this Kindle Fire news &amp;mdash; X-Ray. It's the one feature in today's announcement that is meant for the die-hard Kindlites:&lt;/p&gt;

&lt;blockquote&gt;Amazon invented X-Ray, a new feature that lets customers explore the “bones of the book.” With a single tap, readers can see all the passages across a book that mention ideas, fictional characters, historical figures, places or topics that interest them, as well as more detailed descriptions from Wikipedia and Shelfari, Amazon’s community-powered encyclopedia for book lovers.&lt;/blockquote&gt;




&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2010/09/pstam_kindle3_unboxed_1200.jpg" title="Kindle 3 Unboxed"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2010/09/pstam_kindle3_hn_coffee.jpg" alt="Kindle 3 Unboxed"&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;The Kindle 3 I fell in love with&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;The regular Kindle got me amped up about reading. Just after six months of owning the new Kindle I had read an average of 2 books a month. It's clear Amazon wants to chase other, larger market opportunities with a more multi-purpose device. Let's just hope they don't wreck the Kindle brand with some cheap Android tablet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you think about the Kindle Fire?&lt;/strong&gt; Love it or hate it, I have to give it up to Amazon for shipping an entirely new product.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/amazon-kindle-fire" title="Thoughts on the Amazon Kindle Fire"&gt;Thoughts on the Amazon Kindle Fire&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=713IESAa_zM:20TzrP5rEGY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=713IESAa_zM:20TzrP5rEGY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=713IESAa_zM:20TzrP5rEGY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=713IESAa_zM:20TzrP5rEGY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=713IESAa_zM:20TzrP5rEGY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=713IESAa_zM:20TzrP5rEGY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=713IESAa_zM:20TzrP5rEGY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=713IESAa_zM:20TzrP5rEGY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/713IESAa_zM" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/amazon-kindle-fire</feedburner:origLink></entry>
	
	<entry>
		<title>Canon 7D Test Shots</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/uDg9zFT_KjM/canon-7d-test-shots" />
		<updated>2011-09-22T22:52:57-07:00</updated>
		<id>http://paulstamatiou.com/canon-7d-test-shots</id>
		<content type="html">&lt;p&gt;I've been playing with my &lt;a href="http://paulstamatiou.com/canon-7d-dslr" title="Canon EOS 7D"&gt;Canon EOS 7D&lt;/a&gt; for about a week now. Just wanted to share a few recent shots. My workflow involves Adobe Lightroom 3, which I have grown to absolutely love. It's fast on my Macbook Air and can easily fix lens distortion with "profile corrections."&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_cayman_s_1500.jpg" title="Porsche Cayman S"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_cayman_s.jpg" alt="Porsche Cayman S"/&gt;&lt;/a&gt;&lt;/div&gt;





&lt;p&gt;I previously enjoyed high-end photography equipment merely for the technological aspect of it and getting caught up in all the features. Now I'm taking the time to read up on techniques and recalling what I learned about photography while working on yearbook staff in high school. I'm sure I will write a beefy 7D-related blog post when I can carve out a few hours, but for now I'm just cranking away overtime on &lt;strong&gt;&lt;a href="http://picplum.com" title="Picplum"&gt;Picplum&lt;/a&gt;&lt;/strong&gt;. Our upcoming photo uploader is slick &amp;mdash; you see the photos you just dragged over &lt;em&gt;before&lt;/em&gt; they have even uploaded. Gotta love &lt;a href="http://www.w3.org/TR/FileAPI/#readAsDataURL"&gt;FileReader.readAsDataURL()&lt;/a&gt; in HTML 5. Have you made a Picplum account yet? :-)&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_mihalaki.jpg" alt="Mihalaki"/&gt;&lt;br/&gt;&lt;small&gt;My nephew Michael&lt;/small&gt;&lt;/div&gt;




&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_bb_1200.jpg" title="Bay Bridge"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_bb.jpg" alt="Bay Bridge"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Bay Bridge&lt;/small&gt;&lt;/div&gt;




&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_infinity_1200.jpg" title="Infinity Towers in San Francisco"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_infinity.jpg" alt="Infinity Towers in San Francisco"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Infinity Towers&lt;/small&gt;&lt;/div&gt;




&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_sunflower_1500.jpg" title="Sunflower"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_sunflower.jpg" alt="Sunflower"/&gt;&lt;/a&gt;&lt;/div&gt;




&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_speedlighting.jpg" alt="7d speedlighting"/&gt;&lt;br/&gt;&lt;small&gt;Playing with some Canon 'speedlighting' techniques and remote flash with the Canon 580EX II.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I have been flipping through some photography related Kindle books recently as well. The pick of the litter seems to be &lt;a href="http://www.amazon.com/Speedliters-Handbook-Learning-Craft-Speedlites/dp/032171105X" title="Speedliter's Handbook"&gt;Speedliter's Handbook: Learning to Craft Light with Canon Speedlites&lt;/a&gt; (not an affiliate link because Amazon shutdown the Associates Program for California residents!).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thoughts?&lt;/strong&gt; What's your favorite photo blog or book?&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/canon-7d-test-shots" title="Canon 7D Test Shots"&gt;Canon 7D Test Shots&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=uDg9zFT_KjM:dKniBP2oCbE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=uDg9zFT_KjM:dKniBP2oCbE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=uDg9zFT_KjM:dKniBP2oCbE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=uDg9zFT_KjM:dKniBP2oCbE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=uDg9zFT_KjM:dKniBP2oCbE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=uDg9zFT_KjM:dKniBP2oCbE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=uDg9zFT_KjM:dKniBP2oCbE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=uDg9zFT_KjM:dKniBP2oCbE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/uDg9zFT_KjM" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/canon-7d-test-shots</feedburner:origLink></entry>
	
	<entry>
		<title>Canon EOS 7D</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/80BMB1gjqHs/canon-7d-dslr" />
		<updated>2011-09-17T08:39:56-07:00</updated>
		<id>http://paulstamatiou.com/canon-7d-dslr</id>
		<content type="html">&lt;p&gt;Well that didn't take long. About a year after I wrote about how much I liked my &lt;a href="http://paulstamatiou.com/sony-alpha-nex5-sld-digital-camera" title="Sony Alpha NEX-5: Going from DSLR to SLD"&gt;Sony Alpha NEX-5 camera&lt;/a&gt;, I have gone back to big DSLR land. I purchased a Canon EOS 7D last week with quite a few accessories including Canon 24-105mm L, Canon 50mm f/1.4, 580EX II flash, and Rode Videomic. &lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_5dmkii_yc.jpg" alt="Paul Stamatiou using a Canon EOS 5D Mk II at Y Combinator"/&gt;&lt;br/&gt;&lt;small&gt;I was hooked ever since &lt;a href="http://www.flickr.com/photos/brendanlim" title="Brendan Lim Flickr"&gt;Brendan&lt;/a&gt; let me use his 5D Mk II at Y Combinator.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I think the thing that did it for me was the lack of solid accessories for the NEX-5. It doesn't have a hotshoe so you can't use your typical large external flash or plug in your own mic. But most importantly, if you want a good lens you'll have to play with a bunch of adapters to get the kind you want.&lt;/p&gt;

&lt;p&gt;I was originally waiting for the 5D Mark III to come out next year but I'm flying home next week to visit my nephew. It's the perfect opportunity to take some quality photos of my baby nephew and &lt;a href="http://paulstamatiou.com/picplum-automatic-photo-prints-parents" title="Thoughts on Picplum Automatic Photo Prints"&gt;print them out for the family with Picplum&lt;/a&gt;. I'm only buying full-frame lenses so I can sell the 7D when the 5D Mk III comes out (or the rumored full-frame 7D Mk II). Well, who knows. I'm pretty happy with the 7D and I'm not sure how much full-frame would help me aside from the crop issue on these lenses. Better AF is always appreciated though.&lt;/p&gt;

&lt;p&gt;In the meantime I'm looking forward to experimenting with DSLR video as well. My old Nikon D90 did video but the quality was sub-par with lots of 'jelly' motion. I got a rolling dolly and want to experiment with some interesting shots but I'm quickly learning how hard it is to focus while trying to look at the little 3-inch screen. That must explain all the people that tack on 7-inch LCD screens via HDMI and get a &lt;a href="http://store.redrockmicro.com/" title="Redrock micro"&gt;Redrock Micro HDSLR rig&lt;/a&gt; to make things easier to focus precisely. I first got wind of Redrock Micro rigs when a fellow &lt;a href="http://paulstamatiou.com/review-2011-ford-fiesta-and-the-fiesta-movement" title="Review: 2011 Ford Fiesta and the Fiesta Movement [UPDATED]"&gt;Ford Fiesta Movement Agent&lt;/a&gt;, &lt;a href="http://vimeo.com/mooncricket" title="Beto Lopez"&gt;Beto Lopez&lt;/a&gt;, had one for his 7D.&lt;/p&gt;

&lt;p&gt;This is the first time I have invested in a quality external flash. It makes a massive difference! I'm very happy with it so far. I'm sure I'll be talking more about my setup and how I'm adjusting to the 7D soon. I'm hoping to build up a small collection of lenses that will last me at least a decade.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_test_night_1400.jpg" title="7d test night"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/09/pstam_7d_test_night.jpg" alt="7d test night"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Would never have been able to take a night shot like this without the 580EX II. This bar was super dark. &lt;/small&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Thoughts?&lt;/strong&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/canon-7d-dslr" title="Canon EOS 7D"&gt;Canon EOS 7D&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=80BMB1gjqHs:cZU_UWYWdmA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=80BMB1gjqHs:cZU_UWYWdmA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=80BMB1gjqHs:cZU_UWYWdmA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=80BMB1gjqHs:cZU_UWYWdmA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=80BMB1gjqHs:cZU_UWYWdmA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=80BMB1gjqHs:cZU_UWYWdmA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=80BMB1gjqHs:cZU_UWYWdmA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=80BMB1gjqHs:cZU_UWYWdmA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/80BMB1gjqHs" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/canon-7d-dslr</feedburner:origLink></entry>
	
	<entry>
		<title>Thoughts on Picplum Automatic Photo Prints</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/2eO2KB3HNTo/picplum-automatic-photo-prints-parents" />
		<updated>2011-08-22T10:00:00-07:00</updated>
		<id>http://paulstamatiou.com/picplum-automatic-photo-prints-parents</id>
		<content type="html">&lt;p&gt;Hey there! We've haven't spoken in some time. My apologies. For the past 2.5 months I have been keeping busy with my latest startup, &lt;strong&gt;&lt;a href="http://picplum.com" title="The easiest way to send photo prints automatically"&gt;Picplum&lt;/a&gt;&lt;/strong&gt;. In this post I hope to dive far, far into Picplum in attempt to provide a critical review of my own startup just as if I was reviewing any other startup. This should prove interesting. Let's start with the basics first.&lt;/p&gt;&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://picplum.com" title="The easiest way to send photo prints automatically"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplumpkg.jpg" alt="Picplum Package"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;When in doubt, &lt;a href="http://en.wikipedia.org/wiki/Bokeh" title="Bokeh"&gt;bokeh&lt;/a&gt; it out. &lt;strong&gt;&lt;a href="http://picplum.com" title="The Easiest Way to Send Photo Prints"&gt;Signup Now &amp;raquo;&lt;/a&gt;&lt;/strong&gt;&lt;/small&gt;&lt;/div&gt;







&lt;h4&gt;The 140&lt;/h4&gt;


&lt;p&gt;Upload your best photos. Picplum prints, packages and ships them to close family &amp;amp; friends automatically every month.&lt;/p&gt;

&lt;h4&gt;Why I'm Psyched&lt;/h4&gt;


&lt;p&gt;Picplum combines many of my passions. Front-end bliss and a magical UX (getting there..). Consumer web. And of course, photography:&lt;/p&gt;

&lt;p&gt;Back in 2009 I presented "HDR Imaging for n00bs" at O'Reilly IgniteATL, based on these three blog posts: &lt;a href="http://paulstamatiou.com/how-to-hdr-photography-basics-part-1" title="How To: HDR Photography Basics (Part 1)"&gt;How To: Get Started with HDR Photography (Part 1)&lt;/a&gt;, &lt;a href="http://paulstamatiou.com/how-to-get-started-with-hdr-photography-part-2" title="How To: Get Started with HDR Photography (Part 2)"&gt;Part 2&lt;/a&gt;, &lt;a href="http://paulstamatiou.com/how-to-get-started-with-hdr-photography-part-3" title="How To: Get Started with HDR Photography (Part 3)"&gt;Part 3&lt;/a&gt;.&lt;/p&gt;

&lt;div class="center"&gt;&lt;iframe width="620" height="378" src="http://www.youtube.com/embed/jYDfjaWc3Mc?rel=0&amp;amp;hd=1" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;small&gt;Stammy makes for a horribly fast-talking speaker.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Everyone understand prints. I can walk into a random group of people at Starbucks (or more recently the moms that turn Crossroads Cafe in South Beach into strollerville at lunch) and tell them about Picplum in 10 seconds. They instantly get it. Word of mouth alone is actually a solid distribution model for Picplum.&lt;/p&gt;

&lt;h4&gt;How We're Running This Startup&lt;/h4&gt;


&lt;div style="float:right;padding:5px 0 5px 10px;"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/pp_user_testing.jpg" alt="Picplum user testing"&gt;&lt;br/&gt;&lt;small&gt;User testing in progress&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I will likely mention "experimenting" a few times in this post.. what gives? One fundamental thing we're doing differently with this startup is &lt;strong&gt;throwing all assumptions out of the window&lt;/strong&gt;. Neither of us can get away with justifying a feature or default setting with "I think" or "most people." That's usually the start of some likely incorrect assumption. (A habit I believe I picked up from the &lt;a href="http://www.crunchbase.com/company/chirply" title="Chirply"&gt;Chirply&lt;/a&gt; brothers.)&lt;/p&gt;

&lt;p&gt;Instead we experiment. A lot. Data and real user testing finds the solution for us. Seems obvious but I never really took this to heart with my past startups. Picplum as you see it now is currently on its third product iteration (we started from scratch the first week of June).&lt;/p&gt;

&lt;p&gt;The app has essentially been rethought several times. Part of that is that we got better at &lt;a href="http://documentcloud.github.com/backbone/" title="Backbone.js"&gt;backbone.js&lt;/a&gt; and kept refactoring but we also regularly sought out user feedback. &lt;strong&gt;I can't praise user testing enough&lt;/strong&gt;. User test with family. User test with randoms. User test with peers at Y Combinator dinners and with YC partners at office hours. My love of user testing will probably rise again in a dedicated post later on.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_v1_nophotosyet.png" alt="An earlier version of Picplum"/&gt;&lt;br/&gt;&lt;small&gt;An early version of Picplum before realizing we needed an easy user onboarding process.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;One of the first things I learned through user testing is the stark difference between visual design and functional design. We had several UI elements we thought were very slick but when it came time to user test they failed utterly in terms of usability. Take for example my first stab at designing a recipients UI:&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_recipient_old_1000.jpg" title="Picplum recipient old"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_recipient_old.jpg" alt="Picplum recipient old"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Old version of recipients UI&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Even after I made the yellow bar that says "Receive photos by mail, email or both?" even larger, it still seemed to be entirely invisible to users. They would fill out a recipient's info and then later ask how they could adjust what that recipient received. Likewise, several users had trouble switching between recipients or knowing where to click to add a recipient. My flaw was making an interface designed for a person having many recipients when the typical user would have just a few.&lt;/p&gt;

&lt;div style="float:left;padding:5px 10px 5px 0;"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_olark_chat.jpg" alt="Picplum olark chat"/&gt;&lt;br/&gt;&lt;small&gt;Users on picplum&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Paul Graham often has some brief but amazingly useful feedback: "ask your users."  We'll be doing that continually over the next months. On that note, &lt;strong&gt;I must plug &lt;a href="http://www.olark.com/" title="Olark support chat"&gt;Olark&lt;/a&gt;&lt;/strong&gt;. Olark is a little support chat tab that sits on the bottom of Picplum and lets us chat with users on our site. I'm sure you've seen it on many sites before. I love it. Here's why: I can see a list of users, where they came from, what pages they have loaded, where they're located, if they're logged in and then &lt;strong&gt;I can initiate a chat with them&lt;/strong&gt; (and even change the page they're viewing!). It has never been easier to chat with your users. Even just a 5 minute chat with a user starting with something like "Hey there, I see that you've been reading our FAQ for a while -- is there anything I can help you with?" can turn a first time visitor into a paying customer. Not only that but I can ask them what they would like to see or how they plan on using Picplum.&lt;/p&gt;

&lt;p&gt;We're also trying to be laser focused, finding what works, then moving on. That's why we only do one thing right now and are iterating until that experience is clean. A rigid dichotomy to launching with a bunch of features. That's how we're approaching this startup. &lt;strong&gt;Thoughts?&lt;/strong&gt;&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_team_620.jpg" alt="Picplum Team - Akshay Dodeja, Paul Stamatiou"/&gt;&lt;br/&gt;&lt;small&gt;@dodeja @stammy at Y Combinator. Someone brought a 5D Mk II with a massive ring flash to dinner.&lt;/small&gt;&lt;/div&gt;




&lt;h4&gt;Picplum 101&lt;/h4&gt;


&lt;p&gt;Picplum makes it ridiculously easy to send photo prints. It does that by introducing an &lt;strong&gt;automatic&lt;/strong&gt; component. Upload or drag-and-drop photos on the website, or email us your best digital photos as you take them. That's it. &lt;strong&gt;Every month&lt;/strong&gt; Picplum takes what you've sent, prints them, carefully puts them in a nice package and ships them to people on your recipients list &amp;mdash; grandparents, close family and friends.&lt;/p&gt;

&lt;p&gt;Picplum works great for anyone but we're &lt;strong&gt;starting with new parents&lt;/strong&gt; and parents with young children as our first users. Why? They don't have the time to print their baby photos any other way and the convenience of Picplum makes the most sense for them.&lt;/p&gt;

&lt;blockquote&gt;I can’t even tell you how many times I abandoned the shopping cart on Flickr. Numerous times. My intentions are there, the time and distraction-free-environment is not.&lt;br/&gt;&lt;strong&gt;Tina Roth Eisenberg (@swissmiss) &amp;mdash; &lt;a href="http://www.swiss-miss.com/2011/08/picplum.html" title="picplum"&gt;Swiss Miss design blog/studio&lt;/a&gt;&lt;/strong&gt;&lt;/blockquote&gt;


&lt;p&gt;I'm a newly-minted uncle and know how this goes &amp;mdash; photos of my nephew stay on my sister's phone, point and shoot camera, laptop and DSLR. Maybe they end up on a photo dump site but then nothing happens. Well, sometimes I get this in my inbox:&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/shutterfly_toula.jpg" alt="Shutterfly pictures from Toula"/&gt;&lt;/div&gt;


&lt;p&gt;Sis did you seriously just send me over 1,000 photos? What is this I don’t even.&lt;/p&gt;

&lt;p&gt;Aside from the convenience of automatic delivery, there are a few facets that comprise how Akshay and I have been thinking about Picplum: &lt;strong&gt;premium prints&lt;/strong&gt;, &lt;strong&gt;best moments&lt;/strong&gt; and a &lt;strong&gt;great experience&lt;/strong&gt;. All prints are done by a professional photo lab via &lt;a href="http://en.wikipedia.org/wiki/Type_C_print"&gt;lightjet chemical process&lt;/a&gt; on 4" by 6" lustre photo paper that's thicker than flimsy 9c prints found elsewhere online. Lustre prints have the color saturation of glossy, fingerprint resistance of matte all without the glare of glossy photo paper. The photography snob in me wouldn't have it any other way. (The photography snob in me is also waiting desperately for the Canon 5D Mk III to come out and pair with an 85mm f/1.2 L.)&lt;/p&gt;

&lt;blockquote&gt;Shutterfly was really disappointing: pixelated, poor colors, and just a cheap feel - we'll never use them again. [...] Still, none of them were as good when I took a photography class in grad school and went to a camera store for processing, or our wedding photos for that matter. So I think there's something to be said for professional / photographer-quality processing. &lt;br/&gt;&lt;strong&gt;&lt;a href="http://okaysamurai.tumblr.com/about" title="Dave Werner"&gt;Dave Werner&lt;/a&gt;&lt;/strong&gt;&lt;/blockquote&gt;




&lt;h4&gt;Best Moments&lt;/h4&gt;


&lt;p&gt;Picplum is not trying to be your photo dump where you plug in your camera's memory card and unleash hundreds of photos thinking that you'll do something with them later. We just want your best photos. That may be just 5-10 a month, or it may be 25, but it's definitely not 300.  &lt;strong&gt;Curation, uploading and remembering to do something with your photos&lt;/strong&gt; are the main roadblocks for a utopian photo sharing experience. We're trying to solve this problem to separating the culling process from the uploading process and making everything else automatic.&lt;/p&gt;

&lt;p&gt;Maybe that's not the right way to do it but we're starting with this hunch and are going to iterate. Likewise, prints are just the first step. We want to gather mindshare around being the &lt;strong&gt;place for your very best photos&lt;/strong&gt;. If we can do that there are some interesting opportunities available to us. If you asked me where my best photos were, I wouldn't have an answer. I have 16,000 photos on Flickr but you'll have to wade through them to find the best ones. Maybe I tossed a few good ones in a set, but that's about it. I have hundreds more on Instagram, Facebook, iPhoto and Aperture/Lightroom (used both for a while before settling on Lightroom &amp;mdash; fast!). We have some ideas about how to get your best photos from these services too and just curation in general. We'll be experimenting in the near future.&lt;/p&gt;

&lt;h4&gt;Experience&lt;/h4&gt;


&lt;blockquote&gt;Just like when you see a red Netflix slip in the mail and immediately know what it is and get that giddy feeling, or open an Apple package, we’re trying to do the same for photo prints. When people talk about Picplum we want them to start with, 'I received this amazing package in the mail yesterday,' instead of 'look at this neat website.'&lt;br/&gt;&lt;strong&gt;Paul Stamatiou&lt;/strong&gt; on &lt;a href="http://thenextweb.com/apps/2011/08/17/picplum-hopes-to-revive-a-slow-photo-movement-with-automated-delivery-of-prints/" title="Picplum hopes to revive a slow photo movement with automated delivery of prints"&gt;The Next Web&lt;/a&gt;&lt;/blockquote&gt;


&lt;p&gt;Crafting a memorable experience encompasses everything a user comes across when dealing with your product or service. For us this meant taking extra care to ensure the offline experience of the Picplum package was excellent. Most people (recipients) will hear about Picplum for the first time via our package so it's important to make a great first impression and ensure that it's not a stale experience in successive engagements.&lt;/p&gt;

&lt;p&gt;It's still pretty early on so there's not much to share with what we have learned but we're starting with quality prints, a nice envelope the same color as our website, and an explanatory insert introducing the recipient to Picplum. More on this in the months to come.&lt;/p&gt;

&lt;h4&gt;The Review&lt;/h4&gt;


&lt;p&gt;Alright time to critique the actual web app. What's that you're muttering to yourself? &lt;strong&gt;&lt;em&gt;Where's the mobile app?&lt;/em&gt;&lt;/strong&gt; Simply put, we won't expand to mobile until we know that the general Picplum concept works first. One thing at a time, separated by validation. Trying to do too many things at once without much validation is a surefire way to spread yourself thin and fail. &lt;a href="http://www.google.com/search?cx=c&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=peanut+butter+manifesto"&gt;The peanut butter manifesto&lt;/a&gt; comes to mind.&lt;/p&gt;

&lt;p&gt;[Now I pretend I'm not Stammy and enter user testing speak-aloud mode..]&lt;/p&gt;

&lt;p&gt;Alright, let's signup. Here's the first screen I see:&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_onboarding.jpg" alt="Picplum Onboarding - First Login"/&gt;&lt;br/&gt;&lt;small&gt;First login&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Oh nice, it has me following some steps: Add Photos, Add Recipients, Send Photos. It wants me to upload photos first. Hrm, I don't really know what photos I want to add right now. Let me see if I can skip to the second step by clicking "Add Recipients." Interface seems very snappy.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_skip_to_step2_1100.jpg" title="Picplum - Add Recipients Step"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_skip_to_step2.jpg" alt="Picplum - Add Recipients Step"/&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Okay that worked, here we go. Let's enter grandma and the parents. Grandma doesn't use email so I'm going to see if there is a Send Prints Only mode that doesn't ask for email in the dropdown; there is. Hrm, I don't know my grandmother's address off the top of my head. Have to switch to my email inbox and search for it, bummer. If I wasn't motivated I would have probably closed the tab and decided to come back later/never. Okay found the address in an old email thread and added grandma. Recipient added instantly; no page load!&lt;/p&gt;

&lt;p&gt;Adding my sisters now too. Don't know their addresses off the top of my head either so I'll have to search GMail again. This is getting annoying. I wish Picplum could just ask for an email address and let me click a button to automatically send the recipient and email and have them fill out the info and explain to them what Picplum is all about. Okay, I've added my recipients. I'm going to click this big orange "Add More Photos" button.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step2_done.jpg" alt="Picplum - Recipients Added"/&gt;&lt;/div&gt;


&lt;p&gt;Okay that button takes me back to the Add Photos page. This is the hard part. Hrm. What to upload? Opening up iPhoto, plugging in the SDHC card from my aging &lt;a href="http://paulstamatiou.com/sony-alpha-nex5-sld-digital-camera" title="Sony Alpha NEX-5"&gt;Sony Alpha NEX-5&lt;/a&gt; into my MacBook Air. Loaded up my latest snapshots. Alrighty. The purple box says I can drag, let's try that out now.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_drag_1100.jpg" title="Drag and dropping photos from iPhoto into Picplum"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_drag.jpg" alt="Drag and dropping photos from iPhoto into Picplum"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Drag and drop!&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I dragged the photos over and let go. They instantly started uploading! I like this uploading status. Makes it easy to understand what is happening and when it will finish. Oh nice, as the photos finish uploading they just appear. This thing is wicked fast. A new button labeled "Send Photos Now" appeared on the screen to proceed to the last step.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_uploading_1100.jpg" title="Photos uploading to Picplum"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_uploading.jpg" alt="Photos uploading to Picplum"/&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Alright, my photos are done uploading. Hrm what is this crap... my head is cropped off! Will it actually print like this? I hope they know how to deal with portrait photos. Can I do any basic post-processing or photo adjustment? Doesn't look like it.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_headchop.jpg" alt="Picplum Thumbnail Cropping Issue"/&gt;&lt;/div&gt;


&lt;p&gt;I clicked on the photo and the larger version seems normal. Oh well, I'll go to the next step and see what happens.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_facebox_1100.jpg" title="Enlarged Image"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_step1_facebox.jpg" alt="Enlarged Image"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Photos look sharp in a nicely modified &lt;a href="https://github.com/defunkt/facebox" title="facebox"&gt;facebox&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I'm now on the last step which seems to be some kind of confirmation page.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_send_now_1100.jpg" title="Picplum send now"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_send_now.jpg" alt="Picplum send now"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;small&gt;Send Your First Batch page&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I thought this was supposed to be automatic. Ah I need to send this batch first and then it will become automatic thereafter. Can I pause an automatic batch or will I get charged if I don't use it? I don't see a way to only order these photos and not subscribe to a plan. I guess they only offer a monthly subscription. Hrm, why is it 14 per month and then say that the first batch is free, but then show a 2.00 charge? Some of this pricing stuff is not very clear (in this case it's 7 per recipient and since one was international that's a bit extra).&lt;/p&gt;

&lt;p&gt;I don't see any area to edit what I receive. It says it will send prints to my recipients. What kind? Can I include a message with these photos? Can I change my recipients later?&lt;/p&gt;

&lt;p&gt;Adding my credit card info now. It seems odd that I need to click "Save Credit Card" and then the "Pay &amp;amp; Send" button &amp;mdash; why can't it just be one action? What happens if I want to cancel during the 30 day trial?&lt;/p&gt;

&lt;p&gt;Clicking "Pay &amp;amp; Send", let's see what happens. Okay it takes me to the photos page, a notice popped up saying I sent my first batch and some new site navigation appeared.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_batch_sent_1100.jpg" title="Picplum batch sent"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_batch_sent.jpg" alt="Picplum batch sent"/&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Now what? Flipping to my inbox to see if any confirmation or receipt was sent. Nothing. If I had "email only" recipients when and how would they receive the photos? How long will it take until my print recipients receive my photos in the mail? I think this step should bring up a modal or &lt;a href="https://github.com/jeff-optimizely/Guiders-JS" title="Guiders JS"&gt;guiders.js&lt;/a&gt; box teaching me the new navigation that showed up. Can I add a photo for the next batch? I forgot when the next batch will ship.. where can I find that date again? I forgot to add someone to that last batch of photos, can I edit recipients after the fact? Blah! Closing the tab and going back to Hacker News.&lt;/p&gt;

&lt;p&gt;[/End user testing voice]&lt;/p&gt;

&lt;p&gt;Phew. There is definitely some room for onboarding flow tweaks, but it has come a long way since the middle of Y Combinator:&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplum_onboarding_old.jpg" alt="Picplum's early onboarding process"/&gt;&lt;br/&gt;&lt;small&gt;A very early version of this same new user onboarding flow... yuck!&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;After having watched real users go through the onboarding flow many, many times you begin questioning everything. Too much text is distracting. Too many unrelated UI elements could cause the confused user to click to other pages and get out of the flow. We've refined this part of Picplum several times. We have yet to add it but we want to put in &lt;strong&gt;positive reinforcement&lt;/strong&gt; in-between steps so the user knows how things are going, and &lt;strong&gt;make their next action even more obvious&lt;/strong&gt; (either by way of making the next action pulse/glow or using a guider box).&lt;/p&gt;

&lt;p&gt;After the user sends their first batch of photos and completes the onboarding flow I want to acquaint them with the new UI elements. I'll fade in a help button on the header bar and show a guider box telling the user that if they ever need help with the UI they can click that button to walk them through the interface should they need to reference it at a later point.&lt;/p&gt;

&lt;h4&gt;But Prints Are Dying&lt;/h4&gt;


&lt;p&gt;Film photography is dying, not prints. People still want to frame photos, put them on the wall or share prints with close family and friends. Digital photos are surely growing but you will always want the most important ones printed and Picplum makes that ridiculously easy and convenient. We're aiming to make prints cool again &amp;mdash; starting with the traditional 4" x 6". The next step may be physical, it may be digital. We'll see what the market tells us.&lt;/p&gt;

&lt;p&gt;Checkout the Picplum blog for my mom's take on &lt;a href="http://blog.picplum.com/post/8818368168/what-photos-mean-to-me" title="What Photos Mean To Me"&gt;what photo prints mean to her&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Verdict&lt;/h4&gt;


&lt;p&gt;I give Picplum &lt;strong&gt;8 out of 10 Stammys&lt;/strong&gt;. I want to be able to signup without having to add any photos and just have it setup and ready to go for when I want to email in photos. I want larger prints and I want Picplum to send me a frame. I want Picplum to tell me how to take better pictures as it learns what I think my best photos are.&lt;/p&gt;

&lt;p&gt;Sending photos every month may not be the right interval for everyone. What about every 2 weeks too? Or what about a "smart" batch that sees how you use it and sends prints accordingly. I want to be able to send different photos in the same batch to different people. I want Picplum to help me pick my best photos, from ones I manually import and ones I want imported from other services.&lt;/p&gt;

&lt;p&gt;But first I'll have to see if these are things real Picplum users want too. &lt;strong&gt;&lt;a href="http://picplum.com" title="The Easiest Way to Send Photo Prints"&gt;Signup Now &amp;raquo;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;Try Picplum&lt;/h4&gt;


&lt;p&gt;If you've read all the way to this part, I would love for you to take Picplum for a test drive. &lt;strong&gt;&lt;a href="http://picplum.com" title="The Easiest Way to Send Photo Prints"&gt;Signup and send your first batch of beautiful prints today&lt;/a&gt;&lt;/strong&gt;. The first ones are free. We have a pay as you go plan too. Questions? Fire away in the comments below.&lt;/p&gt;

&lt;h4&gt;Thoughts?&lt;/h4&gt;


&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/pg_motivator.jpg" alt="pg motivator"/&gt;&lt;br/&gt;&lt;small&gt;Spotted at Stripe.com HQ&lt;/small&gt;&lt;/div&gt;

&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/picplum-automatic-photo-prints-parents" title="Thoughts on Picplum Automatic Photo Prints"&gt;Thoughts on Picplum Automatic Photo Prints&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=2eO2KB3HNTo:HZV9QG_wJWI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=2eO2KB3HNTo:HZV9QG_wJWI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=2eO2KB3HNTo:HZV9QG_wJWI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=2eO2KB3HNTo:HZV9QG_wJWI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=2eO2KB3HNTo:HZV9QG_wJWI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=2eO2KB3HNTo:HZV9QG_wJWI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=2eO2KB3HNTo:HZV9QG_wJWI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=2eO2KB3HNTo:HZV9QG_wJWI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/2eO2KB3HNTo" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/picplum-automatic-photo-prints-parents</feedburner:origLink></entry>
	
	<entry>
		<title>Picplum</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/D6YLdBn5HW4/picplum" />
		<updated>2011-08-18T18:30:00-07:00</updated>
		<id>http://paulstamatiou.com/picplum</id>
		<content type="html">&lt;p&gt;Just a heads up that I launched my Y Combinator startup, &lt;a href="http://picplum.com" title="The Easiest Way to Send Photo Prints"&gt;Picplum&lt;/a&gt;, last week! That's why I have been heads-down for the last few months. &lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://picplum.com" title="The Easiest Way to Send Photo Prints"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/08/picplumpkg.jpg" alt="Picplum - The Easiest Way to Send Photo Prints Automatically"/&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Read the press! &lt;a href="http://thenextweb.com/apps/2011/08/17/picplum-hopes-to-revive-a-slow-photo-movement-with-automated-delivery-of-prints/" title="PicPlum hopes to revive a slow photo movement with automated delivery of prints"&gt;The Next Web&lt;/a&gt;, &lt;a href="http://launch.is/blog/smart-yc-backed-picplum-targets-parents-with-photo-printing.html" title="Smart: YC-Backed Picplum Targets Parents with Photo Printing and Sharing Service"&gt;Launch&lt;/a&gt;, &lt;a href="http://techcrunch.com/2011/08/12/yc-funded-picplum-beautiful-prints-automatically-mailed-for-you/" title="YC-Funded PicPlum: Beautiful Prints, Automatically Mailed for You"&gt;TechCrunch&lt;/a&gt;. Later this week I'll be working on an in-depth Picplum review of sorts. In the meantime if you have any things in particular you want to know about Picplum &amp;mdash; either the technical side of things or just about the product or even the Y Combinator experience &amp;mdash; let me know here and I'll try to include it in the post.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
&lt;a href="http://twitter.com/stammy" title="Paul Stamatiou on Twitter"&gt;Stammy&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/picplum" title="Picplum"&gt;Picplum&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=D6YLdBn5HW4:XFqncsn1rUk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=D6YLdBn5HW4:XFqncsn1rUk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=D6YLdBn5HW4:XFqncsn1rUk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=D6YLdBn5HW4:XFqncsn1rUk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=D6YLdBn5HW4:XFqncsn1rUk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=D6YLdBn5HW4:XFqncsn1rUk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=D6YLdBn5HW4:XFqncsn1rUk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=D6YLdBn5HW4:XFqncsn1rUk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/D6YLdBn5HW4" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/picplum</feedburner:origLink></entry>
	
	<entry>
		<title>Upgrading to OS X Lion</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/l6EYjsnhgUE/upgrading-osx-lion" />
		<updated>2011-07-09T12:56:40-07:00</updated>
		<id>http://paulstamatiou.com/upgrading-osx-lion</id>
		<content type="html">&lt;p&gt;After seeing a fellow founder at a Y Combinator dinner this week running the GM seed of Mac OS X Lion without any issues I ended up installing it on my MacBook Pro. &lt;/p&gt;

&lt;p&gt;I only ran into a few issues with my development environment. I had to install XCode 4.1, update rvm and ruby 1.9.2, uninstall imagemagick and the rmagick gem, then reinstall imagemagick and run bundle update for my app. It's working great now. That being said, I'm a tad disappointed with Lion. There was so much hype around it and the only real discernible changes are: a sleeker Mail.app, Mission Control (Launchpad.. meh) and an improved Spotlight (cursor down files and a preview pops up).&lt;/p&gt;

&lt;p&gt;Then again I've only been using it for 8 hours. I'll provide an update when I have more time to blog and when I've spent more time with Lion.&lt;/p&gt;

&lt;p&gt;What do you think of Lion so far if you've installed it?&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/upgrading-osx-lion" title="Upgrading to OS X Lion"&gt;Upgrading to OS X Lion&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=l6EYjsnhgUE:xr3NMbVK3k0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=l6EYjsnhgUE:xr3NMbVK3k0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=l6EYjsnhgUE:xr3NMbVK3k0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=l6EYjsnhgUE:xr3NMbVK3k0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=l6EYjsnhgUE:xr3NMbVK3k0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=l6EYjsnhgUE:xr3NMbVK3k0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=l6EYjsnhgUE:xr3NMbVK3k0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=l6EYjsnhgUE:xr3NMbVK3k0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/l6EYjsnhgUE" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/upgrading-osx-lion</feedburner:origLink></entry>
	
	<entry>
		<title>In the Y Combinator Startup Grind</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/6nrlD5bYFW0/ycombinator-startup-summer-2011-batch" />
		<updated>2011-06-19T14:55:18-07:00</updated>
		<id>http://paulstamatiou.com/ycombinator-startup-summer-2011-batch</id>
		<content type="html">&lt;p&gt;As you have no doubt noticed my posting has slowed down a bunch recently. The reason? I am now working on my third startup and going through &lt;a href="http://www.wired.com/magazine/2011/05/ff_ycombinator/" title="Y Combinator Is Boot Camp for Startups"&gt;Y Combinator&lt;/a&gt;'s Summer 2011 batch. It started earlier this month and wraps up in late August.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/dodeja"&gt;Akshay Dodeja&lt;/a&gt; and I are cofounders working on something interesting. Rails 3.1 and &lt;a href="http://documentcloud.github.com/backbone/" title="Backbone"&gt;Backbone.js&lt;/a&gt; is the current stack. Using Heroku, Mailgun, Stripe and some other cool services. Currently working out of my tiny studio apartment in San Francisco but we're passively looking for a 2 bedroom loft in the city.&lt;/p&gt;

&lt;p&gt;More on what we're building when we actually launch! Until then 10am to 2am working.. feels great to be back in the startup grind.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/ycombinator-startup-summer-2011-batch" title="In the Y Combinator Startup Grind"&gt;In the Y Combinator Startup Grind&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=6nrlD5bYFW0:O1RsJdVMQJA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=6nrlD5bYFW0:O1RsJdVMQJA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=6nrlD5bYFW0:O1RsJdVMQJA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=6nrlD5bYFW0:O1RsJdVMQJA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=6nrlD5bYFW0:O1RsJdVMQJA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=6nrlD5bYFW0:O1RsJdVMQJA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=6nrlD5bYFW0:O1RsJdVMQJA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=6nrlD5bYFW0:O1RsJdVMQJA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/6nrlD5bYFW0" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/ycombinator-startup-summer-2011-batch</feedburner:origLink></entry>
	
	<entry>
		<title>Thinking about Hackintosh</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/eQzT48XpPP4/hackintosh" />
		<updated>2011-05-29T23:16:56-07:00</updated>
		<id>http://paulstamatiou.com/hackintosh</id>
		<content type="html">&lt;p&gt;I have been thinking about building a hackintosh lately. If you have experience with this, I would love a few pointers in the comments.&lt;/p&gt;

&lt;p&gt;I have been told that InsanelyMac is the place to start looking at other setups to find compatible hardware. Ideally I would like a Shuttle SFF hackintosh &amp;mdash; love the form factor &amp;mdash; but their motherboards do not seem to be hackintosh friendly yet. I am thinking about something like a six core 3.2GHz Gulftown Intel Core i7 processor, SSD RAID 0 with Vertex 3 Pros, 8 or 12GB of RAM and a decent video card.&lt;/p&gt;

&lt;p&gt;My Macbook Pro is showing its age and while I'm interested in the upcoming MacBook Airs with LV Core i5 processors (rumor), I'd want a beefier GPU too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you ever run a hackintosh PC?&lt;/strong&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/hackintosh" title="Thinking about Hackintosh"&gt;Thinking about Hackintosh&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQzT48XpPP4:8un-uw7kemc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=eQzT48XpPP4:8un-uw7kemc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQzT48XpPP4:8un-uw7kemc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=eQzT48XpPP4:8un-uw7kemc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQzT48XpPP4:8un-uw7kemc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQzT48XpPP4:8un-uw7kemc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=eQzT48XpPP4:8un-uw7kemc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=eQzT48XpPP4:8un-uw7kemc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/eQzT48XpPP4" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/hackintosh</feedburner:origLink></entry>
	
	<entry>
		<title>Bitcoin Mining</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/fIkeq3BLi8w/bitcoin-mining" />
		<updated>2011-05-19T21:21:28-07:00</updated>
		<id>http://paulstamatiou.com/bitcoin-mining</id>
		<content type="html">&lt;p&gt;Back when the Pentium 4E "Prescotts" were causing an outrage in the computer modding community for notoriously overheating, and around when Steve Jobs failed to deliver on his promise of 3GHz from the G5, I was an avid &lt;em&gt;folder&lt;/em&gt;. Folding is the term for running a distributed computing program on your computer, &lt;a href="http://folding.stanford.edu/" title="Folding@Home"&gt;Folding@Home&lt;/a&gt;, that donates your spare CPU cycles to help Stanford learn more about diseases created from misfolded proteins. This project  became and is still hyper-competitive. People join folding teams, install it on as many computers as they can find and let them run 24/7 in hopes of completing many WUs (workunits) and ranking higher.&lt;/p&gt;

&lt;div class="center"&gt;&lt;iframe width="620" height="380" src="http://www.youtube.com/embed/Um63OQz3bjo?rel=0&amp;amp;hd=1" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;


&lt;p&gt;How does this relate to the title? Well I have recently been playing around with bitcoin mining and I can't help but draw similarities between the two. Just like folding you must run a program that uses (lots of) your computer resources to generate, or mine, bitcoins. But that's where the similarities end. &lt;strong&gt;So what exactly is bitcoin?&lt;/strong&gt; A recently published Slate article, &lt;a href="http://www.slate.com/id/2294980/" title="Slate - My Money Is Cooler Than Yours"&gt;My Money Is Cooler Than Yours&lt;/a&gt;, has the scoop:&lt;/p&gt;

&lt;blockquote&gt;Bitcoin is a peer-to-peer currency, meaning it is not issued by a central authority, like the dollar or yen. The money supply grows as the network grows and will max out at about 21 million bitcoins. But right now, you can purchase them online on the Mt. Gox currency exchange or an over-the counter market. They do not exist in physical form—only electronically, owned and traded by members of a special, anonymous peer-to-peer network. No third-party intermediary, such as a payment processor or a bank, needs to keep tabs on or process the electronic transactions. The network itself does, with each participating computer running a special, secure program that ensures no user can spend a coin twice or create new money out of thin air.&lt;/blockquote&gt;


&lt;p&gt;GigaOm published a similar exploratory piece about Bitcoins: &lt;a href="http://gigaom.com/2011/05/16/how-bitcoin-wants-to-make-money-even-more-virtual/" title="How BitCoin Wants to Make Money Even More Virtual - GigaOm"&gt;How Bitcoin Wants to Make Money Even More Virtual&lt;/a&gt;. As did TechDirt with &lt;a href="http://www.techdirt.com/articles/20110420/02412713972/can-bitcoin-really-succeed-long-term.shtml" title="Can Bitcoin Really Succeed Long Term?"&gt;Can Bitcoin Really Succeed Long Term?&lt;/a&gt; Bitcoin is just getting mainstream media attention. I briefly mined for bitcoins some six months ago but didn't really "get it" and the big vision, so I stopped mining. If only I had held onto my bitcoins instead of deleting the app!&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/05/bitcoin_app_osx.jpg" alt="Bitcoin app osx"/&gt;&lt;br/&gt;&lt;small&gt;My massive bitcoin empire is worth... ~14 cents. And I got those 0.02BTC from the bitcoin faucet. Been mining for all of 2 days on my slow MacBook Pro.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Unlike Folding@Home where you more or less knew how much progress you were making, mining bitcoins is fairly random. You might generate your first bitcoin in one hour or it may take 3 weeks. It depends if you are among the first in the community to solve that block with a hash; the more hashes your computer can generate, the better.&lt;/p&gt;

&lt;blockquote&gt;It's important to realize that block generation is not a long, set problem (like doing a million hashes), but more like a lottery. Each hash basically gives you a random number between 0 and the maximum value of a 256-bit number (which is huge). If your hash is below the target, then you win. If not, you increment the nonce (completely changing the hash) and try again.&lt;br/&gt;&lt;br/&gt;&lt;a href="https://en.bitcoin.it/wiki/Target" title="Target- Bitcoin"&gt;Bitcoin Wiki&lt;/a&gt;&lt;/blockquote&gt;


&lt;p&gt;It becomes harder to solve a block as the total computational power of the network increases. As such, bitcoin miners often join pools where the pot is shared (depends on the pool but often in relation to your contributed power). Currently a single bitcoin can be sold on one of several bitcoin exchange websites for around 7. You can buy bitcoins or generate them yourself to then spend online. But wait.. &lt;strong&gt;how do you spend them?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm only skimming the surface about bitcoin mining and its specifics, but one thing is certain: bitcoin has some pretty lofty goals. If this is to be a viable virtual currency people must begin accepting them as currency. And that's exactly what is happening. Take for example this software developer that has &lt;a href="http://www.betabeat.com/2011/05/18/will-work-for-bitcoin-coder-says-most-people-just-using-it-as-an-investment-vehicle/" title="'Will Work for Bitcoin' Coder Says Most People Just Using It as an Investment Vehicle"&gt;begun accepting bitcoins for payment&lt;/a&gt;. And there are more and more directories of &lt;a href="https://en.bitcoin.it/wiki/Trade" title="Bitcoin Trading"&gt;bitcoin-accepting service providers&lt;/a&gt; popping up; everything from online stores to flash games and web hosts.&lt;/p&gt;

&lt;p&gt;To be frank, I'm not 100% on the viability of bitcoin as a currency but I am fascinated about the geeky bits: optimizing computers to mine bitcoins and achieving higher and higher Mhashes/sec rates. Lots of folks are working on &lt;a href="http://forum.bitcoin.org/index.php?topic=8405.0" title="Howto: Mining on Amazon EC2 Cluster GPU instance"&gt;custom mining setups&lt;/a&gt; to get the most out of their hardware.&lt;/p&gt;

&lt;p&gt;While not cost effective in anyway at the moment, I'm currently tinkering around with bitcoin mining on an Amazon EC2 GPU Cluster. Below is completely unoptimized bitcoin install running on a cg1.4xlarge instance with 22GB of RAM and 2 NVIDIA Tesla “Fermi” M2050 GPUs. With some tweaking it's possible to get it up to around 140Mhashes/sec &amp;mdash; still a far cry from the 800Mhashes/sec capable from an ATI 5970 Radeon HD video card or overclocked dual 5870s.&lt;/p&gt;

&lt;pre class="terminal"&gt;
[ec2-user@ip-XXX-XXX-XXX-XXX 64] ./bitcoind getinfo
{
    "version" : 32100,
    "balance" : 0.00000000,
    "blocks" : 125020,
    "connections" : 78,
    "proxy" : "",
    "generate" : true,
    "genproclimit" : -1,
    "difficulty" : 244139.48158254,
    "hashespersec" : 16347145,
    "testnet" : false,
    "keypoololdest" : 1305759224,
    "paytxfee" : 0.00000000,
    "errors" : ""
}
&lt;/pre&gt;


&lt;p&gt;I think a commenter on TechDirt put it best: &lt;blockquote&gt;Bitcoiners don't know if Bitcoin will succeed but they're working hard on making bitcoin success.&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thoughts on bitcoin?&lt;/strong&gt; I'm still pretty new to bitcoin and have a lot to learn. This post was just to share my enthusiasm for a budding new technology trend and virtual currency. I have yet to join a mining pool, but that seems to be the best way to get started, unless you happen to have a cluster of your own computers with beefy GPUs.&lt;/p&gt;

&lt;p&gt;If you've got some bitcoins you want to share, send them to my address: &lt;code class="inline"&gt;128jzNVjzacRWYqFsVFMjcPKvUMa6Yfvgx&lt;/code&gt; :)&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/bitcoin-mining" title="Bitcoin Mining"&gt;Bitcoin Mining&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=fIkeq3BLi8w:2E1A-ks5Qqs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=fIkeq3BLi8w:2E1A-ks5Qqs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=fIkeq3BLi8w:2E1A-ks5Qqs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=fIkeq3BLi8w:2E1A-ks5Qqs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=fIkeq3BLi8w:2E1A-ks5Qqs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=fIkeq3BLi8w:2E1A-ks5Qqs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=fIkeq3BLi8w:2E1A-ks5Qqs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=fIkeq3BLi8w:2E1A-ks5Qqs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/fIkeq3BLi8w" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/bitcoin-mining</feedburner:origLink></entry>
	
	<entry>
		<title>VorePad, The Convore iPad App</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/5ofN-cCKVm4/vorepad-convore-ipad-app" />
		<updated>2011-04-22T03:35:51-07:00</updated>
		<id>http://paulstamatiou.com/vorepad-convore-ipad-app</id>
		<content type="html">&lt;p&gt;My co-founder, &lt;a href="https://twitter.com/jazzychad" title="Chad Etzel on Twitter"&gt;Jazzychad&lt;/a&gt;, is rolling out his latest iPad app today. It's called VorePad and it's the best (and first) iPad client for &lt;a href="http://convore.com" title="Convore"&gt;Convore&lt;/a&gt;. Convore of course is the latest online forum and chat site craze to hit the internet, created by friends from a fellow Y Combinator company.&lt;/p&gt;

&lt;p&gt;Chad explains his impetus for writing the app and talks about &lt;a href="http://blog.jazzychad.net/2011/04/22/vorepad-convore-for-ipad.html"&gt;VorePad features on this blog&lt;/a&gt;.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/vorepad.jpg" alt="Vorepad"/&gt;&lt;/div&gt;


&lt;p&gt;The app is &lt;strong&gt;&lt;a href="http://itunes.apple.com/app/vorepad/id432161192?mt=8" title="VorePad for Convore"&gt;currently on sale in the App Store for $3.99&lt;/a&gt;&lt;/strong&gt;. Get it and head to Convore with your other VorePad-using friends to test out my favorite feature, sounds!&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/vorepad-convore-ipad-app" title="VorePad, The Convore iPad App"&gt;VorePad, The Convore iPad App&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=5ofN-cCKVm4:7MqciR8C-Ic:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=5ofN-cCKVm4:7MqciR8C-Ic:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=5ofN-cCKVm4:7MqciR8C-Ic:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=5ofN-cCKVm4:7MqciR8C-Ic:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=5ofN-cCKVm4:7MqciR8C-Ic:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=5ofN-cCKVm4:7MqciR8C-Ic:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=5ofN-cCKVm4:7MqciR8C-Ic:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=5ofN-cCKVm4:7MqciR8C-Ic:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/5ofN-cCKVm4" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/vorepad-convore-ipad-app</feedburner:origLink></entry>
	
	<entry>
		<title>Skribit Shutting Down</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/93ldRYIoY14/skribit-shutting-down" />
		<updated>2011-04-18T21:08:22-07:00</updated>
		<id>http://paulstamatiou.com/skribit-shutting-down</id>
		<content type="html">&lt;p&gt;I just emailed all the users of my first startup, Skribit, saying that we will be pulling the plug. For those interested, here is the notice I sent:&lt;/p&gt;

&lt;blockquote&gt;
[Notice: This is the last email you'll ever receive regarding Skribit. I will personally nuke the 20,621 user email list. - @Stammy]&lt;br/&gt;&lt;br/&gt;

On July 31st, 2011, Skribit will be closing its doors. Skribit started several years ago at Atlanta Startup Weekend in November 2007 and has had a good run. As a refresher, Skribit aimed to aid writer's block by allowing bloggers to receive post suggestions from their readers, while helping readers keep track of what their favorite blogger's were working on.&lt;br/&gt;&lt;br/&gt;

Unfortunately, Skribit traction was not as impressive as we had hoped and Skribit had become more of a niche solution for a small percentage of bloggers. Over the past few years, 45,162 blog post suggestions have been completed through Skribit, 2,346 of which were completed/blogged. The vast majority of Skribit users did not receive suggestions from their readers for various reasons. Only 1,214 blogs had more than 3 active suggestions.&lt;br/&gt;&lt;br/&gt;

We stopped actively developing Skribit last Spring and decided to pursue other opportunities. Thanks for being part of Skribit! We are in the process of refunding current PRO users. We wouldn't have been able to keep Skribit running for so long if it wasn't for a seed investment from Georgia Tech's Edison Fund and lots of advising from Lance Weatherby of the Georgia Tech ATDC.&lt;br/&gt;&lt;br/&gt;

Follow us on Twitter to see what we're working on now!&lt;br/&gt;&lt;br/&gt;

Best,&lt;br/&gt;
Calvin, Paul &amp;amp; Lance&lt;br/&gt;&lt;br/&gt;

&lt;a href="http://twitter.com/cyu"&gt;@cyu&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://twitter.com/Stammy"&gt;@Stammy&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://twitter.com/lance"&gt;@lance&lt;/a&gt;&lt;br/&gt;
&lt;/blockquote&gt;


&lt;p&gt;You can read all about &lt;a href="http://www.google.com/search?q=site%3Apaulstamatiou.com+skribit" title="Skribit on PaulStamatiou.com"&gt;my work with Skribit in these blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/skribit-shutting-down" title="Skribit Shutting Down"&gt;Skribit Shutting Down&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=93ldRYIoY14:1kGfT1R26aA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=93ldRYIoY14:1kGfT1R26aA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=93ldRYIoY14:1kGfT1R26aA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=93ldRYIoY14:1kGfT1R26aA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=93ldRYIoY14:1kGfT1R26aA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=93ldRYIoY14:1kGfT1R26aA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=93ldRYIoY14:1kGfT1R26aA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=93ldRYIoY14:1kGfT1R26aA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/93ldRYIoY14" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/skribit-shutting-down</feedburner:origLink></entry>
	
	<entry>
		<title>Crash Course: Design for Startups</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/Lwy7T6kS41U/startup-web-design-ux-crash-course" />
		<updated>2011-04-08T10:00:00-07:00</updated>
		<id>http://paulstamatiou.com/startup-web-design-ux-crash-course</id>
		<content type="html">&lt;p&gt;I recently stumbled across screenshots of old websites of mine and was hurled into a state of reminiscent shock. I knew they were bad, but wow they were outstandingly horrible (redeemed only by their microformats support! I kid, I kid). Several years and a few Georgia Tech design and HCI courses have passed since those atrocities graced the web but I &lt;a href="http://paulstamatiou.com/portfolio" title="Portfolio"&gt;archived them in a sort of reverse portfolio&lt;/a&gt; as a personal reminder of how much my design sensibilities have matured. Only in the last year have I begun feeling slightly more confident about my design quality and process.&lt;/p&gt;

&lt;div class="center"&gt;&lt;a href="http://paulstamatiou.com/startup-web-design-ux-crash-course" title="Crash Course: Design for Startups"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_design_is_graphic.png" alt="Design is graphic - photoshop and xscope"/&gt;&lt;/a&gt;&lt;/div&gt;





&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I have yet to consider myself a real designer and there are quite a few things I would do differently with my most recent work on &lt;a href="http://paulstamatiou.com/startup-update-notifo-iphone-app-v2-more" title="Startup Update: Notifo iPhone App v2 and more"&gt;Notifo&lt;/a&gt; and &lt;a href="http://paulstamatiou.com/pic-a-fight-launch-viral-facemash-instagram" title="Behind the Project: Pic A Fight"&gt;Pic A Fight&lt;/a&gt;. But I've learned why my work nowadays is better than from years past. I am aiming to somehow share some of these thoughts brewing in my head with this post today.&lt;/p&gt;

&lt;p&gt;I have been brainstorming for the past few days about how to scope this article. Unfortunately I don't think I can distill everything about design into this or any number of posts. For one, design can be very subjective (or just plain &lt;a href="http://flyosity.com/application-design/your-design-is-wrong-and-heres-why.php" title="Your design is wrong and here's why"&gt;wrong at times&lt;/a&gt;). Second, there's a sharp distinction between graphic design and user experience that deserves its own article. Third, there's a whole world of typography, color theory, gestalt laws, fitts' law, hick's law, visual hierarchy, &lt;a href="http://ui-patterns.com/" title="UI Patterns - User Interface Design Pattern Library"&gt;UI patterns&lt;/a&gt;, layout mastery and copywriting that needs to be explored first hand. But most importantly, I'm still learning too. This is not a definitive guide, just a friendly pointer for startup folks getting into design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I can do is share what has worked for me&lt;/strong&gt;. I won't get into how to do the technical side of things, because let's face it that's just a Google search away and you'll probably find a great article on Smashing Magazine showing you Sass, writing mixins, learning to put CSS3 vendor prefixes ahead of real properties and so on.&lt;/p&gt;

&lt;h4&gt;Subtle is key! Except when it's not.&lt;/h4&gt;


&lt;p&gt;When I was a wee pixel pusher I would overuse whatever graphic effect I had just learned. Text-shadow? Awesome, let's put 5px 5px 5px #444. Border-radius? Knock that up to 15px. Gradients? How about from red to black?&lt;/p&gt;

&lt;p&gt;You can imagine how horrible everything looked. Now my rule of thumb in most cases is applying &lt;strong&gt;just enough to make it perceivable&lt;/strong&gt;, no more. This usually means no blur on text-shadow and just a 1px offset, or only dealing with gradients moving between a very narrow color range.&lt;/p&gt;

&lt;p&gt;Then what do I mean about "except when it's not"? Take for example visual hierarchy &amp;mdash; where to draw someone's eyes first with color, contrast and proportion. If you are going to increase the font size of a particular element, don't increase it by 1 or 2 points. Increase it by 10. &lt;strong&gt;Here's a nice test&lt;/strong&gt;: take a screenshot of your website or layout and make it 3 times smaller. Can you still see the main headline or call to action well? No? Make it bigger!&lt;/p&gt;

&lt;h4&gt;Get Inspired and Stay &lt;del&gt;Thirsty My Friends&lt;/del&gt; Organized&lt;/h4&gt;


&lt;p&gt;This is not a new concept by any means, but it bears repeating: keep the right side of your brain engaged by regularly seeking great website designs, reading about design, sketching site layouts (or &lt;a href="http://picplz.com/user/stammy/pic/r8cdc/" title="fear my wacom skills"&gt;anything really&lt;/a&gt;) and more. &lt;strong&gt;Whenever I see a website I like&lt;/strong&gt;, or even just a particular element of a site, I take a screenshot and archive it. I have been doing this for at least a year with the help of &lt;a href="http://www.realmacsoftware.com/littlesnapper/" title="LittleSnaper - Picture-perfect screenshots"&gt;LittleSnapper&lt;/a&gt;. Be warned, the app is a little slow. I wish someone would make a better competing product. I would pay 100 for it.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_littlesnapper.jpg" alt="LittleSnapper"/&gt;&lt;br/&gt;&lt;small&gt;Easy to use with their browser bookmarklet. LittleSnapper stays out of sight and saves the screenshots.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;I have amassed over 700 screenshots so far. Not a day goes by that I don't archive something nice I see online. There is an app in the Mac App Store called Galleried which is the desktop app equivalent of browsing many CSS galleries and helps too.&lt;/p&gt;

&lt;h4&gt;Process&lt;/h4&gt;


&lt;p&gt;My typical site redesign process usually goes like this:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Get in the mindset of the target audience. Since this is your startup this probably won't involve much research as you are likely already the domain expert and ideal customer of your product. If not, checkout the &lt;a href="http://52weeksofux.com/post/890288783/the-five-ws-of-ux" title="The Five W's of UX"&gt;Five W's of UX&lt;/a&gt;: Who, What, Where, When, and Why. Keep a clear cut use case in mind throughout the redesign.&lt;/li&gt;
    &lt;li&gt;Spend a few hours trying to formulate my thoughts about how the first step affects layout. Should it have one big call to action for a primary use case? Are there multiple needs and products that need to addressed? What will the hierarchy be like? What gets the most attention? Flip through the aforementioned screenshots I take everyday and find 5 or 6 layouts I admire most. It might not be overall layouts, but particular elements I like.&lt;br/&gt;&lt;br/&gt;
        For example, these were some sites I had in mind when in the early stages of planning Notifo's layout. The key feature I liked from all these sites was strong header navigation. I always start with navigation, determine the primary call to action and accompanying graphic/illustration/video/et cetera. The rest seems to follow naturally.&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_inspiration_process.jpg" alt="Inspiration process"/&gt;&lt;/div&gt;




&lt;ul&gt;
    &lt;li&gt;The next step is either a few quick layout sketches with whatever I have on me &amp;mdash; either my trusty Cambridge notepad and uniball Super Ink pen or &lt;a href="http://www.uistencils.com/" title="UI Stencils"&gt;UI Stencils pad&lt;/a&gt; &amp;mdash; or straight to HTML/CSS. More often than not I start directly in HTML/CSS. This is a big point of contention for designers. There's a large camp of folks that  start with mockups or wireframes with Photoshop, Mockingbird/Balsamiq, OmniGraffle and so on, and those that begin in markup. The points for starting with the former are that it's easier to change things on the fly and you're more open to trying radical changes that would usually require substantial markup changes. Kyle Neath of GitHub prefers a mixture of both methods: screenshot stuff, cut it up and tweak in Photoshop, then implement.&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_design_mockups.jpg" alt="Design mockups"&gt;&lt;br/&gt;&lt;small&gt;Little known fact: the Ballmer peak phenomenon doesn't only apply to coding, it works with design too. That explains the two buck chuck.&lt;/small&gt;&lt;/div&gt;




&lt;ul&gt;    
    &lt;li&gt;I sketch 2 or 3 simple layout variants on a notepad, no more than 20 minutes, then go straight to markup. I setup Sass, import my mixins, a reset and get to work. Once a basic semblance of a website is up I actually do a lot of design tinkering in Chrome Dev Tools. I used to staunchly prefer Firebug but webkit and Chrome Dev Tools have &lt;a href="http://paulstamatiou.com/getting-to-know-webkit" title="Getting to Know WebKit"&gt;come a very long way&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;And then I take more screenshots of the Chrome Dev Tools-edited variations I like. I probably had 10 variations before I went with the one I liked for Notifo.&lt;/li&gt;
    &lt;li&gt;I tend to start with grayscale then tinker with color after I have the visual hierarchy down. I use &lt;a href="http://paulstamatiou.com/review-iconfactory-xscope" title="Review: Iconfactory xScope"&gt;xScope to help align anything and everything&lt;/a&gt;. It's perfect for quickly measuring space between elements (the red lines and measurements in the first image in this post is xScope).&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_notifo_wip_screenshot.jpg" alt="Notifo work in progress screenshot"/&gt;&lt;br/&gt;&lt;small&gt;One such work in progress/tinkering with chrome dev tools screenshot. I had just started to add color and texture to the header. Up until then it was all gray. Not really worrying about copy just yet.&lt;/small&gt;&lt;/div&gt;




&lt;ul&gt;
    &lt;li&gt;Color adjustments and typography tweaks usually continue through to the very last minute. I'm always experimenting to see what it would look like with other tones, hues and font stacks.&lt;/li&gt;
    &lt;li&gt;Most work up until now has been for the homepage. Mentally prepare a sort of style guide &amp;mdash; modules or patterns that will be used throughout the site. Classes to use for various sidebar elements, secondary navigation and so on. Update layout to work for content pages and style one-off pages like login, signup and a tour or benefits page. &lt;/li&gt;
    &lt;li&gt;Ask around for feedback and incorporate changes.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;For smaller sites like Pic A Fight I skip all this and just wing it in HTML/CSS. On the other hand sites like Skribit have several layouts &amp;mdash; i.e. the homepage structure was completely different to the structure used on logged-in user pages, so there's some extra work there.&lt;/p&gt;

&lt;h4&gt;Required Reading&lt;/h4&gt;


&lt;p&gt;While I could easily recommend many great design books, such as "&lt;a href="http://www.amazon.com/gp/product/1592535879/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1592535879&amp;tag=paulstamatiou-20"&gt;Universal Principles of Design&lt;/a&gt;" and Norman's classic "&lt;a href="http://www.amazon.com/gp/product/0465067107/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0465067107&amp;tag=paulstamatiou-20"&gt;The Design of Everyday Things&lt;/a&gt;", I'll start with some of what I consider to be the essentials for web and graphic design.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_further_reading.jpg" alt="Further reading"/&gt;&lt;br/&gt;&lt;small&gt;Coders that get stumped usually do something non-code related for a while and come back to see that the code gremlins have fixed their problem or going for a walk helped them think outside the box. Something similar applies for design. Keep your brain active by constantly seeking new sources of inspiration and creativity. I got a &lt;a href="http://www.amazon.com/gp/product/B002OOWC3S/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002OOWC3S&amp;tag=paulstamatiou-20" title="Wacom Bamboo Pen and Touch Small Tablet"&gt;Wacom tablet&lt;/a&gt; to doodle in Illustrator and found that helps with idea generation a bunch. Yes, this is a long caption.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;Read the &lt;strong&gt;&lt;a href="http://www.amazon.com/gp/product/0321534042/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321534042&amp;tag=paulstamatiou-20" title="Non-Designer's Design Book, The (3rd Edition) by Robin Williams"&gt;Non-Designer's Design Book&lt;/a&gt;&lt;/strong&gt; and learn about &lt;strong&gt;basic color theory and C.R.A.P.&lt;/strong&gt; &amp;mdash; Contrast, Repetition, Alignment and Proximity. Cool colors like blue recede while warm colors like orange seem to move toward the viewer.&lt;/p&gt;

&lt;p&gt;For example on Notifo I used a tint of orange and analogous colors for the foreground and call to action, respectively, with complementary blue as the background. Learn about color complements and analogous colors; they are used most often and absolutely come in handy when doing the most daunting task for new designers, picking colors.&lt;/p&gt;

&lt;p&gt;Mark Boulton's &lt;a href="http://fivesimplesteps.com/books/practical-guide-designing-for-the-web" title="A Practical Guide to Designing for the Web"&gt;A Practical Guide to Designing for the Web&lt;/a&gt; is fantastic. I purchased the PDF to help support Mark, but &lt;strong&gt;&lt;a href="http://designingfortheweb.co.uk/book/" title="Designing for the Web by Mark Boulton"&gt;a free online version is available&lt;/a&gt;&lt;/strong&gt; as well. There are some sections in the book about how to get started freelancing, business plan stuff, dealing with client briefs and so on, but you can skip that. You're already well on your way with your startup.&lt;/p&gt;

&lt;p&gt;If you were going to only go with one design book, this would be it. Mark &lt;strong&gt;covers it all&lt;/strong&gt;: type classification, typesetting, everything about color (with site examples), color as emotion, designing without color, using and not using grids, composition basics including lead room and movement&lt;sup&gt;1&lt;/sup&gt;. It makes for a fairly quick read. Knock it out on a lazy analog Sunday and achieve design enlightenment.&lt;/p&gt;

&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_elements_of_typographic_style.jpg" alt="Elements of typographic style"/&gt;&lt;br/&gt;&lt;small&gt;An old design class homework assignment of mine in Adobe InDesign. Reminds me of my PageMaker 6.0 days on high school yearbook staff.&lt;/small&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;The Elements of Typographic Style&lt;/strong&gt; by Robert Bringhurst is widely considered to be one of the great works discussing typography but it is mainly concerned with print. Fortunately Richard Rutter and Steve Marshall have adapted Bringhurt's work vis-a-vis the web. &lt;a href="http://webtypography.net/toc/" title="The Elements of Typographic Style Applied to the Web"&gt;The Elements of Typographic Style Applied to the Web&lt;/a&gt; is a great foundation in typography for the web, including various CSS snippets throughout. For example, never use &lt;code class="inline"&gt;line-height&lt;/code&gt; with absolute units as that can actually result in negative leading on browser font-size increases. Use a unit-less value&lt;sup&gt;2&lt;/sup&gt; greater than 1.4 to keep leading proportional to text size.&lt;/p&gt;

&lt;h4&gt;More Homework&lt;/h4&gt;


&lt;p&gt;
&lt;strong&gt;Get a Typekit account&lt;/strong&gt; and rigorously browse through fonts. Take note of their organization structure. Learn about font stacks. Try out some fonts on a site of yours. Make sure you &lt;a href="http://blog.typekit.com/2011/03/24/type-study-choosing-fallback-fonts/" title="Type study: Choosing fallback fonts - typekit"&gt;set fallback fonts&lt;/a&gt;. Experiment. Learn about &lt;a href="http://letteringjs.com/" title="Lettering.js - A jQuery plugin for radical web typography"&gt;lettering.js&lt;/a&gt;. Aim for contrast while avoiding conflict. Play with font size, weight, structure, form, direction and color. Typography is easily one of the most overlooked aspects of design for new web designers. It makes a huge difference and is worth exploring. &lt;a href="http://www.cameronmoll.com/archives/001266.html" title="Nine skills that separate good and great designers"&gt;Great designers treat text as UI&lt;/a&gt; has always been Cameron Moll's mantra.&lt;/p&gt;

&lt;blockquote&gt;A design is in conflict when you set two or more typefaces on the same page that are &lt;em&gt;similar&lt;/em&gt; &amp;mdash; not really different and not really the same. [...] When you put two faces together that look too much alike without really being so, most of the time it looks like a mistake. &lt;em&gt;The problem is in the similarities&lt;/em&gt; because the similarities conflict.&lt;br/&gt;Robin Williams, The Non-Designer's Design Book&lt;/blockquote&gt;


&lt;p&gt;Briefly read up on the &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Principles_of_grouping" title="Gestalt Principles of Grouping"&gt;Gestalt Principles&lt;/a&gt;&lt;/strong&gt; as they refer to user interface design: proximity, similarity, good continuation, closure, common fate, past experience, figure &amp;amp; ground. And &lt;a href="http://particletree.com/features/visualizing-fittss-law/" title=""&gt;Fitts' Law&lt;/a&gt; too. Then find out &lt;a href="http://www.userintelligence.com/ideas/blog/2011/04/meaning-user-experience" title="The Meaning of User Experience"&gt;what UX really means&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;But Stammy, we launch in one week!!?!111&lt;/h4&gt;


&lt;p&gt;Yikes. In that case, here are a few pointers:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Nothing in this list matters if you have shitty marketing copy. Run your copy through a fine-tooth comb. Then do it again. Sell people on benefits, not features. How long has your site/service/app been around? Will you be around in a year? Tell me about your team (I want an about page with mugshots! &lt;sup&gt;3&lt;/sup&gt;). Who are your current customers and how do they use it? How can I trust you with my info? Can you share any interesting usage/et cetera numbers?&lt;/li&gt;
    &lt;li&gt;Buy a nice set of icons and use sparingly. If I see yet another site using Silk icon's I'm going to go crazy. Try &lt;a href="http://picons.me/"&gt;Picons&lt;/a&gt;, &lt;a href="http://pictos.drewwilson.com/"&gt;Pictos&lt;/a&gt; or &lt;a href="http://helveticons.ch/"&gt;Helveticons&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Everything that can be clicked needs to have a hover state and preferably an action state as well. Feedback is important in good interface design. &lt;strong&gt;L&lt;/strong&gt;o&lt;strong&gt;V&lt;/strong&gt;e &lt;strong&gt;H&lt;/strong&gt;&lt;strong&gt;A&lt;/strong&gt;te: link, visited, hover, active&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="center"&gt;&lt;img src="http://turbo.paulstamatiou.com/uploads/2011/04/pstam_twitter_btn_states.jpg" alt="Twitter btn states"/&gt;&lt;br/&gt;&lt;small&gt;A button I added two states to for Skribit's (my first startup) Twitter integration.. feedback galore!&lt;/small&gt;&lt;/div&gt;




&lt;ul&gt;
    &lt;li&gt;If it can be aligned, it should be aligned.&lt;/li&gt;
    &lt;li&gt;When selecting colors for gradients in Photoshop, keep in mind that adding black (shade) or white (tint) to a hue (pure color) desaturates it. Not always a bad thing per se but it often makes for some muddled colors. Spice it up by trying different blend modes.&lt;/li&gt;
    &lt;li&gt;Use complementary or analogous colors to start and don't have more than 2 dominant colors. There are many exceptions to this when you get better. For now, find some palettes on &lt;a href="http://www.colourlovers.com/" title="Colourlovers"&gt;ColourLovers&lt;/a&gt; or pick tints/shades from &lt;a href="http://0to255.com" title="0to255 is a simple tool that helps web designers find variations of any color."&gt;0to255&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Textures!&lt;/strong&gt; Download &lt;a href="http://tileabl.es/" title="Tileables - never ending patterns"&gt;tileables&lt;/a&gt; or make your own grain, fabric or other such texture and use as a transparent, repeating background for large elements that would otherwise just be solid colors. But keep it subtle! The texture should only be perceivable when looking closely, not when 3 feet away from the computer. Also make sure that your texture goes with the theme of your design. A rust texture doesn't play too well with your futuristic iPhone app landing page. That can conjure up some cognitive dissonance. Your app is telling me it's the new hotness while your rust background texture is telling me it's old and busted&lt;sup&gt;4&lt;/sup&gt;. Similar issues can arise with picking fonts that don't go with the mood of your site.&lt;/li&gt;
    &lt;li&gt;"Always adjust opacity. Nothing is totally black or white, dark or bright. A semi-transparent black or white line, glow, shadow or shape goes a long way." -&lt;a href="http://flyosity.com/tutorial/crafting-subtle-realistic-user-interfaces.php" title="Crafting Subtle &amp; Realistic User Interfaces"&gt;Mike Rundle&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Put non-essential links (anything that doesn't help new user signup conversion) in the footer. That's the first place users go when they know what they're looking for. Regulars in the footer include a link to a contact page, about, blog, and sometimes sitemap. Available yet out of the way.&lt;/li&gt;
    &lt;li&gt;Plain edges are boring. Add a subtle 1px inner line slightly lighter than the background if dark. Use rgba(255,255,255, [value from 0-1]).&lt;/li&gt;
    &lt;li&gt;Not quite sure how to style a particular element? Browse through &lt;a href="http://ui-patterns.com/" title="User Interface Design Pattern Library"&gt;UI-Patterns&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;More white space. A good rule of thumb is that your padding and margin should be roughly equivalent to the font size used near that element.&lt;/li&gt;
    &lt;li&gt;Do you have a definitive call to action on your homepage?&lt;/li&gt;
    &lt;li&gt;Aid gestalt proximity and closure by grouping related items together with light bounding boxes or borders.&lt;/li&gt;
    &lt;li&gt;Have a long list of elements? Zebra-ify them and use alternating and &lt;em&gt;subtle&lt;/em&gt; background colors.&lt;/li&gt;
    &lt;li&gt;Putting padding on your form inputs! Tooltips or extra description for non-standard fields. Style &lt;code class="inline"&gt;:focus&lt;/code&gt; too.&lt;/li&gt;
    &lt;li&gt;Avoid having more than three levels of boxes inside of boxes &amp;mdash; especially if they all have drop shadow and borders, they tend to make a bad effect on the bottom when you see 3 chunks of lines.&lt;/li&gt;
    &lt;li&gt;Is the largest element or headline on your homepage the most important thing? Make sure that's what you want them to see first.&lt;/li&gt;
    &lt;li&gt;Finally, you don't have to fill up all of your available space!&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;And if you have an extra minute to spare before launch, setup &lt;strong&gt;&lt;a href="http://www.optimizely.com/" title="Optimizely - improve your website through A/B testing."&gt;Optimizely&lt;/a&gt;&lt;/strong&gt;&lt;sup&gt;5&lt;/sup&gt;. Start playing with some simple A/B testing on your homepage. Yeah I know A/B testing sounds scary at first. Optimizely makes it easy, just give it a shot.&lt;/p&gt;

&lt;h4&gt;Try New Things&lt;/h4&gt;


&lt;p&gt;While it's not quite the best strategy for my inbox, whenever I see a new site or service launching I readily toss in my email so I can be sure to tinker with it first thing when it comes out. I get to experience new layouts, designs and good UX almost every week by doing this. My co-founder, Chad, is the same way when a new API comes out and must tinker with it.&lt;/p&gt;

&lt;p&gt;Most of what I described in this post is about &lt;strong&gt;design, not user experience&lt;/strong&gt; or usability. Your site can be sexy and pixel perfect but if the flow for a user to complete a specified task is unintuitive and requires too many steps, it makes for a poor experience. Likewise well-researched information architecture (layman's: the organization and labeling of your site's sections and pages) is crucial. UX is a field I'm just diving into. Check back in 10 years for my definitive UX how to guide. Probably best if you &lt;a href="http://feeds.feedburner.com/paulstamatiou" title="Paul Stamatiou"&gt;subscribe&lt;/a&gt;. :)&lt;/p&gt;

&lt;p&gt;In the meantime, checkout &lt;strong&gt;&lt;a href="http://52weeksofux.com/" title="52 Weeks of UX"&gt;52 Weeks of UX&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;More books..&lt;/h4&gt;


&lt;p&gt;For those that want a massive list of good design reading, indulge below. I've only read or skimmed through about half and heard good things about the rest. You'll probably want to start with Steve Krug's work. Much of the rest is not quite geared for the web but helps paint a bigger picture about design as whole.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/Envisioning-Information-Edward-R-Tufte/dp/0961392118/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222716&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;Envisioning Information&lt;/a&gt; by Edward Tufte&lt;br/&gt;
&lt;a href="http://www.amazon.com/gp/product/0321683684/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321683684&amp;tag=paulstamatiou-20"&gt;The Elements of User Experience&lt;/a&gt; by Jesse James Garrett&lt;br/&gt;
&lt;a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1302222422&amp;sr=8-3&amp;tag=paulstamatiou-20"&gt;Don't Make Me Think&lt;/a&gt; by Steve Krug&lt;br/&gt;
&lt;a href="http://www.amazon.com/Rocket-Surgery-Made-Easy-Yourself/dp/0321657292/ref=pd_bxgy_b_img_b&amp;tag=paulstamatiou-20"&gt;Rocket Surgery Made Easy&lt;/a&gt; by Steve Krug&lt;br/&gt;
&lt;a href="http://www.amazon.com/User-Interface-Design-Programmers-Spolsky/dp/1893115941/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222505&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;User Interface Design for Programmers&lt;/a&gt; by Joel Spolsky&lt;br/&gt;
&lt;a href="http://www.amazon.com/Designing-Interfaces-Patterns-Effective-Interaction/dp/0596008031/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222526&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;Designing Interfaces: Patterns for Effective Interaction Design&lt;/a&gt; by Jenifer Tidwell&lt;br/&gt;
&lt;a href="http://www.amazon.com/Nature-Aesthetics-Design-David-Pye/dp/0713652861/ref=pd_bxgy_b_text_b&amp;tag=paulstamatiou-20"&gt;The Nature &amp;amp; Aesthetics of Design&lt;/a&gt; by David Pye&lt;br/&gt;
&lt;a href="http://www.amazon.com/Designing-Digital-Age-Human-Centered-Products/dp/0470229101/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302240617&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;Designing for the Digital Age: How to Create Human-Centered Products and Services&lt;/a&gt; by Kim Goodwin&lt;br/&gt;
&lt;a href="http://www.amazon.com/Humane-Interface-Directions-Designing-Interactive/dp/0201379376/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222607&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;The Humane Interface: New Directions for Designing Interactive Systems&lt;/a&gt; by Jef Raskin&lt;br/&gt;
&lt;a href="http://www.amazon.com/Inmates-Are-Running-Asylum-Products/dp/0672326140/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222641&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity&lt;/a&gt; by Alan Cooper&lt;br/&gt;
&lt;a href="http://www.amazon.com/About-Face-Essentials-Interaction-Design/dp/0470084111/ref=pd_sim_b_1&amp;tag=paulstamatiou-20"&gt;About Face 3: The Essentials of Interaction Design&lt;/a&gt; by Alan Cooper&lt;br/&gt;
&lt;a href="https://shop.smashingmagazine.com/smashing-book-2-intl.html"&gt;The Smashing Book&lt;/a&gt; by Smashing Magazine&lt;br/&gt;
&lt;a href="http://www.amazon.com/Web-Designers-Idea-Book-Vol/dp/160061972X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1302222562&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;The Web Designer's Idea Book #2&lt;/a&gt; by Patrick McNeil (great for inspiration)&lt;br/&gt;
&lt;a href="http://www.amazon.com/Designing-Interactions-Bill-Moggridge/dp/0262134748/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222693&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;Designing Interactions&lt;/a&gt; by Bill Moggridge&lt;br/&gt;
&lt;a href="http://www.amazon.com/Information-Design-Handbook-Visocky-OGrady/dp/160061048X/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222743&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;The Information Design Handbook&lt;/a&gt; by Jenn Visocky O'Grady&lt;br/&gt;
&lt;a href="http://www.amazon.com/Change-Design-Transforms-Organizations-Innovation/dp/0061766089/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222757&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;Change by Design: How Design Thinking Transforms Organizations and Inspires Innovation&lt;/a&gt; by Tim Brown&lt;br/&gt;
&lt;a href="http://www.amazon.com/Art-Innovation-Lessons-Creativity-Americas/dp/0385499841/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1302222783&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;The Art of Innovation Lessons in Creativity from IDEO, America's Leading Design Firm&lt;/a&gt; by Tom Kelley&lt;br/&gt;
&lt;a href="http://www.amazon.com/Thoughtless-Acts-Observations-Intuitive-Design/dp/0811847756/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1302222862&amp;sr=1-1&amp;tag=paulstamatiou-20"&gt;Thoughtless Acts?: Observations on Intuitive Design&lt;/a&gt; by Jane Fulton Suri and Ideo&lt;br/&gt;&lt;/p&gt;

&lt;h4&gt;Thoughts?&lt;/h4&gt;


&lt;p&gt;Drop me a comment below. This post was very much a raw brain dump. There are many facets to design, especially ones I admittedly have no clue about and am learning, that I couldn't get much deeper than this without making it a 10 part series. Chad says I should. Maybe I will after my secret redesign and UX challenge starting this month. Thanks for reading.&lt;/p&gt;

&lt;h4&gt;Footnotes&lt;/h4&gt;


&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; I can't stress enough how important this is! I very much dislike when sites have screenshots facing or angled the wrong direction. The subject of any photo or image can draw the reader where to look next.&lt;br/&gt;
&lt;sup&gt;2&lt;/sup&gt; Aside from z-index, line-height is the only CSS property that can go unit-less&lt;br/&gt;
&lt;sup&gt;3&lt;/sup&gt; I want to know you and your company's story. This is a chance to make an emotional connection with the prospective customer. Lure them in so you don't have to waste your time with &lt;em&gt;I N C E P T I O N&lt;/em&gt; later! Win.&lt;br/&gt;
&lt;sup&gt;4&lt;/sup&gt; MIB reference for 1000 Trebek. Did you know they're filming MIB 3? Crazy.&lt;br/&gt;
&lt;sup&gt;5&lt;/sup&gt; Full disclosure: Pete, who you can read about from the Optimizely about page (see footnote &lt;sup&gt;3&lt;/sup&gt;), once bought me  a grande iced tea at a Starbucks on Van Ness.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;Disclosure: some book links use my Amazon associates code because I'm broke as a joke.&lt;/small&gt;&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/startup-web-design-ux-crash-course" title="Crash Course: Design for Startups"&gt;Crash Course: Design for Startups&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Lwy7T6kS41U:pWiIlkhAYOY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Lwy7T6kS41U:pWiIlkhAYOY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Lwy7T6kS41U:pWiIlkhAYOY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Lwy7T6kS41U:pWiIlkhAYOY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Lwy7T6kS41U:pWiIlkhAYOY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Lwy7T6kS41U:pWiIlkhAYOY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=Lwy7T6kS41U:pWiIlkhAYOY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=Lwy7T6kS41U:pWiIlkhAYOY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/Lwy7T6kS41U" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/startup-web-design-ux-crash-course</feedburner:origLink></entry>
	
	<entry>
		<title>Ultimate SEO Guide to Duplicate Content</title>
		<link href="http://feedproxy.google.com/~r/paulstamatiou/~3/cDxo1Z39gt8/duplicate-content-seo-guide" />
		<updated>2011-04-06T17:24:58-07:00</updated>
		<id>http://paulstamatiou.com/duplicate-content-seo-guide</id>
		<content type="html">&lt;p&gt;David Whitehouse has a &lt;a href="http://www.david-whitehouse.org/blog/duplicate-content/" title="The Ultimate Guide to Duplicate Content"&gt;great SEO guide talking about how to deal with duplicate content&lt;/a&gt; on your site. I consider this a must read for anyone that deals with websites and online publishing. Anyone who knows me knows that I'm anal about duplicate content and will preach about 301s and canonical URLs until the end of time.&lt;/p&gt;

&lt;p&gt;In a nutshell: no particular public resource, article or page on your website should be accessible via more than one unique URL. Make sure your site 301's to either www or no-www, pick one and stick with it. I love no-www. Unless you have to use an Amazon load balancer that requires www, then no-www should also be your pick.&lt;/p&gt;

&lt;p&gt;David's post goes into more detail so there's no point for me to rehash it here. Do yourself a huge favor and make sure you abide by these best practices.&lt;/p&gt;

&lt;p&gt;And while I'm on the subject of SEO, I thought I should mention that my friend Evan Bailyn just published a book: &lt;a href="http://www.amazon.com/gp/product/0789741032/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0789741032&amp;tag=paulstamatiou-20" title="Outsmarting Google: SEO Secrets to Winning New Business"&gt;Outsmarting Google: SEO Secrets to Winning New Business&lt;/a&gt;. I received my copy today but have yet to read through it. Between that, Gary Vaynerchuk's &lt;a href="http://www.amazon.com/gp/product/0061914185/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0061914185&amp;tag=paulstamatiou-20" title="The Thank You Economy"&gt;The Thank You Economy&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/0143036971/ref=as_li_ss_tl?ie=UTF8&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0143036971&amp;tag=paulstamatiou-20" title="Bargaining for Advantage: Negotiation Strategies for Reasonable People 2nd Edition"&gt;Bargaining for Advantage&lt;/a&gt; and some design books, I have lots of reading (and not enough time) cut out for me.&lt;/p&gt;
&lt;br/&gt;&lt;strong&gt;Enjoy this post? Click through and leave a comment. It will make my day.&lt;/strong&gt; &lt;a href="http://paulstamatiou.com/duplicate-content-seo-guide" title="Ultimate SEO Guide to Duplicate Content"&gt;Ultimate SEO Guide to Duplicate Content&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=cDxo1Z39gt8:dM9-cexUSUQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=cDxo1Z39gt8:dM9-cexUSUQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=cDxo1Z39gt8:dM9-cexUSUQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=cDxo1Z39gt8:dM9-cexUSUQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=cDxo1Z39gt8:dM9-cexUSUQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=cDxo1Z39gt8:dM9-cexUSUQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/paulstamatiou?a=cDxo1Z39gt8:dM9-cexUSUQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/paulstamatiou?i=cDxo1Z39gt8:dM9-cexUSUQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/paulstamatiou/~4/cDxo1Z39gt8" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://paulstamatiou.com/duplicate-content-seo-guide</feedburner:origLink></entry>
	
</feed>
