<?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>Ben&#039;s blog and portfolio &#187; how-to</title>
	<atom:link href="http://benthinkin.net/tag/how-to/feed" rel="self" type="application/rss+xml" />
	<link>http://benthinkin.net</link>
	<description>Website design by Ben Gremillion</description>
	<lastBuildDate>Sat, 21 Jan 2012 20:10:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Using JavaScript to populate select lists through the ages</title>
		<link>http://benthinkin.net/articles/html-css/using-javascript-to-populate-select-year-lists</link>
		<comments>http://benthinkin.net/articles/html-css/using-javascript-to-populate-select-year-lists#comments</comments>
		<pubDate>Sun, 27 Nov 2011 04:36:30 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[customizing]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[problem preventing]]></category>

		<guid isPermaLink="false">http://benthinkin.local/?p=421</guid>
		<description><![CDATA[When two different clients had the same problem, I knew a bit of portable code would solve both. But would it work next year?]]></description>
			<content:encoded><![CDATA[<p>Not long ago, I had to count years twice in one week.</p>
<p>Two different clients had two different uses for days/months/years. One was to browse an archive, the other was to let users schedule an event. Both wanted it done quickly and neither wanted to pay for adding years after every New Year&#8217;s Eve party.</p>
<h2>Solution</h2>
<p>As part of my forward-thinking strategy &#8212; Preventing Problems is Good &#8212; I wrote a JavaScript function to automatically add years as necessary. Specifically, the code below creates <code>&lt;<span class="html-element">option</span>&gt;</code> elements with years in a given <code>&lt;<span class="html-element">select</span>&gt;</code>.</p>
<pre><code>function populate_years(<span class="label-3">min</span>,<span class="label-5">max</span>,<span class="label-8">target</span>){

	<span class="comment">// What year is it?</span>
	var d = <span class="label-1">new Date()</span>;
	var <span class="label-2">this_year</span> = <span class="label-1">d.getFullYear()</span>;

	<span class="comment">// Loop through the years.</span>
	for ( i=(<span class="label-2">this_year</span><span class="label-3">+min</span>); i&lt;(<span class="label-2">this_year</span><span class="label-5">+max</span>); <span class="label-4">i++</span>){
		$('#'+<span class="label-8">target</span>).<span class="label-6">append</span>('&lt;<span class="label-7">option</span> value="y'+<span class="label-4">i</span>+'"&#038;gt'+<span class="label-4">i</span>+'&#038;lt<span class="label-7">/option</span>&#038;gt');
	}
}</code></pre>
<h2>How it works</h2>
<ol>
<li>Extract the <span class="label-2">current year</span> from a <span class="label-1">JavaScript date object</span>.</li>
<li>Start at a <span class="label-3">certain number of years before</span> <span class="label-2">the current year</span> and <span class="label-4">count forward</span> until you reach a <span class="label-5">sufficiently distant future</span>.</li>
<li><span class="label-6">Add each year</span> as <span class="label-7">an HTML option element</span> to the <span class="label-8">given user interface widget</span>.</li>
</ol>
<h2>Portable code</h2>
<p>Whenever writing a function PHP, JavaScript, or jQuery (and handlers in AppleScript), I try to write &#8220;portable&#8221; code that I can reuse in different projects. Ideally, <em>portable code does not use global variables</em> because that ties the function to a given project. Likewise, functions should never directly display (echo, print, sprintf) anything to the screen. I can&#8217;t tell you how many times I&#8217;ve had to track down an errant space that killed some PHP include. Functions should take arguments, do something, and return results. End of story.</p>
<h2>Sample usage</h2>
<table>
<tr>
<th>Description</th>
<th>JS</th>
<th>HTML</th>
</tr>
<tr>
<td>This year through next year</td>
<td><code><span class="javascript-function">populate_years</span> ( 0, 1, 'someSelect' );</code></td>
<td><code>&lt;<span class="html-element">select</span> <span class="html-attribute">id</span>="someSelect"&gt;&lt;<span class="html-element">/select</span>&#038;gt</code></td>
</tr>
<tr>
<td>Octogenarians through the legal drinking age</td>
<td><code><span class="javascript-function">populate_years</span> ( -89, -18, 'year_range' );</code></td>
<td><code>&lt;<span class="javascript-function">select</span> <span class="javascript-attribute">id</span>="year_range"&gt;&lt;<span class="html-element">/select</span>&gt;</code></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/html-css/using-javascript-to-populate-select-year-lists/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS button recipe</title>
		<link>http://benthinkin.net/articles/html-css/css-button-recipe</link>
		<comments>http://benthinkin.net/articles/html-css/css-button-recipe#comments</comments>
		<pubDate>Tue, 08 Nov 2011 21:22:06 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[customizing]]></category>
		<category><![CDATA[gradients]]></category>
		<category><![CDATA[how-to]]></category>

		<guid isPermaLink="false">http://benthinkin.local/?p=395</guid>
		<description><![CDATA[Making clickable text stand out from non-clickable text has been a staple of the web since the web was called the mesh. How do you make a button look <em>tappable</em> &#8212; without graphics? By using CSS3.]]></description>
			<content:encoded><![CDATA[<style type="text/css">
.action-button {
	display: block;
	width: 120px;
	margin: auto;
	padding: 7px;
	text-align: center;
	color: #fff;
	font-size: 15px;
	font-family: 'hevetica neue',helvetica,arial,sans-serif;
	cursor: pointer;
	text-shadow: #145ec2 0 -1px 0;
	background: -webkit-gradient(
		linear, left bottom, left top,
		from(#347ee2), to(#86aceb),
		color-stop(0.5, #347ee2), /* Dark value */
		color-stop(0.5, #548fe5) /* Medium value */
	);
	-webkit-border-radius: 4px; /*  */
	-moz-border-radius: 4px; /*  */
	border-radius: 4px; /*  */</p>
<p>}
.action-button:active {
	background: -webkit-gradient(
		linear, left bottom, left top,
		from(#86aceb), to(#347ee2) /* Gradient colors, inverted. */
	);
	position: relative;
	top: 3px; /* Give it that "depressed button" look. */
}
</style>
<p class="action-button">Tap me</p>
<p>Here&#8217;s a quick style I wrote for creating buttons that look tappable.</p>
<pre><code>.action-button {
	display: block;
	<span class="label-1">width: 120px</span>;
	padding: 7px;
	text-align: center;
	color: #fff;
	font-size: 15px;
	font-family: 'hevetica neue',helvetica,arial,sans-serif;
	<span class="label-2">cursor: pointer</span>;
	text-shadow: <span class="label-3">#145ec2</span> 0 -1px 0;
	background: -webkit-gradient(
		linear, left bottom, left top,
		from(<span class="label-4">#347ee2</span>), to(<span class="label-5">#86aceb</span>),
		color-stop(0.5, <span class="label-4">#347ee2</span>), /* Dark value */
		color-stop(0.5, <span class="label-6">#548fe5</span>) /* Medium value */
	);
	<span class="label-7">-webkit-border-radius: 4px;</span> /*  */
	<span class="label-8">-moz-border-radius: 4px;</span> /*  */
	<span class="label-9">border-radius: 4px;</span> /*  */

}
.action-button:active {
	background: -webkit-gradient(
		linear, left bottom, left top,
		from(#86aceb), to(#347ee2) /* Gradient colors, inverted. */
	);
	position: relative;
	top: 3px; /* Give it that "depressed button" look. */
}</code></pre>
<h2>How it works</h2>
<ul>
<li><span class="label-1">Set the width</span> to whatever fits your requirements.</li>
<li><span class="label-2">For testing in a desktop browser</span>.</li>
<li><span class="label-3">Shadow color</span> should be a shade darker than your <span class="label-4">darkest gradient</span>.</li>
<li><span class="label-5">Lightest color</span>, in this case, pale blue.</li>
<li><span class="label-6">Medium value</span> creates the illusion of a chrome-like reflection.</li>
<li><span class="label-7">For Webkit browsers</span> like Chrome and Safari.</li>
<li><span class="label-8">For Gecko browsers</span> like FireFox.</li>
<li><span class="label-9">For future browsers</span>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/html-css/css-button-recipe/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validate email with regex in PHP</title>
		<link>http://benthinkin.net/articles/code/validate-email-with-regex-in-php</link>
		<comments>http://benthinkin.net/articles/code/validate-email-with-regex-in-php#comments</comments>
		<pubDate>Tue, 27 Sep 2011 00:58:12 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[customizing]]></category>
		<category><![CDATA[how-to]]></category>

		<guid isPermaLink="false">http://benthinkin.local/?p=363</guid>
		<description><![CDATA[Did a user enter a valid email address, or just a bunch of letters and numbers? Learn how to check emails in PHP with this handy function.]]></description>
			<content:encoded><![CDATA[<p>An email address typically has two parts, divided by an at-mark, @. The first part is a &#8220;local name&#8221; which belongs to a person or entity. The second part, a domain name, describes the network and mail server.</p>
<p>Regular expression, or &#8220;regex,&#8221; is a means to seek patterns in a string of text. PHP has several regex functions that coders may use to see if a string fits certain conditions. In this example, we&#8217;ll see if a string fits the standards for a real email address.</p>
<pre><code>
function validate_email($address='',$regex=''){

	// A regular expression to check email validity.
	if ( !$regex ) {
		$regex = "<strong>^[a-z0-9-_\.]+(\.[a-z0-9-_\.]+)*@<br/>
			[a-z0-9-_\.]+(\.[a-z0-9-_\.]+)+$</strong>"
	}
	if ( $address ) {
		if (eregi($regex, $email)) {
			return true;
		}
	}
	// We don't need an "else" condition. If the
	// script gets this far, it's because $address
	// didn't exist or didn't fit the regular
	// expression in eregi().
	return false;
}
</code></pre>
<h2>From regex to English</h2>
<p>Here&#8217;s how it works:</p>
<pre><code><span class="label-1">^</span><span class="label-2">[a-z0-9-_\.]</span><span class="label-3">+</span>(<span class="label-4">\.</span><span class="label-2">[a-z0-9-_\.]</span><span class="label-3">+</span>)<span class="label-5">*</span><span class="label-8">@</span><br/>
<span class="label-2">[a-z0-9-_\.]</span><span class="label-3">+</span>(<span class="label-4">\.</span><span class="label-2">[a-z0-9-_\.]</span><span class="label-3">+</span>)<span class="label-6">+</span><span class="label-7">$</span></code></pre>
<ol>
<li><span class="label-1">Start with</span> <span class="label-3">at least one</span> <span class="label-2">letter, number, hyphen, dot or underscore</span>.</li>
<li>After one <span class="label-5">optional</span> <span class="label-4">dot</span>, look for <span class="label-5">one or more optional</span> <span class="label-2">letter, number, hyphen, dot or underscore</span>.</li>
<li>At this point, there should be an <span class="label-8">atmark</span> followed by <span class="label-3">at least one</span> <span class="label-2">letter, number, hyphen, dot or underscore</span>.</li>
<li>Valid email addresses should <span class="label-7">end with</span> a <span class="label-4">dot</span> that&#8217;s followed by <span class="label-3">at least one</span> <span class="label-2">letter, number, hyphen, dot or underscore</span>. There will be at least <span class="label-6">one set, maybe more</span> (like  &#8220;.something.com&#8221; rather than just &#8220;.com&#8221;).</li>
</ol>
<p>Bulletproof? No. But it covers most cases.</p>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/code/validate-email-with-regex-in-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cunning changes to Titanium iOS keyboards</title>
		<link>http://benthinkin.net/articles/code/titanium-ios-keyboards</link>
		<comments>http://benthinkin.net/articles/code/titanium-ios-keyboards#comments</comments>
		<pubDate>Thu, 01 Sep 2011 02:28:46 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[customizing]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://benthinkin.local/?p=301</guid>
		<description><![CDATA[How do you access different preset keyboard layouts for iPhones and iPads with Titanium? Refer to this visual properties list.]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript">
$(document).ready(function(){
	$('table img').click(function(){
		var new_value = $(this).parent().prev().text();
		new_value = new_value.trim();
		$('#keyboard-type').text(new_value).css('opacity','0.5').animate({opacity:1.0},500);
	});
});
</script></p>
<p>
	One benefit of soft keyboards is their ability to change on context. Email addresses, for example, need different characters composing emails.
</p>
<p>
	<a href="http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.UI-module"><span>Appcelerator Titanium has many ways</span></a> to choose different iOS keyboards by property:
</p>
<p>A typical Titanium text field might be written:</p>
<pre><code>var name_field = Titanium.UI.createTextField({
  height:35, top:40, left:20, width:280,
  borderStyle:Titanium.UI.INPUT_BORDERSTYLE_ROUNDED,
  keyboardType:Titanium.UI.<span class="label-1" id="keyboard-type">KEYBOARD_ASCII</span>,
  enableReturnKey:true,
  returnKeyType:Titanium.UI.RETURNKEY_DONE
});</code></pre>
<p>Click each sample below to put it in the sample code above.</p>
<table>
<tbody>
<tr>
<td style="padding-right:30px">
<p class="hidden">
				KEYBOARD_ASCII
			</p>
<p>			<img src="/content_resources/061-titanium-ios-keyboards/ascii-small.png" alt="ASCII keyboard" id="ti-keyboard-ascii" /></td>
<td style="padding-right:30px">
<p class="hidden">
				KEYBOARD_EMAIL
			</p>
<p>			<img src="/content_resources/061-titanium-ios-keyboards/email-small.png" alt="email keyboard" id="ti-keyboard-email" /></td>
<td>
<p class="hidden">
				KEYBOARD_URL
			</p>
<p>			<img src="/content_resources/061-titanium-ios-keyboards/url-small.png" alt="URL keyboard" id="ti-keyboard-url" /></td>
</tr>
<tr>
<td>
<p class="hidden">
				KEYBOARD_NUMBER_PAD
			</p>
<p>			<img src="/content_resources/061-titanium-ios-keyboards/number_pad-small.png" alt="number pad keyboard" id="ti-keyboard-numberpad" /></td>
<td>
<p class="hidden">
				KEYBOARD_NUMBERS_PUNCTUATION
			</p>
<p>			<img src="/content_resources/061-titanium-ios-keyboards/numbers_punctuation-small.png" alt="numbers and punctuation keyboard" id="ti-keyboard-numberspunctuation" /></td>
<td>
<p class="hidden">
				KEYBOARD_PHONE_PAD
			</p>
<p>			<img src="/content_resources/061-titanium-ios-keyboards/phone_pad-small.png" alt="phone pad keyboard" id="ti-keyboard-phonepad" /></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/code/titanium-ios-keyboards/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring Photoshop’s angle gradient tool</title>
		<link>http://benthinkin.net/articles/imagery/exploring-photoshop-angle-gradient-tool</link>
		<comments>http://benthinkin.net/articles/imagery/exploring-photoshop-angle-gradient-tool#comments</comments>
		<pubDate>Mon, 26 Jul 2010 16:28:46 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Imagery]]></category>
		<category><![CDATA[emergence]]></category>
		<category><![CDATA[gradients]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[WDD]]></category>

		<guid isPermaLink="false">http://benthinkin.net/?p=99</guid>
		<description><![CDATA[The angle gradient tool is an overlooked gem tucked away in Photoshop&#8217;s toolbar. Often passed over for its more popular sibling, the linear gradient tool, angle gradients create clockwise blends of color around the point a user clicks. The angle gradients create clockwise blends of color around the point a user clicks. Most people stop there. But when combined with other techniques and some creativity, the angled gradient has some surprising uses.]]></description>
			<content:encoded><![CDATA[<p>
	The angle gradient tool is an overlooked gem tucked away in Photoshop&#8217;s toolbar. Often passed over for its more popular sibling, the linear gradient tool, angle gradients create clockwise blends of color around the point a user clicks.
</p>
<p>
	The angle gradients create clockwise blends of color around the point a user clicks. Most people stop there. But when combined with other techniques and some creativity, the angled gradient has some surprising uses.
</p>
<p>
	<a href="http://www.webdesignerdepot.com/2010/07/exploring-photoshop&#8217;s-angle-gradient-tool/"><span>Read the full article I wrote at Webdesigner Depot.</span></a>
</p>
<p><img src="/content_resources/053-angled-gradients/arches-applied.jpg" alt="using Photoshop Curves to edit an angled gradient" /> <img src="/content_resources/053-angled-gradients/bunting.jpg" alt="a creative bunting graphic made with Photoshop's angled gradient tool" /> </p>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/imagery/exploring-photoshop-angle-gradient-tool/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on applying duotones to data</title>
		<link>http://benthinkin.net/articles/imagery/applying-duotones-to-data</link>
		<comments>http://benthinkin.net/articles/imagery/applying-duotones-to-data#comments</comments>
		<pubDate>Mon, 19 Jul 2010 13:55:04 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Imagery]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[visualization]]></category>
		<category><![CDATA[WDD]]></category>

		<guid isPermaLink="false">http://benthinkin.net/?p=90</guid>
		<description><![CDATA[The ability to tint black-and-white photographs with color has been a staple of photography for decades, and modern image editors make warming and cooling grayscale images a snap. This concept of a steady progression of shades can be used to present information as well.]]></description>
			<content:encoded><![CDATA[<p>
	The ability to tint black-and-white photographs with color has been a staple of photography for decades, and modern image editors make warming and cooling grayscale images a snap. This concept of a steady progression of shades can be used to present information as well.
</p>
<p>
	This technique of tinting digital photos works well for presenting information and can improve usability. Just as a gradient shows a range of colors, a monotone or duotone can be used to show a range of data.
</p>
<p>
	<a href="http://www.webdesignerdepot.com/2010/07/applying-duotones-to-data/"><span>Read the full article I wrote at Webdesigner Depot.</span></a>
</p>
<p>
	<img src="/content_resources/052-duotone-data/critical-point-2.png" alt="using different tones to denote changes in data" /></p>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/imagery/applying-duotones-to-data/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to manage a controlled collision of type and imagery</title>
		<link>http://benthinkin.net/articles/imagery/how-to-manage-a-controlled-collision-of-type-and-imagery</link>
		<comments>http://benthinkin.net/articles/imagery/how-to-manage-a-controlled-collision-of-type-and-imagery#comments</comments>
		<pubDate>Thu, 15 Jul 2010 13:49:47 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Imagery]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[jpg]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[typography]]></category>
		<category><![CDATA[WDD]]></category>

		<guid isPermaLink="false">http://test.benthinkin.net/?p=69</guid>
		<description><![CDATA[Setting images into text mixes words&#8217; straightforward communication with photos&#8217; emotional implications. Words state; photos express. But conflicts result when the images get lost or the text becomes muddled. Or both. Images and text can successfully mix&#8212;if we follow some guidelines that balance readability in both text and images.]]></description>
			<content:encoded><![CDATA[<p>
	Setting images into text mixes words&#8217; straightforward communication with photos&#8217; emotional implications. Words state; photos express. But conflicts result when the images get lost or the text becomes muddled. Or both. Images and text can successfully mix&#8212;if we follow some guidelines that balance readability in both text and images.
</p>
<p>
	<a href="http://www.webdesignerdepot.com/2010/07/mixing-type-and-imagery-how-to-manage-a-controlled-collision/"><span>Read the full article I wrote at Webdesigner Depot.</span></a>
</p>
<p>
	<img src="/content_resources/051-images-into-text/cut-outs.jpg" alt="insetting photos into type" />
</p>
<p>
	Above: Turning block-shaped photos into text means cutting into the image. The more cuts made, the greater a chance for cutting out something important.
</p>
<p>
	<img src="/content_resources/051-images-into-text/active-summer-2.jpg" alt="insetting photos into type" /></p>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/imagery/how-to-manage-a-controlled-collision-of-type-and-imagery/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big stature, small caps, good technique</title>
		<link>http://benthinkin.net/articles/imagery/big-stature-small-caps-good-technique</link>
		<comments>http://benthinkin.net/articles/imagery/big-stature-small-caps-good-technique#comments</comments>
		<pubDate>Tue, 06 Jul 2010 04:14:48 +0000</pubDate>
		<dc:creator>bbb</dc:creator>
				<category><![CDATA[Imagery]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[typography]]></category>
		<category><![CDATA[WDD]]></category>

		<guid isPermaLink="false">http://test.benthinkin.net/?p=5</guid>
		<description><![CDATA[Stately text doesn&#8217;t need to hurry. When used well, small caps make a design look stable and reliable. They can appear official or solemn. But like any technique, small caps requires understanding the <em>why</em> behind the <em>how.</em>]]></description>
			<content:encoded><![CDATA[<p>
	Few type treatments give dignity to design as efficiently as small capitals, or &#8220;small caps.&#8221; This technique keeps all letters in a line of text uppercase, but retains hierarchy by making the first letters of important words noticeably larger.
</p>
<p>
	Stately text doesn&#8217;t need to hurry. When used well, small caps make a design look stable and reliable. They can appear official or solemn. But like any technique, small caps requires understanding the <em>why</em> behind the <em>how.</em>
</p>
<p>
	<a href="http://www.webdesignerdepot.com/2010/07/tips-for-creating-big-stature-with-small-caps/"><span>Read the full article I wrote at Webdesigner Depot.</span></a>
</p>
<p>
	<img src="/content_resources/050-using-small-caps/stroke-weights-1.png" alt="applying stroke weights to small caps" /> <br />
	Above: The differences are subtle; the effect is profound.</p>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/imagery/big-stature-small-caps-good-technique/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From zero to layout: A redesign process</title>
		<link>http://benthinkin.net/articles/process/from-zero-to-layout-a-redesign-process</link>
		<comments>http://benthinkin.net/articles/process/from-zero-to-layout-a-redesign-process#comments</comments>
		<pubDate>Mon, 28 Jun 2010 21:16:31 +0000</pubDate>
		<dc:creator>bbb</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[case study]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://test.benthinkin.net/?p=9</guid>
		<description><![CDATA[When I began working on a one-page web project, my client asked about the process. How do you plan a single page? What leads from raw text to a finished product? Getting from concept to finished draft requires many steps, but each phase shares common traits.]]></description>
			<content:encoded><![CDATA[<p class="lead">
	When I began working on a one-page web project, my client asked about the process. How do you plan a single page? What leads from raw text to a finished product?
</p>
<p>
	This post describes the thought process behind a redesign from scratch. The same methods could be applied to many projects, but this time it began with flowers and errant backslashes. The Volunteer Coordinator at the <a href="http://www.sabot.org"><span>San Antonio Botanical Gardens</span></a> hired me to help redesign their volunteer page. The HTML was problematic, causing the images to disappear in Safari and Mobile Safari; downloads weren&#8217;t linked; the design was &#8220;unappealing.&#8221;
</p>
<p>
	At the time of this writing, we&#8217;re working on the final draft&#8212;using the same ideas below.
</p>
<p><img src="/content_resources/048-page-layout-process/before-after-volunteers.png" alt="the original page design and redesign" /> </p>
<h2>
	1. Gather the content<br />
</h2>
<p>
	Given that this page wouldn&#8217;t change more than once per month, we started by removing all formatting from the text. Reducing it to headings and paragraphs, plus a quick copy edit, gave us a realistic idea of how much text we had to work with. The client also found several photos of volunteers at work.
</p>
<p>
	<img src="/content_resources/048-page-layout-process/source-photos.jpg" alt="original photos from the client" />
</p>
<p>
	Photos &#169; the <a href="http://www.sabot.org">SA Botanical Gardens</a>.
</p>
<p><img src="/content_resources/048-page-layout-process/source-text.jpg" alt="illustration of the original text" /> </p>
<p>
	Images and text &#169; the <a href="http://www.sabot.org">SA Botanical Gardens</a>.
</p>
<p></p>
<h2>
	2. Plan for change<br />
</h2>
<p>
	Next I started second-guessing. What if the content tripled in length? What if we cut half of it? What if we had six or nine photos instead of three? What if the page width shrank from 773px to 320px? What if we could have more than one page? The web is a flexible place. Change happens.
</p>
<p>
	I&#8217;ve found that like design, clients and I work best with limits. So we set up some parameters:
</p>
<ul>
<li> The goal is to educate readers about the subject. If necessary, other pages will contain content that supports the overview. </li>
<li> The vital information is an introduction, a list of positions and ways for users to act (specifically, download an application form). </li>
<li> The site&#8217;s template and CMS require a page width of 743px after padding, but an infinite length. </li>
</ul>
<p>
	These facts created the framework from which I would design the page.
</p>
<p><img src="/content_resources/048-page-layout-process/possible-content-changes.png" alt="examples of what might happen with more or less content" /> </p>
<h2>
	3. Imagine with pixels, explain in person<br />
</h2>
<p>
	Using pencil and paper, I started doodling. One of my first ideas was for a detail: a new call to action button. (Visually, people volunteer by raising their hands. In every gardening photo I had, people wore gloves. It seemed to fit.)
</p>
<p>
	The client liked my new title, &#8220;grow with us.&#8221; I assembled two designs in Photoshop and we discussed them with the client. Especially for early revisions, I like to show designs in person or via chat. Not only can I gauge their reactions, but I&#8217;m on hand to explain the process: One photo large will get attention; the intro paragraph is the most important text; the button colors were chosen based on the rest of the site.
</p>
<p>
	But most importantly, I stress <em>that these are drafts.</em> A comp to me is a polished final revision to many clients. Understanding that these are rough ideas, no matter how official looking, is critical to my relationship with any client.
</p>
<p><img src="/content_resources/048-page-layout-process/example-drafts.jpg" alt="early drafts assembled in Photoshop" /> </p>
<h2>
	4. Revise the layout<br />
</h2>
<p>
	Several problems became apparent. First, while the drafts had good hierarchies, none had a clear structure. Thinking in blocks&#8212;in this case, stacks&#8212;would allow one section to expand or shrink without affecting the others. I used one of the site&#8217;s common colors to create subheads for each section below the introduction and elaborated on the intro text.
</p>
<p>
	In early drafts, I had the &#8220;volunteer!&#8221; button but nowhere to put it. It didn&#8217;t fit in the text, with a photo or in a column by itself. So I asked: What else do people need? We realized that we were neglecting other calls to action including an email newsletter signup and the opportunity to learn more. Two new buttons, using the project&#8217;s colors, completed the final section.
</p>
<p>
	<img src="/content_resources/048-page-layout-process/new-design.jpg" alt="the design in progress" />
</p>
<p></p>
<h2>
	5. Next&#8230;?<br />
</h2>
<p>
	The project is in progress, but the method of thinking &#8220;problems and solutions&#8221; applies at each phase.</p>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/process/from-zero-to-layout-a-redesign-process/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Photoshop Curves does more than change highlights and shadows</title>
		<link>http://benthinkin.net/articles/imagery/taking-photoshop-s-curves-beyond-highlights-and-shadows</link>
		<comments>http://benthinkin.net/articles/imagery/taking-photoshop-s-curves-beyond-highlights-and-shadows#comments</comments>
		<pubDate>Tue, 22 Jun 2010 08:56:22 +0000</pubDate>
		<dc:creator>bbb</dc:creator>
				<category><![CDATA[Imagery]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[WDD]]></category>

		<guid isPermaLink="false">http://test.benthinkin.net/uncategorized/taking-photoshop-s-curves-beyond-highlights-and-shadows</guid>
		<description><![CDATA[Photoshop&#8217;s Curves has long been associated with making images brighter or darker. But few people know that it can also change color with greater degrees of control than the Hue/Saturation or Color Balance controls. From slight selection changes to creating great duotones, Curves is a powerful tool to master... if you&#8217;re willing to practice.]]></description>
			<content:encoded><![CDATA[<p>
	Photoshop&#8217;s Curves has long been associated with making images brighter or darker. But few people know that it can also change color with greater degrees of control than the Hue/Saturation or Color Balance controls.
</p>
<p>
	From slight selection changes to creating great duotones, Curves is a powerful tool to master&#8230; if you&#8217;re willing to practice.</p>
<p><p>
	<a href="http://www.webdesignerdepot.com/2010/06/taking-photoshops-curves-beyond-highlights-and-shadows/"><span>Read the full article I wrote at Webdesigner Depot.</span></a>
</p>
<p>
Related: <a href="http://benthinkin.net/articles/fun-with-curves"><span>Examples of coloring with Curves</span></a>
</p>
<p>
<img src="/content_resources/047-how-curves-works/color-cast-2.jpg" alt="" /> <br />
Above: Using Curves to create a precise duotone from a grayscale photo.
</p>
<p>
<img src="/content_resources/047-how-curves-works/how-curves-works.png" alt="" /> <br />
Above: Curves is a grid of <em>before &amp; after.</em> The horizontal axis represents an image&#8217;s current values; the vertical represents change.</p>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/imagery/taking-photoshop-s-curves-beyond-highlights-and-shadows/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

