<?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>Wed, 25 Apr 2012 00:00:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Questions part 6: Aftermath&#160;and beyond</title>
		<link>http://benthinkin.net/articles/process/questions-part-6-aftermathand-beyond</link>
		<comments>http://benthinkin.net/articles/process/questions-part-6-aftermathand-beyond#comments</comments>
		<pubDate>Wed, 25 Apr 2012 00:00:51 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[critical thinking]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[problem solving]]></category>
		<category><![CDATA[questions]]></category>

		<guid isPermaLink="false">http://benthinkin.net/?p=484</guid>
		<description><![CDATA[There&#8217;s life after launch. Reassessing, maintaining and adjusting the website requires critical evaluation from time to time. I often tweak sites with questions like these. Part six of six.]]></description>
			<content:encoded><![CDATA[<p>When asked about the success of his large company, Herb Kelleher said, &#8220;We have a strategic plan. It&#8217;s called doing things.&#8221;</p>
<p>Process and plans are attempts to control the future by studying the past. Trouble is, past experiences are not tomorrow&#8217;s work. The popular formula of &#8220;discovery, design, execution, and launch&#8221; work on paper, but the inevitable bullet points that follow each step only work if you write the points yourself. Even in the same project, client and team will vary over lifespan of development. Creative projects demand improvisation.</p>
<p>Instead of a process, when working on a digital project like a site or an app, I have questions.</p>
<h2>Lifespan of the digital project</h2>
<ul>
<li>
		<strong>Is the digital project meeting its goals?</strong>
	</li>
<li>
		<strong>Is the digital project meeting goals that you didn&#8217;t know you had?</strong>
	</li>
<li>
		<strong>What questions do you have?</strong><br />
		You&#8217;re free to ask these questions. You&#8217;ll learn more if you ask your own.
	</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/process/questions-part-6-aftermathand-beyond/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Questions part 5: Launch</title>
		<link>http://benthinkin.net/articles/process/question-part-5-launch</link>
		<comments>http://benthinkin.net/articles/process/question-part-5-launch#comments</comments>
		<pubDate>Thu, 19 Apr 2012 00:00:30 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[problem solving]]></category>
		<category><![CDATA[questions]]></category>
		<category><![CDATA[stress]]></category>

		<guid isPermaLink="false">http://benthinkin.net/?p=480</guid>
		<description><![CDATA[Rather than the end of a project, launch is a milestone in a digital project&#8217;s lifetime. Part five of six.]]></description>
			<content:encoded><![CDATA[<p>When asked about the success of his large company, Herb Kelleher said, &#8220;We have a strategic plan. It&#8217;s called doing things.&#8221;</p>
<p>Process and plans are attempts to control the future by studying the past. Trouble is, past experiences are not tomorrow&#8217;s work. The popular formula of &#8220;discovery, design, execution, and launch&#8221; work on paper, but the inevitable bullet points that follow each step only work if you write the points yourself. Even in the same project, client and team will vary over lifespan of development. Creative projects demand improvisation.</p>
<p>Instead of a process, when working on a digital project like a site or an app, I have questions.</p>
<h2>During and after launch</h2>
<ul>
<li>
		<strong>Apps: Assuming it&#8217;s an iOS app, have you followed Apple&#8217;s criteria?</strong>
	</li>
<li>
		<strong>How will you celebrate?</strong><br />
		This isn&#8217;t trivial. Unexpected, tangible pats on the back are critical for long-term team morale.
	</li>
<li>
		<strong>Do you have a regular checkup plan?</strong>
	</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/process/question-part-5-launch/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Questions part 3: Testing</title>
		<link>http://benthinkin.net/articles/process/questions-part-3-testing</link>
		<comments>http://benthinkin.net/articles/process/questions-part-3-testing#comments</comments>
		<pubDate>Thu, 05 Apr 2012 20:00:18 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[problem preventing]]></category>
		<category><![CDATA[questions]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://benthinkin.net/?p=472</guid>
		<description><![CDATA[User testing can reveal funny (or disasterous) observations about a digital project. Accepting and dealing with the difference between expectations and reality requires a sense of humor and asking the right questions. Part three of six.]]></description>
			<content:encoded><![CDATA[<p>When asked about the success of his large company, Herb Kelleher said, &#8220;We have a strategic plan. It&#8217;s called doing things.&#8221;</p>
<p>Process and plans are attempts to control the future by studying the past. Trouble is, past experiences are not tomorrow&#8217;s work. The popular formula of &#8220;discovery, design, execution, and launch&#8221; work on paper, but the inevitable bullet points that follow each step only work if you write the points yourself. Even in the same project, client and team will vary over lifespan of development. Creative projects demand improvisation.</p>
<p>Instead of a process, when working on a digital project like a site or an app, I have questions.</p>
<h2>During testing</h2>
<ul>
<li>
		<strong>In what unexpected ways did people use the digital project?</strong>
	</li>
<li>
		<strong>How did people&#8217;s expectations differ from what their experience? Were they delighted or frustrated?</strong>
	</li>
<li>
		<strong>What did the user get done without hesitation?</strong><br />
		(Hint: That&#8217;s where you&#8217;re doing well.)
	</li>
<li>
		<strong>Did they compliment the digital project?</strong><br />
		If so, then it needs more work. But if they focus on getting something done, then you&#8217;re doing well. &#8220;Nice app&#8221; is bad. &#8220;Look what I did&#8221; is good.
	</li>
<li>
		<strong>If someone pokes fun at your digital project, pay attention.</strong><br />
		The ridiculous can be eye-opening.
	</li>
<li>
		<strong>Is the team still actively engaged?</strong><br />
		Lackluster projects often stem from a team just trying to fulfill a someone else&#8217;s requirements.
	</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/process/questions-part-3-testing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Questons part 2: Design</title>
		<link>http://benthinkin.net/articles/process/questons-part-2-design</link>
		<comments>http://benthinkin.net/articles/process/questons-part-2-design#comments</comments>
		<pubDate>Wed, 28 Mar 2012 00:00:30 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[critical thinking]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[problem preventing]]></category>
		<category><![CDATA[questions]]></category>

		<guid isPermaLink="false">http://benthinkin.net/?p=468</guid>
		<description><![CDATA[No two apps or websites, are the same. Neither are the roads between concept and first draft. But questions arise from wading knee-deep into code and pixels. Part two of six.]]></description>
			<content:encoded><![CDATA[<p>When asked about the success of his large company, Herb Kelleher said, &#8220;We have a strategic plan. It&#8217;s called doing things.&#8221;</p>
<p>Process and plans are attempts to control the future by studying the past. Trouble is, past experiences are not tomorrow&#8217;s work. The popular formula of &#8220;discovery, design, execution, and launch&#8221; work on paper, but the inevitable bullet points that follow each step only work if you write the points yourself. Even in the same project, client and team will vary over lifespan of development. Creative projects demand improvisation.</p>
<p>Instead of a process, when working on a digital project like a site or an app, I have questions.</p>
<h2>During development</h2>
<ul>
<li>
		<strong>How can the design make information easy to understand or manipulate?</strong>
	</li>
<li>
		<strong>How does the project <a href="http://www.informationisbeautiful.net/"><span>visually communicate</span></a> its goals?</strong>
	</li>
<li>
		<strong>What <a href="http://handcraftedcss.com/"><span>details can you add</span></a> that people won&#8217;t notice at first glance, but won&#8217;t detract from the user experience?</strong>
	</li>
<li>
		<strong>Apps: Does the app &#8220;feel&#8221; ergonomic, unobtrusive and useful?</strong><br />
		<a href="http://www.communi-k.net/interactive/mobile-apps/2011/09/mobile-websites-are-not-mobile-apps/"><span>App design is not website design</span></a>. Think of the app as a handheld object, like a kitchen utensil or a garden tool.
	</li>
<li>
		<strong>Does everyone who gets their hands dirty in code/graphics/UX/management have a say in the digital project&#8217;s outcome?</strong><br />
		A team who works with someone is worlds better than a team who works for someone. &#8220;What do you think?&#8221; is good to ask. &#8220;Hey, I had this idea&hellip;&#8221; is good to hear.
	</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/process/questons-part-2-design/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Questions part 1: Concept</title>
		<link>http://benthinkin.net/articles/process/questions-part-1-concept</link>
		<comments>http://benthinkin.net/articles/process/questions-part-1-concept#comments</comments>
		<pubDate>Wed, 21 Mar 2012 19:55:36 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[getting started]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[problem preventing]]></category>
		<category><![CDATA[questions]]></category>

		<guid isPermaLink="false">http://benthinkin.net/?p=464</guid>
		<description><![CDATA[How should one start a website or app? Everyone has different questions in the beginning. These are mine. Part one of six.]]></description>
			<content:encoded><![CDATA[<p>When asked about the success of his large company, Herb Kelleher said, &#8220;We have a strategic plan. It&#8217;s called doing things.&#8221;</p>
<p>Process and plans are attempts to control the future by studying the past. Trouble is, past experiences are not tomorrow&#8217;s work. The popular formula of &#8220;discovery, design, execution, and launch&#8221; work on paper, but the inevitable bullet points that follow each step only work if you write the points yourself. Even in the same project, client and team will vary over lifespan of development. Creative projects demand improvisation.</p>
<p>Instead of a process, when working on a digital project like a site or an app, I have questions.</p>
<h2>Concept</h2>
<ul>
<li>
		<strong>What problem(s) does this digital project solve?</strong><br />
		Great apps make a task easier, or fill a need that people (not the client) have.
	</li>
<li>
		<strong>Is the digital project more fun or more serious?</strong><br />
		The difference will inform its &#8220;persona.&#8221;
	</li>
<li>
		<strong>Is the digital project more of a utility or more of a game?</strong><br />
		Good utilities fulfill a need; good games hold attention.
	</li>
<li>
		<strong>When will the digital project launch?</strong><br />
		Nothing sets priorities like a deadline with consequences.
	</li>
<li>
		<strong>How will you promote the digital project? </strong><br />
		Word of mouth is great, but often requires a sustained kickstart.
	</li>
<li>
		<strong>How will you measure the success of (or lack of) the digital project?</strong>
	</li>
<li>
		<strong>On which platform(s) will this digital project run?</strong><br />
		<a href="http://www.abookapart.com/products/responsive-web-design"><span>There&#8217;s a difference</span></a> in designing for desktop browsers, screen readers, iPhones, iPads, or a combination thereof.
	</li>
<li>
		<strong>Who is responsible for what?</strong>
	</li>
<li>
		<strong>Do the stakeholders want to educate, entertain or empower people, or do they want an digital project?</strong><br />
		<a href="http://www.techrepublic.com/blog/tech-manager/technical-solutions-looking-for-a-problem/6996"><span>Solutions without problems</span></a> can work, but rarely thrive.
	</li>
<li>
		<strong>Does the client want to copy the success of others?</strong><br />
		&#8220;Isn&#8217;t there a better way to&hellip;?&#8221; is good. &#8220;I love this app/website/graphic/tool/gimmick. Can you make one?&#8221; is bad.
	</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://benthinkin.net/articles/process/questions-part-1-concept/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
	</channel>
</rss>

