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

<channel>
	<title>Jon Faustman</title>
	<atom:link href="https://jonfaustman.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://jonfaustman.com</link>
	<description>Jonathan Faustman is a front-end web developer, web standards enthusiast, espouser of accessibility compliance, and all around good guy.</description>
	<lastBuildDate>Mon, 13 Jul 2015 18:57:03 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.3</generator>
	<item>
		<title>They&#8217;re just words</title>
		<link>https://jonfaustman.com/2015/07/13/theyre-just-words/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Mon, 13 Jul 2015 18:57:03 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=777</guid>

					<description><![CDATA[<p class="lead">Words are hard. They have multiple meanings – by definition and perception. I’ve never been a fan of modifier words when it comes to work – small, simple, easy, just, etc. Unless you’re also an subject-area expert, your modifier may be wrong, at best, or offensive, at worst. They're more than just words.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">Words are hard. They have multiple meanings – by definition and perception.</p>

<p class="lead">I’ve never been a fan of modifier words when it comes to work – small, simple, easy, just, etc. Unless you’re also an subject-area expert, your modifier may be wrong, at best, or offensive, at worst. They&#8217;re more than just words.</p>

<p>I recently found myself committing this faux pas outside of tech.</p>

<p>Magically two nuts from my motorcycle’s manifold clamp came off, causing rides to be loud(er), hot(ter), and exhaust-y. It was a small annoyance until I noticed it really affecting performance, so I finally decided to do something about it. However, after trying for an hour by myself, and another hour with my father, I realized replacing two small nuts was more than my keyboard-laden fingers could handle, so I took her* to a motorcycle mechanic.</p>

<p>I’ve taken two other bikes to this mechanic, and he did some serious work to get a rusted GSX-R 750 up and running, so I feel comfortable with him. As I was describing the problem, I found the words inadvertently (<em>because when you do something hypocritical it’s inadvertent, whereas others are callous monsters</em>) pouring out of my mouth.</p>

<p>“It should be an easy fix.”</p>

<p>“An easy fix? Then why didn’t you do it?”</p>

<p>(<em>Slightly fictionalized quotes due to memory and storytelling ease.</em>)</p>

<p>I couldn’t believe I did that. With one simple word I trivialized his effort.</p>

<p>What I meant to say was, “It should be an easy fix with a skillset like yours, and the tools at your disposal.” Even so, trivialization. I apologized, told him I was often on the receiving end as a web developer, we laughed about it, and forgot.</p>

<p>It wasn’t an easy fix.</p>

<p>As it turns out there was a gasket behind the clamp that needed to be adjusted, which could only be done by removing the entire exhaust system.</p>

<p>With my limited knowledge and perceived scope of the fix, I incorrectly labeled it as easy. I believe this is where the root of the problem lies – assumptions based on limited knowledge.</p>

<p>How do we solve this? Don’t modify the scope or degree of effort required for somebody’s work. Let them do it. (<em>If you’re also an subject-area expert and somebody over inflates, that’s another issue.</em>)</p>

<p>Last year, Brad Frost <a href="https://the-pastry-box-project.net/brad-frost/2014-january-28">wrote about the inverse of this problem</a> where “just” makes the presumption that the other person has full knowledge to complete the task at hand. This presumption can make it harder or impossible for them.</p>

<blockquote><p>“Just” is a dangerous word.</p>

<p>We approach problems equipped with our own set of experiences, perspective, and skills. It’s extremely challenging to step outside of our own perspective when communicating with others, but it’s increasingly essential to do so.</p>

<a href="https://the-pastry-box-project.net/brad-frost/2014-january-28">Brad Frost &#8211; “Just”</a></blockquote>

<p>When I retweeted Brad’s article, my co-worker <a href="http://zanshin.net/">Mark</a> shared his <a href="https://github.com/zanshin/dotfiles/commit/30068116047f2225f6c71b1396481a6fa6a431f1">vimrc file</a>, in which he highlights words to avoid. Coincidentally, the <a href="https://css-tricks.com/words-avoid-educational-writing/">CSS Tricks article</a> linked in his commit relates very closely to Brad’s post.</p>

<p>We need to be careful with our words. Clichés about their might are justified.</p>

<p>And for the love of kittens, stop saying the website is “broken.”</p>

<p>*My motorcycle is a female. Her name is Holly.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Project Postcard</title>
		<link>https://jonfaustman.com/2014/01/07/project-postcard/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Tue, 07 Jan 2014 21:02:32 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=762</guid>

					<description><![CDATA[<p class="lead">Unable to sleep, a restless mind with fresh typographic knowledge came up with a new project. A project &#8211; entitltedly titled &#8211; Project Postcard. The synopsis of the project is simple; I'm going to send handwritten postcards to some important people in my life outside of Manhattan (<em>sorry Manhattan friends</em>.)</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">Unable to sleep, a restless mind with fresh typographic knowledge came up with a new project. A project &ndash; entitltedly titled &ndash; Project Postcard.</p>

<p class="lead">The synopsis of the project is simple; I&#8217;m going to send handwritten postcards to important people in my life outside of Manhattan (<em>sorry Manhattan friends</em>.)</p>

<p>Why? I guess the retort of why not might be too snarky here. I had the idea originally when I received a handwritten postcard of <abbr title="New York City">NYC</abbr> from SassConf. It was pretty cool to receive such a personal touch from a conference, and of course they were quite unaware that Manhattan, Kansas, was an actual place. I planned on sending them a postcard of the lesser-known Manhattan, but that never actually materialized&#8230;until now.</p>

<p>I&#8217;ve also been increasingly more interested in sending personal, handwritten notes to people, which is odd considering I fucking hate cards. I guess I&#8217;m tired of the more impersonal texts, Facebook messages and their ilk. Fuck, does that make me a hipster? I have been wearing a lot of plaid lately.</p>

<p>I used to love having pen pals as a kid, and my handwriting has become almost unreadable in its obsoleteness.</p> 

<p>So friends, if I happen to ask you for your mailing address, despite our lack of recent contact, feel special, that means you&#8217;re important to me. Everybody else will just have to wait by the mailbox to find out if they&#8217;re included.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Smelly cat</title>
		<link>https://jonfaustman.com/2013/08/21/smelly-cat/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Wed, 21 Aug 2013 20:39:07 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=742</guid>

					<description><![CDATA[<p class="lead">I need to get something off my, umm, feet. I would warn this post could possibly be too much information (<abbr title="too much information">TMI</abbr>), but to warn of something being TMI on a personal website is a bit ridiculous. It's certainly personal and informational, whether or not it's too much is up to you. With that being said, I have a problem, a rather embarrassing problem, a body image problem - my feet stink (<em>or at least I think they do</em>)!</p>]]></description>
										<content:encoded><![CDATA[<div class="repost">
<p>I originally started writing this article when I was in the midst of the problem (<em>despair might sound a bit dramatic here, albeit not completely untrue</em>), and quit writing it halfway through. I don&#8217;t know if the underlying problem still exists (<em>I imagine it does</em>) but it&#8217;s not something I think about too often. I wasn&#8217;t sure if I&#8217;d ever share this, but I kind of liked the writing and it could possibly help somebody. We all have our problems, this is one of mine.</p>
</div><!-- /repost -->

<h2>What are they feeding you?</h2>

<p class="lead">I need to get something off my, umm, feet.</p>

<p class="lead">I would warn this post could possibly be too much information (<abbr title="too much information">TMI</abbr>), but to warn of something being TMI on a personal website is a bit ridiculous. It&#8217;s certainly personal and informational, whether or not it&#8217;s too much is up to you. With that being said, I have a problem, a rather embarrassing problem, a body image problem &#8211; my feet stink (<em>or at least I think they do</em>)!</p>

<p>I don&#8217;t particularly know when, why or how it started, but I don&#8217;t like it and now it&#8217;s all I can think about. It&#8217;s all consuming. It&#8217;s not just in the back of my mind, it&#8217;s in the forefront and everything else is secondary.</p>

<p>Perhaps you&#8217;ve experienced a personal problem that completely overtook your thoughts, or perhaps not, but it shouldn&#8217;t be too hard to imagine how mentally exhausting it is to think about something all the time.</p>

<p>For what could possibly be the first time ever, I saw a very relevant post on Facebook recently.</p>

<blockquote>
<p>A psychologist walked around a room while teaching stress management to an audience. As she raised a glass of water, everyone expected they&#8217;d be asked the &#8220;half empty or half full&#8221; question. Instead, with a smile on her face, she inquired: &#8220;How heavy is this glass of water?&#8221;</p>

<p>Answers called out ranged from 8 oz. to 20 oz.</p>

<p>She replied, &#8220;The absolute weight doesn&#8217;t matter. It depends on how long I hold it. If I hold it for a minute, it&#8217;s not a problem. If I hold it for an hour, I&#8217;ll have an ache in my arm. If I hold it for a day, my arm will feel numb and paralyzed. In each case, the weight of the glass doesn&#8217;t change, but the longer I hold it, the heavier it becomes.&#8221; She continued, &#8220;The stresses and worries in life are like that glass of water. Think about them for a while and nothing happens. Think about them a bit longer and they begin to hurt. And if you think about them all day long, you will feel paralyzed – incapable of doing anything.&#8221;</p>
</blockquote>

<p>Not only does this problem affect me, but it affects everybody around me &#8211; and I feel bad. Anybody who&#8217;s ever had a body image issue can relate to the feeling of everybody focusing in on your problem, imaginary audience or not.</p>

<p>The problem with odor is that it doesn&#8217;t stay confined. It blows, it wafts, it floats, or as I imagine it in my case, it forms a thick slow-moving cloud of funk waiting for another unsuspecting nose to assault.</p>

<p>If I hear another sniff &#8211; that goddamn sharp sniff, that tell-tell sign of nostril-offending contact, <em>oh that motherfucking sniff</em> &#8211; as I pass somebody, or vice versa, I might actually crumble into a million tiny pieces. A million tiny pieces that surely will not smell pleasant.</p>

<p>Honestly, I want to punch that person directly in their nose; trickling blood ought to stop some smell from penetrating. But it&#8217;s not their fault, it&#8217;s my fault, or rather it&#8217;s my body&#8217;s fault.</p>

<p>At this point, I know what you&#8217;re thinking: &#8216;Why don&#8217;t you just shower and wash your clothes? You know, personal hygiene and stuff.&#8217;</p>

<p>Well that is a great fucking idea. I would have never thought about that, thank you for that fine suggestion. I salute you, sir.</p>

<p>If only it were that easy.</p>

<p>People blaming hygiene is simultaneously understandable and funny &#8211; ridiculously funny. It&#8217;s certainly understandable because a wide range of offending odors are culprits of poor hygiene and easily solvable. It&#8217;s funny because I wonder if people honestly think I just gave up on personal hygiene. Like I woke up one day and said, fuck it &#8211; that&#8217;s just not for me.</p>

<p>Since you&#8217;re now wondering; I shower everyday &#8211; twice on most days (<em>with antibacterial soap</em>), I only wear clean clothes &#8211; jeans and shoes being the only exceptions (<em>it&#8217;s not great for denim to be washed too often, although I don&#8217;t wear the same jeans or the same shoes two days in a row</em>), I use antiperspirant/deodorant, and cologne.</p>

<p>I&#8217;m not taking hygiene lightly here folks. Oh yeah, I wipe my own butt too (<em>although I&#8217;m not completely unconvinced that&#8217;s not a problem as well</em>.)</p>

<p>In fact, preventative measures are just increasing the amount of time I spend incorporating personal hygiene. I&#8217;ve tried countless home remedies, various foot soaks, shoe insoles, powders and supplements, their effect is unclear at best, detrimental at worst.</p>

<p>Here&#8217;s the kicker, I can&#8217;t smell it.</p>

<p>Every once in a while I get a stiff whiff, but other than that it&#8217;s based solely on the reactions of other people, and believe me, there are a lot of reactions.</p>

<p>The same brain that&#8217;s causing me think about this problem endlessly has decided there&#8217;s no reason to keep smelling it.</p>

<p>Scumbag brain.</p>

<p>I can&#8217;t count the times I&#8217;ve smelled my socks, shoes, and clothes after wearing them. I can smell normal body odor mixed with ineffective deodorant, 8-hour-old cologne, and leather mixed with the remedy du jour.</p>

<p>No wretched sour cheese or month-old gym socks of a giant, which I imagine everybody else experiences.</p>

<p>I&#8217;ve enlisted my sister on an aggressive sniffing campaign, but her usually observant olfactory system is failing to provide any evidence.</p>

<p>That&#8217;s good, right? Oh silly you, you&#8217;re forgetting about those others&#8217; reactions. The gym, tumbling, Taekwondo, work, stores, the location doesn&#8217;t matter, there will be reactions.</p>

<div class="repost">
<p>This is the point in which I stopped writing originally. From here on out it should be less depressing and angry, and more reflective.</p>
</div><!-- /repost -->

<h2>You may not be a bed of roses</h2>

<p>Here&#8217;s the problem with relying solely on the reactions of others &#8211; it might not be about you. They could have a cold; sniffles sound exactly like that soul-crushing sniff you&#8217;ve become accustomed to hearing. They could have smelled something funky, but completely unrelated to you. Or here&#8217;s a thought, they could just be going about their daily lives unbeknownst to any problem you might be having. Who knows, maybe they think they smell.</p>

<p>Although I spent countless hours (<em>countless being only a slight exaggeration</em>) Googling my &#8220;problem,&#8221; I couldn&#8217;t get the nerve to talk to anybody else about it.</p>

<p><em>From here on out, I&#8217;m going to refer to it as my &#8220;problem.&#8221; And while the underlying issue may or may not actually exist, I certainly had a problem &#8211; although it was more mental than physical. And just because something isn&#8217;t &#8220;real&#8221; to others, doesn&#8217;t make it devastatingly real to that person.</em></p>

<p>My oldest sister and I are pretty close and she lives in the same town, so she was easiest to broach about it. Once I brought it up, I continued to bring it up&#8230;nearly every time I saw her. Her opinion remained the same &#8211; either I was imagining it or had something wrong with my nose. My ever-honest niece said I smelled like I normally do, which to her meant my cologne.</p>

<p>At the time those answers sounded like a brushoff. A consolation prize for losing at life.</p>

<p>Unbeknownst to me, my sisters talked about my &#8220;problem,&#8221; so when I brought it up with my other sister she didn&#8217;t seem too surprised. However, she lives two hours away and was unable to confirm or deny its existence. She did urge me to go see a doctor, which for most physical ills I&#8217;m more than willing to do, but imagining making an appointment because &#8220;I smell&#8221; seemed utterly ridiculous. That sister, who happens to be a <abbr title="Registered Nurse">RN</abbr> assured me that she hears more ridiculous things on a daily basis.</p>

<p>Still unconvinced to make an appointment, I happened to have a yearly physical coming up, which seemed like the perfect time to approach the subject with my doctor.</p>

<p>I had my list of questions and concerns; I was prepared. When appointment time came, I completely glossed over the issue. I briefly mentioned it and moved on.</p>

<p>Scumbag brain.</p>

<p>However, when the nurse called to follow up, I gathered enough nerve to be like &#8220;yeah, that problem I briefly mentioned&#8230;it&#8217;s completely consuming my life.&#8221;</p>

<p>The nurse assured me that she didn&#8217;t smell anything in the small examination room, and my doctor &#8220;who usually had a strong sense of smell&#8221; didn&#8217;t make note of any malodor. Slightly relieved. I made a follow-up appointment to further investigate.</p>

<p>I would say long story short, but at this point it&#8217;s long story longer. The underlying issue is that in the past year I started sweating more than normal. Apparently this is rather common &#8211; it&#8217;s called hyperhydrosis&#8230;and it&#8217;s fucking annoying.</p>

<p>Several doctor visits (<em>including a specialist</em>) confirmed I had nothing physically wrong which caused me to start sweating more, it&#8217;s just something that happened. Great. However, every doctor&#8217;s appointment made me feel slightly relieved about my odor concerns as each time it was refuted.</p>

<p>Once I started opening to one person, it became easier to talk about it with other people. As it turns out, a lot of my friends and family have problems with excessive sweating as well. And not a single person I had the nerve to ask, said that I smelled bad.</p>

<p>Now it&#8217;s just something I deal with instead of obsessing over.</p>

<p>So as to not seem even crazier, I won&#8217;t go into detail of how depressing this time was; I&#8217;ll just say that an already introverted person beginning to completely fear social interaction is not a good thing. It&#8217;s a bad thing. Very bad.</p>

<h2>It&#8217;s not your fault</h2>

<p>Consider this the section where an ex-addict gives you advice they wish they had received before giving a homeless man a handjob for a delicious hit of crack.</p>

<p>If you&#8217;re having a problem talk to somebody. No matter how embarrassing you think it is, there&#8217;s surely something worse. Don&#8217;t bottle it inside.</p>

<p>If the problem is physical go see a doctor. Again, even if you think it&#8217;s embarrassing it&#8217;s worth getting checked out. Something embarrassing could be a sign of something major, or it could be nothing at all.</p>

<p>Don&#8217;t blindly Google symptoms; don&#8217;t self-diagnose. All those hours of Googling led me to diagnose myself several times. So much available information is both a blessing and a curse. Trust the experts, not anonymous sources of information.</p>

<p>Relax, don&#8217;t over think things. I am a notorious over thinker, so it&#8217;s not surprising my brain took it to obsessive mode. Thinking about something relentlessly doesn&#8217;t help, it often hurts.</p>

<p>If you&#8217;re more than an acquaintance with somebody and they are having odor issues &#8211; tell them. In a nice way. Privately. &#8220;You smell like shit, bro.&#8221; isn&#8217;t going to help anybody. Don&#8217;t talk about them behind their backs. Don&#8217;t make passive-aggressive statements around them. You never know the fragility of somebody&#8217;s mental state. If I ever have a problem, I hope somebody would afford me that courtesy.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>30 @ 30</title>
		<link>https://jonfaustman.com/2013/08/14/30-at-30/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Wed, 14 Aug 2013 06:01:45 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=735</guid>

					<description><![CDATA[<p>Remember that show 30 Days? It was created by Morgan Spurlock, the dude who made Supersize Me. Well, this is a blatant ripoff of that, minus the cameras, post production, any sort of notoriety, or the enlightenment of others. But yeah, pretty much exactly the same. The premise is simple, I'm going to do (<em>or not do</em>) something for 30 consecutive days.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">Remember that show 30 Days? It was created by Morgan Spurlock, the dude who made Supersize Me. Well, this is a blatant ripoff of that, minus the cameras, post production, any sort of notoriety, or the enlightenment of others. But yeah, pretty much exactly the same.</p>

<p>(<em>I once saw Morgan Spurlock at SXSWi in Austin, Texas. It was nearly as fleeting as this comment.</em>)</p>

<p>The premise is simple, I&#8217;m going to do (<em>or not do</em>) something for 30 consecutive days.</p>

<p>This year-long experiment started after the 30th anniversary of the much longer experiment I call life. I hadn&#8217;t planned on doing this; I was simply punishing myself for missing three months of the gym by forcing myself to go every day for the next 30 days. (<em>See, I told you it was a blatant ripoff.</em>)</p>

<p>Of course it sucked at first, my body became too adjusted to the low-level of activity that I had become accustomed. My muscles were sore, but I love that feeling&#8230;it reassures me that I&#8217;ve been doing something productive. More annoyingly though, my 30-year-old joints were sore. This getting old shit is for the birds.</p>

<p>Surprisingly the streak became a motivational factor in itself. As I began to approach day 30 (<em>now going strong at day 38</em>), I started wondering what else I could do for 30 days straight. Unfortunately, I&#8217;m not a smart man so I decided to try vegetarianism (<em>meatless really</em>)&#8230;<a href="/2009/11/30/plight-of-the-modern-vegetarian/">again</a>.</p>

<p>Halfway through already, and it&#8217;s not horrible. It&#8217;s not great, but it&#8217;s not horrible. However, I find myself eating out a lot more &#8211; specifically at Chipotle and Taco Bell &#8211; and I&#8217;m tired of both. In fact, I&#8217;m kind of tired of Mexican food and cheese&#8230;see what madness this has driven me to?</p>

<p>I haven&#8217;t completely mapped out the rest of the year. I know it will include 30 days of documentaries, reading, development, and perhaps no shaving and no alcohol. Baking and cooking might make their way in there as well, as long as I can find people to pawn the goods onto.</p>

<p>I don&#8217;t want to pick anything that I won&#8217;t or can&#8217;t continue. I really don&#8217;t want to set myself up to fail; I like succeeding, it&#8217;s pretty cool.</p>

<p>There will be times that I might have to stack days due to life happening. New Orleans and possibly New York City (<em>Sass Conf!</em>) are looming on the horizon, but I can do it. 30 days isn&#8217;t that long. Maybe I&#8217;ll learn something, or maybe I&#8217;ll just get gout.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Django Frontend</title>
		<link>https://jonfaustman.com/2013/08/07/django-frontend/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Wed, 07 Aug 2013 15:43:51 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[frontend]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=733</guid>

					<description><![CDATA[<p class="lead">After I initially released Django Frontend Static and Django Frontend Template, I didn't like how they competed against each other instead of worked together. At the time I thought namespacing them along Django Frontend Skeleton to be same was a good idea...it wasn't.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">After I initially released <a href="https://pypi.python.org/pypi/django-frontend-static/">Django Frontend Static</a> and <a href="https://pypi.python.org/pypi/django-frontend-template/">Django Frontend Template</a>, I didn&#8217;t like how they competed against each other instead of working together. At the time I thought namespacing them along with <a href="https://pypi.python.org/pypi/django-frontend-skeleton/">Django Frontend Skeleton</a> to be same was a good idea&#8230;it wasn&#8217;t.</p>

<p>While the idea of a similar namespace was good in theory, it fell short in practice &#8211; and really probably shouldn&#8217;t have been done across several packages. (<em>Thanks to my coworkers for pointing that out.</em>) They all work well together, until you update one and not the rest. In that case you&#8217;ll end up missing something, and unfortunately that might be the base template. You can get around this problem by force upgrading during install <code class="lang-bash">--upgrade</code> but that&#8217;s a work around, not a solution.</p>

<h2>And the solution is&#8230;</h2>

<p><a href="https://pypi.python.org/pypi/django-frontend/">Django Frontend</a>.</p>

<p>Yes, <em>yet another</em> open source package with a nearly identical name. It&#8217;s basically (<em>and by basically I mean that&#8217;s actually what it is</em>) Django Frontend Template and Django Frontend Static combined into one package.</p>

<ul>
<li><a href="https://github.com/jonfaustman/django-frontend">Source</a></li>
<li><a href="https://pypi.python.org/pypi/django-frontend/">Package</a></li>
<li><a href="https://django-frontend.readthedocs.org/">Docs</a></li>
</ul>

<h3>Including</h3>

<p>Django Frontend includes:</p>

<ul>
<li>famfamfam’s Silk icons</li>
<li>Google Analytics</li>
<li>HTML5 Boilerplate’s CSS</li>
<li>iOS-Orientationchange-Fix</li>
<li>jQuery</li>
<li>jQuery UI</li>
<li>jQuery DataTables (CSS and JavaScript)</li>
<li>jQuery Dynamic Formset</li>
<li>jQuery Smooth Scroll</li>
<li>Modernizr</li>
<li>Normalize</li>
<li>Twitter Bootstrap (CSS and JavaScript)</li>
<li>a Django template built on HTML5 Bootstrap</li>
</ul>

<p>The initial release (<em>0.1.0</em>) was just a combination of the original two packages, the next release will include updated static files including Twitter Bootstrap 3.0.0 RC1. If <abbr title="Twitter Bootstrap">TWBS</abbr> releases more release candidates then I&#8217;ll update the package as a bug fix (<em>0.2.1, etc.</em>)</p>

<h2>Sunsetting</h2>

<p>Since Django Frontend contains the same functionality of both Django Frontend Template and Django Frontend Static, those two projects will be discontinued after a couple more releases. If you&#8217;re using them now, I suggest switching to Django Frontend soon. If you do continue to use these two while they are being updated, be sure to force upgrade!</p>

<p>While Django Frontend contains all the functionality of Django Frontend Skeleton, skeleton is more focused on using HTML5 Boilerplate and Twitter Bootstrap together, so it will continue on its own for now.</p>

<p>I&#8217;m also considering dropping the Google Analytics pieces as they continue to get more complicated, and could be better served by a more focused package like <a href="https://github.com/jcassee/django-analytical">django-analytical</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>My personal style guide</title>
		<link>https://jonfaustman.com/2013/07/30/my-personal-style-guide/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Tue, 30 Jul 2013 06:01:29 +0000</pubDate>
				<category><![CDATA[frontend]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=721</guid>

					<description><![CDATA[<p class="lead">A while ago I came across Harry Roberts's article about his HTML/CSS coding style, which just happened to be around the time I was researching style guides for work. I decided for the time being a written style guide was overkill for our team, but I definitely have my own personal style that's developed over the years.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">A while ago I came across <a href="https://twitter.com/csswizardry">Harry Roberts</a>&#8216;s article about <a href="http://csswizardry.com/2012/04/my-html-css-coding-style/">his HTML/CSS coding style</a>, which just happened to be around the time I was researching style guides for work. I decided for the time being a written style guide was overkill for our team, but I definitely have my own personal style that&#8217;s developed over the years.</p>

<p>My three-part tweet could pretty well sum up how this is going to go.</p>

<blockquote>
<p>Google&#8217;s HTML/CSS style guide (<a href="http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml">http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml</a>) is solid and pretty consistent with my personal style. &#8211; <sup>1</sup></p>

<p>Although I&#8217;m not a fan of omitting optional tags, while hypocritically omitting other optional items (attributes, self-closing, etc.) &#8211; <sup>2</sup></p>

<p>And more closely using BEM might violate shortest class/ID naming scheme. Although their application-specific prefix follows the same idea. &#8211; <sup>3</sup></p>

<a href="https://twitter.com/faustman/">Jon Faustman</a>, <a href="https://twitter.com/faustman/status/303926905684504576">Twitter</a> <sup><a href="https://twitter.com/faustman/status/303927591801335809">2</a></sup> <sup><a href="https://twitter.com/faustman/status/303928113107189761">3</a></sup>
</blockquote>

<h2>Tabs or spaces?</h2>

<p>The correct answer is soft tabs. Four spaces to a tab, to be exact.</p>

<p>I have invisibles turned on, and I hate seeing that damn tab. Two spaces is just too small for my liking, it&#8217;s less discernible.</p>

<p>Of course this (<em>and the majority of this article</em>) comes down to personal preference. Just don&#8217;t mix and match. If you&#8217;re collaborating and somebody is already using one style, stick to it&#8230;unless you&#8217;re willing to convert the entire project.</p>

<h2>HTML</h2>

<p>I&#8217;m a big fan of whitespace in code, it&#8217;s much more readable. To achieve that, I indent child elements and tend to have a line break (<em>or rather two</em>) after inherently block elements. Although I&#8217;m picky about this.</p>

<p>I don&#8217;t use a new line on the first child of an element; in that case I&#8217;ll put the opening tag directly under its parent. In the same vein, I stack closing tags together. That makes it easier for me to distinguish hierarchy. Here&#8217;s an example from this site:</p>

<pre><code class="language-php">&lt;a href="&lt;?php the_permalink(); ?&gt;" class="article"&gt;
    &lt;article &lt;?php post_class(); ?&gt; id="post-&lt;?php the_ID(); ?&gt;"&gt;
        &lt;h1 class="article__title"&gt;&lt;?php the_title(); ?&gt;&lt;/h1&gt;
        
        &lt;time class="article__date" pubdate datetime="&lt;?php the_time('Y-m-d H:i'); ?&gt;"&gt;&lt;?php the_time('M') ?&gt;&lt;i class="article__date--day"&gt;&lt;?php the_time('j') ?&gt;&lt;/i&gt;&lt;i class="article__date--year"&gt;&lt;?php the_time('Y'); ?&gt;&lt;/i&gt;&lt;/time&gt;

        &lt;div class="article__content lead"&gt;
            &lt;?php the_excerpt(); ?&gt;
        &lt;/div&gt;&lt;!-- /article__content --&gt;
    &lt;/article&gt;
&lt;/a&gt;</code></pre>

<p>If I wasn&#8217;t selectively adding new lines on inherent block elements, the code would look like this:</p>

<pre><code class="language-php">&lt;a href="&lt;?php the_permalink(); ?&gt;" class="article"&gt;
    &lt;article &lt;?php post_class(); ?&gt; id="post-&lt;?php the_ID(); ?&gt;"&gt;
    
        &lt;h1 class="article__title"&gt;&lt;?php the_title(); ?&gt;&lt;/h1&gt;
        
        &lt;time class="article__date" pubdate datetime="&lt;?php the_time('Y-m-d H:i'); ?&gt;"&gt;&lt;?php the_time('M') ?&gt;&lt;i class="article__date--day"&gt;&lt;?php the_time('j') ?&gt;&lt;/i&gt;&lt;i class="article__date--year"&gt;&lt;?php the_time('Y'); ?&gt;&lt;/i&gt;&lt;/time&gt;

        &lt;div class="article__content lead"&gt;
            &lt;?php the_excerpt(); ?&gt;
        &lt;/div&gt;&lt;!-- /article__content --&gt;
        
    &lt;/article&gt;
&lt;/a&gt;</code></pre>

<p>It&#8217;s still perfectly readable (<em>maybe even moreso</em>) but the first example is easier for me to visually parse hierarchy.</p>

<p>Speaking of visually parsing, perhaps you noticed <code class="language-html">&lt;!-- /article__content --&gt;</code>. I use a HTML comment to denote the closing tag on divs and spans (<em>although it might be time to include HTML5 elements as well</em>). It&#8217;s something I picked up (<em>from <a href="https://twitter.com/simplebits">Dan Cederholm</a>, I believe</em>) a long time ago and it&#8217;s stuck with me.</p>

<p>Sure, most text editors can fold blocks, but what about when you&#8217;re viewing live source code? That&#8217;s also why I use a HTML comment as opposed to a server side comment. I find them super helpful for collaboration or debugging.</p>

<p>One thing I miss about XHTML is its structure. It had a very defined structure: lowercase everything, close all elements (<em>in the order they were opened</em>), quote all attribute values, do not minimize attributes; if you don&#8217;t follow the structure do not pass go, do not collect $200.</p>

<p>Of course in HTML5 you can use XHTML&#8217;s structure, but it&#8217;s not forced upon you&#8230;and since it&#8217;s not, I don&#8217;t. I do; however, lowercase everything, quote all attribute values and close all elements except for self-closing tags.</p>

<p>Not quoting attributes seems like a recipe for disaster, especially in collaboration. Say somebody adds another class name in an unquoted class attribute &#8211; boom, problems. I do have a debate with a co-worker whether to use single or double quotes, I prefer double but again that&#8217;s just preference.</p>

<p>There is a whole host of <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#syntax-tag-omission">optional tags that can be omitted</a>, and a whole host of rules when it&#8217;s allowed. For simplicity and readability I do not omit tags.</p>

<pre><code class="language-markup">&lt;ol&gt;
    &lt;li&gt;One&lt;/li&gt;
    &lt;li&gt;Two&lt;/li&gt;
    &lt;li&gt;Three&lt;/li&gt;
&lt;/ol&gt;</code></pre>

<p>Is more preferable to me than:</p>

<pre><code class="language-markup">&lt;ol&gt;
    &lt;li&gt;One
    &lt;li&gt;Two
    &lt;li&gt;Three
&lt;/ol&gt;</code></pre>

<p>There are some things I do omit. I already mentioned that I omit self-closing tags, e.g. <code class="language-html">&lt;img src="" /&gt;</code>. I also omit type attributes for styles sheets and scripts, as well as attribute boolean values (<em>minimizing</em>) &#8211; <code class="language-html">selected="selected"</code> always just seemed silly to me.</p>

<h2>CSS</h2>

<pre><code class="language-css">/* Links */
a {
    color: #00f;
    font-weight: bold;
}

a:visited {
    color: #800080;
}

a:active,
a:focus,
a:hover {
    background-color: #fff;
    color: #f00;
    -moz-text-shadow: 1px 0 1px rgba(0,0,0,.5);
    -webkit-text-shadow: 1px 0 1px rgba(0,0,0,.5);
    text-shadow: 1px 0 1px rgba(0,0,0,.5);
}</code></pre>

<p>This fake code snippet should pretty accurately reflect my CSS style. I used to prefer one-line CSS, but that eventually faded in favor of more readability.</p>

<p>I alphabetize declarations (<em>and vendor prefixes by its standard property</em>), using a single space after the property, always include a semi-colon directly after the value, and use the same indentation <em>(four space soft tabs for each level</em>) that I do for HTML.</p>

<p>I include a space after a selector and before the declaration block. Each selector and declaration go on their own lines.</p>

<p>I group related rules together in sections, denoted with a comment. I leave a blank line between each ruleset, but separate sections by two blank lines.</p>

<p>I omit units for 0 values.</p>

<p>I use the most appropriate color format for the job (<em>preferring hex shorthand</em>), although I&#8217;m not a huge fan of color keywords. Although I prefer hex color shorthand, I only use shorthand when it&#8217;s appropriate; otherwise you may add additional properties to override later.</p>

<h3>Naming</h3>

<p>I am a huge fan of <a href="http://bem.info/" title="Block Element Modifier">BEM</a>. It&#8217;s certainly changed my opinion towards using classes and OOCSS. I won&#8217;t get too much into BEM right now, but the naming scheme goes like <code class="language-css">.block__element--modifier</code>. This can produce longer selector names than you might normally use, but it&#8217;s definitely worth the tradeoff.</p>

<p>I also like to prepend classes with the project or app name. For a project foo, a class name could end up being <code class="language-css">.foo-block__element--modifier</code>. Long, but worth it. The project name will stop it from conflicting with other stylesheets, while BEM will quickly identify how it&#8217;s used inside the project.</p>

<p>If I&#8217;m not using BEM, then I like to keep my class names short but descriptive. Class names don&#8217;t have to be semantic, but they should be useful.</p>

<p>One thing you won&#8217;t see me do is over qualify a selector. That&#8217;s one thing that bothers me. Why would you purposefully write <code class="language-css">ul.foo</code> instead of just <code class="language-css">.foo</code>? It&#8217;s more fragile and has more specificity. Of course you might need to do that to override specificity, but it shouldn&#8217;t be the norm.</p>

<h2>Sass</h2>

<pre><code class="language-css">// Links
a
    color: #00f
    font-weight: bold
    &:visited
        color: #800080
    &:active,
    &:focus,
    &:hover
        +text-shadow(1px 0 1px rgba(0,0,0,.5)
        background-color: #fff
        color: #f00
</code></pre>

<p>For the most part, I write my Sass similar to my CSS. Other than the format itself, the big difference is in the declaration order. Since <code class="language-scss">@include</code> and <code class="language-scss">@extend</code> may contain several different properties, I like to put them first. This is also helpful if I need to override a property from a mixin.</p>

<p>You might also notice the lack of line breaks between selectors, but that&#8217;s because I like to use nesting to reference the parent selector. Unrelated selectors are treated the same as I would treat them in CSS.</p>

<p>Since I do use Sass&#8217;s indented syntax, I used to go nesting crazy. I&#8217;ve since got that under control and prefer not to nest more than two layers deep. Any more than that and it&#8217;s a good candidate to be rewritten.</p>

<p>Sass&#8217;s CSS output used to be less than optimal to me, as it did&#8217;t produce my preferred format exactly, but in the end it doesn&#8217;t matter. Most likely the code will be minified for production anyway (<em>which Sass&#8217;s output style can easily do for you</em>).

<h2>Be pragmatic not dogmatic</h2>

<p>Whether it&#8217;s a branding style guide or a coding style guide (<em>and perhaps moreso the coding style guide</em>) it&#8217;s much better to be pragmatic than dogmatic. Having defined rules will only get you so far, eventually you have to ship code.</p>

<p>If you have disagreements or optimizations on an established style guide, talk it out &#8211; there should always be room for change.</p>

<p>Much like Sass&#8217;s output, Django&#8217;s HTML output used to drive me crazy, but it&#8217;s just not worth worrying about. You control what you can, and you let other things slide. You&#8217;ll be hard pressed to find frameworks that comply with your style guide, but in the end harnessing their power is completely worth it.</p>

<p>I love seeing company&#8217;s style guides and comparing my personal style against them. I&#8217;m planning on making a small style guide for this site as well.</p>

<p>(<em>Edit 2013-07-31</em>): I&#8217;ve added a <a href="/style-guide/">style guide</a> for the site.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sass reusables</title>
		<link>https://jonfaustman.com/2013/07/23/sass-reusables/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Tue, 23 Jul 2013 19:39:53 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=667</guid>

					<description><![CDATA[<p>In my Should have kept it Sass-y article, I briefly mentioned and linked to a GitHub gist of Sass reusables that I wrote for my projects. While I'm sure most people who get far enough to see it will know what it's all about, I wanted to include some explanations.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">In my <a href="2013/07/21/should-have-kept-it-sass-y/">Should have kept it Sass-y</a> article, I briefly mentioned and linked to a <a href="https://gist.github.com/jonfaustman/2715fb68544216f7979b">GitHub gist</a> of Sass reusables that I wrote for my projects. While I&#8217;m sure most people who get far enough to see it will know what it&#8217;s all about, I wanted to include some explanations.</p>

<p>When I start a new project, I generally copy this gist into a Sass partial named _base.sass. Combined with importing Compass, I&#8217;m pretty much ready to go.</p>

<h2>Defaults</h2>

<p>Just some default variables for the arguments within the mixins and functions, they also happen to be what I use most often.</p>

<p>The base font size is set to 16px. Since I generally build mobile first, I set the &#8220;mobile&#8221; max-width to 767px, tablet&#8217;s portrait orientation (<em>pretty much iPad</em>) to a min-width of 768px, and finally &#8220;desktop&#8221; to a min-width of 769px.</p> 

<pre><code class="language-scss">// Defaults
$base-font-size: 16px !default
$base-respond-to-mobile: 767px !default
$base-respond-to-tablet: 768px !default
$base-respond-to-desktop: 769px !default</code></pre>

<h2>Relative units</h2>

<p>I love using relative units, and without sounding too dogmatic, you should too. Check out <a href="https://twitter.com/csswizardry">Harry Robert</a>&#8216;s article on <a href="http://csswizardry.com/2011/12/measuring-and-sizing-uis-2011-style/">Measuring and Sizing UIs.</a></p>

<p>His key points sums it up perfectly, although I would definitely use unitless line-heights as <a href="http://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/">recommended</a> by <a href="https://twitter.com/meyerweb">Eric Meyer</a> in 2006.</p>

<blockquote>
<ul>
<li>Set structure in percentages. This includes content areas, sidebars etc.</li>
<li>Set type in rems with a pixel fallback for older browsers. This gives us a great amount of control with added scalability.</li>
<li>Set type-related items in ems so that paddings et al scale with the font-size.</li>
<li>Set line-heights in relative units. Or, even better, with no units at all.</li>
<li>Don’t set measurements on components at all. They should remain fully fluid and ‘just work’ wherever you drop them.</li>
</ul>
<a href="https://twitter.com/csswizardry">Harry Robert</a>, <a href="http://csswizardry.com/2011/12/measuring-and-sizing-uis-2011-style/">Measuring and sizing UIs, 2011-style (and beyond)</a>
</blockquote>

<p>The problem is the real world. Designers typically send me font sizes and line-heights in pixels, not to mention it&#8217;s much easier to distinguish a pixel size (<em>say 20px</em>) versus a relative size (<em>1.42857em</em>). Thus I like to use pixels throughout and let Sass translate them into the appropriate relative unit. It&#8217;s also much less painful if you want to adjust font sizes but not layout.</p>

<pre><code class="language-scss">// Function for calculating rem.
// Ensure both numbers use the same unit.
@function rem($size, $base: $base-font-size)
    @return #{$size/$base}rem</code></pre>

<p>Since it&#8217;s a function you&#8217;d call it inline, like so:</p>

<pre><code class="language-scss">p
    font-size: rem(20px)</code></pre>

<p>With the default left at 16px, it would return:</p>

<pre><code class="language-css">p {
    font-size: 1.25rem;
}</code></pre>

<pre><code class="language-scss">// Function for calculating em.
// Ensure both numbers use the same unit.
@function em($size, $base: $base-font-size)
    @return #{$size/$base}em</code></pre>

<p>The em function works exactly the same.</p>

<pre><code class="language-scss">p
    font-size: em(20px)</code></pre>

<pre><code class="language-css">p {
    font-size: 1.25em;
}</code></pre>

<p>Unlike rems, ems are set relative to the parent instead of relative to the root. So if you wanted a paragraph with 20 pixels that&#8217;s inside of a parent with say 30 pixels, you&#8217;d have to use the $base argument to get the appropriate ems. Remember target / context = result.</p>

<pre><code class="language-scss">p
    font-size: em(20px, $base: 30px)</code></pre>

<pre><code class="language-css">p {
    font-size: 0.66667em;
}</code></pre>

<p>I need to update these two a little bit to account for different units, since right now you need to ensure the units are matching so they cancel out.</p>

<h2>Fonts</h2>

<p>I hardly ever use the rem function on its own, the real power with it comes in the font mixin. (<em>Although I don&#8217;t really know why I&#8217;m not using it for some margins and sizes.</em>) It&#8217;s a little daunting when you first look at it, but only because of the conditional checks.</p>

<p>This mixin will let you use all of the font properties as well as line-height and letter-spacing, so you can put the majority of your typographic styles in one little place. If you&#8217;re using at least the size and family, then you can set the $shorthand argument to true and you&#8217;ll get your fonts in CSS shorthand. The variable $font-initial-value is set to normal to avoid errors, and output less CSS (<em>excluding shorthand</em>) than you might need.</p>

<pre><code class="language-scss">// Font mixin
$font-intial-value: normal !default
@mixin font($family: false, $size: false, $style: $font-intial-value, $weight: $font-intial-value, $variant: $font-intial-value, $spacing: false, $height: false, $shorthand: false)
    @if $shorthand == true
        @if $height
            font: $style $variant $weight $size/#{$height} $family
            font-size: rem($size)
        @else
            font: $style $variant $weight $size $family
            font-size: rem($size)
        @if $spacing
            letter-spacing: $spacing   
    @else
        @if $family
            font-family: $family
        @if $size
            font-size: $size
            font-size: rem($size)
        @if $style != $font-intial-value
            font-style: $style
        @if $weight != $font-intial-value
            font-weight: $weight
        @if $variant != $font-intial-value
            font-variant: $variant
        @if $spacing
            letter-spacing: $spacing
        @if $height
            line-height: $height</code></pre>

<p>Using the same example as earlier, if you wanted to get a 20 pixel paragraph you&#8217;d now include the font mixin.</p>

<pre><code class="language-scss">p
    +font($size: 20px)</code></pre>

<p>But this time it would also return a pixel fallback:</p>

<pre><code class="language-css">p {
    font-size: 20px;
    font-size: 1.25rem;
}</code></pre>

<p>Now this time you might want to change more about the font, like the family, the line-height and the size. You could do this (<em>and yes, I really should do something with the unquote in the function</em>):</p>

<pre><code class="language-scss">p
        +font($family: unquote("Arial, sans-serif"), $size: 20px, $height: 1.5)</code></pre>

<p>Which would return:</p>

<pre><code class="language-css">p {
    font-family: Arial, sans-serif;
    font-size: 20px;
    font-size: 1.25rem;
    line-height: 1.5;
}</code></pre>

<p>But since you have enough properties, why not use shorthand? All you&#8217;d have to do is set the $shorthand argument to true.</p>

<pre><code class="language-scss">p
    +font($family: unquote("Arial, sans-serif"), $size: 20px, $height: 1.5, $shorthand: true)</code></pre>

<p>And this time you&#8217;d get:</p>

<pre><code class="language-css">p {
    font: normal normal normal 20px/1.5 Arial, sans-serif;
    font-size: 1.25rem;
}</code></pre>

<p>Voilà. The initial properties are somewhat annoying, but they really won&#8217;t hurt anything&#8230;unless of course you want to change them, then you can do that when you include the mixin.</p>

<h3>Web fonts</h3>

<p>The web fonts mixin works in exactly the same manner, but is for including web fonts like Google Web Fonts or Typekit using the WebFont Loader. If you want to hide <abbr title="Flash of Unstyled Text">FOUT</abbr> then you can set the $wf-hide argument to true. Other than that, everything else is the same&#8230;that is until it outputs to CSS.</p>

<pre><code class="language-scss">// Web font mixin
@mixin wf-font($wf-family: false, $wf-size: false, $wf-style: $font-intial-value, $wf-weight: $font-intial-value, $wf-variant: $font-intial-value, $wf-spacing: false, $wf-height: false, $shorthand: false, $wf-hide: false)
    @if $wf-hide == true
        .wf-loading &
            visibility: hidden
    .wf-active &
        @if $shorthand == true
            @if $wf-height
                font: $wf-style $wf-variant $wf-weight $wf-size/#{$wf-height} $wf-family
                font-size: rem($wf-size)
            @else
                font: $wf-style $wf-variant $wf-weight $wf-size $wf-family
                font-size: rem($wf-size)
            @if $wf-spacing
                letter-spacing: $wf-spacing   
        @else
            @if $wf-family
                font-family: $wf-family
            @if $wf-size
                font-size: $wf-size
                font-size: rem($wf-size)
            @if $wf-style != $font-intial-value
                font-style: $wf-style
            @if $wf-weight != $font-intial-value
                font-weight: $wf-weight
            @if $wf-variant != $font-intial-value
                font-variant: $wf-variant
            @if $wf-spacing
                letter-spacing: $wf-spacing
            @if $wf-height
                line-height: $wf-height</code></pre>

<p>Maybe this time you want to use Open Sans as your font family.</p>

<pre><code class="language-scss">p
    +font($family: unquote("Arial, sans-serif"), $size: 20px, $height: 1.5, $shorthand: true)
    +font($wf-family: "Open Sans", $wf-size: 20px, $wf-height: 1.5, $shorthand: true, $wf-hide: true)
</code></pre>

<p>You&#8217;d get:</p>

<pre><code class="language-css">p {
    font: normal normal normal 20px/1.5 Arial, sans-serif;
    font-size: 1.25rem;
}

.wf-loading p {
    visibility: hidden;
}

.wf-active p {
    font: normal normal normal 20px/1.5 "Open Sans";
    font-size: 1.25rem;
}</code></pre>

<p>I&#8217;ll probably go into webfonts at another time; however, that time is not now.</p>

<h2>Mobile first media query</h2>

<p>As I mentioned previously, I tend to build mobile first so that&#8217;s what this mixin is geared towards. I often only include three breakpoints unless otherwise needed. For most instances I think mobile, tablet portrait, and desktop should cover your bases. (<em>For mobile first, having a &#8220;mobile&#8221; media query isn&#8217;t that useful but the need might arise.</em></p> 

<pre><code class="language-scss">// Mobile first media query mixin
@mixin respond-to($device)
    @if $device == mobile
        @media only screen and (max-width: $base-respond-to-mobile)
            @content
    @if $device == tablet
        @media only screen and (min-width: $base-respond-to-tablet)
            @content
    @if $device == desktop
        @media only screen and (min-width: $base-respond-to-desktop)
            @content</code></pre>

<p>In this instance let&#8217;s say you want your paragraph to float in tablet and above for some reason. So you&#8217;d include the mixin like so:</p>

<pre><code class="language-scss">p
    +respond-to(tablet)
        float: left</code></pre>

<p>Which will net you this sweet little media query for tablet portrait sizes and larger.</p>

<pre><code class="language-css">@media only screen and (min-width: 768px) {
  p {
    float: left;
  }
}</code></pre>

<p>Hopefully these are somewhat useful for your projects. Feel free to fork, copy, modify, or otherwise do what you please with them. If you see something that I could improve upon then please let me know.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Should have kept it Sass-y</title>
		<link>https://jonfaustman.com/2013/07/20/should-have-kept-it-sass-y/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Sat, 20 Jul 2013 23:44:07 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=644</guid>

					<description><![CDATA[<p>Truth be told, I hardly ever write plain CSS anymore (<em>only if a project requires very little CSS or I'm updating an existing project without it</em>.) Now Sass just feels more natural. It's certainly more powerful and flexible. However, when I started updating this site I kind of wanted to write plain CSS for it...I soon regretted that decision.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">Truth be told, I hardly ever write plain CSS anymore (<em>only if a project requires very little CSS or I&#8217;m updating an existing project without it</em>.) Now Sass just feels more natural. It&#8217;s certainly more powerful and flexible. However, when I started updating this site I kind of wanted to write plain CSS for it&#8230;I soon regretted that decision.</p>

<p>Actually writing this group of selectors made me really reconsider my decision, yet I forged ahead.</p>

<pre><code class="language-css">.nav__link:active,
.nav__link:hover,
.nav__link:focus,
.wp-pagenavi > .page:active,
.wp-pagenavi > .page:focus,
.wp-pagenavi > .page:hover,
.wp-pagenavi > .previouspostslink:active,
.wp-pagenavi > .previouspostslink:focus,
.wp-pagenavi > .previouspostslink:hover,
.wp-pagenavi > .first:active,
.wp-pagenavi > .first:focus,
.wp-pagenavi > .first:hover,
.wp-pagenavi > .nextpostslink:active,
.wp-pagenavi > .nextpostslink:focus,
.wp-pagenavi > .nextpostslink:hover,
.wp-pagenavi > .last:active,
.wp-pagenavi > .last:focus,
.wp-pagenavi > .last:hover {
    background-color: #fff;
}</code></pre>

<p>So like two separate religions colliding into the sanctimony of marriage, it was time to convert.</p>

<h2>Setup Compass</h2>

<p>At this point Sass and Compass are synonymous to me; if I&#8217;m using Sass then I&#8217;m using Compass. There are just so many useful features included in Compass. In fact, Compass is the main reason I never really consider going back to Less.</p>

<p>I use Compass so often that I have a handy dandy bash alias for it.</p>

<pre><code class="language-bash">alias compass_new='compass create --bare --syntax sass --sass-dir "src/sass" --css-dir "static/css" --javascripts-dir "static/js" --images-dir "static/img"'</code></pre>

<p>This creates a new Compass project using the original Sass syntax, which is kept in &#8216;src/sass&#8217; (<em>in the directory you created the project</em>) and converts it in the &#8216;static/css&#8217; directory. I&#8217;m not using the javascripts-dir or images-dir right now, so those are just changed to my usual preference of a &#8216;static/*&#8217; directory.</p>

<p>This creates a config.rb file, which you can easily adjust later. I actually changed the css-dir to be in the root of the theme in order to play nicely with WordPress.</p>

<p>In another terminal tab (<em>I use iTerm</em>) I type &#8216;compass watch&#8217; and boom, Compass is effectively running.</p>

<h2>@import Compass</h2>

<p>You can <a href="http://compass-style.org/reference/compass/">import</a> as much or as little of Compass as you&#8217;d like. In this case I just want to import the CSS3 and reset modules. So I add this to my partial file (<em>I&#8217;ll get there</em>):</p>

<pre><code class="language-scss">@import compass/reset
@import compass/css3</code></pre>

<p>By importing Compass&#8217;s built in reset module I can remove <a href="http://meyerweb.com/eric/tools/css/reset/">Eric Meyer&#8217;s reset</a> from my code. The CSS3 module will just make including cross-browser CSS3 styles that much easier.</p>

<p>For instance, instead of writing:</p>

<pre><code class="language-css">    -moz-border-radius-topleft: 10px;
    -webkit-border-top-left-radius: 10px;
    border-top-left-radius: 10px;</pre></code>

<p>I can just write:</p>

<pre><code class="language-scss">    +border-top-left-radius(10px)</code></pre>

<p>When converted to CSS is:</p>

<pre><code class="language-css">    -moz-border-radius-topleft: 10px;
    -webkit-border-top-left-radius: 10px;
    border-top-left-radius: 10px;</code></pre>

<p>Well, that looks familiar. Do I need the vendor pre-fixes at this point? Probably not, but why not include them when it's that simple?</p>

<h2>Sass partials</h2>

<p><a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#partials">Sass partials</a> are Sass files beginning with an underscore in their name. Unlike regular Sass files these don't get converted to CSS when a directory is being watched.</p>

<p>Sass partials are the bee's knees, although I use them a lot more sparingly than some people. However, I do usually create a '_base.sass' file for each project. This is where I put most of my @imports and include useful, but not overly specific variables, functions or mixins.</p>

<p>I use some functions and mixins so often that I put together some that I wrote in a <a href="https://gist.github.com/jonfaustman/2715fb68544216f7979b">gist</a> (<em>although I need to add my responsive mixin in there</em>.)</p>

<p>I'm not using any webfonts on this site, so there's no need to keep that part. That results in <a href="https://github.com/jonfaustman/jonfaustman.com/blob/master/wp-content/themes/faustman/src/sass/_base.sass">this Sass partial</a>.</p>

<h2>Converting</h2>

<p>While all valid CSS is valid SCSS, I prefer the concise indented syntax, not to mention CSS is inherently missing the benefits of Sass.</p>

<p>Thankfully Sass has a built in sass-convert option.</p>

<pre><code class="language-bash">sass-convert styles.css src/sass/styles.sass</code></pre>

<p>Running that would have converted my styles to the indented syntax; however, I just did it myself in TextMate...it really didn't take too long.</p>

<p>Once my CSS was converted to Sass, I started going through and updating Sass to make it better and more efficient. I updated the CSS3 declarations to use includes from Compass, as demonstrated earlier.</p>

<p>I went through used some of my custom functions. For instance, this:</p>

<pre><code class="language-css">h1 {
    font-size: 26px;
    font-size: 2rem;
    margin-bottom: .769em;
}</code></pre>

<p>Was updated to this:</p>

<pre><code class="language-scss">h1
    +font($size: 26px)
    margin-bottom: em(20px, $base: 26px)</code></pre>

<p>That's using my custom mixin for fonts (<em>'+' is conciser way of @import</em>) and my custom function to turn pixels into ems. This outputs:</p>

<pre><code class="language-css">h1 {
  font-size: 26px;
  font-size: 2rem;
  margin-bottom: 0.76923em;
}</pre></code>

<p>And of course there's the power of nesting.</p>

<pre><code class="language-css">table {
    border-collapse: collapse;
    margin-bottom: 1.5em;
    width: 100%;
}

table tr {
    vertical-align: top;
}

table tr th {
    background-color: #eee;
    color: #111;
    font-weight: bold;
    padding: .25em;
}

table tr td {
    padding: .25em;
}</pre></code>

<p>Which is updated in indented syntax to:</p>

<pre><code class="language-scss">table
    border-collapse: collapse
    @extend %base-vertical-rhythm
    @extend %col-1
    tr
        vertical-align: top
        th
            background-color: $base-color-invert
            @extend %base-color
            +font($weight: bold)
            padding: .25em
        td
            padding: .25em</code></pre>

<p>And that snippet brings me to variables (<em>$base-color-invert</em>) and silent classes (<em>@extend %base-vertical-rhythm</em>).</p>

<h2>Variables</h2>

<p>One of the things that first piqued my interest in CSS pre-processors was variables.</p>

<pre><code class="language-scss">// Project variables
// Colors
$base-color: #111
$base-color-invert: invert($base-color)
$base-color-invert-darken-6: darken($base-color-invert, 6.5deg)
$base-color-invert-lighten-6: lighten($base-color-invert, 6.5deg)
$base-color-lighten-13: lighten($base-color, 13.3deg)
$base-color-lighten-33: lighten($base-color, 33.3deg)
$base-color-link: rgb(110, 155, 220)
$base-color-link-hue-49: adjust-hue($base-color-link, 49deg)
$base-color-link-hue-120: adjust-hue($base-color-link, 120deg)
$base-color-link-hue-neg-71: adjust-hue($base-color-link, -71deg)

// Fonts
$base-font-size: 13px
$base-font-family-sans-serif: Arial, sans-serif
$base-font-family-serif: Georgia, 'Times New Roman', Times, serif
$base-line-height: 1.5</pre></code>

<p>The color variables are kind of crazy, but since I already had my colors selected, I decided to use Sass' color math for funsies. I'll have to get into color math at another time, but the power of variables is self evident.</p>

<h2>Silent classes</h2>

<p>If Sass partials are the bee's knees than silent classes are the cat's fucking pajamas. Like partials, silent classes aren't output into CSS...that is until they are extended.</p>

<p>Remember that ridiculous ruleset from the beginning of this article, well I can easily achieve the same effective ruleset much easier.</p>

<pre><code class="language-scss">%prominent-link
    background-color: $base-color-invert-darken-6
    border: 3px solid $base-color-lighten-13
    +box-sizing(border-box)
    @extend %base-color
    display: inline-block
    +font($weight: bold)
    line-height: 39px
    text-align: center
    +transition(background-color .2s linear)
    &:active,
    &:focus,
    &:hover
        background-color: $base-color-invert-lighten-6

.nav__link,
.wp-pagenavi > .current,
.wp-pagenavi > .page,
.wp-pagenavi > .previouspostslink,
.wp-pagenavi > .first,
.wp-pagenavi > .nextpostslink,
.wp-pagenavi > .last
    @extend %prominent-link</code></pre>

<p><code class="language-scss">%prominent-link</code> is the silent class, which is extended with @extend. And since I have active, focus and hover nested underneath they are included as well.</p>

<p>If you're curious, this is the CSS output:</p>

<pre><code class="language-css">.nav__link,
.wp-pagenavi > .current,
.wp-pagenavi > .page,
.wp-pagenavi > .previouspostslink,
.wp-pagenavi > .first,
.wp-pagenavi > .nextpostslink,
.wp-pagenavi > .last {
  background-color: #dddddd;
  border: 3px solid #333333;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  display: inline-block;
  font-weight: bold;
  line-height: 39px;
  text-align: center;
  -webkit-transition: background-color 0.2s linear;
  -moz-transition: background-color 0.2s linear;
  -o-transition: background-color 0.2s linear;
  transition: background-color 0.2s linear;
}
.nav__link:active,
.wp-pagenavi > .current:active,
.wp-pagenavi > .page:active,
.wp-pagenavi > .previouspostslink:active,
.wp-pagenavi > .first:active,
.wp-pagenavi > .nextpostslink:active,
.wp-pagenavi > .last:active, .nav__link:focus,
.wp-pagenavi > .current:focus,
.wp-pagenavi > .page:focus,
.wp-pagenavi > .previouspostslink:focus,
.wp-pagenavi > .first:focus,
.wp-pagenavi > .nextpostslink:focus,
.wp-pagenavi > .last:focus, .nav__link:hover,
.wp-pagenavi > .current:hover,
.wp-pagenavi > .page:hover,
.wp-pagenavi > .previouspostslink:hover,
.wp-pagenavi > .first:hover,
.wp-pagenavi > .nextpostslink:hover,
.wp-pagenavi > .last:hover {
  background-color: white;
}</code></pre>

<p>One problem with silent classes is that you can't use them inside a mixin, which is usually how responsive is handled. But I believe this is being worked on, and they're still fairly new.</p>

<p>Speaking of responsive, I'll quickly go over those changes.</p>

<h2>Responsive</h2>

<p>With the combined power of mixins and nesting, Sass makes responsive development that much easier. In my partial I have a responsive mixin:</p>

<pre><code class="language-scss">// Mixin for media queries
@mixin respond-to($device)
    @if $device == mobile
        @media only screen and (max-width: 767px)
            @content
    @if $device == tablet
        @media only screen and (min-width: 768px)
            @content
    @if $device == desktop
        @media only screen and (min-width: 769px)
            @content</code></pre>

<p>On this site I'm only developing for mobile and then responding to "desktop." So I could delete the tablet part but it's not doing any harm. One thing I do need to optimize is change the sizes to a variable to be set later.</p>

<p>By using this mixin I can add the responsive style right along with the others - no more forgetting the original styles, or separate stylesheets or segregated media queries. For instance I no longer have to do this:</p>

<pre><code class="language-css">/* Main layout **/
#wrapper {
    margin: 0 auto;
}

@media only screen and (min-width: 769px) {
    #wrapper {
        min-width: 59.154em; /* 769px */
        max-width: 73.846em; /* 960px */
    }
}</code></pre>

<p>That same selector was referenced 331 lines later. Now I can just do this:</p>

<pre><code class="language-scss">// Main layout
#wrapper
    margin: 0 auto
    +respond-to(desktop)
        min-width: em(769px)
        max-width: em(960px)</code></pre>

<p>However, the output is something I'm less than thrilled about. It adds the media query where the selector is referenced, which means the media query is repeated several times in the CSS. This is something that's actively being worked on, and I'm sure it will eventually be much cleaner.</p>

<pre><code class="language-css">#wrapper {
  margin: 0 auto;
}
@media only screen and (min-width: 769px) {
  #wrapper {
    min-width: 59.15385em;
    max-width: 73.84615em;
  }
}</code></pre>

<h2>La fin</h2>

<p>And with your powers combined, I am Captain Planet...err wait, I mean and with that my CSS is converted to Sass, which is, um, converted back to CSS. But hey, it's worth it, especially when I can quickly change the Sass output style to compressed and instantly have a minified CSS file.</p>

<p>As always, the full code is available on <a href="https://github.com/jonfaustman/jonfaustman.com/tree/develop">GitHub</a> if you're interested, and after reading this far, I hope you are.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Front-end quizzes</title>
		<link>https://jonfaustman.com/2013/07/12/front-end-quizzes/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Fri, 12 Jul 2013 06:01:01 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=624</guid>

					<description><![CDATA[<p>Throughout the years, I've trained several people (<em>mostly students</em>); however, like many other situations I often teach them HOW to do things not WHY do things. So as I was starting to train new students, I decided it was a good idea to put together some quizzes that ask why in addition to how. It also served as a pretty good refresher (<em>or introduction</em>) to other members of our team.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">Throughout the years, I&#8217;ve trained several people (<em>mostly students</em>); however, like many other situations I often teach them HOW to do things not WHY do things. So as I was starting to train new students, I decided it was a good idea to put together some quizzes that ask why in addition to how. It also served as a pretty good refresher (<em>or introduction</em>) to other members of our team.</p>

<p>Without further explanation or citations (<em>I&#8217;ll most likely add these later, in addition to making it an actual quiz format</em>) here are the first few quizzes I put together. Due to time constraints, the answers are already marked (<em>makes it a pretty easy quiz, no?</em>)

<h2>CSS 101</h2>

<fieldset>
    <legend>1. What does CSS stand for?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-1-1" class="input-radio">Conflicting Style Sheets</label></li>
        <li><label><input type="radio" name="q-1-1" class="input-radio">Cansei de Ser Sexy</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-1-1" class="input-radio" checked>Cascading Style Sheets</label></li>
        <li><label><input type="radio" name="q-1-1" class="input-radio">Court Side Seats</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>2. Which of the following properly describes CSS syntax?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-1-2" class="input-radio">property { selector: value; }</label></li>
        <li><label><input type="radio" name="q-1-2" class="input-radio">value { selector: property; }</label></li>
        <li><label><input type="radio" name="q-1-2" class="input-radio">selector { value: property; }</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-1-2" class="input-radio" checked>selector { property: value; }</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>3. The property: value;  of CSS syntax is called what?</legend>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="radio" name="q-1-3" class="input-radio" checked>declaration</label></li>
        <li><label><input type="radio" name="q-1-3" class="input-radio">selector</label></li>
        <li><label><input type="radio" name="q-1-3" class="input-radio">specificity</label></li>
        <li><label><input type="radio" name="q-1-3" class="input-radio">cascade</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>4. What color text would paragraph end up having?</legend>
    <pre><code class="language-css">    p { color: blue; }
    p { color: red; }</code></pre>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-1-4" class="input-radio">blue</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-1-4" class="input-radio" checked>red</label></li>
        <li><label><input type="radio" name="q-1-4" class="input-radio">purple</label></li>
        <li><label><input type="radio" name="q-1-4" class="input-radio">black</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>5.What are the three ways to insert CSS? (3 pts.)</legend>
    <ol class="list--alpha">
        <li><label><input type="checkbox" name="q-1-5" class="input-radio">Magic</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-1-5" class="input-radio" checked>Inline Styles</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-1-5" class="input-radio" checked>External Style Sheet</label></li>
        <li><label><input type="checkbox" name="q-1-5" class="input-radio">Science</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-1-5" class="input-radio" checked>Internal Style Sheet</label></li>
        <li><label><input type="checkbox" name="q-1-5" class="input-radio">Prayer</label></li>
        <li><label><input type="checkbox" name="q-1-5" class="input-radio">Cascading</label></li>
    </ol>
</fieldset>


<h2>CSS Selectors</h2>

<fieldset>
    <legend>1. Which CSS rule correctly identifies a class selector?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-2-1" class="input-radio">#foo { color: #000; }</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-2-1" class="input-radio" checked>.foo { color: #000; }</label></li>
        <li><label><input type="radio" name="q-2-1" class="input-radio">foo > bar { color: #000; }</label></li>
        <li><label><input type="radio" name="q-2-1" class="input-radio">foo bar { color: #000; }</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>2. How many id selectors with the same attribute (e.g. id#foo) may technically be used in a single HTML document?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-2-2" class="input-radio">As many as needed</label></li>
        <li><label><input type="radio" name="q-2-2" class="input-radio">10</label></li>
        <li><label><input type="radio" name="q-2-2" class="input-radio">Five</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-2-2" class="input-radio" checked>One</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>3. What type of selector is foo > bar?</legend>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="radio" name="q-2-3" class="input-radio" checked>child combinator</label></li>
        <li><label><input type="radio" name="q-2-3" class="input-radio">descendant selector</label></li>
        <li><label><input type="radio" name="q-2-3" class="input-radio">id selector</label></li>
        <li><label><input type="radio" name="q-2-3" class="input-radio">class selector</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>4. Which of the following rule would make the second paragraph text red?</legend>
    <pre><code class="language-markup">    &lt;p class="one" id="red"&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse felis augue, sollicitudin vel dapibus sit amet, mollis condimentum est. Etiam et suscipit massa. Praesent at lacus elit, vitae lobortis ligula. In ac convallis diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse eros sapien, interdum sit amet sollicitudin nec, consectetur ornare tellus. Nam fermentum mollis aliquam. Nullam ut sem in lacus feugiat commodo. Maecenas fermentum, felis luctus vulputate vehicula, magna ligula sollicitudin justo, at ornare est nulla vitae quam. Mauris nec diam metus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi tincidunt purus ac ipsum porttitor adipiscing.&lt;/p&gt;

    &lt;p class="two" id="blue"&gt;Aliquam laoreet eleifend semper. Nulla faucibus orci sit amet tellus feugiat id elementum libero mollis. Proin diam mauris, iaculis in sodales id, vestibulum accumsan enim. Sed eu leo est, sit amet sodales nulla. Ut facilisis massa non turpis ornare luctus. Sed vestibulum adipiscing pellentesque. Pellentesque porttitor placerat mattis. Donec felis leo, semper elementum mollis a, volutpat in dolor. Sed nec ante ac arcu vulputate pretium. Nunc egestas leo non neque fringilla non scelerisque lacus sodales. Aenean sit amet laoreet velit. Donec elementum, libero quis eleifend consequat, erat arcu interdum augue, vitae dapibus lacus est imperdiet mi.&lt;/p&gt;</code></pre>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-2-4" class="input-radio">.one { color: red; }</label></li>
        <li><label><input type="radio" name="q-2-4" class="input-radio">#red { color: red; }</label></li>
        <li><label><input type="radio" name="q-2-4" class="input-radio">p { color: inherit; }</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-2-4" class="input-radio" checked>p + p { color: red; }</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>5. There are both pseudo-class and pseudo-element selectors.</legend>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="radio" name="q-2-5" class="input-radio" checked>True</label></li>
        <li><label><input type="radio" name="q-2-5" class="input-radio">False</label></li>
    </ol>
</fieldset>

<h2>CSS Specificity Pt. 1</h2>

<p>Specificity, besides being the hardest word to say, is how the browser determines which matching CSS rule is used. A selector receives a point in the corresponding column for each matching element (ID, class and pseduo-class, element and pseudo-element).</p>

<table>
    <caption>Specificity</caption>
    <colgroup>
        <col class="col-4"></col>
        <col class="col-4"></col>
        <col class="col-4"></col>
        <col class="col-4"></col>
    </colgroup>
    <thead>
        <tr>
            <th scope="col">Style attribute:</th>
            <th scope="col">ID</th>
            <th scope="col">Class, pseudo-class</th>
            <th scope="col">Element, pseudo-element</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
    </tbody>
</table>

<p>Here specificity is shown highest from left to right. Since ul > li > a { color: red; } contains three elements, it results with:</p>

<table>
    <caption>Specificity</caption>
    <colgroup>
        <col class="col-4"></col>
        <col class="col-4"></col>
        <col class="col-4"></col>
        <col class="col-4"></col>
    </colgroup>
    <thead>
        <tr>
            <th scope="col">Style attribute:</th>
            <th scope="col">ID</th>
            <th scope="col">Class, pseudo-class</th>
            <th scope="col">Element, pseudo-element</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>3</td>
        </tr>
    </tbody>
</table>

<p>For simplicity, this can be read as 0, 0, 0, 3.</p>

<p>However, matters become more complicated because it&#8217;s not a 10 base system so the values aren&#8217;t simply added; depending on the browser it&#8217;s at least a 256 base.</p>

<fieldset>
    <legend>1. In simplistic terms, what would the specificity of a#foo > li.bar > a be?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-3-1" class="input-radio">1, 0, 3, 1</label></li>
        <li><label><input type="radio" name="q-3-1" class="input-radio">0, 1, 3, 1</label></li>
        <li><label><input type="radio" name="q-3-1" class="input-radio">0, 3, 1, 1</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-3-1" class="input-radio" checked>0, 1, 1, 3</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>2. In simplistic terms, what would the specificity of ul#foo + #bar > li:first-child a.foo::after be?</legend>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="radio" name="q-3-2" class="input-radio" checked>0, 2, 2, 4</label></li>
        <li><label><input type="radio" name="q-3-2" class="input-radio">0, 2, 4, 2</label></li>
        <li><label><input type="radio" name="q-3-2" class="input-radio">0, 4, 2, 2</label></li>
        <li><label><input type="radio" name="q-3-2" class="input-radio">4, 0, 2, 2</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>3. What color would the link text be?</legend>
    <pre><code class="language-markup">    p#foo a#bar { color: red; }
        
    &lt;p id="foo"&gt;Lorem ipsum dolor &lt;a href="foo.html" id="bar" style="color: blue;"&gt;sit amet&lt;/a&gt;, consectetur adipiscing elit. Quisque egestas venenatis dui, consectetur convallis dui venenatis ac. Nullam non lacus eu libero tristique pretium&lt;/p&gt;</code></pre>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-3-3" class="input-radio">purple</label></li>
        <li><label><input type="radio" name="q-3-3" class="input-radio">red</label></li>
        <li><label><input type="radio" name="q-3-3" class="input-radio">black</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-3-3" class="input-radio" checked>blue</label></li>
    </ol>
</fieldset>

<fieldset>
    <p>Using the !important declaration basically adds another level higher of specificity.</p>
    
    <p>.foo { color: black !important; } would be equal to 1, 0, 0, 1, 0.</p>
    
    <legend>4. What would the nuclear (the heaviest-handed) option to override specificity be?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-3-4" class="input-radio">using !important</label></li>
        <li><label><input type="radio" name="q-3-4" class="input-radio">using the same selector with !important</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-3-4" class="input-radio" checked>using !important inline</label></li>
        <li><label><input type="radio" name="q-3-4" class="input-radio">using the universal selector (*) with !important</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>5. What level of specificity should each selector contain? (2 pts.)</legend>
    <ol class="list--alpha">
        <li><label><input type="checkbox" name="q-3-5" class="input-radio">the highest</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-3-5" class="input-radio" checked>the lowest</label></li>
        <li><label><input type="checkbox" name="q-3-5" class="input-radio">the prettiest</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-3-5" class="input-radio" checked>whatever it takes to get the style to render correctly</label></li>
    </ol>
</fieldset>


<h2>CSS Specificity Pt. 2</h2>

<fieldset>
    <pre><code class="language-markup">    .red { color: red; }
    p { color: blue; }
    
    &lt;p class="red"&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer fringilla odio et ante vehicula ac posuere neque venenatis. Maecenas tortor quam, mollis viverra blandit non.&lt;/p&gt;</code></pre>
    <legend>1. What color of text would the paragraph have?</legend>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="radio" name="q-4-1" class="input-radio" checked>red</label></li>
        <li><label><input type="radio" name="q-4-1" class="input-radio">blue</label></li>
        <li><label><input type="radio" name="q-4-1" class="input-radio">purple</label></li>
        <li><label><input type="radio" name="q-4-1" class="input-radio">black</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>2. Why might ul#foo be considered an overqualified selector? (3 pts.)</legend>
    <pre><code class="language-markup">    ul#foo { color: red; }
    ul {color: blue; }
    
    &lt;ul id="foo"&gt;
        &lt;li&gt;Item&lt;/li&gt;
        &lt;li&gt;Item&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;ul&gt;
        &lt;li&gt;Item&lt;/li&gt;
        &lt;li&gt;Item&lt;/li&gt;
    &lt;/ul&gt;</code></pre>
    <ol class="list--alpha">
        <li><label><input type="checkbox" name="q-4-2" class="input-radio">The type (element) selector will have the same result</label></li>
        <li><label><input type="checkbox" name="q-4-2" class="input-radio">The cascade will override the id</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-4-2" class="input-radio" checked>Not reusable &#8211; if you later change elements it will not render correctly</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-4-2" class="input-radio" checked>Increased specificity</label></li>
        <li><label><input type="checkbox" name="q-4-2" class="input-radio">Red is a poor color choice</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-4-2" class="input-radio" checked>Decreased performance &#8211; the browser reads right to left</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>3. All of the following selectors will render the first link color red, but which selector is a more efficient in regards to browser render time?</legend>
    <pre><code class="language-markup">    &lt;ul&gt;
        &lt;li&gt;&lt;a href="foo.html" id="foo" class="foo"&gt;Foo link&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="bar.html"&gt;Bar link&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</code></pre>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-4-3" class="input-radio">.foo { color: red; }</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-4-3" class="input-radio" checked>#foo { color: red; }</label></li>
        <li><label><input type="radio" name="q-4-3" class="input-radio">ul > li > a { color: red; }</label></li>
        <li><label><input type="radio" name="q-4-3" class="input-radio">ul li a { color: red; }</label></li>
        <li><label><input type="radio" name="q-4-3" class="input-radio">ul > li:first-child > a { color: red; }</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>4. All of the following selectors will render the first link color red, but which selector is a more efficient in regards to specificity and reusability?</legend>
    <pre><code class="language-markup">    &lt;ul&gt;
        &lt;li&gt;&lt;a href="foo.html" id="foo" class="foo"&gt;Foo link&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="bar.html"&gt;Bar link&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</code></pre>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="radio" name="q-4-4" class="input-radio" checked>.foo { color: red; }</label></li>
        <li><label><input type="radio" name="q-4-4" class="input-radio">#red { color: red; }</label></li>
        <li><label><input type="radio" name="q-4-4" class="input-radio">ul > li > a { color: red; }</label></li>
        <li><label><input type="radio" name="q-4-4" class="input-radio">ul li a { color: red; }</label></li>
        <li><label><input type="radio" name="q-4-4" class="input-radio">ul > li:first-child > a { color: red; }</label></li>
    </ol>
</fieldset>

<fieldset>
    <legend>5. Without using !important, at least how many class selectors would it take to override the properties of one id selector?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-5-5" class="input-radio">five</label></li>
        <li><label><input type="radio" name="q-5-5" class="input-radio">10</label></li>
        <li><label><input type="radio" name="q-5-5" class="input-radio">two</label></li>
        <li><label><input type="radio" name="q-5-5" class="input-radio">100</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-5-5" class="input-radio" checked>256</label></li>
    </ol>
</fieldset>


<h2>CSS Shorthand</h2>

<p>CSS shorthand is a quicker, more concise way to write several related property value pairs. Shorthand can be used for properties such as:</p>

<ul>
    <li>background</li>
    <li>border</li>
    <li>color</li>
    <li>list</li>
    <li>font</li>
    <li>margins, outline, padding</li>
</ul>

<fieldset>
    <legend>1. Why might you not want to always use shorthand? (3 pts.)</legend>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="checkbox" name="q-6-1" class="input-radio" checked>creates more properties to inherit/override in the cascade</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-6-1" class="input-radio" checked>to be verbose and explicit</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-6-1" class="input-radio" checked>only need a few properties</label></li>
        <li><label><input type="checkbox" name="q-6-1" class="input-radio">like typing more</label></li>
    </ol>
</fieldset>

<p>Shorthand for margins, outline, and padding go in clockwise order.</p>

<pre><code class="language-css">p { 
    margin-top: 1em;
    margin-right: 2em;
    margin-bottom:  1.5em;
    margin-left: 1.75em;
}</code></pre>

<p>is equivalent to</p>

<pre class="prettyprint linenums"><code class="lang-css">p { margin: 1em 2em  1.5em  1.75em; }</code></pre>

<fieldset>
    <legend>2. What would this be equivalent to? (2 pts.)</legend>
    <pre"><code class="language-css">p { 
        margin-top: 1em;
        margin-right: 2em;
        margin-bottom: 1em;
        margin-left: 2em;
    }</code></pre>
    <ol class="list--alpha">
        <li data="answer-correct"><label><input type="checkbox" name="q-6-2" class="input-radio" checked>p { margin: 1em 2em; }</label></li>
        <li><label><input type="checkbox" name="q-6-2" class="input-radio">p { margin: 2em 1em; }</label></li>
        <li><label><input type="checkbox" name="q-6-2" class="input-radio">p { margin: 2em 1em 2em 1em; }</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-6-2" class="input-radio" checked>p { margin: 1em 2em 1em 2em; }</label></li>
    </ol>
</fieldset>

<pre"><code class="language-css">p {
    margin-top: 1em;
    margin-right: 2em;
    margin-bottom: 1em;
    margin-left: 2em;
}</code></pre>

<p>Is equivalent to:</p>

<pre><code class="language-css">p { margin: 1em 2em 1em 2em; }</code></pre>

<p>That can be shortened further to:</p>

<pre><code class="language-markup">p { margin: 1em 2em; }</code></pre>

<p>Because you can use three values depending on the properties you want to target, it could have also been written as:</p>

<pre><code class="language-css">p { margin: 1em 2em 1em;  }</code></pre>

<p>However, this makes less sense when the property value pairs are the same.</p>

<fieldset>
    <legend>3. p { margin: 1.5em auto 1em; } is equivalent to what long-hand rule?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-6-3" class="input-radio">p { margin-top: auto; margin-right: 1.5em; margin-bottom: auto; margin-left: 1em; }</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-6-3" class="input-radio" checked>p { margin-top: 1.5em; margin-right: auto; margin-bottom: 1em; margin-left: auto; }</label></li>
        <li><label><input type="radio" name="q-6-3" class="input-radio">p { margin-top: 1em; margin-right: auto; margin-bottom: 1.5em; margin-left: auto; }</label></li>
        <li><label><input type="radio" name="q-6-3" class="input-radio">p { margin-top: 1.5em; margin-right: auto; margin-bottom: 1.5em; margin-left: 1em; }</label></li>
    </ol>
</fieldset>

<p>Color hex values can be written as shorthand if both hex values are the same for each color channel.</p>

<p>For instance the hex value of black is #000000. Since each channel (red, green, blue) each has a hex value pair of 00, it can be written in shorthand as #000.</p>

<fieldset>
    <legend>4. The hex value for red #FF0000 can be written in shorthand as?</legend>
    <ol class="list--alpha">
        <li><label><input type="radio" name="q-6-4" class="input-radio">#FF0</label></li>
        <li data="answer-correct"><label><input type="radio" name="q-6-4" class="input-radio" checked>#F00</label></li>
        <li><label><input type="radio" name="q-6-4" class="input-radio">#FFF</label></li>
        <li><label><input type="radio" name="q-6-4" class="input-radio">#0FF</label></li>
        <li><label><input type="radio" name="q-6-4" class="input-radio">#F0F</label></li>
    </ol>
</fieldset>

<p>The font shorthand is very useful when incorporating several property value pairs.</p>

<pre><code class="language-css">body {
    font-weight: bold;
    font-style: italic;
    font-variant: small-caps;
    font-size: 100%;
    line-height: 1;
    font-family: Arial, sans-serif;  
}</code></pre>

<p>is equivalent to:</p>

<pre><code class="language-css">body { font: bold italic small-caps 100%/1 Arial, sans-serif; }</code></pre>

<p>Be sure to note how font-size and line-height are written. Font-size and font-family are required; any omitted property will have the initial value of normal.</p>

<fieldset>
    <legend>5. What would the font shorthand be for the below rule? (2 pts.)</legend>
    <pre><code class="language-css">body {
        font-size: 1em;
        line-height: 1.25;
        font-family: Georgia, serif;
    }</code></pre>
    <ol class="list--alpha">
        <li><label><input type="checkbox" name="q-6-5" class="input-radio">body { font: 1em 1.25 Georgia, serif; }</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-6-5" class="input-radio" checked>body { font: normal normal normal 1em/1.25 Georgia, serif; }</label></li>
        <li><label><input type="checkbox" name="q-6-5" class="input-radio">body { font: 1em/1.25 Georgia, serif; }</label></li>
        <li data="answer-correct"><label><input type="checkbox" name="q-6-5" class="input-radio" checked>body { font: 1.25/1em Georgia, serif; }</label></li>
    </ol>
</fieldset>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Defining moments</title>
		<link>https://jonfaustman.com/2013/07/05/defining-moments/</link>
		
		<dc:creator><![CDATA[faustman]]></dc:creator>
		<pubDate>Fri, 05 Jul 2013 06:01:25 +0000</pubDate>
				<category><![CDATA[frontend]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Reading]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">http://jonfaustman.com/?p=605</guid>

					<description><![CDATA[<p>As I’m laying in bed unable to fall back asleep, my mind starts to wander as it does on occasions like this; for some reason I started thinking about certain books, articles or techniques that had a significant impact on my web development career.</p>]]></description>
										<content:encoded><![CDATA[<p class="lead">As I’m laying in bed unable to fall back asleep, my mind starts to wander as it does on occasions like this; for some reason I started thinking about certain books, articles or techniques that had a significant impact on my web development career.</p>

<p>Based on the time of their impact, these are what immediately came to mind.</p>

<h2>Designing with Web Standards</h2>

<p>This is probably no surprise to anybody, well except for younger generations of web workers (<em>get off my lawn you damn kids.</em>) It’s probably on everybody&#8217;s list.</p>

<p>I was late reading <a href="http://www.zeldman.com/dwws/">this book</a>, I think it was in its second edition by the time I actually read it. To be fair I was already practicing web standards, but I could never really articulate why. One of the problems with web books is that they&#8217;re often about emerging or well-known concepts, so by the time they&#8217;ve been printed and distributed that concept is already in practice. Now the key to great web books is making you care after the fact, and <a href="https://twitter.com/zeldman">Jeffrey Zeldman&#8217;s</a> book did just that.</p>

<p>His quote comparing structure, presentation and behavioral layers to the different roles in a movie production was the perfect tangible comparison that made it so easy to grasp the concept. Like any good quote, I still use this today. And like most quotes I probably bastardize and butcher it.</p>

<blockquote>
<p>If your site were a movie, (X)HTML would be the screenwriter, CSS would be the art director, scripting languages would be the special effects, and the DOM would be the director who oversees the entire production.</p>
<a href="https://twitter.com/zeldman">Jeffrey Zeldman</a>, <a href="http://www.zeldman.com/dwws/">Designing with Web Standards</a>
</blockquote>

<h2>Bulletproof Web Design</h2>

<!--
<figure class="well float-right" style="margin-left: 1.5em; max-width: 300px;">
<img decoding="async" src="http://s.diaf.co/jonfaustman.com/img/goofy-jon.jpg" alt="">
<figcaption class="cutline">
<p>Perhaps the goofiest photo of me in existence. At a bar during An Event Apart Chicago 2007.</p>
</figcaption>
</figure>
-->

<p>This is the book that just made CSS click for me. Like Designing with Web Standards, I was already using CSS and some of these techniques but I was really bad at it. <a href="http://simplebits.com/publications/bulletproof/">Dan Cederholm&#8217;s book</a> really just made me think about what I was doing, and made me want to do it better.</p>

<p>Throughout my career I’ve been fortunate to attend several conferences, and <a href="https://twitter.com/simplebits">Dan Cederholm</a> is one of nicest of my &#8220;heroes&#8221; who I’ve met.</p>

<p>It was at a bar in Chicago for An Event Apart , as I saw him walk by I said hi and how much I enjoyed his book. I just happened to mention I enjoyed his book so much that I lent it to my boss who subsequently lost it. He (<em>Dan</em>) said to email him and he’d send me another copy. I never did. I’m sure authors have several copies of their books to spare, but that just struck me as such an unprompted act of kindness.</p>

<h2>Don’t Make Me Think</h2>

<p>Again, <a href="http://www.sensible.com/dmmt.html">Steve Krug&#8217;s book</a> is probably on everybody&#8217;s list; it is one of the quintessential user experience books. But it makes my list for another reason &#8211; accessibility.</p>

<p>Having spent my entire professional career working at an university, I’ve always had to work with accessibility in mind. But nothing ever made me care why it was important as much as his statement that with the use of accessible content and screen readers a blind person could read a daily newspaper&#8230;on the day it was published&#8230;by themselves. Mind blown.</p>

<p>If that doesn’t make you care about accessibility then I’m not really sure what will.</p>

<blockquote>
<p>And not just the right thing; it’s profoundly the right thing to do, because the one argument for accessibility that doesn’t get made nearly often enough is how extraordinarily better it makes some people’s lives. Personally, I don’t think anyone should need more than this one example: Blind people with access to a computer can now read the daily newspaper on their own. Imagine that.</p>

<p>How many opportunities do we have to dramatically improve people’s lives just by doing our job a little better?</p>
<a href="https://twitter.com/skrug">Steve Krug</a>, <a href="http://www.sensible.com/dmmt.html">Don&#8217;t Make Me Think</a>
</blockquote>

<h2>Responsive Web Design</h2>

<p>This is <a href="http://alistapart.com/article/responsive-web-design">THE article</a>, the one that started it all. I mean <a href="https://twitter.com/beep">Ethan Marcotte</a> coined the term. This article was so mind blowing I had to read it several times before I really grasped how great it was. His <a href="http://alistapart.com/article/fluidgrids">Fluid Grids article</a> in which he described dividing the target by the context was worth the price of admission alone. Ok fine, it was free but I would have paid for it, it was that good. In fact, I did pay for it (<em>or rather my company did</em>) for the <a href="http://www.abookapart.com/products/responsive-web-design">A Book Apart book</a> with the same title.</p>

<h2>Mobile First</h2>

<p>I saw <a href="https://twitter.com/lukew">Luke Wroblewski</a> (<em>and yes, I had to google that spelling</em>) present at the aforementioned An Event Apart and just soaked up his talk about forms. From that moment on Luke was somebody I paid great attention to. He also happens to be one of my favorite presenters, only being surpassed by <a href="https://twitter.com/jmspool">Jared Spool</a> at the last minute.</p>

<p>I honestly don’t remember where I first heard about his mobile first theory, but it resonated with me from the very beginning. By the time I travelled across the country to Las Vegas with just an iPhone 3G for an information source, I completely understood the value of mobile first. If you&#8217;ve ever tried to book a hotel reservation online with your phone, then you&#8217;ll understand the value too.</p>

<p>I read his <a href="http://www.abookapart.com/products/mobile-first">A Book Apart</a> on a plane, and I think my tweet after landing sums it up pretty well.</p>

<blockquote>
<p>While not exactly the same context, the fact that I read <a href="https://twitter.com/lukew">@lukew</a>&#8216;s Mobile First book entirely on my iPhone proves why it&#8217;s important.</p>
<a href="https://twitter.com/faustman">Jon Faustman</a>, <a href="https://twitter.com/faustman/status/180062534630510593">Twitter</a>
</blockquote>

<h2>BEM</h2>

<p>Although I haven&#8217;t been using this technique long enough to say it’s career defining, it certainly has changed how I think about style and layouts. I first read about it on  <a href="http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/">Harry Roberts&#8217;s CSS Wizardry</a>. From then on I was hooked.</p>

<p>Of course I’d known about <a href="http://oocss.org/">OOCSS</a> for quite a while before finding out about <a href="http://bem.info/">BEM</a>, but I never liked it. For some reason it just seemed wrong to me. Maybe it was the naming, or standardista in me fighting against what at one time would have been shunned as bad practice. (<em>Remember the zOMG tables are bad, nothing can be a table including tabular data misconception? Yeah, that.</em>)</p>

<p>I remember seeing <a href="https://twitter.com/stubbornella">Nicole Sullivan</a> present at An Event Apart and threw up in my mouth a little bit when she showed a class named .h1 &#8211; until I really thought about it, that&#8217;s useful, damn useful.</p>

<p>BEM just works for me. It makes sense. It’s easy, especially in combination with Sass.</p>

<h2>Fanboy?</h2>

<p>Honestly when I started writing this, I never realized how much of a fanboy I am of all the things Apart &#8211; <a href="http://alistapart.com/">A List Apart</a>, <a href="http://aneventapart.com/">An Event Apart</a>, <a href="http://www.abookapart.com/">A Book Apart</a>.</p>

<h3>A List Apart</h3>

<p>Like the rest of my RSS feeds (<em>Google Reader is going away? LOL OK</em>) my unread A List Apart articles are overwhelming. I probably won&#8217;t ever catch up or read back issues, but they&#8217;re there &#8211; chock full of great, relevant information just waiting for me. Maybe I’m missing the next Responsive Web Design article.</p>

<h3>An Event Apart</h3>

<p>Honestly I can&#8217;t say enough good things about these conferences. I’ve been to two &#8211; <a href="http://www.zeldman.com/2007/08/31/aeachicago07-wrap/">Chicago in 2007</a> and <a href="http://archive.aneventapart.com/2011/minneapolis/?/2011/minneapolis/">Minneapolis in 2011</a>. And while the information gap in my career between those two periods is vast, the second trip was just as worthwhile as the first.</p>

<p>Why is it such a great conference? Well the talent level of the speakers is amazing&#8230;I’d say it’s unparalleled. While I couldn&#8217;t recall every subject matter they&#8217;ve spoken about, I can recall many, many memorable moments. Like <a href="https://twitter.com/jasonsantamaria">Jason Santa Maria</a> nearly falling off the stage, or <a href="https://twitter.com/adactio">Jeremy Keith</a> blowing my mind &#8211; repeatedly.</p>

<p>I’ve had the chance to interact with many of my &#8220;heroes,&#8221; usually while partaking in an adult beverage. I mean I talked to <a href="https://twitter.com/meyerweb">Eric Meyer</a> about flexbox, and was admonished by Jeremy Keith for foresaking JavaScript knowledge and skipping directly to jQuery. How fucking awesome is that?</p>

<p>(<em>By the way, <a href="https://twitter.com/leahculver">Leah Culver</a> if you ever read this &#8211; I’m really sorry for sort of blowing you off. I didn’t realize who you were, which sounds like a horribly snobbish excuse, but I thought you were with Jeremy&#8230;like with WITH and I didn’t want to offend him by giving you too much attention. I realized what happened much later. You know what, this apology sucks. So I’m sorry for that too.</em>)</p>

<p>While the quality of snacks and abundant soda is usually unmatched at other conferences as well, having one track really makes the conference. No deciding what to see. No skipping because of indecision. A shared experience. That’s what really makes the conference.</p>

<h3>A Book Apart</h3>

<p>Simply put these books are amazing. It’s true you might already know the subject matter, but I can almost guarantee you&#8217;ve never read about it in the same way. Easy to understand. Concise. Enjoyable. I’ve talked my company into buying them all.</p>

<p>So yeah, I guess I am a fanboy. So thanks to everybody who makes all this awesome stuff happen, keep doing what you do.</p>

<p>Did I really just use part of a Bobby Flay quote? I really need to go back to sleep.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
