<?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>12 Spokes</title>
	<atom:link href="http://blog.12spokes.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.12spokes.com</link>
	<description>Make the web go 'round</description>
	<lastBuildDate>Thu, 17 May 2012 21:59:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>A film-industry trick to speed up your first round of design comps</title>
		<link>http://blog.12spokes.com/web-design-development/colorscripting-in-web-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=colorscripting-in-web-design</link>
		<comments>http://blog.12spokes.com/web-design-development/colorscripting-in-web-design/#comments</comments>
		<pubDate>Thu, 17 May 2012 21:20:50 +0000</pubDate>
		<dc:creator>Colleen</dc:creator>
				<category><![CDATA[Design Theory]]></category>
		<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=1025</guid>
		<description><![CDATA[Color does not add a pleasant quality to design&#8212;it reinforces it. ~ Pierre Bonnard Starting a website from a blank slate is always a wobbly moment. You&#8217;ve got this new client whom you&#8217;re wanting to genuinely help and impress, you&#8217;ve never met this person before (most of the time), but because you&#8217;re a designer you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.12spokes.com/web-design-development/colorscripting-in-web-design/attachment/colorscripting_title/" rel="attachment wp-att-1029"><img class="alignnone size-full wp-image-1029" title="colorscripting_title" src="http://blog.12spokes.com/wp-content/uploads/2012/05/colorscripting_title.png" alt="" width="663" height="274" /></a></p>
<p><strong><em>Color does not add a pleasant quality to design&#8212;it reinforces it.</em></strong><br />
<strong><em>~ Pierre Bonnard</em></strong></p>
<p>Starting a website from a blank slate is always a wobbly moment. You&#8217;ve got this new client whom you&#8217;re wanting to genuinely help and impress, you&#8217;ve never met this person before (most of the time), but because you&#8217;re a designer you&#8217;re required to read their mind and produce a piece of work that encompasses not only their needs as a company or product, but also satisfies their inner artist. Now that&#8217;s not daunting at all, is it?</p>
<p>It&#8217;s been a constant journey for me to make this initial design process as simple as possible. There have been many helpful techniques and questionnaires to hand over to the client in the hopes that they answer honestly and can help ease you into creating something they&#8217;re going to like, but nothing is fool-proof and on occasion your final design ends up in an entirely different direction than when you first started (see <a href="http://theoatmeal.com/comics/design_hell" target="_blank">Oatmeal for some giggles at this</a>).</p>
<p>So could there be something more exact to help this initial design process? Could there be a way of quickly extracting views and thoughts for overall layout and colors from the client without spending hours and hours in [enter your favorite web design application here] to get from point A to point B?</p>
<p>Enter Colorscripting.</p>
<p>Used most notably in the film industry, Colorscripting is a layout of thumbnails that are used to show a broad overview of how a story/film/etc. will feel and flow from a high level by concentrating purely on blocks of color or very small abstract images of the real deal. It essentially can get the kinks out and in turn produce better pacing from scene to scene. Think of storyboarding, but a blurrier, color-dependent, tinnier version of it.</p>
<p>For some companies&#8212;such as <a href="http://www.amazon.com/The-Art-Pixar-Complete-Animation/dp/0811879631/ref=sr_1_1?ie=UTF8&amp;qid=1337025885&amp;sr=8-1" target="_blank">Pixar</a>&#8212;it&#8217;s an essential part of their animation process and that got me thinking&#8212;if it works for animation, for illustration, for film&#8212;why can&#8217;t it work for web design?</p>
<p>So I set myself a task to give it a shot. We had an <a href="https://github.com/12spokes/tandem" target="_blank">awesome internal project</a> that needed a website and my goal was to create 5-6 modestly small thumbnails that would get across 2 things to the client (or in this scenerio&#8212;my bosses): basic layout and basic colors. Here&#8217;s what I came up with:</p>
<p><a href="http://blog.12spokes.com/web-design-development/colorscripting-in-web-design/attachment/tandem_colorscripting/" rel="attachment wp-att-1028"><img class="alignnone size-full wp-image-1028" title="tandem_colorscripting" src="http://blog.12spokes.com/wp-content/uploads/2012/05/tandem_colorscripting.png" alt="" width="663" height="734" /></a></p>
<p>I presented the colorscript theory, I presented the thumbnails (which, noteably, took about half the time it would have taken to do 2-3 comps of a full size view) and the verdict? Success.</p>
<p>In less than an hour talk with the them, I now had the direction to go with the site design, the layout to take, even the main background image to jump off of. There were no discussions of &#8220;this word is wrong here&#8221; or &#8220;this button isn&#8217;t round enough&#8221; which I feel always end up being discussed in initial design reviews and almost always have no bearing on the initial design goal. </p>
<p>So in short, colorscripting achieved: less time designing things that aren&#8217;t going to get used, more design directions (because they&#8217;re small you can make lots of them!), less attention to moot details, bigger attention to overall layout and color&#8230; could there be a downside to this?</p>
<p>I would love more than anything to try this on an unknown client, but yet I feel like there may be facets to it I&#8217;m not seeing. So this is where I turn to you oh people-of-the-internet. I have a theory and I want to hear your feedback. I want to know if you think this process has any potential&#8212;have you used something similar? How can I make it better? How can it be hindering? Is it complete bollocks?</p>
<p>I can see some drawbacks with it (thumbnails, wtfbbq? how am I supposed to see it?!!!111), and perhaps it will be a discussion per the beginning of a project if it should even be used.</p>
<p>However, I like that the first introduction to it&#8212;albeit internal&#8212;went smoothly and feel like this may be a very useful method for designers to add to their collection.</p>
<p>What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/web-design-development/colorscripting-in-web-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why you should expose your Facebook profile for potential employers</title>
		<link>http://blog.12spokes.com/running-a-business/hiring/why-you-should-expose-your-facebook-profile-for-potential-employers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-you-should-expose-your-facebook-profile-for-potential-employers</link>
		<comments>http://blog.12spokes.com/running-a-business/hiring/why-you-should-expose-your-facebook-profile-for-potential-employers/#comments</comments>
		<pubDate>Fri, 04 May 2012 22:13:42 +0000</pubDate>
		<dc:creator>Erin</dc:creator>
				<category><![CDATA[Hiring]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=1012</guid>
		<description><![CDATA[We just went through another round of hiring here at 12 Spokes. We always get a flood of applicants for open positions, and of course, all the stereotypical job-seeking advice applies here—write a cover letter that addresses the individual job posting, keep your resume to one page, yada, yada, yada. There&#8217;s one stereotypical piece of [...]]]></description>
			<content:encoded><![CDATA[<p>We just went through another round of hiring here at 12 Spokes. We always get a flood of applicants for open positions, and of course, all the stereotypical job-seeking advice applies here—write a cover letter that addresses the individual job posting, keep your resume to one page, yada, yada, yada.</p>
<p>There&#8217;s one stereotypical piece of advice that I disagree with: Common wisdom says to hide your Facebook profile from potential employers, because it might scare them away. &#8220;A recent survey commissioned by Microsoft found that 70 percent of recruiters and hiring managers in the United States have rejected an applicant based on information they found online,&#8221; <a href="http://articles.cnn.com/2010-03-29/tech/facebook.job-seekers_1_facebook-hiring-online-reputation?_s=PM:TECH">says CNN</a>.</p>
<p>But let&#8217;s consider the flip side: what percentage of hiring managers have <em>hired</em> an applicant because her Facebook profile fleshed out the personality behind her already-strong resume? When I&#8217;m sorting through resumes, Facebook is an invaluable tool to help me find likeable people who will be a good fit for my team. Granted, I might be an easy target. I&#8217;m young, I know how this stuff works and I&#8217;m not going to dock you for a few red-Solo-cup photos. I think I have a few on my feed myself.</p>
<p>Maybe most recruiters and hiring managers aren&#8217;t as cool as me, but let&#8217;s give them a little credit. If you&#8217;re a generally standup person whose feed is full of innocuous updates and photos from the lake, nobody&#8217;s going to throw your application away because of it. Your Facebook feed is a mini introduction to you, and generally it&#8217;s good for a hiring manager to know more about you than less. She might remember you as the applicant who loves to fly-fish or who has twin daughters. It will help you stick in that person&#8217;s mind.</p>
<p>In fact, I&#8217;d go so far as to say I <em>distrust</em> people who hide their feeds, particularly applicants in their early 20s. If you&#8217;re a hotshot coder straight out of college and I can&#8217;t see into your feed, I know it&#8217;s probably because it&#8217;s full of penis jokes and beer pong photos you don&#8217;t want me to know about.</p>
<p>But if you&#8217;re 23 and your feed shows me there&#8217;s more to your life than Madden and Coors Light—well, young&#8217;un, that&#8217;s a serious leg up.</p>
<p>So to sum up: If you&#8217;re generally a good person/employee, there&#8217;s no reason to hide your profile, and it might actually help you get the job. If you: (a) badmouth your employer, (b) are a slacker pothead, or (c) spout culturally insensitive bile on your feed, well, make sure you&#8217;re applying for jobs at companies where that&#8217;s encouraged. Or maybe consider that those things might be why you&#8217;re surfing the job boards in the first place.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/running-a-business/hiring/why-you-should-expose-your-facebook-profile-for-potential-employers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple CSS color management with SASS</title>
		<link>http://blog.12spokes.com/web-design-development/simple-css-color-management-with-sass/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=simple-css-color-management-with-sass</link>
		<comments>http://blog.12spokes.com/web-design-development/simple-css-color-management-with-sass/#comments</comments>
		<pubDate>Wed, 02 May 2012 20:19:47 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[SASS]]></category>
		<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=961</guid>
		<description><![CDATA[When I first got my CSS on (did I really just say that?) back in 2006, managing color values in my style sheet was pretty simple: I had my colors for text, and then my colors for elements with solid backgrounds, and that was about it. If I had my act together, maybe I&#8217;d write [...]]]></description>
			<content:encoded><![CDATA[<p>When I first got my CSS on (did I really just say that?) back in 2006, managing color values in my style sheet was pretty simple: I had my colors for text, and then my colors for elements with solid backgrounds, and that was about it. If I had my act together, maybe I&#8217;d write a comment at the top of my style sheet detailing the five or six hex values I was going to need, so I could refer to them as I coded.</p>
<p><em>And then CSS 3 happened.</em> Gradients! Box shadows! rgba! <a href="http://mothereffinghsl.com/">Mother-effing hsl()</a>! It was a wonderful time: Subtle color effects and variations that were previously the exclusive province of bitmapped background images were possible via straight up CSS. And as my designs in 2008 quickly filled up with drop shadows and gradients on everything humanly possible, I couldn&#8217;t help but notice that my style sheets were just as quickly filling up with all the color values I needed to support them. I&#8217;m sure this looks familiar:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">rgb</span><span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">157</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">58</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -moz-linear-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">157</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">58</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">0%</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">161</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">79</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">50%</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">194</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">23</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">51%</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">124</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">188</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">10</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-gradient<span style="color: #00AA00;">&#40;</span>linear<span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #933;">0%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">157</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">58</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #933;">50%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">161</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">79</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #933;">51%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">194</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">23</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #933;">100%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">124</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">188</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">10</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-linear-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">157</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">58</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">0%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">161</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">79</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">50%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">194</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">23</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">51%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">124</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">188</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">10</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -o-linear-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">157</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">58</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">0%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">161</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">79</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">50%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">194</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">23</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">51%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">124</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">188</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">10</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -ms-linear-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">157</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">58</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">0%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">161</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">79</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">50%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">194</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">23</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">51%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">124</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">188</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">10</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> linear-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">157</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">58</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">0%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">161</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">213</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">79</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">50%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">194</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">23</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">51%</span><span style="color: #00AA00;">,</span>rgba<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">124</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">188</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">10</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1</span><span style="color: #00AA00;">&#41;</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span></pre></div></div>

<p>The new vendor prefixes weren&#8217;t helping much either. As someone who develops in Firefox, I couldn&#8217;t tell you the number of times I&#8217;d change, say, a color in the <em>-moz-linear-gradient</em> selector, and forget to make the same update to the webkit gradient. D&#8217;oh. Hope you Chrome and Safari users liked hot pink and purple together.</p>
<p><em>Since I started using SASS, however, I&#8217;m happy to report that I&#8217;ve been able to return to the halcyon days of only needing to use a handful of hex values in my style sheet. In fact, when I start a new project, I usually only need four. Here&#8217;s my workflow:</em></p>
<h3 style="clear: both">First: Create SASS variables for your basic colors</h3>
<p>There&#8217;s no one-size-fits-all solution here, and obviously every project is different. However, I find that most apps and sites utilize <strong>four main colors</strong>: A <em>brand color</em>, an <em>action color</em>, a <em>function color</em>, and an <em>alert color</em>. (For the purposes of this post, we&#8217;ll use my best guesses at Facebook&#8217;s colors as an example.)</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">$brand-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#3b5998</span><span style="color: #00AA00;">;</span>
$action-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#67a54b</span><span style="color: #00AA00;">;</span>
$function-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#f2f2f2</span><span style="color: #00AA00;">;</span>
$alert-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#b22727</span><span style="color: #00AA00;">;</span></pre></div></div>

<p style="overflow: hidden"><img src="http://blog.12spokes.com/wp-content/uploads/2012/04/blog1a.png" alt="Basic color variables" title="blog1a" width="594" height="34" class="alignleft size-full wp-image-971" style="display: block;" /></p>
<h3>Second: Lighten your load. Or darken it.</h3>
<p>Once you&#8217;ve defined your basic colors, let SASS&#8217;s <em>amazing</em> lighten() and darken() functions create the tints for each.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">$brand-color-light<span style="color: #00AA00;">:</span> lighten<span style="color: #00AA00;">&#40;</span> $brand-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">,</span> <span style="color: #933;">10%</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
$brand-color-<span style="color: #993333;">lighter</span><span style="color: #00AA00;">:</span> lighten<span style="color: #00AA00;">&#40;</span> $brand-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">,</span> <span style="color: #933;">20%</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
$brand-color-dark<span style="color: #00AA00;">:</span> darken<span style="color: #00AA00;">&#40;</span> $brand-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">,</span> <span style="color: #933;">10%</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
$brand-color-darker<span style="color: #00AA00;">:</span> darken<span style="color: #00AA00;">&#40;</span> $brand-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">,</span> <span style="color: #933;">20%</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
&nbsp;
etc.<span style="color: #00AA00;">,</span> etc. for all your colors...</pre></div></div>

<p><img src="http://blog.12spokes.com/wp-content/uploads/2012/04/blog2.png" alt="Tints, calculated by SASS, based on your original colors" title="blog2" width="594" height="139" class="alignleft size-full wp-image-973" /></p>
<p>You&#8217;re going to want to tweak the percentages on a per-color basis here to get a nice gradation. (It should also be noted that SASS also has functions for dynamically adjusting a base color&#8217;s saturation, hue, and <a href="http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html">a whole bunch of other amazing stuff</a> I feel like I haven&#8217;t scratched the surface of yet!)</p>
<h3>Third: Set up your gradients, box shadows, etc.</h3>
<p>Once you&#8217;ve got a whole bunch of nice tints for each of your base colors, setting up some mixins to use is pretty straightforward:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #a1a100;">@mixin brand-gradient {</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;"> imagefallback.png </span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">repeat-x</span> $brand-color-darker<span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -moz-radial-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">center</span><span style="color: #00AA00;">,</span> ellipse cover<span style="color: #00AA00;">,</span> $brand-<span style="color: #000000; font-weight: bold;">color</span> <span style="color: #933;">22%</span><span style="color: #00AA00;">,</span> $brand-color-darker <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-gradient<span style="color: #00AA00;">&#40;</span>radial<span style="color: #00AA00;">,</span> <span style="color: #993333;">center</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">,</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">,</span> <span style="color: #993333;">center</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">,</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #933;">22%</span><span style="color: #00AA00;">,</span>$brand-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> color-stop<span style="color: #00AA00;">&#40;</span><span style="color: #933;">100%</span><span style="color: #00AA00;">,</span>$brand-color-darker<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-radial-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">center</span><span style="color: #00AA00;">,</span> ellipse cover<span style="color: #00AA00;">,</span> $brand-<span style="color: #000000; font-weight: bold;">color</span> <span style="color: #933;">22%</span><span style="color: #00AA00;">,</span>$brand-color-darker <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -o-radial-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">center</span><span style="color: #00AA00;">,</span> ellipse cover<span style="color: #00AA00;">,</span> $brand-<span style="color: #000000; font-weight: bold;">color</span> <span style="color: #933;">22%</span><span style="color: #00AA00;">,</span>$brand-color-darker <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -ms-radial-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">center</span><span style="color: #00AA00;">,</span> ellipse cover<span style="color: #00AA00;">,</span> $brand-<span style="color: #000000; font-weight: bold;">color</span> <span style="color: #933;">22%</span><span style="color: #00AA00;">,</span>$brand-color-darker <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> radial-gradient<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">center</span><span style="color: #00AA00;">,</span> ellipse cover<span style="color: #00AA00;">,</span> $brand-<span style="color: #000000; font-weight: bold;">color</span> <span style="color: #933;">22%</span><span style="color: #00AA00;">,</span>$brand-color-darker <span style="color: #933;">100%</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>&hellip; then simply rinse and repeat for all the gradients you&#8217;re going to need across your site or app:</p>
<p><img src="http://blog.12spokes.com/wp-content/uploads/2012/04/blog3.jpg" alt="CSS gradients, created from SASS color variables" title="blog3" width="594" height="136" class="alignleft size-full wp-image-983" /></p>
<p style="clear: both"><em>But what about rgba and hsl?</em></p>
<p>Personally, I&#8217;m old school and tend to stick with hex values because they&#8217;re short and I&#8217;m used to &#8216;em. And when I do need rgba transparency, for example, SASS makes it easy for me to stay right within my comfort zone, as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> rgba<span style="color: #00AA00;">&#40;</span> $brand-<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">,</span> <span style="color: #cc66cc;">0.5</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span></pre></div></div>

<p>Pretty cool.</p>
<p><em>The beauty of this approach is that I can change every single tint of a color sitewide by simply tweaking a single hex value.</em> And by quarantining all this CSS in a separate colors.scss file, I no longer have all those gross, vendor-prefixed declarations cluttering up my main style sheet. So thanks, SASS, for simplifying my job and letting me color like it&#8217;s 2006 all over again. P.S. For the next release, if you could build something in to get me back the hair I&#8217;ve lost since 2006, that would be awesome. kthxbai.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/web-design-development/simple-css-color-management-with-sass/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>I don’t communicate between frames often, but when I do, I use postMessage</title>
		<link>http://blog.12spokes.com/web-design-development/i-don%e2%80%99t-communicate-between-frames-often-but-when-i-do-i-use-postmessage/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=i-don%25e2%2580%2599t-communicate-between-frames-often-but-when-i-do-i-use-postmessage</link>
		<comments>http://blog.12spokes.com/web-design-development/i-don%e2%80%99t-communicate-between-frames-often-but-when-i-do-i-use-postmessage/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 20:52:21 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=923</guid>
		<description><![CDATA[For one of our current projects, we developed a Pinterest-style ‘share’ bookmarklet which, when clicked from your bookmarks toolbar, injects an iframe containing a share form on top of the page you’re currently on. We spent a good chunk of time really polishing it up and making for a good user experience. You can even [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.12spokes.com/wp-content/uploads/2012/04/dos_equis-man.jpg" rel="prettyPhoto[923]"><img class="alignnone size-medium wp-image-925" style="float: left; margin-right: 15px;" title="Dos Equis man" src="http://blog.12spokes.com/wp-content/uploads/2012/04/dos_equis-man-300x300.jpg" alt="" width="300" height="300" /></a>For one of our current projects, we developed a Pinterest-style ‘share’ bookmarklet which, when clicked from your bookmarks toolbar, injects an iframe containing a share form on top of the page you’re currently on. We spent a good chunk of time really polishing it up and making for a good user experience. You can even log into the site through the frame using a special view, since sharing requires authentication. We also pre-populated the form with information from Facebook’s Open Graph if possible, to make sure users don&#8217;t have to enter unnecessary information. We excitedly delivered it to the clients, and while they loved it, they had one additional request—after sharing the page, make the frame disappear after a few seconds.</p>
<p>It seems simple: “self.close()” or some such thing. The problem is, for security reasons, as a framed page, you can’t just close yourself. You can’t even access any properties on your parent across different domains because it violates the <a href="http://en.wikipedia.org/wiki/Same_origin_policy" target="_blank">same origin policy</a>. So how does the parent (in this case, some other website) know when an article has successfully been shared if we have no way of telling it?</p>
<p>It turns out that while we didn’t used to, we do now, thanks to HTML 5. After several failed attempts at setting shared variables on the window object and trying to access the contents of the iframe, only to be blocked by angry red “Unsafe JavaScript attempt to access frame” messages in the console, I discovered <a href="https://developer.mozilla.org/en/DOM/window.postMessage" target="_blank">postMessage</a>. It gives you a secure channel to send a message to another window or frame across different domains.</p>
<p><a href="http://blog.12spokes.com/wp-content/uploads/2012/04/Screen-shot-2012-04-25-at-9.03.25-PM.png" rel="prettyPhoto[923]"><img class="alignright size-large wp-image-931" title="Screen shot 2012-04-25 at 9.03.25 PM" src="http://blog.12spokes.com/wp-content/uploads/2012/04/Screen-shot-2012-04-25-at-9.03.25-PM-1024x543.png" alt="" width="100%" /></a></p>
<p>For the problem at hand, that means setting up a listener on the parent and a messenger inside the frame. Here’s what I ended up with (shown in Coffeescript):</p>
<p><strong>Listener:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"># <span style="color: #000066; font-weight: bold;">For</span> cross<span style="color: #339933;">-</span>browser compatibility
eventMethod <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">if</span> window.<span style="color: #660066;">addEventListener</span> then <span style="color: #3366CC;">&quot;addEventListener&quot;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #3366CC;">&quot;attachEvent&quot;</span>
eventer <span style="color: #339933;">=</span> window<span style="color: #009900;">&#91;</span>eventMethod<span style="color: #009900;">&#93;</span>
messageEvent <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>eventMethod <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;attachEvent&quot;</span><span style="color: #009900;">&#41;</span> then <span style="color: #3366CC;">&quot;onmessage&quot;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #3366CC;">&quot;message&quot;</span>
&nbsp;
# Listen <span style="color: #000066; font-weight: bold;">for</span> messages
eventer<span style="color: #009900;">&#40;</span>messageEvent<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">if</span> event.<span style="color: #660066;">origin</span> <span style="color: #339933;">!=</span> myDomain
  setTimeout<span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span>closeFrame<span style="color: #339933;">,</span> <span style="color: #CC0000;">3000</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">if</span> event.<span style="color: #660066;">data</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'autoclose'</span>
<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p><strong>Messenger:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">parent.<span style="color: #660066;">postMessage</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'autoclose'</span><span style="color: #339933;">,</span> page.<span style="color: #660066;">domain</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>The interesting thing about the messenger is that we need to specify the domain (including protocol, hostname, and port, if applicable) the listener lives on. If we’re sharing an article on cnn.com (which we’ve injected our frame into with the bookmarklet), we need to pass ‘<a href="http://www.cnn.com/">http://www.cnn.com</a>.’ It’s also a best practice to check the origin of the event to make sure you’re only executing the callback if the message comes from a trusted source.</p>
<p>Now all that’s left to do is celebrate. I think I’ll go with a homebrew over a Dos Equis, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/web-design-development/i-don%e2%80%99t-communicate-between-frames-often-but-when-i-do-i-use-postmessage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keep performance in mind when using FactoryGirl in your test suite</title>
		<link>http://blog.12spokes.com/web-design-development/how-factorygirl-can-slow-down-your-test-suite-aka-factory-build-vs-blank-activerecord-objects/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-factorygirl-can-slow-down-your-test-suite-aka-factory-build-vs-blank-activerecord-objects</link>
		<comments>http://blog.12spokes.com/web-design-development/how-factorygirl-can-slow-down-your-test-suite-aka-factory-build-vs-blank-activerecord-objects/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 15:54:07 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=864</guid>
		<description><![CDATA[The latest major version of FactoryGirl came out last week, which coincided with an internal debate here on the best use of factories. Often, out of habit, when we&#8217;re writing tests, we reach for a Factory when we&#8217;re testing a new method. It&#8217;s convenient because it gives you some test data to work with, and [...]]]></description>
			<content:encoded><![CDATA[<p>The latest major version of FactoryGirl came out last week, which coincided with an internal debate here on the best use of factories. Often, out of habit, when we&#8217;re writing tests, we reach for a Factory when we&#8217;re testing a new method. It&#8217;s convenient because it gives you some test data to work with, and you can easily set protected attributes without having to deal with mass assignment protection. After all, is there a big performance difference between these?:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Factory.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:listing</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Listing.<span style="color:#9900CC;">new</span></pre></div></div>

<p>It depends, of course. What are you defining in your factory? Just a few attributes? A couple of associations? Here&#8217;s what the one in question looks like:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Factory.<span style="color:#9900CC;">define</span> <span style="color:#ff3333; font-weight:bold;">:listing</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span>
  f.<span style="color:#9900CC;">sequence</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:title</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>n<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#996600;">&quot;Super Listing #{n}&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  f.<span style="color:#9900CC;">display_price</span> <span style="color:#996600;">&quot;15&quot;</span>
  f.<span style="color:#9900CC;">description</span> <span style="color:#996600;">'Check out my super listing. Buy buy buy!'</span>
  f.<span style="color:#9900CC;">association</span> <span style="color:#ff3333; font-weight:bold;">:account</span>, <span style="color:#ff3333; font-weight:bold;">:factory</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#ff3333; font-weight:bold;">:confirmed_account</span>
  f.<span style="color:#9900CC;">association</span> <span style="color:#ff3333; font-weight:bold;">:zip</span>
  f.<span style="color:#9900CC;">association</span> <span style="color:#ff3333; font-weight:bold;">:category</span>
  f.<span style="color:#9900CC;">listing_type</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>a<span style="color:#006600; font-weight:bold;">|</span> ListingType.<span style="color:#9900CC;">offline</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>After we dive a bit deeper, now there&#8217;s no question; using a Factory is going to be more resource-intensive than building a blank ActiveRecord object. Not only are we doing a &#8216;Listing.new&#8217; but we&#8217;re also doing a &#8216;Zip.new&#8217; and an &#8216;Account.new&#8217; and we&#8217;re keeping track of previously generated titles; there&#8217;s simply a lot more going on. But how much slower is it, really?</p>
<p>All of these fields are set primarily to get the model to pass validation. That&#8217;s what makes FactoryGirl such a powerful tool; you can type Factory(:listing) and magically have a listing in your database without having to worry about any of that underlying validation logic. It&#8217;s excellent for generating test data that you can use in your Cucumber scenarios or if you&#8217;re testing out database queries.</p>
<p>In our estimation, the main speed difference wasn&#8217;t between using a Factory and not using a Factory. The biggest win would be avoiding the database. That&#8217;s why we&#8217;d often opt for Factory.build, because it doesn&#8217;t save the object you&#8217;re creating. A perfect use case is for testing validations:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">describe <span style="color:#996600;">&quot;validations&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  it <span style="color:#996600;">&quot;is valid&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    Factory.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:listing</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">should</span> be_valid
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  it <span style="color:#996600;">&quot;is invalid without a title&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    Factory.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:listing</span>, title: <span style="color:#996600;">''</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">should_not</span> be_valid
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>This test clearly shows that a fully fleshed out Listing is valid, but when you remove the title, it&#8217;s not valid. And since we&#8217;ve called Factory.build, there&#8217;s no database hit. Right?</p>
<p>Surprise!</p>
<p>That&#8217;s what I thought, anyway. It turns out that while Factory.build doesn&#8217;t save your Listing, it does save your associations; your Account, your Zip, your Category, and any associations that those factories may have. Those long test runs are starting to make a lot more sense now.</p>
<p>Enough with all of this conjecture; how about some benchmarks?</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">realtime</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006666;">100</span>.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> Listing.<span style="color:#9900CC;">new</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">0.0148091316223145</span> seconds
&nbsp;
<span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">realtime</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006666;">100</span>.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> Factory.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:listing</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">19.3972871303558</span> seconds
&nbsp;
<span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">realtime</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006666;">100</span>.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> Factory<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:listing</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">38.2170720100403</span></pre></div></div>

<p>Fleshing out the attributes using Factory.build in this case is 1300x slower than building an empty Listing, and using Factory (to persist the Listing itself) is a whopping 2500x slower. To be fair, with an empty Listing Factory, it&#8217;s not much worse than doing Listing.new:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Factory.<span style="color:#9900CC;">define</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:boring_listing</span>, :<span style="color:#9966CC; font-weight:bold;">class</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">'Listing'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
<span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">realtime</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006666;">100</span>.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> Factory.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:boring_listing</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">0.0174689292907715</span> seconds</pre></div></div>

<p>So the culprit here is building and saving those associations.</p>
<p>How about our validation specs above? Is there a better way? We still want to be able to quickly flesh out a valid model without hitting the database. For that, we have a much better option, Factory.stub:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC00FF; font-weight:bold;">Benchmark</span>.<span style="color:#9900CC;">realtime</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006666;">100</span>.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> Factory.<span style="color:#9900CC;">stub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:listing</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">2.69829893112183</span> seconds</pre></div></div>

<p>This does what we actually intended to do in the first place, in this case 7 times faster than using .build.</p>
<p>This is clearly not an exhaustive analysis, but it has taught us a few valuable lessons:</p>
<ol>
<li>Use caution in utilizing Factories. If you can avoid it, do so and test your model directly and you will get drastic performance boosts. This should be easy for most unit tests that don&#8217;t need to touch the database.</li>
<li>If you need a fully fleshed out model, such as for testing validations, use Factory.stub (build_stubbed in FG 3.0)</li>
<li>Keep your base Factory definitions as lightweight as possible: just enough to get a record to save; which is many times more important if you&#8217;re defining an association.</li>
<li>Beware of Factory.build, for it is deceiving.</li>
</ol>
<p>All that said, FactoryGirl is a truly handy tool that we use in just about all of our Rails test suites. We don&#8217;t suggest that it&#8217;s inefficient or broken, but rather that you should keep performance in mind when writing your specs.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/web-design-development/how-factorygirl-can-slow-down-your-test-suite-aka-factory-build-vs-blank-activerecord-objects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My first Twitter Bootstrap: What I liked and what I didn&#8217;t.</title>
		<link>http://blog.12spokes.com/web-design-development/my-first-twitter-bootstrap-what-i-liked-and-what-i-didnt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=my-first-twitter-bootstrap-what-i-liked-and-what-i-didnt</link>
		<comments>http://blog.12spokes.com/web-design-development/my-first-twitter-bootstrap-what-i-liked-and-what-i-didnt/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 20:17:46 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Agile development]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[MVPs]]></category>
		<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=858</guid>
		<description><![CDATA[I&#8217;m working on an MVP for a great client right now. Although the two guys behind the app are really design-y by nature, their goal with this iteration is to produce a basic desktop version, get it in front of users, and see if it&#8217;s worth pursuing further. So on the front end, I felt [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on an MVP for a great client right now. Although the two guys behind the app are really design-y by nature, their goal with this iteration is to produce a basic desktop version, get it in front of users, and see if it&#8217;s worth pursuing further. So on the front end, I felt like my obligation to this client was two-fold: do great work, but do it fast. </p>
<p>It was a great opportunity to finally give <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> a try. </p>
<p>Created by <a href="http://twitter.com/mdo">Mark Otto</a> and <a href="http://twitter.com/fat">Jacob Thornton</a> at Twitter, Bootstrap is a comprehensive front-end development framework that provides a foundation of markup/styles and javascript interactions for stuff you end up needing for nearly every project: reset or &#8220;normalize&#8221; CSS; CSS for grid layouts, pleasing typography, and common navigation patterns; and javascript plugins for drop downs, tooltips, accordions &hellip; the list goes on. Poking around Bootstrap for the first time, I was amazed by how much it encompassed; I couldn&#8217;t wait to give it a whirl.</p>
<p>Nevertheless, I still had mixed feelings about building on someone&#8217;s framework &#8212; most, to be completely honest, related to slight ego and control issues around my style sheets. CSS is my specialty; it&#8217;s my main area of expertise and my greatest professional pleasure. For the past three years, I&#8217;ve been constantly tweaking and updating my own personal, uh, &#8220;<a href="http://www.slideshare.net/collylogic/developing-your-ultimate-package">ultimate package</a>&#8221; (I&#8217;d stop short of calling it a real framework) I use to start projects. I know the styles like the back of my hand by now, which makes for fast development and easy debugging. </p>
<p>My relationship to javascript, however, isn&#8217;t quite as cozy. Like many other front-end developers I&#8217;ve met who arrived in their jobs via the world of design, I find writing javascript rewarding but also fairly time consuming&#8212I usually end up doing a fair bit of non-billable work double- and triple-checking my code. (And on a side note, one thing I love about working at 12 Spokes is having &#8220;real&#8221; javascript developers critique my work. I feel like I&#8217;m learning a ton and shedding a lot of bad habits I developed as a result of being mostly self-taught.) A speedy MVP project, however, is neither the time nor the place for poring over front-end code or reveling in teachable moments. And what made Bootstrap extra appealing was the prospect of having &#8220;good enough for Twitter&#8221; javascript plugins at my disposal.</p>
<p>So how&#8217;s it worked out so far? In a word (or two): damn well. Bootstrap&#8217;s javascript/jQuery plugins were everything and more I&#8217;d hoped they&#8217;d be. Without a doubt, they saved me time during development: I found them easy to style and hard to &#8220;break&#8221; (two drop downs in the same div? No problemo.) One major bonus surprise was the built-in icon set from <a href="http://glyphicons.com/">Glyphicons</a>. I didn&#8217;t always use their icons in the final iteration, but for quick prototyping, they were very handy. As for the CSS, it&#8217;s super well-written, and the default styles are really attractive jumping-off points for your own visual customizations.</p>
<p>Two main observations I&#8217;ve made so far during the project:</p>
<h3>Bootstrap is more visually prescriptive than I thought it would be</h3>
<p>This is by design: As its name suggests, Bootstrap is perhaps best suited to developers who want to bring their ideas to fruition without needing to learn the intricacies of CSS or request the help of a designer/front-end developer. The design of our app was 100% custom, however; and I found that unless you want your app to scream, &#8220;I was built with Bootstrap!!!&#8221;, you&#8217;ve got to do a fair bit of overwriting. </p>
<p>And during my efforts to overwrite Bootstrap&#8217;s default styles, there were occasions I found the framework <em>overly</em> prescriptive. The biggest culprit was typography. For some reason, the authors set font-family, font-size and line-height defaults for elements like paragraphs, instead of just adding those styles to, say, the body, and letting them cascade down (and thus be easily overwritten). So if you create a new style for a container where you want, say, a different font and color, what should be this &hellip;</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.new-box</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">white</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> small<span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1.5</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'Comic Sans MS'</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>&hellip; turns into this:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.new-box</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">white</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'Comic Sans MS'</span>
<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> small<span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1.5</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #6666ff;">.new-box</span> p <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">white</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'Comic Sans MS'</span>
<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1.5</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">11px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<h3>Avoid the Gemset</h3>
<p>If the Bootstrap authors read the above, they&#8217;d be well within their rights to say, &#8220;Whatever, dude. If you don&#8217;t like our type styles, don&#8217;t use &#8216;em&#8221;. And one thing I love about Bootstrap is that it&#8217;s super customizable. The authors make it easy to only download the components you need. However, we&#8217;re a Rails shop, so importing Bootstrap via a Gemset seemed like the natural way to go when we were setting things up. What I didn&#8217;t realize (and please let me know if I&#8217;m wrong here, world) is that when you import Bootstrap via Gemset, there&#8217;s no way to a) remove the CSS and javascript files you don&#8217;t need to load, or b) directly edit the Bootstrap styles. So what this leads to is unnecessary code getting loaded and a lot of overwriting Bootstrap defaults downwind in your own style sheet (instead of just editing the original styles). Before this app goes to production&#8212and when we know exactly which Bootstrap components we&#8217;ll need to include&#8212I&#8217;m going to ask Ethan to remove the Gemset, and I&#8217;ll create a custom download of the framework and use that instead.</p>
<p>Overall, though, Bootstrap is a major achievement in the world of front-end development and an <em>incredibly</em> generous gift to the industry from Twitter. I&#8217;m not sure I&#8217;m going to use its style sheets again (as someone who&#8217;s very comfortable with CSS, I just don&#8217;t think I&#8217;m its target audience there). The javascript plug-ins, however, will go right into my toolbox, and will definitely see the light of day on future projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/web-design-development/my-first-twitter-bootstrap-what-i-liked-and-what-i-didnt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Interface Elements We Hate: Upper bounds on passwords</title>
		<link>http://blog.12spokes.com/user-interface-elements-we-hate/user-interface-elements-we-hate-upper-bounds-on-passwords/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=user-interface-elements-we-hate-upper-bounds-on-passwords</link>
		<comments>http://blog.12spokes.com/user-interface-elements-we-hate/user-interface-elements-we-hate-upper-bounds-on-passwords/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 15:22:01 +0000</pubDate>
		<dc:creator>Erin</dc:creator>
				<category><![CDATA[User Interface Elements We Hate]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=656</guid>
		<description><![CDATA[This happened to me the other day: &#8220;ERROR: Password must be 8-12 characters long.&#8221; Oh, shoot me now. Better yet, shoot the developer who wrote that line of code. Who in their right mind puts an upper limit on the number of allowable characters? I understand the sites that push you into making a weak password [...]]]></description>
			<content:encoded><![CDATA[<p>This happened to me the other day:</p>
<blockquote><p>&#8220;ERROR: Password must be 8-12 characters long.&#8221;</p></blockquote>
<p>Oh, shoot me now. Better yet, shoot the developer who wrote that line of code. Who in their right mind puts an <strong>upper limit</strong> on the number of allowable characters? I understand the sites that push you into making a weak password more secure by adding letters, capitalization and special characters. I can work with that. I have a stable of passwords I use in these situations—throwaway passwords that meet various standards (must have a capital letter, must be a combination of letters and numbers, etc). And of course, I practice good password hygiene and have super-strong and unique passwords for important stuff like banking and email.</p>
<p>But putting an upper limit on the number of characters in a password? That&#8217;s absurd. In the end, I had to make up a new one, because all my regulars are too long.</p>
<p>Needless to say, now I can&#8217;t remember what it was.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/user-interface-elements-we-hate/user-interface-elements-we-hate-upper-bounds-on-passwords/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Right Way: Thou Shalt Not Commit Haphazardly</title>
		<link>http://blog.12spokes.com/web-design-development/git/the-right-way-thou-shalt-not-commit-haphazardly/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-right-way-thou-shalt-not-commit-haphazardly</link>
		<comments>http://blog.12spokes.com/web-design-development/git/the-right-way-thou-shalt-not-commit-haphazardly/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 15:49:39 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=844</guid>
		<description><![CDATA[A commit should not be taken lightly. A commit is a work of art, a labor of love chiseled down to the bare essentials. Think of a project repo as a novel, with each branch as a chapter, each line of code as a sentence, and each commit as a paragraph. I don&#8217;t have a [...]]]></description>
			<content:encoded><![CDATA[<p>A commit should not be taken lightly. A commit is a work of art, a labor of love chiseled down to the bare essentials. Think of a project repo as a novel, with each branch as a chapter, each line of code as a sentence, and each commit as a paragraph.</p>
<p>I don&#8217;t have a master checklist for things that must be satisfied in order to commit. It&#8217;s more a feeling. If I&#8217;m adding a new method, does it warrant tests that I have not yet written? If so, I go back and write the tests. Could some code read a little nicer? Is it clear? What will someone reviewing this code think? What would I think of this code if I were reviewing it myself? Are all of my tests passing? What will they think of me?!</p>
<p>And naming your commits-ah! This is even more important when you&#8217;re not only communicating with people reviewing the code now or in the future but also a client (as we tie our commits to stories). Why does this code exist? What value is it adding, in layman&#8217;s terms? What edge case is it solving? When this update hits the client&#8217;s inbox, will it raise an eyebrow or make them think I&#8217;ve got everything under control?</p>
<p>This is the internal dilemma many (possibly overly self-aware) developers have many times each day. I deal with the crisis with a huge helping hand from a little unmaintained OSX tool called GitX. Many git GUIs exist, but GitX has the most lightweight and intuitive interface I&#8217;ve come across. It allows me to effortlessly make line-by-line commits (and discards) which enable me to craft my commits to tell the story of what I am trying to achieve. After one of those exploratory coding sessions, it lets me go back and review and refine my work before giving it a conscious seal of approval. Always having access to a real-time diff allows me to catch countless bugs, code smells, and junk that would otherwise clutter up the project. I feel lost without it.</p>
<p>Making a commit is not simply saving state&#8211;it is declaring victory over the problem at hand. A long series of these small triumphs is what makes a good project.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/web-design-development/git/the-right-way-thou-shalt-not-commit-haphazardly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Just launched: The Pericles Project</title>
		<link>http://blog.12spokes.com/web-design-development/just-launched-the-pericles-project/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=just-launched-the-pericles-project</link>
		<comments>http://blog.12spokes.com/web-design-development/just-launched-the-pericles-project/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 23:32:52 +0000</pubDate>
		<dc:creator>Erin</dc:creator>
				<category><![CDATA[Agile development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Web Design & Development]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=817</guid>
		<description><![CDATA[We&#8217;re happy to introduce the world to the Pericles Project, an awesome application we helped build and launched just a few weeks ago. Our client had a great idea for a news aggregator that offers you personalized recommendations for which news to read, based on your similarity to other users. It also helps you break [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.periclesproject.com"><img class="alignleft size-medium wp-image-818" title="Screen Shot 2012-02-08 at 4.22.55 PM" src="http://blog.12spokes.com/wp-content/uploads/2012/02/Screen-Shot-2012-02-08-at-4.22.55-PM-300x216.png" alt="" width="300" height="216" /></a>We&#8217;re happy to introduce the world to the Pericles Project, an awesome application we helped build and launched just a few weeks ago. Our client had a great idea for a <a href="http://periclesproject.com">news aggregator that offers you personalized recommendations</a> for which news to read, based on your similarity to other users. It also helps you break out of the internet echo chamber by showing you the most highly regarded articles from all parts of the political spectrum, tidily summed up by &#8220;left, right and center.&#8221;</p>
<p>The more you read, the better it knows you and your tastes, and we should know—we spent a lot of time writing complex algorithms to determine how alike users are. We&#8217;re excited to see them in action!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/web-design-development/just-launched-the-pericles-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Quickbooks is best, even for small businesses</title>
		<link>http://blog.12spokes.com/running-a-business/why-quickbooks-is-best-even-for-small-businesses/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-quickbooks-is-best-even-for-small-businesses</link>
		<comments>http://blog.12spokes.com/running-a-business/why-quickbooks-is-best-even-for-small-businesses/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 18:08:07 +0000</pubDate>
		<dc:creator>Erin</dc:creator>
				<category><![CDATA[Dreary business details]]></category>
		<category><![CDATA[Running a business]]></category>

		<guid isPermaLink="false">http://blog.12spokes.com/?p=497</guid>
		<description><![CDATA[Believe it or not, 12 Spokes has not always been the large team that it is today. (I know, shock). When we started, we were just a couple of really talented developers working at home, building hot software for a small cadre of clients. It was 2006, and we&#8217;d been drinking the 37 Signals &#8220;Less [...]]]></description>
			<content:encoded><![CDATA[<p>Believe it or not, 12 Spokes has not always been the large team that it is today. (I know, shock). When we started, we were just a couple of really talented developers working at home, building hot software for a small cadre of clients.</p>
<p>It was 2006, and we&#8217;d been drinking the 37 Signals &#8220;Less is more&#8221; Kool-aid for a couple of years. We embraced the theory:<br />
- Obviously, we collaborated using Basecamp.<br />
- We used Google docs instead of Excel and Word. (Okay, it was 2006, and we used OpenOffice because Google Docs didn&#8217;t exist yet—but you get the gist.)<br />
- We worked remotely and collaborated over Campfire group chat.<br />
- We chose lightweight Blinksale and InDinero for invoicing and accounting, rather than bloated Quickbooks.</p>
<p>For the most part, the &#8220;less is more&#8221; philosophy really served us well. We&#8217;re still using Google Docs, HipChat for group chat, and we just bought a printer last week (reluctantly!).</p>
<p>But if I could give one piece of advice to the fresh-faced young entrepreneur I was in &#8217;06, it&#8217;s this: When it comes to your accounting, always act bigger than you think you are. As a fledgling business owner, you might think Quickbooks—an overweight behemoth—is too big and cumbersome for you. But believe me, if (when!) your company starts taking off, you&#8217;re gonna want it.</p>
<p>This is where Past Erin steps in and calls Current Erin a sellout.</p>
<p>Now, Prior Self, don&#8217;t get all high and mighty on me. Believe me, Quickbooks <strong>is</strong> massive and definitely more accounting software than I need. But here&#8217;s why it makes sense: Small business owners, whether they run hair salons or software shops, are constantly reinventing wheels that all the other small business owners before them have invented. We&#8217;re all toiling in our offices trying to wrap our minds around health insurance options and 401Ks for our employees. We all have to figure out what the heck the federal 940/944 tax forms are.</p>
<p>There&#8217;s a gauntlet of minutiae that each small business owner has to untangle. As your business grows, you are going to spend more and more time on these minutiae and less time on your craft. By the time you realize you need Quickbooks, you&#8217;re going to be a very busy person. And believe it or not, using bloated software can lighten the load.</p>
<p>Here&#8217;s how:</p>
<p>- When you&#8217;re small, you can take half an hour write your own custom spreadsheet to calculate your profit and loss. When you&#8217;re big, you&#8217;ll appreciate that your accounting software does it for you in under 30 seconds.<br />
- When you&#8217;re small, it&#8217;s not a big burden to invoice through Blinksale, record income through InDinero, and run paychecks through your bank. You don&#8217;t have that many invoices or that many employees. But when you&#8217;re big, you&#8217;ll want to be able to enter each invoice once and have the software automatically do the rest.<br />
- People are going to want to look at your books someday. Maybe it&#8217;s a prospective landlord who wants to make sure you&#8217;re for real. Maybe it&#8217;s a banker whom you&#8217;re asking for a loan. Maybe it&#8217;s your tax accountant. Whoever it is, he or she is expecting your books to look a certain way. (Hint: the Quickbooks way.) I&#8217;m not saying it&#8217;s right or wrong, but when you hand them your home-cooked Google Doc, they&#8217;re not going to believe in you. I know, I know. Just because every other business in the world jumps off a cliff, that doesn&#8217;t mean you should, too. But you should.</p>
<p>Prior Self, you can definitely find other software that&#8217;s cheaper, lighter and can do most of what you need Quickbooks to do. But believe me, future self with thank you if you just act big from the beginning.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.12spokes.com/running-a-business/why-quickbooks-is-best-even-for-small-businesses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

