<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

  <title><![CDATA[The Tude Abides]]></title>
  
  <link href="http://stephentudor.com/" />
  <updated>2013-05-07T09:46:41-04:00</updated>
  <id>http://stephentudor.com/</id>
  <author>
    <name><![CDATA[Stephen Tudor]]></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/stephentudor" /><feedburner:info uri="stephentudor" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title type="html"><![CDATA[Emergent Task Planner]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/Z8DvPBnkRkg/emergent-task-planner.html" />
    <updated>2012-12-19T11:11:00-05:00</updated>
    <id>http://stephentudor.com/blog/2012/12/19/emergent-task-planner</id>
    <content type="html">&lt;p&gt;For a few years now I&amp;#8217;ve used David Seah&amp;#8217;s excellent
&lt;a href="http://davidseah.com/productivity-tools"&gt;Printable CEO&lt;/a&gt; resources, to keep
track of my activity across projects. I stopped doing it a while back for some
reason, but recently rediscovered them, and decided they deserved a mention,
particularly the
&lt;a href="http://davidseah.com/node/the-emergent-task-planner/"&gt;Emergent Task Planner(ETP)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://f.cl.ly/items/0Z0Y0V3Q1i3g0l1i1i3O/ClouDrop%20Dec%204,%202012,%2012:37:35%20AM.png" alt="ETP top section" /&gt;&lt;/p&gt;

&lt;p&gt;The ETP really is great to use, and the pads you can buy from Amazon are of
extremely high quality. What I like most is how much it reduces the friction of
plotting how I&amp;#8217;ve spent my day. It&amp;#8217;s dead simple to just pick up and start
using. I have found the ETP to be an &lt;em&gt;invaluable&lt;/em&gt; asset for logging of how
I spend my time between different projects.&lt;/p&gt;

&lt;p&gt;A word of caution: the ScanTron-phobic among us may wish to look elsewhere for
suitable productivity tools, as the filling in of little ovals features
prominently in these. But for the frictionless capturing of task-based
information in the moment, I haven&amp;#8217;t found anything else that works nearly as
well for me.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/Z8DvPBnkRkg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2012/12/19/emergent-task-planner.html</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Year In Review]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/imJk3OMTwHQ/year-in-review.html" />
    <updated>2012-12-17T23:05:00-05:00</updated>
    <id>http://stephentudor.com/blog/2012/12/17/year-in-review</id>
    <content type="html">&lt;p&gt;It has been a very busy year for my family and me. I suppose this post is
something of an excuse for the lack of updates to this blog, so enjoy the
rambling stream of consciousness below. I have no agenda here, other than to
briefly recall the year&amp;#8217;s highlights.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;p&gt;So 2012 happened. In the offing, I have been blessed to see my son &lt;strong&gt;William&lt;/strong&gt;
turn 3, and my marriage to &lt;strong&gt;Sarah&lt;/strong&gt; turn 7. This year saw me turn 5 times the
age of my marriage. Sarah and I sold our first home together and moved to our
second.&lt;/p&gt;

&lt;p&gt;Sarah participated in a 2-day watercolor workshop put on by &lt;a href="http://www.pafa.org"&gt;PAFA&lt;/a&gt;.
She had a great time, and came home full of inspiration for future art
projects. Her paintings look fabulous.&lt;/p&gt;

&lt;p&gt;My father is retiring this year, after 35 years of teaching and conducting
research at the same university, which also happens to be my &lt;a href="http://www.sju.edu"&gt;alma mater&lt;/a&gt;.
It really is amazing to me how anyone can stay at one place for so long
– literally my whole lifetime. He&amp;#8217;s always been my inspiration, and I owe so
much to him and Mom that I haven&amp;#8217;t the words to express my full gratitude. I&amp;#8217;m
just proud to be their son.&lt;/p&gt;

&lt;p&gt;I still play board games as often as I&amp;#8217;m able, which isn&amp;#8217;t a lot, but though
the quantity of my playing has diminished, I feel the quality has increased
– I&amp;#8217;m more selective about my gaming experiences these days, as my time is
a more precious commodity than it once was. I&amp;#8217;ve been fortunate to make
a number of dear friends through this misunderstood hobby.&lt;/p&gt;

&lt;p&gt;This year also saw my first foray into the world of pencil-and-paper
role-playing games. Some friends and I started a basic Pathfinder campaign.
I find it pretty interesting and fun, though I&amp;#8217;m still learning the ropes.
I went with a pretty straightforward character since I&amp;#8217;m new at it.&lt;/p&gt;

&lt;p&gt;Professionally, I volunteered twice to be a TA for web development classes at
&lt;a href="http://girldevelopit.com/chapters/philadelphia"&gt;GDI Philly&lt;/a&gt;. The first was for
server-side programming with Node.js, and the second was an intermediate HTML
&amp;amp; CSS class.&lt;/p&gt;

&lt;p&gt;I am as much of a fan of Vim now as I ever was. I&amp;#8217;m writing this post in Vim
right now.&lt;/p&gt;

&lt;p&gt;At &lt;a href="http://empathylab.com"&gt;my day job&lt;/a&gt;, I managed to get my fingers into an
awful lot of different pies – heres a recap of the busy year I had at work:&lt;/p&gt;

&lt;h3&gt;Q1&lt;/h3&gt;

&lt;blockquote&gt;&lt;p&gt;Wrapped up my involvement leading front-end development for the brand-new
redesign of the &lt;a href="http://redcross.org"&gt;American Red Cross&lt;/a&gt; website, which
eventually went on to a successful launch in September of this year. I&amp;#8217;d
been on the project since the kickoff in March 2011. If you donated to
Hurricane Sandy victims this year, you likely used code that I wrote.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h3&gt;Q2&lt;/h3&gt;

&lt;blockquote&gt;&lt;p&gt;Built a revolutionary JavaScript proof-of-concept app with my talented
co-worker at the time, &lt;a href="http://vickaita.com"&gt;Vick Aita&lt;/a&gt;. The proof-of-concept
won my company the contract to develop the full application for the client.
This work had me making several trips out to California, and one trip to
Belgium.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h3&gt;Q3&lt;/h3&gt;

&lt;blockquote&gt;&lt;p&gt;My company kicked off 3 simultaneous responsive web design projects for
customers in the media &amp;amp; entertainment space, and I was tapped to work across
the projects with each team so that they could deliver consistently
high-quality solutions.&lt;/p&gt;&lt;/blockquote&gt;

&lt;h3&gt;Q4&lt;/h3&gt;

&lt;blockquote&gt;&lt;p&gt;As I continued to oversee our responsive web design development efforts, my
focus shifted to some pressing departmental needs, such as documenting clearer
development guidelines for our team, and helping to start a framework/pattern
library of reusable components for future projects. I continued to support
various client projects as the need arose. Toward the end of the year,
I reunited with the aforementioned JS project from Q2, which is now in full
development with a dedicated team.&lt;/p&gt;&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h4&gt;May you all have a wonderful ending to 2012, and an equally promising beginning to 2013!&lt;/h4&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/imJk3OMTwHQ" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2012/12/17/year-in-review.html</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Developers Are Artists]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/CnAidQcjvsc/developers-are-artists.html" />
    <updated>2012-10-07T11:53:00-04:00</updated>
    <id>http://stephentudor.com/blog/2012/10/07/developers-are-artists</id>
    <content type="html">&lt;p&gt;Software development is, in part, an artistic practice. As a developer, your
brush is a keyboard; your canvas, a text editor. You derive satisfaction from
crafting solutions to real problems, and it is your creativity that brings the
solutions to life.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;h2&gt;Beautiful Code&lt;/h2&gt;

&lt;p&gt;Development is necessarily a balancing act of competing concerns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Maintainability&lt;/li&gt;
&lt;li&gt;Usability&lt;/li&gt;
&lt;li&gt;Accessibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beauty&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Yes, we care very much about beauty in our code, but unlike most other
concerns, it is subjective by nature. Beauty is very much in the eye of the
beholder.&lt;/p&gt;

&lt;p&gt;Teaching how to design beautiful code is as challenging as teaching &amp;#8220;the
practice of software development.&amp;#8221; Each of us is left to ourselves to figure it
out, either by following the example of others, or stumbling upon it ourselves
in a blinding aura of caffeine-induced revelation. More often than not, at
least in my experience, it&amp;#8217;s the former.&lt;/p&gt;

&lt;h3&gt;So&amp;hellip; Artists?&lt;/h3&gt;

&lt;p&gt;As tempting as it is to draw upon the analogy of being &amp;#8220;underappreciated in our
time,&amp;#8221; it is noteworthy that developers often experience a similar creative arc
as artists of other disciplines. A great deal of code makes its initial
appearance as a &amp;#8220;s****y first draft,&amp;#8221; to quote Anne LaMott. Before that, it
may even have begun its life as a simple whiteboard doodle. Eventually, we
revise and refactor that first idea as we gain a fuller understanding of the
problem, and the best code eventually emerges. More often than not, it also
happens to be more elegant code, the rough edges having been smoothed out, and
the redundancy reduced. If all goes well, the developer can put down her brush
at this point and take a step back to take in the full scope of her work.&lt;/p&gt;

&lt;figure class='code'&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='sass'&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$break-small&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="na"&gt;$break-large&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="err"&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;@mixin&lt;/span&gt;&lt;span class="nf"&gt; respond-to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$media&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@if&lt;/span&gt; &lt;span class="nv"&gt;$media&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;handhelds&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&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;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;break-small&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nt"&gt;content&lt;/span&gt;&lt;span class="o"&gt;;&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 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;media&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nt"&gt;medium-screens&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&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;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;break-small&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;and&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;max-width&lt;/span&gt;&lt;span class="nd"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;break-large&lt;/span&gt; &lt;span class="nt"&gt;-&lt;/span&gt; &lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nt"&gt;content&lt;/span&gt;&lt;span class="o"&gt;;&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 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;media&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nt"&gt;wide-screens&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&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;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;break-large&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nt"&gt;content&lt;/span&gt;&lt;span class="o"&gt;;&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 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="nc"&gt;.profile-pic&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;float&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;left&lt;/span&gt;&lt;span class="err"&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;250&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="err"&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; respond-to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handhelds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="no"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt; &lt;span class="err"&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; respond-to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;medium&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;screens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="no"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="err"&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; respond-to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wide-screens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="no"&gt;float&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;none&lt;/span&gt;&lt;span class="err"&gt;;&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;In the example above (from &lt;a href="http://thesassway.com/intermediate/responsive-web-design-in-sass-using-media-queries-in-sass-32"&gt;The Sass Way&lt;/a&gt;),
the &lt;code&gt;respond-to&lt;/code&gt; Sass mixin provides a more attractive way to specify @media
queries in CSS, abstracting away some of the ugliness for the author.
Obviously, abstraction isn&amp;#8217;t always the best course of action, but oftentimes
the biggest reason for doing it is to end up with a cleaner codebase.&lt;/p&gt;

&lt;h2&gt;Beauty often takes care of itself.&lt;/h2&gt;

&lt;p&gt;We must remember that beauty in code is a means, not an end, to our
satisfaction in development work. Most of us provide our services for hire. In
practical terms, each of those other competing concerns has a real link to
business value, and will tend to trump &amp;#8220;beauty&amp;#8221; when the two are in conflict.
However, I find that if everything else properly accounted for, beauty will
often take care of itself in the process.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ve been talking about this for a while now.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2007 &amp;ndash; O&amp;#8217;Reilly publishes the book &lt;a href="http://shop.oreilly.com/product/9780596510046.do"&gt;Beautiful Code&lt;/a&gt;, a collection of essays by notable members of the profession on how they approach programming problems in ways they deem beautiful.&lt;/li&gt;
&lt;li&gt;2008 &amp;ndash; Jeff Atwood proclaims that &lt;a href="http://www.codinghorror.com/blog/2008/02/code-isnt-beautiful.html"&gt;Code Isn&amp;#8217;t Beautiful&lt;/a&gt; in reaction to O&amp;#8217;Reilly&amp;#8217;s book, finding beauty not in the code itself, but in the ideas and algorithms beneath the surface.&lt;/li&gt;
&lt;li&gt;2009 &amp;ndash; Chris Coyier describes &lt;a href="http://css-tricks.com/what-beautiful-html-code-looks-like/"&gt;What Beautiful HTML Code Looks Like&lt;/a&gt;, focusing on how beauty in HTML is derived from craftsmanship.&lt;/li&gt;
&lt;li&gt;2010 &amp;ndash; Martin van Emden argues &lt;a href="http://vanemden.wordpress.com/2010/10/05/in-defense-of-beautiful-code-2/"&gt;In Defense of Beautiful Code&lt;/a&gt;, demonstrating that there are ways to write the same code that are more beautiful than others.&lt;/li&gt;
&lt;li&gt;2011 &amp;ndash; Alberto Gutierrez discusses &lt;a href="http://www.makinggoodsoftware.com/2011/03/27/the-obsession-with-beautiful-code-the-refactor-syndrome/"&gt;The Obsession With Beautiful Code&lt;/a&gt;, underscoring the dangers of pursuing beauty for beauty&amp;#8217;s sake.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Gutierrez&amp;#8217; post particularly resonates with me, despite its being the least
complementary to my point of view, because I have observed many of the
tendencies he lists in myself as well as in many of my peers. Developers need
to be aware that subjective coding style can be conflated with beauty on
occasion, and it often has little to do with code quality. However, I do take
issue with his claim that &lt;a href="http://www.makinggoodsoftware.com/2009/11/09/the-four-golden-rules-to-be-a-better-software-developer/"&gt;all code is crap&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While it is true that much of what we work on is, at best, &lt;em&gt;ephemeral&lt;/em&gt; even if
it does end up seeing the light of day, what we gain in experience will stay
with us for future opportunities to create beautiful code.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/CnAidQcjvsc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2012/10/07/developers-are-artists.html</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[KSS and Middleman]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/Z_F_fsnuIaY/kss-and-middleman.html" />
    <updated>2012-01-10T15:11:00-05:00</updated>
    <id>http://stephentudor.com/blog/2012/01/10/kss-and-middleman</id>
    <content type="html">&lt;p&gt;I love the idea of building an &amp;#8220;interactive style guide&amp;#8221; for a website
design.  I really do. However, working in Agencyland, it can be
extremely difficult to budget enough time for this kind of tool when
seemingly higher-priority tasks pile up. Right or wrong, the utopian
vision of a living style guide often becomes a foregone luxury in the
throes of looming deadlines.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Assumes the reader understands the basics of Ruby and CSS.&lt;/em&gt;&lt;/p&gt;

&lt;!-- more --&gt;


&lt;h2&gt;Middleman&lt;/h2&gt;

&lt;p&gt;For an upcoming project at &lt;a href="http://empathylab.com"&gt;work&lt;/a&gt;, I&amp;#8217;ll be
leading the effort to author static HTML templates for a different group
of software integrators to wire up to a complex back-end architecture
(rhymes with Shmeb-shmere).&lt;/p&gt;

&lt;p&gt;We are also going to be building a whole front-end stack with CSS and
JavaScript to boot, so it makes sense to use a solid static framework to
take the pain away from developing a massive amount of templates without
any server-side help. The bottom line is that we need to be able to
export flat HTML files that work the same as the development templates.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href="http://middlemanapp.com"&gt;Middleman&lt;/a&gt;, a loosely-coupled, yet
carefully curated collection of Ruby libraries that all contribute to a
framework that is much greater than the sum of its parts. I won&amp;#8217;t go
into all of its features here&amp;thinsp;&amp;mdash;&amp;thinsp;you can visit the
Middleman &lt;a href="http://middlemanapp.com"&gt;site&lt;/a&gt; for everything you need to
know.&lt;/p&gt;

&lt;p&gt;For our purposes, Middleman looks to be a robust platform on which to
build our static site.&lt;/p&gt;

&lt;h2&gt;KSS&lt;/h2&gt;

&lt;p&gt;I am a closet fan of documentation specs like RubyDoc and JSDoc, but
they often introduce a lot of heavy baggage for developers.
&lt;a href="http://tomdoc.org"&gt;TomDoc&lt;/a&gt; came on the scene not too long ago as a
really simple doc spec that Githubbers use in their in-house Ruby code,
and I was ecstatic when another Github guy, &lt;a href="http://warpspire.com"&gt;Kyle Neath&lt;/a&gt;,
released his own &lt;a href="http://github.com/kneath/kss"&gt;KSS&lt;/a&gt; project in late
2011. I think I&amp;#8217;ve subconsciously been yearning for this kind of CSS
documentation support for some time.&lt;/p&gt;

&lt;p&gt;KSS is a documentation spec for CSS (one of the first of its kind that
I&amp;#8217;ve heard of) that can be parsed by Ruby. This helps us do things
like&amp;hellip; generating an interactive style guide. It&amp;#8217;s certainly not a
silver bullet, but KSS will lower some of the administrative barriers to
putting together helpful CSS documentation.&lt;/p&gt;

&lt;h2&gt;KSS-ing Middleman&lt;/h2&gt;

&lt;p&gt;I thought it would be a good idea to try to port some of the
&lt;a href="https://github.com/kneath/kss/tree/master/example"&gt;KSS example app&lt;/a&gt;
code over to my basic Middleman app. The example shows several
variations of form submit button styles, including states such as hover
and disabled, which makes for an excellent use case.&lt;/p&gt;

&lt;h3&gt;The Styles&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;m using &lt;a href="http://sass-lang.com"&gt;Sass&lt;/a&gt; and
&lt;a href="http://compass-style.org"&gt;Compass&lt;/a&gt;, with Middleman, so I did a quick
port of Kyle&amp;#8217;s example button CSS to Sass with some appropriate Compass
mixins. I found that KSS broke when used with the original terse Sass
format, but it did work fine with the newer SCSS format. I&amp;#8217;m not
certain, but it&amp;#8217;s possible that this issue may be resolved in KSS in the
future.&lt;/p&gt;

&lt;p&gt;Below is the result of porting the button CSS to &lt;code&gt;_button.scss&lt;/code&gt;. The
comment block at the top is where the documentation magic happens. You
just describe what something is, specify a list of different states, and
then reference a numbered section of the style guide. That&amp;#8217;s it.&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;span class='line-number'&gt;37&lt;/span&gt;
&lt;span class='line-number'&gt;38&lt;/span&gt;
&lt;span class='line-number'&gt;39&lt;/span&gt;
&lt;span class='line-number'&gt;40&lt;/span&gt;
&lt;span class='line-number'&gt;41&lt;/span&gt;
&lt;span class='line-number'&gt;42&lt;/span&gt;
&lt;span class='line-number'&gt;43&lt;/span&gt;
&lt;span class='line-number'&gt;44&lt;/span&gt;
&lt;span class='line-number'&gt;45&lt;/span&gt;
&lt;span class='line-number'&gt;46&lt;/span&gt;
&lt;span class='line-number'&gt;47&lt;/span&gt;
&lt;span class='line-number'&gt;48&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;// Your standard form button.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// :hover    - Highlights when hovering.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// :disabled - Dims the button when disabled.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// .primary  - Indicates button is the primary action.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// .smaller  - A smaller button&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Styleguide 5.1.1&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="err"&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="mh"&gt;#f5f5f5&lt;/span&gt;&lt;span class="err"&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; background-image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;#f5f5f5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;#e5e5e5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="no"&gt;solid&lt;/span&gt; &lt;span class="mh"&gt;#ddd&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;border-bottom-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#bbb&lt;/span&gt;&lt;span class="err"&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; border-radius&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&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;1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nf"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.15&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="err"&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="mh"&gt;#666&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;pointer&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="s2"&gt;&amp;quot;Helvetica Neue&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Helvetica&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-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="kt"&gt;px&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-weight&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;bold&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;normal&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&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;15&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="err"&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; text-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;1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nf"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.9&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&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="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;.primary&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;.primary&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="err"&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="mh"&gt;#fff&lt;/span&gt;&lt;span class="err"&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="mh"&gt;#8add6d&lt;/span&gt;&lt;span class="err"&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; background-image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;#8add6d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;#60b044&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;border-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#74bb5a&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;border-bottom-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#509338&lt;/span&gt;&lt;span class="err"&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;1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nf"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="err"&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; text-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;-1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nf"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="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 class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;.smaller&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-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="kt"&gt;px&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 class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="err"&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="mh"&gt;#337797&lt;/span&gt;&lt;span class="err"&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="mh"&gt;#f0f7fa&lt;/span&gt;&lt;span class="err"&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; background-image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;#f0f7fa&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;#d8eaf2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;border-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#cbe3ee&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;border-bottom-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#97c7dd&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 class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:disabled&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.5&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 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;p&gt;You actually &lt;em&gt;do&lt;/em&gt; need to manage the numeric structure of the style guide
yourself. However, I appreciate that KSS makes you maintain control over
the meaningful aspects of organizing a style guide, while making it
possible to automate the tedious parts.&lt;/p&gt;

&lt;h3&gt;The Config&lt;/h3&gt;

&lt;p&gt;For the style guide to look nice on the front end, there is also a small
amount of boilerplate CSS and JavaScript code to make some of the magic
happen, so I pulled those files in and called them from a separate
layout, &lt;code&gt;layouts/styleguide.erb&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The KSS example app runs on Sinatra, and Middleman also basically runs
on Sinatra with some abstractions on top, so setting up the
configuration wasn&amp;#8217;t too tough. After adding &lt;code&gt;gem "kss", "~&amp;gt; 0.1.1"&lt;/code&gt; to
the Gemfile and running &lt;code&gt;bundle install&lt;/code&gt;, I added the following to
Middleman&amp;#8217;s &lt;code&gt;config.rb&lt;/code&gt; file:&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;/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="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;kss&amp;quot;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/styleguide/*&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:layout&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:styleguide&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="vi"&gt;@styleguide&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Kss&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;source/css&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="n"&gt;helpers&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="c1"&gt;# Generates a styleguide block.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;styleguide_block&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="vi"&gt;@section&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@styleguide&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="vi"&gt;@example_html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;kss_capture&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="vi"&gt;@_out_buf&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;partial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;styleguide/block&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="c1"&gt;# Captures the result of a block within an erb template without spitting it&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="c1"&gt;# to the output buffer.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;kss_capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="vi"&gt;@_out_buf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@_out_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;yield&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="vi"&gt;@_out_buf&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;ensure&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="vi"&gt;@_out_buf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;end&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;For all style guide templates, the above configuration exposes a
variable containing a Ruby representation of all KSS-documented CSS in
the site (because KSS parses all documentation blocks in the CSS). A
couple of helpers are defined that the templates will have access to, in
order to handle the generated style guide block.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Due to a bug in Middleman 3.0 beta, wildcard file paths did not set
local variables correctly. This bug should be resolved in 3.0 final.
Additionally, I suspect that the &lt;/em&gt;&lt;code&gt;kss_capture&lt;/code&gt;&lt;em&gt; helper is not exactly
optimal for use with Middleman, but I haven&amp;#8217;t taken the time to refactor
the example code beyond simply getting it working. It was originally
named &lt;/em&gt;&lt;code&gt;capture&lt;/code&gt;&lt;em&gt; in the example, but I renamed it to prevent conflicts
with the existing Middleman &lt;/em&gt;&lt;code&gt;capture&lt;/code&gt;&lt;em&gt; helper, which I would have
probably tried to use if it was available inside the config file.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;The Templates&lt;/h3&gt;

&lt;p&gt;A partial template needs to be defined for rendering every style guide
section. The template will be used by the &lt;code&gt;styleguide_block&lt;/code&gt; helper
defined in the config above: &lt;code&gt;styleguide/_block.erb&lt;/code&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;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;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='erb'&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;&amp;lt;div class=&amp;quot;styleguide-example&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &amp;lt;h3&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="vi"&gt;@section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;section&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt; &amp;lt;em&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="vi"&gt;@section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;lt;/em&amp;gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &amp;lt;div class=&amp;quot;styleguide-description&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;    &amp;lt;p&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="vi"&gt;@section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;    &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modifiers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;any?&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;      &amp;lt;ul class=&amp;quot;styleguide-modifier&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;        &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="vi"&gt;@section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modifiers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;          &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;lt;/strong&amp;gt; - &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;        &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;      &amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;    &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &amp;lt;div class=&amp;quot;styleguide-element&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;    &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="vi"&gt;@example_html&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="vi"&gt;@section&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modifiers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;    &amp;lt;div class=&amp;quot;styleguide-element styleguide-modifier&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;      &amp;lt;span class=&amp;quot;styleguide-modifier-name&amp;quot;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;      &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="vi"&gt;@example_html&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;$modifier_class&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot; &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;class_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;    &amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;&amp;lt;/div&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;p&gt;In &lt;code&gt;styleguide/buttons.html.erb&lt;/code&gt;, I added the following template call:&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;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='erb'&gt;&lt;span class='line'&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;styleguide_block&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;5.1.1&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="x"&gt;  &amp;lt;button class=&amp;quot;$modifier_class&amp;quot;&amp;gt;Default Button&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="x"&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;Note that there is a single &lt;code&gt;button&lt;/code&gt; element in the block. This is where
the magic happens, because it passes the &lt;code&gt;button&lt;/code&gt; to &lt;code&gt;styleguide_block&lt;/code&gt;,
which imports the &lt;code&gt;styleguide/block&lt;/code&gt; partial for the style guide section.&lt;/p&gt;

&lt;p&gt;The partial parses the KSS representation of the documented CSS for the
given section of the style guide (5.1.1). It prints out the section
number and SCSS filename, adds the documentation text to the page,
cycles through each CSS modifier of &lt;code&gt;button&lt;/code&gt;, and generates a new
&lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; tag for each modifier. The resulting section of the style
guide will look like this:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://stephentudor.com/images/2012-01-10-kss-and-middleman/styleguide.png" title="Style guide example" &gt;&lt;/p&gt;

&lt;p&gt;The original basic &lt;code&gt;button&lt;/code&gt; element is listed first, followed by
accurate examples of all of its documented modifiers. The KSS JavaScript
file fakes the pseudo-selectors &lt;code&gt;:hover&lt;/code&gt; and &lt;code&gt;:disabled&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Onward&lt;/h2&gt;

&lt;p&gt;For my project, at least, this is an encouraging proof-of-concept that I
plan to take forward. In the meantime, it looks like there is a generous
amount of potential in both Middleman and KSS, so be sure to check out
each of these projects.&lt;/p&gt;

&lt;p&gt;If you have used either Middleman or KSS, what has your experience been
like thus far?&lt;/p&gt;

&lt;h2&gt;Update 2012-02-04&lt;/h2&gt;

&lt;p&gt;I have pushed my working code to a &lt;a href="http://github.com/smt/middleman-kss"&gt;Github repo&lt;/a&gt;.
Some of the gems are a little out of date, but I wanted to get my
initial version up first, and then work through any issues that might
arise from updating libraries. Please let me know what you think; I&amp;#8217;m
always open to suggestions for improvement.&lt;/p&gt;

&lt;p&gt;After checking out the code, just run &lt;code&gt;middleman&lt;/code&gt; like any other
Middleman app, and browse to &lt;code&gt;http://localhost:4567&lt;/code&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/Z_F_fsnuIaY" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2012/01/10/kss-and-middleman.html</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[10 Vim Techniques for Novices]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/-K4QZQt6O_o/10-vim-techniques-for-novices.html" />
    <updated>2011-08-04T08:37:00-04:00</updated>
    <id>http://stephentudor.com/blog/2011/08/04/10-vim-techniques-for-novices</id>
    <content type="html">&lt;p&gt;Since I switched to Vim as my primary editor back in March of this year,
I have discovered a wealth of useful tricks that help me get things
done. Most of these techniques are truly indispensible, and should find
a place in any Vim user&amp;#8217;s quiver.&lt;/p&gt;

&lt;p&gt;I should also note that at this time, I&amp;#8217;m nowhere near expert-level in
my Vim abilities, so this post is intended to share some commands,
patterns, and configurations with other Vim users who are still getting
their feet wet with the editor. Experienced Vimmers will already know
all this stuff, and more power to them. This is for the Vim n00bs out
there.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;h3&gt;1. Open with Cursor at Last Edit Position&lt;/h3&gt;

&lt;p&gt;This one isn&amp;#8217;t so much a technique as it is a preference. If you make a
change to a file, and then re-open it later, the following snippet in
your .vimrc will position the cursor at the last spot you made an edit
prior to closing the buffer or Vim itself:&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='vim'&gt;&lt;span class='line'&gt;autocmd &lt;span class="nb"&gt;BufReadPost&lt;/span&gt; *
&lt;/span&gt;&lt;span class='line'&gt;\ &lt;span class="k"&gt;if&lt;/span&gt; line&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;#39;\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; line&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;#39;\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; line&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;$&amp;quot;&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;\   exe &lt;span class="c"&gt;&amp;quot;normal! g`\&amp;quot;&amp;quot; |&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;\ &lt;span class="k"&gt;endif&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;!-- " --&gt;


&lt;h3&gt;2. Visual Block Mode&lt;/h3&gt;

&lt;p&gt;You might know about Visual mode &lt;code&gt;v&lt;/code&gt;, and even Visual Line mode &lt;code&gt;V&lt;/code&gt;,
but do you know about Visual Block mode? You can enter it with &lt;code&gt;^v&lt;/code&gt;
(that&amp;#8217;s &lt;code&gt;CTRL-v&lt;/code&gt;), and then use Vim movement commands to select text
in a box of columns and rows, rather than by lines. This can allow you
to make some really powerful edits.&lt;/p&gt;

&lt;p&gt;Other editors, such as TextMate, can perform a similar blockwise
selection using the Alt/Option key. Well, MacVim can do the same thing.
Hold down Alt or Option, and click/drag with the mouse. I want to
caution you against relying on this too much, though. Vim is designed to
reward you for keeping your fingers &lt;em&gt;on the keys&lt;/em&gt; as much as possible.&lt;/p&gt;

&lt;h3&gt;3. Quick Letter Swap&lt;/h3&gt;

&lt;p&gt;If I accidentally type &amp;#8220;teh&amp;#8221; instead of &amp;#8220;the&amp;#8221;, the natural reaction
would be to go back, select those two letters, and retype them, but
there&amp;#8217;s a simple way to swap any two adjacent letters:&lt;/p&gt;

&lt;p&gt;Move the cursor to the first letter of the swapped pair (in this
example, the &amp;#8220;e&amp;#8221; of &amp;#8220;teh&amp;#8221;) and type &lt;code&gt;xp&lt;/code&gt;. This cuts the character the
cursor is on, and immediately pastes it after the next.&lt;/p&gt;

&lt;h3&gt;4. Repeat Last Edit (the magic dot)&lt;/h3&gt;

&lt;p&gt;The glorious &lt;code&gt;.&lt;/code&gt; is a very powerful command, and probably my
most-often used in this list. Typing &lt;code&gt;.&lt;/code&gt; in normal mode repeats your
most recent edit. It&amp;#8217;s dead simple to use, and just plain awesome in so
many contexts.&lt;/p&gt;

&lt;h3&gt;5. Move and Edit by Text Object&lt;/h3&gt;

&lt;p&gt;At the root of Vim&amp;#8217;s idiosyncratic design is a variety of ways to easily
move around a text file and edit it effortlessly:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;w&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; move the cursor forward and backward by &lt;em&gt;word&lt;/em&gt;.  &lt;br/&gt;
&lt;code&gt;(&lt;/code&gt; and &lt;code&gt;)&lt;/code&gt; move the cursor forward and backward by &lt;em&gt;sentence&lt;/em&gt;.  &lt;br/&gt;
&lt;code&gt;{&lt;/code&gt; and &lt;code&gt;}&lt;/code&gt; move the cursor forward and backward by &lt;em&gt;paragraph&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You can combine text objects with counts and actions to perform very
powerful, concise edits.&lt;/p&gt;

&lt;p&gt;One of my favorite commands is &lt;code&gt;ciw&lt;/code&gt;, and the pnemonic for it is Change
Inside Word. If I can get my cursor &lt;em&gt;anywhere&lt;/em&gt; in a word, it doesn&amp;#8217;t
matter which character it&amp;#8217;s on, a quick &lt;code&gt;ciw&lt;/code&gt; will cut the whole word
and change to insert mode so I can enter new text in its place. No
awkward text selection or repetitive deletion keying. Just &lt;code&gt;ciw&lt;/code&gt; and
type the new word.&lt;/p&gt;

&lt;h3&gt;6. Delete, Yank, and Paste a Line&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;dd&lt;/code&gt; will &amp;#8220;delete&amp;#8221; a line, which is the same as &lt;em&gt;cut&lt;/em&gt;.  &lt;br/&gt;
&lt;code&gt;yy&lt;/code&gt; will &amp;#8220;yank&amp;#8221; a line, which is the same as &lt;em&gt;copy&lt;/em&gt;.  &lt;br/&gt;
&lt;code&gt;p&lt;/code&gt; will paste at the line &lt;em&gt;below&lt;/em&gt; the cursor.  &lt;br/&gt;
&lt;code&gt;P&lt;/code&gt; or &lt;code&gt;SHIFT-p&lt;/code&gt; will paste at the line &lt;em&gt;above&lt;/em&gt; the cursor.&lt;/p&gt;

&lt;p&gt;Any of these commands can be preceded by a numeric count: &lt;code&gt;10p&lt;/code&gt; will
paste 10 times.&lt;/p&gt;

&lt;h3&gt;7. Easy Repeated Characters&lt;/h3&gt;

&lt;p&gt;Say I am working in Markdown format &amp;#8211; which I often am; these blog posts
are is written that way &amp;#8211; and I want to use an underline-style H2:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;This is my heading
==================
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I would prefer not to have to type who-knows-how-many equals signs in a
row. How annoying. Luckily, something like this is dead simple in Vim.&lt;/p&gt;

&lt;p&gt;After typing your header, exit to normal mode and, with your cursor
still on the line, type &lt;code&gt;yyp&lt;/code&gt; to duplicate the line. The text now looks
like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;This is my heading
This is my heading
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;At this point, your cursor should on the first character of the second
line. Type &lt;code&gt;v$r=&lt;/code&gt; to visually select the text to the end of the line,
and replace all the characters with equals signs. That&amp;#8217;s it: the full
command is &lt;code&gt;yypv$r=&lt;/code&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Honza Pokorny pointed out a shorter alternative to this command: &lt;code&gt;YpVr=&lt;/code&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; Santosh Kumar observed that &lt;code&gt;V&lt;/code&gt; may not be able to replace
&lt;code&gt;v$&lt;/code&gt; in every situation, particularly if there is whitespace at the
beginning of the line.&lt;/p&gt;

&lt;p&gt;If you ever just want 80 stars in a row, say, to section off a part of
source code, you could just type &lt;code&gt;80i*&amp;lt;Esc&amp;gt;&lt;/code&gt; &amp;#8211; easy.&lt;/p&gt;

&lt;h3&gt;8. Quick Find&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/&lt;/code&gt; will switch to a mode that allows you to enter a search string
for the current buffer. If you have the proper settings in your .vimrc,&lt;/p&gt;

&lt;p&gt;Vim will even do an incremental search. When you have the search term
you want, hit &lt;code&gt;&amp;lt;Enter&amp;gt;&lt;/code&gt; and cycle forward through the search results &lt;em&gt;in
the buffer&lt;/em&gt; with &lt;code&gt;n&lt;/code&gt;, and backwards with &lt;code&gt;N&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;?&lt;/code&gt; does the same thing as &lt;code&gt;/&lt;/code&gt;, only in the reverse direction.
You can also use &lt;code&gt;*&lt;/code&gt; to quick-search the word your cursor is
currently on.&lt;/p&gt;

&lt;p&gt;For some sane defaults, here are some of my .vimrc search settings:&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;/pre&gt;&lt;/td&gt;&lt;td class='code'&gt;&lt;pre&gt;&lt;code class='vim'&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;hlsearch&lt;/span&gt;   &lt;span class="c"&gt;&amp;quot; Highlight search matches&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;incsearch&lt;/span&gt;  &lt;span class="c"&gt;&amp;quot; Highlight matches as you type&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;ignorecase&lt;/span&gt; &lt;span class="c"&gt;&amp;quot; Case-insensitive searching&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;smartcase&lt;/span&gt;  &lt;span class="c"&gt;&amp;quot; ...but case-sensitive if expression has caps&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;wrapscan&lt;/span&gt;   &lt;span class="c"&gt;&amp;quot; Set the search scan to wrap around the file&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt;&amp;quot; Press space bar to turn off search highlighting&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c"&gt;&amp;quot; and clear any message displayed&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Space&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; :&lt;span class="k"&gt;nohl&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Bar&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;:echo&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&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;h3&gt;9. Search &amp;amp; Replace in a Buffer&lt;/h3&gt;

&lt;p&gt;Few of us can really consider ourselves experts with regular
expressions, but if you have ever used them for any kind of text
processing task, you realize how incredibly powerful (and yes, sometimes
befuddling) they can be. Regexes are used in Vim&amp;#8217;s native search and
replace.&lt;/p&gt;

&lt;p&gt;It is necessary to specify a range when doing a search and replace, and
generally, you will want the action to be global, so you would type
&lt;code&gt;:%s/pattern/replacement/g&lt;/code&gt; and hit &lt;code&gt;&amp;lt;Enter&amp;gt;&lt;/code&gt;. Done. The &lt;code&gt;%&lt;/code&gt;
represents the entire buffer, while the &lt;code&gt;s///g&lt;/code&gt; structure is the
standard search and replace command syntax.&lt;/p&gt;

&lt;p&gt;To search/replace within a given selection, first select your desired
range in visual mode, then hit &lt;code&gt;:&lt;/code&gt;. Vim will pre-fill your range as
&lt;code&gt;'&amp;lt;,'&amp;gt;&lt;/code&gt;, which means the current selection. Use the same &lt;code&gt;s///g&lt;/code&gt;
syntax as before to restrict the action to the selection you specified.&lt;/p&gt;

&lt;p&gt;The trailing &lt;code&gt;/g&lt;/code&gt;? That&amp;#8217;s an option that I usually like to pass, as it
tells Vim to replace all matches, not just the first one.&lt;/p&gt;

&lt;h3&gt;10. Project Search &amp;amp; Replace&lt;/h3&gt;

&lt;p&gt;It&amp;#8217;s a common complaint: project search &amp;amp; replace &amp;#8211; an operation
that spans one or more files &amp;#8211; is one of the few glaring weaknesses of
Vim. Until there is better support for this feature in Vim itself, it is
possible to pull off in an unorthodox way: don&amp;#8217;t use Vim! Try this on
for size (from the command line):&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='sh'&gt;&lt;span class='line'&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sed -i &lt;span class="s1"&gt;&amp;#39;s/pattern/replacement/&amp;#39;&lt;/span&gt; &amp;lt;files&amp;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;From within Vim, while in &lt;code&gt;:&lt;/code&gt; command mode, you can use the same
command, only beginning with a &lt;code&gt;!&lt;/code&gt;. This pipes the command directly
to a shell session and does the business. Note the relative consistency
of sed&amp;#8217;s search &amp;amp; replace syntax with Vim&amp;#8217;s native one.&lt;/p&gt;

&lt;p&gt;Passing commands from Vim to external programs is common, and often
encouraged. Select some text and run the &lt;code&gt;:sort&lt;/code&gt; command on it sometime
&amp;#8211; it actually calls the external &lt;code&gt;sort&lt;/code&gt; program, which passes the
sorted lines back to Vim.&lt;/p&gt;

&lt;h2&gt;My dotvim&lt;/h2&gt;

&lt;p&gt;I wouldn&amp;#8217;t consider &lt;a href="http://github.com/smt/dotfiles"&gt;my Vim configuration&lt;/a&gt;
to be anything special, but it&amp;#8217;s mine, and I am always tweaking it (you
Vim people know what I&amp;#8217;m talking about). If you are curious about what I
might have in there, you can feel free have a look at it &amp;#8211; it&amp;#8217;s on
GitHub, of course, and all the plugins are set up as Git submodules with
Pathogen.&lt;/p&gt;

&lt;h2&gt;Dive into Vim!&lt;/h2&gt;

&lt;p&gt;The nuts and bolts of how to use Vim are, of course, outside the scope
of this article. &lt;a href="http://vimcasts.org"&gt;VimCasts&lt;/a&gt;, &lt;a href="http://peepcode.com/products/smash-into-vim-i"&gt;PeepCode&lt;/a&gt;,
and Vim&amp;#8217;s built-in tutorial are at your disposal. That being said, I&amp;#8217;m
willing to attempt to answer most questions you might have about Vim,
either on &lt;a href="http://twitter.com/tudorstudio"&gt;Twitter&lt;/a&gt; or via the comments.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/-K4QZQt6O_o" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2011/08/04/10-vim-techniques-for-novices.html</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[OOCSS, For Great Justice]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/jJWe8LmJDLY/oocss-for-great-justice.html" />
    <updated>2011-07-17T13:55:00-04:00</updated>
    <id>http://stephentudor.com/blog/2011/07/17/oocss-for-great-justice</id>
    <content type="html">&lt;p&gt;In my &lt;a href="http://stephentudor.com/blog/2011/07/09/responsible-sass-authoring"&gt;previous post&lt;/a&gt;, I
hinted at a growing concern with CSS performance. Among those pioneering
ways to approach the issue of maintainable-yet-efficient CSS is &lt;a href="http://twitter.com/stubbornella"&gt;Nicole Sullivan&lt;/a&gt;,
who is perhaps best known for her open source &lt;a href="http://oocss.org"&gt;Object-Oriented CSS&lt;/a&gt;
project.&lt;/p&gt;

&lt;h2&gt;Object-Oriented? CSS?&lt;/h2&gt;

&lt;p&gt;I have to admit that when I first checked out out OOCSS, I guffawed.
While it&amp;#8217;s true that, at first blush, CSS does not have many of the
traditional features of a genuine OO programming language, Nicole has
been exploring ways in which CSS&amp;#8217; inheritance/cascade can be analogous
to OO concepts.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s taken me quite some time to come around. There are things in the
OOCSS code base that seem to fly in the face of commonly-accepted CSS
best practices. It is precisely this kind of resistance in the community
that must have prompted Nicole to deliver her latest talk this year at
Webstock, entitled &lt;a href="http://www.webstock.org.nz/talks/speakers/nicole-sullivan/css-tools-massive-websites"&gt;Our Best Practices Are Killing Us&lt;/a&gt; (&lt;a href="http://www.slideshare.net/stubbornella/our-best-practices-are-killing-us"&gt;slides&lt;/a&gt;).&lt;/p&gt;

&lt;!-- more --&gt;


&lt;h2&gt;Semantics Pitfall&lt;/h2&gt;

&lt;p&gt;For the past several years, I have been painstakingly crafting HTML and
CSS under the banner of &amp;#8220;best practices.&amp;#8221; Currently, one such practice
has been to aggressively scope CSS by content type.&lt;/p&gt;

&lt;p&gt;Martin Sutherland &lt;a href="http://sunpig.com/martin/archives/2008/10/07/maintainable-css-modular-to-the-max.html"&gt;describes this approach&lt;/a&gt;
better and more succinctly than I could, but just recently &lt;a href="http://www.sunpig.com/martin/archives/2011/06/25/oocss-and-html-semantics.html"&gt;recanted in favor of OOCSS&lt;/a&gt;.
Martin had watched Nicole&amp;#8217;s talk, and it appears to have had the same
effect on him as it had on me. He writes:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;One of the hardest hurdles to leap in coming to like OOCSS was the&lt;br/&gt;somewhat heretical notion of adding &amp;#8220;non-semantic&amp;#8221; container elements&lt;br/&gt;and apparently &amp;#8220;presentational&amp;#8221; classnames to my HTML.&lt;/p&gt;&lt;footer&gt;&lt;strong&gt;Martin Sutherland&lt;/strong&gt; &lt;cite&gt;&lt;a href='http://www.sunpig.com/martin/archives/2011/06/25/oocss-and-html-semantics.html'&gt;www.sunpig.com/martin/archives/&amp;hellip;&lt;/a&gt;&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;


&lt;p&gt;Martin &lt;a href="http://www.sunpig.com/martin/archives/2011/06/25/oocss-and-html-semantics.html"&gt;goes on to propose&lt;/a&gt;
(and I think he&amp;#8217;s right on target here) that there are multiple layers
of semantics that belong in HTML:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Structural semantics (core HTML elements)&lt;/li&gt;
&lt;li&gt;Ontological semantics (domain-specific meaning beyond core HTML)&lt;/li&gt;
&lt;li&gt;Visual semantics (representing visual intent)&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;&lt;img class="left" src="http://stephentudor.com/images/2011-07-17-oocss-for-great-justice/pitfall.jpeg" title="Pitfall Harry" &gt;&lt;/p&gt;

&lt;p&gt;Lest we forget, one of the core purposes of CSS &lt;strong&gt;is&lt;/strong&gt; to communicate
the &lt;a href="http://www.stubbornella.org/content/2010/06/12/visual-semantics-in-html-and-css/"&gt;visual semantics&lt;/a&gt;
of an HTML document. Many developers, myself included, have written many
projects&amp;#8217; worth of CSS that attempts to use only core HTML (structural)
and domain-specific (ontological) semantics, while sidestepping the role
that visual semantics ought to play, out of fear that we&amp;#8217;d be
introducing the ultimate evil into our source code, &lt;em&gt;presentational
classnames&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It is becoming more clear to me that we should not avoid the question of
visual semantics in our CSS. The result of our having done so is visual
style that is tightly bound to the content.&lt;/p&gt;

&lt;p&gt;Now, hearken back to the primitive days of yore when it was commonplace
(and accepted) to see &lt;code&gt;&amp;lt;font&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;u&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;center&amp;gt;&lt;/code&gt; tags in HTML
source.  It&amp;#8217;s another example of presentation coupled with content,
only in a more obviously wrong form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is the intertwining of visual style and content not one of the
problems, nay, &lt;em&gt;the&lt;/em&gt; problem, that CSS was intended to address in the
first place?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It seems to me that many of us are doing it wrong when we refuse to
implement some level of visual semantics in our CSS and HTML.  Because
of the belief that we&amp;#8217;re following &amp;#8220;best practices,&amp;#8221; we are robbing
ourselves of opportunities to abstract out common styles into reusable
patterns, and our projects suffer for it.&lt;/p&gt;

&lt;h2&gt;For Great Justice&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;ve watched as some developers have begun to &lt;a href="http://lazukars.com/post/7300553347/brain-vs-object-oriented-css"&gt;wrestle with the concepts of OOCSS&lt;/a&gt;
vs. what we have come to know as the industry standard practice of
writing CSS in recent years.&lt;/p&gt;

&lt;p&gt;&lt;img class="right" src="http://stephentudor.com/images/2011-07-17-oocss-for-great-justice/ZeroWing.png" title="ZeroWing" &gt;&lt;/p&gt;

&lt;p&gt;Watch Nicole&amp;#8217;s OOCSS talks, and allow them ample time to marinate.
Check out the &lt;a href="http://github.com/stubbornella/oocss"&gt;source&lt;/a&gt; of the
&lt;a href="http://oocss.org"&gt;OOCSS project&lt;/a&gt;. I&amp;#8217;m still in process myself, as I
continue to look for ways to strike the delicate balance between
&lt;em&gt;appropriate&lt;/em&gt; visual semantics in CSS and blatantly presentational
naming.&lt;/p&gt;

&lt;p&gt;Not everything in OOCSS is a great idea to implement verbatim.  Remember
that it is proof of concept and a collection of patterns, not a CSS
boilerplate. I am still mildly horrified every time I see how &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; tags
are used for rounded corners in the &lt;a href="http://oocss.org/module.html"&gt;module example&lt;/a&gt;,
but I remind myself that the concepts are what make up OOCSS, not the
specific implementation of the examples.&lt;/p&gt;

&lt;p&gt;Finally, I have linked to Martin&amp;#8217;s &lt;a href="http://www.stubbornella.org/content/2010/06/12/visual-semantics-in-html-and-css/"&gt;article on OOCSS&lt;/a&gt;
in several places throughout this post. It really is required reading if
you author CSS as part of your day job.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/jJWe8LmJDLY" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2011/07/17/oocss-for-great-justice.html</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[DNS Fail]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/5X2DPEJFlKw/dns-fail.html" />
    <updated>2011-07-10T14:54:00-04:00</updated>
    <id>http://stephentudor.com/blog/2011/07/10/dns-fail</id>
    <content type="html">&lt;p&gt;To those who tried to visit this site only to get a 404 error in the
last 24 hours, I apologize. I believe DNS propagation was the culprit,
and I jumped the gun by announcing that my post was up. I was able to
view stephentudor.com just fine, but quickly found that several people,
including my lovely wife, could not even get to the site initially.&lt;/p&gt;

&lt;p&gt;By this time, it appears that most folks have been able to access it. If
you can see this post, you&amp;#8217;re fine. Otherwise, you&amp;#8217;re probably in the
camp that is left wondering why &lt;a href="http://stephentudor.com//twitter.com/tudorstudio/status/89876273408655360"&gt;this joker posted a 404 URL to Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Again, mea culpa. I&amp;#8217;ll know better next time :)&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/5X2DPEJFlKw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2011/07/10/dns-fail.html</feedburner:origLink></entry>
  
  <entry>
    <title type="html"><![CDATA[Responsible Sass Authoring]]></title>
    <link href="http://feedproxy.google.com/~r/stephentudor/~3/yYpi9sjMNNg/responsible-sass-authoring.html" />
    <updated>2011-07-09T13:04:00-04:00</updated>
    <id>http://stephentudor.com/blog/2011/07/09/responsible-sass-authoring</id>
    <content type="html">&lt;p&gt;In capable hands, &lt;a href="http://stephentudor.com//sass-lang.org"&gt;Sass&lt;/a&gt; can do amazing things for your
CSS. With Sass, you can use functions and variables that later get
compiled into valid CSS. This can greatly reduce code repetition and
the potential for mistakes.&lt;/p&gt;

&lt;p&gt;For example, not that you would, but you could write some Sass like this:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt; (example-1.sass)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-1.sass'&gt;download&lt;/a&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='sass'&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// Set a couple of vars&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nv"&gt;$titleColor&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#000&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nv"&gt;$titleSize&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.article&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nc"&gt;.title&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;$titleColor&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$titleSize&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nc"&gt;.alt-title&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="nc"&gt;.title&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;border-bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="no"&gt;solid&lt;/span&gt; &lt;span class="nf"&gt;lighten&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$titleColor&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;// #ccc&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="nf"&gt;transparentize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;lighten&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$titleColor&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nc"&gt;.sub-title&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="nc"&gt;.title&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$titleSize&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.85&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;// 20.4px&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&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="nf"&gt;transparentize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;change-color&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$titleColor&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$red&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="mf"&gt;.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&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;p&gt;The resulting CSS might look something like this, depending upon how you
set your Sass output style preference:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt; (example-1.css)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-1.css'&gt;download&lt;/a&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;/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;.article&lt;/span&gt; &lt;span class="nc"&gt;.title&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.article&lt;/span&gt; &lt;span class="nc"&gt;.alt-title&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.article&lt;/span&gt; &lt;span class="nc"&gt;.sub-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&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 class="nc"&gt;.article&lt;/span&gt; &lt;span class="nc"&gt;.alt-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;border-bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="k"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#cccccc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;51&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;51&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;51&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="m"&gt;9&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 class="nc"&gt;.article&lt;/span&gt; &lt;span class="nc"&gt;.sub-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&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 class="nc"&gt;.article&lt;/span&gt; &lt;span class="nc"&gt;.sub-title&lt;/span&gt;&lt;span class="nd"&gt;:hover&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-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="m"&gt;2&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;Pretty cool, right? You can see that the &lt;code&gt;@extend&lt;/code&gt; keyword can be a very
powerful tool, bringing a quasi-object-oriented paradigm to our CSS. The
same could be true for the nested selectors; you just have to refer to
&lt;code&gt;.article&lt;/code&gt; once, and let the indentation take care of the scope for
you.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;h2&gt;CSS Bloat&lt;/h2&gt;

&lt;p&gt;&lt;span class='pullquote-right' data-pullquote='Just because Sass allows you to do something, doesn&amp;rsquo;t mean it should be&amp;nbsp;done.'&gt;
Over a year of using Sass every day at my day job has
taught me this: Just because Sass allows you to do something, doesn&amp;rsquo;t mean it should be&amp;nbsp;done.&lt;/p&gt;

&lt;p&gt;Sass clearly offers many ways to make our lives easier as developers.
The benefits of using it are obvious and many. &lt;code&gt;@import&lt;/code&gt; is awesome; it
lets us concatenate many development Sass files into one production CSS
file if we wish. Variables and mixins can be amazingly handy.&lt;/p&gt;

&lt;p&gt;Selector nesting, &lt;code&gt;@extend&lt;/code&gt;, and parent-selector (&amp;amp;), while
incredibly useful when care is taken, can also be prone to generate
sub-optimal CSS when used carelessly, &lt;em&gt;especially&lt;/em&gt; in cases where they
are used in combination. Long-term, CSS that is compiled from Sass that
abuses these features can quickly become extremely bloated and
challenging to maintain.  Let&amp;#8217;s take a look at some examples of some
really sad CSS. The examples I&amp;#8217;m using are inspired by actual projects
I&amp;#8217;ve worked on (with some key edits to protect the innocent).
&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that I&amp;#8217;m not blaming Sass itself for any of these problems. It&amp;#8217;s
quite simply that using some Sass features in a certain way can
inadvertantly amplify poor CSS design decisions.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;Case 1&lt;/h3&gt;

&lt;p&gt;Sass selectors that are nested like this:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt; (example-2.sass)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-2.sass'&gt;download&lt;/a&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='sass'&gt;&lt;span class='line'&gt;&lt;span class="nn"&gt;#product&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nc"&gt;.overview&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="nc"&gt;.header&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;      &lt;span class="nt"&gt;h2&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;        &lt;span class="nt"&gt;span&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="nc"&gt;.content&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;      &lt;span class="nc"&gt;.promo&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;        &lt;span class="nc"&gt;.header&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;          &lt;span class="nt"&gt;div&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;          &lt;span class="nc"&gt;.inner&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;            &lt;span class="nt"&gt;a&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;              &lt;span class="nt"&gt;span&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;will result in CSS descendant selectors that look something like this:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt; (example-2.css)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-2.css'&gt;download&lt;/a&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='css'&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nc"&gt;.promo&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nc"&gt;.promo&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nc"&gt;.promo&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nc"&gt;.promo&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="nc"&gt;.inner&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nc"&gt;.promo&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="nc"&gt;.inner&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nf"&gt;#product&lt;/span&gt; &lt;span class="nc"&gt;.overview&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nc"&gt;.promo&lt;/span&gt; &lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="nc"&gt;.inner&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="nt"&gt;span&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;Yuck. I&amp;#8217;m not going to go into why this is bad, but you don&amp;#8217;t have to
take my word for it; simply google &amp;#8221;&lt;a href="http://stephentudor.com//www.google.com/search?q=css+performance+descendant+selectors"&gt;CSS performance descendant selectors&lt;/a&gt;&amp;#8221;
and read up.&lt;/p&gt;

&lt;p&gt;With Sass, this kind of CSS bloat is extremely easy to cause if you get
carried away with selector nesting. Observe the redundancy and the
verbosity of the generated CSS. If the developer had taken the time to
carefully construct his selectors, he could have avoided the need for
this many levels of descendants in his CSS.&lt;/p&gt;

&lt;p&gt;To my great shame, that developer was yours truly.&lt;/p&gt;

&lt;h3&gt;Case 2&lt;/h3&gt;

&lt;p&gt;This one combines the &lt;code&gt;@extend&lt;/code&gt;, nesting, and parent-selector features
of Sass. &lt;code&gt;@extend&lt;/code&gt; has been one of my favorite features of Sass ever
since it was added. It lets you inherit the properties of one selector
in another.  Here&amp;#8217;s how it can go awry, despite all the best intentions.
The Sass:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt; (example-3.sass)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-3.sass'&gt;download&lt;/a&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;/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="nc"&gt;.clearfix&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;clear&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;both&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;content&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;.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;block&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="na"&gt;overflow&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;hidden&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;0&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-1&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="nc"&gt;.clearfix&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-2&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="nc"&gt;.clearfix&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&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;.thing-99&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="nc"&gt;.clearfix&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-100&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="k"&gt;@extend&lt;/span&gt; &lt;span class="nc"&gt;.clearfix&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;In the Sass, let&amp;#8217;s assume I extended &lt;code&gt;.clearfix&lt;/code&gt; in 100 separate
selectors at various places throughout my code. This is, unfortunately,
a very realistic use case for something as commonly used as a clearfix,
and as my project grows, it would eventually result in the following
generated CSS:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt; (example-3.css)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-3.css'&gt;download&lt;/a&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;span class='line-number'&gt;37&lt;/span&gt;
&lt;span class='line-number'&gt;38&lt;/span&gt;
&lt;span class='line-number'&gt;39&lt;/span&gt;
&lt;span class='line-number'&gt;40&lt;/span&gt;
&lt;span class='line-number'&gt;41&lt;/span&gt;
&lt;span class='line-number'&gt;42&lt;/span&gt;
&lt;span class='line-number'&gt;43&lt;/span&gt;
&lt;span class='line-number'&gt;44&lt;/span&gt;
&lt;span class='line-number'&gt;45&lt;/span&gt;
&lt;span class='line-number'&gt;46&lt;/span&gt;
&lt;span class='line-number'&gt;47&lt;/span&gt;
&lt;span class='line-number'&gt;48&lt;/span&gt;
&lt;span class='line-number'&gt;49&lt;/span&gt;
&lt;span class='line-number'&gt;50&lt;/span&gt;
&lt;span class='line-number'&gt;51&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;.clearfix&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-6&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-7&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-8&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-9&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-11&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-12&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-13&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-14&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-15&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-16&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-17&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-18&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-19&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-20&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-21&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-22&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-23&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-24&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-25&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-26&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-27&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-28&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-29&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-30&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-31&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-32&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-33&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-34&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-35&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-36&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-37&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-38&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-39&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-40&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-41&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-42&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-43&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-44&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-45&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-46&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-47&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-48&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-49&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-50&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-51&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-52&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-53&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-54&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-55&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-56&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-57&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-58&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-59&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-60&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-61&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-62&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-63&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-64&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-65&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-66&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-67&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-68&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-69&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-70&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-71&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-72&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-73&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-74&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-75&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-76&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-77&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-78&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-79&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-80&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-81&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-82&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-83&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-84&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-85&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-86&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-87&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-88&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-89&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-90&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-91&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-92&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-93&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-94&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-95&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-96&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-97&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-98&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-99&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-100&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;.clearfix&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-1&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-2&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-3&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-4&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-5&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-6&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-7&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-8&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-9&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-10&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-11&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-12&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-13&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-14&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-15&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-16&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-17&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-18&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-19&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-20&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-21&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-22&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-23&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-24&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-25&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-26&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-27&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-28&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-29&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-30&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-31&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-32&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-33&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-34&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-35&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-36&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-37&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-38&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-39&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-40&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-41&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-42&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-43&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-44&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-45&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-46&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-47&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-48&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-49&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-50&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-51&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-52&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-53&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-54&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-55&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-56&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-57&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-58&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-59&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-60&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-61&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-62&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-63&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-64&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-65&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-66&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-67&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-68&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-69&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-70&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-71&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-72&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-73&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-74&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-75&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-76&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-77&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-78&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-79&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-80&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-81&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-82&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-83&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-84&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-85&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-86&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-87&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-88&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-89&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-90&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-91&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-92&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-93&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-94&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-95&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.thing-96&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-97&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-98&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-99&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.thing-100&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;clear&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;both&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 class="s1"&gt;&amp;#39;.&amp;#39;&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="k"&gt;block&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;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;    &lt;span class="k"&gt;overflow&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;hidden&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;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;First, there is a nesting issue. Because I nested &lt;code&gt;&amp;amp;:after&lt;/code&gt; inside an
empty parent selector, the generated CSS contains a huge list of
selectors with no properties, then a second huge list with the clearfix
styles. Plus, all these bogus selectors tend to clog up dev tools like
Firebug, as shown in this screenshot:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://stephentudor.com/images/2011-07-09-responsible-sass-authoring/extend-clearfix-firebug-hell.png" alt="@extend .clearfix Firebug hell" /&gt;&lt;/p&gt;

&lt;p&gt;Secondly, this could have all been avoided if I had been more pragmatic
and simply used &lt;code&gt;.clearfix&lt;/code&gt; (or another class &amp;ndash; I commonly use
&lt;code&gt;.group&lt;/code&gt;) in the HTML to apply the CSS and make it semantically
meaningful at the same time. Using &lt;code&gt;@extend&lt;/code&gt; is not the correct choice
for this particular pattern:&lt;/p&gt;

&lt;figure class='code'&gt;&lt;figcaption&gt;&lt;span&gt; (example-4.sass)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-4.sass'&gt;download&lt;/a&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='sass'&gt;&lt;span class='line'&gt;&lt;span class="nc"&gt;.group&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;clear&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;both&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;content&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;.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;block&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="na"&gt;overflow&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;hidden&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;0&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// That&amp;#39;s right, I&amp;#39;m not using @extend here.&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;&lt;span class="c1"&gt;// It&amp;#39;s almost like I&amp;#39;m using actual CSS \o/&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; (example-4.html)&lt;/span&gt; &lt;a href='http://stephentudor.com/downloads/code/2011-07-09-responsible-sass-authoring/example-4.html'&gt;download&lt;/a&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;thing-1 group&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 class="c"&gt;&amp;lt;!-- stuff floated left --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;primary-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 class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class='line'&gt;  &lt;span class="nt"&gt;&amp;lt;/section&amp;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;&amp;lt;!-- stuff floated right --&amp;gt;&lt;/span&gt;
&lt;/span&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;secondary-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 class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&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;span class='line'&gt;&lt;span class="nt"&gt;&amp;lt;/div&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;h2&gt;Sass =&amp;gt; CSS&lt;/h2&gt;

&lt;p&gt;&lt;span class='pullquote-right' data-pullquote='It&amp;rsquo;s important to remember that no matter what you do in Sass, it will eventually end up as&amp;nbsp;CSS.'&gt;
I, for one, side with those who seek to balance CSS performance concerns
with maintainability concerns.
It&amp;rsquo;s important to remember that no matter what you do in Sass, it will eventually end up as&amp;nbsp;CSS.
Whether it does more harm than good will be up to you.&lt;/p&gt;

&lt;p&gt;Ironically, though it might seem at first that we have veered too far
towards the maintainability side of the spectrum with our CSS, it turns
out that the status quo isn&amp;#8217;t terribly well suited for either
maintainability or performance.
&lt;/span&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/stephentudor/~4/yYpi9sjMNNg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://stephentudor.com/blog/2011/07/09/responsible-sass-authoring.html</feedburner:origLink></entry>
  
</feed>
