<?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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

  <title><![CDATA[Mike Fowler]]></title>
  
  <link href="http://mikefowler.me/" />
  <updated>2013-01-10T08:00:00+00:00</updated>
  <id>http://mikefowler.me/</id>
  <author>
    <name><![CDATA[Mike Fowler]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MikeFowler" /><feedburner:info uri="mikefowler" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>44.484038</geo:lat><geo:long>-73.221265</geo:long><entry><title type="text">Links for 2013-01-09 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MikeFowler/~3/7UVmCACN-iA/mikefowler" /><updated>2013-01-10T00:00:00-08:00</updated><id>http://del.icio.us/mikefowler#2013-01-09</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.webmonkey.com/2013/01/simplify-responsive-design-by-embracing-the-flexible-nature-of-the-web/"&gt;Simplify Responsive Design by Embracing the Flexible Nature of the Web | Webmonkey | Wired.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/7UVmCACN-iA" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/mikefowler#2013-01-09</feedburner:origLink></entry><entry><title type="text">Links for 2013-01-02 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MikeFowler/~3/cm1cB2r04K8/mikefowler" /><updated>2013-01-03T00:00:00-08:00</updated><id>http://del.icio.us/mikefowler#2013-01-02</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.regexper.com/"&gt;Regexper&lt;/a&gt;&lt;br/&gt;
Visualizes RegEx expressions. Damn cool.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/cm1cB2r04K8" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/mikefowler#2013-01-02</feedburner:origLink></entry><entry>
    <title type="html"><![CDATA[A New Frontier in 2013]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/sz59XWkEPPE/a-new-frontier-in-2013" />
    <updated>2013-01-01T12:39:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/a-new-frontier-in-2013</id>
    <content type="html">&lt;p&gt;It&amp;#8217;s been a time since I last blogged, and during that time much has happened.&lt;!-- more --&gt; Within the last two months, I moved my life &lt;a href="http://mikefowler.me/thoughts/onward-westward"&gt;across the country&lt;/a&gt;; started working at &lt;a href="http://findery.com"&gt;Findery&lt;/a&gt;; stumbled upon another vegan developer, &lt;a href="http://jimwhimpey.com"&gt;Jim Whimpey&lt;/a&gt;, on the internet and found an apartment with him; joined a new rock gym, &lt;a href="http://www.touchstoneclimbing.com/mission-cliffs"&gt;Mission Cliffs&lt;/a&gt;; survived the apocalypse; and became an everyday commuter on &lt;a href="http://en.wikipedia.org/wiki/The_Wiggle"&gt;The Wiggle&lt;/a&gt;. And in the midst of all this happening, I still managed to dip my toes into the ocean of things to explore that a new city provides.&lt;/p&gt;

&lt;p&gt;And so begins my first year on the western frontier. Surrounded by thousands upon thousands of people who do what I do, where creativity and innovation seeps from manholes and rains from the sky. And while this may be a hyperbole, it is so only by a little. I&amp;#8217;ve come away from networking and industry events having met a dozen people at a time who are working on their version of the Next Big Thing, having either quit their jobs entirely to dedicate themselves to their dream or simply continued their normal work and elected to spend each other waking moment on their project.&lt;/p&gt;

&lt;p&gt;The immediate reaction of a young creative in this city: how can you possibly distinguish yourself in an environment like this, so saturated with smart, hard-working people? But it truly is only that, an immediate reaction, for the overwhelming sense is one of being energized by the collective drive of a city whose veins pulse with innovation and creativity. I must remind myself that, after all, &lt;em&gt;this is why I moved here&lt;/em&gt;. This culture and community will push me, as much as I will push myself, to do better work.&lt;/p&gt;

&lt;h2&gt;Let&amp;#8217;s Make People Smile&lt;/h2&gt;

&lt;p&gt;Looking back at my &lt;a href="http://mikefowler.me/thoughts/professional-goals-for-2012/"&gt;beginning-of-the-year post from 2012&lt;/a&gt;, my goals were different because many were driven by being in a smaller developer community in Burlington. Speaking at events is certainly going to carry over, but my goals for 2013 are mostly different, and more focused on personal growth. In lieu of leaving a bulleted list in this post to potentially stare me in the face for the remainder of my career, I will deliver my goals for 2013 as a concept:&lt;/p&gt;

&lt;p&gt;I want to create things that elicit an emotional response. At my new job, I get to help build just such a thing every day. Therefore, I will do similar in my side projects. By &amp;#8220;eliciting an emotional response&amp;#8221;, what I actually refer to here might mean anything from inspiring somebody, to making somebody smile, to actually helping create lasting value for a person.&lt;/p&gt;

&lt;p&gt;Last month myself and the rest of our team at Findery got to sit down and chat with &lt;a href="http://www.twitter.com/ev"&gt;Evan Williams&lt;/a&gt; for a bit. One of the concepts he mentioned while talking with us was that of internet &amp;#8220;snack food&amp;#8221;: products that don&amp;#8217;t creating lasting value, but satisfy our need for instant gratification and positive reinforcement. That was my takeaway, at least. But the more I&amp;#8217;ve thought about it, the more I realize how spot-on that analogy is. And more than ever it has inspired me to distance myself from creating things that aren&amp;#8217;t going to create real value.&lt;/p&gt;

&lt;h2&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;In 2013, I will not be creating snack foods.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=sz59XWkEPPE:EILBgYo3WrY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=sz59XWkEPPE:EILBgYo3WrY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=sz59XWkEPPE:EILBgYo3WrY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/sz59XWkEPPE" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/a-new-frontier-in-2013</feedburner:origLink></entry>
  
  <entry><title type="text">Links for 2012-12-21 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MikeFowler/~3/dSanuDHNU40/mikefowler" /><updated>2012-12-22T00:00:00-08:00</updated><id>http://del.icio.us/mikefowler#2012-12-21</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sandofsky.com/blog/git-workflow.html"&gt;Understanding the Git Workflow&lt;/a&gt;&lt;br/&gt;
For somebody like myself, whose understanding of Git is fairly basic, this is a good outline of a workflow that leads to cleaner commit histories in master branches. Useful for teams doing a lot of one-off feature branches.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://remysharp.com/2012/12/21/my-workflow-never-having-to-leave-devtools/"&gt;My Workflow: Never having to leave DevTools&lt;/a&gt;&lt;br/&gt;
Editing files in browser and saving changes to the local source... pretty neat for small tweaking, but I can't imagine not having a fully functional editor for major development.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/dSanuDHNU40" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/mikefowler#2012-12-21</feedburner:origLink></entry><entry><title type="text">Links for 2012-10-22 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MikeFowler/~3/uxu57EEV3ag/mikefowler" /><updated>2012-10-23T00:00:00-07:00</updated><id>http://del.icio.us/mikefowler#2012-10-22</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://cb.vu/unixtoolbox.xhtml"&gt;Unix Toolbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/uxu57EEV3ag" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/mikefowler#2012-10-22</feedburner:origLink></entry><entry><title type="text">Links for 2012-10-18 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MikeFowler/~3/RYks4Hfy1k8/mikefowler" /><updated>2012-10-19T00:00:00-07:00</updated><id>http://del.icio.us/mikefowler#2012-10-18</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://addyosmani.com/largescalejavascript/"&gt;Patterns For Large-Scale JavaScript Application Architecture&lt;/a&gt;&lt;br/&gt;
A solid overview of a possible architecture for large-scale JavaScript applications with code examples and design pattern descriptions.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/RYks4Hfy1k8" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/mikefowler#2012-10-18</feedburner:origLink></entry><entry><title type="text">Links for 2012-10-16 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MikeFowler/~3/VyBIkyPPXTc/mikefowler" /><updated>2012-10-17T00:00:00-07:00</updated><id>http://del.icio.us/mikefowler#2012-10-16</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://norbauer.com/notebooks/code/notes/ls-colors-and-terminal-app"&gt;ls, colors, and Terminal.app&lt;/a&gt;&lt;br/&gt;
Solid documentation of how to customize 'ls' output colors in Terminal.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/VyBIkyPPXTc" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/mikefowler#2012-10-16</feedburner:origLink></entry><entry>
    <title type="html"><![CDATA[Onward. Westward.]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/XSjZVqOKXT0/onward-westward" />
    <updated>2012-10-15T03:09:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/onward-westward</id>
    <content type="html">&lt;p&gt;In only four weeks I will be both living and working in a new place. Sure, I&amp;#8217;ve made these changes before: new job, new apartment. But this is different, because both of these new places are further than across town.&lt;!-- more --&gt; They&amp;#8217;re further than across the border into another familiar New England state and further even than a long drive to Philadelphia or a short plane ride to Chicago.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In four weeks I will be living and working in San Francisco.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t mean to be dramatic in my writing when I say this, but this is the most radical thing I&amp;#8217;ve ever done in my life. And yet&amp;#8230; I feel oddly at ease. My excitement has been repressed in a sense because of the myriad of details that must be attended to: wrap up things at work, get rid of things I don&amp;#8217;t &lt;em&gt;need&lt;/em&gt; to bring across the country, find somebody to sublet my room, and so on and so forth. But beyond that I still sense it&amp;#8230; an unexpected calmness that says: &amp;#8220;You need this. And you will be great&amp;#8221;.&lt;/p&gt;

&lt;h2&gt;Findery, here I come!&lt;/h2&gt;

&lt;p&gt;Today I can officially annouce that I will be accepting a position to join &lt;a href="http://findery.com"&gt;the team at Findery&lt;/a&gt; and start working on a product that, while I&amp;#8217;ve only been using it for a week or two now, I adore. Findery (for me, anyhow) is all about sharing experiences we&amp;#8217;ve had at specific places, or as the tagline explains, &amp;#8220;Findery makes places come alive&amp;#8221;. But that&amp;#8217;s what is really great, don&amp;#8217;t you think? That&amp;#8217;s what Findery is about &lt;em&gt;for me&lt;/em&gt;. Having chatted with the team (and some actual users) at the Findery open house last week, I can tell that the ways people will use Findery are going to be vast and varied.&lt;/p&gt;

&lt;h2&gt;To the West&lt;/h2&gt;

&lt;p&gt;Of course, the other half of this story is the move across the country to a brand new city, and it should not go understated. &amp;#8220;Why San Francisco?&amp;#8221;, I&amp;#8217;ve already been asked. Sure, it has &lt;a href="http://www.intellicast.com/Local/Weather.aspx?location=USCA0987"&gt;really nice weather&lt;/a&gt;, and a decent vegan culture, and a TON of cool things happening, but the initial decision transcended those aspects. The reason I can&amp;#8217;t wait to be in San Francisco is that I long to be &lt;em&gt;surrounded&lt;/em&gt; by people working tirelessly to make incredible things with technology. Things that will change lives. Things that will influence others. Things that will bring a smile to the face of millions, or even just one, person.&lt;/p&gt;

&lt;p&gt;It goes without saying that the developer culture in San Francisco is strong, and the prospect of continually meeting and working with people who are as passionate about work and creation as I am is extremely attractive to me. Whether it&amp;#8217;s code meetups, conferences or casual encounters, I&amp;#8217;m ready to expand my network of influential human beings.&lt;/p&gt;

&lt;h2&gt;Stay Weird, Vermont&lt;/h2&gt;

&lt;p&gt;Vermont isn&amp;#8217;t going anywhere. Nor is the New England I was raised in and all of its eccentricities. If or when I decide to venture back to the East Coast, I expect I&amp;#8217;ll find the culture of people much the same, and there is something mildly comforting in that. The culture of Vermont has truly molded me over the past six years, both spiritually and philosophically (&lt;em&gt;and maybe physically, Mike thinks as he trims his beard and dons flannel&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;But, for now at least, that isn&amp;#8217;t quite enough for me. I need fast-paced and influential and inspiring and transformative and informative! I need life! Making this move puts me out of my comfort zone in so many aspects &lt;em&gt;and I love that&lt;/em&gt;. For better or for worse (with a much stronger sense of &amp;#8220;better&amp;#8221;), I dive into the unknown.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Make way for magic! Make way for objective mysteries! Make way for love!&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;&lt;small&gt;The photo in the header was taken by &lt;a href="http://www.flickr.com/photos/photographerglen/5921505130/lightbox/"&gt;Flickr user photographerglen&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=XSjZVqOKXT0:Xxx4afAIy7U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=XSjZVqOKXT0:Xxx4afAIy7U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=XSjZVqOKXT0:Xxx4afAIy7U:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/XSjZVqOKXT0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/onward-westward</feedburner:origLink></entry>
  
  <entry><title type="text">Links for 2012-10-02 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MikeFowler/~3/8C0p7nVwRSE/mikefowler" /><updated>2012-10-03T00:00:00-07:00</updated><id>http://del.icio.us/mikefowler#2012-10-02</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/mo-pixels-mo-problems/"&gt;A List Apart: Articles: Mo&amp;rsquo; Pixels Mo&amp;rsquo; Problems&lt;/a&gt;&lt;br/&gt;
Dave Rupert gives a great overview of a (currently) ideal set of rules for progressively enhancing images and reminds us, above all, to use our heads when working with this stuff.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/8C0p7nVwRSE" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/mikefowler#2012-10-02</feedburner:origLink></entry><entry>
    <title type="html"><![CDATA[Crafting Scalable Stylesheets]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/5f6J-p4INbY/crafting-scalable-stylesheets" />
    <updated>2012-09-22T16:13:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/crafting-scalable-stylesheets</id>
    <content type="html">&lt;p&gt;Linked below is my slide deck from the talk I gave today at &lt;a href="http://vtcodecamp.org"&gt;VTCodeCamp&lt;/a&gt;. I spoke on some ways that Sass and Compass can help create more maintainable and scalable systems. I had a great time presenting and for everybody that made it to my talk: thanks for swinging by.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://speakerdeck.com/u/mikefowler/p/crafting-scalable-stylesheets"&gt;&amp;#8220;Crafting Scalable Stylesheets&amp;#8221; on Speaker Deck&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=5f6J-p4INbY:5iFHpCGgciY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=5f6J-p4INbY:5iFHpCGgciY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=5f6J-p4INbY:5iFHpCGgciY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/5f6J-p4INbY" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/crafting-scalable-stylesheets</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[An Early Look at CSS3 Conditional Rules]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/c4hdFI2irAI/an-early-look-at-css3-conditional-rules" />
    <updated>2012-08-21T08:38:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/an-early-look-at-css3-conditional-rules</id>
    <content type="html">&lt;p&gt;In a &lt;a href="http://shoptalkshow.com/episodes/029-with-tab-atkins/"&gt;recent episode of Shop Talk Show&lt;/a&gt;, Tab Atkins briefly mentioned a draft of a spec that includes feature querying in CSS. &lt;!-- more --&gt;The feature, &lt;code&gt;@supports&lt;/code&gt;, is part of the &amp;#8221;&lt;a href="http://dev.w3.org/csswg/css3-conditional/"&gt;CSS Conditional Rules&lt;/a&gt;&amp;#8221; module, and while the working draft has existed since September of 2011, it was my first time hearing about this proposal. Bear in mind, nothing about this spec is even close to final, and the editors draft specifically mentions that the &lt;code&gt;@supports&lt;/code&gt; rule is at risk.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;@supports&lt;/code&gt; rule will allow us to test whether a user&amp;#8217;s browser supports a given CSS &amp;#8216;property: value&amp;#8217; pair. The use of &lt;code&gt;@supports&lt;/code&gt; is similar to the way that we currently pass a block of content into the &lt;code&gt;@media&lt;/code&gt; rule to be executed only if the proper conditions are met. In addition to being able to test for a positive result (the browser DOES support the given &amp;#8220;property:value&amp;#8221; pair), we will also be able to test if a given &amp;#8220;property: value&amp;#8221; pair is NOT supported by the browser.&lt;/p&gt;

&lt;h2&gt;Current State of Feature Detection&lt;/h2&gt;

&lt;p&gt;Presently, a lot of us are using Modernizr to handle any CSS feature detection we may need to do. The amount of functionality covered in the Modernizr test suite is now so comprehensive that, for me at least, it has become the de facto library if I need to test for a feature. The production build tool they provide makes it painless to create your library initially and then add additional tests later. To facilitate using feature detects in stylesheets, Modernizr adds classes to the root &lt;code&gt;html&lt;/code&gt; tag indicating support (like &lt;code&gt;class="touch"&lt;/code&gt;) or the lack thereof (such as &lt;code&gt;class="no-touch"&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;A major difference here is that Modernizr also adds test results to an object in the global JS namespace. While there isn&amp;#8217;t much practical use for executing JavaScript based on the support of a CSS property, this functionality is crucial if you want to load JS-based polyfill libraries based on the &lt;strong&gt;lack&lt;/strong&gt; of support for a CSS property. I don&amp;#8217;t know enough about spec writing to know if a spec like this one implies a JavaScript counterpart (document.supports?), but obviously we would not be able to load polyfills with CSS-based feature detecting alone, and sometimes fallback rules just aren&amp;#8217;t enough.&lt;/p&gt;

&lt;h2&gt;At-Supports Rule in Action (Theoretically)&lt;/h2&gt;

&lt;p&gt;Before reading these examples, note again that this spec is in flux, and furthermore &lt;strong&gt;no browsers have implemented this&lt;/strong&gt;. These examples are pulled from the current version of the editor&amp;#8217;s draft, linked above. In our example, let us say we are testing support for flexbox. We want to specify some rules to apply if the browser supports the property, but we also want to be able to specify fallbacks in case the user agent does &lt;strong&gt;not&lt;/strong&gt; support flexbox.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;span class='line-number'&gt;12&lt;/span&gt;
&lt;span class='line-number'&gt;13&lt;/span&gt;
&lt;span class='line-number'&gt;14&lt;/span&gt;
&lt;span class='line-number'&gt;15&lt;/span&gt;
&lt;span class='line-number'&gt;16&lt;/span&gt;
&lt;span class='line-number'&gt;17&lt;/span&gt;
&lt;span class='line-number'&gt;18&lt;/span&gt;
&lt;span class='line-number'&gt;19&lt;/span&gt;
&lt;span class='line-number'&gt;20&lt;/span&gt;
&lt;span class='line-number'&gt;21&lt;/span&gt;
&lt;span class='line-number'&gt;22&lt;/span&gt;
&lt;span class='line-number'&gt;23&lt;/span&gt;
&lt;span class='line-number'&gt;24&lt;/span&gt;
&lt;span class='line-number'&gt;25&lt;/span&gt;
&lt;span class='line-number'&gt;26&lt;/span&gt;
&lt;span class='line-number'&gt;27&lt;/span&gt;
&lt;span class='line-number'&gt;28&lt;/span&gt;
&lt;span class='line-number'&gt;29&lt;/span&gt;
&lt;span class='line-number'&gt;30&lt;/span&gt;
&lt;span class='line-number'&gt;31&lt;/span&gt;
&lt;span class='line-number'&gt;32&lt;/span&gt;
&lt;span class='line-number'&gt;33&lt;/span&gt;
&lt;span class='line-number'&gt;34&lt;/span&gt;
&lt;span class='line-number'&gt;35&lt;/span&gt;
&lt;span class='line-number'&gt;36&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='css'&gt;&lt;span class='line'&gt;&lt;span class="c"&gt;/**&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt; * Set our main sections to use flexbox&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt; * if the browser supports it.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@supports&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nt"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;flexbox&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nf"&gt;#navigation&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nf"&gt;#content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flexbox&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt;/**&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt; * Fall back to a compatible layout if&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt; * the user agent does not support flexbox.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@supports&lt;/span&gt; &lt;span class="nt"&gt;not&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nt"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;flexbox&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;width&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&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;height&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&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nf"&gt;#navigation&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nf"&gt;#article&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Pretty straightforward. We would also (theoretically) be able to chain tests like we can with the &lt;code&gt;@media rule&lt;/code&gt; using the &lt;code&gt;and&lt;/code&gt; and &lt;code&gt;or&lt;/code&gt; keywords:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;span class='line-number'&gt;12&lt;/span&gt;
&lt;span class='line-number'&gt;13&lt;/span&gt;
&lt;span class='line-number'&gt;14&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='css'&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@supports&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nt"&gt;box-shadow&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;2px&lt;/span&gt; &lt;span class="nt"&gt;2px&lt;/span&gt; &lt;span class="nt"&gt;black&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;or&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;          &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nt"&gt;-moz-box-shadow&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;2px&lt;/span&gt; &lt;span class="nt"&gt;2px&lt;/span&gt; &lt;span class="nt"&gt;black&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;or&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;          &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nt"&gt;-webkit-box-shadow&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;2px&lt;/span&gt; &lt;span class="nt"&gt;2px&lt;/span&gt; &lt;span class="nt"&gt;black&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;or&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;          &lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nt"&gt;-o-box-shadow&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;2px&lt;/span&gt; &lt;span class="nt"&gt;2px&lt;/span&gt; &lt;span class="nt"&gt;black&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nc"&gt;.shadowbox&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&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;box&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;shadow&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;-2px&lt;/span&gt; &lt;span class="nb"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;       &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;moz&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;shadow&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;-2px&lt;/span&gt; &lt;span class="nb"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;         &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;shadow&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;-2px&lt;/span&gt; &lt;span class="nb"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;            &lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;shadow&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;-2px&lt;/span&gt; &lt;span class="nb"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;h2&gt;Preprocessor Implementation&lt;/h2&gt;

&lt;p&gt;I couldn&amp;#8217;t write this post without mentioning how elegant this functionality might be implemented in Sass or Compass. The &lt;code&gt;box-shadow&lt;/code&gt; example above is illustrative, but as a developer who has been writing nothing but Sass and Compass for the past year, it feels exceptionally repetitive.&lt;/p&gt;

&lt;p&gt;How about something like this?&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;span class='line-number'&gt;12&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; * This would compile to the code in&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; * the previous example.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; supports&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;box-shadow&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nc"&gt;.shadowbox&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; box-shadow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;-2&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nb"&gt;black&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Lovely. That&amp;#8217;s what I thought. The practicality of adding &lt;code&gt;@supports&lt;/code&gt; (or something very similar to it) to browsers is obvious, so let us hope that this draft continues to be developed and we see an implementation somewhere down the line.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=c4hdFI2irAI:JHGOHF02lG8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=c4hdFI2irAI:JHGOHF02lG8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=c4hdFI2irAI:JHGOHF02lG8:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/c4hdFI2irAI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/an-early-look-at-css3-conditional-rules</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Efficient Theming with Sass]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/nN5Ik_3CnD4/efficient-theming-with-sass" />
    <updated>2012-08-14T14:17:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/efficient-theming-with-sass</id>
    <content type="html">&lt;p&gt;Even after a full year of writing stylesheets almost exclusively with Sass and Compass, I continue to find solutions to common problems that further convince me that I will never write vanilla CSS again.&lt;!-- more --&gt; Creating theme sets is something I&amp;#8217;ve worked heavily on in the past three to four months, and it&amp;#8217;s there that I&amp;#8217;ve honed my Sass-fu and started to establish some of the material I present here. None of this is what I would consider &amp;#8220;best practice&amp;#8221;, but rather possible solutions that I find rather elegant. Some of this may be useful for others, and some of it may not be.&lt;/p&gt;

&lt;h2&gt;Variable Semantics&lt;/h2&gt;

&lt;p&gt;Let&amp;#8217;s demonstrate a problem. Say you&amp;#8217;re developing a base stylesheet, and eventually you&amp;#8217;re going to create child themes that inherit from your base, overriding variables to change colors, dimensions, etcetera.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;_base.scss&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="nv"&gt;$grey&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#ccc&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nv"&gt;$blue&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#4169ff&lt;/span&gt; &lt;span class="nv"&gt;!default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;background-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$grey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Great. Everything looks good. Now say we get a request in to make a child theme that has green body copy. Sure, no problem. We defined our variables with !default flags so we can easily override them.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;theme01.scss&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="nv"&gt;$blue&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#299126&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s2"&gt;base&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;You&amp;#8217;ve no doubt caught on by now that we&amp;#8217;ve essentially just destroyed the semantic value of our variable name. Sure, the above file will compile just fine, and even look correct in browser, but we have a variable that has essentially been decoupled from its actual assigned value.&lt;/p&gt;

&lt;p&gt;Don&amp;#8217;t give your variables vague names assuming you&amp;#8217;ll be able to reuse them in multiple places. If you plan this out carefully, it could work. But in many cases, in my experience, you will eventually find yourself renaming variables or creating new variables anyways. &lt;strong&gt;Create variables with &lt;em&gt;purposeful, semantic names&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;_base.scss&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$body-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;960&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$body-background-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#eee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$body-copy-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#222&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;background-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$body-background-color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$body-copy-color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&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&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$body-width&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Seem like overkill? I promise you it&amp;#8217;s not, and you&amp;#8217;ll thank yourself later, as will any other developer trying to work with your themes.&lt;/p&gt;

&lt;h2&gt;Standalone Config File&lt;/h2&gt;

&lt;p&gt;We all know that one of the best parts of precompiling our stylesheets is the ability to use variables. As the ones developing and maintaining code, effective use of variables can shave hours off the time it takes to make changes or implement new features on a platform. That being said, large systems using Sass will undoubtedly end up with a considerable number of variables. All of these variables should (hopefully) be kept in a single well-documented file. For every large system I maintain stylesheets for, this file is my &lt;code&gt;_config.scss&lt;/code&gt; partial.&lt;/p&gt;

&lt;p&gt;The official Compass website does a decent job &lt;a href="http://compass-style.org/help/tutorials/best_practices/"&gt;explaining this concept&lt;/a&gt;, but does not explicitly state something crucial to this concept: &lt;strong&gt;your configuration partial should &lt;em&gt;never&lt;/em&gt; define or import any actual CSS&lt;/strong&gt;. Importing anything into the configuration partial that would result in actual compiled CSS ruins the ability to then import that configuration file into multiple files without duplicating code.&lt;/p&gt;

&lt;h2&gt;&amp;#8220;Smart&amp;#8221; Variables&lt;/h2&gt;

&lt;p&gt;Say you&amp;#8217;re developing a theme, and you have a header bar that has a background gradient. You could define the two colors of the gradient as two variables:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$header-gradient-1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$header-gradient-2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;However, I find it much cleaner to store these as a list, since the naming of these two variables implies they will always be used together (and if not&amp;#8230; rethink the semantics of your variable names):&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$header-gradient&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;#000&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;This reads much cleaner, and then you can use the native Sass &lt;code&gt;nth&lt;/code&gt; function like such:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; background&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="nf"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;        &lt;span class="nf"&gt;nth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$header-gradient&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="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;        &lt;span class="nf"&gt;nth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$header-gradient&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;However&amp;#8230; this poses an issue. What happens when you have a theme to develop that SHOULDN&amp;#8217;T use a gradient, but rather a solid color? This is when you can make good use of the built-in &lt;code&gt;type-of&lt;/code&gt; function and some conditionals:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@if&lt;/span&gt; &lt;span class="nf"&gt;type-of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$header-gradient&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;list&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="c1"&gt;// Code here for a gradient background&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="c1"&gt;// Code here for using a solid background color&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Implementing this where appropriate will result in a more flexible theming environment.&lt;/p&gt;

&lt;h2&gt;Inline Your Media Queries&lt;/h2&gt;

&lt;p&gt;This concept has &lt;a href="http://mikefowler.me/thoughts/passing-content-to-mixins-in-sass/"&gt;been written about before&lt;/a&gt;, but it&amp;#8217;s worth mentioning here and expanding upon a bit. First, an example. Below we have the beginnings of a file structure for a responsive design. Simplified, yes, but bare with me. Individual sections are defined for different areas of the page, segmented by docblock-style comments. We&amp;#8217;re using a custom mixin for our responsive queries, passing content in via &lt;code&gt;@content&lt;/code&gt; blocks. Everything looks great.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;main.scss&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;span class='line-number'&gt;12&lt;/span&gt;
&lt;span class='line-number'&gt;13&lt;/span&gt;
&lt;span class='line-number'&gt;14&lt;/span&gt;
&lt;span class='line-number'&gt;15&lt;/span&gt;
&lt;span class='line-number'&gt;16&lt;/span&gt;
&lt;span class='line-number'&gt;17&lt;/span&gt;
&lt;span class='line-number'&gt;18&lt;/span&gt;
&lt;span class='line-number'&gt;19&lt;/span&gt;
&lt;span class='line-number'&gt;20&lt;/span&gt;
&lt;span class='line-number'&gt;21&lt;/span&gt;
&lt;span class='line-number'&gt;22&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; * Base Styles&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Header&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;banner&amp;quot;&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&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Body&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;main&amp;quot;&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&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Footer&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;contentinfo&amp;quot;&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&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; * Media Queries&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Tablet&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; respond-to&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;tablet&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;// etc... }&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Desktop&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; respond-to&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;desktop&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;// etc... }&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Now imagine something else: imagine that for each of the three main sections, &lt;code&gt;header&lt;/code&gt;, &lt;code&gt;[role="main"]&lt;/code&gt; and &lt;code&gt;[role="contentinfo"]&lt;/code&gt;, we have anywhere between 500 and 1000 lines of code. Suddenly our structure seems a bit more unwieldy. When you get into the tedium of adjusting styles at multiple screen resolutions, the act of scrolling up and down through thousands of lines of code, several times each minute, becomes a chore. Luckily, the solution here is easy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write your media queries inline with the base styles.&lt;/strong&gt; Seriously, do it. Keeping media queries in proximity to the base styles does two things: it reduces the obnoxious amount of scrolling between sections while writing styles for different breakpoints, and, maybe most importantly, &lt;em&gt;contextualizes the content being passed into the media queries&lt;/em&gt;. Often times the styles being set at specific breakpoints are there to override or set properties not present at other resolutions. In other words&amp;#8230; most of the styles we write in media queries are meaningless without seeing the base styles to compare.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;main.scss&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;span class='line-number'&gt;12&lt;/span&gt;
&lt;span class='line-number'&gt;13&lt;/span&gt;
&lt;span class='line-number'&gt;14&lt;/span&gt;
&lt;span class='line-number'&gt;15&lt;/span&gt;
&lt;span class='line-number'&gt;16&lt;/span&gt;
&lt;span class='line-number'&gt;17&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; * Header&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;banner&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="c1"&gt;// Base styles...&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; respond-to&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;tablet&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="c1"&gt;// Tablet styles...&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; respond-to&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;desktop&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="c1"&gt;// Desktop styles...&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Are there implications of writing your media queries inline like this? Yes, there are. Namely, you&amp;#8217;re going to end up with a compiled CSS file with a bunch of duplicate &lt;code&gt;@media&lt;/code&gt; queries. Whether or not this is a dealbreaker is something each developer needs to decide on his or her own. My &lt;strong&gt;opinion&lt;/strong&gt; is that writing media queries in this manner is more than well justified by the time saved and frustration avoided.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=nN5Ik_3CnD4:peCSoRV7eZ4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=nN5Ik_3CnD4:peCSoRV7eZ4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=nN5Ik_3CnD4:peCSoRV7eZ4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/nN5Ik_3CnD4" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/efficient-theming-with-sass</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Font Face Syntax in Compass]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/wd9u-F27jNU/compass-font-face-syntax" />
    <updated>2012-07-23T11:50:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/compass-font-face-syntax</id>
    <content type="html">&lt;p&gt;Since the documentation on the Compass website is a tad confusing I thought I&amp;#8217;d clarify the basic usage of the @font-face mixin included in Compass.&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re using Font Squirrel or any other web font creation tools, you should have a stack of font files with different file types for each font you need to load: .woff, .ttf, .svg and .eot. Drop these into the &lt;code&gt;fonts&lt;/code&gt; directory for your Compass project (by default it&amp;#8217;s a folder called &amp;#8216;fonts&amp;#8217; inside the compiled CSS directory, like &amp;#8216;/css/fonts&amp;#8217;). Once these files are in the correct place, the syntax is as follows:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='sass'&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Import the Compass Font Face module&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;compass/css3/font-face&amp;quot;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Define our font&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; font-face&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;My Font Name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;font-files&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s2"&gt;fontName.woff&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;woff&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s2"&gt;fontName.ttf&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;ttf&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s2"&gt;fontName.svg&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;svg&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s2"&gt;fontName.eot&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;After importing the Compass module, the first thing we do is name our font. The string value can be set to your liking, and will be used in your font stack declarations. The font-files() array then defines the names of the included files, with an &lt;em&gt;unquoted&lt;/em&gt; indication of its file type. Note that the *.eot file is a standalone string outside the font-files() array and is used only by IE.&lt;/p&gt;

&lt;p&gt;Our custom &amp;#8216;My Font Name&amp;#8217; font is now available to use just like any other in a font stack declaration. However, since we&amp;#8217;re using Sass and Compass, we should go ahead and make this DRY and create an @extend-able selector. If you&amp;#8217;re using Sass 3.2.x you can use a @extend placeholder, or just use a regular class to extend if you&amp;#8217;re still using the stable version.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='sass'&gt;&lt;span class='line'&gt;&lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;myfont&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;font-family&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s2"&gt;My Font Name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;sans-serif&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;myfont&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;



&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=wd9u-F27jNU:rHY5R7hYFuE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=wd9u-F27jNU:rHY5R7hYFuE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=wd9u-F27jNU:rHY5R7hYFuE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/wd9u-F27jNU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/compass-font-face-syntax</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[NN/G Usability Week]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/vPAi468tO5w/nng-usability-week" />
    <updated>2012-06-25T09:56:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/nng-usability-week</id>
    <content type="html">&lt;p&gt;Here are my unedited notes from the Nielsen/Norman Group Usability Week conference I was at last week. Extract as much or as little from this as you can, as I will be doing the same over the next few days. The session on &amp;#8216;Creating Credible and Persuasive Websites&amp;#8217; was especially enlightening, so I expect some of what you see here to influence a post or two in the coming months.&lt;!-- more --&gt;&lt;/p&gt;

&lt;h2&gt;Designing Complex Apps &amp;amp; Websites&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Complex applications need to provide the user with an exploratory path rather than a cut and dry &amp;#8220;Point A to Point B&amp;#8221; workflow of simpler applications.&lt;/li&gt;
&lt;li&gt;In complex situations, user-centered design can fall short

&lt;ul&gt;
&lt;li&gt;Tech and development has evolved fast/often whereas tools for UCD have not involved very much&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;How do you align the conceptual model of a designer and the end-user when the end-user may have 20+ years of experience in the domain versus a two-week sprint?&lt;/li&gt;
&lt;li&gt;Challenge: how do you quickly ramp up on decades of domain experience? (Becoming a &amp;#8220;pseudo-expert&amp;#8221;)&lt;/li&gt;
&lt;li&gt;Usefulness VS usability (value of functionality VERSUS how easy is it to use?)&lt;/li&gt;
&lt;li&gt;A successful user experience depends on so much more than visuals:

&lt;ul&gt;
&lt;li&gt;Design&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Interaction/UI&lt;/li&gt;
&lt;li&gt;Navigation&lt;/li&gt;
&lt;li&gt;Functionality/Usefulness&lt;/li&gt;
&lt;li&gt;Audience/Needs/Goals&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Applications fall into a triangular space where the corners are (1) Useful, (2) Appealing and (3) Usable&lt;/li&gt;
&lt;li&gt;Prohibiting Usefulness

&lt;ul&gt;
&lt;li&gt;Too much focus on the technology&lt;/li&gt;
&lt;li&gt;Talking only with clients rather than end-users&lt;/li&gt;
&lt;li&gt;Self-fulfilling user research&lt;/li&gt;
&lt;li&gt;Overuse of focus groups: great for understanding requirements but not for testing design&lt;/li&gt;
&lt;li&gt;Talking to users before you understand the domain&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Understanding usefulness up front:

&lt;ul&gt;
&lt;li&gt;Minimizing risk&lt;/li&gt;
&lt;li&gt;Better understanding of whether you should integrate with other services or whether your tech can replace/displace other processes and technologies&lt;/li&gt;
&lt;li&gt;Identifying ways to put your own software ahead of existing competitors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Design Research to expose usefulness

&lt;ul&gt;
&lt;li&gt;Results in clearer personas and earlier/better wireframes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Applying user-centered design earlier in the process:

&lt;ul&gt;
&lt;li&gt;Removes assumptions earlier in the process to align the models of designers and stakeholders&lt;/li&gt;
&lt;li&gt;Provides more time to become pseudo domain experts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &amp;#8220;Design Research&amp;#8221; focus

&lt;ol&gt;
&lt;li&gt;Learning about the domain&lt;/li&gt;
&lt;li&gt;Creating hypotheses about end-users&lt;/li&gt;
&lt;li&gt;Test with potential actual users&lt;/li&gt;
&lt;li&gt;Test hypotheses through observations/interviews and usefulness tests&lt;/li&gt;
&lt;li&gt;Get to the root of what you ACTUALLY found, not what you HOPED to find&lt;/li&gt;
&lt;li&gt;Seek out emerging patterns in the Usability&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Stakeholder Data Collection

&lt;ul&gt;
&lt;li&gt;Identify key stakeholders and interview/survey on an individual level to determine goals, core UX metrics to gather, personas to target, use cases, tech requirements (or things to avoid)&lt;/li&gt;
&lt;li&gt;Analyze/summarize this data and present back to the entire group of stakeholders to help align everybody&lt;/li&gt;
&lt;li&gt;Aligning the views of stakeholders up front BEFORE gather product req&amp;#8217;s will speed up time to a focused, solid MVP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;User Recruiting

&lt;ul&gt;
&lt;li&gt;Identifying personas&lt;/li&gt;
&lt;li&gt;Weed out bad matches for your user studies&lt;/li&gt;
&lt;li&gt;Find good sources to find users based on your personas&lt;/li&gt;
&lt;li&gt;Loosen participant requirements if you can&amp;#8217;t get the right people&lt;/li&gt;
&lt;li&gt;Avoid user testing with &amp;#8220;professional&amp;#8221; user testing participants: they are not &amp;#8220;normal&amp;#8221; users b/c they frequently test.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Primary differences between &amp;#8220;usefulness&amp;#8221; testing and &amp;#8220;usability&amp;#8221; testing

&lt;ul&gt;
&lt;li&gt;Earlier in process to figure out if application elements are &amp;#8220;useful&amp;#8221;&lt;/li&gt;
&lt;li&gt;Testing materials are not always prototypes, and if so they are rough and conceptual&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Utilizing a range of user research methods throughout the lifecycle of a product will help blur out the cons of certain methods.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Test domain-specific language in your usefulness and usability testing: are users able to understand the domain-specific terminology used in the app? If not, this is a problem.&lt;/li&gt;
&lt;li&gt;Artifacts

&lt;ol&gt;
&lt;li&gt;Personas&lt;/li&gt;
&lt;li&gt;Personas should not be perceived as a &amp;#8220;deliverable&amp;#8221;. They are living documents. Keep them updated. Reference them often. Put them in a visible place in your workspace.&lt;/li&gt;
&lt;li&gt;Personas for domain experts can help to disseminate ways to help them trust the application more (&amp;#8220;technology trust indicators&amp;#8221;)&lt;/li&gt;
&lt;li&gt;Driven by data&amp;#8230; based on USERS not CUSTOMERS&lt;/li&gt;
&lt;li&gt;Use Cases / Epic Stories&lt;/li&gt;
&lt;li&gt;Domain experts need: confidence indicators, domain-relevant terms, exploratory workflows&lt;/li&gt;
&lt;li&gt;Use cases may fall short because:
1 Too much reliance: ultimately they are theoretical&amp;#8230; get some actual data
2 UI detail provides too much &amp;#8220;solution&amp;#8221; (button colors, for instance)
3&lt;/li&gt;
&lt;li&gt;Enhancing use cases:

&lt;ul&gt;
&lt;li&gt;Theme, related personas, similar features, lengthy descriptive story, domain-specific terms, interaction pattern candidates&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Patterns&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abstract and draw upon known solutions to comprehend challenges&lt;/li&gt;
&lt;li&gt;Shared knowledge across organization&lt;/li&gt;
&lt;li&gt;Helps expedite prototyping&lt;/li&gt;
&lt;li&gt;Common design language&lt;/li&gt;
&lt;li&gt;Global consistency&lt;/li&gt;
&lt;li&gt;Easier learning curve for users: feel more safe/familiar&lt;/li&gt;
&lt;li&gt;CONS: laziness (no testing), patterns become stale, company culture shift may be required (YUP)&lt;/li&gt;
&lt;li&gt;Integrating patterns into your development cycle:

&lt;ol&gt;
&lt;li&gt;Identify candidates for patterns via personas and use cases&lt;/li&gt;
&lt;li&gt;Apply patterns and test them through early prototyping&lt;/li&gt;
&lt;li&gt;Manage/maintain patterns during development. Integrate them into your organization&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Major benefits

&lt;ul&gt;
&lt;li&gt;Development efficiency boost&lt;/li&gt;
&lt;li&gt;More code recycling (DRY)&lt;/li&gt;
&lt;li&gt;Faster prototyping&lt;/li&gt;
&lt;li&gt;Consistency between releases&lt;/li&gt;
&lt;li&gt;Plays well with rapid development (agile/scrum)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#8220;Many organizations estimate an upward of 20% loss in design quality moving from prototypes to production, prior to utilizing patterns&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;THOUGHT: Shouldn&amp;#8217;t forms be a &amp;#8220;conversation&amp;#8221; rather than a questionnaire thrown into the users lap? Let&amp;#8217;s start GUIDING users through forms better.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Creating Credible and Persuasive Websites&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Question: What are the things that drive trust and persuasion in web design?&lt;/li&gt;
&lt;li&gt;Believability and persuasion: you must be believable to be persuasive.&lt;/li&gt;
&lt;li&gt;Designers must attempt to understand what their potential users are susceptible to.&lt;/li&gt;
&lt;li&gt;Credibility + benevolence = trust&lt;/li&gt;
&lt;li&gt;A user&amp;#8217;s disposition to TRUST your site will depend on your audience: their experiences, cultural background, personality&amp;#8230;

&lt;ul&gt;
&lt;li&gt;Are any of these factors things that YOU can do something about as a designer?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Untrusting users do not make for good user cases.&lt;/li&gt;
&lt;li&gt;Users do not fixate on banners, regardless of content (peripheral disregard)&lt;/li&gt;
&lt;li&gt;Globally, stats show that a general sense of &amp;#8220;trust&amp;#8221; is decreasing&lt;/li&gt;
&lt;li&gt;Often the mistrust felt by users is NOT the fault of designers/developers&lt;/li&gt;
&lt;li&gt;Giving additional control to users can go a long way for helping them trust your site&lt;/li&gt;
&lt;li&gt;Trusting a website is a two-step process

&lt;ol&gt;
&lt;li&gt;Initial (spontaneous)&lt;/li&gt;
&lt;li&gt;Safe? Meet expectations?&lt;/li&gt;
&lt;li&gt;FIVE SECOND TESTS &amp;#8211; DO THESE&lt;/li&gt;
&lt;li&gt;Experiential&lt;/li&gt;
&lt;li&gt;Good for me? My best interests at heart?&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#8220;Dont ask for too much, too early&amp;#8221;&lt;/li&gt;
&lt;li&gt;How do you gauge credibility?

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Which site would you choose?&amp;#8221;: top factors were looks, navigation, focus, motives, usefulness&lt;/li&gt;
&lt;li&gt;&amp;#8220;Prominence interpretation&amp;#8221;

&lt;ul&gt;
&lt;li&gt;Things are only change credibility as much as they are noticeable.&lt;/li&gt;
&lt;li&gt;Prominence X Interpretation = Credibility Impact&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Guided studies lead people to rate certain factors higher&lt;/li&gt;
&lt;li&gt;DO

&lt;ul&gt;
&lt;li&gt;Observe users&lt;/li&gt;
&lt;li&gt;Add to perform specific tasks&lt;/li&gt;
&lt;li&gt;Watch/listen/ask to unveil credibility issues WITHOUT mentioning it&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DONT

&lt;ul&gt;
&lt;li&gt;Conduct surveys&lt;/li&gt;
&lt;li&gt;Ask to select attributes that affect credibility&lt;/li&gt;
&lt;li&gt;Ask to just credibility of your site&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cognitive Ease VS Cognitive Strain

&lt;ul&gt;
&lt;li&gt;Untrusting users fall into a pattern of cognitive strain&lt;/li&gt;
&lt;li&gt;Increase believability by reducing the strain: vigilant, suspicious, increased effort&lt;/li&gt;
&lt;li&gt;Factors:

&lt;ol&gt;
&lt;li&gt;Legibility (bold, larger, etc)&lt;/li&gt;
&lt;li&gt;Avoid complex language&lt;/li&gt;
&lt;li&gt;Memorable messages (prose/verse)&lt;/li&gt;
&lt;li&gt;Quote sources with easy to pronounce names&lt;/li&gt;
&lt;li&gt;Optimization testing (A/B or split)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Mind

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Automatic&amp;#8221; (System 1) vs &amp;#8220;Effortful&amp;#8221; (System 2) Systems

&lt;ul&gt;
&lt;li&gt;Fast vs slow&lt;/li&gt;
&lt;li&gt;Automatic/low effort vs effortful mental activities&lt;/li&gt;
&lt;li&gt;Simple decisions/relations vs deliberate choices&lt;/li&gt;
&lt;li&gt;While we identify with effortful systems, automatic systems more often &amp;#8220;run the show&amp;#8221;&lt;/li&gt;
&lt;li&gt;System 1 feeds System 2: endorsing the intuitions, intentions or feelings of 1 in 2 leads to these becoming beliefs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trust.edelman.com/trust-download/global-results/"&gt;http://trust.edelman.com/trust-download/global-results/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Human Automaticity (this is system 1 working)

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Human automaticity is the ability to do things without occupying the mind.&amp;#8221; – Robert Cialdini&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Will users be using your site under positive or negative circumstances?&lt;/li&gt;
&lt;li&gt;Judgment errors common with system 1&lt;/li&gt;
&lt;li&gt;People will default to speed and convenience over accuracy&lt;/li&gt;
&lt;li&gt;&amp;#8220;People judge competence by combining two dimensions: strength and trustworthiness.&amp;#8221;&lt;/li&gt;
&lt;li&gt;Cognitive Biases

&lt;ul&gt;
&lt;li&gt;Priming: &amp;#8220;Priming is an implicit memory effect in which exposure to a stimulus influences a response to a later stimulus.&amp;#8221;&lt;/li&gt;
&lt;li&gt;Anchoring&lt;/li&gt;
&lt;li&gt;Framing&lt;/li&gt;
&lt;li&gt;Reciprocation

&lt;ul&gt;
&lt;li&gt;A perceived obligation to repay what another has provided&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Commitment and Consistency

&lt;ul&gt;
&lt;li&gt;Users feel committed to a choice they&amp;#8217;ve made (they have to)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Social Proof

&lt;ul&gt;
&lt;li&gt;People seek validation through the reviews/opinions of others&lt;/li&gt;
&lt;li&gt;Many will deny using reviews or caring about what others think to seem logical and intelligent&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Liking

&lt;ul&gt;
&lt;li&gt;People seek out similarity, familiarity, cooperation, association.&lt;/li&gt;
&lt;li&gt;the &amp;#8220;Halo Effect&amp;#8221;: one good trait favorably affects overall opinion&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Authority

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Obedience constitutes correct conduct&amp;#8221;&lt;/li&gt;
&lt;li&gt;People react to symbols of authority&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scarcity

&lt;ul&gt;
&lt;li&gt;Things more difficult to obtain are perceived as more valuable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;HOW DO YOU DESIGN FOR DESIRABLE ACTIONS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Applying Persuasion and Trust&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Kano Model

&lt;ul&gt;
&lt;li&gt;Basic vs Performance vs Excitement features&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Credibility Model

&lt;ul&gt;
&lt;li&gt;Basic, Befriend, Believe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Persuading people to visit websites

&lt;ul&gt;
&lt;li&gt;rank within top half of first page of search results&lt;/li&gt;
&lt;li&gt;brand familiarity&lt;/li&gt;
&lt;li&gt;quick loading pages&lt;/li&gt;
&lt;li&gt;how people search

&lt;ol&gt;
&lt;li&gt;look at results above fold&lt;/li&gt;
&lt;li&gt;skim results for familiar names in results&lt;/li&gt;
&lt;li&gt;skim URLs&lt;/li&gt;
&lt;li&gt;skim descriptions&lt;/li&gt;
&lt;li&gt;pick up details like dates&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Persuading to STAY on your site

&lt;ul&gt;
&lt;li&gt;Personal referrers create more forgiving new visitors&lt;/li&gt;
&lt;li&gt;Talking heads = FAILBOTs&lt;/li&gt;
&lt;li&gt;&amp;#8220;Visual first impression impacts perception of experience&amp;#8221;&lt;/li&gt;
&lt;li&gt;Users assessment of websites:

&lt;ol&gt;
&lt;li&gt;Page load speed&lt;/li&gt;
&lt;li&gt;Judge visual appearance&lt;/li&gt;
&lt;li&gt;Fixate on specific pieces of information&lt;/li&gt;
&lt;li&gt;Click on &amp;#8220;scent&amp;#8221; of information&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Utilizing associative imagery will prime the user&lt;/li&gt;
&lt;li&gt;Users shopping on price actually react NEGATIVELY to more professional designs - surprising.&lt;/li&gt;
&lt;li&gt;Use larger images (rather than more content) on listing pages&lt;/li&gt;
&lt;li&gt;Any sort of overview pages should include images to guide the user to their destination&lt;/li&gt;
&lt;li&gt;Local providers need to indicate service area PROMINENTLY and PERSISTENTLY&lt;/li&gt;
&lt;li&gt;Specific &amp;amp; persistent taglines&lt;/li&gt;
&lt;li&gt;Take care of your localized content: credible, up-to-date and (if applicable) accurately translated&lt;/li&gt;
&lt;li&gt;Prices should be visible by default&lt;/li&gt;
&lt;li&gt;Being able to sort products can alleviate mistrust (give the user control)&lt;/li&gt;
&lt;li&gt;Two equally attractive product choices can paralyze users and delay purchase decisions&amp;#8230; three carefully chosen options can often convert better&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Persuade people to BELIEVE your site

&lt;ul&gt;
&lt;li&gt;cognitive ease: consistency, clear descriptions&lt;/li&gt;
&lt;li&gt;user stories / testimonials NEED to be believable or relatable&lt;/li&gt;
&lt;li&gt;show CONTEXTUAL images of your products&lt;/li&gt;
&lt;li&gt;use face photos for personal transactions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Persuade people to ACT on your site

&lt;ul&gt;
&lt;li&gt;Remove obstacles: lead to decisions and desirable actions&lt;/li&gt;
&lt;li&gt;Behavioral economics states that people are irrational yet predictable and systematic&lt;/li&gt;
&lt;li&gt;Logical VS persuasive design

&lt;ul&gt;
&lt;li&gt;persuasive design says that many of our (the users) decisions are driven by the gut, not the head&lt;/li&gt;
&lt;li&gt;through persuasive design we can encourage people to make certain decisions (&amp;#8220;Decision Architecture&amp;#8221;)

&lt;ul&gt;
&lt;li&gt;determine complexity and impact of decisions&lt;/li&gt;
&lt;li&gt;it is up to US as designers to determine things like defaults, number of and difference between options, ordering, and wording&lt;/li&gt;
&lt;li&gt;&amp;#8220;opt-in&amp;#8221; is more effective than &amp;#8220;opt-out&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Eight Guidelines

&lt;ol&gt;
&lt;li&gt;Build brand awareness&lt;/li&gt;
&lt;li&gt;Create a visual language that speaks to your target users&lt;/li&gt;
&lt;li&gt;Address common objections through testimonials (for example)&lt;/li&gt;
&lt;li&gt;Cut choices&lt;/li&gt;
&lt;li&gt;Remove obstacles&lt;/li&gt;
&lt;li&gt;Apply the Influence Principles&lt;/li&gt;
&lt;li&gt;Test, Test, etc&lt;/li&gt;
&lt;li&gt;Read a lot!&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#8220;Thinking Fast and Slow&amp;#8221; book&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Fundamental Guidelines for Web Usability&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Consider: in your market/industry, what other sites are your users seeing? What comes before you in Google search rankings that you can compare/contrast with?&lt;/li&gt;
&lt;li&gt;Huge majority of people start at search engines and rarely hitting the front page of the site (75% of results hit interior page)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Most&lt;/em&gt; of peoples tasks online are goal-oriented&lt;/li&gt;
&lt;li&gt;How do we balance the business goals of a site or application with the goals of our users?&lt;/li&gt;
&lt;li&gt;Truths: users can&amp;#8217;t understand things that YOU don&amp;#8217;t understand (how do we overcome poor leadership, business models or strategy?)&lt;/li&gt;
&lt;li&gt;Stop imposing joy on users&amp;#8230; instead let&amp;#8217;s focus on content and let the site speak for itself.&lt;/li&gt;
&lt;li&gt;We need to back away from the idea that complex business rules == complex interfaces. Users will love you more for SIMPLIFYING.&lt;/li&gt;
&lt;li&gt;Stop imposing joy on users&amp;#8230; instead let&amp;#8217;s focus on content and let the site speak for itself.&lt;/li&gt;
&lt;li&gt;Stand up for your content: question or test the motives of executives through split testing and key metrics.&lt;/li&gt;
&lt;li&gt;Designers, stand up for your content: question whims of execs w/ split tests &amp;amp; analytics. Do execs represent target audience?&lt;/li&gt;
&lt;li&gt;Be aware: an estimated 43% of users are &amp;#8220;low-literacy&amp;#8221; users. They won&amp;#8217;t read or even scan, but &amp;#8220;plow&amp;#8221; or skip text content entirely.&lt;/li&gt;
&lt;li&gt;Patterns of reading/scanning:

&lt;ul&gt;
&lt;li&gt;The &amp;#8216;F&amp;#8217; pattern&lt;/li&gt;
&lt;li&gt;The &amp;#8216;Spotted&amp;#8217; pattern&lt;/li&gt;
&lt;li&gt;&amp;#8216;Layer Cake&amp;#8217; pattern (what turns into the &amp;#8216;Commitment&amp;#8217; pattern)

&lt;ul&gt;
&lt;li&gt;Headings help users quickly scan to relevant content&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Copywriters: even highly literate users appreciate succinct copy and clear, readable product or service descriptions.&lt;/li&gt;
&lt;li&gt;Only 5% of people view links on page two or higher of web searches, and 78% will only click one link (or not at all) per search.&lt;/li&gt;
&lt;li&gt;Aesthetics DO make sites seem more usable

&lt;ul&gt;
&lt;li&gt;How people feel about sites strongly correlates to how much they feel they can get done on the site.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;User Experience Basic Training&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Products should be designed around people, rather than creating products we need to teach people how to use&lt;/li&gt;
&lt;li&gt;SOFTWARE can make products more complex&lt;/li&gt;
&lt;li&gt;Usability: smooth interactions between computers and people

&lt;ol&gt;
&lt;li&gt;Learn-ability&lt;/li&gt;
&lt;li&gt;Efficiency&lt;/li&gt;
&lt;li&gt;Memorability&lt;/li&gt;
&lt;li&gt;Errors&lt;/li&gt;
&lt;li&gt;Satisfaction&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Users shouldn&amp;#8217;t have to stop and think about things. Things should be simple and clear, and OBVIOUS.&lt;/li&gt;
&lt;li&gt;Usability heuristics are not guidelines, but things we SHOULD DO when designing a user experience

&lt;ol&gt;
&lt;li&gt;Visibility of system status&lt;/li&gt;
&lt;li&gt;What is happening on the site? Provide feedback to the user so they know what&amp;#8217;s going on.&lt;/li&gt;
&lt;li&gt;Match language between system and real life&lt;/li&gt;
&lt;li&gt;Don&amp;#8217;t abstract things that don&amp;#8217;t need to be. Examples: buying tickets for flights, using the same terminology&lt;/li&gt;
&lt;li&gt;User control and freedom&lt;/li&gt;
&lt;li&gt;Give users some control over the information they&amp;#8217;re seeing&lt;/li&gt;
&lt;li&gt;Consistency and standards&lt;/li&gt;
&lt;li&gt;This goes for links, colors, navigation, headers, footers, etc&lt;/li&gt;
&lt;li&gt;Error Prevention&lt;/li&gt;
&lt;li&gt;Try and help the user to prevent errors (auto-complete, for instance)&lt;/li&gt;
&lt;li&gt;Recognition rather than recall&lt;/li&gt;
&lt;li&gt;Avoid forcing the user to remember things between screens or sections of your site&lt;/li&gt;
&lt;li&gt;Flexibility efficiency of use&lt;/li&gt;
&lt;li&gt;Aesthetic and minimal design&lt;/li&gt;
&lt;li&gt;Help users recognize, diagnose and recover from errors&lt;/li&gt;
&lt;li&gt;Help and documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#8220;People like things they are good at&amp;#8221;&lt;/li&gt;
&lt;li&gt;Three different levels of processing in user experience

&lt;ol&gt;
&lt;li&gt;Reflect&lt;/li&gt;
&lt;li&gt;Behavioral&lt;/li&gt;
&lt;li&gt;Visceral&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&amp;#8220;UX isn&amp;#8217;t just about creating high quality products, but focusing on high quality experiences these products create.&amp;#8221;&lt;/li&gt;
&lt;li&gt;UX form design question: do we need this information right now? what do we REALLY need to know? is this form even needed?&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=vPAi468tO5w:eujT0BtpJiA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=vPAi468tO5w:eujT0BtpJiA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=vPAi468tO5w:eujT0BtpJiA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/vPAi468tO5w" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/nng-usability-week</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[File Cloning in Sublime Text]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/VpLQEhy_s5c/file-cloning-in-sublime-text" />
    <updated>2012-06-10T12:58:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/file-cloning-in-sublime-text</id>
    <content type="html">&lt;p&gt;One of the handiest pieces of functionality that many code editors implement is the ability to split, or clone, files into a new tab or window. As one might expect, Sublime Text has this functionality built in, albeit somewhat hidden. &lt;!-- more --&gt; The wording of the menu item isn&amp;#8217;t immediately clear, resulting in my not knowing the feature even existed until I did some digging around.&lt;/p&gt;

&lt;h2&gt;Basic Cloning&lt;/h2&gt;

&lt;p&gt;To clone a file into a new view using Sublime Text 2&amp;#8217;s default functionality, find &lt;code&gt;New View into File&lt;/code&gt; in the &lt;code&gt;File&lt;/code&gt; menu. The result is a new tab in your current group with a second version of the file open. Changes made to the view of either of these files will update the other as well, and saving in one view will save the other. The file has effectively been &amp;#8220;cloned&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Unfortunately, I found using this menu item frustrating. Even if you set a keyboard shortcut (there isn&amp;#8217;t one assigned by default), the file is just cloned into the existing group. Given that the point of cloning a file is to look at two copies side by side, it&amp;#8217;s a downright pain to break your flow in order to select the menu item (or keyboard shortcut) and then split your layout and drag the file over.&lt;/p&gt;

&lt;h2&gt;Making Cloning&amp;#8230; Better&lt;/h2&gt;

&lt;p&gt;So I wrote a plugin. My first Sublime Text plugin, in fact. I had been looking for an excuse to look over the plugin API anyways, so this seemed like an easy enough utility to get my hands dirty with. &lt;em&gt;SimpleClone&lt;/em&gt; makes it much easier to clone files. Effortless, really. The first version of the plugin provides the ability to clone a file to the right (vertical split) and down (horizontal split) with lightning fast keyboard shortcuts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To clone a file to the right, hit &lt;strong&gt;Apple-Shift-Right&lt;/strong&gt;*&lt;/li&gt;
&lt;li&gt;To clone a file down, hit &lt;strong&gt;Apple-Shift-Down&lt;/strong&gt;*&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;For those using Package Control, you&amp;#8217;ll find it under &amp;#8216;SimpleClone&amp;#8217;, or you can &lt;a href="http://github.com/mikefowler/simple-clone"&gt;clone the plugin from the Github repo&lt;/a&gt;. Browse to your &amp;#8216;Packages&amp;#8217; directory in Terminal and run:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='bash'&gt;&lt;span class='line'&gt;git clone https://github.com/mikefowler/simple-clone.git
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;&lt;small&gt;*(Windows and Linux users: use Ctrl instead of Apple)&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;Use Cases for Cloning&lt;/h2&gt;

&lt;p&gt;So, why is file cloning useful anyways? There are obviously a lot of use cases, many of which will be specific to the language or environment you work in, but in my day-to-day tasks, I find it incredibly useful for working with Sass. For smaller sites that do not necessitate their own &lt;code&gt;_config.scss&lt;/code&gt; partial, I&amp;#8217;ll keep my section of variables at the top of the file. If you make heavy use of variables as I do, scrolling back and forth to the top of the file to reference variable names can be frustrating. Solution? Clone the file off to the right and keep the section of variables in view while you continue working on the left.&lt;/p&gt;

&lt;p&gt;I think this case holds true outside of Sass as well. Cloning is great when you need to quickly reference another part of the file and want to avoid losing your current place in the file.&lt;/p&gt;

&lt;p&gt;Feedback on the plugin are welcome in the comments below or via Github.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=VpLQEhy_s5c:Jx1-CK_9lMw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=VpLQEhy_s5c:Jx1-CK_9lMw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=VpLQEhy_s5c:Jx1-CK_9lMw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/VpLQEhy_s5c" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/file-cloning-in-sublime-text</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Semantic Widget Pattern]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/u8f8Vgkn76Y/semantic-widget-pattern" />
    <updated>2012-05-21T11:41:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/semantic-widget-pattern</id>
    <content type="html">&lt;p&gt;This is a pattern I&amp;#8217;ve been using a lot recently for marking up and styling generic widgets. This has gone through several iterations, the goal each time being semantic markup, as free of presentation-only tags as possible, a full-width header and a padded content area. &lt;!-- more --&gt; The goal here is to achieve something that looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img class="center" src="http://mikefowler.me/images/posts/semantic-widgets-example.jpg" title="A basic, albeit sexy, widget." &gt;&lt;/p&gt;

&lt;h2&gt;Take 1&lt;/h2&gt;

&lt;p&gt;My initial pass had been fairly straightforward: a sectioning element (aside, in my case) with a top-level header. Following the header was a &lt;code&gt;div&lt;/code&gt; element to handle the padding around the content. Something like this:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;Take 1: Markup&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='html'&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;widget&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Widget Title&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;widget-content&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;




&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;Take 1: Stylesheet&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='css'&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#eee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;width&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&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="nc"&gt;.widget-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;This is pretty simple and to the point, but I like to eliminate excessive &lt;code&gt;div&lt;/code&gt;s wherever I can, so after a while I revisited the problem.&lt;/p&gt;

&lt;h2&gt;Take 2&lt;/h2&gt;

&lt;p&gt;My first attempt at eliminating the extraneous &lt;code&gt;div&lt;/code&gt; element was to just globally apply padding to every element inside a &lt;code&gt;.widget&lt;/code&gt; with the exception of the top-level header.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;Take 2: Markup&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='html'&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;widget&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Widget Title&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;




&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;Take 2: Stylesheet&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='css'&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;This seemed to work alright, but there&amp;#8217;s still some part of me that feels dirty using global selectors like that.&lt;/p&gt;

&lt;h2&gt;Take 3&lt;/h2&gt;

&lt;p&gt;The last revision is the pattern I&amp;#8217;ve been using. I was frustrated that it took me so long to see the simplicity of it in the first place, but now it seems like a no-brainer. As I commonly do, I&amp;#8217;d overlooked the usefulness of negative margins. Using negative left and right margins on the top-level header we&amp;#8217;re able to apply the padding to the &lt;code&gt;.widget&lt;/code&gt; itself and not deal with global selectors.&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;Take 3: Markup&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='html'&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;widget&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Widget Title&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&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;http://placehold.it/400x400&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&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;




&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;Take 3: Stylesheet&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='css'&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;-10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;h2&gt;Demo&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://mikefowler.me/examples/SemanticWidgets" class="read-more"&gt;View Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thoughts and suggested improvements welcome in the comments.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=u8f8Vgkn76Y:OH9tBC8K25w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=u8f8Vgkn76Y:OH9tBC8K25w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=u8f8Vgkn76Y:OH9tBC8K25w:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/u8f8Vgkn76Y" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/semantic-widget-pattern</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Using a Local Domain to Serve Scripts for Development]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/1QbQLLO7vT8/using-a-local-domain-to-serve-scripts-for-development" />
    <updated>2012-03-16T10:49:00-07:00</updated>
    <id>http://mikefowler.me/thoughts/using-a-local-domain-to-serve-scripts-for-development</id>
    <content type="html">&lt;p&gt;I wanted to share something I started doing recently that has sped up my process for quickly mocking up sites. See if the following sounds at all familiar to you&amp;#8230;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;You&amp;#8217;re working&amp;#8230; you&amp;#8217;re in the flow&amp;#8230; you feel good. Suddenly: A WILD IDEA APPEARS! Adrenaline is released and you scramble to open your code editor of choice to mock up the idea before it escapes. Your fingers move across the keys with the elegance of a lithe dancer. You trigger your default HTML page snippet. TAB!&lt;/p&gt;

&lt;p&gt;You attach a stylesheet and open it. Some quick markup and a few blocks of styles and your idea starts to take form. You see the user interaction taking shape in your head. Quickly! Include your DOM-manipulation library of choice and&amp;#8230; and suddenly you stall. I realized lately how much of a drag it is in circumstances like this to interrupt a stream of great ideation, even for 30 seconds, and go grab the latest version of a script from the website or Github. So this is what I did:&lt;/p&gt;

&lt;h2&gt;Create a Virtual Host Specifically for Utilities&lt;/h2&gt;

&lt;p&gt;I created a virtual host on my local LAMP stack that has a straightforward URL of http://utility/. I started populating the root of that domain with scipts I frequently use: jQuery, CSSRefresh, a Modernizr production build, etc. Then I started creating snippets in Sublime Text so that I can insert a production build of the latest version of jQuery painlessly by typing &amp;#8216;jquery&amp;#8217; and hitting tab. In less than two seconds I have the script imported and I can keep working without worrying about even leaving my code editor to grab a script.&lt;/p&gt;

&lt;p&gt;The only maintenance involved here is keeping the scripts up to date in your utility directory. That being said, I could certainly improve this process by checking out all of the scripts in that folder from their respective repositories and creating a simple script that would run once per week (or whenever) to pull any changes from remote.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=1QbQLLO7vT8:iW1Bp8-lSGk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=1QbQLLO7vT8:iW1Bp8-lSGk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=1QbQLLO7vT8:iW1Bp8-lSGk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/1QbQLLO7vT8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/using-a-local-domain-to-serve-scripts-for-development</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Sublime Text: Pretty Great]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/T0O2QbXudaA/sublime-text-great" />
    <updated>2012-03-01T16:07:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/sublime-text-great</id>
    <content type="html">&lt;p&gt;I&amp;#8217;ve recently changed my development environment across all platforms after finally taking the time to try Sublime Text 2.&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;As any other developer will agree, this is a momentous occasion. Ones development environment is like a close friend, guiding you through the darkness on the occasionally lonely and dark road to enlightenment. Its softly flitting cursor moves elegantly across the screen even as you spew out poetry that will bring an idea to life. The subtle highlighting of the code&amp;#8230;&lt;/p&gt;

&lt;p&gt;Fine. Maybe I&amp;#8217;m exaggerating. But in all honesty, it&amp;#8217;s a great feeling when you find a tool that just seems to &lt;em&gt;fit&lt;/em&gt; you, not unlike a great pair of jeans. That has been my experience thus far with Sublime Text (specifically Sublime Text 2, in beta form).&lt;/p&gt;

&lt;h2&gt;Things I Like&lt;/h2&gt;

&lt;h3&gt;Command Palette&lt;/h3&gt;

&lt;p&gt;One of the most frustrating things about programming can be the need to continually switch between the keyboard and mouse to perform various operations. Most code editors attempt to solve this issue by providing customizable keyboard shortcuts for performing nearly any operation, and this solution works fine. That is&amp;#8230; until you&amp;#8217;ve experienced a better way. A quick keyboard shortcut in ST2 brings up their &amp;#8220;command palette&amp;#8221;, a simple overlay with a scrollable list of all the possible commands. Once that appears, you can begin typing the command you want to run and the list will filter based on your query. The arrow keys allow you to select the command once you identify the one you&amp;#8217;re looking for, and Enter executes it. All without moving your hands off of the home row.&lt;/p&gt;

&lt;p&gt;&lt;img class="center" src="http://mikefowler.me/images/posts/st2_commandpalette.png" title="Sublime Text 2 Command Palette" &gt;&lt;/p&gt;

&lt;h3&gt;Project Switching&lt;/h3&gt;

&lt;p&gt;Projects in ST2 are defined by including folders which then appear in the sidebar for easy access. Pretty standard functionality in this case except for that you&amp;#8217;re provided with an interface similar to the Command Palette pictured above that allows you to switch between projects with a couple of keystrokes. Projects maintain which files are open so switching back and forth from project to project isn&amp;#8217;t a hassle at all.&lt;/p&gt;

&lt;p&gt;&lt;img class="center" src="http://mikefowler.me/images/posts/st2_projects.png" title="Projects folders in the sidebar" &gt;&lt;/p&gt;

&lt;h3&gt;Multi-Select&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;d be remiss to write a review of Sublime Text without mentioning this, because this is another example of &amp;#8220;you didn&amp;#8217;t know you needed it until you had it&amp;#8221;. There are two ways of using this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Highlight a text or expression&lt;/li&gt;
&lt;li&gt;Press Ctrl-D. With each press, ST2 will select the next instance of the selected text&lt;/li&gt;
&lt;li&gt;Once you&amp;#8217;ve selected all the instances you wish to change, just type. The text you enter will replace each instance you highlighted.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;OR:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use your mouse to select a block of text&lt;/li&gt;
&lt;li&gt;Hold Ctrl and select some more text, in another location&lt;/li&gt;
&lt;li&gt;Type. You will replace the highlighted text in each location selected.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;It&amp;#8217;s like magic. I would almost urge somebody to try Sublime JUST for this feature.&lt;/p&gt;

&lt;p&gt;&lt;img class="center" src="http://mikefowler.me/images/posts/st2_multiselect.png" title="It's like interactive find and replace!" &gt;&lt;/p&gt;

&lt;h3&gt;Add-On Packages&lt;/h3&gt;

&lt;p&gt;You can install community plugins within seconds from the command palette, and there are a LOT of community plugins. Want to be able to fire off a Stack Overflow search from your editor? You can do that. Triggering JS Lint with a keyboard shortcut. Yup. Automatic Docblock formatting. You bet. SVN or Git integration. Uh huh.&lt;/p&gt;

&lt;p&gt;I could continue, but the number of things to like about this application are too numerous to list here and ultimately must be experienced.&lt;/p&gt;

&lt;h2&gt;Things I Don&amp;#8217;t Like (As Much)&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;m not even sure &amp;#8220;don&amp;#8217;t like&amp;#8221; is the proper title for this section. It might be more appropriate to state the things that would make Sublime Text 2 &lt;em&gt;PERFECT&lt;/em&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remote file editing (a la Coda)&lt;/li&gt;
&lt;li&gt;Syntax support for MVC3 Razor Views (would be helpful at work, not as much in personal work)&lt;/li&gt;
&lt;li&gt;Projects could certainly allow for finer control of what is included in the sidebar (allowing single file includes rather than only folders, for instance)&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;The above being said, it&amp;#8217;s important to note that Sublime Text 2 is still in beta, and the past several releases have seen an incredible number of new features.&lt;/p&gt;

&lt;h2&gt;The Skimmer&amp;#8217;s Summary&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.sublimetext.com/blog/articles/sublime-text-2-beta"&gt;Try Sublime Text&lt;/a&gt;. You won&amp;#8217;t regret it.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=T0O2QbXudaA:sJ-uvg59RsA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=T0O2QbXudaA:sJ-uvg59RsA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=T0O2QbXudaA:sJ-uvg59RsA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/T0O2QbXudaA" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/sublime-text-great</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Is Device-Friendly Development a Responsibility?]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/esjr2bojUtE/is-device-friendly-development-a-responsibility" />
    <updated>2012-02-15T10:38:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/is-device-friendly-development-a-responsibility</id>
    <content type="html">&lt;p&gt;I got to thinking the other day: is developing device-friendly websites a responsibility of the developer? If it&amp;#8217;s not now, will it ever be?&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;This is an issue that I think is worth talking about. I&amp;#8217;d like to hear some other opinions as I think through this myself. I&amp;#8217;ll start with some thinking points and then wrap it together at the end.&lt;/p&gt;

&lt;h2&gt;In The Beginning&amp;#8230;&lt;/h2&gt;

&lt;p&gt;&amp;#8230;there were tables. For the simple reason that tables made it easy to align content in a grid-like fashion, tables become the de-facto method for creating visual layout. Layout via CSS become possible in the late 1990&amp;#8217;s, but with browser support shoddy at best, it was certainly not the tried and true method that table layout was. And so things were, until the community began more closely considering things like semantics, accessibility and search optimization. As it turned out, the markup you used to create your layout could adversely affect these things.&lt;/p&gt;

&lt;p&gt;Gradually, CSS became more powerful and saw better browser implementation. Fundamentally, this was one of the first large-scale transitions for web developers. Moving to CSS-based layouts meant learning a new scripting language. Thus, we arrive at our first question:&lt;/p&gt;

&lt;p&gt;During this transition period, did we, as developers, consider it our duty, our &lt;em&gt;responsibility&lt;/em&gt;, to inform clients of this transition and push them in the direction of a table-less layout?&lt;/p&gt;

&lt;h2&gt;Poor Browser Implementation Abound&lt;/h2&gt;

&lt;p&gt;Let&amp;#8217;s jump five to ten years down the road. Microsoft has won the war against Netscape, and Internet Explorer dominates the browser market. Dominate might even be too lenient a description. Check out &lt;a href="http://www.onestat.com/html/aboutus_pressbox23.html"&gt;this 2003 press release&lt;/a&gt; from OneStat. This release came near the height of Microsoft&amp;#8217;s browser dominance and shows Internet Explorer 6 with an astonishing 97.34% of the market share.&lt;/p&gt;

&lt;p&gt;While these stats serve to illustrate just how much the market has changed since 2003, I&amp;#8217;ve included them here rather to point out the importance of another massive shift in the industry. The initial release of Mozilla Firefox in 2004 put into motion a shift away from the proprietary browsers released by Microsoft to browsers built on community-developed open source engines, namely Gecko and Webkit.&lt;/p&gt;

&lt;p&gt;So, a second rhetorical: In the past five to six years, have developers made it their responsibility to sway clients away from lingering old versions of browsers with poor implementations of CSS and towards modern browsers that provide the user with a richer, immersive experience?&lt;/p&gt;

&lt;h2&gt;Get to the Point, Already&lt;/h2&gt;

&lt;p&gt;Ok, ok. Let&amp;#8217;s pull this back around. First some opinions.&lt;/p&gt;

&lt;p&gt;While I was only getting started with web development at the tail end of the transition from table layout to CSS layout, I can say with certainty that I would have encouraged clients to go for a table-less layout. On the matter of pushing clients towards modern browsers and encouraging the abandonment of old implementations, I think it&amp;#8217;s &lt;a href="http://www.ie6countdown.com/"&gt;safe&lt;/a&gt; &lt;a href="http://www.ie6death.com/"&gt;to&lt;/a&gt; &lt;a href="http://code.google.com/chrome/chromeframe/"&gt;say&lt;/a&gt; that I (and the rest of the community) have actively been doing that, even garnering support from Microsoft itself.&lt;/p&gt;

&lt;p&gt;&lt;span class='pullquote-right' data-pullquote='Ultimately, our job as developers and designers is create rich, meaningful ways to deliver content that reaches our target audience and can create the best possible experience.'&gt;
Looking back at these two major transitions in the history of web development, I am pointing a huge finger at how our job as developers relates to the technology we promote. Ultimately, our job as developers and designers is create rich, meaningful ways to deliver content that reaches our target audience and can create the best possible experience. For this to happen, we work as a community to push through new specifications and in turn encourage browser vendors to make those specifications a reality.
&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Over the past two years, developing for mobile devices has moved from an ideal to a requirement, especially for highly visible websites. While initially this requirement took the form of a native application, now more than ever there is a growing number of companies ditching the native application and developing mobile-friendly, browser-based solutions. Some of the more notable companies to achieve this in the past year are the Boston Globe (check out &lt;a href="http://www.zeldman.com/2011/09/15/boston-globes-responsive-redesign-discuss/"&gt;Zeldman&amp;#8217;s article&lt;/a&gt; for more on that) and &lt;a href="http://www.smashingmagazine.com/"&gt;Smashing Magazine&lt;/a&gt;. There is no doubt that this trend will continue and we will start to see more and more larger companies launching redesigns comfortably viewable on a vast array of devices.&lt;/p&gt;

&lt;p&gt;That being said, &lt;em&gt;where do small companies fall in this trend?&lt;/em&gt; Should we expect the owner of a local restaurant to be aware of and request that their site be responsive and mobile-friendly? Would we have expected similar from clients in the late 1990&amp;#8217;s when we began moving away from table-based designs? Or even two years ago when the push began to kill off the remaining IE6 user-base?&lt;/p&gt;

&lt;p&gt;It seems to me that as the developers, the people engineering ways to experience content, a certain amount of this responsibility falls to us. If our job, as I feel is the case, is about delivering content in the most efficient and effective manner, then I think we absolutely have a responsibility to encourage clients to move towards mobile-friendly designs.&lt;/p&gt;

&lt;h2&gt;In Practice&lt;/h2&gt;

&lt;p&gt;Is anybody doing this yet? I&amp;#8217;d love to hear from developers who have already made responsive development a part of their standard client packages, or have at least begun to have that conversation with some of the smaller companies you do work for. Like I said earlier, I think this is a conversation worth having, so please feel free to voice your opinion and get this discussion going.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=esjr2bojUtE:MTMeF48yklg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=esjr2bojUtE:MTMeF48yklg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=esjr2bojUtE:MTMeF48yklg:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/esjr2bojUtE" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/is-device-friendly-development-a-responsibility</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[The Role of Humility in Community Contribution]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/_GuDEWSJ3Bg/role-humility-community-contribution" />
    <updated>2012-02-03T16:39:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/role-humility-community-contribution</id>
    <content type="html">&lt;p&gt;Developers, designers, artists, musicians&amp;#8230; to you I speak. Many of us followed a similar path into our respective creative fields.&lt;!-- more --&gt; We spent years as a sponge. We sat quietly on the sidelines, reading as much as we could about our industries. As a result, many of us can proudly say that our livelihoods are the result of long hours of self-teaching and, above all else, an unquenchable passion for the subject.&lt;/p&gt;

&lt;p&gt;Eventually we all come to a crossroads. It&amp;#8217;s not that our desire to learn begins to wane. No, for most of us that will never happen. Our jobs are our lives. Rather, we begin to desire greater community involvement. For me, this desire brings about a struggle: feeling strongly enough about my own contributions to present them to the community.&lt;/p&gt;

&lt;p&gt;This post is not about self-esteem. What I am suggesting here has little to do with self-esteem and much more to do with humility. I&amp;#8217;ve strived for humility all of my learning life. I find much greater satisfaction in personal achievement than in public recognition. Unfortunately, this character trait doesn&amp;#8217;t mesh very well with pushing opinions out to the public.&lt;/p&gt;

&lt;p&gt;&lt;span class='pullquote-right' data-pullquote='presenting your work and opinions for anybody and everybody to judge can be exceptionally intimidating '&gt;
Here&amp;#8217;s the thing: after you spend a great deal of time reading and learning from the work of community leaders and people doing exceptional work, they become mentors. You show great respect for their work and look up to them for helping teach you so much of what you know. Putting yourself on the same level as them and presenting your work and opinions for anybody and everybody to judge can be exceptionally intimidating.
&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;Embracing Community&lt;/h2&gt;

&lt;p&gt;Thankfully, there are other reasons to push yourself to contribute back to the community that should (hopefully) trump even the most humble among us. Namely I am referring to feedback. The thing I&amp;#8217;ve always loved most about the web development community is the cooperation. People speaking ill of each other or sabotaging others work or progress happens so infrequently that it may as well be nonexistant. Chances are, when you finally take the step to show the community something you&amp;#8217;ve worked on (or currently are working on), you&amp;#8217;ll find others who are both excited about it and eager to give their opinion, whether it&amp;#8217;s suggestions, ideas, feedback or praise.&lt;/p&gt;

&lt;p&gt;Granted, I should be following my own advice here and contributing to the community more than I do. That being said, you are reading this blog post, so I suppose I am doing my part and at least embodying what I preach here.&lt;/p&gt;

&lt;h2&gt;Balancing Act&lt;/h2&gt;

&lt;p&gt;Let me finish by summarizing the thought that led to me writing this in the first place. Community contribution can be intimidating for those of us humble by nature. For me personally I recognize that community contribution must strike a happy medium between humility and valuing your own opinions enough to share with others. In this way we share and collaborate with others while continuing to learn from those around us. And in &lt;em&gt;this&lt;/em&gt; way, our community continues to prosper.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=_GuDEWSJ3Bg:Q22Y-023wBk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=_GuDEWSJ3Bg:Q22Y-023wBk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=_GuDEWSJ3Bg:Q22Y-023wBk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/_GuDEWSJ3Bg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/role-humility-community-contribution</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Professional Goals for 2012]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/YeObbr91KIE/professional-goals-for-2012" />
    <updated>2012-01-09T23:42:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/professional-goals-for-2012</id>
    <content type="html">&lt;p&gt;I don&amp;#8217;t make New Years resolutions. I&amp;#8217;ve always felt like the changing of a year is a lame excuse to decide to make a change in ones life.&lt;!-- more --&gt; When I decide to do something (resolve to, if you will) I just do it. That being said, I&amp;#8217;ve decided that this year, for my own benefit, I wanted to write out a list of things that I want to accomplish professionally in the next year.&lt;/p&gt;

&lt;p&gt;This year in particular is one that I feel truly marks my entrance into my professional field. As evidenced by you reading this, I&amp;#8217;ve finally gotten a website up that represents me as a web developer rather than an artist, which is what I spent my four years of college being. I&amp;#8217;ve recently moved into a new job that I&amp;#8217;m incredibly happy with where I can flex my brain and work on some really exciting things. I&amp;#8217;m ready and poised to start contributing and being an active part of this community that I have become very much addicted to.&lt;/p&gt;

&lt;h2&gt;Events&lt;/h2&gt;

&lt;p&gt;The comfort of being in what I feel is a more long-term position takes a big weight off my mind and allows me to turn my sights to something that has been on my mind for quite some time now: helping build and foster the creative and development community here in Burlington. There are a couple of events already, namely &lt;a href="http://thoughtfaucet.com/news/burlington-vt-web-analytics-wednesday-seo-edition/"&gt;Web Analytics Wednesday&lt;/a&gt; and &lt;a href="http://www.socialmediabreakfast.com/burlington/"&gt;Social Media Breakfasts&lt;/a&gt;, as well as some yearly events like the &lt;a href="http://vtcodecamp.org/"&gt;Vermont Code Camp&lt;/a&gt;, the &lt;a href="http://www.techjamvt.com"&gt;Tech Jam&lt;/a&gt; and the &lt;a href="http://seaba.com/"&gt;South End Art Hop&lt;/a&gt;, that are helping bring various sectors of our creative community together on occasion, but there isn&amp;#8217;t much in the way of events bringing together all the different professions. Just in the past couple of months a new group has started up called the &lt;a href="http://nativecreativevt.org/"&gt;Native Creative Consortium&lt;/a&gt;. The group was founded by several heads of businesses and education leaders in the area, including Michael Jager of JDK and Jeff Rutenbeck of Champlain College. Quoted from their homepage, their mission is &amp;#8220;To unify the energy of Vermont&amp;#8217;s creative community, amplify its potential to create positive change and build awareness of Vermont&amp;#8217;s creative distinction&amp;#8221;. This is truly exciting for our city (and our state). Important people in our creative community banding together to start something like this is EXACTLY what we need right now. I won&amp;#8217;t say much more for now regarding my own plans, but I am very excited for the next couple of months.&lt;/p&gt;

&lt;h2&gt;Harnessing our Young Population&lt;/h2&gt;

&lt;p&gt;If you&amp;#8217;re not familiar with Burlington, know this: we have over 20,000 students living and learning in a, relatively speaking, small city. When you include the 20-something population in that figure, we&amp;#8217;re talking about a veritable force of young minds living in this beautiful city. Although this runs somewhat parallel with what I mention above, another project of mine for 2012 drills down specifically on trying to get the young population connected with one another to create amazing things. Again&amp;#8230; more on that when the time is right.&lt;/p&gt;

&lt;h2&gt;Building the Design Side&lt;/h2&gt;

&lt;p&gt;Although I am most certainly a very visually-oriented front-end developer, if I had to place myself in a category of developer versus designer, it would be the former. Many might recommend that I let that be as it is and focus on building my developer repertoire, but that school of thinking has never really appealed much to me. I always have been and will always pride myself on having an uncommonly widespread skill set, even if that means not being an &amp;#8220;expert&amp;#8221; in any subject. This year I&amp;#8217;m going to focus much of my personal time on my design skills, specifically layout, type and lettering. These have always been subjects of great interest to me, but I&amp;#8217;ve never focused any significant amount of time on them, and certainly never received any sort of formal education regarding them.&lt;/p&gt;

&lt;h2&gt;Public Speaking&lt;/h2&gt;

&lt;p&gt;I will openly admit my desire for some public recognition as I&amp;#8217;m planning these things I&amp;#8217;m talking about here. Not in an egotistical sort of way, but more in the sense that I want to position myself as somebody who is influential and helpful in my geographic area because community building and bringing people together is something from which I derive great pleasure. Part of that is certainly public speaking. A definite goal for myself will be to do a presentation at next years Vermont Code Camp. On what subject? That remains to be seen&amp;#8230;&lt;/p&gt;

&lt;h2&gt;Bring It, Year&lt;/h2&gt;

&lt;p&gt;I must say&amp;#8230; I am more excited for the year ahead than I have been in past several. Excited for what I will build, excited for what the web community will build, and excited for the ways in which I can help bring members of my own geographic community together. So let&amp;#8217;s do this.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="http://www.7dvt.com/2011vermont-creative-types-go-native-new-statewide-consortium"&gt;read more about the Native Creative Consortium&lt;/a&gt; in this Seven Days article.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=YeObbr91KIE:j8GDFgTNgkU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=YeObbr91KIE:j8GDFgTNgkU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=YeObbr91KIE:j8GDFgTNgkU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/YeObbr91KIE" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/professional-goals-for-2012</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Our Obligation as Developers]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/_tmszyg33dg/our-obligation-as-developers" />
    <updated>2011-12-20T10:11:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/our-obligation-as-developers</id>
    <content type="html">&lt;p&gt;There&amp;#8217;s no doubt that semantics are an oft-spoken about topic, especially recently. But let&amp;#8217;s address a different issue.&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;As the HTML5 spec continues to introduce new elements, the debate rages about &lt;a href="http://bit.ly/un03hJ" title="Our Pointless Pursuit of Semantic Value"&gt;the value&lt;/a&gt;, or &lt;a href="http://bit.ly/sxtcz3" title="Pursuing Semantic Value"&gt;lack thereof&lt;/a&gt;, of implementation in our own code. In Divya Manian&amp;#8217;s recent article on Smashing (first link above), she encourages developers to stop worrying about the minute details of the semantic meaning in elements, and I fully agree with her. However, as I read through the comments on Divya&amp;#8217;s article, and many others like it since then, where developers are discussing semantic value, I began to notice a particular sentiment cropping up a bit too frequently for my liking. &lt;strong&gt;Paraphrased&lt;/strong&gt;, these comments would read something like this:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Semantic value or not, it seems like a lot of unnecessary effort as a developer to learn what all these new elements and attributes mean when we should be focusing on creating work.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Or, even more alarming:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The whole HTML5 spec seems bloated and unnecessary to me.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The more I continue to read statements similar to this, the more it gets under my skin. We work and play in an industry that is &lt;em&gt;built&lt;/em&gt; on progression and personal learning. A List Apart has not released their 2011 Survey results yet, but we can see a trend for the past four years (&lt;a href="http://bit.ly/uXgm1G"&gt;2010&lt;/a&gt;, &lt;a href="http://bit.ly/uwM8E4"&gt;2009&lt;/a&gt;, &lt;a href="http://bit.ly/rWjvxw"&gt;2008&lt;/a&gt;, &lt;a href="http://bit.ly/tZIdrh"&gt;2007 (pdf)&lt;/a&gt;) that many people (at least half of the respondents, in most cases) say that their education mattered &amp;#8220;a little&amp;#8221; or &amp;#8220;not at all&amp;#8221;. For those respondents, a group I include myself in, what that means is that we&amp;#8217;ve built our careers on personal learning: scouring the internet for comprehensive examples, following the work of key players, and keeping up with best practices.&lt;/p&gt;

&lt;p&gt;To then read fellow developers inferring that we shouldn&amp;#8217;t be dedicating at least a portion of ourselves to reading about semantics and applying the concepts to our own work is, frankly, &lt;strong&gt;disheartening&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To address the title of this post: Many of us got into this field by our own hard work and self-perserverance. If we want to continue working in a rapidly evolving medium, it&amp;#8217;s not just our responsibility but our &lt;strong&gt;obligation&lt;/strong&gt; to stay on the bleeding edge, and that includes keeping in touch with specs and emerging concepts. It is one thing to raise concerns about the inherent value of semantics and quite another thing to disavow learning about them altogether.&lt;/p&gt;

&lt;p&gt;We as developers &lt;em&gt;earned&lt;/em&gt; the privilege to work in such a dynamic and exciting medium. Let&amp;#8217;s do our part to continue moving it forward.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=_tmszyg33dg:ruK3DqOCVjA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=_tmszyg33dg:ruK3DqOCVjA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=_tmszyg33dg:ruK3DqOCVjA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/_tmszyg33dg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/our-obligation-as-developers</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[phpDate]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/MYWxguGURq4/phpdate" />
    <updated>2011-12-16T17:24:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/phpdate</id>
    <content type="html">&lt;p&gt;phpDate is a tool for generating strings for PHP&amp;#8217;s date() function. &lt;!-- more --&gt;It was completed as a weekend project and uses &lt;strong&gt;actual&lt;/strong&gt; magic. The tool allows you to assemble components of a date and then generate a string to be used with PHP&amp;#8217;s built-in date() function.&lt;/p&gt;

&lt;p&gt;phpDate was created primarily for the sake of my own sanity during a time when I was using date() frequently for a project.&lt;/p&gt;

&lt;p&gt;Sound like something you could make use of? &lt;a href="http://mikefowler.me/phpdate"&gt;Try it out&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img class="center" src="http://mikefowler.me/images/posts/phpdate.jpg" title="Screenshot of phpDate" &gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=MYWxguGURq4:tAY24hE7XE0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=MYWxguGURq4:tAY24hE7XE0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=MYWxguGURq4:tAY24hE7XE0:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/MYWxguGURq4" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/phpdate</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Settling on a Content System]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/nykRsA-Hduc/settling-content-system" />
    <updated>2011-12-14T00:56:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/settling-content-system</id>
    <content type="html">&lt;p&gt;Around the time that I started developing this site I had started reading more about content systems that would generate static sites&lt;!-- more --&gt; (as opposed to a database driven CMS). After a couple days of research I settled on &lt;a href="http://www.staceyapp.com"&gt;Stacey&lt;/a&gt;, a brilliantly simple PHP-based system that builds pages on the fly using markdown-parsed source files. After familiarizing myself with the templating language I got to work creating my theme and finished that a week or so later. I was fairly happy with the ease of it and how I could exercise my obsessive need for file structure organization. It was easy to include additional stylesheets or javascript on any given page, which I knew I would need for any code demos I wanted to post.&lt;/p&gt;

&lt;p&gt;Despite these things I was irked that there was no good way to categorize posts. I wanted to be able to separate my blog posts from my code experiments and projects. I wanted to be able to have an RSS feed that would only contain two of those three categories. Without a good deal of additional coding, Stacey wasn&amp;#8217;t going to be able to offer me that. Retrospectively, I see that I should have defined some of those things for myself ahead of time so that I didn&amp;#8217;t essentially finish building my site and then realize it wasn&amp;#8217;t quite what I needed.&lt;/p&gt;

&lt;p&gt;In any case, something else came along at just the right time. Octopress! The fantastic piece of work by &lt;a href="http://brandonmathis.com/"&gt;Brandon Mathis&lt;/a&gt; walks the perfect line between being easy to use with a lot of features out of the box and maintaining a high level of customizability. I was able to maintain everything I loved about Stacey and gain those few extra additional features, and that made it worth learning &lt;em&gt;another&lt;/em&gt; theme framework literally days before I was going to put the site up.&lt;/p&gt;

&lt;h2&gt;This is Why It&amp;#8217;s Hot&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Github Hosting: It&amp;#8217;s extremely easy to set this up with Octopress, and built in&lt;/li&gt;
&lt;li&gt;A certain amount of automation for creating posts is handled by a Rakefile&lt;/li&gt;
&lt;li&gt;Supports Compass for compiling stylesheets (and why wouldn&amp;#8217;t it)&lt;/li&gt;
&lt;li&gt;Easy Rake command for compiling site in realtime for development (love this)&lt;/li&gt;
&lt;li&gt;Jekyll + Liquid for templating is gorgeous and dead simple&lt;/li&gt;
&lt;li&gt;Customizable to no end - I basically started a theme from nothing and cherry-picked features from the stock theme&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Check out Octopress on its &lt;a href="http://octopress.org/"&gt;official site&lt;/a&gt; or &lt;a href="https://github.com/imathis/octopress"&gt;fork it on Github&lt;/a&gt;. For some more thoughts on Octopress, check out &lt;a href="http://nimbupani.com/redesign-notes.html"&gt;this post over at Divya Manian&amp;#8217;s site&lt;/a&gt; (she also just recently launched a redesign running on Octopress).&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=nykRsA-Hduc:YGdgJKG8cWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=nykRsA-Hduc:YGdgJKG8cWc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=nykRsA-Hduc:YGdgJKG8cWc:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/nykRsA-Hduc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/settling-content-system</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Passing Content to Mixins in Sass]]></title>
    <link href="http://feedproxy.google.com/~r/MikeFowler/~3/1jix2rl4hjU/passing-content-to-mixins-in-sass" />
    <updated>2011-12-08T14:39:00-08:00</updated>
    <id>http://mikefowler.me/thoughts/passing-content-to-mixins-in-sass</id>
    <content type="html">&lt;p&gt;Version 3.2 of SASS adds this incredibly helpful piece of functionality: the ability to pass @content blocks to a mixin. &lt;!-- more --&gt;&lt;del&gt;In order to check this out you&amp;#8217;ll need to install the pre-release build of Sass since the 3.2 stable is not out yet. Open up your shell and run the following:&lt;/del&gt;&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='line'&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;sass&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;&lt;del&gt;This should install an alpha version of Sass 3.2 (alpha 35 at the time of writing). With that installed we can now try out the new feature.&lt;/del&gt;&lt;/p&gt;

&lt;div class="update"&gt;
    &lt;strong&gt;UPDATE:&lt;/strong&gt; Sass 3.2.0 has been released, so if you&amp;#8217;re running the stable version of the gem, you&amp;#8217;re all set.
&lt;/div&gt;


&lt;p&gt;So what do I mean by passing content to a mixin? We can already pass in parameters, isn&amp;#8217;t that the same thing? Not quite. Consider the following example, as &lt;a href="https://gist.github.com/1215856"&gt;elegantly illustrated by Chris Eppstein&lt;/a&gt; in a Gist from several months ago.&lt;/p&gt;

&lt;p&gt;What if we could easily keep our responsive media style rules grouped with the content it defines rules for, but not clutter our file with @media rules? Say, by doing something like this:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;span class='line-number'&gt;12&lt;/span&gt;
&lt;span class='line-number'&gt;13&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="nn"&gt;#content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;960&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; media&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tablet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;      &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;720&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; media&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mobile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;      &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Pretty nice, right? It makes much more sense to keep our media rules inline like this, rather than grouping them into a separate file or section of the document. For small sites it&amp;#8217;s not too big of a deal, but when you&amp;#8217;re dealing with stylesheets for larger sites, it&amp;#8217;s a pain to locate the associated @media rules and make changes in potentially 4 different locations (default, tablet, mobile, wide mobile).&lt;/p&gt;

&lt;p&gt;This is exactly what we &lt;strong&gt;can&lt;/strong&gt; do with this new release of Sass. Here&amp;#8217;s what the mixin looks like on the other end:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class='line-number'&gt;1&lt;/span&gt;
&lt;span class='line-number'&gt;2&lt;/span&gt;
&lt;span class='line-number'&gt;3&lt;/span&gt;
&lt;span class='line-number'&gt;4&lt;/span&gt;
&lt;span class='line-number'&gt;5&lt;/span&gt;
&lt;span class='line-number'&gt;6&lt;/span&gt;
&lt;span class='line-number'&gt;7&lt;/span&gt;
&lt;span class='line-number'&gt;8&lt;/span&gt;
&lt;span class='line-number'&gt;9&lt;/span&gt;
&lt;span class='line-number'&gt;10&lt;/span&gt;
&lt;span class='line-number'&gt;11&lt;/span&gt;
&lt;span class='line-number'&gt;12&lt;/span&gt;
&lt;span class='line-number'&gt;13&lt;/span&gt;
&lt;span class='line-number'&gt;14&lt;/span&gt;
&lt;span class='line-number'&gt;15&lt;/span&gt;
&lt;span class='line-number'&gt;16&lt;/span&gt;
&lt;span class='line-number'&gt;17&lt;/span&gt;
&lt;span class='line-number'&gt;18&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='scss'&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;@mixin&lt;/span&gt;&lt;span class="nf"&gt; media&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@if&lt;/span&gt; &lt;span class="nv"&gt;$type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;tablet&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&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;:768px&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;:991px&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;          &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@else&lt;/span&gt; &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nt"&gt;mobile&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&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;:767px&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;          &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Everything looks pretty standard here except for the addition of our new keyword &amp;#8220;@content&amp;#8221;, which is equal to whatever content you pass into the mixin inside of the curly braces.&lt;/p&gt;

&lt;p&gt;Check out the link above for some more examples of how this might be used. I&amp;#8217;m especially excited for being able to use this for defining animation keyframes. Unfortunately, for now, Compass doesn&amp;#8217;t seem to parse this correctly.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=1jix2rl4hjU:uf9jRc2f3gA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=1jix2rl4hjU:uf9jRc2f3gA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MikeFowler?a=1jix2rl4hjU:uf9jRc2f3gA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MikeFowler?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MikeFowler/~4/1jix2rl4hjU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://mikefowler.me/thoughts/passing-content-to-mixins-in-sass</feedburner:origLink></entry>
  
</feed>
