<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
	<channel>
		<title>Viget.com Blogs</title>
		<link>http://viget.com/</link>
		<language>en</language>
		<dc:rights>Copyright 2013</dc:rights>
		<pubDate>Fri, 17 May 2013 21:01:06 GMT</pubDate>
		<admin:generatorAgent rdf:resource="http://expressionengine.com/" />

		
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Viget" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="viget" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
				<title>How Startups Get to Great Design: Q&amp;amp;A from Boulder Startup Week 2013</title>
				
					<link>http://viget.com/advance/how-startups-get-to-great-design-qa-from-boulder-startup-week-2013</link>
					<guid isPermalink="false">http://viget.com/advance/how-startups-get-to-great-design-qa-from-boulder-startup-week-2013#When:21:01</guid>
				
				<pubDate>Fri, 17 May 2013 21:01 GMT</pubDate>
				<dc:creator>Becky Tornes</dc:creator>
				<dc:subject>Advance</dc:subject>
				<description><![CDATA[ 
			    
						<p dir="ltr">
	<img alt="The Event" src="http://viget.com/uploads/image/blog/bsw-scene.jpg" style="width: 730px; height: 484px;" /></p>
<p dir="ltr">
	As part of <a href="http://boulderstartupweek.com/">Boulder Startup Week</a>, Viget hosted a moderated panel session, <a href="http://viget.com/flourish/boulder-startup-week-2013-how-startups-get-to-great-design-may-17th">How Startups Get to Great Design</a>. With over 150 people in attendance, this event built upon the success of our 2012 event <a href="http://viget.com/flourish/boulder-startup-week-2012-may-16th-20th">Startups + Great UX = Great Success</a>.</p>
<p>
	This year&rsquo;s event brought together designers from agencies and product companies to discuss what works for startups when going through a redesign. The session was valuable, with moderator <a href="http://viget.com/about/team/jfox">Jackson Fox</a> doing an excellent job of keeping the topics on track and making sure each panelist had a chance to speak to their experiences.</p>

						<p>
	<img alt="Panel" src="http://viget.com/uploads/image/blog/bsw-panel.jpg" style="width: 730px; height: 484px;" /></p>
<p>
	The panelists, talented designers working inside local startups and agencies, included:</p>
<ul>
	<li>
		<a href="http://andy.is/">Andy Stone</a>&nbsp;-&nbsp;Art Director at <a href="http://www.mocavo.com/">Mocavo</a></li>
	<li>
		<a href="http://matthewgist.com/">Matt Gist</a> - Product Designer at <a href="http://www.birdbox.com/">BirdBox</a></li>
	<li>
		<a href="http://viget.com/about/team/bculbreth">Blair Culbreth</a> - Designer at <a href="http://viget.com/">Viget</a></li>
	<li>
		<a href="https://twitter.com/heavywinter">Mike Rivera</a> - Director of User Experience at <a href="http://www.sliceoflime.com/">Slice of Lime</a></li>
</ul>
<p>
	The floor then opened up for the Q&amp;A portion.&nbsp;</p>
<p>
	<img alt="Question and Answer" src="http://viget.com/uploads/image/blog/bsw-qa.jpg" style="width: 730px; height: 484px;" /></p>
<p>
	If you didn&rsquo;t get the chance to get your question addressed, please use the comments below and the designers will do their best to respond here.<br />
	&nbsp;</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Share, Grow, Repeat</title>
				
					<link>http://viget.com/flourish/share-grow-repeat</link>
					<guid isPermalink="false">http://viget.com/flourish/share-grow-repeat#When:16:44</guid>
				
				<pubDate>Thu, 16 May 2013 16:44 GMT</pubDate>
				<dc:creator>Emily Bloom</dc:creator>
				<dc:subject>Flourish</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	At Viget, we believe in sharing. We share our ideas on our&nbsp;<a href="http://viget.com/blogs">blogs</a>, we share our knowledge at industry events, we share our entrepreneurial experiments via <a href="http://www.pointlesscorp.com/">Pointless Corp</a>, and we share our adventures in <a href="http://www.flickr.com/photos/viget/sets/">pictures</a> and <a href="http://vimeo.com/viget">videos</a>.</p>
<p>
	Sharing makes my work easier and more effective. Here are three examples of how sharing comes up in the recruiting work I do:</p>

						<ul>
	<li>
		We&#39;ve asked the last twenty-five people we&#39;ve hired how they first heard of Viget. Ten of them referenced something I would categorize as sharing -- a blog post, our code on github, an application we built and made public, etc.</li>
</ul>
<p>
	<img alt="" src="http://viget.com/uploads/image/blog/first-hear-viget2b.jpg" style="width: 570px; height: 399px;" /></p>
<ul style="">
	<li>
		About a quarter of recent applicants have mentioned their affinity for our <a href="http://www.pointlesscorp.com/">Pointless Corp</a> endeavors. This reveals that the candidate has done research into Viget and they&#39;ve uncovered a small, quirky, but important aspect of our company. It&#39;s a short-cut to confirming culture fit -- a quick way to know that they care about something that&#39;s important to us.</li>
	<li>
		Here&#39;s how a recent applicant started his email:</li>
</ul>
<blockquote>
	<p>
		"Last week I attended a talk that Trevor Davis hosted and was impressed by the quality of work he reflected and his knowledge and passion for Front-End JavaScript. I felt immediately drawn to finding out more about his workplace, as it seemed very well aligned with my interests, passions and experience."</p>
</blockquote>
<p>
	<strong>Is there a downside to so much sharing?</strong> Yes. I think sometimes we paint such a <a href="http://www.flickr.com/photos/viget/8697069962/in/set-72157633373948453">full picture</a> of what it&#39;s like work here, that applicants get ahead of themselves and imagine themselves fitting into <a href="http://www.flickr.com/photos/viget/8697196676/in/set-72157633374292001">that picture</a> before we&#39;ve had a chance to discuss skills, talents, and the actual job responsibilities. It can sometimes make evaluations and rejections that much more stressful and disappointing, I think.</p>
<p>
	<strong>Is it hard to share so much?</strong> Not really. It comes naturally to many people here -- they love sharing what they&#39;re learning on the job and many of them are gifted writers and speakers. For others, it may take more work, but they believe it&#39;s worth the effort. Sharing is inherent to the Viget culture; it&#39;s not forced.</p>
<p>
	<strong>Does Viget share <em>everything</em>?</strong> No, not with the whole world anyway. There is a lot going on here that only gets shared internally (via basecamp, campfire, and yammer, mostly). And I have conversations all the time with coworkers where I&#39;m surprised to hear some details about what they&#39;re doing.&nbsp;</p>
<p>
	<strong>Should applicants share a lot, too?</strong> I think so. When candidates are active on github, dribbble, twitter, or their own site it helps us determine if their skills and interests are relevant. When they are, we get excited (and, of course, prepare to get to know them much better). We still look at resumes and cover emails. I will still dig you up on LinkedIn. But when you share what you&#39;re learning, making, and experimenting with, we have such a better idea of what it might be like to work with you. And I think by hiring people for whom this comes naturally, we continue to nurture the Viget culture of sharing.</p>
<p>
	<strong>Is this blog post sharing thoughts about sharing?</strong> Yes, yes. Very meta.</p>
<p>
	<em>Want to share with us? <a href="http://viget.com/about#careers">We&#39;re hiring</a>!</em></p>

					
				]]></description>
			</item>
		
			<item>
				<title>Building a Traffic Heatmap with Google Analytics and R</title>
				
					<link>http://viget.com/inspire/how-to-build-a-traffic-heatmap-using-google-analytics-and-r</link>
					<guid isPermalink="false">http://viget.com/inspire/how-to-build-a-traffic-heatmap-using-google-analytics-and-r#When:15:35</guid>
				
				<pubDate>Tue, 14 May 2013 15:35 GMT</pubDate>
				<dc:creator>Todd Moy</dc:creator>
				<dc:subject>Inspire</dc:subject>
				<description><![CDATA[ 
			    
						<div>
	For all of the reporting power that Google Analytics provides, occasionally I want to see data in a way it doesn&rsquo;t natively support. Most recently, I was interested in understanding hourly and daily shifts in traffic across sections of a site. Knowing when these occur could help authors time their publishing schedules for maximum exposure.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Here&rsquo;s what I was looking for &ndash; a heatmap that boils a few month&#39;s worth of data into a weekly view. As you can tell from this example, traffic tracks closely to normal working hours.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-diagram.jpg" /></div>
<div>
	&nbsp;</div>
<div>
	My first thought was to pull the data in CSV form from GA, hack it up in Google Spreadsheets or <a href="http://openrefine.org/">Refine</a>, and then chart it out. But I soon found that I couldn&rsquo;t find a way to reproduce this chart using their stock widgets. I looked at <a href="http://d3js.org/">D3</a> and a few other charting frameworks and, though I was impressed, I wasn&rsquo;t ready to commit to that learning curve. Plus, I didn&rsquo;t want to spend a lot of time pulling data exports from GA if I could help it.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Looking further afield, I remembered R.&nbsp;</div>

						<h3>
	Building it in R</h3>
<div>
	R is a scripting / programming environment geared to scientists, statisticians, and data wonks. I had spent some time working through <a href="http://tryr.codeschool.com/">CodeSchool&rsquo;s R Course</a>&nbsp;a few weeks back, just to see what it did. At the time, I didn&rsquo;t have a use for it but I figured it would come in handy later.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Sure enough, when I looked into it further, I found a&nbsp;<a href="http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/">heatmap</a>&nbsp;function that would do precisely what I needed. And finding a post about <a href="http://www.r-bloggers.com/calender-heatmap-with-google-analytics-data-2/">connecting to GA data programmatically</a> convinced me to spend a Sunday morning bulldozing through just enough R to munge data into the format I needed.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	The result is a visually interesting, visceral illustration of how users are hitting the site. Here&rsquo;s how you can get the same thing, while hopefully not burning part of your weekend along the way. Fair warning though - this tutorial is on the technical side and uses libraries that are still in development. Caveat all the emptors!</div>
<h3>
	Assembling your materials</h3>
<div>
	Here&#39;s what you&#39;ll need to get started. This assumes you&#39;re running on Mac OS X.</div>
<ul>
	<li>
		<a href="http://cran.cnr.berkeley.edu/">Download and install R</a>&nbsp;- this is the core binary for the language. Their site is a frameset nightmare, so I linked directly to UC Berkeley&#39;s mirror.</li>
	<li>
		<a href="http://www.rstudio.com/ide/">Download and install RStudio Desktop</a> - this is an IDE that runs atop R. It&#39;s free and makes working with R much easier.</li>
	<li>
		<a href="https://github.com/toddmoy/Google-Analytics-Heatmap/archive/master.zip">Get a copy of the heatmap script</a> - once unzipped, this should give you the source code needed to create a heatmap.&nbsp;</li>
	<li>
		<a href="https://code.google.com/p/r-google-analytics/downloads/list">Download RGoogleAnalytics 1.2</a>&nbsp;- this is the library that helps us connect to Google. Get the tar.gz version; we&#39;ll use this later. Edit: Version 1.3 was posted a few hours ago and after a cursory look, it&nbsp;seems to work too.</li>
</ul>
<div>
	Once you have all these, launch RStudio and take a deep breath. It&#39;s about to get real.</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-rstudio-console.png" style="height: 461px; width: 600px;" /></div>
<h3>
	Installing the libraries</h3>
<div>
	We use two major libraries in this script: RColorBrewer for producing sane color schemes and RGoogleAnalytics for getting the data. The latter relies on RCurl for network requests and RJson for parsing the data returned.&nbsp;</div>
<h5>
	Installing RColorBrewer, RCurl, and RJson</h5>
<p>
	Most libraries in R are super-easy to install. Just issue a command and R installs the right thing from the Comprehensive R Archive Network (CRAN). Let&#39;s do it now.&nbsp;</p>
<p>
	Navigate to the Packages panel and click&nbsp;<em>Install Packages.</em>&nbsp;In the dialog that follows, type <em>rjson, RCurl, RColorBrewer&nbsp;&nbsp;</em>into the <em>Packages</em> field. Confirm the other settings match the screenshot below and click <em>Install</em>.</p>
<p>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-libraries.png" /></p>
<p>
	The installation process will write its status to the RStudio console. Once it stops, you should see a line that states&nbsp;that the downloaded binary packages are located in some byzantine path on your machine. Don&#39;t be afraid: this is good and signifies that they were installed properly.</p>
<p>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-package-console.png" style="height: 436px; width: 600px;" /></p>
<h5>
	Installing RGoogleAnalytics</h5>
<div>
	Sadly, it&#39;s not the same process for RGoogleAnalytics. That library is still under significant development and, as a result, we&#39;ll need to install it from the file you downloaded earlier.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	With RStudio open, open the&nbsp;<em>Packages </em>pane and click <em>Install Packages</em>. Choose <em>Install from package archive</em>&nbsp;and select the library you downloaded earlier. Once you&#39;re ready, click <em>Install</em>.</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-inst-packages.png" /></div>
<div>
	&nbsp;</div>
<div>
	Once it&#39;s done, the console message <em>should</em> look similar to the previous step. For me, however, it complains that the package isn&#39;t available for R 3.0 but then soldiers forward and installs properly. I haven&#39;t traced down the cause but, if you know it, let&#39;s discuss it in the <a href="https://github.com/toddmoy/Google-Analytics-Heatmap/issues/1">Issues</a>.</div>
<h3>
	Running the script</h3>
<h5>
	Connecting to GA</h5>
<div>
	Provided you made it through the above steps mostly unscathed, we&#39;re now at the fun part. We&#39;re going to open the project, step through the code, authenticate to Google, and make a diagram.&nbsp;</div>
<p>
	Open the <em>Google Analytics Heatmap.Rproj</em> project in RStudio using the project menu, then open <em>traffic_heatmap.R</em> from the Files pane. We&#39;ll do most of our work here.&nbsp;</p>
<p>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-init.png" style="width: 600px; height: 550px;" /></p>
<div>
	RStudio can execute code <a href="http://www.rstudio.com/ide/docs/using/source">all at once or line-by-line</a>. Because part of our script asks for user input, we want to move line-by-line. To do this, first ensure your cursor is on line 1 in<em> traffic_heatmap.R</em>. Then hit &ldquo;&#8984;-Return&rdquo; to step through each line in succession. Alternatively, you can click the Run -&gt; button.</div>
<div>
	&nbsp;</div>
<div>
	Do this until you execute the following line.</div>
<pre>
ga &lt;- RGoogleAnalytics()</pre>
<div>
	Once this line is run, Google&rsquo;s OAuth Playground will appear in your default browser, asking you to authorize access. It uses the current active account so, if this is different from your GA account, you may need to log into that first and rerun the last line.</div>
<div>
	&nbsp;</div>
<div>
	Once done, GA will allow us to exchange the authorization code for an access token. Do this, then paste the resulting token at the prompt within the RStudio console.</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-OAuth_2.0_Playground.png" style="height: 482px; width: 600px;" /></div>
<h5>
	Choosing your profile</h5>
<p>
	Since each GA account can manage many different profiles, you will need to choose the one you care about. Stepping through the code with&nbsp;&#8984;-Return, you&#39;ll encounter this line.</p>
<pre>
( ga.profiles &lt;- ga$GetProfileData(access_token) )</pre>
<p>
	Running this will echo the profiles that you manage in GA. Find the number of the profile you want to use. This will be the number in the far left column.</p>
<pre>
1      2219134   www.example.com&#10;2    239481199   www2.example.com&#10;3    232342324   beta.example.com&#10;4        47342   legacy.example.com</pre>
<h5>
	Querying and displaying</h5>
<p>
	Now we can get some data. First, replace the "1" after &nbsp;my_profile with the profile number you just chose. You&#39;ll probably also want to change the date range.</p>
<pre>
my_profile    &lt;- 1           &#10;my_start_date &lt;- "2013-01-01"&#10;my_end_date   &lt;- "2013-03-31"</pre>
<div>
	Once you&#39;re satisfied with that, move your cursor back to the <em>my_profile &lt;- your_profile_number </em>line. Step through it and the rest of the code. You&#39;ll know you&#39;re on the right track when you see the following written to the console:&nbsp;</div>
<pre>
&gt; ga.data &lt;- ga$GetReportData(query)&#10;[1] "Your query matched 168 results that are stored to dataframe ga.data"</pre>
<div>
	The code thereafter cleans up the data and modifies its format to something the heatmap chart can use. You can step through it as fast as your fingers will allow &ndash; there&#39;s nothing else to change.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	Once you&#39;re done, you should see the chart appear in the Plot panel. From there you can export the file to a format you prefer.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	<img alt="" src="http://viget.com/uploads/image/blog/ga-heatmap-studio-plot.png" style="width: 600px; height: 550px;" /></div>
<div>
	&nbsp;</div>
<div>
	Whew, that&#39;s it. You&#39;re done.</div>
<h3>
	In Conclusion</h3>
<div>
	While the initial investment of time was high &ndash; Sundays are in short supply! &ndash; it&#39;s trivial to run this again. Because of this, it becomes incredibly easy to:</div>
<ul>
	<li>
		compare different sections of a site</li>
	<li>
		map unique visitors instead of pageviews</li>
	<li>
		look for time drifts in device usage</li>
	<li>
		gauge uptake from social media efforts</li>
</ul>
<div>
	Essentially any dimension, metric, or filter available through the <a href="https://developers.google.com/analytics/devguides/reporting/">GA Reporting API </a>can be used. So have fun experimenting with it.&nbsp;</div>
<div>
	&nbsp;</div>
<div>
	If you run into technical problems, I&#39;ll do my best to help out but I&#39;m still learning too. Feel free to add any issues you encounter <a href="https://github.com/toddmoy/Google-Analytics-Heatmap/issues">here</a>. Same goes for any enhancement ideas. And if you&#39;re a benevolent R wizard who wants to improve my code, <a href="https://github.com/toddmoy/Google-Analytics-Heatmap/">fork it</a> and send me a pull request. I&#39;d be much obliged.&nbsp;</div>
<div>
	&nbsp;</div>
<h3>
	Oh, and by the way, we&#39;re hiring!</h3>
<p>
	We&#39;re looking to grow our UX team in all three of our office locations. Check out our UX Designer&nbsp;<a href="http://viget.com/about/careers/ux-designer">job listing</a> and, if you think you&#39;re a fit, please get in touch!</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Single-click layer exporting in Photoshop</title>
				
					<link>http://viget.com/inspire/single-click-layer-exporting-in-photoshop</link>
					<guid isPermalink="false">http://viget.com/inspire/single-click-layer-exporting-in-photoshop#When:14:37</guid>
				
				<pubDate>Tue, 14 May 2013 14:37 GMT</pubDate>
				<dc:creator>Dan Tello</dc:creator>
				<dc:subject>Inspire</dc:subject>
				<description><![CDATA[ 
			    
						<h1>
	Use <a href="http://viget.com/uploads/file/generic/Inspire.atn.zip">this sweet photoshop action</a>&nbsp;to save out layers and groups with one click.</h1>
<p>
	One of the most repeated tasks in the build-out process is saving out an individual asset in the comp as a .png or .jpg. If you ever find yourself repeating the same sequence of actions over and over again in Photoshop, <strong>STAHP</strong>, and open up that dusty actions pallet.</p>
<p>
	<img alt="" class="no-border" src="http://viget.com/uploads/image/blog/actions-blank.png" style="margin: -20px 0" /></p>
<p>
	<strong>Before we get into actions, lets compare two ways to do this manually...</strong></p>

						<h2 id="a-bad-way">
	A bad way:</h2>
<ol style="">
	<li>
		Turn off all the layers behind it your asset</li>
	<li>
		Use the slice tool</li>
	<li>
		Zoom in 1000% to make sure you&#39;re not cutting off any pixels, or leaving any blank ones.</li>
	<li>
		Save for web</li>
	<li>
		Delete all of the non-slices you just accidentally exported along with the one slice you did want, because you forgot to customize your export options.</li>
	<li>
		Remember which layers you hid to export that one piece, and re-enable them.</li>
	<li>
		Delete the slice you created that&#39;s overlapping another asset you need to cut out separately.</li>
	<li>
		<strong>Have an emotional breakdown</strong> as you realize you must repeat this process 99 more times today.</li>
</ol>
<p>
	This was my terrible work flow years ago. Let&#39;s never go back there, friends. There is a better way.</p>
<h2 id="a-better-way">
	A better way:</h2>
<blockquote>
	The best thing about this workflow, is that it&#39;s COMPLETELY automatable, meaning we can turn this in to a reusable action.</blockquote>
<p>
	<img alt="" src="http://viget.com/uploads/image/blog/duplicate-group.png" style="width: 401px; height: 343px;" /></p>
<ol style="">
	<li>
		Right click on the layer or group title and click "Duplicate Layer/Group"</li>
	<li>
		In the dialog that pops up, change the destination document to "New" and hit ok.
		<ul>
			<li>
				<em>Now you have a new photoshop document with just that isolated asset!</em></li>
		</ul>
	</li>
	<li>
		In the menu bar, select Image &gt; Trim... &gt; Transparent Pixels
		<ul>
			<li>
				<em>Now your document is exactly the size of your asset, to the exact pixel</em></li>
		</ul>
	</li>
	<li>
		Save for Web (works cleanly since you&#39;re saving the whole document - no accidental extras or generated filenames)</li>
	<li>
		Close your document.</li>
</ol>
<p>
	And now you&#39;re back to your pristine Photoshop file, with your perfectly sized asset saved out and ready to go. There&#39;s nothing to undo to get back to where you were.</p>
<p>
	<strong>Now, let&#39;s look at how to set that up as an action.</strong></p>
<h2 id="the-best-way">
	The BEST way:</h2>
<ol style="">
	<li>
		<strong>Press F12</strong></li>
</ol>
<p>
	One keystroke, name that file, and you&#39;re onto the next one. How you do dis, you ask? ACTIONS my friend. Saving the steps listed in "A Better Way" as an action with a shortcut key is SUPER easy.&nbsp;</p>
<h4>
	Here&#39;s how:</h4>
<ol style="">
	<li>
		Select the layer or group containing your asset</li>
	<li>
		Open your actions palette <em>(window &gt; actions)</em></li>
	<li>
		Hit the "Create New Action Button", and name it.<em> (I called mine "Asset to File")</em></li>
	<li>
		Press record <em>(figure a. below)</em></li>
	<li>
		<strong>Carefully repeat each step listed in "A better way"</strong>, including closing the document</li>
	<li>
		Hit the stop button&nbsp;<em>(figure a. below)</em></li>
</ol>
<p>
	Your new action should now look something like this:</p>
<p>
	&nbsp;<img alt="" class="no-border" src="http://viget.com/uploads/image/blog/actions-all-1.png" style="margin: -20px 0" /></p>
<p>
	Make sure to switch on the "dialog on/off" toggle box next to "Export" <em>(figure b.)</em>. This tells the action to pause when the save for web window appears, so that you can change your settings and name your file before exporting. At this point, you can use your action on another asset, by selecting it, and hitting the play button <em>(figure a.)</em></p>
<h4>
	The last step is to assign a function key.</h4>
<ul>
	<li>
		Select your action in the actions palette</li>
	<li>
		Open the actions palette context menu <em>(figure c.)</em> and select "Action Options"</li>
	<li>
		Choose a function key <em>(and an optional modifier key if needed)</em></li>
</ul>
<p>
	To save you some time, I&#39;ve saved out this, and an alternate version of this action for you to download <a href="http://viget.com/uploads/file/generic/Inspire.atn.zip">here</a>. The alternate version only opens the layer in a new file and trims it. I bound this to <code>shift + F12</code>, and use it when I need to isolate the layer, but make adjustments before saving.</p>
<p>
	That&#39;s all I got! You now know how to make actions, and how to save out any layer or group with the press of a button.&nbsp;<strong>What are some of your favorite time-saving actions?</strong> I&#39;d love to hear what tricks you guys and girls are using to speed up your build-out workflows.</p>

					
				]]></description>
			</item>
		
			<item>
				<title>The Neo Fallacy: How Our Mental Model of Developers Leads to Bad Bug Reports</title>
				
					<link>http://viget.com/extend/the-neo-fallacy-why-bug-reports-should-include-steps-to-reproduce</link>
					<guid isPermalink="false">http://viget.com/extend/the-neo-fallacy-why-bug-reports-should-include-steps-to-reproduce#When:14:28</guid>
				
				<pubDate>Fri, 10 May 2013 14:28 GMT</pubDate>
				<dc:creator>Josh Korr</dc:creator>
				<dc:subject>Extend</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	In two <a href="http://viget.com/extend/tips-for-writing-better-bug-reports" target="_blank">previous</a> <a href="http://viget.com/inspire/what-a-car-rental-taught-me-about-ui-conventions-and-bug-reports" target="_blank">posts</a> about writing better bug reports, I&#39;ve detailed the information developers need to be able to reproduce &mdash; and hence diagnose and fix &mdash; bugs. Since then, an unstated assumption in both posts has been nagging at me: that developers must be able to reproduce a bug in order to diagnose and fix it.</p>
<p>
	To a developer, this is not an assumption &mdash; it&#39;s truth, and obvious. But to non-developers, the necessity of reproducibility is not obvious. If it were, devs wouldn&#39;t see so many bug reports that say little more than "A vague thing vaguely happened &mdash; fix it!!!"</p>
<p>
	I think this disconnect is the primary cause of frustrating-to-devs bug reports. If we can better understand the reason for the disconnect, maybe it&#39;ll be easier to convince non-devs of the necessity of reproducibility.&nbsp;</p>

						<p>
	So what causes this disconnect? Here&#39;s my theory:</p>
<p>
	I believe that most non-developers think developers are like Neo in <em>The Matrix</em>: that devs can see all parts of an app simultaneously at all times, like Neo&#39;s <a href="http://theathleticnerd.com/wp-content/uploads/2011/08/matrix-code-agents-ending.gif" target="_blank">living-ASCII-art view</a> of the Matrix itself.&nbsp;That devs are omniscient, omnipotent beings in regard to an app. I&#39;ve come to think of this mental model as the Neo Fallacy.</p>
<p>
	If pressed, I don&#39;t think we could say <em>how</em> we think developers do this. (Optic fiber running from servers to devs&#39; brain stems? Magic emanating from the bowels of 4chan? Google Glass?) But I can&#39;t think of a better explanation for why so many of us assume devs can figure out a bug from so little information.</p>
<p>
	Returning to theory No. 1, I asked some Viget developers why reproducibility is so important. Some of their answers:</p>
<ul>
	<li>
		"So we can hopefully write a failing test first, and then have one in place to prevent future regressions"</li>
	<li>
		"To confirm it&#39;s an actual bug"</li>
	<li>
		"To know when we&#39;ve fixed it"</li>
	<li>
		"To be able to investigate the issue deeply"</li>
	<li>
		"So we don&#39;t waste our super valuable time"</li>
</ul>
<p>
	All make sense. But those answers are beside the point to someone operating under the Neo Fallacy: "Fine, but why do you need to reproduce the bug to achieve all those things? Can&#39;t you just &#39;see&#39; what&#39;s happening?"</p>
<p>
	Here&#39;s an answer that I hope helps reframe the way we think about developers:</p>
<p>
	Developers are not Neo. Yes, they have superpowers when it comes to writing code. But they&#39;re mere mortals when it comes to knowing what&#39;s happening in an app in real time. They&#39;re not omniscient.</p>
<p>
	Occasionally, they may be able to quickly ascertain a problem based on an intuitive sense of an app&#39;s behavior and an auto-generated error report from <a href="https://airbrake.io/pages/home" target="_blank">Airbrake</a>. But most of the time, a context-free, vague bug report will mean no more to a developer than it would to you. Literally: without the details I outlined in my other posts &mdash; URLs, login creds, specific steps &mdash; you might as well submit the bug report to yourself.&nbsp;</p>
<p>
	And having to spend time trying to glean meaning from such a vague report? For devs, that&#39;s about as fun as hanging out with <a href="http://photos.imageevent.com/afap/wallpapers/thematrix//Matrix_Reloaded15.jpg" target="_blank">these guys</a>.</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Boulder Project Manager Happy Hour May 14, 2013</title>
				
					<link>http://viget.com/flourish/boulder-project-manager-happy-hour-may-14-2013</link>
					<guid isPermalink="false">http://viget.com/flourish/boulder-project-manager-happy-hour-may-14-2013#When:15:47</guid>
				
				<pubDate>Mon, 06 May 2013 15:47 GMT</pubDate>
				<dc:creator>Jason Sperling</dc:creator>
				<dc:subject>Flourish</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	About a month ago <a href="http://viget.com/about/team/btornes">Becky</a> put together the <a href="http://viget.com/flourish/want-to-help-build-a-project-manager-community-in-boulder-co">Inaugural Boulder Project Management Meetup</a>. Based on the excitement about the event, we&rsquo;re doing another one! Join us next Tuesday night, May 14th, 6 PM, at Fate Brewing Company for the next <a href="http://www.meetup.com/Boulder-Web-Project-Managers/events/114887552/" target="_blank">Boulder Project Manager Happy Hour</a>.</p>
<p>
	What might you expect? Besides great beer and company, you&rsquo;ll enjoy -- and hopefully contribute to -- valuable conversation with your peers as we build a community of project managers in the Boulder area.</p>
<p>
	One of my favorite topics from our last Meetup was the role project managers play in driving innovation. We all face the challenge of supporting teams who need to grok a client&rsquo;s business goals, work towards a strategic vision, but stay mindful of time and budgets. We discussed how innovation in our teams&rsquo; work, and in our approach to project management, can address (and sometimes complicate) these challenges. The conversation has stuck with me in the last month and informed some of my day-to-day work here at Viget.</p>
<p>
	On the 14th, we&rsquo;ll be talking about the format of these events moving forward. Please join us now so your voice is heard. We welcome your input on how this group can best serve the needs and interests of our community!</p>
<p>
	RSVP <a href="http://www.meetup.com/Boulder-Web-Project-Managers/events/114887552/" target="_blank">here</a>.</p>

						
					
				]]></description>
			</item>
		
			<item>
				<title>Simplify your build-out process using Layouts with Views</title>
				
					<link>http://viget.com/extend/simplifying-buildout-for-layouts-with-views</link>
					<guid isPermalink="false">http://viget.com/extend/simplifying-buildout-for-layouts-with-views#When:15:16</guid>
				
				<pubDate>Fri, 03 May 2013 15:16 GMT</pubDate>
				<dc:creator>Tommy Marshall</dc:creator>
				<dc:subject>Extend</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	I recently found myself building out a comp which seemed to have only enough code repetition to include a header and footer. However, the further I got into build-out the more code repetition emerged. I saw an opportunity for a MVC-like views system to help, so I set out to build one to make my build-out process easier.</p>

						<h3>
	Code Examples</h3>
<p>
	Let&#39;s say you have a basic layout with a reusable header and footer, like the one in the example below.&nbsp;</p>
<pre>
&lt;!-- location: views/layouts/default.php --&gt;&#10;&lt;html lang="en"&gt;&#10;&lt;head&gt;&#10;    &lt;title&gt;Example Layout&lt;/title&gt;&#10;&lt;/head&gt;&#10;&lt;body&gt;&#10;&#10;    &lt;header&gt;&#10;        &lt;?php $this-&gt;render(&#39;shared/header&#39;); ?&gt;&#10;    &lt;/header&gt;&#10;&#10;    &lt;div class="content"&gt;&#10;        &lt;?php $this-&gt;getContent(); ?&gt;&#10;    &lt;/div&gt;&#10;&#10;    &lt;footer&gt;&#10;        &lt;?php $this-&gt;render(&#39;shared/footer&#39;); ?&gt;&#10;    &lt;/footer&gt;&#10;&#10;&lt;/body&gt;&#10;&lt;/html&gt;</pre>
<div>
	This default layout is rendering a header and footer file located in the <strong>views/shared/</strong> directory. Now, if we wanted to create an About page&nbsp;with some content that uses this default layout, we would do something like this:</div>
<pre>
&lt;!-- location: views/about.php --&gt;&#10;&lt;?php $this-&gt;layout(&#39;default&#39;); ?&gt;&#10;&#10;&lt;h2&gt;About Page&lt;/h2&gt;&#10;&#10;&lt;p&gt;Lorem ipsum dolor copy.&lt;/p&gt;</pre>
<p>
	If we opened domain.com/about in the browser, we would see the About page content loaded within the default layout we created above. (Note: In the above example we could lose the layout declaration at the top since Layouts with Views expects to load <strong>default.php</strong>&nbsp;as the default layout. This setting can be changed in <strong>settings/config.php</strong>.)</p>
<p>
	The above example shows a basic application of&nbsp;<a href="http://tommymarshall.github.io/layouts-with-views">Layouts with Views</a>. Check out the <a href="http://tommymarshall.github.io/layouts-with-views">Github page</a>&nbsp;for examples of features like:</p>
<ul>
	<li>
		Multiple layouts</li>
	<li>
		Nested views</li>
	<li>
		Passing variables to views</li>
	<li>
		Allow for common control structures (if, foreach, etc.)</li>
	<li>
		Referencing page assets (images, stylesheets) using an absolute path</li>
	<li>
		Simple routing (Create the file, done)</li>
</ul>
<h3>
	Download</h3>
<pre>
git clone git@github.com:tommymarshall/layouts-with-views.git </pre>
<div>
	.. or <a href="http://tommymarshall.github.io/layouts-with-views/archive/master.zip">click here</a> to download a zip.</div>
<h3>
	In Conclusion</h3>
<p>
	<a href="http://tommymarshall.github.io/layouts-with-views">Layouts with Views</a> sets out to solve a small problem and that&#39;s it. There&#39;s no customizable routing, no crazy templating features, no unusal syntax to learn. It&rsquo;s just a simple way for me to build out comps. That&#39;s what I like about it.</p>
<p>
	&nbsp;</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Simplifying Search Keyword Analysis</title>
				
					<link>http://viget.com/advance/simplifying-search-keyword-analysis</link>
					<guid isPermalink="false">http://viget.com/advance/simplifying-search-keyword-analysis#When:13:50</guid>
				
				<pubDate>Thu, 02 May 2013 13:50 GMT</pubDate>
				<dc:creator>Lawson Kurtz</dc:creator>
				<dc:subject>Advance</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	Search keyword analysis for analytics has always felt more painful than necessary. Such analysis typically involves filtering through hundreds or thousands of subtly-different variations of search queries to form an impression of the relative importance of particular words and phrases. It&#39;s a time-consuming and often subjective process that isn&#39;t any fun at all.</p>
<p>
	Since current analytics services lack a tool to digest raw search query data into a list of the most important words, we built one fit for the task.</p>

						<h2>
	Introducing Search Words</h2>
<p>
	<a href="https://github.com/vigetlabs/Search-Words" title="Search Words">Search Words</a> is an application that restores some sanity to the search keyword analysis game. Raw search query data goes in, and a list of searched words and their summed search volumes comes out.</p>
<p>
	Specifically, Search Words is a Rack application (built on Sinatra) that takes a CSV file containing search queries with corresponding search volumes, and returns a combined list of search volumes for each word contained within those queries. The application also combines plural and singular versions of a particular word if both forms are present, and will ignore common words (e.g. "a", "and", "or", etc.).</p>
<h3>
	Example Input and Output</h3>
<pre class="prettyprint lang-html">
Input&#10;|---------------------------------------|&#10;| Search Phrase        | Total Searches |&#10;| ======================================|&#10;| Lemurs               | 1,000          |&#10;| durham bulls         | 500            |&#10;| bull fighting        | 100            |&#10;| lemur dance          | 2,000          |&#10;| Durham               | 700            |&#10;| How to catch a lemur | 35             |&#10;|---------------------------------------|&#10;&#10;Output&#10;|---------------------------------------|&#10;| Search Word          | Total Searches |&#10;| ======================================|&#10;| durham               | 1,200          |&#10;| bull                 | 600            |&#10;| fighting             | 100            |&#10;| lemur                | 3,035          |&#10;| dance                | 2,000          |&#10;| catch                | 35             |&#10;|---------------------------------------|</pre>
<h3>
	Demo and Installation</h3>
<p>
	A demo of the Search Words application can be found <a href="http://search-words.herokuapp.com/" title="Search Words Demo">here</a>. To install Search Words, see the <a href="https://github.com/vigetlabs/Search-Words" title="Search Words GitHub Repository">project&#39;s repository on GitHub</a>. Complete installation instructions can be found within the readme.</p>
<p>
	Search Words is a very simple application at the moment, so feel free to <a href="https://github.com/vigetlabs/Search-Words/issues/new" title="drop us a line">drop us a line</a> if you have suggestions for improvement.</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Happy 13th Birthday, Viget!</title>
				
					<link>http://viget.com/flourish/happy-13th-birthday-viget</link>
					<guid isPermalink="false">http://viget.com/flourish/happy-13th-birthday-viget#When:18:59</guid>
				
				<pubDate>Wed, 01 May 2013 18:59 GMT</pubDate>
				<dc:creator>Khanh Stenberg</dc:creator>
				<dc:subject>Flourish</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	<a href="http://www.flickr.com/photos/viget/8697067142/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8117/8697067142_b9e66ef788_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	Ever since Viget turned <a href="http://www.flickr.com/photos/viget/sets/72157623829451839/">10</a> we&#39;ve celebrated each successful year with an <a href="http://viget.com/flourish/vigets-11th-birthday">overnight</a> <a href="http://viget.com/flourish/celebrating-vigets-12th-birthday">adventure</a>, and this year was no different. We absolutely fell in love with <a href="http://www.montfairresortfarm.com/">Montfair</a>&nbsp;two years ago and we jumped at the opportunity to return. From a planning standpoint, there&#39;s a huge advantage in being familiar with a venue. It lets you focus more time on how to make the event even bigger and better, and that&#39;s just what we did.</p>
<p>
	The Boulder team flew to either the Falls Church or Durham office and spent a few days working from the East Coast. Our project managers, user experience designers, business development team, and developers held team offsites the days leading up to <a href="http://viget.com/flourish/third-third-thursday-teams-tradition" target="_blank">TTT</a>. By Friday, we were ready to have the whole team together.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697069962/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8122/8697069962_55768d7b8b_c.jpg" style="width: 800px; height: 534px;" /></a></p>

						<p>
	As everyone arrived at Montfair, we enjoyed a catered, grilled lunch on the deck by <a href="http://www.cheftedcatering.com/" target="_blank">Chef Ted</a> and his team.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8695951145/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8537/8695951145_3231da1fd6_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697070546/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8121/8697070546_60a0b8d517_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	Once we filled our bellies and soaked up some sun, we settled in for the quarterly progress meeting. Each of our labs shared "core beliefs" and we demoed a very exciting project that we can&#39;t quite reveal yet, but let&#39;s just <em>say Viget</em> has something very cool in the works.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697068942/in/set-72157633373948453/" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8534/8697068942_83a36383eb_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	When the clock struck 5, it was time to party. We started with drinks and appetizers on the deck.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697067482/in/set-72157633373948453/" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8264/8697067482_a150d34002_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	Brave campers pitched their tents before the sun set behind the mountains.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8698160927/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8552/8698160927_932e003108_o.gif" /></a></p>
<p>
	And before we knew it, the lodge was transformed into a cozy dining room.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697067346/in/set-72157633373948453/" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8121/8697067346_4a4b8ceac8_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	Dinner was delicious, but slightly overshadowed by silly straws, tattoos, and the <a href="http://www.flickr.com/photos/viget/sets/72157633374292001/with/8697205520/" target="_blank">photo booth</a>.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697067316/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8262/8697067316_7243708456_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697067096/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8261/8697067096_c4f3881a92_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697066984/in/set-72157633373948453/" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8406/8697066984_dfa972125e_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	We were thrilled to mark the 5 year anniversaries of five of our teammates: <a href="http://viget.com/about/team/deisinger" target="_blank">David</a>, <a href="http://viget.com/about/team/blandau" target="_blank">Brian</a>, <a href="http://viget.com/about/team/mwagner" target="_blank">Mindy</a>, <a href="http://viget.com/about/team/oshifflett" target="_blank">Owen</a>, and <a href="http://viget.com/about/team/tosborne" target="_blank">Tom</a>,&nbsp;who all started working at Viget in 2008.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697201688/in/set-72157633374292001/" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8118/8697201688_587c7f0d25_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	As always, the <a href="http://www.flickr.com/photos/viget/8695943627/in/set-72157633373948453" target="_blank">Vigetry</a> <a href="http://www.flickr.com/photos/viget/8695940333/in/set-72157633373948453/" target="_blank">competition</a> <a href="http://www.flickr.com/photos/viget/8697060374/in/set-72157633373948453/" target="_blank">was</a> <a href="http://www.flickr.com/photos/viget/8697063922/in/set-72157633373948453" target="_blank">fierce</a>, especially this year since we raised the stakes.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697064188/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8540/8697064188_441645017c_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	As night fell we gathered around the bonfire, sang songs, and roasted marshmallows.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697058190/in/set-72157633373948453/" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8539/8697058190_13821d15a0_c.jpg" style="width: 800px; height: 230px;" /></a></p>
<p>
	The <a href="http://www.flickr.com/photos/viget/8695937851/in/set-72157633373948453" target="_blank">morning</a> came quickly and the air was <a href="http://www.flickr.com/photos/viget/8695937491/in/set-72157633373948453" target="_blank">brisk</a>, but quickly warmed up just in time for a hawk show-and-tell from local falconer, <a href="http://www.dailyprogress.com/news/local-falconers-train-with-hawkish-devotion/article_6e1d7f6c-9429-11e2-9bef-001a4bcf6878.html" target="_blank">Kevin Markey</a>.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8695934667/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8536/8695934667_4b7caeb23f_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	It wouldn&#39;t be a true camping trip without learning how to live and survive in the wild. So we had&nbsp;<a href="http://www.livingearthva.com/" target="_blank">The Living Earth School</a>&nbsp;come teach us how to <a href="http://www.flickr.com/photos/viget/8697054030/in/set-72157633373948453" target="_blank">make a fire using a bowdrill</a>, <a href="http://www.flickr.com/photos/viget/8695935047/in/set-72157633373948453" target="_blank">find edible plants in the wild</a>, <a href="http://www.flickr.com/photos/viget/8697052728/in/set-72157633373948453" target="_blank">build a shelter from debris</a>, and <a href="http://www.flickr.com/photos/viget/8697052000/in/set-72157633373948453" target="_blank">shoot a bow-n-arrow at a target</a>.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697055422/in/set-72157633373948453" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8401/8697055422_b078608ce3_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	A huge "thank you" to these guys for letting us celebrate 13 years of Viget.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/8697206556/in/set-72157633374292001" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8398/8697206556_f71ed22d95_c.jpg" style="width: 800px; height: 534px;" /></a><a href="http://www.flickr.com/photos/viget/8696068109/in/set-72157633374292001" target="_blank"><img alt="" src="http://farm9.staticflickr.com/8546/8696068109_3cc74c367e_c.jpg" style="width: 800px; height: 534px;" /></a></p>
<p>
	But more importantly, for creating a company where <a href="http://www.flickr.com/photos/viget/8696082827/in/set-72157633374292001" target="_blank">this</a>, <a href="http://www.flickr.com/photos/viget/8697205520/in/set-72157633374292001" target="_blank">this</a>, and <a href="http://www.flickr.com/photos/viget/8697192360/in/set-72157633374292001" target="_blank">this</a> are the norm.</p>

					
				]]></description>
			</item>
		
			<item>
				<title>JavaScript Execution Patterns for Non-Web Apps</title>
				
					<link>http://viget.com/extend/javascript-execution-patterns-for-non-web-apps</link>
					<guid isPermalink="false">http://viget.com/extend/javascript-execution-patterns-for-non-web-apps#When:13:29</guid>
				
				<pubDate>Tue, 30 Apr 2013 13:29 GMT</pubDate>
				<dc:creator>Trevor Davis</dc:creator>
				<dc:subject>Extend</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	A big challege with sites utilizing JavaScript is determining which JS should be executed on each page. Here are some approaches to doing this, along with my preferred method. While libraries like <a href="http://backbonejs.org/">Backbone</a> and <a href="http://emberjs.com/">Ember</a>&nbsp;have ways of executing JavaScript, this article will mainly focus on executing JavaScript for <strong>web sites, not web apps</strong>. So I&#39;m talking about more marketing style sites instead of applications. An example would be this very site versus something like Gmail.</p>

						<p>
	For these examples, I&#39;m assuming the following:</p>
<ul>
	<li>
		jQuery is being used on the site</li>
	<li>
		All of the JS for the site is concatenated into a single file and loaded on every page.</li>
</ul>
<h2>
	Everything in document.ready</h2>
<p>
	Before I go into preferred methods, I figured that it makes sense to talk about what you shouldn&#39;t do. This is how I used to do it when I first learned how to use jQuery, and I still see some people doing this today.</p>
<pre>
$(document).ready(function() {&#10;&#9;$(&#39;.tabs&#39;).tabs();&#10;&#9;&#10;&#9;$(&#39;.carousel&#39;).carousel();&#10;&#9;&#10;&#9;$(&#39;.slider&#39;).slider();&#10;});</pre>
<p>
	<img alt="NO" src="http://media.giphy.com/media/vJuQAOM5EKGNa/original.gif" /></p>
<p>
	Just don&#39;t do this. Even though jQuery fails silently, there is no reason to just throw stuff at the DOM and hope it sticks. Come up with a plan to execute only the JS that you need for each page.</p>
<h2>
	Dom Based Routing</h2>
<p>
	Paul Irish initially talked about <a href="http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/">this technique</a> in 2009. The idea is to use the id and class attributes on the body element to determine which JavaScript should be fired.</p>
<p>
	Let&#39;s pretend that your body element looks like this:</p>
<pre>
&lt;body class="shopping" id="cart"&gt;</pre>
<p>
	And you have some JS that looks like this:</p>
<pre>
SITE = {&#10;&#9;common: {&#10;&#9;&#9;init: function(){ ... },&#10;&#9;&#9;finalize: function(){ ... }&#10;&#9;},&#10;&#9;shopping: {&#10;&#9;&#9;init: function(){ ... },&#10;&#9;&#9;cart: function(){ ... },&#10;&#9;&#9;category: function(){ ... }&#10;&#9;}&#10;};</pre>
<p>
	The execution code is set up so that it calls the following methods:</p>
<pre>
SITE.common.init()&#10;SITE.shopping.init()&#10;SITE.shopping.cart()&#10;SITE.common.finalize()</pre>
<h2>
	Garber-Irish Implementation</h2>
<p>
	<a href="http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution">This technique</a> came out of my coworker, <a href="http://viget.com/about/team/jgarber">Jason Garber</a>, working on a Rails project and had a desire for a little more structure. The idea is to use the Rails controller and action to execute specific JavaScript.</p>
<p>
	For example, on the <strong>users show</strong> page, the body element would look like this:</p>
<pre>
&lt;body data-controller="users" data-action="show"&gt;</pre>
<p>
	So you create objects based on controllers with a method for the action. The JavaScript would look like this:</p>
<pre>
SITE = {&#10;&#9;common: {&#10;&#9;&#9;init: function() {}&#10;&#9;},&#10; &#10;&#9;users: {&#10;&#9;&#9;init: function() {},&#10;&#9;&#9;index: function() {},&#10;&#9;&#9;show: function() {}&#10;&#9;}&#10;};</pre>
<p>
	The execution code is set up to call the following methods:</p>
<pre>
SITE.common.init();&#10;SITE.users.init();&#10;SITE.users.show();</pre>
<p>
	This pattern has worked great for a number of sites, and I&#39;ve even used the pattern for non-Rails projects. But, as we have continued to build more responsive and modular sites that are more system-based instead of page-based, the pattern has become less and less ideal.</p>
<h2>
	Feature-Based Execution</h2>
<p>
	This technique takes a feature based approach instead of a page specific approach. The idea is to break each feature out into a separate object, and then add the features that you want to execute as an attribute on the body. Here is an example of what our body element would look like:</p>
<pre>
&lt;body data-features="timeline tabs filters modal"&gt;</pre>
<p>
	Here is how we have each of the features broken out into separate objects:</p>
<pre>
SITE.features = {&#10;&#9;filters: {&#10;&#9;&#9;init: function() {}&#10;&#9;},&#10;&#10;&#9;modal: {&#10;&#9;&#9;init: function() {}&#10;&#9;},&#10;&#10;&#9;tabs: {&#10;&#9;&#9;init: function() {}&#10;&#9;},&#10;&#10;&#9;timeline: {&#10;&#9;&#9;init: function() {}&#10;&#9;}&#9;&#10;};</pre>
<p>
	Then, I typically add an init method onto our SITE.features object to initialize all of the feature based execution:</p>
<pre>
SITE.features = {&#10;&#9;init: function() {&#10;&#9;&#9;var features = $(&#39;body&#39;).data(&#39;features&#39;);&#10;&#9;&#9;var featuresArray = [];&#10;&nbsp;&#10;&#9;&#9;if(features) {&#10;&#9;&#9;&#9;featuresArray = features.split(&#39; &#39;);&#10;&nbsp;&#10;&#9;&#9;&#9;for(var x = 0, length = featuresArray.length; x &lt; length; x++) {&#10;&#9;&#9;&#9;&#9;var func = featuresArray[x];&#10;&nbsp;&#10;&#9;&#9;&#9;&#9;if(this[func] &amp;&amp; typeof this[func].init === &#39;function&#39;) {&#10;&#9;&#9;&#9;&#9;&#9;this[func].init();&#10;&#9;&#9;&#9;&#9;}&#10;&#9;&#9;&#9;}&#10;&#9;&#9;}&#10;&#9;}&#10;};</pre>
<p>
	<a href="https://gist.github.com/davist11/738c2dfb248427904d07">View as Gist</a></p>
<p>
	So when we call <strong>SITE.features.init()</strong> on document load, we grab the data attribute off of the body, and execute each feature. It would execute the following methods:</p>
<pre>
SITE.features.timeline.init()&#10;SITE.features.tabs.init()&#10;SITE.features.filters.init()&#10;SITE.features.modal.init()</pre>
<h2>
	Feature-Based Execution + Script Loader</h2>
<p>
	An idea that I have been playing with, but haven&#39;t implemented yet on a site, is to use a script loader to load features for the page instead of including them in a single concatenated file. Here is what the modified <strong>SITE.features.init()</strong> method looks like using the <a href="http://yepnopejs.com/">yepnope script loader</a>:</p>
<pre>
SITE.features = {&#10;&#9;init: function() {&#10;&#9;&#9;var features = $(&#39;body&#39;).data(&#39;features&#39;);&#10;&#9;&#9;var featuresArray = [];&#10;&nbsp;&#10;&#9;&#9;if (features) {&#10;&#9;&#9;&#9;featuresArray = features.split(&#39; &#39;);&#10;&nbsp;&#10;&#9;&#9;&#9;for(var x = 0, length = featuresArray.length; x &lt; length; x++) {&#10;&#9;&#9;&#9;&#9;var func = featuresArray[x];&#10;&nbsp;&#10;&#9;&#9;&#9;&#9;yepnope([{&#10;&#9;&#9;&#9;&#9;&#9;load: &#39;scripts/features/&#39; + func + &#39;.js&#39;,&#10;&#9;&#9;&#9;&#9;&#9;complete: function () {&#10;&#9;&#9;&#9;&#9;&#9;&#9;if(this[func] &amp;&amp; typeof this[func].init === &#39;function&#39;) {&#10;&#9;&#9;&#9;&#9;&#9;&#9;&#9;this[func].init();&#10;&#9;&#9;&#9;&#9;&#9;&#9;}&#10;&#9;&#9;&#9;&#9;&#9;}&#10;&#9;&#9;&#9;&#9;}]);&#10;&#9;&#9;&#9;}&#10;&#9;&#9;}&#10;&#9;}&#10;};</pre>
<p>
	<a href="https://gist.github.com/davist11/7a26d71bac8e1a7dc076">View as Gist</a></p>
<h2>
	jQuery Meetup</h2>
<p>
	I recently had the opportunity to give a presentation on this topic, along with jQuery plugin development (go to slide 72 if you want to skip the jQuery plugin development piece) at the <a href="http://www.meetup.com/DC-jQuery-Users-Group/events/109918942/">DC jQuery Meetup</a>.</p>
<script async class="speakerdeck-embed" data-id="80fa54c08ac1013041e5123139283542" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
<h2>
	What Did We Learn?</h2>
<p>
	Don&rsquo;t just haphazardly fire a bunch of JS functions that may or may not be used. Come up with a pattern for triggering JS on each page that makes sense for your site.</p>
<p>
	So what methods have you used for executing JavaScript on sites?</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Boulder Startup Week 2013: How Startups Get To Great Design - May 17th</title>
				
					<link>http://viget.com/flourish/boulder-startup-week-2013-how-startups-get-to-great-design-may-17th</link>
					<guid isPermalink="false">http://viget.com/flourish/boulder-startup-week-2013-how-startups-get-to-great-design-may-17th#When:20:22</guid>
				
				<pubDate>Mon, 29 Apr 2013 20:22 GMT</pubDate>
				<dc:creator>Jason Sperling</dc:creator>
				<dc:subject>Flourish</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	<a href="http://www.eventbrite.com/event/6250006939"><img alt="" src="http://viget.com/uploads/image/blog/bsw-square.png" style="height: 745px; width: 730px; " /></a></p>
<p>
	In just a couple of weeks, Boulder will host <a href="http://boulderstartupweek.com/boulder-startup-week-may-15th-19th/" target="_blank">Boulder Startup Week 2013 (#BSW13)</a>. The annual 5-day event keeps getting better with more and more participation from local businesses all coming together to celebrate the awesome startup culture of Boulder.</p>
<p>
	Last year, we showed our support by creating and hosting an event called <a href="http://viget.com/flourish/boulder-startup-week-2012-may-16th-20th">Startups + Great UX = Great Success</a>. We were joined by folks from around the world for an afternoon of fun and insightful conversation. This year, we&#39;re doing it again but changing the focus a bit. &nbsp;</p>
<p>
	Here are the details...</p>

						<h2>
	<a href="http://www.eventbrite.com/event/6250006939" target="_blank">How Startups Get To Great Design</a></h2>
<p>
	Startups are all about build, build, build. But we know users love refined design. How do you find time for design when you&rsquo;re building nonstop? We&rsquo;ll hear from a panel of talented designers working inside local startups and agencies (<a href="https://www.mocavo.com/">Mocavo</a>, <a href="http://www.birdbox.com/">Birdbox</a>, <a href="http://www.sliceoflime.com/">Slice of Lime</a>, and <a href="http://viget.com/">Viget</a>) who will share their experiences helping tech startups get to great design. Prior to a moderated Q&amp;A session, four panelists will briefly share their experiences and work.</p>
<p>
	<a href="http://www.flickr.com/photos/viget/sets/72157629785981916/">Last year&#39;s event</a>&nbsp;was a huge success and we hope this year is even better. <a href="http://viget.com/about/team/jfox">Jackson Fox</a>, Senior UX Designer, will be the event moderator. Among the four panelists will be our own designer, <a href="http://viget.com/about/team/bculbreth">Blair Culbreth</a>. If you&#39;re interested in attending the event, please visit the <a href="http://www.eventbrite.com/event/6250006939">Eventbrite page</a> for more information and to register.</p>
<p>
	Viget believes strongly in being involved with our local communities and supporting the growth and development of local talent. If you&#39;re local to one our offices and have an idea for how we might collaborate, please feel free to reach out to us at info@viget.com. If you&#39;re in Boulder (or coming to town for Startup Week), we hope to see you on the 17th at 2pm!</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Project Management and Embracing Imperfection</title>
				
					<link>http://viget.com/advance/project-management-and-embracing-imperfection</link>
					<guid isPermalink="false">http://viget.com/advance/project-management-and-embracing-imperfection#When:15:50</guid>
				
				<pubDate>Mon, 29 Apr 2013 15:50 GMT</pubDate>
				<dc:creator>Kevin Powers</dc:creator>
				<dc:subject>Advance</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	As project managers (PMs), we&rsquo;re conditioned (often early in our careers) to exercise control over a long list of variables in order to drive a project to successful completion. It&rsquo;s commonplace to hear specificity like, &ldquo;designing this comp should take 4 hours; we&rsquo;ll get client feedback in 2 days; and we have to deliver the 6 comps described in the contract.&rdquo; The prevailing view is that project management entails perfection -- and that perfection requires to-the-letter execution. The reality, however, is very different. Projects are made up of people and require creative problem solving. And since people aren&rsquo;t perfect and creativity is often a complex exercise, it shouldn&rsquo;t come as a surprise that projects are therefore full of imperfections. While many of us come to this realization eventually, we need to do so more quickly. Actively embracing project management as an imperfect science will help us be better at it. As the <a href="http://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good" target="_blank">saying</a> goes, <strong>&ldquo;perfect is the enemy of good</strong>.&rdquo;</p>

						<p>
	Viewing project management through this lens doesn&rsquo;t mean throwing out the contract, foregoing estimates upfront, or simply winging it. A good portion of any project can be driven quite precisely. For instance, commitment from your team and client is still something you need to establish. But know that things can and often do turn out differently. It&rsquo;s disappointing when such inevitable changes make project managers feel stressed and frustrated. Prepare for the imperfect, and spend your energy (and time) worrying about those influences and disruptions that truly matter.</p>
<p>
	Risk management is a term that comes to mind within this subject. Sure, you can document risks upfront, devise mitigation strategies, and cuddle up with that plan believing you&rsquo;re secure and prepared. That approach, however, is just another form of management; and oftentimes, micro-management, which is even worse. Successful project management is not just about being prepared, it&rsquo;s about being adaptable.</p>
<p>
	At Viget, we have a number of tactics baked into our approach that help us embrace the inevitable project imperfections. Some include:</p>
<ol>
	<li>
		<strong>Managing against a lower budget cap:</strong> For every project, we establish a &ldquo;buffer&rdquo; (typically 10-20% under the contractual cap), which allows us to appropriately allocate more time in areas of the project as needed, as our understanding evolves.
		<ul>
			<li>
				<em>How does this help?</em> If we find ourselves revising comps more times than originally intended, the overall budget isn&rsquo;t suddenly blown.</li>
		</ul>
	</li>
	<li>
		<strong>Booking team members 80% on a primary project: </strong>When a new project is underway, the reflex among most PMs is to make sure the designer, for example, is focused solely on that one project. But that&rsquo;s risky. What happens if that designer is needed for another project they worked on previously; or an emerging new business opportunity requires their attention? At Viget, team members have headroom week-to-week to tend to emergent or smaller tasks.
		<ul>
			<li>
				<em>How does this help?</em> If <a href="http://viget.com/about/team/emunoz">Elliott</a>&nbsp;is&nbsp;heads down on <a href="http://viget.com/work/wwf">WWF</a> design and suddenly gets pulled into a sales pitch, that time spent outside of his primary project has already been accounted for and shouldn&rsquo;t disrupt the timeline or client expectations. And if no such disruption surfaces that week, Elliott&rsquo;s free to get ahead on his primary project. Planning for the unplanned means your project and timeline can productively adapt.</li>
		</ul>
	</li>
	<li>
		<strong>Revising the task order at the project start:</strong> At Viget, we keep our contracts fairly high-level since we understand that only so much can be known during the sales process. Does the client <em>really</em> need 12 user flows? It&rsquo;s hard to tell at that early stage. After we kick off a project, one of our first deliverables is typically the Project Charter, which refines details included in our contracts and more accurately sets the stage (and client expectations) for the work ahead. To be sure, this doesn&rsquo;t mean we&rsquo;re pulling a bait-and-switch, but instead establishing a more accurate plan based on client input.
		<ul>
			<li>
				<em>How does this help?</em> To do our best work, it&rsquo;s critical to have meaningful input from the entire team and the client. While we do everything possible to include that as part of the early sales process, it&rsquo;s not always feasible. Your deliverables and approach will be much more successful if you have the latitude to refine them (within budget and other core contractual bounds) following focused kickoff and project conversations.</li>
		</ul>
	</li>
</ol>
<p>
	I think most PMs understand this inherent variability and that a project usually finishes in a different place than originally intended. What I don&rsquo;t think most in our field embrace and admit is that <strong>this is OK</strong>. We need to acknowledge that projects will always be imperfect in one way or another, and focus our energy and attention on being flexible and adaptable within this unpredictable landscape.</p>

					
				]]></description>
			</item>
		
			<item>
				<title>Why I Chose to Learn C</title>
				
					<link>http://viget.com/extend/why-i-chose-to-learn-c</link>
					<guid isPermalink="false">http://viget.com/extend/why-i-chose-to-learn-c#When:16:05</guid>
				
				<pubDate>Fri, 29 Mar 2013 16:05 GMT</pubDate>
				<dc:creator>Patrick Reagan</dc:creator>
				<dc:subject>Extend</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	This past fall, a group of us set out to (re-)learn the C programming language using Zed&#39;s <a href="http://c.learncodethehardway.org/book/">Learn C the Hard Way</a> as our primary resource. In the age of high-level languages like Ruby and JavaScript, it may seem a bit strange to take such a "step back" when it&#39;s been 10+ years since I have had any significant experience using the language. So why do it?</p>
<p>
	I wanted a new challenge.</p>

						<p>
	As an experienced programmer, the basics of the language were unsurprising (as expected). Variables, conditionals, and loops presented no surprises as I&#39;ve seen these concepts time and time again in other languages. I will admit that understanding pointers was initially as confusing as when I first encountered them more than 15 years ago. This confusion reinforced the fact that C is not a language for the faint of heart -- there are a number of challenges that a programmer has to overcome when working in a lower-level language.</p>
<p>
	These challenges weren&#39;t without their benefits. During our course of study, we became proficient with a number of language features and related tools:</p>
<ul>
	<li>
		<strong>Memory allocation</strong> &mdash; Once I moved past writing trivial programs, heap allocation became a necessity. Not only did I learn how to use <tt>malloc</tt> and <tt>free</tt> appropriately, but also when to use <tt>realloc</tt> to create dynamic data structures and <tt>calloc</tt> to create robust allocations for storing string data.</li>
	<li>
		<strong>Makefiles</strong> &mdash; Zed&#39;s introduction to <tt>make</tt> and subsequent discussion of its advanced features really helped to de-mystify the tool for me. The <a href="http://www.gnu.org/software/make/manual/html_node/index.html">additional documentation</a> and <a href="http://bost.ocks.org/mike/make/">alternate applications</a> helped me understand its utility for building C programs and other automated tasks.</li>
	<li>
		<strong>Function pointers</strong> &mdash; It was interesting to me to see that such a low-level language contained functional programming concepts. I found function pointers a useful refactoring technique when dealing with different collections of structs. For example, when sorting an array of integers or strings, I was able to use functions with the same signature and behavior but with different implementations.</li>
	<li>
		<strong>C pre-processor</strong> &mdash; From the beginning, Zed made heavy use of the C pre-processor to create macros for debugging, iterating, and otherwise simplifying the code that I needed to write. After gaining more experience with the language, I learned when to choose a pre-processor macro over a subroutine (or vice versa) to refactor and improve readability of the code.</li>
	<li>
		<strong>Variable argument functions</strong> &mdash; Surprisingly, this language feature came in handy more often than I thought. Internally, this is how the <tt>printf</tt> family of functions is implemented. I used it to create functions like <tt>max_length(char *s1, char *s2, ...)</tt> to get the overall maximum length of <strong><tt>n</tt></strong> number of strings, and <tt>array_push(Array *array, ...)</tt>` to add elements to an array based on its underlying storage type.</li>
	<li>
		<strong><a href="http://valgrind.org/">Valgrind</a></strong> &mdash; I have no idea how you would create a stable program without this tool. Time and time again, I would write what I <em>thought</em> was robust code, but valgrind would call me out on my mistakes. Whether it was a simple memory leak or an off-by-one error when accessing a segment of memory, I was able to quickly diagnose those mistakes and correct them. Without valgrind, these errors could easily slip by undetected.</li>
</ul>
<p>
	Overall, the challenges presented with C really forced me to think deeply about how I organized my code and interacted with the machine. Understanding that balance between bare-metal performance and human understandability definitely revealed the language&#39;s sweet spot. Even in an industry where older technologies are constantly rendered obsolete, that balance is the reason developers of major modern software projects continue to choose C for their implementation language.</p>
<p>
	If you&#39;re interested in (re-)learning the language yourself, I recommend LCTHW as a good starting resource. Working through the exercises as a group helps keep everyone motivated and generates some <a href="https://github.com/vigetlabs/bode">fun</a> <a href="https://github.com/reagent/http">ideas</a> for <a href="https://github.com/reagent/encode">other</a> <a href="https://github.com/reagent/buffer">programs</a> to write.</p>

					
				]]></description>
			</item>
		
			<item>
				<title>SXSW, Part of the Process for Getting Enlightened and Energized</title>
				
					<link>http://viget.com/inspire/sxsw-part-of-the-process-for-getting-enlightened-and-energized</link>
					<guid isPermalink="false">http://viget.com/inspire/sxsw-part-of-the-process-for-getting-enlightened-and-energized#When:17:37</guid>
				
				<pubDate>Thu, 28 Mar 2013 17:37 GMT</pubDate>
				<dc:creator>Blair Culbreth</dc:creator>
				<dc:subject>Inspire</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	What I find lovely, both times I&#39;ve been to SXSW Interactive, about a conference so large and diverse is seeing the connections between wildly different sessions. This year one of the overwhelming themes was process. What I first heard in a panel about web typography was repeated in a panel that covered the early days of NASA. The same point made in a responsive design panel was echoed in a discussion about wearable devices. And so on...</p>

						<p>
	So processes! How we learn, how we teach, how we advance our industry and ourselves, why something works or doesn&#39;t work, what we&#39;re aiming for and where we are in the meantime. There was much introspection and celebrating of the journey, more so than the destination this year. The panel for <a href="http://100yss.org">100 Year Starship </a>beautifully summed up the merit of examining how we&#39;re all working, growing, and how we&#39;ll carry on in the future:</p>
<blockquote>
	<p>
		Pursuing an extraordinary tomorrow creates a better today.</p>
</blockquote>
<p>
	Here are some ways that pursuit was illustrated at SXSW this year:</p>
<p>
	<strong>Of course, <a href="http://schedule.sxsw.com/2013/events/event_IAP137">responsive</a> <a href="http://schedule.sxsw.com/2013/events/event_IAP5014">design</a> was a big topic this year.</strong> The consensus was that no one has the best process for creating a responsive site nailed down just yet. Which is a good thing! We now have an opportunity for designers and developers to rethink how they collaborate and how to create responsive sites that use responsive to its full, creative potential.</p>
<p>
	<strong>Always look for ways to grow.</strong> Here&#39;s maybe my favorite thing I learned this year: <a href="http://michaelgr.com/2007/04/15/fixed-mindset-vs-growth-mindset-which-one-are-you/">a person has either a fixed mindset or a growth mindset</a>. Those with a fixed mindset see their intelligence, skills, and abilities as built-in and static. Those with a growth mindset see them as things that can be developed with hard work and learning. As a result, the work of those with a fixed mindset is static. They aren&#39;t as interested in alternative points of view or negative feedback. Meanwhile, those with a growth mindset are sponges for criticism; they want to know how they can do better and how others before them have succeeded. Seek honest feedback and perspectives that challenge your own, not just praise and reassurance, and your creativity and quality of work will grow.</p>
<p>
	<strong>Study and share processes, not just finished products.</strong> Whether it&#39;s a site, app, or a planet outside our galaxy, we can learn so much more from their growth than from just studying their final state. Every project has a story full of successes, failures, and breakthroughs that are valuable. Show a man a nice site, and he learns how to create an inferior, derivative site. Teach a man how a nice site was made, and he learns how to create nice work of his own.</p>
<p>
	<strong>Embrace your silly and side projects; you never know where they&#39;ll lead.</strong> Whether it was <a href="http://sciencehackday.com">science hack days</a> or just <a href="http://tattly.com/pages/about">doing something about one of life&#39;s little annoyances</a>, silly side projects were stars this year. Why do them? Even if it&#39;s a weekend-long project that goes nowhere, it&#39;s a chance to play and try new things you wouldn&#39;t get to otherwise. Best case scenario: your bit of fun ends up being the first step in a process that ends with <a href="http://sciencehackday.com/#/hacks/Particle_Windchime">helping scientists detect cosmic rays in a cloud chamber</a>.&nbsp;</p>
<p>
	The space exploration sessions were not only a highlight of this year&#39;s lineup, but also a fitting reminder why it&#39;s important to view our work and processes as works in progress that we&#39;re always rethinking. Space exploration has always meant pushing our technology to its limits to reach far beyond our planet. And the further we&#39;ve reached out, the more we&#39;ve seen there are no limitations. There is no final end-point to the universe, only another journey that take us further out than our last one. Similarly, there is no end-point in our field. There&#39;s always something to learn, a problem to solve, and a tool to use today that didn&#39;t exist yesterday. Just doing what worked yesterday is no fun. Pursue an extraordinary tomorrow, and you&#39;ll be better for it today.&nbsp;</p>
<h1>
	The Process of Being at SXSW</h1>
<p>
	To visually bring you a piece of the SXSW experience, I could attach blurry photos of LeVar Burton (<a href="http://instagram.com/p/WvP9taHnyn/">but I already did that</a>.) Instead, here are some hopefully more informative visuals. First up, everyone should know my pain when it came to choosing between three or four sessions all taking place at the same time:</p>
<p>
	<a href="http://viget.com/uploads/image/blog/sxsw-flowchart.png"><img alt="" src="http://viget.com/uploads/image/blog/sxsw-flowchart.png" style="width: 800px; height: 2600px; " /></a></p>
<p>
	Wearable and self-tracking devices were a popular topic this year. Formally, this meant several exciting sessions. Informally, this meant I wore my FitBit all week and kept announcing to everyone how far we&#39;d walked, whether they wanted to know or not.</p>
<p>
	<a href="http://viget.com/uploads/image/blog/sxsw-distance.png"><img alt="" src="http://viget.com/uploads/image/blog/sxsw-distance.png" style="width: 800px; height: 909px; " /></a></p>
<p>
	And just where were we doing all this walking to? Well...</p>
<p>
	<a href="http://viget.com/uploads/image/blog/sxsw-map.png"><img alt="" src="http://viget.com/uploads/image/blog/sxsw-map.png" style="width: 800px; height: 939px; " /></a></p>
<h1>
	Your SXSW Homework</h1>
<p>
	Should you choose to accept it, here&#39;s a list of assignments as varied as the sessions themselves.</p>
<ul>
	<li>
		Do something fun and silly with responsive or adaptive design. Prove the complaints that responsive is just boring box rearranging wrong.</li>
	<li>
		<a href="https://www.stanford.edu/dept/psychology/cgi-bin/drupalm/system/files/Intelligence%20Praise%20Can%20Undermine%20Motivation%20and%20Performance.pdf">Read Carol Dweck&#39;s original study about growth and fixed mindsets.</a>&nbsp;Or at least get the gist of it from <a href="http://www.slideshare.net/metavintage/why-your-brain-needs-negative-feedback-niki-weber-sxsw-interactive-2013">the slides for the session<em> Why Your Brain Needs Negative Feedback</em></a>.</li>
	<li>
		Create something classy with <a href="http://www.clicktorelease.com/code/css3dclouds/">CSS Clouds</a>.</li>
	<li>
		If you run, jog, walk, or hike, play <a href="https://www.zombiesrungame.com"><em>Zombies, Run!</em></a> and experience one of the best examples around of an experience that marries narrative and technology.</li>
	<li>
		Look at all the awesome stuff we can do with <a href="http://clagnut.com/sandbox/css3/">typography on the web</a>!</li>
	<li>
		<a href="http://movies.netflix.com/WiMovie/When_We_Left_Earth_The_NASA_Missions/70218722?locale=en-US">Watch <em>When We Left Earth: The NASA Missions</em> on Netflix Streaming</a>. Because it&#39;s beautiful and inspiring.</li>
</ul>

					
				]]></description>
			</item>
		
			<item>
				<title>An Unlikely Hanging Quote Mark</title>
				
					<link>http://viget.com/inspire/an-unlikely-hanging-quote-mark</link>
					<guid isPermalink="false">http://viget.com/inspire/an-unlikely-hanging-quote-mark#When:13:42</guid>
				
				<pubDate>Wed, 27 Mar 2013 13:42 GMT</pubDate>
				<dc:creator>Jeremy Frank</dc:creator>
				<dc:subject>Inspire</dc:subject>
				<description><![CDATA[ 
			    
						<p>
	On a recent project, the blockquote style that the designer put together seemed to be using a different typeface for the hanging quote mark, than for the text. The text below is set in <a href="http://www.latofonts.com/">Lato</a> and you can clearly see the difference in the comp version on the left and the Lato quote mark on the right.</p>
<p>
	<img alt="" src="http://viget.com/uploads/image/blog/quotes.png" style="width: 740px; height: 200px;" /></p>

						<h2>
	Don&rsquo;t Waste Time, Just Ask The Designer</h2>
<p>
	After spending some time unsuccessfully trying to find a typeface match for the quote mark, I asked the designer. It turns out that the custom quote mark IS set in Lato. However, it&rsquo;s simply two commas doubled up next to each other and rotated 180&deg;. We actually can do this in CSS by using a few different tricks, but first, the base styling.</p>
<h2>
	Base Styling + Rotation</h2>
<p>
	Writing the CSS to style and position a hanging quote mark is pretty straightforward. Nothing too complicated here, but note the content and transform properties below (vendor prefixes omitted for brevity).</p>
<pre>
blockquote p {&#10;  font-size: 24px;&#10;  line-height: 1.5;&#10;  font-family: LatoItalic, sans-serif;&#10;  margin: 0 0 .7em;&#10;}&#10;&#10;blockquote p:first-child:before {&#10;  content: &#39;,,&#39;;&#10;  display: block;&#10;  float: left;&#10;  font-size: 2.6em;&#10;  line-height: 1;&#10;  margin-left: -.6em;&#10;  transform: rotate(180deg);&#10;}&#10;</pre>
<p>
	Of course this won&rsquo;t work so well in browsers that don&rsquo;t support CSS transforms, but we can easily test for support using Modernizr, and provide a similar and acceptable fallback.</p>
<pre>
.no-csstransforms blockquote p:first-child:before {&#10;  content: &#39;&ldquo;&#39;;&#10;}&#10;</pre>
<p>
	And there we have it; unconventional custom hanging quote marks using commas, without resorting to using images, extra webfonts or custom icon fonts.</p>
<h2>
	Other Possibilities</h2>
<p>
	Using transforms on individual characters like this can magically make additional characters available for use, such as: rotating single and double &ldquo;angled&rdquo; quotation marks (&lsaquo;, &laquo;, &raquo;, &rsaquo;) 90&deg; to create up and down pointers. It&rsquo;s also quite possible that rotating stacked characters from :before and :after pseudo-elements, can produce some interesting iconography. However, with minor rendering inconsistencies among different platforms, browsers and typefaces, that level of complexity would warrant the use of an svg icon or a custom built icon font instead.</p>

					
				]]></description>
			</item>
		
	</channel>
</rss>
